@liberfi.io/client 0.3.86 → 0.3.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/phase3Http.ts","../src/utils.ts","../src/client.ts"],"names":["NotImplementedError","method","detail","isNotImplementedError","error","DEFAULT_SERVER_URL","resolveAccessToken","provider","appendQuery","params","key","value","joinBaseUrl","baseUrl","path","trimmedBase","normalizedPath","request","ctx","query","url","k","v","search","token","res","body","buildPhase3Context","accessToken","serverUrl","getWalletPnlDetails","chain","walletAddress","nullToUndefined","readStringField","input","keys","readDeveloperAddress","record","extra","extension","toChainDTO","Chain","ChainSymbol","toResolutionDTO","resolution","Resolution","toSortDirectionDTO","direction","toSearchFieldDTO","field","SearchSortBy","toFieldDTO","TokenField","toRangeFiltersDTO","filters","it","cond","SafeBigNumber","fromChainDTO","fromTokenCreatorDTO","fromTokenDTO","fromTokenStatsDTO","fromTokenMarketDataDTO","fromSdkDevTokenDTO","metadata","parseTokenStatsByResolution","toOptionalNumber","period","fromTokenLiquidityDTO","fromRankingPoolDexDTO","fromRankingPoolBalanceDTO","fromRankingPoolDTO","mergeSubscribedUpdates","updates","merged","update","fromWsRankingPoolToSubscribed","tokenUpdate","fromWsRankingTokenListToSubscribed","fromTokenCandle","fromResolutionDTO","readOptionalString","readOptionalBoolean","readOptionalNumber","firstDefined","values","readLegacyBoolean","hasPositiveRatio","asRecord","asArray","readRawStatusFlag","status","hasRawObjectEntries","readRawTransferable","readRawMaxBurnRatio","raw","dex","max","item","burnPercent","ratio","readRawTop10HoldersRatio","holders","top10","total","holder","percent","readRawMetadataMutable","fromSolanaGoPlusRaw","isMintable","isFreezable","isClosable","hasTransferFee","lpBurnRatio","fromGoPlusSecurity","fromHoneypotSecurity","fromSerializedSecurity","fromLockInfo","fromPrivilegeInfo","findMintPrivilege","privileges","privilege","fromTokenSecurity","legacy","goplus","honeypot","serialized","lockInfo","solanaRawSecurity","mintPrivilege","devTokenBurnRatio","hasBlacklist","isHoneypot","isOpenSource","isOwnershipRenounced","buyTaxRatio","sellTaxRatio","solanaChains","EVM_NATIVE_ADDRESS","KYBERSWAP_NATIVE_SENTINEL","toJupiterMint","address","SOLANA_TOKENS","toKyberSwapMint","effectiveDex","toMintForDex","toMintForRoute","toSwapRouteInput","inputMint","outputMint","SwapMode","SwapRouteInputSwapMode","toSendTxInput","toDateFromMs","ms","toDateFromUnixLikeTimestamp","toTagArray","fromRawTokenHolder","fromTokenHolderPage","fromSdkTokenHolderPage","fromSdkTokenTopTraderPage","trader","fromSdkDevTokenPage","fromTokenPage","pageExtra","fromSwapRoute","fromLatestBlock","fromSendTxResult","fromWalletPortfolios","portfolios","fromWalletPnlSummary","fromPnlItemDTO","fromPnlDetailsPage","summaryExtra","fromWalletNetWorthByTokens","fromPnlDetailItems","fromTradePage","fromTradeDetailDTO","isBuy","fromSdkActivityPage","fromActivityPage","fromActivityDetailDTO","type","time","fromTokenSubscribed","fromTokenMetadataSubscribed","fromWsCandle","fromWsTokenStats","timeframes","result","tf","buys","sells","buyers","sellers","buyVolumeInUsd","sellVolumeInUsd","trades","price","openInUsd","closeInUsd","totalTrades","totalTraders","totalVolumesInUsd","priceChange","fromWsTokenMarketDataFromStats","fromWsTokenDataSubscribed","fromWsTokenHolderToSubscribed","fromWsTokenSupplyToSubscribed","fromWsTokenBondingCurveToSubscribed","fromWsTokenMarketDataFromHolder","fromWsTokenLiquidityToSubscribed","WsMetricType","fromWsTokenMaxLiquidityToSubscribed","fromWsTokenTotalLiquidityToSubscribed","fromWsTradeActivity","deriveWsTokenPriceInUsd","fromWsActivity","amountInUsd","amount","amountBn","toActivitySortByDTO","sortBy","sortDirection","ActivitySortBy","toHolderSortByDTO","HolderSortBy","toHolderSortDirectionDTO","Client","_Client","options","ChainStreamClient","addresses","c","security","stats","traders","TraderSortBy","marketData","_options","RankingPoolType","pool","tokenPage","route","latestBlock","txHash","timeout","success","chainParam","netWorth","pnl","detailsPage","PnlResolution","SdkPositionState","PnlSortBy","tokenAddresses","_chain","_address","creator","tokens","callback","chainDTO","uniqueAddresses","subs","data","stream","s","rankingSub","WsChannelType","d","WsRankingType","bondingSub","base","qs","decimals","divisor","whole","fracStr","nativeAddr","nativePortfolio","p","parseLaunchPlatformFromFilters","target","tradePage","page","channelType","rankingType","filter"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\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 * `@chainstream-io/sdk@2.1.12` still does not expose every Phase 3 public\n * contract this package supports, including the `realizedPnl` holder sort and\n * the `90d` wallet PnL resolution.\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\n/**\n * Join the base URL and an endpoint path while preserving the base URL's\n * own path component.\n *\n * `new URL(\"/v2/foo\", \"https://host/api\")` would return\n * `https://host/v2/foo` because, per the WHATWG URL spec, an absolute path\n * replaces the base URL's path entirely. That breaks consumers that proxy\n * the API behind a path prefix (e.g. Next.js rewrites under `/dex-api`),\n * because the prefix gets silently dropped and the upstream request 404s.\n *\n * We concatenate strings instead so `https://host/api` + `/v2/foo` becomes\n * `https://host/api/v2/foo` regardless of trailing/leading slashes.\n */\nfunction joinBaseUrl(baseUrl: string, path: string): string {\n const trimmedBase = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return trimmedBase + normalizedPath;\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(joinBaseUrl(ctx.baseUrl, path));\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 amountInNative?: string | null;\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 transferInAmountInUsd?: string | null;\n transferInCount?: string | null;\n transferOutAmountInUsd?: string | null;\n transferOutCount?: 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 transferInAmountInUsd?: string | null;\n transferInCount?: string | null;\n transferOutAmountInUsd?: string | null;\n transferOutCount?: string | null;\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 PageResponseTokenHolder,\n PageResponseTokenTopTrader,\n PageResponseDevToken,\n DevToken as SdkDevToken,\n DexPool,\n RankingPool,\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 WsRankingTokenList,\n WsRankingPool,\n WsMetricType,\n WalletPnlSummary,\n PnlDetailItem,\n PnlDetailsResult,\n NetWorthByTokensResult,\n BlockchainLatestBlock as SdkBlockchainLatestBlock,\n TokenSecurityResponse,\n GoPlusSecurityInfo,\n HoneypotIsSecurityInfo,\n SerializedSecurityInfo,\n LockInfo,\n PrivilegeInfo,\n} from \"@chainstream-io/sdk\";\nimport {\n Activity,\n ActivityType,\n BlockchainLatestBlock,\n Chain,\n CursorList,\n Pool,\n PoolBalance,\n PoolDex,\n PoolSubscribed,\n Portfolio,\n PortfolioPnl,\n SearchTokenCursorList,\n SendTxParams,\n SendTxResult,\n SwapMode,\n SwapParams,\n SwapRoute,\n Token,\n TokenCandle,\n TokenCreator,\n TokenFieldOption,\n TokenFilterOption,\n TokenHolder,\n TokenTopTrader,\n TokenLiquidity,\n TokenGoPlusSecurity,\n TokenHoneypotSecurity,\n TokenLockInfo,\n TokenMarketData,\n TokenPrivilegeInfo,\n TokenResolution,\n TokenSecurity,\n TokenSerializedSecurity,\n TokenStats,\n TokenStatsByResolution,\n TokenSubscribed,\n Trade,\n WalletPnl,\n WalletPortfolioPnls,\n WalletPortfolios,\n WalletTag,\n} from \"@liberfi.io/types\";\nimport { SafeBigNumber, SOLANA_TOKENS } from \"@liberfi.io/utils\";\nimport type {\n CursorPageDTO,\n Phase3ActivityDTO,\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\nfunction readStringField(\n input: Record<string, unknown> | undefined,\n ...keys: string[]\n): string | undefined {\n if (!input) return undefined;\n for (const key of keys) {\n const value = input[key];\n if (typeof value === \"string\" && value.length > 0) return value;\n }\n return undefined;\n}\n\nfunction readDeveloperAddress(input: unknown): string | undefined {\n if (!input || typeof input !== \"object\") return undefined;\n const record = input as Record<string, unknown>;\n const extra = record.extra;\n const extension = record.extension;\n return (\n readStringField(\n record,\n \"developerAddress\",\n \"devAddress\",\n \"creatorAddress\",\n \"creator\",\n \"deployerAddress\",\n \"deployer\",\n \"mintAuthority\",\n \"updateAuthority\",\n ) ??\n readStringField(\n extra && typeof extra === \"object\"\n ? (extra as Record<string, unknown>)\n : undefined,\n \"developerAddress\",\n \"devAddress\",\n \"creatorAddress\",\n \"creator\",\n \"deployerAddress\",\n \"deployer\",\n ) ??\n readStringField(\n extension && typeof extension === \"object\"\n ? (extension as Record<string, unknown>)\n : undefined,\n \"developerAddress\",\n \"devAddress\",\n \"creatorAddress\",\n \"creator\",\n \"deployerAddress\",\n \"deployer\",\n )\n );\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: 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: 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<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 developerAddress: readDeveloperAddress(input),\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 fromSdkDevTokenDTO(chain: Chain, input: SdkDevToken): Token {\n const metadata = input.metadata;\n const extra = metadata.extra;\n return {\n chain,\n name: metadata.name || input.address,\n symbol: metadata.symbol || input.address,\n address: input.address,\n decimals: metadata.decimals ? parseInt(metadata.decimals) : 0,\n image: metadata.imageUrl ?? undefined,\n description: metadata.description ?? undefined,\n creators: metadata.tokenCreators?.map(fromTokenCreatorDTO),\n developerAddress: readDeveloperAddress(metadata),\n launchedFrom: {\n programAddress: extra?.launchFromProgramAddress ?? undefined,\n protocolFamily: 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: extra?.migratedToProgramAddress ?? undefined,\n protocolFamily: extra?.migratedToProtocolFamily ?? undefined,\n poolAddress: extra?.migratedToPoolAddress ?? undefined,\n migratedAt: extra?.migratedAt ? new Date(extra.migratedAt) : undefined,\n },\n socialMedias: metadata.socialMedias\n ? Object.fromEntries(\n Object.entries(metadata.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: metadata.tokenCreatedAt\n ? new Date(metadata.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 protocolName: input.protocolName ?? undefined,\n tvl: input.tvlInSol ?? undefined,\n tvlInUsd: input.tvlInUsd ?? undefined,\n };\n}\n\nfunction fromRankingPoolDexDTO(\n input: RankingPool[\"dex\"] | WsRankingPool[\"dex\"],\n): PoolDex | undefined {\n if (!input) return undefined;\n return {\n image: \"image\" in input ? (input.image ?? undefined) : undefined,\n programAddress: input.programAddress ?? undefined,\n protocolFamily: input.protocolFamily ?? undefined,\n protocolName: input.protocolName ?? undefined,\n };\n}\n\nfunction fromRankingPoolBalanceDTO(\n input: RankingPool[\"balance\"] | WsRankingPool[\"balance\"],\n): PoolBalance | undefined {\n if (!input) return undefined;\n return {\n poolAddress: input.poolAddress,\n tokenAAddress: input.tokenAAddress,\n tokenALiquidityInUsd: input.tokenALiquidityInUsd,\n tokenBAddress: input.tokenBAddress,\n tokenBLiquidityInUsd: input.tokenBLiquidityInUsd,\n };\n}\n\nexport function fromRankingPoolDTO(chain: Chain, input: RankingPool): Pool {\n return {\n chain,\n poolAddress: input.poolAddress,\n tokenAAddress: input.tokenAAddress,\n tokenBAddress: input.tokenBAddress,\n createdAt: input.createdAtMs ? new Date(input.createdAtMs) : undefined,\n dex: fromRankingPoolDexDTO(input.dex),\n token: input.token ? fromTokenDTO(input.token) : undefined,\n balance: fromRankingPoolBalanceDTO(input.balance),\n };\n}\n\nfunction mergeSubscribedUpdates(\n updates: Array<TokenSubscribed>,\n): TokenSubscribed | undefined {\n if (updates.length === 0) return undefined;\n return updates.reduce<TokenSubscribed>(\n (merged, update) => ({\n ...merged,\n ...Object.fromEntries(\n Object.entries(update).filter(([, value]) => value !== undefined),\n ),\n stats: update.stats ?? merged.stats,\n marketData: update.marketData\n ? { ...merged.marketData, ...update.marketData }\n : merged.marketData,\n socialMedias: update.socialMedias\n ? { ...merged.socialMedias, ...update.socialMedias }\n : merged.socialMedias,\n launchedFrom: update.launchedFrom\n ? { ...merged.launchedFrom, ...update.launchedFrom }\n : merged.launchedFrom,\n migratedTo: update.migratedTo\n ? { ...merged.migratedTo, ...update.migratedTo }\n : merged.migratedTo,\n }),\n updates[0],\n );\n}\n\nexport function fromWsRankingPoolToSubscribed(\n chain: Chain,\n input: WsRankingPool,\n): PoolSubscribed {\n const tokenUpdate = input.token\n ? mergeSubscribedUpdates(\n fromWsRankingTokenListToSubscribed(chain, input.token),\n )\n : undefined;\n\n return {\n chain,\n poolAddress: input.poolAddress,\n tokenAAddress: input.tokenAAddress,\n tokenBAddress: input.tokenBAddress,\n createdAt: input.createdAtMs ? new Date(input.createdAtMs) : undefined,\n dex: fromRankingPoolDexDTO(input.dex),\n token: tokenUpdate,\n balance: fromRankingPoolBalanceDTO(input.balance),\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 athMarketCapInUsd: input.athMarketCapInUsd ?? undefined,\n price: input.priceInNative ?? input.priceInSol ?? undefined,\n priceInUsd: input.priceInUsd ?? undefined,\n tvl: input.totalTvlInSol ?? undefined,\n tvlInUsd: input.totalTvlInUsd ?? undefined,\n maxPoolTvl: input.maxPoolTvlInSol ?? undefined,\n maxPoolTvlInUsd: input.maxPoolTvlInUsd ?? 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 volumeInTokenAmount: nullToUndefined(input.volumeInTokenAmount),\n trades: input.trades ?? undefined,\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\nfunction readOptionalString(\n value: string | null | undefined,\n): string | undefined {\n return value ?? undefined;\n}\n\nfunction readOptionalBoolean(\n value: boolean | null | undefined,\n): boolean | undefined {\n return value ?? undefined;\n}\n\nfunction readOptionalNumber(\n value: number | null | undefined,\n): number | undefined {\n return value ?? undefined;\n}\n\nfunction firstDefined<T>(...values: Array<T | undefined>): T | undefined {\n return values.find((value) => value !== undefined);\n}\n\nfunction readLegacyBoolean(value: unknown): boolean | undefined {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"number\") {\n if (value === 1) return true;\n if (value === 0) return false;\n }\n if (typeof value === \"string\") {\n if (value === \"1\" || value.toLowerCase() === \"true\") return true;\n if (value === \"0\" || value.toLowerCase() === \"false\") return false;\n }\n return undefined;\n}\n\nfunction hasPositiveRatio(value: string | undefined): boolean | undefined {\n if (value === undefined) return undefined;\n return new SafeBigNumber(value).gt(0);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as Record<string, unknown>;\n}\n\nfunction asArray(value: unknown): unknown[] | undefined {\n return Array.isArray(value) ? value : undefined;\n}\n\nfunction readRawStatusFlag(value: unknown): boolean | undefined {\n const record = asRecord(value);\n const status = record?.status;\n if (status === \"1\" || status === 1 || status === true) return true;\n if (status === \"0\" || status === 0 || status === false) return false;\n return undefined;\n}\n\nfunction hasRawObjectEntries(value: unknown): boolean | undefined {\n const record = asRecord(value);\n if (!record) return undefined;\n return Object.keys(record).length > 0;\n}\n\nfunction readRawTransferable(value: unknown): boolean | undefined {\n if (value === \"0\" || value === 0 || value === false) return true;\n if (value === \"1\" || value === 1 || value === true) return false;\n return undefined;\n}\n\nfunction readRawMaxBurnRatio(raw: Record<string, unknown>): string | undefined {\n const dex = asArray(raw.dex);\n if (!dex) return undefined;\n\n let max: SafeBigNumber | undefined;\n for (const item of dex) {\n const burnPercent = asRecord(item)?.burn_percent;\n if (burnPercent === null || burnPercent === undefined) continue;\n if (typeof burnPercent !== \"number\" && typeof burnPercent !== \"string\") {\n continue;\n }\n const ratio = new SafeBigNumber(burnPercent).div(100);\n if (!max || ratio.gt(max)) max = ratio;\n }\n\n return max?.toString();\n}\n\nfunction readRawTop10HoldersRatio(\n raw: Record<string, unknown>,\n): string | undefined {\n const holders = asArray(raw.holders);\n if (!holders) return undefined;\n\n const top10 = holders.slice(0, 10);\n if (top10.length === 0) return undefined;\n\n let total = new SafeBigNumber(0);\n for (const holder of top10) {\n const percent = asRecord(holder)?.percent;\n if (typeof percent !== \"string\" && typeof percent !== \"number\") {\n continue;\n }\n total = total.plus(percent);\n }\n\n return total.toString();\n}\n\nfunction readRawMetadataMutable(\n raw: Record<string, unknown>,\n): boolean | undefined {\n return readRawStatusFlag(raw.metadata_mutable);\n}\n\nfunction fromSolanaGoPlusRaw(raw: unknown): Partial<TokenSecurity> | undefined {\n try {\n const record = asRecord(raw);\n if (!record) return undefined;\n\n const isMintable = readRawStatusFlag(record.mintable);\n const isFreezable = readRawStatusFlag(record.freezable);\n const isClosable = readRawStatusFlag(record.closable);\n const hasTransferFee = hasRawObjectEntries(record.transfer_fee);\n const lpBurnRatio = readRawMaxBurnRatio(record);\n\n return {\n hasTransferFee,\n isTransferFeeUpgradable: readRawStatusFlag(\n record.transfer_fee_upgradable,\n ),\n isTransferable: readRawTransferable(record.non_transferable),\n isFreezable,\n isClosable,\n isBalanceMutableAuthorityActive: readRawStatusFlag(\n record.balance_mutable_authority,\n ),\n isMetadataMutable: readRawMetadataMutable(record),\n isMintable,\n isMintAuthorityRenounced:\n isMintable === undefined ? undefined : !isMintable,\n isLpBurned: hasPositiveRatio(lpBurnRatio),\n lpBurnRatio,\n top10HoldersRatio: readRawTop10HoldersRatio(record),\n };\n } catch {\n return undefined;\n }\n}\n\nfunction fromGoPlusSecurity(\n input: GoPlusSecurityInfo | null | undefined,\n): TokenGoPlusSecurity | undefined {\n if (!input) return undefined;\n return {\n available: input.available,\n buyTaxRatio: readOptionalString(input.buyTax),\n sellTaxRatio: readOptionalString(input.sellTax),\n chainSupported: readOptionalBoolean(input.chainSupported),\n holderCount: readOptionalString(input.holderCount),\n hasBlacklist: readOptionalBoolean(input.isBlacklisted),\n isFreezable: readOptionalBoolean(input.isFreezable),\n isHoneypot: readOptionalBoolean(input.isHoneypot),\n isMintable: readOptionalBoolean(input.isMintable),\n isOpenSource: readOptionalBoolean(input.isOpenSource),\n isProxy: readOptionalBoolean(input.isProxy),\n isRenounced: readOptionalBoolean(input.isRenounced),\n lastRefreshedAt: readOptionalString(input.lastRefreshedAt),\n lpHolderCount: readOptionalString(input.lpHolderCount),\n ownerAddress: readOptionalString(input.ownerAddress),\n raw: input.raw,\n totalSupply: readOptionalString(input.totalSupply),\n };\n}\n\nfunction fromHoneypotSecurity(\n input: HoneypotIsSecurityInfo | null | undefined,\n): TokenHoneypotSecurity | undefined {\n if (!input) return undefined;\n return {\n available: input.available,\n averageTaxRatio: readOptionalString(input.averageTax),\n buyTaxRatio: readOptionalString(input.buyTax),\n canNotSell: readOptionalNumber(input.canNotSell),\n canSell: readOptionalNumber(input.canSell),\n chainSupported: readOptionalBoolean(input.chainSupported),\n highTaxRatio: readOptionalString(input.highTax),\n honeypotResult: readOptionalString(input.honeypotResult),\n isHoneypot: readOptionalBoolean(input.isHoneypot),\n isOpenSource: readOptionalBoolean(input.isOpenSource),\n isRenounced: readOptionalBoolean(input.isRenounced),\n lastRefreshedAt: readOptionalString(input.lastRefreshedAt),\n raw: input.raw,\n sellTaxRatio: readOptionalString(input.sellTax),\n };\n}\n\nfunction fromSerializedSecurity(\n input: SerializedSecurityInfo | null | undefined,\n): TokenSerializedSecurity | undefined {\n if (!input) return undefined;\n return {\n available: input.available,\n chainSupported: readOptionalBoolean(input.chainSupported),\n isOpenSource: readOptionalBoolean(input.isOpenSource),\n isProxy: readOptionalBoolean(input.isProxy),\n isRenounced: readOptionalBoolean(input.isRenounced),\n isSafe: readOptionalBoolean(input.isSafe),\n lastRefreshedAt: readOptionalString(input.lastRefreshedAt),\n launchpadName: readOptionalString(input.launchpadName),\n ownerAddress: readOptionalString(input.ownerAddress),\n raw: input.raw,\n sourceType: readOptionalString(input.sourceType),\n vulnCount: readOptionalNumber(input.vulnCount),\n vulnCriticalCount: readOptionalNumber(input.vulnCriticalCount),\n vulnMitigatedCount: readOptionalNumber(input.vulnMitigatedCount),\n };\n}\n\nfunction fromLockInfo(\n input: LockInfo | null | undefined,\n): TokenLockInfo | undefined {\n if (!input) return undefined;\n return {\n isLocked: readOptionalBoolean(input.isLocked),\n leftLockPercentRatio: readOptionalString(input.leftLockPercent),\n lockDetail: readOptionalString(input.lockDetail),\n lockPercentRatio: readOptionalString(input.lockPercent),\n lockTags: input.lockTags,\n };\n}\n\nfunction fromPrivilegeInfo(input: PrivilegeInfo): TokenPrivilegeInfo {\n return {\n address: readOptionalString(input.address),\n isRenounced: readOptionalBoolean(input.isRenounced),\n name: readOptionalString(input.name),\n };\n}\n\nfunction findMintPrivilege(\n privileges: TokenPrivilegeInfo[] | undefined,\n): TokenPrivilegeInfo | undefined {\n return privileges?.find((privilege) =>\n privilege.name?.toLowerCase().includes(\"mint\"),\n );\n}\n\nexport function fromTokenSecurity(\n input: TokenSecurityResponse | Record<string, unknown>,\n): TokenSecurity {\n const raw = input as TokenSecurityResponse & Record<string, unknown>;\n const legacy = input as Record<string, unknown>;\n const goplus = fromGoPlusSecurity(raw.goplus);\n const honeypot = fromHoneypotSecurity(raw.honeypot);\n const serialized = fromSerializedSecurity(raw.serialized);\n const lockInfo = fromLockInfo(raw.lockInfo);\n const solanaRawSecurity = fromSolanaGoPlusRaw(raw.goplus?.raw);\n const privileges = raw.privileges?.map(fromPrivilegeInfo) ?? undefined;\n const mintPrivilege = findMintPrivilege(privileges);\n const devTokenBurnRatio = firstDefined(\n readOptionalString(raw.devTokenBurnRatio),\n solanaRawSecurity?.lpBurnRatio,\n );\n const hasBlacklist = firstDefined(goplus?.hasBlacklist);\n const isHoneypot = firstDefined(honeypot?.isHoneypot, goplus?.isHoneypot);\n const isOpenSource = firstDefined(\n serialized?.isOpenSource,\n honeypot?.isOpenSource,\n goplus?.isOpenSource,\n );\n const isOwnershipRenounced = firstDefined(\n serialized?.isRenounced,\n honeypot?.isRenounced,\n goplus?.isRenounced,\n );\n const buyTaxRatio = firstDefined(honeypot?.buyTaxRatio, goplus?.buyTaxRatio);\n const sellTaxRatio = firstDefined(\n honeypot?.sellTaxRatio,\n goplus?.sellTaxRatio,\n );\n\n return {\n address: readOptionalString(raw.address),\n chain: readOptionalString(raw.chain),\n sourcesAvailable: raw.sourcesAvailable ?? undefined,\n goplus,\n honeypot,\n serialized,\n lockInfo,\n privileges,\n devTokenBurnAmount: readOptionalString(raw.devTokenBurnAmount),\n devTokenBurnRatio,\n lpBurnRatio: solanaRawSecurity?.lpBurnRatio,\n top10HoldersRatio: solanaRawSecurity?.top10HoldersRatio,\n isShowAlert: readOptionalBoolean(raw.isShowAlert),\n hasTransferFee: firstDefined(\n readLegacyBoolean(legacy.hasTransferFee),\n solanaRawSecurity?.hasTransferFee,\n ),\n isTransferFeeUpgradable: firstDefined(\n readLegacyBoolean(legacy.isTransferFeeUpgradable),\n solanaRawSecurity?.isTransferFeeUpgradable,\n ),\n isTransferable: firstDefined(\n readLegacyBoolean(legacy.isTransferable),\n solanaRawSecurity?.isTransferable,\n ),\n isFreezable: firstDefined(\n readOptionalBoolean(raw.isFreezable),\n goplus?.isFreezable,\n readLegacyBoolean(legacy.isFreezable),\n solanaRawSecurity?.isFreezable,\n ),\n isClosable: firstDefined(\n readLegacyBoolean(legacy.isClosable),\n solanaRawSecurity?.isClosable,\n ),\n isBalanceMutableAuthorityActive:\n solanaRawSecurity?.isBalanceMutableAuthorityActive,\n isMetadataMutable: solanaRawSecurity?.isMetadataMutable,\n isMintable: firstDefined(\n readOptionalBoolean(raw.isMintable),\n goplus?.isMintable,\n solanaRawSecurity?.isMintable,\n ),\n isMintAuthorityRenounced: firstDefined(\n mintPrivilege?.isRenounced,\n solanaRawSecurity?.isMintAuthorityRenounced,\n ),\n hasBlacklist,\n isLpBurned: firstDefined(\n solanaRawSecurity?.isLpBurned,\n hasPositiveRatio(devTokenBurnRatio),\n ),\n isOpenSource,\n isHoneypot,\n isOwnershipRenounced,\n isLpLocked: lockInfo?.isLocked,\n buyTaxRatio,\n sellTaxRatio,\n averageTaxRatio: honeypot?.averageTaxRatio,\n maxTaxRatio: honeypot?.highTaxRatio,\n isSerializedSafe: serialized?.isSafe,\n serializedVulnCount: serialized?.vulnCount,\n serializedCriticalVulnCount: serialized?.vulnCriticalCount,\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 *\n * The public `SwapDex` type is an open union (`\"jupiter\" | \"kyberswap\" | (string & {})`)\n * so consumers can pass new aggregator names without a type update. Internally\n * we only know how to convert mints for the two known DEXes; unknown values\n * fall back to the chain-inferred default.\n */\nfunction effectiveDex(params: SwapParams): \"jupiter\" | \"kyberswap\" {\n if (params.dex === \"jupiter\") return \"jupiter\";\n if (params.dex === \"kyberswap\") return \"kyberswap\";\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: 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 === 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: 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 toDateFromUnixLikeTimestamp(\n value: number | null | undefined,\n): Date | undefined {\n if (value == null) return undefined;\n return new Date(value < 1e12 ? value * 1000 : value);\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\ntype RawTokenHolderLike = Phase3TokenHolderDTO &\n Partial<PageResponseTokenHolder[\"data\"][number]>;\n\nfunction fromRawTokenHolder(holder: RawTokenHolderLike): TokenHolder {\n return {\n accountAddress: nullToUndefined(holder.accountAddress),\n address: holder.walletAddress,\n accuAmount: nullToUndefined(holder.accuAmount),\n accuCost: nullToUndefined(holder.accuCost),\n addrType: nullToUndefined(holder.addrType),\n addressLabel: nullToUndefined(holder.addressLabel),\n amount: holder.amount,\n amountInUsd: holder.amountInUsd,\n amountInNative: nullToUndefined(holder.amountInNative),\n ratio: holder.percentage,\n avgBuyPriceUsd: nullToUndefined(holder.avgBuyPriceUsd),\n avgCostUsd: nullToUndefined(holder.avgCostUsd),\n avgSellPriceUsd: nullToUndefined(holder.avgSellPriceUsd),\n buyAmountCur: nullToUndefined(holder.buyAmountCur),\n buyVolumeNative: nullToUndefined(holder.buyVolumeNative),\n buyVolumeUsd: nullToUndefined(holder.buyVolumeUsd),\n createdAt: toDateFromUnixLikeTimestamp(holder.createdAt),\n endHoldingAt: toDateFromUnixLikeTimestamp(holder.endHoldingAt),\n exchange: nullToUndefined(holder.exchange),\n firstBuyTime: toDateFromUnixLikeTimestamp(holder.firstBuyTime),\n historyBoughtCost: nullToUndefined(holder.historyBoughtCost),\n historyBoughtFee: nullToUndefined(holder.historyBoughtFee),\n historySoldFee: nullToUndefined(holder.historySoldFee),\n historySoldIncome: nullToUndefined(holder.historySoldIncome),\n historyTransferInAmount: nullToUndefined(holder.historyTransferInAmount),\n historyTransferInCost: nullToUndefined(holder.historyTransferInCost),\n historyTransferOutAmount: nullToUndefined(holder.historyTransferOutAmount),\n historyTransferOutFee: nullToUndefined(holder.historyTransferOutFee),\n historyTransferOutIncome: nullToUndefined(holder.historyTransferOutIncome),\n isClosed: nullToUndefined(holder.isClosed),\n isNew: nullToUndefined(holder.isNew),\n isTransferIn: nullToUndefined(holder.isTransferIn),\n lastActiveAt: toDateFromUnixLikeTimestamp(holder.lastActiveAt),\n lastBlock: nullToUndefined(holder.lastBlock),\n lossCount: nullToUndefined(holder.lossCount),\n makerTokenTags: nullToUndefined(holder.makerTokenTags),\n nativeBalance: nullToUndefined(holder.nativeBalance),\n netflowAmount: nullToUndefined(holder.netflowAmount),\n netflowAmountUsd: nullToUndefined(holder.netflowAmountUsd),\n netflowUsd: nullToUndefined(holder.netflowUsd),\n positionCostUsd: nullToUndefined(holder.positionCostUsd),\n realizedPnlRatio: nullToUndefined(holder.realizedPnlRatio),\n realizedProfit: nullToUndefined(holder.realizedProfit),\n roi: nullToUndefined(holder.roi),\n sellAmountCur: nullToUndefined(holder.sellAmountCur),\n sellAmountPercentage: nullToUndefined(holder.sellAmountPercentage),\n sellVolumeNative: nullToUndefined(holder.sellVolumeNative),\n sellVolumeUsd: nullToUndefined(holder.sellVolumeUsd),\n startHoldingAt: toDateFromUnixLikeTimestamp(holder.startHoldingAt),\n tags: toTagArray<WalletTag>(holder.tags),\n tokenTransferIn: nullToUndefined(holder.tokenTransferIn),\n tokenTransferOut: nullToUndefined(holder.tokenTransferOut),\n totalBuyCount: nullToUndefined(holder.totalBuyCount),\n totalCostUsd: nullToUndefined(holder.totalCostUsd),\n totalProfit: nullToUndefined(holder.totalProfit),\n totalSellCount: nullToUndefined(holder.totalSellCount),\n transferInAmount7d: nullToUndefined(holder.transferInAmount7d),\n transferInCount: nullToUndefined(holder.transferInCount),\n transferOutAmount7d: nullToUndefined(holder.transferOutAmount7d),\n transferOutCount: nullToUndefined(holder.transferOutCount),\n unrealizedPnlRatio: nullToUndefined(holder.unrealizedPnlRatio),\n unrealizedProfit: nullToUndefined(holder.unrealizedProfit),\n walletTagV2: nullToUndefined(holder.walletTagV2),\n winCount: nullToUndefined(holder.winCount),\n };\n}\n\nexport function fromTokenHolderPage(\n input: CursorPageDTO<Phase3TokenHolderDTO>,\n): CursorList<TokenHolder> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map((holder) => fromRawTokenHolder(holder)),\n };\n}\n\nexport function fromSdkTokenHolderPage(\n input: PageResponseTokenHolder,\n): CursorList<TokenHolder> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map((holder) => fromRawTokenHolder(holder)),\n };\n}\n\nexport function fromSdkTokenTopTraderPage(\n input: PageResponseTokenTopTrader,\n): CursorList<TokenTopTrader> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map((trader) => ({\n address: trader.walletAddress,\n amount: trader.amount,\n amountInUsd: trader.amountInUsd,\n tags: toTagArray<WalletTag>(trader.tags),\n lastActiveAt: toDateFromMs(trader.lastActiveAt),\n startHoldingAt: toDateFromMs(trader.startHoldingAt),\n averageBuyPriceInUsd: nullToUndefined(trader.averageBuyPriceInUsd),\n averageSellPriceInUsd: nullToUndefined(trader.averageSellPriceInUsd),\n buyAmountCur: nullToUndefined(trader.buyAmountCur),\n sellAmountCur: nullToUndefined(trader.sellAmountCur),\n totalBuyAmountInUsd: nullToUndefined(trader.totalBuyAmountInUsd),\n totalSellAmountInUsd: nullToUndefined(trader.totalSellAmountInUsd),\n realizedPnl: nullToUndefined(trader.realizedPnl),\n totalRealizedPnlInUsd: nullToUndefined(trader.totalRealizedPnlInUsd),\n unrealizedPnl: nullToUndefined(trader.unrealizedPnl),\n unrealizedPnlInUsd: nullToUndefined(trader.unrealizedPnlInUsd),\n roi: nullToUndefined(trader.roi),\n totalPnlInUsd: nullToUndefined(trader.totalPnlInUsd),\n totalBuyCount: nullToUndefined(trader.totalBuyCount),\n totalSellCount: nullToUndefined(trader.totalSellCount),\n transferIn: nullToUndefined(trader.transferIn),\n transferInCount: nullToUndefined(trader.transferInCount),\n transferOutCount: nullToUndefined(trader.transferOutCount),\n })),\n };\n}\n\nexport function fromSdkDevTokenPage(\n chain: Chain,\n input: PageResponseDevToken,\n): CursorList<Token> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map((token) => fromSdkDevTokenDTO(chain, token)),\n };\n}\n\nexport function fromTokenPage(\n input: ChainStreamTokenPage,\n): 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 ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map(fromTokenDTO),\n extra: nullToUndefined(pageExtra.countsByProtocols),\n };\n}\n\nexport function fromSwapRoute(input: SwapRouteResponse): 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): BlockchainLatestBlock {\n return {\n blockhash: input.blockhash,\n lastValidBlockHeight: input.lastValidBlockHeight,\n };\n}\n\nexport function fromSendTxResult(input: SendTxResponse): 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(\n chain: Chain,\n item: Phase3PnlItemDTO | PnlDetailItem,\n): 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 transferInAmountInUsd: nullToUndefined(item.transferInAmountInUsd),\n transferInCount:\n item.transferInCount != null ? Number(item.transferInCount) : undefined,\n transferOutAmountInUsd: nullToUndefined(item.transferOutAmountInUsd),\n transferOutCount:\n item.transferOutCount != null ? Number(item.transferOutCount) : undefined,\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 | PnlDetailsResult,\n): WalletPortfolioPnls {\n const summaryExtra = input.summary as Phase3PnlDetailsDTO[\"summary\"] & {\n totalProfitRatio?: string | null;\n };\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(summaryExtra.totalProfitRatio),\n avgProfitPerTradeInUsd: nullToUndefined(\n input.summary.avgProfitPerTradeInUsd,\n ),\n transferInAmountInUsd: nullToUndefined(input.summary.transferInAmountInUsd),\n transferInCount:\n input.summary.transferInCount != null\n ? Number(input.summary.transferInCount)\n : undefined,\n transferOutAmountInUsd: nullToUndefined(\n input.summary.transferOutAmountInUsd,\n ),\n transferOutCount:\n input.summary.transferOutCount != null\n ? Number(input.summary.transferOutCount)\n : undefined,\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: NetWorthByTokensResult,\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<WalletTag>(item.walletTokenTags),\n }));\n}\n\nexport function fromPnlDetailItems(\n chain: Chain,\n input: PnlDetailsResult,\n): PortfolioPnl[] {\n return input.data.map((item) => fromPnlItemDTO(chain, item));\n}\n\nexport function fromTradePage(\n input: PageResponseTradeDetail,\n): 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: toDateFromUnixLikeTimestamp(input.blockTimestamp) ?? new Date(0),\n gasFee: input.gasFee != null ? String(input.gasFee) : undefined,\n traderTags: toTagArray<WalletTag>(input.traderTags),\n };\n}\n\nexport function fromSdkActivityPage(\n input: PageResponseTradeDetail,\n): CursorList<Activity> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map(fromTradeDetailDTO),\n };\n}\n\nexport function fromActivityPage(\n input: CursorPageDTO<Phase3ActivityDTO>,\n): 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 time = toDateFromUnixLikeTimestamp(input.blockTimestamp) ?? new Date(0);\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,\n gasFee: input.gasFee != null ? String(input.gasFee) : undefined,\n traderTags: toTagArray<WalletTag>(input.traderTags),\n };\n}\n\nexport function fromTokenSubscribed(\n chain: Chain,\n input: WsNewToken,\n): 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): 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): TokenSubscribed {\n return {\n chain,\n address: input.address,\n stats: fromWsTokenStats(input),\n marketData: fromWsTokenMarketDataFromStats(input),\n };\n}\n\nexport function fromWsRankingTokenListToSubscribed(\n chain: Chain,\n input: WsRankingTokenList,\n): Array<TokenSubscribed> {\n const updates: Array<TokenSubscribed> = [];\n if (input.metadata) {\n updates.push(fromTokenMetadataSubscribed(chain, input.metadata));\n }\n if (input.stat) {\n updates.push(fromWsTokenDataSubscribed(chain, input.stat));\n }\n if (input.holder) {\n updates.push(\n fromWsTokenHolderToSubscribed(\n chain,\n input.holder.tokenAddress,\n input.holder,\n ),\n );\n }\n if (input.supply) {\n updates.push(\n fromWsTokenSupplyToSubscribed(\n chain,\n input.supply.tokenAddress,\n input.supply,\n ),\n );\n }\n if (input.bondingCurve) {\n updates.push(\n fromWsTokenBondingCurveToSubscribed(chain, input.bondingCurve),\n );\n }\n return updates.filter((update) => update.address);\n}\n\nexport function fromWsTokenSupplyToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenSupply,\n): 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): 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): 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): 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): 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): 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 bluechipHolders:\n input.bluechipHolders === undefined ? undefined : input.bluechipHolders,\n bluechipHoldings: input.bluechipHoldersAmount,\n bluechipHoldingsRatio: input.bluechipHoldersRatio,\n kolHolders: input.kolHolders === undefined ? undefined : input.kolHolders,\n kolHoldings: input.kolHoldersAmount,\n kolHoldingsRatio: input.kolHoldersRatio,\n proHolders: input.proHolders === undefined ? undefined : input.proHolders,\n proHoldings: input.proHoldersAmount,\n proHoldingsRatio: input.proHoldersRatio,\n insiderHolders:\n input.insiderHolders === undefined ? undefined : input.insiderHolders,\n insiderHoldings: input.insiderHoldersAmount,\n insiderHoldingsRatio: input.insiderHoldersRatio,\n devHolders: input.devHolders === undefined ? undefined : input.devHolders,\n devHoldings: input.devHoldersAmount,\n devHoldingsRatio: input.devHoldersRatio,\n sniperHolders:\n input.sniperHolders === undefined ? undefined : input.sniperHolders,\n sniperHoldings: input.sniperHoldersAmount,\n sniperHoldingsRatio: input.sniperHoldersRatio,\n freshHolders:\n input.freshHolders === undefined ? undefined : input.freshHolders,\n freshHoldings: input.freshHoldersAmount,\n freshHoldingsRatio: input.freshHoldersRatio,\n bundleHolders:\n input.bundleHolders === undefined ? undefined : input.bundleHolders,\n bundleHoldings: input.bundleHoldersAmount,\n bundleHoldingsRatio: input.bundleHoldersRatio,\n sandwichHolders:\n input.sandwichHolders === undefined ? undefined : input.sandwichHolders,\n sandwichHoldings: input.sandwichHoldersAmount,\n sandwichHoldingsRatio: input.sandwichHoldersRatio,\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 priceInUsd: deriveWsTokenPriceInUsd(\n input.sellAmountInUsd,\n input.sellAmount,\n ),\n },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n priceInUsd: deriveWsTokenPriceInUsd(\n input.buyAmountInUsd,\n input.buyAmount,\n ),\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 priceInUsd: deriveWsTokenPriceInUsd(\n input.sellAmountInUsd,\n input.sellAmount,\n ),\n },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n priceInUsd: deriveWsTokenPriceInUsd(\n input.buyAmountInUsd,\n input.buyAmount,\n ),\n },\n status: \"success\",\n time: new Date(input.timestamp),\n };\n}\n\nfunction deriveWsTokenPriceInUsd(\n amountInUsd: string | undefined,\n amount: string | undefined,\n): string | undefined {\n if (\n amountInUsd == null ||\n amountInUsd === \"\" ||\n amount == null ||\n amount === \"\"\n ) {\n return undefined;\n }\n const amountBn = new SafeBigNumber(amount);\n if (!amountBn.gt(0)) return undefined;\n return new SafeBigNumber(amountInUsd).div(amountBn).toString();\n}\n","import {\n ChainStreamClient,\n ChainSymbol,\n ActivitySortBy,\n HolderSortBy,\n TraderSortBy,\n PnlResolution,\n PnlSortBy,\n PositionState as SdkPositionState,\n TokenField,\n SortDirection,\n TradeType,\n SearchSortBy,\n TokenTraderTag,\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 WsRankingType,\n WsRankingTokenList,\n RankingPoolType,\n WsRankingPool,\n} from \"@chainstream-io/sdk\";\nimport {\n Activity,\n ActivityType,\n BlockchainLatestBlock,\n Chain,\n CursorList,\n GetActivitiesOptions,\n GetTokenCandlesOptions,\n GetTokenHoldersOptions,\n GetTokenTopTradersOptions,\n GetTokenListOptions,\n GetTokensByCreatorOptions,\n GetTradesOptions,\n GetWalletLimitOrdersOptions,\n GetWalletPortfolioPnlsOptions,\n IClient,\n ISubscribeClient,\n ISubscription,\n LatestBlockParams,\n Pool,\n PoolSubscribed,\n Portfolio,\n PortfolioPnl,\n PortfolioPnlSubscribed,\n PortfolioSubscribed,\n SearchTokenCursorList,\n SearchTokensOptions,\n SendTxParams,\n SendTxResult,\n SwapParams,\n SwapRoute,\n Token,\n TokenCandle,\n TokenFilterOption,\n TokenHolder,\n TokenTopTrader,\n TokenMarketData,\n TokenResolution,\n TokenSecurity,\n TokenStats,\n TokenSubscribed,\n Trade,\n WalletPnl,\n WalletPnlResolution,\n WalletPnlSubscribed,\n WalletPortfolioPnls,\n WalletPortfolios,\n} from \"@liberfi.io/types\";\nimport { NotImplementedError } from \"./errors\";\nimport {\n buildPhase3Context,\n getTokenHolders as phase3GetTokenHolders,\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 fromSdkTokenHolderPage,\n fromSdkTokenTopTraderPage,\n fromSdkDevTokenPage,\n toSendTxInput,\n toSwapRouteInput,\n fromWsCandle,\n fromWsTokenDataSubscribed,\n fromWsTokenSupplyToSubscribed,\n fromWsTokenHolderToSubscribed,\n fromWsTokenLiquidityToSubscribed,\n fromWsTokenMaxLiquidityToSubscribed,\n fromWsTokenTotalLiquidityToSubscribed,\n fromWsTokenBondingCurveToSubscribed,\n fromWsRankingTokenListToSubscribed,\n fromRankingPoolDTO,\n fromWsRankingPoolToSubscribed,\n fromWsTradeActivity,\n fromSdkActivityPage,\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\ntype ActivitySortByOption = NonNullable<GetActivitiesOptions[\"sortBy\"]>;\ntype ActivitySortDirectionOption = NonNullable<\n GetActivitiesOptions[\"sortDirection\"]\n>;\ntype TokenHolderSortByOption = NonNullable<GetTokenHoldersOptions[\"sortBy\"]>;\ntype TokenHolderSortDirectionOption = NonNullable<\n GetTokenHoldersOptions[\"sortDirection\"]\n>;\n\nfunction toActivitySortByDTO(\n sortBy?: ActivitySortByOption,\n sortDirection: ActivitySortDirectionOption = \"desc\",\n): ActivitySortBy | undefined {\n if (!sortBy) return undefined;\n\n if (sortBy === \"totalUsd\") {\n return sortDirection === \"asc\"\n ? ActivitySortBy.totalUsdAsc\n : ActivitySortBy.totalUsdDesc;\n }\n\n return sortDirection === \"asc\"\n ? ActivitySortBy.timestampAsc\n : ActivitySortBy.timestampDesc;\n}\n\nfunction toHolderSortByDTO(\n sortBy?: TokenHolderSortByOption,\n): HolderSortBy | undefined {\n switch (sortBy) {\n case \"amountPercentage\":\n return HolderSortBy.amountPercentage;\n case \"holdingUsd\":\n return HolderSortBy.holdingUsd;\n case \"usdValue\":\n return HolderSortBy.usdValue;\n case \"totalPnl\":\n return HolderSortBy.totalPnl;\n case \"lastActiveAt\":\n return HolderSortBy.lastActiveAt;\n case \"realizedPnl\":\n return HolderSortBy.realizedPnl;\n case \"unrealizedPnl\":\n return HolderSortBy.unrealizedPnl;\n case \"buyVolume\":\n return HolderSortBy.buyVolume;\n case \"sellVolume\":\n return HolderSortBy.sellVolume;\n case \"netflowUsd\":\n return HolderSortBy.netflowUsd;\n case \"createdAt\":\n return HolderSortBy.createdAt;\n default:\n return undefined;\n }\n}\n\nfunction toHolderSortDirectionDTO(\n direction?: TokenHolderSortDirectionOption,\n): SortDirection | undefined {\n return direction\n ? (toSortDirectionDTO(direction) as SortDirection)\n : undefined;\n}\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 IClient, 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?: 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);\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?: GetTokenHoldersOptions,\n ): Promise<CursorList<TokenHolder>> {\n const holders = await this._client.token.getHolders(\n toChainDTO(chain),\n address,\n {\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n sortBy: toHolderSortByDTO(options?.sortBy),\n sortDirection: toHolderSortDirectionDTO(options?.sortDirection),\n },\n );\n return fromSdkTokenHolderPage(holders);\n }\n\n async getTokenTopTraders(\n chain: Chain,\n address: string,\n options?: GetTokenTopTradersOptions,\n ): Promise<CursorList<TokenTopTrader>> {\n const traders = await this._client.token.getTokenTopTraders(\n toChainDTO(chain),\n address,\n {\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n sortBy:\n options?.sortBy === \"totalPnl\" || options?.sortBy === \"profit\"\n ? TraderSortBy.totalPnl\n : options?.sortBy === \"realizedPnl\"\n ? TraderSortBy.realizedPnl\n : options?.sortBy === \"unrealizedPnl\"\n ? TraderSortBy.unrealizedPnl\n : options?.sortBy === \"buyVolume\"\n ? TraderSortBy.buyVolume\n : options?.sortBy === \"sellVolume\"\n ? TraderSortBy.sellVolume\n : options?.sortBy === \"lastActiveAt\"\n ? TraderSortBy.lastActiveAt\n : options?.sortBy === \"netflowUsd\"\n ? TraderSortBy.netflowUsd\n : options?.sortBy === \"createdAt\"\n ? TraderSortBy.createdAt\n : undefined,\n sortDirection: options?.sortDirection\n ? (toSortDirectionDTO(options.sortDirection) as SortDirection)\n : undefined,\n tag: options?.tag as TokenTraderTag | undefined,\n },\n );\n return fromSdkTokenTopTraderPage(traders);\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?: 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 getNewPools(\n chain: Chain,\n _options?: GetTokenListOptions,\n ): Promise<Array<Pool>> {\n const pools = await this._client.ranking.getRankingPools(\n toChainDTO(chain),\n RankingPoolType[\"new-pool\"],\n );\n return pools.map((pool) => fromRankingPoolDTO(chain, pool));\n }\n\n async getFinalStretchTokens(\n chain: Chain,\n options?: 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?: 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?: 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?: 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?: SearchTokensOptions,\n ): Promise<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: SwapParams): Promise<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: LatestBlockParams,\n ): Promise<BlockchainLatestBlock> {\n const latestBlock = await this._client.blockchain.getLatestBlock(\n toChainDTO(params.chain),\n );\n return fromLatestBlock(latestBlock);\n }\n\n async sendTx(params: SendTxParams): Promise<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?: WalletPnlResolution,\n ): Promise<WalletPnl> {\n const pnl = await this._client.wallet.getPnl(\n toChainDTO(chain),\n address,\n // Upstream SDK accepts a different narrow union than the public\n // `WalletPnlResolution` set; the cast is intentional and safe in\n // practice because the server (not the SDK type) is the source of\n // truth for which windows are supported.\n resolution\n ? { resolution: resolution as unknown 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?: GetWalletPortfolioPnlsOptions,\n ): Promise<WalletPortfolioPnls> {\n if (options?.resolution !== \"90d\") {\n const detailsPage = await this._client.wallet.getPnlDetails(\n toChainDTO(chain),\n address,\n {\n resolution:\n options?.resolution === \"7d\"\n ? PnlResolution[\"7d\"]\n : PnlResolution[\"30d\"],\n positionState:\n options?.positionState === \"closed\"\n ? SdkPositionState.closed\n : options?.positionState === \"all\"\n ? SdkPositionState.all\n : options?.positionState === \"open\"\n ? SdkPositionState.open\n : undefined,\n sortBy:\n options?.sortBy === \"realizedPnl\"\n ? PnlSortBy.realizedPnl\n : options?.sortBy === \"unrealizedPnl\"\n ? PnlSortBy.unrealizedPnl\n : options?.sortBy === \"totalPnl\"\n ? PnlSortBy.totalPnl\n : undefined,\n cursor: options?.cursor,\n limit: options?.limit ?? 100,\n direction: options?.direction,\n },\n );\n return fromPnlDetailsPage(chain, address, detailsPage);\n }\n\n // Compatibility fallback: SDK 2.1.12 does not expose the public `90d`\n // wallet PnL resolution. Preserve the existing API contract.\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 const result = await this._client.wallet.getNetWorthByTokens(\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?: GetTradesOptions,\n ): Promise<CursorList<Trade>> {\n return this._getTrades(chain, { walletAddress: address }, options);\n }\n\n async getTokenTrades(\n chain: Chain,\n address: string,\n options?: GetTradesOptions,\n ): Promise<CursorList<Trade>> {\n return this._getTrades(chain, { tokenAddress: address }, options);\n }\n\n async getWalletActivities(\n chain: Chain,\n address: string,\n options?: GetActivitiesOptions,\n ): Promise<CursorList<Activity>> {\n return this._getActivities(chain, { walletAddress: address }, options);\n }\n\n async getTokenActivities(\n chain: Chain,\n address: string,\n options?: GetActivitiesOptions,\n ): Promise<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?: GetWalletLimitOrdersOptions,\n ): Promise<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?: GetTokensByCreatorOptions,\n ): Promise<CursorList<Token>> {\n const tokens = await this._client.token.getDevTokens(\n toChainDTO(chain),\n creator,\n {\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n },\n );\n return fromSdkDevTokenPage(chain, tokens);\n }\n\n subscribeToken(\n chain: Chain,\n address: string,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this.subscribeTokens(chain, [address], callback);\n }\n\n subscribeTokens(\n chain: Chain,\n addresses: Array<string>,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n const chainDTO = toChainDTO(chain);\n const uniqueAddresses = Array.from(\n new Set(addresses.map((address) => address.trim()).filter(Boolean)),\n );\n if (uniqueAddresses.length === 0) return { unsubscribe: () => {} };\n\n const subs = this._client.stream.batchSubscribe(() =>\n uniqueAddresses.flatMap((address) => [\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.subscribeTokenHolders({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenHolder) =>\n callback([fromWsTokenHolderToSubscribed(chain, address, 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.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([\n fromWsTokenMaxLiquidityToSubscribed(chain, address, data),\n ]),\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 );\n\n return {\n unsubscribe: () => {\n const stream = this._client.stream as typeof this._client.stream & {\n batchUnsubscribe?: (unsubscribables: typeof subs) => void;\n };\n if (stream.batchUnsubscribe) {\n stream.batchUnsubscribe(subs);\n return;\n }\n subs.forEach((s) => s.unsubscribe());\n },\n };\n }\n\n subscribeTokenCandles(\n chain: Chain,\n address: string,\n resolution: TokenResolution,\n callback: (candles: Array<TokenCandle>) => void,\n ): 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<WalletPnlSubscribed>) => void,\n ): 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 as WalletPnlResolution,\n })),\n ),\n });\n }\n\n subscribeWalletPortfolios(\n chain: Chain,\n address: string,\n callback: (portfolios: Array<PortfolioSubscribed>) => void,\n ): 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 PortfolioSubscribed,\n ),\n ),\n });\n }\n\n subscribeWalletPortfolioPnls(\n chain: Chain,\n address: string,\n callback: (portfolioPnls: Array<PortfolioPnlSubscribed>) => void,\n ): 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 PortfolioPnlSubscribed,\n ]),\n });\n }\n\n subscribeWalletTrades(\n chain: Chain,\n address: string,\n callback: (trades: Array<Trade>) => void,\n ): 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 ): 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 ): 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 ): 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<TokenSubscribed>) => void,\n ): 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 subscribeNewTokensMetadata(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._client.stream.subscribeNewTokensMetadata({\n chain: toChainDTO(chain),\n callback: (data: WsTokenMetadata[]) =>\n callback(data.map((it) => fromTokenMetadataSubscribed(chain, it))),\n });\n }\n\n subscribeNewPools(\n chain: Chain,\n callback: (data: Array<PoolSubscribed>) => void,\n ): ISubscription {\n return this._client.stream.subscribeNewPool({\n chain: toChainDTO(chain),\n callback: (data: WsRankingPool) =>\n callback([fromWsRankingPoolToSubscribed(chain, data)]),\n });\n }\n\n subscribeTrendingTokens(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._subscribeRankingTokenList(chain, WsRankingType.HOT, callback);\n }\n\n subscribeMigratedTokens(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._subscribeRankingTokens(\n chain,\n WsChannelType.MIGRATED,\n callback,\n );\n }\n\n subscribeFinalStretchTokens(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): 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<TokenSubscribed>) => void,\n ): ISubscription {\n return this._subscribeRankingTokenList(\n chain,\n WsRankingType.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?: 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?: GetTradesOptions,\n ): Promise<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?: GetActivitiesOptions,\n ): Promise<CursorList<Activity>> {\n const page = await this._client.trade.getActivities(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 sortBy: toActivitySortByDTO(options?.sortBy, options?.sortDirection),\n });\n return fromSdkActivityPage(page);\n }\n\n private _subscribeRankingTokens(\n chain: Chain,\n channelType: WsChannelType,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n // SDK 2.1.12 marks ranking token metric list channels as deprecated and\n // no longer published by the server. Keep the public API shape until the\n // replacement token-address source is defined.\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 private _subscribeRankingTokenList(\n chain: Chain,\n rankingType: WsRankingType,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._client.stream.subscribeRankingTokensList({\n chain: toChainDTO(chain),\n ranking_type: rankingType,\n callback: (data: WsRankingTokenList[]) => {\n const updates = data.flatMap((item) =>\n fromWsRankingTokenListToSubscribed(chain, item),\n );\n if (updates.length > 0) callback(updates);\n },\n });\n }\n}\n\nfunction parseLaunchPlatformFromFilters(\n filters: Array<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/utils.ts","../src/activity/activity-client.ts","../src/media/media-client.ts","../src/transport/errors.ts","../src/transport/http-transport.ts","../src/phase3Http.ts","../src/subscription/subscription-client.ts","../src/token/token-client.ts","../src/trade/trade-client.ts","../src/trade/trade-execution-errors.ts","../src/trade/blockhash-expiry.ts","../src/trade/clock.ts","../src/trade/create-client-trade-execution-adapter.ts","../src/trade/encoding.ts","../src/trade/in-memory-trade-execution-adapter.ts","../src/trade/trade-execution-types.ts","../src/trade/trade-execution-runtime.ts","../src/transaction/transaction-client.ts","../src/transaction/confirm-tx.ts","../src/errors.ts","../src/wallet/wallet-client.ts","../src/client.ts"],"names":["nullToUndefined","value","readStringField","input","keys","key","readDeveloperAddress","record","extra","extension","toChainDTO","chain","Chain","ChainSymbol","toResolutionDTO","resolution","Resolution","toSortDirectionDTO","direction","toSearchFieldDTO","field","SearchSortBy","toFieldDTO","TokenField","toRangeFiltersDTO","filters","it","cond","SafeBigNumber","fromChainDTO","fromTokenCreatorDTO","fromTokenDTO","v","k","fromTokenStatsDTO","fromTokenMarketDataDTO","fromSdkDevTokenDTO","metadata","parseTokenStatsByResolution","toOptionalNumber","period","fromTokenLiquidityDTO","fromRankingPoolDexDTO","fromRankingPoolBalanceDTO","fromRankingPoolDTO","mergeSubscribedUpdates","updates","merged","update","fromWsRankingPoolToSubscribed","tokenUpdate","fromWsRankingTokenListToSubscribed","fromTokenCandle","fromResolutionDTO","readOptionalString","readOptionalBoolean","readOptionalNumber","firstDefined","values","readLegacyBoolean","hasPositiveRatio","asRecord","asArray","readRawStatusFlag","status","hasRawObjectEntries","readRawTransferable","readRawMaxBurnRatio","raw","dex","max","item","burnPercent","ratio","readRawTop10HoldersRatio","holders","top10","total","holder","percent","readRawMetadataMutable","fromSolanaGoPlusRaw","isMintable","isFreezable","isClosable","hasTransferFee","lpBurnRatio","fromGoPlusSecurity","fromHoneypotSecurity","fromSerializedSecurity","fromLockInfo","fromPrivilegeInfo","findMintPrivilege","privileges","privilege","fromTokenSecurity","legacy","goplus","honeypot","serialized","lockInfo","solanaRawSecurity","mintPrivilege","devTokenBurnRatio","hasBlacklist","isHoneypot","isOpenSource","isOwnershipRenounced","buyTaxRatio","sellTaxRatio","solanaChains","EVM_NATIVE_ADDRESS","KYBERSWAP_NATIVE_SENTINEL","toJupiterMint","address","SOLANA_TOKENS","toKyberSwapMint","effectiveDex","params","toMintForDex","toMintForRoute","toSwapRouteInput","inputMint","outputMint","SwapMode","SwapRouteInputSwapMode","toSendTxInput","toDateFromMs","ms","toDateFromUnixLikeTimestamp","toTagArray","fromRawTokenHolder","fromTokenHolderPage","fromSdkTokenHolderPage","fromSdkTokenTopTraderPage","trader","fromSdkDevTokenPage","token","fromTokenPage","pageExtra","fromSwapRoute","fromLatestBlock","fromSendTxResult","fromWalletPortfolios","portfolios","fromWalletPnlSummary","fromPnlItemDTO","fromPnlDetailsPage","summaryExtra","fromWalletNetWorthByTokens","fromPnlDetailItems","fromTradePage","fromTradeDetailDTO","isBuy","fromSdkActivityPage","fromActivityPage","fromActivityDetailDTO","type","time","fromTokenSubscribed","fromTokenMetadataSubscribed","fromWsCandle","fromWsTokenStats","timeframes","result","tf","buys","sells","buyers","sellers","buyVolumeInUsd","sellVolumeInUsd","trades","price","openInUsd","closeInUsd","totalTrades","totalTraders","totalVolumesInUsd","priceChange","fromWsTokenMarketDataFromStats","fromWsTokenDataSubscribed","fromWsTokenHolderToSubscribed","fromWsTokenSupplyToSubscribed","fromWsTokenBondingCurveToSubscribed","fromWsTokenMarketDataFromHolder","fromWsTokenLiquidityToSubscribed","WsMetricType","fromWsTokenMaxLiquidityToSubscribed","fromWsTokenTotalLiquidityToSubscribed","fromWsTradeActivity","deriveWsTokenPriceInUsd","fromWsActivity","amountInUsd","amount","amountBn","toActivitySortBy","options","ActivitySortBy","ActivityClient","sdk","target","page","MediaClient","ClientTransportError","message","operation","ClientTimeoutError","timeoutMs","cause","ClientHttpError","responseBody","ClientMappingError","detail","safeErrorBody","FetchHttpTransport","request","timeoutController","timeout","signal","response","body","error","DEFAULT_SERVER_URL","resolveAccessToken","provider","appendQuery","joinBaseUrl","baseUrl","path","trimmedBase","normalizedPath","ctx","query","url","search","buildPhase3Context","accessToken","serverUrl","transport","getWalletPnlDetails","walletAddress","SubscriptionClient","implementation","toHolderSortByDTO","sortBy","HolderSortBy","toTraderSortByDTO","TraderSortBy","parseLaunchPlatformFromFilters","filter","TokenClient","addresses","candle","RankingPoolType","pool","creator","TradeClient","route","REASON_TO_PHASE","TradeExecutionError","TradeRouteExpiredError","asError","isAbortError","name","SOLANA_BLOCKHASH_VALIDITY_BLOCKS","LATEST_BLOCK_CACHE_MAX_AGE_MS","PRE_SIGN_MIN_REMAINING_BLOCKS","POST_SIGN_MIN_REMAINING_BLOCKS","PRE_SIGN_STALE_MS","POST_SIGN_STALE_MS","remainingSolanaBlocks","routeLastValidBlockHeight","latestLastValidBlockHeight","estimatedCurrentBlockHeight","assertTradeRouteBlockhashFresh","latestBlock","minRemainingBlocks","now","isSolanaChain","updatedAt","isSolanaBlockhashExpiredSendError","msg","sleepWithSignal","abortError","resolve","reject","timer","onAbort","systemClock","FakeTradeExecutionClock","nowMs","sleeper","index","due","intentToSwapParams","intent","createClientTradeExecutionAdapter","deps","signedBase64","txHash","base64ToUint8Array","base64","binary","bytes","i","uint8ArrayToBase64","DEFAULT_ROUTE","DEFAULT_BLOCK","InMemoryTradeExecutionAdapter","unsigned","IN_FLIGHT_TRADE_STATES","nextExecutionId","defaultId","cancelledError","TradeExecutionRuntime","listener","generation","run","err","sign","needsSolanaCheck","latestBlockPromise","signedBytes","unsignedBytes","sendResult","promise","partial","TransactionClient","_chain","confirmTx","checkTxSuccess","NotImplementedError","method","isNotImplementedError","CHAIN_TO_BALANCE_PARAM","NATIVE_TOKEN_ADDRESS","WalletClient","phase3","nativeBalanceApiUrl","chainParam","pnl","PnlResolution","SdkPositionState","PnlSortBy","tokenAddresses","_address","_options","wrap","native","divisor","Client","ChainStreamClient","args","callback","chainDTO","uniqueAddresses","subs","data","stream","s","rankingSub","WsChannelType","d","WsRankingType","bondingSub","channelType","rankingType"],"mappings":"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","file":"index.mjs","sourcesContent":["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 PageResponseTokenHolder,\n PageResponseTokenTopTrader,\n PageResponseDevToken,\n DevToken as SdkDevToken,\n DexPool,\n RankingPool,\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 WsRankingTokenList,\n WsRankingPool,\n WsMetricType,\n WalletPnlSummary,\n PnlDetailItem,\n PnlDetailsResult,\n NetWorthByTokensResult,\n BlockchainLatestBlock as SdkBlockchainLatestBlock,\n TokenSecurityResponse,\n GoPlusSecurityInfo,\n HoneypotIsSecurityInfo,\n SerializedSecurityInfo,\n LockInfo,\n PrivilegeInfo,\n} from \"@chainstream-io/sdk\";\nimport {\n Activity,\n ActivityType,\n BlockchainLatestBlock,\n Chain,\n CursorList,\n Pool,\n PoolBalance,\n PoolDex,\n PoolSubscribed,\n Portfolio,\n PortfolioPnl,\n SearchTokenCursorList,\n SendTxParams,\n SendTxResult,\n SwapMode,\n SwapParams,\n SwapRoute,\n Token,\n TokenCandle,\n TokenCreator,\n TokenFieldOption,\n TokenFilterOption,\n TokenHolder,\n TokenTopTrader,\n TokenLiquidity,\n TokenGoPlusSecurity,\n TokenHoneypotSecurity,\n TokenLockInfo,\n TokenMarketData,\n TokenPrivilegeInfo,\n TokenResolution,\n TokenSecurity,\n TokenSerializedSecurity,\n TokenStats,\n TokenStatsByResolution,\n TokenSubscribed,\n Trade,\n WalletPnl,\n WalletPortfolioPnls,\n WalletPortfolios,\n WalletTag,\n} from \"@liberfi.io/types\";\nimport { SafeBigNumber, SOLANA_TOKENS } from \"@liberfi.io/utils\";\nimport type {\n CursorPageDTO,\n Phase3ActivityDTO,\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\nfunction readStringField(\n input: Record<string, unknown> | undefined,\n ...keys: string[]\n): string | undefined {\n if (!input) return undefined;\n for (const key of keys) {\n const value = input[key];\n if (typeof value === \"string\" && value.length > 0) return value;\n }\n return undefined;\n}\n\nfunction readDeveloperAddress(input: unknown): string | undefined {\n if (!input || typeof input !== \"object\") return undefined;\n const record = input as Record<string, unknown>;\n const extra = record.extra;\n const extension = record.extension;\n return (\n readStringField(\n record,\n \"developerAddress\",\n \"devAddress\",\n \"creatorAddress\",\n \"creator\",\n \"deployerAddress\",\n \"deployer\",\n \"mintAuthority\",\n \"updateAuthority\",\n ) ??\n readStringField(\n extra && typeof extra === \"object\"\n ? (extra as Record<string, unknown>)\n : undefined,\n \"developerAddress\",\n \"devAddress\",\n \"creatorAddress\",\n \"creator\",\n \"deployerAddress\",\n \"deployer\",\n ) ??\n readStringField(\n extension && typeof extension === \"object\"\n ? (extension as Record<string, unknown>)\n : undefined,\n \"developerAddress\",\n \"devAddress\",\n \"creatorAddress\",\n \"creator\",\n \"deployerAddress\",\n \"deployer\",\n )\n );\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: 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: 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<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 developerAddress: readDeveloperAddress(input),\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 fromSdkDevTokenDTO(chain: Chain, input: SdkDevToken): Token {\n const metadata = input.metadata;\n const extra = metadata.extra;\n return {\n chain,\n name: metadata.name || input.address,\n symbol: metadata.symbol || input.address,\n address: input.address,\n decimals: metadata.decimals ? parseInt(metadata.decimals) : 0,\n image: metadata.imageUrl ?? undefined,\n description: metadata.description ?? undefined,\n creators: metadata.tokenCreators?.map(fromTokenCreatorDTO),\n developerAddress: readDeveloperAddress(metadata),\n launchedFrom: {\n programAddress: extra?.launchFromProgramAddress ?? undefined,\n protocolFamily: 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: extra?.migratedToProgramAddress ?? undefined,\n protocolFamily: extra?.migratedToProtocolFamily ?? undefined,\n poolAddress: extra?.migratedToPoolAddress ?? undefined,\n migratedAt: extra?.migratedAt ? new Date(extra.migratedAt) : undefined,\n },\n socialMedias: metadata.socialMedias\n ? Object.fromEntries(\n Object.entries(metadata.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: metadata.tokenCreatedAt\n ? new Date(metadata.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 protocolName: input.protocolName ?? undefined,\n tvl: input.tvlInSol ?? undefined,\n tvlInUsd: input.tvlInUsd ?? undefined,\n };\n}\n\nfunction fromRankingPoolDexDTO(\n input: RankingPool[\"dex\"] | WsRankingPool[\"dex\"],\n): PoolDex | undefined {\n if (!input) return undefined;\n return {\n image: \"image\" in input ? (input.image ?? undefined) : undefined,\n programAddress: input.programAddress ?? undefined,\n protocolFamily: input.protocolFamily ?? undefined,\n protocolName: input.protocolName ?? undefined,\n };\n}\n\nfunction fromRankingPoolBalanceDTO(\n input: RankingPool[\"balance\"] | WsRankingPool[\"balance\"],\n): PoolBalance | undefined {\n if (!input) return undefined;\n return {\n poolAddress: input.poolAddress,\n tokenAAddress: input.tokenAAddress,\n tokenALiquidityInUsd: input.tokenALiquidityInUsd,\n tokenBAddress: input.tokenBAddress,\n tokenBLiquidityInUsd: input.tokenBLiquidityInUsd,\n };\n}\n\nexport function fromRankingPoolDTO(chain: Chain, input: RankingPool): Pool {\n return {\n chain,\n poolAddress: input.poolAddress,\n tokenAAddress: input.tokenAAddress,\n tokenBAddress: input.tokenBAddress,\n createdAt: input.createdAtMs ? new Date(input.createdAtMs) : undefined,\n dex: fromRankingPoolDexDTO(input.dex),\n token: input.token ? fromTokenDTO(input.token) : undefined,\n balance: fromRankingPoolBalanceDTO(input.balance),\n };\n}\n\nfunction mergeSubscribedUpdates(\n updates: Array<TokenSubscribed>,\n): TokenSubscribed | undefined {\n if (updates.length === 0) return undefined;\n return updates.reduce<TokenSubscribed>(\n (merged, update) => ({\n ...merged,\n ...Object.fromEntries(\n Object.entries(update).filter(([, value]) => value !== undefined),\n ),\n stats: update.stats ?? merged.stats,\n marketData: update.marketData\n ? { ...merged.marketData, ...update.marketData }\n : merged.marketData,\n socialMedias: update.socialMedias\n ? { ...merged.socialMedias, ...update.socialMedias }\n : merged.socialMedias,\n launchedFrom: update.launchedFrom\n ? { ...merged.launchedFrom, ...update.launchedFrom }\n : merged.launchedFrom,\n migratedTo: update.migratedTo\n ? { ...merged.migratedTo, ...update.migratedTo }\n : merged.migratedTo,\n }),\n updates[0],\n );\n}\n\nexport function fromWsRankingPoolToSubscribed(\n chain: Chain,\n input: WsRankingPool,\n): PoolSubscribed {\n const tokenUpdate = input.token\n ? mergeSubscribedUpdates(\n fromWsRankingTokenListToSubscribed(chain, input.token),\n )\n : undefined;\n\n return {\n chain,\n poolAddress: input.poolAddress,\n tokenAAddress: input.tokenAAddress,\n tokenBAddress: input.tokenBAddress,\n createdAt: input.createdAtMs ? new Date(input.createdAtMs) : undefined,\n dex: fromRankingPoolDexDTO(input.dex),\n token: tokenUpdate,\n balance: fromRankingPoolBalanceDTO(input.balance),\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 athMarketCapInUsd: input.athMarketCapInUsd ?? undefined,\n price: input.priceInNative ?? input.priceInSol ?? undefined,\n priceInUsd: input.priceInUsd ?? undefined,\n tvl: input.totalTvlInSol ?? undefined,\n tvlInUsd: input.totalTvlInUsd ?? undefined,\n maxPoolTvl: input.maxPoolTvlInSol ?? undefined,\n maxPoolTvlInUsd: input.maxPoolTvlInUsd ?? 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 volumeInTokenAmount: nullToUndefined(input.volumeInTokenAmount),\n trades: input.trades ?? undefined,\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\nfunction readOptionalString(\n value: string | null | undefined,\n): string | undefined {\n return value ?? undefined;\n}\n\nfunction readOptionalBoolean(\n value: boolean | null | undefined,\n): boolean | undefined {\n return value ?? undefined;\n}\n\nfunction readOptionalNumber(\n value: number | null | undefined,\n): number | undefined {\n return value ?? undefined;\n}\n\nfunction firstDefined<T>(...values: Array<T | undefined>): T | undefined {\n return values.find((value) => value !== undefined);\n}\n\nfunction readLegacyBoolean(value: unknown): boolean | undefined {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"number\") {\n if (value === 1) return true;\n if (value === 0) return false;\n }\n if (typeof value === \"string\") {\n if (value === \"1\" || value.toLowerCase() === \"true\") return true;\n if (value === \"0\" || value.toLowerCase() === \"false\") return false;\n }\n return undefined;\n}\n\nfunction hasPositiveRatio(value: string | undefined): boolean | undefined {\n if (value === undefined) return undefined;\n return new SafeBigNumber(value).gt(0);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as Record<string, unknown>;\n}\n\nfunction asArray(value: unknown): unknown[] | undefined {\n return Array.isArray(value) ? value : undefined;\n}\n\nfunction readRawStatusFlag(value: unknown): boolean | undefined {\n const record = asRecord(value);\n const status = record?.status;\n if (status === \"1\" || status === 1 || status === true) return true;\n if (status === \"0\" || status === 0 || status === false) return false;\n return undefined;\n}\n\nfunction hasRawObjectEntries(value: unknown): boolean | undefined {\n const record = asRecord(value);\n if (!record) return undefined;\n return Object.keys(record).length > 0;\n}\n\nfunction readRawTransferable(value: unknown): boolean | undefined {\n if (value === \"0\" || value === 0 || value === false) return true;\n if (value === \"1\" || value === 1 || value === true) return false;\n return undefined;\n}\n\nfunction readRawMaxBurnRatio(raw: Record<string, unknown>): string | undefined {\n const dex = asArray(raw.dex);\n if (!dex) return undefined;\n\n let max: SafeBigNumber | undefined;\n for (const item of dex) {\n const burnPercent = asRecord(item)?.burn_percent;\n if (burnPercent === null || burnPercent === undefined) continue;\n if (typeof burnPercent !== \"number\" && typeof burnPercent !== \"string\") {\n continue;\n }\n const ratio = new SafeBigNumber(burnPercent).div(100);\n if (!max || ratio.gt(max)) max = ratio;\n }\n\n return max?.toString();\n}\n\nfunction readRawTop10HoldersRatio(\n raw: Record<string, unknown>,\n): string | undefined {\n const holders = asArray(raw.holders);\n if (!holders) return undefined;\n\n const top10 = holders.slice(0, 10);\n if (top10.length === 0) return undefined;\n\n let total = new SafeBigNumber(0);\n for (const holder of top10) {\n const percent = asRecord(holder)?.percent;\n if (typeof percent !== \"string\" && typeof percent !== \"number\") {\n continue;\n }\n total = total.plus(percent);\n }\n\n return total.toString();\n}\n\nfunction readRawMetadataMutable(\n raw: Record<string, unknown>,\n): boolean | undefined {\n return readRawStatusFlag(raw.metadata_mutable);\n}\n\nfunction fromSolanaGoPlusRaw(raw: unknown): Partial<TokenSecurity> | undefined {\n try {\n const record = asRecord(raw);\n if (!record) return undefined;\n\n const isMintable = readRawStatusFlag(record.mintable);\n const isFreezable = readRawStatusFlag(record.freezable);\n const isClosable = readRawStatusFlag(record.closable);\n const hasTransferFee = hasRawObjectEntries(record.transfer_fee);\n const lpBurnRatio = readRawMaxBurnRatio(record);\n\n return {\n hasTransferFee,\n isTransferFeeUpgradable: readRawStatusFlag(\n record.transfer_fee_upgradable,\n ),\n isTransferable: readRawTransferable(record.non_transferable),\n isFreezable,\n isClosable,\n isBalanceMutableAuthorityActive: readRawStatusFlag(\n record.balance_mutable_authority,\n ),\n isMetadataMutable: readRawMetadataMutable(record),\n isMintable,\n isMintAuthorityRenounced:\n isMintable === undefined ? undefined : !isMintable,\n isLpBurned: hasPositiveRatio(lpBurnRatio),\n lpBurnRatio,\n top10HoldersRatio: readRawTop10HoldersRatio(record),\n };\n } catch {\n return undefined;\n }\n}\n\nfunction fromGoPlusSecurity(\n input: GoPlusSecurityInfo | null | undefined,\n): TokenGoPlusSecurity | undefined {\n if (!input) return undefined;\n return {\n available: input.available,\n buyTaxRatio: readOptionalString(input.buyTax),\n sellTaxRatio: readOptionalString(input.sellTax),\n chainSupported: readOptionalBoolean(input.chainSupported),\n holderCount: readOptionalString(input.holderCount),\n hasBlacklist: readOptionalBoolean(input.isBlacklisted),\n isFreezable: readOptionalBoolean(input.isFreezable),\n isHoneypot: readOptionalBoolean(input.isHoneypot),\n isMintable: readOptionalBoolean(input.isMintable),\n isOpenSource: readOptionalBoolean(input.isOpenSource),\n isProxy: readOptionalBoolean(input.isProxy),\n isRenounced: readOptionalBoolean(input.isRenounced),\n lastRefreshedAt: readOptionalString(input.lastRefreshedAt),\n lpHolderCount: readOptionalString(input.lpHolderCount),\n ownerAddress: readOptionalString(input.ownerAddress),\n raw: input.raw,\n totalSupply: readOptionalString(input.totalSupply),\n };\n}\n\nfunction fromHoneypotSecurity(\n input: HoneypotIsSecurityInfo | null | undefined,\n): TokenHoneypotSecurity | undefined {\n if (!input) return undefined;\n return {\n available: input.available,\n averageTaxRatio: readOptionalString(input.averageTax),\n buyTaxRatio: readOptionalString(input.buyTax),\n canNotSell: readOptionalNumber(input.canNotSell),\n canSell: readOptionalNumber(input.canSell),\n chainSupported: readOptionalBoolean(input.chainSupported),\n highTaxRatio: readOptionalString(input.highTax),\n honeypotResult: readOptionalString(input.honeypotResult),\n isHoneypot: readOptionalBoolean(input.isHoneypot),\n isOpenSource: readOptionalBoolean(input.isOpenSource),\n isRenounced: readOptionalBoolean(input.isRenounced),\n lastRefreshedAt: readOptionalString(input.lastRefreshedAt),\n raw: input.raw,\n sellTaxRatio: readOptionalString(input.sellTax),\n };\n}\n\nfunction fromSerializedSecurity(\n input: SerializedSecurityInfo | null | undefined,\n): TokenSerializedSecurity | undefined {\n if (!input) return undefined;\n return {\n available: input.available,\n chainSupported: readOptionalBoolean(input.chainSupported),\n isOpenSource: readOptionalBoolean(input.isOpenSource),\n isProxy: readOptionalBoolean(input.isProxy),\n isRenounced: readOptionalBoolean(input.isRenounced),\n isSafe: readOptionalBoolean(input.isSafe),\n lastRefreshedAt: readOptionalString(input.lastRefreshedAt),\n launchpadName: readOptionalString(input.launchpadName),\n ownerAddress: readOptionalString(input.ownerAddress),\n raw: input.raw,\n sourceType: readOptionalString(input.sourceType),\n vulnCount: readOptionalNumber(input.vulnCount),\n vulnCriticalCount: readOptionalNumber(input.vulnCriticalCount),\n vulnMitigatedCount: readOptionalNumber(input.vulnMitigatedCount),\n };\n}\n\nfunction fromLockInfo(\n input: LockInfo | null | undefined,\n): TokenLockInfo | undefined {\n if (!input) return undefined;\n return {\n isLocked: readOptionalBoolean(input.isLocked),\n leftLockPercentRatio: readOptionalString(input.leftLockPercent),\n lockDetail: readOptionalString(input.lockDetail),\n lockPercentRatio: readOptionalString(input.lockPercent),\n lockTags: input.lockTags,\n };\n}\n\nfunction fromPrivilegeInfo(input: PrivilegeInfo): TokenPrivilegeInfo {\n return {\n address: readOptionalString(input.address),\n isRenounced: readOptionalBoolean(input.isRenounced),\n name: readOptionalString(input.name),\n };\n}\n\nfunction findMintPrivilege(\n privileges: TokenPrivilegeInfo[] | undefined,\n): TokenPrivilegeInfo | undefined {\n return privileges?.find((privilege) =>\n privilege.name?.toLowerCase().includes(\"mint\"),\n );\n}\n\nexport function fromTokenSecurity(\n input: TokenSecurityResponse | Record<string, unknown>,\n): TokenSecurity {\n const raw = input as TokenSecurityResponse & Record<string, unknown>;\n const legacy = input as Record<string, unknown>;\n const goplus = fromGoPlusSecurity(raw.goplus);\n const honeypot = fromHoneypotSecurity(raw.honeypot);\n const serialized = fromSerializedSecurity(raw.serialized);\n const lockInfo = fromLockInfo(raw.lockInfo);\n const solanaRawSecurity = fromSolanaGoPlusRaw(raw.goplus?.raw);\n const privileges = raw.privileges?.map(fromPrivilegeInfo) ?? undefined;\n const mintPrivilege = findMintPrivilege(privileges);\n const devTokenBurnRatio = firstDefined(\n readOptionalString(raw.devTokenBurnRatio),\n solanaRawSecurity?.lpBurnRatio,\n );\n const hasBlacklist = firstDefined(goplus?.hasBlacklist);\n const isHoneypot = firstDefined(honeypot?.isHoneypot, goplus?.isHoneypot);\n const isOpenSource = firstDefined(\n serialized?.isOpenSource,\n honeypot?.isOpenSource,\n goplus?.isOpenSource,\n );\n const isOwnershipRenounced = firstDefined(\n serialized?.isRenounced,\n honeypot?.isRenounced,\n goplus?.isRenounced,\n );\n const buyTaxRatio = firstDefined(honeypot?.buyTaxRatio, goplus?.buyTaxRatio);\n const sellTaxRatio = firstDefined(\n honeypot?.sellTaxRatio,\n goplus?.sellTaxRatio,\n );\n\n return {\n address: readOptionalString(raw.address),\n chain: readOptionalString(raw.chain),\n sourcesAvailable: raw.sourcesAvailable ?? undefined,\n goplus,\n honeypot,\n serialized,\n lockInfo,\n privileges,\n devTokenBurnAmount: readOptionalString(raw.devTokenBurnAmount),\n devTokenBurnRatio,\n lpBurnRatio: solanaRawSecurity?.lpBurnRatio,\n top10HoldersRatio: solanaRawSecurity?.top10HoldersRatio,\n isShowAlert: readOptionalBoolean(raw.isShowAlert),\n hasTransferFee: firstDefined(\n readLegacyBoolean(legacy.hasTransferFee),\n solanaRawSecurity?.hasTransferFee,\n ),\n isTransferFeeUpgradable: firstDefined(\n readLegacyBoolean(legacy.isTransferFeeUpgradable),\n solanaRawSecurity?.isTransferFeeUpgradable,\n ),\n isTransferable: firstDefined(\n readLegacyBoolean(legacy.isTransferable),\n solanaRawSecurity?.isTransferable,\n ),\n isFreezable: firstDefined(\n readOptionalBoolean(raw.isFreezable),\n goplus?.isFreezable,\n readLegacyBoolean(legacy.isFreezable),\n solanaRawSecurity?.isFreezable,\n ),\n isClosable: firstDefined(\n readLegacyBoolean(legacy.isClosable),\n solanaRawSecurity?.isClosable,\n ),\n isBalanceMutableAuthorityActive:\n solanaRawSecurity?.isBalanceMutableAuthorityActive,\n isMetadataMutable: solanaRawSecurity?.isMetadataMutable,\n isMintable: firstDefined(\n readOptionalBoolean(raw.isMintable),\n goplus?.isMintable,\n solanaRawSecurity?.isMintable,\n ),\n isMintAuthorityRenounced: firstDefined(\n mintPrivilege?.isRenounced,\n solanaRawSecurity?.isMintAuthorityRenounced,\n ),\n hasBlacklist,\n isLpBurned: firstDefined(\n solanaRawSecurity?.isLpBurned,\n hasPositiveRatio(devTokenBurnRatio),\n ),\n isOpenSource,\n isHoneypot,\n isOwnershipRenounced,\n isLpLocked: lockInfo?.isLocked,\n buyTaxRatio,\n sellTaxRatio,\n averageTaxRatio: honeypot?.averageTaxRatio,\n maxTaxRatio: honeypot?.highTaxRatio,\n isSerializedSafe: serialized?.isSafe,\n serializedVulnCount: serialized?.vulnCount,\n serializedCriticalVulnCount: serialized?.vulnCriticalCount,\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 *\n * The public `SwapDex` type is an open union (`\"jupiter\" | \"kyberswap\" | (string & {})`)\n * so consumers can pass new aggregator names without a type update. Internally\n * we only know how to convert mints for the two known DEXes; unknown values\n * fall back to the chain-inferred default.\n */\nfunction effectiveDex(params: SwapParams): \"jupiter\" | \"kyberswap\" {\n if (params.dex === \"jupiter\") return \"jupiter\";\n if (params.dex === \"kyberswap\") return \"kyberswap\";\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: 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 === 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: 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 toDateFromUnixLikeTimestamp(\n value: number | null | undefined,\n): Date | undefined {\n if (value == null) return undefined;\n return new Date(value < 1e12 ? value * 1000 : value);\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\ntype RawTokenHolderLike = Phase3TokenHolderDTO &\n Partial<PageResponseTokenHolder[\"data\"][number]>;\n\nfunction fromRawTokenHolder(holder: RawTokenHolderLike): TokenHolder {\n return {\n accountAddress: nullToUndefined(holder.accountAddress),\n address: holder.walletAddress,\n accuAmount: nullToUndefined(holder.accuAmount),\n accuCost: nullToUndefined(holder.accuCost),\n addrType: nullToUndefined(holder.addrType),\n addressLabel: nullToUndefined(holder.addressLabel),\n amount: holder.amount,\n amountInUsd: holder.amountInUsd,\n amountInNative: nullToUndefined(holder.amountInNative),\n ratio: holder.percentage,\n avgBuyPriceUsd: nullToUndefined(holder.avgBuyPriceUsd),\n avgCostUsd: nullToUndefined(holder.avgCostUsd),\n avgSellPriceUsd: nullToUndefined(holder.avgSellPriceUsd),\n buyAmountCur: nullToUndefined(holder.buyAmountCur),\n buyVolumeNative: nullToUndefined(holder.buyVolumeNative),\n buyVolumeUsd: nullToUndefined(holder.buyVolumeUsd),\n createdAt: toDateFromUnixLikeTimestamp(holder.createdAt),\n endHoldingAt: toDateFromUnixLikeTimestamp(holder.endHoldingAt),\n exchange: nullToUndefined(holder.exchange),\n firstBuyTime: toDateFromUnixLikeTimestamp(holder.firstBuyTime),\n historyBoughtCost: nullToUndefined(holder.historyBoughtCost),\n historyBoughtFee: nullToUndefined(holder.historyBoughtFee),\n historySoldFee: nullToUndefined(holder.historySoldFee),\n historySoldIncome: nullToUndefined(holder.historySoldIncome),\n historyTransferInAmount: nullToUndefined(holder.historyTransferInAmount),\n historyTransferInCost: nullToUndefined(holder.historyTransferInCost),\n historyTransferOutAmount: nullToUndefined(holder.historyTransferOutAmount),\n historyTransferOutFee: nullToUndefined(holder.historyTransferOutFee),\n historyTransferOutIncome: nullToUndefined(holder.historyTransferOutIncome),\n isClosed: nullToUndefined(holder.isClosed),\n isNew: nullToUndefined(holder.isNew),\n isTransferIn: nullToUndefined(holder.isTransferIn),\n lastActiveAt: toDateFromUnixLikeTimestamp(holder.lastActiveAt),\n lastBlock: nullToUndefined(holder.lastBlock),\n lossCount: nullToUndefined(holder.lossCount),\n makerTokenTags: nullToUndefined(holder.makerTokenTags),\n nativeBalance: nullToUndefined(holder.nativeBalance),\n netflowAmount: nullToUndefined(holder.netflowAmount),\n netflowAmountUsd: nullToUndefined(holder.netflowAmountUsd),\n netflowUsd: nullToUndefined(holder.netflowUsd),\n positionCostUsd: nullToUndefined(holder.positionCostUsd),\n realizedPnlRatio: nullToUndefined(holder.realizedPnlRatio),\n realizedProfit: nullToUndefined(holder.realizedProfit),\n roi: nullToUndefined(holder.roi),\n sellAmountCur: nullToUndefined(holder.sellAmountCur),\n sellAmountPercentage: nullToUndefined(holder.sellAmountPercentage),\n sellVolumeNative: nullToUndefined(holder.sellVolumeNative),\n sellVolumeUsd: nullToUndefined(holder.sellVolumeUsd),\n startHoldingAt: toDateFromUnixLikeTimestamp(holder.startHoldingAt),\n tags: toTagArray<WalletTag>(holder.tags),\n tokenTransferIn: nullToUndefined(holder.tokenTransferIn),\n tokenTransferOut: nullToUndefined(holder.tokenTransferOut),\n totalBuyCount: nullToUndefined(holder.totalBuyCount),\n totalCostUsd: nullToUndefined(holder.totalCostUsd),\n totalProfit: nullToUndefined(holder.totalProfit),\n totalSellCount: nullToUndefined(holder.totalSellCount),\n transferInAmount7d: nullToUndefined(holder.transferInAmount7d),\n transferInCount: nullToUndefined(holder.transferInCount),\n transferOutAmount7d: nullToUndefined(holder.transferOutAmount7d),\n transferOutCount: nullToUndefined(holder.transferOutCount),\n unrealizedPnlRatio: nullToUndefined(holder.unrealizedPnlRatio),\n unrealizedProfit: nullToUndefined(holder.unrealizedProfit),\n walletTagV2: nullToUndefined(holder.walletTagV2),\n winCount: nullToUndefined(holder.winCount),\n };\n}\n\nexport function fromTokenHolderPage(\n input: CursorPageDTO<Phase3TokenHolderDTO>,\n): CursorList<TokenHolder> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map((holder) => fromRawTokenHolder(holder)),\n };\n}\n\nexport function fromSdkTokenHolderPage(\n input: PageResponseTokenHolder,\n): CursorList<TokenHolder> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map((holder) => fromRawTokenHolder(holder)),\n };\n}\n\nexport function fromSdkTokenTopTraderPage(\n input: PageResponseTokenTopTrader,\n): CursorList<TokenTopTrader> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map((trader) => ({\n address: trader.walletAddress,\n amount: trader.amount,\n amountInUsd: trader.amountInUsd,\n tags: toTagArray<WalletTag>(trader.tags),\n lastActiveAt: toDateFromMs(trader.lastActiveAt),\n startHoldingAt: toDateFromMs(trader.startHoldingAt),\n averageBuyPriceInUsd: nullToUndefined(trader.averageBuyPriceInUsd),\n averageSellPriceInUsd: nullToUndefined(trader.averageSellPriceInUsd),\n buyAmountCur: nullToUndefined(trader.buyAmountCur),\n sellAmountCur: nullToUndefined(trader.sellAmountCur),\n totalBuyAmountInUsd: nullToUndefined(trader.totalBuyAmountInUsd),\n totalSellAmountInUsd: nullToUndefined(trader.totalSellAmountInUsd),\n realizedPnl: nullToUndefined(trader.realizedPnl),\n totalRealizedPnlInUsd: nullToUndefined(trader.totalRealizedPnlInUsd),\n unrealizedPnl: nullToUndefined(trader.unrealizedPnl),\n unrealizedPnlInUsd: nullToUndefined(trader.unrealizedPnlInUsd),\n roi: nullToUndefined(trader.roi),\n totalPnlInUsd: nullToUndefined(trader.totalPnlInUsd),\n totalBuyCount: nullToUndefined(trader.totalBuyCount),\n totalSellCount: nullToUndefined(trader.totalSellCount),\n transferIn: nullToUndefined(trader.transferIn),\n transferInCount: nullToUndefined(trader.transferInCount),\n transferOutCount: nullToUndefined(trader.transferOutCount),\n })),\n };\n}\n\nexport function fromSdkDevTokenPage(\n chain: Chain,\n input: PageResponseDevToken,\n): CursorList<Token> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map((token) => fromSdkDevTokenDTO(chain, token)),\n };\n}\n\nexport function fromTokenPage(\n input: ChainStreamTokenPage,\n): 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 ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map(fromTokenDTO),\n extra: nullToUndefined(pageExtra.countsByProtocols),\n };\n}\n\nexport function fromSwapRoute(input: SwapRouteResponse): 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): BlockchainLatestBlock {\n return {\n blockhash: input.blockhash,\n lastValidBlockHeight: input.lastValidBlockHeight,\n };\n}\n\nexport function fromSendTxResult(input: SendTxResponse): 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(\n chain: Chain,\n item: Phase3PnlItemDTO | PnlDetailItem,\n): 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 transferInAmountInUsd: nullToUndefined(item.transferInAmountInUsd),\n transferInCount:\n item.transferInCount != null ? Number(item.transferInCount) : undefined,\n transferOutAmountInUsd: nullToUndefined(item.transferOutAmountInUsd),\n transferOutCount:\n item.transferOutCount != null ? Number(item.transferOutCount) : undefined,\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 | PnlDetailsResult,\n): WalletPortfolioPnls {\n const summaryExtra = input.summary as Phase3PnlDetailsDTO[\"summary\"] & {\n totalProfitRatio?: string | null;\n };\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(summaryExtra.totalProfitRatio),\n avgProfitPerTradeInUsd: nullToUndefined(\n input.summary.avgProfitPerTradeInUsd,\n ),\n transferInAmountInUsd: nullToUndefined(input.summary.transferInAmountInUsd),\n transferInCount:\n input.summary.transferInCount != null\n ? Number(input.summary.transferInCount)\n : undefined,\n transferOutAmountInUsd: nullToUndefined(\n input.summary.transferOutAmountInUsd,\n ),\n transferOutCount:\n input.summary.transferOutCount != null\n ? Number(input.summary.transferOutCount)\n : undefined,\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: NetWorthByTokensResult,\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<WalletTag>(item.walletTokenTags),\n }));\n}\n\nexport function fromPnlDetailItems(\n chain: Chain,\n input: PnlDetailsResult,\n): PortfolioPnl[] {\n return input.data.map((item) => fromPnlItemDTO(chain, item));\n}\n\nexport function fromTradePage(\n input: PageResponseTradeDetail,\n): 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: toDateFromUnixLikeTimestamp(input.blockTimestamp) ?? new Date(0),\n gasFee: input.gasFee != null ? String(input.gasFee) : undefined,\n traderTags: toTagArray<WalletTag>(input.traderTags),\n };\n}\n\nexport function fromSdkActivityPage(\n input: PageResponseTradeDetail,\n): CursorList<Activity> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev ?? false,\n hasNext: input.hasNext ?? false,\n data: input.data.map(fromTradeDetailDTO),\n };\n}\n\nexport function fromActivityPage(\n input: CursorPageDTO<Phase3ActivityDTO>,\n): 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 time = toDateFromUnixLikeTimestamp(input.blockTimestamp) ?? new Date(0);\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,\n gasFee: input.gasFee != null ? String(input.gasFee) : undefined,\n traderTags: toTagArray<WalletTag>(input.traderTags),\n };\n}\n\nexport function fromTokenSubscribed(\n chain: Chain,\n input: WsNewToken,\n): 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): 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): TokenSubscribed {\n return {\n chain,\n address: input.address,\n stats: fromWsTokenStats(input),\n marketData: fromWsTokenMarketDataFromStats(input),\n };\n}\n\nexport function fromWsRankingTokenListToSubscribed(\n chain: Chain,\n input: WsRankingTokenList,\n): Array<TokenSubscribed> {\n const updates: Array<TokenSubscribed> = [];\n if (input.metadata) {\n updates.push(fromTokenMetadataSubscribed(chain, input.metadata));\n }\n if (input.stat) {\n updates.push(fromWsTokenDataSubscribed(chain, input.stat));\n }\n if (input.holder) {\n updates.push(\n fromWsTokenHolderToSubscribed(\n chain,\n input.holder.tokenAddress,\n input.holder,\n ),\n );\n }\n if (input.supply) {\n updates.push(\n fromWsTokenSupplyToSubscribed(\n chain,\n input.supply.tokenAddress,\n input.supply,\n ),\n );\n }\n if (input.bondingCurve) {\n updates.push(\n fromWsTokenBondingCurveToSubscribed(chain, input.bondingCurve),\n );\n }\n return updates.filter((update) => update.address);\n}\n\nexport function fromWsTokenSupplyToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenSupply,\n): 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): 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): 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): 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): 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): 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 bluechipHolders:\n input.bluechipHolders === undefined ? undefined : input.bluechipHolders,\n bluechipHoldings: input.bluechipHoldersAmount,\n bluechipHoldingsRatio: input.bluechipHoldersRatio,\n kolHolders: input.kolHolders === undefined ? undefined : input.kolHolders,\n kolHoldings: input.kolHoldersAmount,\n kolHoldingsRatio: input.kolHoldersRatio,\n proHolders: input.proHolders === undefined ? undefined : input.proHolders,\n proHoldings: input.proHoldersAmount,\n proHoldingsRatio: input.proHoldersRatio,\n insiderHolders:\n input.insiderHolders === undefined ? undefined : input.insiderHolders,\n insiderHoldings: input.insiderHoldersAmount,\n insiderHoldingsRatio: input.insiderHoldersRatio,\n devHolders: input.devHolders === undefined ? undefined : input.devHolders,\n devHoldings: input.devHoldersAmount,\n devHoldingsRatio: input.devHoldersRatio,\n sniperHolders:\n input.sniperHolders === undefined ? undefined : input.sniperHolders,\n sniperHoldings: input.sniperHoldersAmount,\n sniperHoldingsRatio: input.sniperHoldersRatio,\n freshHolders:\n input.freshHolders === undefined ? undefined : input.freshHolders,\n freshHoldings: input.freshHoldersAmount,\n freshHoldingsRatio: input.freshHoldersRatio,\n bundleHolders:\n input.bundleHolders === undefined ? undefined : input.bundleHolders,\n bundleHoldings: input.bundleHoldersAmount,\n bundleHoldingsRatio: input.bundleHoldersRatio,\n sandwichHolders:\n input.sandwichHolders === undefined ? undefined : input.sandwichHolders,\n sandwichHoldings: input.sandwichHoldersAmount,\n sandwichHoldingsRatio: input.sandwichHoldersRatio,\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 priceInUsd: deriveWsTokenPriceInUsd(\n input.sellAmountInUsd,\n input.sellAmount,\n ),\n },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n priceInUsd: deriveWsTokenPriceInUsd(\n input.buyAmountInUsd,\n input.buyAmount,\n ),\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 priceInUsd: deriveWsTokenPriceInUsd(\n input.sellAmountInUsd,\n input.sellAmount,\n ),\n },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n priceInUsd: deriveWsTokenPriceInUsd(\n input.buyAmountInUsd,\n input.buyAmount,\n ),\n },\n status: \"success\",\n time: new Date(input.timestamp),\n };\n}\n\nfunction deriveWsTokenPriceInUsd(\n amountInUsd: string | undefined,\n amount: string | undefined,\n): string | undefined {\n if (\n amountInUsd == null ||\n amountInUsd === \"\" ||\n amount == null ||\n amount === \"\"\n ) {\n return undefined;\n }\n const amountBn = new SafeBigNumber(amount);\n if (!amountBn.gt(0)) return undefined;\n return new SafeBigNumber(amountInUsd).div(amountBn).toString();\n}\n","import {\n ActivitySortBy,\n ChainStreamClient,\n TradeType,\n} from \"@chainstream-io/sdk\";\nimport type {\n Activity,\n ActivityDataCapability,\n Chain,\n CursorList,\n GetActivitiesOptions,\n GetTradesOptions,\n Trade,\n} from \"@liberfi.io/types\";\nimport { fromSdkActivityPage, fromTradePage, toChainDTO } from \"../utils\";\n\nfunction toActivitySortBy(\n options?: GetActivitiesOptions,\n): ActivitySortBy | undefined {\n if (!options?.sortBy) return undefined;\n if (options.sortBy === \"totalUsd\") {\n return options.sortDirection === \"asc\"\n ? ActivitySortBy.totalUsdAsc\n : ActivitySortBy.totalUsdDesc;\n }\n return options.sortDirection === \"asc\"\n ? ActivitySortBy.timestampAsc\n : ActivitySortBy.timestampDesc;\n}\n\n/** Domain-scoped trades and activity client. */\nexport class ActivityClient implements ActivityDataCapability {\n constructor(private readonly sdk: Pick<ChainStreamClient, \"trade\">) {}\n\n getWalletTrades(chain: Chain, address: string, options?: GetTradesOptions) {\n return this.getTrades(chain, { walletAddress: address }, options);\n }\n\n getTokenTrades(chain: Chain, address: string, options?: GetTradesOptions) {\n return this.getTrades(chain, { tokenAddress: address }, options);\n }\n\n getWalletActivities(\n chain: Chain,\n address: string,\n options?: GetActivitiesOptions,\n ) {\n return this.getActivities(chain, { walletAddress: address }, options);\n }\n\n getTokenActivities(\n chain: Chain,\n address: string,\n options?: GetActivitiesOptions,\n ) {\n return this.getActivities(chain, { tokenAddress: address }, options);\n }\n\n private async getTrades(\n chain: Chain,\n target: { walletAddress?: string; tokenAddress?: string },\n options?: GetTradesOptions,\n ): Promise<CursorList<Trade>> {\n const page = await this.sdk.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(page);\n }\n\n private async getActivities(\n chain: Chain,\n target: { walletAddress?: string; tokenAddress?: string },\n options?: GetActivitiesOptions,\n ): Promise<CursorList<Activity>> {\n const page = await this.sdk.trade.getActivities(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 sortBy: toActivitySortBy(options),\n });\n return fromSdkActivityPage(page);\n }\n}\n","import { ChainStreamClient } from \"@chainstream-io/sdk\";\nimport type { MediaCapability } from \"@liberfi.io/types\";\n\n/** Domain-scoped media upload client. */\nexport class MediaClient implements MediaCapability {\n constructor(private readonly sdk: Pick<ChainStreamClient, \"ipfs\">) {}\n\n async getPresignedUploadUrl(): Promise<string> {\n return (await this.sdk.ipfs.presign()).presignUrl;\n }\n}\n","/** Base error for failures at the client transport boundary. */\nexport class ClientTransportError extends Error {\n constructor(\n message: string,\n readonly operation: string,\n options?: ErrorOptions,\n ) {\n super(message, options);\n this.name = \"ClientTransportError\";\n }\n}\n\n/** Error emitted when an SDK operation exceeds its configured timeout. */\nexport class ClientTimeoutError extends ClientTransportError {\n readonly code = \"Timeout\" as const;\n\n constructor(\n operation: string,\n readonly timeoutMs: number,\n cause?: unknown,\n ) {\n super(`Operation ${operation} timed out after ${timeoutMs}ms`, operation, {\n cause,\n });\n this.name = \"ClientTimeoutError\";\n }\n}\n\n/** Error emitted for a non-successful HTTP response. */\nexport class ClientHttpError extends ClientTransportError {\n readonly code = \"HttpError\" as const;\n\n constructor(\n operation: string,\n readonly status: number,\n readonly responseBody?: unknown,\n ) {\n super(`Operation ${operation} failed with HTTP ${status}`, operation);\n this.name = \"ClientHttpError\";\n }\n}\n\n/** Error emitted when a transport DTO cannot satisfy a domain contract. */\nexport class ClientMappingError extends Error {\n readonly code = \"MappingError\" as const;\n\n constructor(\n readonly operation: string,\n detail: string,\n options?: ErrorOptions,\n ) {\n super(`Unable to map ${operation}: ${detail}`, options);\n this.name = \"ClientMappingError\";\n }\n}\n","import { ClientHttpError, ClientTimeoutError } from \"./errors\";\n\nexport interface HttpTransportRequest {\n operation: string;\n url: string;\n method?: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n headers?: Record<string, string>;\n body?: unknown;\n signal?: AbortSignal;\n timeoutMs?: number;\n}\n\nexport interface HttpTransport {\n request<TResponse>(request: HttpTransportRequest): Promise<TResponse>;\n}\n\nfunction safeErrorBody(value: string): unknown {\n if (!value) return undefined;\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return value;\n }\n}\n\n/** Fetch-backed transport with stable SDK error semantics. */\nexport class FetchHttpTransport implements HttpTransport {\n async request<TResponse>(request: HttpTransportRequest): Promise<TResponse> {\n const timeoutController = new AbortController();\n const timeout = request.timeoutMs\n ? setTimeout(() => timeoutController.abort(), request.timeoutMs)\n : undefined;\n const signal = request.signal\n ? AbortSignal.any([request.signal, timeoutController.signal])\n : timeoutController.signal;\n\n try {\n const response = await fetch(request.url, {\n method: request.method ?? \"GET\",\n headers: request.headers,\n body:\n request.body === undefined ? undefined : JSON.stringify(request.body),\n signal,\n });\n if (!response.ok) {\n const body = await response.text().catch(() => \"\");\n throw new ClientHttpError(\n request.operation,\n response.status,\n safeErrorBody(body),\n );\n }\n return (await response.json()) as TResponse;\n } catch (error) {\n if (timeoutController.signal.aborted && !request.signal?.aborted) {\n throw new ClientTimeoutError(\n request.operation,\n request.timeoutMs ?? 0,\n error,\n );\n }\n throw error;\n } finally {\n if (timeout !== undefined) clearTimeout(timeout);\n }\n }\n}\n","/**\n * Phase 3 HTTP helpers.\n *\n * `@chainstream-io/sdk@2.1.12` still does not expose every Phase 3 public\n * contract this package supports, including the `realizedPnl` holder sort and\n * the `90d` wallet PnL resolution.\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\";\nimport {\n FetchHttpTransport,\n type HttpTransport,\n} from \"./transport/http-transport\";\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 transport: HttpTransport;\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\n/**\n * Join the base URL and an endpoint path while preserving the base URL's\n * own path component.\n *\n * `new URL(\"/v2/foo\", \"https://host/api\")` would return\n * `https://host/v2/foo` because, per the WHATWG URL spec, an absolute path\n * replaces the base URL's path entirely. That breaks consumers that proxy\n * the API behind a path prefix (e.g. Next.js rewrites under `/dex-api`),\n * because the prefix gets silently dropped and the upstream request 404s.\n *\n * We concatenate strings instead so `https://host/api` + `/v2/foo` becomes\n * `https://host/api/v2/foo` regardless of trailing/leading slashes.\n */\nfunction joinBaseUrl(baseUrl: string, path: string): string {\n const trimmedBase = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return trimmedBase + normalizedPath;\n}\n\nasync function request<T>(\n ctx: Phase3RequestContext,\n operation: string,\n path: string,\n query: Record<string, unknown>,\n): Promise<T> {\n const url = new URL(joinBaseUrl(ctx.baseUrl, path));\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 return ctx.transport.request<T>({\n operation,\n url: url.toString(),\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n}\n\nexport function buildPhase3Context(\n accessToken: ClientTokenProvider,\n serverUrl?: string,\n transport: HttpTransport = new FetchHttpTransport(),\n): Phase3RequestContext {\n return {\n baseUrl: serverUrl ?? DEFAULT_SERVER_URL,\n accessToken,\n transport,\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 amountInNative?: string | null;\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 transferInAmountInUsd?: string | null;\n transferInCount?: string | null;\n transferOutAmountInUsd?: string | null;\n transferOutCount?: 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 transferInAmountInUsd?: string | null;\n transferInCount?: string | null;\n transferOutAmountInUsd?: string | null;\n transferOutCount?: string | null;\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 \"getTokenHolders\",\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 \"getActivities\",\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 \"getWalletNetWorthByTokens\",\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 \"getWalletPnlDetails\",\n `/v2/wallet/${encodeURIComponent(chain)}/${encodeURIComponent(\n walletAddress,\n )}/pnl-details`,\n query as unknown as Record<string, unknown>,\n );\n}\n","import type { ISubscribeClient } from \"@liberfi.io/types\";\n\n/** Domain subscription facade that owns the compatibility subscription surface. */\nexport class SubscriptionClient implements ISubscribeClient {\n readonly subscribeToken: ISubscribeClient[\"subscribeToken\"];\n readonly subscribeTokens: ISubscribeClient[\"subscribeTokens\"];\n readonly subscribeTokenCandles: ISubscribeClient[\"subscribeTokenCandles\"];\n readonly subscribeNewTokens: ISubscribeClient[\"subscribeNewTokens\"];\n readonly subscribeNewTokensMetadata: ISubscribeClient[\"subscribeNewTokensMetadata\"];\n readonly subscribeNewPools: ISubscribeClient[\"subscribeNewPools\"];\n readonly subscribeTrendingTokens: ISubscribeClient[\"subscribeTrendingTokens\"];\n readonly subscribeMigratedTokens: ISubscribeClient[\"subscribeMigratedTokens\"];\n readonly subscribeFinalStretchTokens: ISubscribeClient[\"subscribeFinalStretchTokens\"];\n readonly subscribeStockTokens: ISubscribeClient[\"subscribeStockTokens\"];\n readonly subscribeWalletPnl: ISubscribeClient[\"subscribeWalletPnl\"];\n readonly subscribeWalletPortfolios: ISubscribeClient[\"subscribeWalletPortfolios\"];\n readonly subscribeWalletPortfolioPnls: ISubscribeClient[\"subscribeWalletPortfolioPnls\"];\n readonly subscribeWalletTrades: ISubscribeClient[\"subscribeWalletTrades\"];\n readonly subscribeTokenTrades: ISubscribeClient[\"subscribeTokenTrades\"];\n readonly subscribeWalletActivities: ISubscribeClient[\"subscribeWalletActivities\"];\n readonly subscribeTokenActivities: ISubscribeClient[\"subscribeTokenActivities\"];\n\n constructor(implementation: ISubscribeClient) {\n this.subscribeToken = implementation.subscribeToken.bind(implementation);\n this.subscribeTokens = implementation.subscribeTokens.bind(implementation);\n this.subscribeTokenCandles =\n implementation.subscribeTokenCandles.bind(implementation);\n this.subscribeNewTokens =\n implementation.subscribeNewTokens.bind(implementation);\n this.subscribeNewTokensMetadata =\n implementation.subscribeNewTokensMetadata.bind(implementation);\n this.subscribeNewPools =\n implementation.subscribeNewPools.bind(implementation);\n this.subscribeTrendingTokens =\n implementation.subscribeTrendingTokens.bind(implementation);\n this.subscribeMigratedTokens =\n implementation.subscribeMigratedTokens.bind(implementation);\n this.subscribeFinalStretchTokens =\n implementation.subscribeFinalStretchTokens.bind(implementation);\n this.subscribeStockTokens =\n implementation.subscribeStockTokens.bind(implementation);\n this.subscribeWalletPnl =\n implementation.subscribeWalletPnl.bind(implementation);\n this.subscribeWalletPortfolios =\n implementation.subscribeWalletPortfolios.bind(implementation);\n this.subscribeWalletPortfolioPnls =\n implementation.subscribeWalletPortfolioPnls.bind(implementation);\n this.subscribeWalletTrades =\n implementation.subscribeWalletTrades.bind(implementation);\n this.subscribeTokenTrades =\n implementation.subscribeTokenTrades.bind(implementation);\n this.subscribeWalletActivities =\n implementation.subscribeWalletActivities.bind(implementation);\n this.subscribeTokenActivities =\n implementation.subscribeTokenActivities.bind(implementation);\n }\n}\n","import {\n ChainStreamClient,\n HolderSortBy,\n RankingPoolType,\n SearchSortBy,\n SortDirection,\n TokenField,\n TokenTraderTag,\n TraderSortBy,\n} from \"@chainstream-io/sdk\";\nimport type {\n Chain,\n CursorList,\n GetTokenCandlesOptions,\n GetTokenHoldersOptions,\n GetTokenListOptions,\n GetTokensByCreatorOptions,\n GetTokenTopTradersOptions,\n Pool,\n SearchTokenCursorList,\n SearchTokensOptions,\n Token,\n TokenCandle,\n TokenDataCapability,\n TokenHolder,\n TokenMarketData,\n TokenResolution,\n TokenSecurity,\n TokenStats,\n TokenTopTrader,\n} from \"@liberfi.io/types\";\nimport {\n fromRankingPoolDTO,\n fromSdkDevTokenPage,\n fromSdkTokenHolderPage,\n fromSdkTokenTopTraderPage,\n fromTokenCandle,\n fromTokenDTO,\n fromTokenMarketDataDTO,\n fromTokenPage,\n fromTokenSecurity,\n fromTokenStatsDTO,\n toChainDTO,\n toFieldDTO,\n toRangeFiltersDTO,\n toResolutionDTO,\n toSearchFieldDTO,\n toSortDirectionDTO,\n} from \"./token-mappers\";\n\ntype TokenClientSdk = Pick<ChainStreamClient, \"token\" | \"ranking\">;\n\nfunction toHolderSortByDTO(\n sortBy?: NonNullable<GetTokenHoldersOptions[\"sortBy\"]>,\n): HolderSortBy | undefined {\n const values: Partial<\n Record<NonNullable<GetTokenHoldersOptions[\"sortBy\"]>, HolderSortBy>\n > = {\n amountPercentage: HolderSortBy.amountPercentage,\n holdingUsd: HolderSortBy.holdingUsd,\n usdValue: HolderSortBy.usdValue,\n totalPnl: HolderSortBy.totalPnl,\n lastActiveAt: HolderSortBy.lastActiveAt,\n realizedPnl: HolderSortBy.realizedPnl,\n unrealizedPnl: HolderSortBy.unrealizedPnl,\n buyVolume: HolderSortBy.buyVolume,\n sellVolume: HolderSortBy.sellVolume,\n netflowUsd: HolderSortBy.netflowUsd,\n createdAt: HolderSortBy.createdAt,\n };\n return sortBy ? values[sortBy] : undefined;\n}\n\nfunction toTraderSortByDTO(\n sortBy?: GetTokenTopTradersOptions[\"sortBy\"],\n): TraderSortBy | undefined {\n if (sortBy === \"totalPnl\" || sortBy === \"profit\")\n return TraderSortBy.totalPnl;\n const values: Partial<Record<NonNullable<typeof sortBy>, TraderSortBy>> = {\n realizedPnl: TraderSortBy.realizedPnl,\n unrealizedPnl: TraderSortBy.unrealizedPnl,\n buyVolume: TraderSortBy.buyVolume,\n sellVolume: TraderSortBy.sellVolume,\n lastActiveAt: TraderSortBy.lastActiveAt,\n netflowUsd: TraderSortBy.netflowUsd,\n createdAt: TraderSortBy.createdAt,\n };\n return sortBy ? values[sortBy] : undefined;\n}\n\nfunction parseLaunchPlatformFromFilters(\n filters: GetTokenListOptions[\"filters\"],\n): Array<string> | undefined {\n const filter = filters?.find(\n (item) => item.field === \"launchedFromProtocolFamily\",\n );\n if (!filter) return undefined;\n if (filter.operator === \"eq\") return [filter.value as string];\n if (filter.operator === \"in\") return filter.value as Array<string>;\n console.warn(\"invalid launchedFromProtocolFamily filter\", filter);\n return undefined;\n}\n\n/** Domain-scoped token client backed by ChainStream token and ranking APIs. */\nexport class TokenClient implements TokenDataCapability {\n constructor(private readonly sdk: TokenClientSdk) {}\n\n async getToken(chain: Chain, address: string): Promise<Token> {\n return fromTokenDTO(\n await this.sdk.token.getToken(toChainDTO(chain), address),\n );\n }\n\n async getTokens(\n chain: Chain,\n addresses: Array<string>,\n ): Promise<Array<Token>> {\n const tokens = await this.sdk.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?: GetTokenCandlesOptions,\n ): Promise<Array<TokenCandle>> {\n const candles = await this.sdk.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((candle) => fromTokenCandle(candle, resolution));\n }\n\n async getTokenSecurity(\n chain: Chain,\n address: string,\n ): Promise<TokenSecurity> {\n return fromTokenSecurity(\n await this.sdk.token.getSecurity(toChainDTO(chain), address),\n );\n }\n\n async getTokenStats(chain: Chain, address: string): Promise<TokenStats> {\n return fromTokenStatsDTO(\n await this.sdk.token.getStats(toChainDTO(chain), address),\n );\n }\n\n async getTokenHolders(\n chain: Chain,\n address: string,\n options?: GetTokenHoldersOptions,\n ): Promise<CursorList<TokenHolder>> {\n const page = await this.sdk.token.getHolders(toChainDTO(chain), address, {\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n sortBy: toHolderSortByDTO(options?.sortBy),\n sortDirection: options?.sortDirection\n ? (toSortDirectionDTO(options.sortDirection) as SortDirection)\n : undefined,\n });\n return fromSdkTokenHolderPage(page);\n }\n\n async getTokenTopTraders(\n chain: Chain,\n address: string,\n options?: GetTokenTopTradersOptions,\n ): Promise<CursorList<TokenTopTrader>> {\n const page = await this.sdk.token.getTokenTopTraders(\n toChainDTO(chain),\n address,\n {\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n sortBy: toTraderSortByDTO(options?.sortBy),\n sortDirection: options?.sortDirection\n ? (toSortDirectionDTO(options.sortDirection) as SortDirection)\n : undefined,\n tag: options?.tag as TokenTraderTag | undefined,\n },\n );\n return fromSdkTokenTopTraderPage(page);\n }\n\n async getTokenMarketData(\n chain: Chain,\n address: string,\n ): Promise<TokenMarketData> {\n return fromTokenMarketDataDTO(\n await this.sdk.token.getMarketData(toChainDTO(chain), address),\n );\n }\n\n async getNewTokens(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n return (\n await this.sdk.ranking.getNewTokens(\n toChainDTO(chain),\n this.buildRankingParams(options),\n )\n ).map(fromTokenDTO);\n }\n\n async getNewPools(chain: Chain): Promise<Array<Pool>> {\n return (\n await this.sdk.ranking.getRankingPools(\n toChainDTO(chain),\n RankingPoolType[\"new-pool\"],\n )\n ).map((pool) => fromRankingPoolDTO(chain, pool));\n }\n\n async getFinalStretchTokens(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n return (\n await this.sdk.ranking.getFinalStretchTokens(\n toChainDTO(chain),\n this.buildRankingParams(options),\n )\n ).map(fromTokenDTO);\n }\n\n async getMigratedTokens(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n return (\n await this.sdk.ranking.getMigratedTokens(\n toChainDTO(chain),\n this.buildRankingParams(options),\n )\n ).map(fromTokenDTO);\n }\n\n async getTrendingTokens(\n chain: Chain,\n resolution: \"1m\" | \"5m\" | \"1h\" | \"4h\" | \"24h\",\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n return (\n await this.sdk.ranking.getHotTokens(\n toChainDTO(chain),\n resolution,\n this.buildRankingParams(options),\n )\n ).map(fromTokenDTO);\n }\n\n async getStockTokens(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n return (\n await this.sdk.ranking.getStocksTokens(\n toChainDTO(chain),\n this.buildRankingParams(options),\n )\n ).map(fromTokenDTO);\n }\n\n async searchTokens(\n options?: SearchTokensOptions,\n ): Promise<SearchTokenCursorList> {\n return fromTokenPage(\n await this.sdk.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 }),\n );\n }\n\n async getTokensByCreator(\n chain: Chain,\n creator: string,\n options?: GetTokensByCreatorOptions,\n ): Promise<CursorList<Token>> {\n return fromSdkDevTokenPage(\n chain,\n await this.sdk.token.getDevTokens(toChainDTO(chain), creator, {\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n }),\n );\n }\n\n private buildRankingParams(options?: 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","import { ChainStreamClient, ChainSymbol } from \"@chainstream-io/sdk\";\nimport type { SwapParams, SwapRoute, TradeCapability } from \"@liberfi.io/types\";\nimport { fromSwapRoute, toChainDTO, toSwapRouteInput } from \"../utils\";\n\n/** Domain-scoped swap route client. */\nexport class TradeClient implements TradeCapability {\n constructor(private readonly sdk: Pick<ChainStreamClient, \"dex\">) {}\n\n async swapRoute(params: SwapParams): Promise<SwapRoute> {\n const route = await this.sdk.dex.route(\n toChainDTO(params.chain) as ChainSymbol,\n toSwapRouteInput(params),\n );\n return fromSwapRoute(route);\n }\n}\n","import type {\n TradeExecutionFailureReason,\n TradeExecutionPhase,\n} from \"./trade-execution-types\";\n\nconst REASON_TO_PHASE: Record<\n TradeExecutionFailureReason,\n TradeExecutionPhase | undefined\n> = {\n disconnected: \"sign\",\n quote: \"route\",\n expired: \"expired\",\n sign: \"sign\",\n submit: \"send\",\n confirm: \"confirm\",\n cancelled: undefined,\n};\n\nexport class TradeExecutionError extends Error {\n readonly reason: TradeExecutionFailureReason;\n readonly phase?: TradeExecutionPhase;\n override readonly cause?: unknown;\n\n constructor(\n message: string,\n options: {\n reason: TradeExecutionFailureReason;\n phase?: TradeExecutionPhase;\n cause?: unknown;\n },\n ) {\n super(message);\n this.name = \"TradeExecutionError\";\n this.reason = options.reason;\n this.phase = options.phase ?? REASON_TO_PHASE[options.reason];\n this.cause = options.cause;\n }\n}\n\nexport class TradeRouteExpiredError extends TradeExecutionError {\n constructor(message = \"Swap route expired. Please refresh the quote.\") {\n super(message, { reason: \"expired\", phase: \"expired\" });\n this.name = \"TradeRouteExpiredError\";\n }\n}\n\nexport function asError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n\nexport function isAbortError(error: unknown): boolean {\n if (error instanceof TradeExecutionError && error.reason === \"cancelled\") {\n return true;\n }\n if (typeof error !== \"object\" || error === null) return false;\n const name = (error as { name?: string }).name;\n return name === \"AbortError\" || name === \"CancelledError\";\n}\n","import type { Chain, SwapRoute } from \"@liberfi.io/types\";\nimport { isSolanaChain } from \"@liberfi.io/utils\";\nimport { TradeRouteExpiredError } from \"./trade-execution-errors\";\nimport type { TradeLatestBlock } from \"./trade-execution-types\";\n\nexport const SOLANA_BLOCKHASH_VALIDITY_BLOCKS = 150;\nexport const LATEST_BLOCK_CACHE_MAX_AGE_MS = 12_000;\nexport const PRE_SIGN_MIN_REMAINING_BLOCKS = 60;\nexport const POST_SIGN_MIN_REMAINING_BLOCKS = 40;\nexport const PRE_SIGN_STALE_MS = 6_000;\nexport const POST_SIGN_STALE_MS = 6_000;\n\nexport function remainingSolanaBlocks(\n routeLastValidBlockHeight: number,\n latestLastValidBlockHeight: number,\n): number {\n const estimatedCurrentBlockHeight =\n latestLastValidBlockHeight - SOLANA_BLOCKHASH_VALIDITY_BLOCKS;\n return routeLastValidBlockHeight - estimatedCurrentBlockHeight;\n}\n\nexport function assertTradeRouteBlockhashFresh(\n chain: Chain,\n route: SwapRoute,\n latestBlock: TradeLatestBlock,\n minRemainingBlocks: number,\n now: number,\n): void {\n if (!isSolanaChain(chain) || route.lastValidBlockHeight == null) return;\n\n const updatedAt = latestBlock.dataUpdatedAt ?? now;\n if (\n !latestBlock.blockhash ||\n now - updatedAt > LATEST_BLOCK_CACHE_MAX_AGE_MS\n ) {\n throw new TradeRouteExpiredError(\n \"Latest Solana block data is stale. Please refresh the quote.\",\n );\n }\n\n const remainingBlocks = remainingSolanaBlocks(\n route.lastValidBlockHeight,\n latestBlock.lastValidBlockHeight,\n );\n\n if (remainingBlocks < minRemainingBlocks) {\n throw new TradeRouteExpiredError(\n \"Swap route is close to blockhash expiry. Please refresh the quote.\",\n );\n }\n}\n\nexport function isSolanaBlockhashExpiredSendError(error: unknown): boolean {\n const msg = (\n error instanceof Error ? error.message : String(error)\n ).toLowerCase();\n return (\n msg.includes(\"block height exceeded\") ||\n msg.includes(\"blockhash not found\") ||\n msg.includes(\"blockhashnotfound\")\n );\n}\n","import type { TradeExecutionClock } from \"./trade-execution-types\";\n\nfunction sleepWithSignal(ms: number, signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) {\n return Promise.reject(abortError());\n }\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(abortError());\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction abortError(): Error {\n const error = new Error(\"Trade execution cancelled\");\n error.name = \"AbortError\";\n return error;\n}\n\nexport const systemClock: TradeExecutionClock = {\n now: () => Date.now(),\n sleep: sleepWithSignal,\n};\n\nexport class FakeTradeExecutionClock implements TradeExecutionClock {\n nowMs: number;\n private readonly sleepers: Array<{\n at: number;\n resolve: () => void;\n reject: (error: Error) => void;\n signal?: AbortSignal;\n }> = [];\n\n constructor(nowMs = 10_000) {\n this.nowMs = nowMs;\n }\n\n now(): number {\n return this.nowMs;\n }\n\n sleep(ms: number, signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) {\n return Promise.reject(abortError());\n }\n return new Promise((resolve, reject) => {\n const sleeper = {\n at: this.nowMs + ms,\n resolve: () => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n },\n reject: (error: Error) => {\n signal?.removeEventListener(\"abort\", onAbort);\n reject(error);\n },\n signal,\n };\n const onAbort = () => {\n const index = this.sleepers.indexOf(sleeper);\n if (index >= 0) this.sleepers.splice(index, 1);\n sleeper.reject(abortError());\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n this.sleepers.push(sleeper);\n });\n }\n\n advance(ms: number): void {\n this.nowMs += ms;\n const due = this.sleepers.filter((sleeper) => sleeper.at <= this.nowMs);\n for (const sleeper of due) {\n const index = this.sleepers.indexOf(sleeper);\n if (index >= 0) this.sleepers.splice(index, 1);\n sleeper.resolve();\n }\n }\n}\n","import type {\n Chain,\n SendTxParams,\n SendTxResult,\n SwapParams,\n SwapRoute,\n} from \"@liberfi.io/types\";\nimport { SwapMode } from \"@liberfi.io/types\";\nimport type {\n TradeExecutionAdapter,\n TradeIntent,\n TradeLatestBlock,\n} from \"./trade-execution-types\";\n\nexport interface ClientTradeExecutionAdapterDeps {\n swapRoute: (params: SwapParams) => Promise<SwapRoute>;\n sendTx: (params: SendTxParams) => Promise<SendTxResult>;\n getLatestBlock?: (chain: Chain) => Promise<TradeLatestBlock>;\n checkTxSuccess?: (\n chain: Chain,\n txHash: string,\n timeout?: number,\n ) => Promise<boolean>;\n}\n\nexport function intentToSwapParams(intent: TradeIntent): SwapParams {\n return {\n chain: intent.chain,\n userAddress: intent.userAddress,\n input: intent.input,\n output: intent.output,\n mode: intent.mode ?? SwapMode.EXACT_IN,\n amount: intent.amount,\n slippage: intent.slippage,\n priorityFee: intent.priorityFee,\n tipFee: intent.tipFee,\n isAntiMev: intent.isAntiMev,\n permit: intent.permit,\n deadline: intent.deadline,\n };\n}\n\n/** Builds a runtime adapter from domain trade/transaction client methods. */\nexport function createClientTradeExecutionAdapter(\n deps: ClientTradeExecutionAdapterDeps,\n): TradeExecutionAdapter {\n return {\n quote: (intent) => deps.swapRoute(intentToSwapParams(intent)),\n getLatestBlock: deps.getLatestBlock,\n submit: (signedBase64, chain) =>\n deps.sendTx({ chain, serializedTx: signedBase64 }),\n confirm: deps.checkTxSuccess\n ? async (chain, txHash) => {\n const success = await deps.checkTxSuccess!(chain, txHash);\n return success ? \"confirmed\" : \"failed\";\n }\n : undefined,\n };\n}\n","export function base64ToUint8Array(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\nexport function uint8ArrayToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]!);\n }\n return btoa(binary);\n}\n","import type { Chain, SwapRoute } from \"@liberfi.io/types\";\nimport type {\n TradeExecutionAdapter,\n TradeIntent,\n TradeLatestBlock,\n} from \"./trade-execution-types\";\n\nexport interface InMemoryTradeExecutionAdapterOptions {\n quote?: TradeExecutionAdapter[\"quote\"];\n getLatestBlock?: TradeExecutionAdapter[\"getLatestBlock\"];\n sign?: TradeExecutionAdapter[\"sign\"];\n submit?: TradeExecutionAdapter[\"submit\"];\n confirm?: TradeExecutionAdapter[\"confirm\"];\n route?: SwapRoute;\n latestBlock?: TradeLatestBlock;\n txHash?: string;\n extra?: Record<string, unknown>;\n}\n\nconst DEFAULT_ROUTE: SwapRoute = {\n serializedTx: \"dW5zaWduZWQtdHg=\",\n lastValidBlockHeight: 1_090,\n plans: [],\n};\n\nconst DEFAULT_BLOCK: TradeLatestBlock = {\n blockhash: \"latest\",\n lastValidBlockHeight: 1_150,\n dataUpdatedAt: 10_000,\n};\n\n/** Deterministic adapter for runtime tests. Never talks to a chain. */\nexport class InMemoryTradeExecutionAdapter implements TradeExecutionAdapter {\n readonly quotes: TradeIntent[] = [];\n readonly latestBlocks: Chain[] = [];\n readonly signs: Uint8Array[] = [];\n readonly submits: Array<{ signedBase64: string; chain: Chain }> = [];\n readonly confirms: Array<{ chain: Chain; txHash: string }> = [];\n\n quoteImpl?: TradeExecutionAdapter[\"quote\"];\n getLatestBlockImpl?: TradeExecutionAdapter[\"getLatestBlock\"];\n signImpl?: TradeExecutionAdapter[\"sign\"];\n submitImpl?: TradeExecutionAdapter[\"submit\"];\n confirmImpl?: TradeExecutionAdapter[\"confirm\"];\n\n route: SwapRoute;\n latestBlock: TradeLatestBlock;\n txHash: string;\n extra?: Record<string, unknown>;\n\n constructor(options: InMemoryTradeExecutionAdapterOptions = {}) {\n this.quoteImpl = options.quote;\n this.getLatestBlockImpl = options.getLatestBlock;\n this.signImpl = options.sign;\n this.submitImpl = options.submit;\n this.confirmImpl = options.confirm;\n this.route = options.route ?? { ...DEFAULT_ROUTE, plans: [] };\n this.latestBlock = { ...DEFAULT_BLOCK, ...(options.latestBlock ?? {}) };\n this.txHash = options.txHash ?? \"tx-hash\";\n this.extra = options.extra;\n }\n\n quote: TradeExecutionAdapter[\"quote\"] = async (intent, signal) => {\n this.quotes.push(intent);\n if (this.quoteImpl) return this.quoteImpl(intent, signal);\n return this.route;\n };\n\n getLatestBlock: TradeExecutionAdapter[\"getLatestBlock\"] = async (chain) => {\n this.latestBlocks.push(chain);\n if (this.getLatestBlockImpl) return this.getLatestBlockImpl(chain);\n return this.latestBlock;\n };\n\n get sign(): TradeExecutionAdapter[\"sign\"] {\n if (!this.signImpl) return undefined;\n return async (unsigned) => {\n this.signs.push(unsigned);\n return this.signImpl!(unsigned);\n };\n }\n\n submit: TradeExecutionAdapter[\"submit\"] = async (signedBase64, chain) => {\n this.submits.push({ signedBase64, chain });\n if (this.submitImpl) return this.submitImpl(signedBase64, chain);\n return { txHash: this.txHash, extra: this.extra };\n };\n\n confirm: TradeExecutionAdapter[\"confirm\"] = async (chain, txHash, signal) => {\n this.confirms.push({ chain, txHash });\n if (this.confirmImpl) return this.confirmImpl(chain, txHash, signal);\n return \"confirmed\";\n };\n}\n","import type { Chain, SwapMode, SwapRoute } from \"@liberfi.io/types\";\n\n/** Quote → expiry → sign → submit → confirm lifecycle states. */\nexport type TradeExecutionState =\n | \"idle\"\n | \"quoting\"\n | \"quoted\"\n | \"signing\"\n | \"submitting\"\n | \"confirming\"\n | \"succeeded\"\n | \"failed\"\n | \"cancelled\"\n | \"stale\";\n\n/** Error callback phases used by the `useSwap` compatibility facade. */\nexport type TradeExecutionPhase =\n | \"route\"\n | \"sign\"\n | \"expired\"\n | \"send\"\n | \"confirm\";\n\nexport type TradeExecutionFailureReason =\n | \"disconnected\"\n | \"quote\"\n | \"expired\"\n | \"sign\"\n | \"submit\"\n | \"confirm\"\n | \"cancelled\";\n\n/**\n * Swap intent without a UI wallet object. Mirrors `SwapInput` minus `wallet`,\n * with `userAddress` inlined so the runtime never stores a signer.\n */\nexport interface TradeIntent {\n chain: Chain;\n userAddress: string;\n input: string;\n output: string;\n amount: string;\n mode?: SwapMode;\n slippage?: number;\n priorityFee?: string;\n tipFee?: string;\n isAntiMev?: boolean;\n permit?: string;\n deadline?: number;\n}\n\nexport interface TradeLatestBlock {\n blockhash: string;\n lastValidBlockHeight: number;\n dataUpdatedAt?: number;\n}\n\nexport type TradeExecutionSignFn = (\n unsigned: Uint8Array,\n) => Promise<Uint8Array>;\n\n/**\n * Injected chain I/O. The wallet/signer is not stored here; `sign` may be\n * supplied on the adapter or (preferred) per `execute()` call.\n */\nexport interface TradeExecutionAdapter {\n quote(intent: TradeIntent, signal?: AbortSignal): Promise<SwapRoute>;\n getLatestBlock?(chain: Chain): Promise<TradeLatestBlock>;\n sign?(unsigned: Uint8Array): Promise<Uint8Array>;\n submit(\n signedBase64: string,\n chain: Chain,\n ): Promise<{ txHash: string; extra?: Record<string, unknown> }>;\n confirm?(\n chain: Chain,\n txHash: string,\n signal?: AbortSignal,\n ): Promise<\"confirmed\" | \"failed\">;\n}\n\nexport interface TradeExecutionClock {\n now(): number;\n sleep?(ms: number, signal?: AbortSignal): Promise<void>;\n}\n\nexport interface TradeExecuteOptions {\n sign?: TradeExecutionSignFn;\n confirm?: boolean;\n confirmTimeoutMs?: number;\n}\n\nexport interface TradeExecutionResult {\n txHash: string;\n extra?: Record<string, unknown>;\n}\n\nexport interface TradeExecutionSnapshot {\n id?: string;\n state: TradeExecutionState;\n intent?: TradeIntent;\n route?: SwapRoute;\n txHash?: string;\n extra?: Record<string, unknown>;\n error?: Error;\n phase?: TradeExecutionPhase;\n}\n\nexport interface TradeExecutionRuntimeOptions {\n adapter: TradeExecutionAdapter;\n clock?: TradeExecutionClock;\n id?: () => string;\n}\n\nexport const IN_FLIGHT_TRADE_STATES: ReadonlySet<TradeExecutionState> = new Set(\n [\"quoting\", \"quoted\", \"signing\", \"submitting\", \"confirming\"],\n);\n","import type { SwapRoute } from \"@liberfi.io/types\";\nimport { isSolanaChain } from \"@liberfi.io/utils\";\nimport {\n assertTradeRouteBlockhashFresh,\n isSolanaBlockhashExpiredSendError,\n POST_SIGN_MIN_REMAINING_BLOCKS,\n PRE_SIGN_MIN_REMAINING_BLOCKS,\n} from \"./blockhash-expiry\";\nimport { systemClock } from \"./clock\";\nimport { base64ToUint8Array, uint8ArrayToBase64 } from \"./encoding\";\nimport {\n asError,\n isAbortError,\n TradeExecutionError,\n TradeRouteExpiredError,\n} from \"./trade-execution-errors\";\nimport type {\n TradeExecuteOptions,\n TradeExecutionAdapter,\n TradeExecutionClock,\n TradeExecutionResult,\n TradeExecutionRuntimeOptions,\n TradeExecutionSignFn,\n TradeExecutionSnapshot,\n TradeIntent,\n TradeLatestBlock,\n} from \"./trade-execution-types\";\nimport { IN_FLIGHT_TRADE_STATES } from \"./trade-execution-types\";\n\nlet nextExecutionId = 0;\n\nfunction defaultId(): string {\n nextExecutionId += 1;\n return `trade-${nextExecutionId}`;\n}\n\nfunction cancelledError(): TradeExecutionError {\n return new TradeExecutionError(\"Trade execution cancelled\", {\n reason: \"cancelled\",\n });\n}\n\n/**\n * React-free trade execution state machine.\n *\n * Wallet/signer is injected per `execute()` (or optionally on the adapter)\n * and is never stored as a UI wallet object.\n */\nexport class TradeExecutionRuntime {\n private readonly adapter: TradeExecutionAdapter;\n private readonly clock: TradeExecutionClock;\n private readonly createId: () => string;\n private readonly listeners = new Set<\n (snapshot: TradeExecutionSnapshot) => void\n >();\n\n private snapshot: TradeExecutionSnapshot = { state: \"idle\" };\n private controller: AbortController | null = null;\n private inFlight: Promise<TradeExecutionResult> | null = null;\n private lastIntent: TradeIntent | null = null;\n private lastSign: TradeExecutionSignFn | undefined;\n private generation = 0;\n\n constructor(options: TradeExecutionRuntimeOptions) {\n this.adapter = options.adapter;\n this.clock = options.clock ?? systemClock;\n this.createId = options.id ?? defaultId;\n }\n\n getSnapshot(): TradeExecutionSnapshot {\n return this.snapshot;\n }\n\n subscribe(listener: (snapshot: TradeExecutionSnapshot) => void): () => void {\n this.listeners.add(listener);\n listener(this.snapshot);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n execute(\n intent: TradeIntent,\n options: TradeExecuteOptions = {},\n ): Promise<TradeExecutionResult> {\n if (this.inFlight) return this.inFlight;\n\n this.lastIntent = intent;\n this.lastSign = options.sign ?? this.adapter.sign;\n const generation = ++this.generation;\n this.controller = new AbortController();\n const run = this.run(intent, options, generation).finally(() => {\n if (this.inFlight === run) {\n this.inFlight = null;\n }\n });\n this.inFlight = run;\n return run;\n }\n\n cancel(): void {\n if (!IN_FLIGHT_TRADE_STATES.has(this.snapshot.state)) return;\n this.controller?.abort();\n this.patch({\n state: \"cancelled\",\n error: cancelledError(),\n phase: undefined,\n });\n }\n\n retry(): Promise<TradeExecutionResult> {\n const retryable =\n this.snapshot.state === \"failed\" ||\n this.snapshot.state === \"stale\" ||\n this.snapshot.state === \"cancelled\";\n if (!retryable) {\n return Promise.reject(\n new TradeExecutionError(\n \"retry() is only available from failed, stale, or cancelled\",\n { reason: \"quote\", phase: \"route\" },\n ),\n );\n }\n if (!this.lastIntent) {\n return Promise.reject(\n new TradeExecutionError(\"No trade intent to retry\", {\n reason: \"quote\",\n phase: \"route\",\n }),\n );\n }\n return this.execute(this.lastIntent, { sign: this.lastSign });\n }\n\n async confirm(options?: {\n timeoutMs?: number;\n }): Promise<\"confirmed\" | \"failed\"> {\n const { txHash, intent } = this.snapshot;\n if (!txHash || !intent) {\n throw new TradeExecutionError(\"No submitted trade to confirm\", {\n reason: \"confirm\",\n phase: \"confirm\",\n });\n }\n if (!this.adapter.confirm) {\n this.patch({ state: \"succeeded\" });\n return \"confirmed\";\n }\n\n const generation = this.generation;\n this.controller = new AbortController();\n this.patch({ state: \"confirming\", error: undefined, phase: undefined });\n\n const timeoutMs = options?.timeoutMs ?? 60_000;\n const signal = this.controller.signal;\n\n try {\n const result = await this.raceAbort(\n this.raceTimeout(\n this.adapter.confirm(intent.chain, txHash, signal),\n timeoutMs,\n signal,\n ),\n generation,\n );\n\n if (result === \"timeout\") {\n const err = new TradeExecutionError(\n \"Transaction confirmation timed out\",\n { reason: \"confirm\", phase: \"confirm\" },\n );\n this.patch({ state: \"failed\", error: err, phase: \"confirm\" });\n throw err;\n }\n if (result === \"failed\") {\n const err = new TradeExecutionError(\"Transaction failed on-chain\", {\n reason: \"confirm\",\n phase: \"confirm\",\n });\n this.patch({ state: \"failed\", error: err, phase: \"confirm\" });\n throw err;\n }\n\n this.patch({ state: \"succeeded\", error: undefined, phase: undefined });\n return \"confirmed\";\n } catch (error) {\n this.throwIfCancelled(error);\n if (this.snapshot.state === \"failed\") throw error;\n const err = asError(error);\n this.patch({ state: \"failed\", error: err, phase: \"confirm\" });\n throw err;\n }\n }\n\n private async run(\n intent: TradeIntent,\n options: TradeExecuteOptions,\n generation: number,\n ): Promise<TradeExecutionResult> {\n const sign = options.sign ?? this.adapter.sign;\n const needsSolanaCheck = isSolanaChain(intent.chain);\n\n this.patch({\n id: this.createId(),\n state: \"idle\",\n intent,\n route: undefined,\n txHash: undefined,\n extra: undefined,\n error: undefined,\n phase: undefined,\n });\n\n if (typeof sign !== \"function\") {\n const err = new TradeExecutionError(\n \"Wallet is disconnected or cannot sign\",\n { reason: \"disconnected\", phase: \"sign\" },\n );\n this.patch({ state: \"failed\", error: err, phase: \"sign\" });\n throw err;\n }\n\n this.patch({ state: \"quoting\" });\n\n const latestBlockPromise =\n needsSolanaCheck && this.adapter.getLatestBlock\n ? this.adapter.getLatestBlock(intent.chain).then(\n (value) => ({ ok: true as const, value }),\n (error) => ({ ok: false as const, error }),\n )\n : undefined;\n\n let route: SwapRoute;\n try {\n route = await this.raceAbort(\n this.adapter.quote(intent, this.controller?.signal),\n generation,\n );\n } catch (error) {\n this.throwIfCancelled(error);\n const err = asError(error);\n this.patch({ state: \"failed\", error: err, phase: \"route\" });\n throw err;\n }\n\n this.patch({ state: \"quoted\", route });\n\n if (needsSolanaCheck && route.lastValidBlockHeight != null) {\n try {\n const latestBlock = await this.raceAbort(\n latestBlockPromise ??\n Promise.resolve({\n ok: false as const,\n error: new Error(\"Latest block adapter is not available\"),\n }),\n generation,\n );\n if (!latestBlock.ok) {\n if (latestBlock.error instanceof TradeRouteExpiredError) {\n this.markStale(latestBlock.error);\n throw latestBlock.error;\n }\n throw new TradeRouteExpiredError(\n \"Unable to validate latest Solana block data. Please refresh the quote.\",\n );\n }\n this.assertFresh(\n intent,\n route,\n latestBlock.value,\n PRE_SIGN_MIN_REMAINING_BLOCKS,\n );\n } catch (error) {\n this.throwIfCancelled(error);\n const err = this.toExpiredError(error);\n this.markStale(err);\n throw err;\n }\n }\n\n this.patch({ state: \"signing\" });\n\n let signedBytes: Uint8Array;\n try {\n const unsignedBytes = base64ToUint8Array(route.serializedTx);\n signedBytes = await this.raceAbort(sign(unsignedBytes), generation);\n } catch (error) {\n this.throwIfCancelled(error);\n const err = asError(error);\n this.patch({ state: \"failed\", error: err, phase: \"sign\" });\n throw err;\n }\n\n if (needsSolanaCheck && route.lastValidBlockHeight != null) {\n try {\n if (!this.adapter.getLatestBlock) {\n throw new TradeRouteExpiredError(\n \"Unable to validate latest Solana block data. Please refresh the quote.\",\n );\n }\n const latestBlock = await this.raceAbort(\n this.adapter.getLatestBlock(intent.chain),\n generation,\n );\n this.assertFresh(\n intent,\n route,\n latestBlock,\n POST_SIGN_MIN_REMAINING_BLOCKS,\n );\n } catch (error) {\n this.throwIfCancelled(error);\n const err = this.toExpiredError(error);\n this.markStale(err);\n throw err;\n }\n }\n\n this.patch({ state: \"submitting\" });\n\n let sendResult: { txHash: string; extra?: Record<string, unknown> };\n try {\n const signedBase64 = uint8ArrayToBase64(signedBytes);\n sendResult = await this.raceAbort(\n this.adapter.submit(signedBase64, intent.chain),\n generation,\n );\n } catch (error) {\n this.throwIfCancelled(error);\n if (needsSolanaCheck && isSolanaBlockhashExpiredSendError(error)) {\n const err = new TradeRouteExpiredError(\n \"Swap route expired before transaction submission. Please refresh the quote.\",\n );\n this.markStale(err);\n throw err;\n }\n const err = asError(error);\n this.patch({ state: \"failed\", error: err, phase: \"send\" });\n throw err;\n }\n\n this.patch({\n state: \"succeeded\",\n txHash: sendResult.txHash,\n extra: sendResult.extra,\n error: undefined,\n phase: undefined,\n });\n\n if (options.confirm) {\n await this.confirm({ timeoutMs: options.confirmTimeoutMs });\n }\n\n return { txHash: sendResult.txHash, extra: sendResult.extra };\n }\n\n private assertFresh(\n intent: TradeIntent,\n route: SwapRoute,\n latestBlock: TradeLatestBlock,\n minRemainingBlocks: number,\n ): void {\n assertTradeRouteBlockhashFresh(\n intent.chain,\n route,\n latestBlock,\n minRemainingBlocks,\n this.clock.now(),\n );\n }\n\n private markStale(error: TradeRouteExpiredError): void {\n this.patch({\n state: \"stale\",\n error,\n phase: \"expired\",\n });\n }\n\n private toExpiredError(error: unknown): TradeRouteExpiredError {\n if (error instanceof TradeRouteExpiredError) return error;\n if (error instanceof TradeExecutionError && error.reason === \"expired\") {\n return new TradeRouteExpiredError(error.message);\n }\n return new TradeRouteExpiredError(\n \"Unable to validate latest Solana block data. Please refresh the quote.\",\n );\n }\n\n private throwIfCancelled(error: unknown): void {\n if (this.snapshot.state === \"cancelled\") {\n throw this.snapshot.error ?? cancelledError();\n }\n if (isAbortError(error) || this.controller?.signal.aborted) {\n const err = cancelledError();\n this.patch({\n state: \"cancelled\",\n error: err,\n phase: undefined,\n });\n throw err;\n }\n }\n\n private raceAbort<T>(promise: Promise<T>, generation: number): Promise<T> {\n const signal = this.controller?.signal;\n if (!signal) return promise;\n if (signal.aborted || this.generation !== generation) {\n return Promise.reject(cancelledError());\n }\n return new Promise<T>((resolve, reject) => {\n const onAbort = () => {\n reject(cancelledError());\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n promise.then(\n (value) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (signal.aborted || this.generation !== generation) {\n reject(cancelledError());\n return;\n }\n resolve(value);\n },\n (error) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (signal.aborted || this.generation !== generation) {\n reject(cancelledError());\n return;\n }\n reject(error);\n },\n );\n });\n }\n\n private raceTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n signal: AbortSignal,\n ): Promise<T | \"timeout\"> {\n if (!this.clock.sleep) {\n return promise;\n }\n return Promise.race([\n promise,\n this.clock.sleep(timeoutMs, signal).then(() => \"timeout\" as const),\n ]);\n }\n\n private patch(partial: Partial<TradeExecutionSnapshot>): void {\n this.snapshot = { ...this.snapshot, ...partial };\n for (const listener of this.listeners) {\n listener(this.snapshot);\n }\n }\n}\n","import { ChainStreamClient } from \"@chainstream-io/sdk\";\nimport type {\n BlockchainLatestBlock,\n Chain,\n LatestBlockParams,\n SendTxParams,\n SendTxResult,\n TransactionCapability,\n} from \"@liberfi.io/types\";\nimport {\n fromLatestBlock,\n fromSendTxResult,\n toChainDTO,\n toSendTxInput,\n} from \"../utils\";\n\n/** Domain-scoped transaction client. Timeout values are always milliseconds. */\nexport class TransactionClient implements TransactionCapability {\n constructor(\n private readonly sdk: Pick<\n ChainStreamClient,\n \"blockchain\" | \"transaction\" | \"waitForJob\"\n >,\n ) {}\n\n async getLatestBlock(\n params: LatestBlockParams,\n ): Promise<BlockchainLatestBlock> {\n return fromLatestBlock(\n await this.sdk.blockchain.getLatestBlock(toChainDTO(params.chain)),\n );\n }\n\n async sendTx(params: SendTxParams): Promise<SendTxResult> {\n return fromSendTxResult(\n await this.sdk.transaction.send(\n toChainDTO(params.chain),\n toSendTxInput(params),\n ),\n );\n }\n\n async checkTxSuccess(\n _chain: Chain,\n txHash: string,\n timeout?: number,\n ): Promise<boolean> {\n const result = await this.sdk.waitForJob<{\n id: string;\n status: string;\n success: boolean;\n }>(txHash, timeout);\n return result.success;\n }\n}\n","import type { Chain, TransactionCapability } from \"@liberfi.io/types\";\n\nexport async function confirmTx(\n checkTxSuccess: TransactionCapability[\"checkTxSuccess\"],\n chain: Chain,\n txHash: string,\n timeout?: number,\n): Promise<\"confirmed\" | \"failed\"> {\n const success = await checkTxSuccess(chain, txHash, timeout);\n return success ? \"confirmed\" : \"failed\";\n}\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}\nexport * from \"./transport/errors\";\n","import {\n ChainStreamClient,\n PnlResolution,\n PnlSortBy,\n PositionState as SdkPositionState,\n} from \"@chainstream-io/sdk\";\nimport {\n Chain,\n type CursorList,\n GetWalletLimitOrdersOptions,\n GetWalletPortfolioPnlsOptions,\n LimitOrder,\n Portfolio,\n PortfolioPnl,\n WalletDataCapability,\n WalletPnl,\n WalletPnlResolution,\n WalletPortfolioPnls,\n WalletPortfolios,\n} from \"@liberfi.io/types\";\nimport { NotImplementedError } from \"../errors\";\nimport { getWalletPnlDetails, type Phase3RequestContext } from \"../phase3Http\";\nimport {\n fromPnlDetailItems,\n fromPnlDetailsPage,\n fromWalletNetWorthByTokens,\n fromWalletPnlSummary,\n fromWalletPortfolios,\n toChainDTO,\n} from \"../utils\";\n\nconst CHAIN_TO_BALANCE_PARAM: Partial<Record<Chain, string>> = {\n [Chain.SOLANA]: \"sol\",\n [Chain.ETHEREUM]: \"eth\",\n [Chain.BINANCE]: \"bnb\",\n};\nconst NATIVE_TOKEN_ADDRESS: Partial<Record<Chain, string>> = {\n [Chain.SOLANA]: \"11111111111111111111111111111111\",\n [Chain.ETHEREUM]: \"0x0000000000000000000000000000000000000000\",\n [Chain.BINANCE]: \"0x0000000000000000000000000000000000000000\",\n};\n\n/** Domain-scoped wallet client with explicit Phase 3 and balance fallbacks. */\nexport class WalletClient implements WalletDataCapability {\n constructor(\n private readonly sdk: Pick<ChainStreamClient, \"wallet\">,\n private readonly phase3: Phase3RequestContext,\n private readonly nativeBalanceApiUrl?: string,\n ) {}\n\n async getWalletPortfolios(\n chain: Chain,\n address: string,\n options?: { cursor?: string; limit?: number },\n ): Promise<WalletPortfolios> {\n const chainParam = CHAIN_TO_BALANCE_PARAM[chain];\n if (chainParam && this.nativeBalanceApiUrl)\n return this.getPortfoliosFromBalanceApi(chain, chainParam, address, true);\n return fromWalletPortfolios(\n chain,\n await this.sdk.wallet.getNetWorth(toChainDTO(chain), address, {\n cursor: options?.cursor,\n limit: options?.limit ?? 100,\n }),\n );\n }\n\n async getWalletPnl(\n chain: Chain,\n address: string,\n resolution?: WalletPnlResolution,\n ): Promise<WalletPnl> {\n const pnl = await this.sdk.wallet.getPnl(\n toChainDTO(chain),\n address,\n resolution\n ? { resolution: resolution as unknown 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?: GetWalletPortfolioPnlsOptions,\n ): Promise<WalletPortfolioPnls> {\n if (options?.resolution === \"90d\") {\n const page = await getWalletPnlDetails(\n this.phase3,\n toChainDTO(chain),\n address,\n {\n resolution: \"90d\",\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, page);\n }\n const page = await this.sdk.wallet.getPnlDetails(\n toChainDTO(chain),\n address,\n {\n resolution:\n options?.resolution === \"7d\"\n ? PnlResolution[\"7d\"]\n : PnlResolution[\"30d\"],\n positionState:\n options?.positionState === \"closed\"\n ? SdkPositionState.closed\n : options?.positionState === \"all\"\n ? SdkPositionState.all\n : options?.positionState === \"open\"\n ? SdkPositionState.open\n : undefined,\n sortBy:\n options?.sortBy === \"realizedPnl\"\n ? PnlSortBy.realizedPnl\n : options?.sortBy === \"unrealizedPnl\"\n ? PnlSortBy.unrealizedPnl\n : options?.sortBy === \"totalPnl\"\n ? PnlSortBy.totalPnl\n : undefined,\n cursor: options?.cursor,\n limit: options?.limit ?? 100,\n direction: options?.direction,\n },\n );\n return fromPnlDetailsPage(chain, address, page);\n }\n\n async getWalletPortfoliosByTokens(\n chain: Chain,\n address: string,\n tokenAddresses: Array<string>,\n ): Promise<Array<Portfolio>> {\n const chainParam = CHAIN_TO_BALANCE_PARAM[chain];\n if (chainParam && this.nativeBalanceApiUrl)\n return this.getBalancePortfolios(\n chain,\n chainParam,\n address,\n tokenAddresses,\n );\n return fromWalletNetWorthByTokens(\n chain,\n await this.sdk.wallet.getNetWorthByTokens(toChainDTO(chain), address, {\n tokenAddresses: tokenAddresses.join(\",\"),\n }),\n );\n }\n\n async getWalletPortfolioPnlsByTokens(\n chain: Chain,\n address: string,\n tokenAddresses: Array<string>,\n ): Promise<Array<PortfolioPnl>> {\n return fromPnlDetailItems(\n chain,\n await this.sdk.wallet.getPnlByToken(toChainDTO(chain), address, {\n tokenAddresses: tokenAddresses.join(\",\"),\n }),\n );\n }\n\n async getWalletLimitOrders(\n _chain: Chain,\n _address: string,\n _options?: GetWalletLimitOrdersOptions,\n ): Promise<CursorList<LimitOrder>> {\n void [_chain, _address, _options];\n throw new NotImplementedError(\n \"Client.getWalletLimitOrders\",\n \"no limit-orders endpoint on the backend yet\",\n );\n }\n\n private async getPortfoliosFromBalanceApi(\n chain: Chain,\n chainParam: string,\n address: string,\n wrap: true,\n ): Promise<WalletPortfolios>;\n private async getPortfoliosFromBalanceApi(\n chain: Chain,\n chainParam: string,\n address: string,\n wrap?: false,\n tokenAddresses?: Array<string>,\n ): Promise<Array<Portfolio>>;\n private async getPortfoliosFromBalanceApi(\n chain: Chain,\n chainParam: string,\n address: string,\n wrap = false,\n tokenAddresses?: Array<string>,\n ): Promise<WalletPortfolios | Array<Portfolio>> {\n const portfolios = await this.getBalancePortfolios(\n chain,\n chainParam,\n address,\n tokenAddresses,\n );\n if (!wrap) return portfolios;\n const native = portfolios.find(\n (item) => item.address === NATIVE_TOKEN_ADDRESS[chain],\n );\n return {\n chain,\n address,\n balanceInUsd: \"0\",\n balanceInNative: native?.amount ?? \"0\",\n portfolios,\n hasPrev: false,\n hasNext: false,\n };\n }\n\n private async getBalancePortfolios(\n chain: Chain,\n chainParam: string,\n address: string,\n tokenAddresses?: Array<string>,\n ): Promise<Array<Portfolio>> {\n const query = new URLSearchParams({ chain: chainParam, address });\n if (tokenAddresses?.length) query.set(\"tokens\", tokenAddresses.join(\",\"));\n const response = await fetch(\n `${this.nativeBalanceApiUrl}?${query.toString()}`,\n );\n if (!response.ok)\n throw new Error(`Balance API returned ${response.status}`);\n const data = (await response.json()) as {\n balances: Array<{ address: string; balance: string; decimals: number }>;\n };\n return data.balances.map((item) => {\n const divisor = BigInt(10) ** BigInt(item.decimals);\n const raw = BigInt(item.balance);\n const amount =\n `${raw / divisor}.${(raw % divisor).toString().padStart(item.decimals, \"0\")}`.replace(\n /\\.?0+$/,\n \"\",\n ) || \"0\";\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","import {\n ChainStreamClient,\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 WsRankingType,\n WsRankingTokenList,\n WsRankingPool,\n} from \"@chainstream-io/sdk\";\nimport {\n Activity,\n BlockchainLatestBlock,\n Chain,\n CursorList,\n GetActivitiesOptions,\n GetTokenCandlesOptions,\n GetTokenHoldersOptions,\n GetTokenTopTradersOptions,\n GetTokenListOptions,\n GetTokensByCreatorOptions,\n GetTradesOptions,\n GetWalletLimitOrdersOptions,\n GetWalletPortfolioPnlsOptions,\n IClient,\n ISubscribeClient,\n ISubscription,\n LatestBlockParams,\n Pool,\n PoolSubscribed,\n Portfolio,\n PortfolioPnl,\n PortfolioPnlSubscribed,\n PortfolioSubscribed,\n SearchTokenCursorList,\n SearchTokensOptions,\n SendTxParams,\n SendTxResult,\n SwapParams,\n SwapRoute,\n Token,\n TokenCandle,\n TokenHolder,\n TokenTopTrader,\n TokenMarketData,\n TokenResolution,\n TokenSecurity,\n TokenStats,\n TokenSubscribed,\n Trade,\n WalletPnl,\n WalletPnlResolution,\n WalletPnlSubscribed,\n WalletPortfolioPnls,\n WalletPortfolios,\n} from \"@liberfi.io/types\";\nimport { ActivityClient } from \"./activity\";\nimport { MediaClient } from \"./media\";\nimport { buildPhase3Context, type Phase3RequestContext } from \"./phase3Http\";\nimport { SubscriptionClient } from \"./subscription\";\nimport { TokenClient } from \"./token\";\nimport { TradeClient } from \"./trade\";\nimport { TransactionClient } from \"./transaction\";\nimport {\n toChainDTO,\n toResolutionDTO,\n fromTokenSubscribed,\n fromTokenMetadataSubscribed,\n fromWsCandle,\n fromWsTokenDataSubscribed,\n fromWsTokenSupplyToSubscribed,\n fromWsTokenHolderToSubscribed,\n fromWsTokenLiquidityToSubscribed,\n fromWsTokenMaxLiquidityToSubscribed,\n fromWsTokenTotalLiquidityToSubscribed,\n fromWsTokenBondingCurveToSubscribed,\n fromWsRankingTokenListToSubscribed,\n fromWsRankingPoolToSubscribed,\n fromWsTradeActivity,\n fromWsActivity,\n} from \"./utils\";\nimport { WalletClient } from \"./wallet\";\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 IClient, 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 private readonly _token: TokenClient;\n private readonly _wallet: WalletClient;\n private readonly _activity: ActivityClient;\n private readonly _trade: TradeClient;\n private readonly _transaction: TransactionClient;\n private readonly _media: MediaClient;\n private readonly _subscription: SubscriptionClient;\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._token = new TokenClient(this._client);\n this._phase3 = buildPhase3Context(\n this.accessToken,\n this.options?.serverUrl,\n );\n this._wallet = new WalletClient(\n this._client,\n this._phase3,\n this.options?.nativeBalanceApiUrl,\n );\n this._activity = new ActivityClient(this._client);\n this._trade = new TradeClient(this._client);\n this._transaction = new TransactionClient(this._client);\n this._media = new MediaClient(this._client);\n this._subscription = new SubscriptionClient({\n subscribeToken: this._subscribeToken.bind(this),\n subscribeTokens: this._subscribeTokens.bind(this),\n subscribeTokenCandles: this._subscribeTokenCandles.bind(this),\n subscribeNewTokens: this._subscribeNewTokens.bind(this),\n subscribeNewTokensMetadata: this._subscribeNewTokensMetadata.bind(this),\n subscribeNewPools: this._subscribeNewPools.bind(this),\n subscribeTrendingTokens: this._subscribeTrendingTokens.bind(this),\n subscribeMigratedTokens: this._subscribeMigratedTokens.bind(this),\n subscribeFinalStretchTokens: this._subscribeFinalStretchTokens.bind(this),\n subscribeStockTokens: this._subscribeStockTokens.bind(this),\n subscribeWalletPnl: this._subscribeWalletPnl.bind(this),\n subscribeWalletPortfolios: this._subscribeWalletPortfolios.bind(this),\n subscribeWalletPortfolioPnls:\n this._subscribeWalletPortfolioPnls.bind(this),\n subscribeWalletTrades: this._subscribeWalletTrades.bind(this),\n subscribeTokenTrades: this._subscribeTokenTrades.bind(this),\n subscribeWalletActivities: this._subscribeWalletActivities.bind(this),\n subscribeTokenActivities: this._subscribeTokenActivities.bind(this),\n });\n }\n\n subscribeToken = (...args: Parameters<ISubscribeClient[\"subscribeToken\"]>) =>\n this._subscription.subscribeToken(...args);\n subscribeTokens = (\n ...args: Parameters<ISubscribeClient[\"subscribeTokens\"]>\n ) => this._subscription.subscribeTokens(...args);\n subscribeTokenCandles = (\n ...args: Parameters<ISubscribeClient[\"subscribeTokenCandles\"]>\n ) => this._subscription.subscribeTokenCandles(...args);\n subscribeNewTokens = (\n ...args: Parameters<ISubscribeClient[\"subscribeNewTokens\"]>\n ) => this._subscription.subscribeNewTokens(...args);\n subscribeNewTokensMetadata = (\n ...args: Parameters<ISubscribeClient[\"subscribeNewTokensMetadata\"]>\n ) => this._subscription.subscribeNewTokensMetadata(...args);\n subscribeNewPools = (\n ...args: Parameters<ISubscribeClient[\"subscribeNewPools\"]>\n ) => this._subscription.subscribeNewPools(...args);\n subscribeTrendingTokens = (\n ...args: Parameters<ISubscribeClient[\"subscribeTrendingTokens\"]>\n ) => this._subscription.subscribeTrendingTokens(...args);\n subscribeMigratedTokens = (\n ...args: Parameters<ISubscribeClient[\"subscribeMigratedTokens\"]>\n ) => this._subscription.subscribeMigratedTokens(...args);\n subscribeFinalStretchTokens = (\n ...args: Parameters<ISubscribeClient[\"subscribeFinalStretchTokens\"]>\n ) => this._subscription.subscribeFinalStretchTokens(...args);\n subscribeStockTokens = (\n ...args: Parameters<ISubscribeClient[\"subscribeStockTokens\"]>\n ) => this._subscription.subscribeStockTokens(...args);\n subscribeWalletPnl = (\n ...args: Parameters<ISubscribeClient[\"subscribeWalletPnl\"]>\n ) => this._subscription.subscribeWalletPnl(...args);\n subscribeWalletPortfolios = (\n ...args: Parameters<ISubscribeClient[\"subscribeWalletPortfolios\"]>\n ) => this._subscription.subscribeWalletPortfolios(...args);\n subscribeWalletPortfolioPnls = (\n ...args: Parameters<ISubscribeClient[\"subscribeWalletPortfolioPnls\"]>\n ) => this._subscription.subscribeWalletPortfolioPnls(...args);\n subscribeWalletTrades = (\n ...args: Parameters<ISubscribeClient[\"subscribeWalletTrades\"]>\n ) => this._subscription.subscribeWalletTrades(...args);\n subscribeTokenTrades = (\n ...args: Parameters<ISubscribeClient[\"subscribeTokenTrades\"]>\n ) => this._subscription.subscribeTokenTrades(...args);\n subscribeWalletActivities = (\n ...args: Parameters<ISubscribeClient[\"subscribeWalletActivities\"]>\n ) => this._subscription.subscribeWalletActivities(...args);\n subscribeTokenActivities = (\n ...args: Parameters<ISubscribeClient[\"subscribeTokenActivities\"]>\n ) => this._subscription.subscribeTokenActivities(...args);\n\n async getToken(chain: Chain, address: string): Promise<Token> {\n return this._token.getToken(chain, address);\n }\n\n async getTokens(\n chain: Chain,\n addresses: Array<string>,\n ): Promise<Array<Token>> {\n return this._token.getTokens(chain, addresses);\n }\n\n async getTokenCandles(\n chain: Chain,\n address: string,\n resolution: TokenResolution,\n options?: GetTokenCandlesOptions,\n ): Promise<Array<TokenCandle>> {\n return this._token.getTokenCandles(chain, address, resolution, options);\n }\n\n async getTokenSecurity(\n chain: Chain,\n address: string,\n ): Promise<TokenSecurity> {\n return this._token.getTokenSecurity(chain, address);\n }\n\n async getTokenStats(chain: Chain, address: string): Promise<TokenStats> {\n return this._token.getTokenStats(chain, address);\n }\n\n async getTokenHolders(\n chain: Chain,\n address: string,\n options?: GetTokenHoldersOptions,\n ): Promise<CursorList<TokenHolder>> {\n return this._token.getTokenHolders(chain, address, options);\n }\n\n async getTokenTopTraders(\n chain: Chain,\n address: string,\n options?: GetTokenTopTradersOptions,\n ): Promise<CursorList<TokenTopTrader>> {\n return this._token.getTokenTopTraders(chain, address, options);\n }\n\n async getTokenMarketData(\n chain: Chain,\n address: string,\n ): Promise<TokenMarketData> {\n return this._token.getTokenMarketData(chain, address);\n }\n\n async getNewTokens(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n return this._token.getNewTokens(chain, options);\n }\n\n async getNewPools(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Pool>> {\n void options;\n return this._token.getNewPools(chain);\n }\n\n async getFinalStretchTokens(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n return this._token.getFinalStretchTokens(chain, options);\n }\n\n async getMigratedTokens(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n return this._token.getMigratedTokens(chain, options);\n }\n\n async getTrendingTokens(\n chain: Chain,\n resolution: \"1m\" | \"5m\" | \"1h\" | \"4h\" | \"24h\",\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n return this._token.getTrendingTokens(chain, resolution, options);\n }\n\n async getStockTokens(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n return this._token.getStockTokens(chain, options);\n }\n\n async searchTokens(\n options?: SearchTokensOptions,\n ): Promise<SearchTokenCursorList> {\n return this._token.searchTokens(options);\n }\n\n async swapRoute(params: SwapParams): Promise<SwapRoute> {\n return this._trade.swapRoute(params);\n }\n\n async getLatestBlock(\n params: LatestBlockParams,\n ): Promise<BlockchainLatestBlock> {\n return this._transaction.getLatestBlock(params);\n }\n\n async sendTx(params: SendTxParams): Promise<SendTxResult> {\n return this._transaction.sendTx(params);\n }\n\n async checkTxSuccess(\n chain: Chain,\n txHash: string,\n timeout?: number,\n ): Promise<boolean> {\n return this._transaction.checkTxSuccess(chain, txHash, timeout);\n }\n\n async getWalletPortfolios(\n chain: Chain,\n address: string,\n options?: { cursor?: string; limit?: number },\n ): Promise<WalletPortfolios> {\n return this._wallet.getWalletPortfolios(chain, address, options);\n }\n\n async getWalletPnl(\n chain: Chain,\n address: string,\n resolution?: WalletPnlResolution,\n ): Promise<WalletPnl> {\n return this._wallet.getWalletPnl(chain, address, resolution);\n }\n\n async getWalletPortfolioPnls(\n chain: Chain,\n address: string,\n options?: GetWalletPortfolioPnlsOptions,\n ): Promise<WalletPortfolioPnls> {\n return this._wallet.getWalletPortfolioPnls(chain, address, options);\n }\n\n async getWalletPortfoliosByTokens(\n chain: Chain,\n address: string,\n tokenAddresses: Array<string>,\n ): Promise<Array<Portfolio>> {\n return this._wallet.getWalletPortfoliosByTokens(\n chain,\n address,\n tokenAddresses,\n );\n }\n\n async getWalletPortfolioPnlsByTokens(\n chain: Chain,\n address: string,\n tokenAddresses: Array<string>,\n ): Promise<Array<PortfolioPnl>> {\n return this._wallet.getWalletPortfolioPnlsByTokens(\n chain,\n address,\n tokenAddresses,\n );\n }\n\n async getWalletTrades(\n chain: Chain,\n address: string,\n options?: GetTradesOptions,\n ): Promise<CursorList<Trade>> {\n return this._activity.getWalletTrades(chain, address, options);\n }\n\n async getTokenTrades(\n chain: Chain,\n address: string,\n options?: GetTradesOptions,\n ): Promise<CursorList<Trade>> {\n return this._activity.getTokenTrades(chain, address, options);\n }\n\n async getWalletActivities(\n chain: Chain,\n address: string,\n options?: GetActivitiesOptions,\n ): Promise<CursorList<Activity>> {\n return this._activity.getWalletActivities(chain, address, options);\n }\n\n async getTokenActivities(\n chain: Chain,\n address: string,\n options?: GetActivitiesOptions,\n ): Promise<CursorList<Activity>> {\n return this._activity.getTokenActivities(chain, address, options);\n }\n\n async getPresignedUploadUrl(): Promise<string> {\n return this._media.getPresignedUploadUrl();\n }\n\n async getWalletLimitOrders(\n _chain: Chain,\n _address: string,\n _options?: GetWalletLimitOrdersOptions,\n ): Promise<CursorList<import(\"@liberfi.io/types\").LimitOrder>> {\n return this._wallet.getWalletLimitOrders(_chain, _address, _options);\n }\n\n async getTokensByCreator(\n chain: Chain,\n creator: string,\n options?: GetTokensByCreatorOptions,\n ): Promise<CursorList<Token>> {\n return this._token.getTokensByCreator(chain, creator, options);\n }\n\n private _subscribeToken(\n chain: Chain,\n address: string,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._subscribeTokens(chain, [address], callback);\n }\n\n private _subscribeTokens(\n chain: Chain,\n addresses: Array<string>,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n const chainDTO = toChainDTO(chain);\n const uniqueAddresses = Array.from(\n new Set(addresses.map((address) => address.trim()).filter(Boolean)),\n );\n if (uniqueAddresses.length === 0) return { unsubscribe: () => {} };\n\n const subs = this._client.stream.batchSubscribe(() =>\n uniqueAddresses.flatMap((address) => [\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.subscribeTokenHolders({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenHolder) =>\n callback([fromWsTokenHolderToSubscribed(chain, address, 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.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([\n fromWsTokenMaxLiquidityToSubscribed(chain, address, data),\n ]),\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 );\n\n return {\n unsubscribe: () => {\n const stream = this._client.stream as typeof this._client.stream & {\n batchUnsubscribe?: (unsubscribables: typeof subs) => void;\n };\n if (stream.batchUnsubscribe) {\n stream.batchUnsubscribe(subs);\n return;\n }\n subs.forEach((s) => s.unsubscribe());\n },\n };\n }\n\n private _subscribeTokenCandles(\n chain: Chain,\n address: string,\n resolution: TokenResolution,\n callback: (candles: Array<TokenCandle>) => void,\n ): 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 private _subscribeWalletPnl(\n chain: Chain,\n address: string,\n callback: (pnls: Array<WalletPnlSubscribed>) => void,\n ): 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 as WalletPnlResolution,\n })),\n ),\n });\n }\n\n private _subscribeWalletPortfolios(\n chain: Chain,\n address: string,\n callback: (portfolios: Array<PortfolioSubscribed>) => void,\n ): 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 PortfolioSubscribed,\n ),\n ),\n });\n }\n\n private _subscribeWalletPortfolioPnls(\n chain: Chain,\n address: string,\n callback: (portfolioPnls: Array<PortfolioPnlSubscribed>) => void,\n ): 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 PortfolioPnlSubscribed,\n ]),\n });\n }\n\n private _subscribeWalletTrades(\n chain: Chain,\n address: string,\n callback: (trades: Array<Trade>) => void,\n ): 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 private _subscribeTokenTrades(\n chain: Chain,\n address: string,\n callback: (trades: Array<Trade>) => void,\n ): 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 private _subscribeWalletActivities(\n chain: Chain,\n address: string,\n callback: (activities: Array<Activity>) => void,\n ): 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 private _subscribeTokenActivities(\n chain: Chain,\n address: string,\n callback: (activities: Array<Activity>) => void,\n ): 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 private _subscribeNewTokens(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): 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 private _subscribeNewTokensMetadata(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._client.stream.subscribeNewTokensMetadata({\n chain: toChainDTO(chain),\n callback: (data: WsTokenMetadata[]) =>\n callback(data.map((it) => fromTokenMetadataSubscribed(chain, it))),\n });\n }\n\n private _subscribeNewPools(\n chain: Chain,\n callback: (data: Array<PoolSubscribed>) => void,\n ): ISubscription {\n return this._client.stream.subscribeNewPool({\n chain: toChainDTO(chain),\n callback: (data: WsRankingPool) =>\n callback([fromWsRankingPoolToSubscribed(chain, data)]),\n });\n }\n\n private _subscribeTrendingTokens(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._subscribeRankingTokenList(chain, WsRankingType.HOT, callback);\n }\n\n private _subscribeMigratedTokens(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._subscribeRankingTokens(\n chain,\n WsChannelType.MIGRATED,\n callback,\n );\n }\n\n private _subscribeFinalStretchTokens(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): 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 private _subscribeStockTokens(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._subscribeRankingTokenList(\n chain,\n WsRankingType.STOCKS,\n callback,\n );\n }\n\n private _subscribeRankingTokens(\n chain: Chain,\n channelType: WsChannelType,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n // SDK 2.1.12 marks ranking token metric list channels as deprecated and\n // no longer published by the server. Keep the public API shape until the\n // replacement token-address source is defined.\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 private _subscribeRankingTokenList(\n chain: Chain,\n rankingType: WsRankingType,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._client.stream.subscribeRankingTokensList({\n chain: toChainDTO(chain),\n ranking_type: rankingType,\n callback: (data: WsRankingTokenList[]) => {\n const updates = data.flatMap((item) =>\n fromWsRankingTokenListToSubscribed(chain, item),\n );\n if (updates.length > 0) callback(updates);\n },\n });\n }\n}\n"]}