@liberfi.io/client 0.3.40 → 0.3.42

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","toChainDTO","Chain","ChainSymbol","toResolutionDTO","resolution","Resolution","toSortDirectionDTO","direction","toSearchFieldDTO","field","SearchSortBy","toFieldDTO","TokenField","toRangeFiltersDTO","filters","it","cond","SafeBigNumber","fromChainDTO","fromTokenCreatorDTO","input","fromTokenDTO","fromTokenStatsDTO","fromTokenMarketDataDTO","parseTokenStatsByResolution","toOptionalNumber","period","fromTokenLiquidityDTO","fromRankingPoolDexDTO","fromRankingPoolBalanceDTO","fromRankingPoolDTO","mergeSubscribedUpdates","updates","merged","update","fromWsRankingPoolToSubscribed","tokenUpdate","fromWsRankingTokenListToSubscribed","fromTokenCandle","fromResolutionDTO","fromTokenSecurity","legacy","solanaChains","EVM_NATIVE_ADDRESS","KYBERSWAP_NATIVE_SENTINEL","toJupiterMint","address","SOLANA_TOKENS","toKyberSwapMint","effectiveDex","toMintForDex","dex","toMintForRoute","toSwapRouteInput","inputMint","outputMint","SwapMode","SwapRouteInputSwapMode","toSendTxInput","toDateFromMs","ms","toDateFromUnixLikeTimestamp","toTagArray","fromRawTokenHolder","holder","fromTokenHolderPage","fromSdkTokenHolderPage","fromSdkTokenTopTraderPage","trader","fromTokenPage","pageExtra","fromSwapRoute","fromLatestBlock","fromSendTxResult","fromWalletPortfolios","portfolios","item","fromWalletPnlSummary","fromPnlItemDTO","fromPnlDetailsPage","summaryExtra","fromWalletNetWorthByTokens","fromPnlDetailItems","fromTradePage","fromTradeDetailDTO","isBuy","fromSdkActivityPage","fromActivityPage","fromActivityDetailDTO","type","time","fromTokenSubscribed","fromTokenMetadataSubscribed","fromWsCandle","fromWsTokenStats","timeframes","record","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","Client","_Client","options","ChainStreamClient","addresses","c","security","stats","holders","HolderSortBy","traders","TraderSortBy","marketData","_options","RankingPoolType","pool","tokenPage","route","latestBlock","txHash","timeout","success","chainParam","netWorth","pnl","detailsPage","PnlResolution","SdkPositionState","PnlSortBy","tokenAddresses","_chain","_address","_creator","callback","chainDTO","uniqueAddresses","subs","data","stream","s","rankingSub","WsChannelType","d","WsRankingType","bondingSub","base","qs","raw","decimals","divisor","whole","fracStr","nativeAddr","nativePortfolio","p","parseLaunchPlatformFromFilters","target","tradePage","page","ActivitySortBy","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 amountInUsd: string;\n percentage: string;\n tags?: Array<string>;\n lastActiveAt?: number | null;\n startHoldingAt?: number | null;\n}\n\nexport interface Phase3ActivityDTO {\n transactionSignature: string;\n chain: string;\n blockHeight?: number;\n blockTimestamp: number;\n type: string;\n\n tokenAddress: string;\n tokenName?: string;\n tokenSymbol: string;\n tokenImageUrl?: string | null;\n tokenAmount: string;\n tokenAmountInUsd: string;\n tokenPriceInUsd?: string;\n tokenAmountInNative?: string;\n tokenPriceInNative?: string;\n\n sideTokenAddress: string;\n sideTokenName?: string;\n sideTokenSymbol: string;\n sideTokenImageUrl?: string | null;\n sideTokenAmount: string;\n sideTokenAmountInUsd: string;\n sideTokenPriceInUsd?: string;\n\n accountOwnerAddress: string;\n gasFee?: number | null;\n traderTags?: Array<string>;\n\n poolAddress?: string | null;\n dexProgramAddress?: string | null;\n dexProtocolFamily?: string | null;\n dexImage?: string | null;\n\n status?: string;\n}\n\nexport interface Phase3NetWorthTokenDTO {\n chain: string;\n tokenAddress: string;\n name: string;\n symbol: string;\n decimals: number;\n logoUri?: string | null;\n amount: string;\n priceInUsd: string;\n priceInNative: string;\n valueInUsd: string;\n valueInNative: string;\n isActive?: boolean;\n avgCostUsd?: string | null;\n lastActiveAt?: number | null;\n walletTokenTags?: Array<string>;\n}\n\nexport interface Phase3NetWorthByTokensDTO {\n walletAddress: string;\n totalValueInUsd: string;\n totalValueInNative: string;\n currentTimestamp?: number;\n data: Array<Phase3NetWorthTokenDTO>;\n}\n\nexport interface Phase3PnlSummaryDTO {\n tokens?: number | string;\n totalTrades?: number | string;\n buys?: number | string;\n sells?: number | string;\n wins?: number | string;\n losses?: number | string;\n winRate?: string | null;\n realizedProfitInUsd?: string | null;\n unrealizedProfitInUsd?: string | null;\n totalProfitInUsd?: string | null;\n totalProfitRatio?: string | null;\n currentValue?: string | null;\n buyAmountInUsd?: string | null;\n sellAmountInUsd?: string | null;\n totalCostInUsd?: string;\n avgProfitPerTradeInUsd?: string | null;\n}\n\nexport interface Phase3PnlItemDTO {\n tokenAddress: string;\n symbol?: string;\n name?: string;\n decimals?: number;\n logoUri?: string | null;\n walletAddress?: string;\n chain?: string;\n\n balance: string;\n priceInUsd: string;\n currentValue: string;\n\n realizedProfitInUsd?: string;\n realizedProfitRatio?: string;\n unrealizedProfitInUsd?: string;\n unrealizedProfitRatio?: string;\n totalProfitInUsd?: string;\n totalProfitRatio?: string;\n\n buys?: number | string;\n sells?: number | string;\n totalTrades?: number | string;\n wins?: number | string;\n losses?: number | string;\n buyAmount?: string;\n sellAmount?: string;\n buyAmountInUsd?: string;\n sellAmountInUsd?: string;\n avgBuyPriceInUsd?: string;\n avgSellPriceInUsd?: string;\n avgProfitPerTradeInUsd?: string;\n totalCostInUsd?: string;\n\n isClosed?: boolean;\n firstBuyAt?: number | null;\n lastSellAt?: number | null;\n}\n\nexport interface Phase3PnlDetailsDTO extends CursorPageDTO<Phase3PnlItemDTO> {\n summary: Phase3PnlSummaryDTO;\n}\n\n// ============================================================================\n// Query param types\n// ============================================================================\n\nexport interface GetTokenHoldersQuery {\n /**\n * Sort field. `realizedPnl` is accepted by newer servers for the Top\n * Traders view; if the backend does not recognize it, it typically falls\n * back to `holdingUsd` and the widget surfaces an empty state cue.\n */\n sortBy?: \"holdingUsd\" | \"lastActiveAt\" | \"realizedPnl\";\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\nexport interface GetActivitiesQuery {\n tokenAddress?: string;\n walletAddress?: string;\n poolAddress?: string;\n type?: string;\n sortBy?: \"timestamp\" | \"totalUsd\";\n beforeTimestamp?: number;\n afterTimestamp?: number;\n beforeBlockHeight?: number;\n afterBlockHeight?: number;\n transactionsSignature?: string;\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\nexport interface GetNetWorthByTokensQuery {\n tokenAddresses: string;\n}\n\nexport interface GetPnlDetailsQuery {\n resolution: \"7d\" | \"30d\" | \"90d\";\n positionState?: \"open\" | \"closed\" | \"all\";\n sortBy?: \"totalPnl\" | \"realizedPnl\" | \"unrealizedPnl\";\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\n// ============================================================================\n// Endpoint wrappers\n// ============================================================================\n\n/** `GET /v2/token/{chain}/{tokenAddress}/holders` */\nexport function getTokenHolders(\n ctx: Phase3RequestContext,\n chain: string,\n tokenAddress: string,\n query: GetTokenHoldersQuery,\n): Promise<CursorPageDTO<Phase3TokenHolderDTO>> {\n return request(\n ctx,\n `/v2/token/${encodeURIComponent(chain)}/${encodeURIComponent(\n tokenAddress,\n )}/holders`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/trade/{chain}/activities` */\nexport function getActivities(\n ctx: Phase3RequestContext,\n chain: string,\n query: GetActivitiesQuery,\n): Promise<CursorPageDTO<Phase3ActivityDTO>> {\n return request(\n ctx,\n `/v2/trade/${encodeURIComponent(chain)}/activities`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/wallet/{chain}/{walletAddress}/net-worth/tokens` */\nexport function getWalletNetWorthByTokens(\n ctx: Phase3RequestContext,\n chain: string,\n walletAddress: string,\n query: GetNetWorthByTokensQuery,\n): Promise<Phase3NetWorthByTokensDTO> {\n return request(\n ctx,\n `/v2/wallet/${encodeURIComponent(chain)}/${encodeURIComponent(\n walletAddress,\n )}/net-worth/tokens`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/wallet/{chain}/{walletAddress}/pnl-details` */\nexport function getWalletPnlDetails(\n ctx: Phase3RequestContext,\n chain: string,\n walletAddress: string,\n query: GetPnlDetailsQuery,\n): Promise<Phase3PnlDetailsDTO> {\n return request(\n ctx,\n `/v2/wallet/${encodeURIComponent(chain)}/${encodeURIComponent(\n walletAddress,\n )}/pnl-details`,\n query as unknown as Record<string, unknown>,\n );\n}\n","import {\n Token as TokenDTO,\n Resolution,\n TokenCandle as SdkTokenCandle,\n TokenStats as SdkTokenStats,\n TokenMarketData as SdkTokenMarketData,\n TokenField,\n RangeFilterCondition,\n SearchSortBy,\n TokenPage as ChainStreamTokenPage,\n SwapRouteResponse,\n SwapRouteInput,\n SwapRouteInputSwapMode,\n SendTxInput,\n SendTxResponse,\n WalletNetWorthPage,\n PageResponseTradeDetail,\n PageResponseTokenHolder,\n PageResponseTokenTopTrader,\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} 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 TokenMarketData,\n TokenResolution,\n TokenSecurity,\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\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 launchedFrom: {\n programAddress: input.extra?.launchFromProgramAddress ?? undefined,\n protocolFamily: input.extra?.launchFromProtocolFamily ?? undefined,\n },\n migrateProgress: input.marketData?.completionRatio\n ? new SafeBigNumber(input.marketData.completionRatio)\n .shiftedBy(2)\n .toString()\n : undefined,\n migratedTo: {\n programAddress: input.extra?.migratedToProgramAddress ?? undefined,\n protocolFamily: input.extra?.migratedToProtocolFamily ?? undefined,\n poolAddress: input.extra?.migratedToPoolAddress ?? undefined,\n migratedAt: input.extra?.migratedAt\n ? new Date(input.extra.migratedAt)\n : undefined,\n },\n socialMedias: input.socialMedias\n ? Object.fromEntries(\n Object.entries(input.socialMedias)\n .filter(([, v]) => v != null)\n .map(([k, v]) => [k, v as string]),\n )\n : undefined,\n stats: input.stats ? fromTokenStatsDTO(input.stats) : undefined,\n marketData: input.marketData\n ? fromTokenMarketDataDTO(input.marketData)\n : undefined,\n createdAt: input.tokenCreatedAt\n ? new Date(input.tokenCreatedAt)\n : undefined,\n };\n}\n\nexport function fromTokenStatsDTO(input: SdkTokenStats): TokenStats {\n return {\n [\"1m\"]: parseTokenStatsByResolution(input, \"1m\"),\n [\"5m\"]: parseTokenStatsByResolution(input, \"5m\"),\n [\"15m\"]: parseTokenStatsByResolution(input, \"15m\"),\n [\"30m\"]: parseTokenStatsByResolution(input, \"30m\"),\n [\"1h\"]: parseTokenStatsByResolution(input, \"1h\"),\n [\"4h\"]: parseTokenStatsByResolution(input, \"4h\"),\n [\"24h\"]: parseTokenStatsByResolution(input, \"24h\"),\n };\n}\n\nfunction toOptionalNumber(value: string | undefined): number | undefined {\n return value === undefined ? undefined : parseInt(value);\n}\n\nfunction parseTokenStatsByResolution(\n input: SdkTokenStats,\n resolution: TokenResolution,\n): TokenStatsByResolution {\n const period = input.periods?.[resolution];\n if (!period) {\n return {};\n }\n\n return {\n buys: toOptionalNumber(period.buys),\n sells: toOptionalNumber(period.sells),\n trades: toOptionalNumber(period.trades),\n buyers: toOptionalNumber(period.buyers),\n sellers: toOptionalNumber(period.sellers),\n traders: toOptionalNumber(period.traders),\n buyVolumes: period.buyVolume,\n sellVolumes: period.sellVolume,\n volumes: period.totalVolumeInNative,\n buyVolumesInUsd: period.buyVolumeInUsd,\n sellVolumesInUsd: period.sellVolumeInUsd,\n volumesInUsd: period.totalVolumeInUsd,\n openPriceInUsd: period.openInUsd,\n closePriceInUsd: period.closeInUsd,\n highPriceInUsd: period.highInUsd,\n lowPriceInUsd: period.lowInUsd,\n priceInUsd: period.closeInUsd,\n priceChange: period.priceChangeRatioInUsd,\n };\n}\n\nexport function fromTokenLiquidityDTO(input: DexPool): TokenLiquidity {\n return {\n poolAddress: input.poolAddress,\n programAddress: input.programAddress ?? undefined,\n protocolFamily: input.protocolFamily ?? undefined,\n 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 price: input.priceInNative ?? input.priceInSol ?? undefined,\n priceInUsd: input.priceInUsd ?? undefined,\n tvl: input.totalTvlInSol ?? undefined,\n tvlInUsd: input.totalTvlInUsd ?? undefined,\n holders: input.holders ? parseInt(input.holders) : undefined,\n top10Holdings: input.top10TotalHoldings ?? undefined,\n top10HoldingsRatio: input.top10HoldingsRatio ?? undefined,\n top50Holdings: input.top50TotalHoldings ?? undefined,\n top50HoldingsRatio: input.top50HoldingsRatio ?? undefined,\n top100Holdings: input.top100TotalHoldings ?? undefined,\n top100HoldingsRatio: input.top100HoldingsRatio ?? undefined,\n bluechipHolders: input.bluechipTotalHolders\n ? parseInt(input.bluechipTotalHolders)\n : undefined,\n bluechipHoldings: input.bluechipTotalHoldings ?? undefined,\n bluechipHoldingsRatio: input.bluechipHoldingsRatio ?? undefined,\n kolHolders: input.kolTotalHolders\n ? parseInt(input.kolTotalHolders)\n : undefined,\n kolHoldings: input.kolTotalHoldings ?? undefined,\n kolHoldingsRatio: input.kolHoldingsRatio ?? undefined,\n sniperHolders: input.sniperTotalHolders\n ? parseInt(input.sniperTotalHolders)\n : undefined,\n sniperHoldings: input.sniperTotalHoldings ?? undefined,\n sniperHoldingsRatio: input.sniperHoldingsRatio ?? undefined,\n proHolders: input.proTotalHolders\n ? parseInt(input.proTotalHolders)\n : undefined,\n proHoldings: input.proTotalHoldings ?? undefined,\n proHoldingsRatio: input.proHoldingsRatio ?? undefined,\n insiderHolders: input.insiderTotalHolders\n ? parseInt(input.insiderTotalHolders)\n : undefined,\n insiderHoldings: input.insiderTotalHoldings ?? undefined,\n insiderHoldingsRatio: input.insiderHoldingsRatio ?? undefined,\n sandwichHolders: input.sandwishTotalHolders\n ? parseInt(input.sandwishTotalHolders)\n : undefined,\n sandwichHoldings: input.sandwishTotalHoldings ?? undefined,\n sandwichHoldingsRatio: input.sandwishHoldingsRatio ?? undefined,\n freshHolders: input.freshTotalHolders\n ? parseInt(input.freshTotalHolders)\n : undefined,\n freshHoldings: input.freshTotalHoldings ?? undefined,\n freshHoldingsRatio: input.freshHoldingsRatio ?? undefined,\n bundleHolders: input.bundleTotalHolders\n ? parseInt(input.bundleTotalHolders)\n : undefined,\n bundleHoldings: input.bundleTotalHoldings ?? undefined,\n bundleHoldingsRatio: input.bundleHoldingsRatio ?? undefined,\n devHolders: input.devTotalHolders\n ? parseInt(input.devTotalHolders)\n : undefined,\n devHoldings: input.devTotalHoldings ?? undefined,\n devHoldingsRatio: input.devHoldingsRatio ?? undefined,\n };\n}\n\nexport function fromTokenCandle(\n input: SdkTokenCandle,\n resolution: TokenResolution,\n): TokenCandle {\n return {\n open: input.open,\n close: input.close,\n high: input.high,\n low: input.low,\n volume: input.volume,\n 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\nexport function fromTokenSecurity(\n input: TokenSecurityResponse | Record<string, unknown>,\n): TokenSecurity {\n const legacy = input as Record<string, unknown>;\n return {\n hasTransferFee: legacy.hasTransferFee as boolean | undefined,\n isTransferFeeUpgradable: legacy.isTransferFeeUpgradable as\n | boolean\n | undefined,\n isTransferable: legacy.isTransferable as boolean | undefined,\n isFreezable: legacy.isFreezable as boolean | undefined,\n isClosable: legacy.isClosable as boolean | undefined,\n };\n}\nconst solanaChains: ReadonlySet<Chain> = new Set([\n Chain.SOLANA,\n Chain.SOLANA_TESTNET,\n Chain.SOLANA_DEVNET,\n]);\n\n/** EVM chains use this address to denote the native token (ETH, BNB, etc.). */\nconst EVM_NATIVE_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\n/**\n * KyberSwap API expects this sentinel for native token (ETH/BNB/etc.),\n * not the zero address. See KyberSwap docs / 400 on route when using 0x0.\n * Exported for use when building route request bodies outside Client.swapRoute.\n */\nexport const KYBERSWAP_NATIVE_SENTINEL =\n \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\n/**\n * Jupiter does not accept Solana's native SOL address (System Program);\n * it requires the wrapped SOL (WSOL) mint instead.\n */\nfunction toJupiterMint(address: string): string {\n return address === SOLANA_TOKENS.native.address\n ? SOLANA_TOKENS.wrapped.address\n : address;\n}\n\n/**\n * KyberSwap does not accept EVM zero address (0x0) for native token;\n * it requires the native sentinel address 0xEee...\n */\nfunction toKyberSwapMint(address: string): string {\n return address.toLowerCase() === EVM_NATIVE_ADDRESS.toLowerCase()\n ? KYBERSWAP_NATIVE_SENTINEL\n : address;\n}\n\n/**\n * Resolves effective DEX from params: explicit dex or inferred from chain.\n * Mint conversion (native → sentinel) is chosen by this DEX, not by chain alone.\n *\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 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 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 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 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) => ({\n chain,\n address: item.tokenAddress,\n name: item.name ?? \"\",\n symbol: item.symbol ?? \"\",\n image: nullToUndefined(item.logoUri),\n amount: item.balance,\n amountInUsd: item.currentValue,\n priceInUsd: item.priceInUsd,\n decimals: item.decimals ?? 0,\n totalTrades: Number(item.totalTrades),\n buys: Number(item.buys),\n buyVolumes: item.buyAmount,\n buyVolumesInUsd: item.buyAmountInUsd,\n buyAvgPriceInUsd: item.avgBuyPriceInUsd,\n sells: Number(item.sells),\n sellVolumes: item.sellAmount,\n sellVolumesInUsd: item.sellAmountInUsd,\n sellAvgPriceInUsd: item.avgSellPriceInUsd,\n realizedProfitInUsd: item.realizedProfitInUsd,\n realizedProfitRatio: item.realizedProfitRatio,\n unrealizedProfitInUsd: item.unrealizedProfitInUsd,\n unrealizedProfitRatio: item.unrealizedProfitRatio,\n totalProfitInUsd: item.totalProfitInUsd,\n totalProfitRatio: item.totalProfitRatio,\n }));\n}\n\nexport function fromTradePage(\n input: PageResponseTradeDetail,\n): 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 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 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\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:\n options?.sortBy === \"lastActiveAt\"\n ? HolderSortBy.lastActiveAt\n : options?.sortBy === \"holdingUsd\"\n ? HolderSortBy.holdingUsd\n : options?.sortBy === \"realizedPnl\"\n ? HolderSortBy.profit\n : options?.sortBy === \"buyVolume\"\n ? HolderSortBy.buyVolume\n : options?.sortBy === \"sellVolume\"\n ? HolderSortBy.sellVolume\n : undefined,\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 === \"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 === \"profit\"\n ? TraderSortBy.profit\n : undefined,\n tag: options?.tag,\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.NewPool,\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 throw new NotImplementedError(\n \"Client.getTokensByCreator\",\n \"no creator-index endpoint on the backend yet\",\n );\n }\n\n subscribeToken(\n chain: Chain,\n address: string,\n callback: (data: Array<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 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:\n options?.sortBy === \"totalUsd\"\n ? ActivitySortBy.totalUsd\n : options?.sortBy === \"timestamp\"\n ? ActivitySortBy.timestamp\n : undefined,\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/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","toChainDTO","Chain","ChainSymbol","toResolutionDTO","resolution","Resolution","toSortDirectionDTO","direction","toSearchFieldDTO","field","SearchSortBy","toFieldDTO","TokenField","toRangeFiltersDTO","filters","it","cond","SafeBigNumber","fromChainDTO","fromTokenCreatorDTO","input","fromTokenDTO","fromTokenStatsDTO","fromTokenMarketDataDTO","parseTokenStatsByResolution","toOptionalNumber","period","fromTokenLiquidityDTO","fromRankingPoolDexDTO","fromRankingPoolBalanceDTO","fromRankingPoolDTO","mergeSubscribedUpdates","updates","merged","update","fromWsRankingPoolToSubscribed","tokenUpdate","fromWsRankingTokenListToSubscribed","fromTokenCandle","fromResolutionDTO","fromTokenSecurity","legacy","solanaChains","EVM_NATIVE_ADDRESS","KYBERSWAP_NATIVE_SENTINEL","toJupiterMint","address","SOLANA_TOKENS","toKyberSwapMint","effectiveDex","toMintForDex","dex","toMintForRoute","toSwapRouteInput","inputMint","outputMint","SwapMode","SwapRouteInputSwapMode","toSendTxInput","toDateFromMs","ms","toDateFromUnixLikeTimestamp","toTagArray","fromRawTokenHolder","holder","fromTokenHolderPage","fromSdkTokenHolderPage","fromSdkTokenTopTraderPage","trader","fromTokenPage","pageExtra","fromSwapRoute","fromLatestBlock","fromSendTxResult","fromWalletPortfolios","portfolios","item","fromWalletPnlSummary","fromPnlItemDTO","fromPnlDetailsPage","summaryExtra","fromWalletNetWorthByTokens","fromPnlDetailItems","fromTradePage","fromTradeDetailDTO","isBuy","fromSdkActivityPage","fromActivityPage","fromActivityDetailDTO","type","time","fromTokenSubscribed","fromTokenMetadataSubscribed","fromWsCandle","fromWsTokenStats","timeframes","record","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","Client","_Client","options","ChainStreamClient","addresses","c","security","stats","holders","HolderSortBy","traders","TraderSortBy","marketData","_options","RankingPoolType","pool","tokenPage","route","latestBlock","txHash","timeout","success","chainParam","netWorth","pnl","detailsPage","PnlResolution","SdkPositionState","PnlSortBy","tokenAddresses","_chain","_address","_creator","callback","chainDTO","uniqueAddresses","subs","data","stream","s","rankingSub","WsChannelType","d","WsRankingType","bondingSub","base","qs","raw","decimals","divisor","whole","fracStr","nativeAddr","nativePortfolio","p","parseLaunchPlatformFromFilters","target","tradePage","page","ActivitySortBy","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 amountInUsd: string;\n percentage: string;\n tags?: Array<string>;\n lastActiveAt?: number | null;\n startHoldingAt?: number | null;\n}\n\nexport interface Phase3ActivityDTO {\n transactionSignature: string;\n chain: string;\n blockHeight?: number;\n blockTimestamp: number;\n type: string;\n\n tokenAddress: string;\n tokenName?: string;\n tokenSymbol: string;\n tokenImageUrl?: string | null;\n tokenAmount: string;\n tokenAmountInUsd: string;\n tokenPriceInUsd?: string;\n tokenAmountInNative?: string;\n tokenPriceInNative?: string;\n\n sideTokenAddress: string;\n sideTokenName?: string;\n sideTokenSymbol: string;\n sideTokenImageUrl?: string | null;\n sideTokenAmount: string;\n sideTokenAmountInUsd: string;\n sideTokenPriceInUsd?: string;\n\n accountOwnerAddress: string;\n gasFee?: number | null;\n traderTags?: Array<string>;\n\n poolAddress?: string | null;\n dexProgramAddress?: string | null;\n dexProtocolFamily?: string | null;\n dexImage?: string | null;\n\n status?: string;\n}\n\nexport interface Phase3NetWorthTokenDTO {\n chain: string;\n tokenAddress: string;\n name: string;\n symbol: string;\n decimals: number;\n logoUri?: string | null;\n amount: string;\n priceInUsd: string;\n priceInNative: string;\n valueInUsd: string;\n valueInNative: string;\n isActive?: boolean;\n avgCostUsd?: string | null;\n lastActiveAt?: number | null;\n walletTokenTags?: Array<string>;\n}\n\nexport interface Phase3NetWorthByTokensDTO {\n walletAddress: string;\n totalValueInUsd: string;\n totalValueInNative: string;\n currentTimestamp?: number;\n data: Array<Phase3NetWorthTokenDTO>;\n}\n\nexport interface Phase3PnlSummaryDTO {\n tokens?: number | string;\n totalTrades?: number | string;\n buys?: number | string;\n sells?: number | string;\n wins?: number | string;\n losses?: number | string;\n winRate?: string | null;\n realizedProfitInUsd?: string | null;\n unrealizedProfitInUsd?: string | null;\n totalProfitInUsd?: string | null;\n totalProfitRatio?: string | null;\n currentValue?: string | null;\n buyAmountInUsd?: string | null;\n sellAmountInUsd?: string | null;\n totalCostInUsd?: string;\n avgProfitPerTradeInUsd?: string | null;\n}\n\nexport interface Phase3PnlItemDTO {\n tokenAddress: string;\n symbol?: string;\n name?: string;\n decimals?: number;\n logoUri?: string | null;\n walletAddress?: string;\n chain?: string;\n\n balance: string;\n priceInUsd: string;\n currentValue: string;\n\n realizedProfitInUsd?: string;\n realizedProfitRatio?: string;\n unrealizedProfitInUsd?: string;\n unrealizedProfitRatio?: string;\n totalProfitInUsd?: string;\n totalProfitRatio?: string;\n\n buys?: number | string;\n sells?: number | string;\n totalTrades?: number | string;\n wins?: number | string;\n losses?: number | string;\n buyAmount?: string;\n sellAmount?: string;\n buyAmountInUsd?: string;\n sellAmountInUsd?: string;\n avgBuyPriceInUsd?: string;\n avgSellPriceInUsd?: string;\n avgProfitPerTradeInUsd?: string;\n totalCostInUsd?: string;\n\n isClosed?: boolean;\n firstBuyAt?: number | null;\n lastSellAt?: number | null;\n}\n\nexport interface Phase3PnlDetailsDTO extends CursorPageDTO<Phase3PnlItemDTO> {\n summary: Phase3PnlSummaryDTO;\n}\n\n// ============================================================================\n// Query param types\n// ============================================================================\n\nexport interface GetTokenHoldersQuery {\n /**\n * Sort field. `realizedPnl` is accepted by newer servers for the Top\n * Traders view; if the backend does not recognize it, it typically falls\n * back to `holdingUsd` and the widget surfaces an empty state cue.\n */\n sortBy?: \"holdingUsd\" | \"lastActiveAt\" | \"realizedPnl\";\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\nexport interface GetActivitiesQuery {\n tokenAddress?: string;\n walletAddress?: string;\n poolAddress?: string;\n type?: string;\n sortBy?: \"timestamp\" | \"totalUsd\";\n beforeTimestamp?: number;\n afterTimestamp?: number;\n beforeBlockHeight?: number;\n afterBlockHeight?: number;\n transactionsSignature?: string;\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\nexport interface GetNetWorthByTokensQuery {\n tokenAddresses: string;\n}\n\nexport interface GetPnlDetailsQuery {\n resolution: \"7d\" | \"30d\" | \"90d\";\n positionState?: \"open\" | \"closed\" | \"all\";\n sortBy?: \"totalPnl\" | \"realizedPnl\" | \"unrealizedPnl\";\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\n// ============================================================================\n// Endpoint wrappers\n// ============================================================================\n\n/** `GET /v2/token/{chain}/{tokenAddress}/holders` */\nexport function getTokenHolders(\n ctx: Phase3RequestContext,\n chain: string,\n tokenAddress: string,\n query: GetTokenHoldersQuery,\n): Promise<CursorPageDTO<Phase3TokenHolderDTO>> {\n return request(\n ctx,\n `/v2/token/${encodeURIComponent(chain)}/${encodeURIComponent(\n tokenAddress,\n )}/holders`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/trade/{chain}/activities` */\nexport function getActivities(\n ctx: Phase3RequestContext,\n chain: string,\n query: GetActivitiesQuery,\n): Promise<CursorPageDTO<Phase3ActivityDTO>> {\n return request(\n ctx,\n `/v2/trade/${encodeURIComponent(chain)}/activities`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/wallet/{chain}/{walletAddress}/net-worth/tokens` */\nexport function getWalletNetWorthByTokens(\n ctx: Phase3RequestContext,\n chain: string,\n walletAddress: string,\n query: GetNetWorthByTokensQuery,\n): Promise<Phase3NetWorthByTokensDTO> {\n return request(\n ctx,\n `/v2/wallet/${encodeURIComponent(chain)}/${encodeURIComponent(\n walletAddress,\n )}/net-worth/tokens`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/wallet/{chain}/{walletAddress}/pnl-details` */\nexport function getWalletPnlDetails(\n ctx: Phase3RequestContext,\n chain: string,\n walletAddress: string,\n query: GetPnlDetailsQuery,\n): Promise<Phase3PnlDetailsDTO> {\n return request(\n ctx,\n `/v2/wallet/${encodeURIComponent(chain)}/${encodeURIComponent(\n walletAddress,\n )}/pnl-details`,\n query as unknown as Record<string, unknown>,\n );\n}\n","import {\n Token as TokenDTO,\n Resolution,\n TokenCandle as SdkTokenCandle,\n TokenStats as SdkTokenStats,\n TokenMarketData as SdkTokenMarketData,\n TokenField,\n RangeFilterCondition,\n SearchSortBy,\n TokenPage as ChainStreamTokenPage,\n SwapRouteResponse,\n SwapRouteInput,\n SwapRouteInputSwapMode,\n SendTxInput,\n SendTxResponse,\n WalletNetWorthPage,\n PageResponseTradeDetail,\n PageResponseTokenHolder,\n PageResponseTokenTopTrader,\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} 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 TokenMarketData,\n TokenResolution,\n TokenSecurity,\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\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 launchedFrom: {\n programAddress: input.extra?.launchFromProgramAddress ?? undefined,\n protocolFamily: input.extra?.launchFromProtocolFamily ?? undefined,\n },\n migrateProgress: input.marketData?.completionRatio\n ? new SafeBigNumber(input.marketData.completionRatio)\n .shiftedBy(2)\n .toString()\n : undefined,\n migratedTo: {\n programAddress: input.extra?.migratedToProgramAddress ?? undefined,\n protocolFamily: input.extra?.migratedToProtocolFamily ?? undefined,\n poolAddress: input.extra?.migratedToPoolAddress ?? undefined,\n migratedAt: input.extra?.migratedAt\n ? new Date(input.extra.migratedAt)\n : undefined,\n },\n socialMedias: input.socialMedias\n ? Object.fromEntries(\n Object.entries(input.socialMedias)\n .filter(([, v]) => v != null)\n .map(([k, v]) => [k, v as string]),\n )\n : undefined,\n stats: input.stats ? fromTokenStatsDTO(input.stats) : undefined,\n marketData: input.marketData\n ? fromTokenMarketDataDTO(input.marketData)\n : undefined,\n createdAt: input.tokenCreatedAt\n ? new Date(input.tokenCreatedAt)\n : undefined,\n };\n}\n\nexport function fromTokenStatsDTO(input: SdkTokenStats): TokenStats {\n return {\n [\"1m\"]: parseTokenStatsByResolution(input, \"1m\"),\n [\"5m\"]: parseTokenStatsByResolution(input, \"5m\"),\n [\"15m\"]: parseTokenStatsByResolution(input, \"15m\"),\n [\"30m\"]: parseTokenStatsByResolution(input, \"30m\"),\n [\"1h\"]: parseTokenStatsByResolution(input, \"1h\"),\n [\"4h\"]: parseTokenStatsByResolution(input, \"4h\"),\n [\"24h\"]: parseTokenStatsByResolution(input, \"24h\"),\n };\n}\n\nfunction toOptionalNumber(value: string | undefined): number | undefined {\n return value === undefined ? undefined : parseInt(value);\n}\n\nfunction parseTokenStatsByResolution(\n input: SdkTokenStats,\n resolution: TokenResolution,\n): TokenStatsByResolution {\n const period = input.periods?.[resolution];\n if (!period) {\n return {};\n }\n\n return {\n buys: toOptionalNumber(period.buys),\n sells: toOptionalNumber(period.sells),\n trades: toOptionalNumber(period.trades),\n buyers: toOptionalNumber(period.buyers),\n sellers: toOptionalNumber(period.sellers),\n traders: toOptionalNumber(period.traders),\n buyVolumes: period.buyVolume,\n sellVolumes: period.sellVolume,\n volumes: period.totalVolumeInNative,\n buyVolumesInUsd: period.buyVolumeInUsd,\n sellVolumesInUsd: period.sellVolumeInUsd,\n volumesInUsd: period.totalVolumeInUsd,\n openPriceInUsd: period.openInUsd,\n closePriceInUsd: period.closeInUsd,\n highPriceInUsd: period.highInUsd,\n lowPriceInUsd: period.lowInUsd,\n priceInUsd: period.closeInUsd,\n priceChange: period.priceChangeRatioInUsd,\n };\n}\n\nexport function fromTokenLiquidityDTO(input: DexPool): TokenLiquidity {\n return {\n poolAddress: input.poolAddress,\n programAddress: input.programAddress ?? undefined,\n protocolFamily: input.protocolFamily ?? undefined,\n 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 price: input.priceInNative ?? input.priceInSol ?? undefined,\n priceInUsd: input.priceInUsd ?? undefined,\n tvl: input.totalTvlInSol ?? undefined,\n tvlInUsd: input.totalTvlInUsd ?? undefined,\n holders: input.holders ? parseInt(input.holders) : undefined,\n top10Holdings: input.top10TotalHoldings ?? undefined,\n top10HoldingsRatio: input.top10HoldingsRatio ?? undefined,\n top50Holdings: input.top50TotalHoldings ?? undefined,\n top50HoldingsRatio: input.top50HoldingsRatio ?? undefined,\n top100Holdings: input.top100TotalHoldings ?? undefined,\n top100HoldingsRatio: input.top100HoldingsRatio ?? undefined,\n bluechipHolders: input.bluechipTotalHolders\n ? parseInt(input.bluechipTotalHolders)\n : undefined,\n bluechipHoldings: input.bluechipTotalHoldings ?? undefined,\n bluechipHoldingsRatio: input.bluechipHoldingsRatio ?? undefined,\n kolHolders: input.kolTotalHolders\n ? parseInt(input.kolTotalHolders)\n : undefined,\n kolHoldings: input.kolTotalHoldings ?? undefined,\n kolHoldingsRatio: input.kolHoldingsRatio ?? undefined,\n sniperHolders: input.sniperTotalHolders\n ? parseInt(input.sniperTotalHolders)\n : undefined,\n sniperHoldings: input.sniperTotalHoldings ?? undefined,\n sniperHoldingsRatio: input.sniperHoldingsRatio ?? undefined,\n proHolders: input.proTotalHolders\n ? parseInt(input.proTotalHolders)\n : undefined,\n proHoldings: input.proTotalHoldings ?? undefined,\n proHoldingsRatio: input.proHoldingsRatio ?? undefined,\n insiderHolders: input.insiderTotalHolders\n ? parseInt(input.insiderTotalHolders)\n : undefined,\n insiderHoldings: input.insiderTotalHoldings ?? undefined,\n insiderHoldingsRatio: input.insiderHoldingsRatio ?? undefined,\n sandwichHolders: input.sandwishTotalHolders\n ? parseInt(input.sandwishTotalHolders)\n : undefined,\n sandwichHoldings: input.sandwishTotalHoldings ?? undefined,\n sandwichHoldingsRatio: input.sandwishHoldingsRatio ?? undefined,\n freshHolders: input.freshTotalHolders\n ? parseInt(input.freshTotalHolders)\n : undefined,\n freshHoldings: input.freshTotalHoldings ?? undefined,\n freshHoldingsRatio: input.freshHoldingsRatio ?? undefined,\n bundleHolders: input.bundleTotalHolders\n ? parseInt(input.bundleTotalHolders)\n : undefined,\n bundleHoldings: input.bundleTotalHoldings ?? undefined,\n bundleHoldingsRatio: input.bundleHoldingsRatio ?? undefined,\n devHolders: input.devTotalHolders\n ? parseInt(input.devTotalHolders)\n : undefined,\n devHoldings: input.devTotalHoldings ?? undefined,\n devHoldingsRatio: input.devHoldingsRatio ?? undefined,\n };\n}\n\nexport function fromTokenCandle(\n input: SdkTokenCandle,\n resolution: TokenResolution,\n): TokenCandle {\n return {\n open: input.open,\n close: input.close,\n high: input.high,\n low: input.low,\n volume: input.volume,\n 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\nexport function fromTokenSecurity(\n input: TokenSecurityResponse | Record<string, unknown>,\n): TokenSecurity {\n const legacy = input as Record<string, unknown>;\n return {\n hasTransferFee: legacy.hasTransferFee as boolean | undefined,\n isTransferFeeUpgradable: legacy.isTransferFeeUpgradable as\n | boolean\n | undefined,\n isTransferable: legacy.isTransferable as boolean | undefined,\n isFreezable: legacy.isFreezable as boolean | undefined,\n isClosable: legacy.isClosable as boolean | undefined,\n };\n}\nconst solanaChains: ReadonlySet<Chain> = new Set([\n Chain.SOLANA,\n Chain.SOLANA_TESTNET,\n Chain.SOLANA_DEVNET,\n]);\n\n/** EVM chains use this address to denote the native token (ETH, BNB, etc.). */\nconst EVM_NATIVE_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\n/**\n * KyberSwap API expects this sentinel for native token (ETH/BNB/etc.),\n * not the zero address. See KyberSwap docs / 400 on route when using 0x0.\n * Exported for use when building route request bodies outside Client.swapRoute.\n */\nexport const KYBERSWAP_NATIVE_SENTINEL =\n \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\n/**\n * Jupiter does not accept Solana's native SOL address (System Program);\n * it requires the wrapped SOL (WSOL) mint instead.\n */\nfunction toJupiterMint(address: string): string {\n return address === SOLANA_TOKENS.native.address\n ? SOLANA_TOKENS.wrapped.address\n : address;\n}\n\n/**\n * KyberSwap does not accept EVM zero address (0x0) for native token;\n * it requires the native sentinel address 0xEee...\n */\nfunction toKyberSwapMint(address: string): string {\n return address.toLowerCase() === EVM_NATIVE_ADDRESS.toLowerCase()\n ? KYBERSWAP_NATIVE_SENTINEL\n : address;\n}\n\n/**\n * Resolves effective DEX from params: explicit dex or inferred from chain.\n * Mint conversion (native → sentinel) is chosen by this DEX, not by chain alone.\n *\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 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 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 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 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) => ({\n chain,\n address: item.tokenAddress,\n name: item.name ?? \"\",\n symbol: item.symbol ?? \"\",\n image: nullToUndefined(item.logoUri),\n amount: item.balance,\n amountInUsd: item.currentValue,\n priceInUsd: item.priceInUsd,\n decimals: item.decimals ?? 0,\n totalTrades: Number(item.totalTrades),\n buys: Number(item.buys),\n buyVolumes: item.buyAmount,\n buyVolumesInUsd: item.buyAmountInUsd,\n buyAvgPriceInUsd: item.avgBuyPriceInUsd,\n sells: Number(item.sells),\n sellVolumes: item.sellAmount,\n sellVolumesInUsd: item.sellAmountInUsd,\n sellAvgPriceInUsd: item.avgSellPriceInUsd,\n realizedProfitInUsd: item.realizedProfitInUsd,\n realizedProfitRatio: item.realizedProfitRatio,\n unrealizedProfitInUsd: item.unrealizedProfitInUsd,\n unrealizedProfitRatio: item.unrealizedProfitRatio,\n totalProfitInUsd: item.totalProfitInUsd,\n totalProfitRatio: item.totalProfitRatio,\n }));\n}\n\nexport function fromTradePage(\n input: PageResponseTradeDetail,\n): 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 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 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\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:\n options?.sortBy === \"lastActiveAt\"\n ? HolderSortBy.lastActiveAt\n : options?.sortBy === \"holdingUsd\"\n ? HolderSortBy.holdingUsd\n : options?.sortBy === \"realizedPnl\"\n ? HolderSortBy.profit\n : options?.sortBy === \"buyVolume\"\n ? HolderSortBy.buyVolume\n : options?.sortBy === \"sellVolume\"\n ? HolderSortBy.sellVolume\n : undefined,\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 === \"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 === \"profit\"\n ? TraderSortBy.profit\n : undefined,\n tag: options?.tag,\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.NewPool,\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 throw new NotImplementedError(\n \"Client.getTokensByCreator\",\n \"no creator-index endpoint on the backend yet\",\n );\n }\n\n subscribeToken(\n chain: Chain,\n address: string,\n callback: (data: Array<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:\n options?.sortBy === \"totalUsd\"\n ? ActivitySortBy.totalUsd\n : options?.sortBy === \"timestamp\"\n ? ActivitySortBy.timestamp\n : undefined,\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"]}