@liberfi.io/client 0.3.25 → 0.3.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -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","v","search","token","res","body","buildPhase3Context","accessToken","serverUrl","getTokenHolders","chain","tokenAddress","getWalletPnlDetails","walletAddress","nullToUndefined","toChainDTO","Chain","ChainSymbol","toResolutionDTO","resolution","Resolution","toSortDirectionDTO","direction","toSearchFieldDTO","field","SearchSortBy","toFieldDTO","TokenField","toRangeFiltersDTO","filters","it","cond","SafeBigNumber","fromChainDTO","fromTokenCreatorDTO","input","fromTokenDTO","k","fromTokenStatsDTO","fromTokenMarketDataDTO","parseTokenStatsByResolution","toOptionalNumber","period","fromTokenLiquidityDTO","fromTokenCandle","fromResolutionDTO","fromTokenSecurity","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","fromTokenHolderPage","holder","fromSdkTokenHolderPage","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","fromWsTokenSupplyToSubscribed","fromWsTokenHolderToSubscribed","fromWsTokenMarketDataFromHolder","fromWsTokenLiquidityToSubscribed","WsMetricType","fromWsTokenBondingCurveToSubscribed","fromWsTokenMaxLiquidityToSubscribed","fromWsTokenTotalLiquidityToSubscribed","fromWsTradeActivity","fromWsActivity","Client","_Client","options","ChainStreamClient","addresses","c","security","stats","holders","HolderSortBy","marketData","tokenPage","route","latestBlock","txHash","timeout","success","chainParam","netWorth","pnl","detailsPage","PnlResolution","SdkPositionState","PnlSortBy","tokenAddresses","_chain","_address","_options","_creator","callback","chainDTO","subs","data","s","rankingSub","WsChannelType","d","bondingSub","base","qs","raw","decimals","divisor","whole","fracStr","amount","nativeAddr","nativePortfolio","p","parseLaunchPlatformFromFilters","target","tradePage","page","ActivitySortBy","channelType","filter"],"mappings":"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","file":"index.js","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 DexPool,\n ChainSymbol,\n TokenCreator as SdkTokenCreator,\n WsNewToken,\n WsTokenMetadata,\n WsCandle,\n WsTokenStat,\n WsTradeActivity,\n WsTokenHolder as WsTokenHolderDTO,\n WsTokenSupply,\n WsTokenLiquidity,\n WsTokenMaxLiquidity,\n WsTokenTotalLiquidity,\n WsTokenBondingCurve,\n WsMetricType,\n WalletPnlSummary,\n 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 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 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 tvl: input.tvlInSol ?? undefined,\n tvlInUsd: input.tvlInUsd ?? undefined,\n };\n}\n\nexport function fromTokenMarketDataDTO(\n input: SdkTokenMarketData,\n): TokenMarketData {\n return {\n totalSupply: input.totalSupply ?? undefined,\n marketCap: input.marketCapInSol ?? undefined,\n marketCapInUsd: input.marketCapInUsd ?? undefined,\n price: input.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\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) => ({\n address: holder.walletAddress,\n amount: holder.amount,\n amountInUsd: holder.amountInUsd,\n ratio: holder.percentage,\n tags: toTagArray<WalletTag>(holder.tags),\n lastActiveAt: toDateFromMs(holder.lastActiveAt),\n startHoldingAt: toDateFromMs(holder.startHoldingAt),\n })),\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) => ({\n address: holder.walletAddress,\n amount: holder.amount,\n amountInUsd: holder.amountInUsd,\n ratio: holder.percentage,\n tags: toTagArray<WalletTag>(holder.tags),\n lastActiveAt: toDateFromMs(holder.lastActiveAt),\n startHoldingAt: toDateFromMs(holder.startHoldingAt),\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 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 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 },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n },\n status: \"success\",\n time: new Date(input.timestamp),\n };\n}\n\nexport function fromWsActivity(chain: Chain, input: WsTradeActivity): Activity {\n const type = input.kind.toLowerCase().replace(/ /g, \"_\") as ActivityType;\n const isBuy = type === \"buy\";\n return {\n chain,\n walletAddress: isBuy ? input.buyWalletAddress : input.sellWalletAddress,\n txHash: input.txHash,\n type,\n from: {\n address: input.sellTokenAddress,\n symbol: input.sellTokenSymbol,\n name: input.sellTokenName,\n amount: input.sellAmount,\n amountInUsd: input.sellAmountInUsd,\n },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n },\n status: \"success\",\n time: new Date(input.timestamp),\n };\n}\n","import {\n ChainStreamClient,\n ChainSymbol,\n ActivitySortBy,\n HolderSortBy,\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} from \"@chainstream-io/sdk\";\nimport {\n Activity,\n ActivityType,\n BlockchainLatestBlock,\n Chain,\n CursorList,\n GetActivitiesOptions,\n GetTokenCandlesOptions,\n GetTokenHoldersOptions,\n GetTokenListOptions,\n GetTokensByCreatorOptions,\n GetTradesOptions,\n GetWalletLimitOrdersOptions,\n GetWalletPortfolioPnlsOptions,\n IClient,\n ISubscribeClient,\n ISubscription,\n LatestBlockParams,\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 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 toSendTxInput,\n toSwapRouteInput,\n fromWsCandle,\n fromWsTokenDataSubscribed,\n fromWsTokenSupplyToSubscribed,\n fromWsTokenHolderToSubscribed,\n fromWsTokenLiquidityToSubscribed,\n fromWsTokenMaxLiquidityToSubscribed,\n fromWsTokenTotalLiquidityToSubscribed,\n fromWsTokenBondingCurveToSubscribed,\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 if (options?.sortBy !== \"realizedPnl\") {\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 : undefined,\n },\n );\n return fromSdkTokenHolderPage(holders);\n }\n\n // Compatibility fallback: SDK 2.1.12 still does not expose the\n // `realizedPnl` holder sort used by token top traders.\n const holders = await phase3GetTokenHolders(\n this._phase3,\n toChainDTO(chain),\n address,\n {\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n sortBy: options?.sortBy,\n },\n );\n return fromTokenHolderPage(holders);\n }\n\n async getTokenMarketData(\n chain: Chain,\n address: string,\n ): Promise<TokenMarketData> {\n const marketData = await this._client.token.getMarketData(\n toChainDTO(chain),\n address,\n );\n return fromTokenMarketDataDTO(marketData);\n }\n\n async getNewTokens(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getNewTokens(\n toChainDTO(chain),\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async getFinalStretchTokens(\n chain: Chain,\n options?: 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 const chainDTO = toChainDTO(chain);\n const subs = [\n this._client.stream.subscribeTokenStats({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenStat) =>\n callback([fromWsTokenDataSubscribed(chain, data)]),\n }),\n this._client.stream.subscribeTokenSupply({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenSupply) =>\n callback([fromWsTokenSupplyToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenHolders({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenHolder) =>\n callback([fromWsTokenHolderToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenLiquidity({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenLiquidity) =>\n callback([fromWsTokenLiquidityToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenMaxLiquidity({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenMaxLiquidity) =>\n callback([fromWsTokenMaxLiquidityToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenTotalLiquidity({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenTotalLiquidity) =>\n callback([\n fromWsTokenTotalLiquidityToSubscribed(chain, address, data),\n ]),\n }),\n ];\n return { unsubscribe: () => subs.forEach((s) => s.unsubscribe()) };\n }\n\n subscribeTokenCandles(\n chain: Chain,\n address: string,\n resolution: TokenResolution,\n callback: (candles: Array<TokenCandle>) => void,\n ): 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 subscribeTrendingTokens(\n chain: Chain,\n callback: (data: Array<TokenSubscribed>) => void,\n ): ISubscription {\n return this._subscribeRankingTokens(chain, WsChannelType.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._subscribeRankingTokens(\n chain,\n WsChannelType.US_STOCKS,\n callback,\n );\n }\n\n // ── RPC balance fallback (temporary) ─────────────────────────────────────\n\n private static readonly _CHAIN_TO_BALANCE_PARAM: Partial<\n Record<Chain, string>\n > = {\n [Chain.SOLANA]: \"sol\",\n [Chain.ETHEREUM]: \"eth\",\n [Chain.BINANCE]: \"bnb\",\n };\n\n private static readonly _NATIVE_TOKEN_ADDRESS: Partial<\n Record<Chain, string>\n > = {\n [Chain.SOLANA]: \"11111111111111111111111111111111\",\n [Chain.ETHEREUM]: \"0x0000000000000000000000000000000000000000\",\n [Chain.BINANCE]: \"0x0000000000000000000000000000000000000000\",\n };\n\n /**\n * Fetch token balances from the local `/api/balance` RPC proxy and convert\n * the raw `{ address, balance, decimals }` entries into `Portfolio` objects.\n */\n private async _getPortfoliosFromBalanceApi(\n chain: Chain,\n chainParam: string,\n walletAddress: string,\n tokenAddresses?: Array<string>,\n ): Promise<Array<Portfolio>> {\n const base = this.options!.nativeBalanceApiUrl!;\n const qs = new URLSearchParams({\n chain: chainParam,\n address: walletAddress,\n });\n if (tokenAddresses?.length) {\n qs.set(\"tokens\", tokenAddresses.join(\",\"));\n }\n\n const res = await fetch(`${base}?${qs.toString()}`);\n if (!res.ok) {\n throw new Error(`Balance API returned ${res.status}`);\n }\n\n const data = (await res.json()) as {\n balances: Array<{ address: string; balance: string; decimals: number }>;\n };\n\n return data.balances.map((item) => {\n const raw = BigInt(item.balance);\n const decimals = item.decimals;\n const divisor = BigInt(10) ** BigInt(decimals);\n const whole = raw / divisor;\n const frac = raw % divisor;\n const fracStr = frac.toString().padStart(decimals, \"0\");\n const amount = `${whole}.${fracStr}`.replace(/\\.?0+$/, \"\") || \"0\";\n\n return {\n chain,\n address: item.address,\n name: \"\",\n symbol: \"\",\n priceInUsd: \"0\",\n priceInNative: \"0\",\n amount,\n amountInUsd: \"0\",\n amountInNative: \"0\",\n decimals: item.decimals,\n };\n });\n }\n\n /**\n * Fetch all holdings from the balance API and wrap as `WalletPortfolios`.\n */\n private async _getWalletPortfoliosFromBalanceApi(\n chain: Chain,\n chainParam: string,\n walletAddress: string,\n ): Promise<WalletPortfolios> {\n const portfolios = await this._getPortfoliosFromBalanceApi(\n chain,\n chainParam,\n walletAddress,\n );\n\n const nativeAddr = Client._NATIVE_TOKEN_ADDRESS[chain];\n const nativePortfolio = nativeAddr\n ? portfolios.find((p) => p.address === nativeAddr)\n : undefined;\n\n return {\n chain,\n address: walletAddress,\n balanceInUsd: \"0\",\n balanceInNative: nativePortfolio?.amount ?? \"0\",\n portfolios,\n hasPrev: false,\n hasNext: false,\n };\n }\n\n // ── End RPC balance fallback ───────────────────────────────────────────\n\n private _buildRankingParams(options?: 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\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","getTokenHolders","chain","tokenAddress","getWalletPnlDetails","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","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","fromTokenHolderPage","holder","fromSdkTokenHolderPage","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","fromWsRankingTokenListToSubscribed","updates","fromWsTokenHolderToSubscribed","fromWsTokenSupplyToSubscribed","fromWsTokenBondingCurveToSubscribed","update","fromWsTokenMarketDataFromHolder","fromWsTokenLiquidityToSubscribed","WsMetricType","fromWsTokenMaxLiquidityToSubscribed","fromWsTokenTotalLiquidityToSubscribed","fromWsTradeActivity","fromWsActivity","Client","_Client","options","ChainStreamClient","addresses","security","stats","holders","HolderSortBy","marketData","tokenPage","route","latestBlock","txHash","timeout","success","chainParam","netWorth","pnl","detailsPage","PnlResolution","SdkPositionState","PnlSortBy","tokenAddresses","_chain","_address","_options","_creator","callback","chainDTO","uniqueAddresses","subs","data","stream","s","rankingSub","WsChannelType","d","WsRankingType","bondingSub","base","qs","raw","decimals","divisor","whole","fracStr","amount","nativeAddr","nativePortfolio","p","parseLaunchPlatformFromFilters","target","tradePage","page","ActivitySortBy","channelType","rankingType","filter"],"mappings":"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","file":"index.js","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 DexPool,\n ChainSymbol,\n TokenCreator as SdkTokenCreator,\n WsNewToken,\n WsTokenMetadata,\n WsCandle,\n WsTokenStat,\n WsTradeActivity,\n WsTokenHolder as WsTokenHolderDTO,\n WsTokenSupply,\n WsTokenLiquidity,\n WsTokenMaxLiquidity,\n WsTokenTotalLiquidity,\n WsTokenBondingCurve,\n WsRankingTokenList,\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 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 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 tvl: input.tvlInSol ?? undefined,\n tvlInUsd: input.tvlInUsd ?? undefined,\n };\n}\n\nexport function fromTokenMarketDataDTO(\n input: SdkTokenMarketData,\n): TokenMarketData {\n return {\n totalSupply: input.totalSupply ?? undefined,\n marketCap: input.marketCapInSol ?? undefined,\n marketCapInUsd: input.marketCapInUsd ?? undefined,\n price: input.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\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) => ({\n address: holder.walletAddress,\n amount: holder.amount,\n amountInUsd: holder.amountInUsd,\n ratio: holder.percentage,\n tags: toTagArray<WalletTag>(holder.tags),\n lastActiveAt: toDateFromMs(holder.lastActiveAt),\n startHoldingAt: toDateFromMs(holder.startHoldingAt),\n })),\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) => ({\n address: holder.walletAddress,\n amount: holder.amount,\n amountInUsd: holder.amountInUsd,\n ratio: holder.percentage,\n tags: toTagArray<WalletTag>(holder.tags),\n lastActiveAt: toDateFromMs(holder.lastActiveAt),\n startHoldingAt: toDateFromMs(holder.startHoldingAt),\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 },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n },\n status: \"success\",\n time: new Date(input.timestamp),\n };\n}\n\nexport function fromWsActivity(chain: Chain, input: WsTradeActivity): Activity {\n const type = input.kind.toLowerCase().replace(/ /g, \"_\") as ActivityType;\n const isBuy = type === \"buy\";\n return {\n chain,\n walletAddress: isBuy ? input.buyWalletAddress : input.sellWalletAddress,\n txHash: input.txHash,\n type,\n from: {\n address: input.sellTokenAddress,\n symbol: input.sellTokenSymbol,\n name: input.sellTokenName,\n amount: input.sellAmount,\n amountInUsd: input.sellAmountInUsd,\n },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n },\n status: \"success\",\n time: new Date(input.timestamp),\n };\n}\n","import {\n ChainStreamClient,\n ChainSymbol,\n ActivitySortBy,\n HolderSortBy,\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} from \"@chainstream-io/sdk\";\nimport {\n Activity,\n ActivityType,\n BlockchainLatestBlock,\n Chain,\n CursorList,\n GetActivitiesOptions,\n GetTokenCandlesOptions,\n GetTokenHoldersOptions,\n GetTokenListOptions,\n GetTokensByCreatorOptions,\n GetTradesOptions,\n GetWalletLimitOrdersOptions,\n GetWalletPortfolioPnlsOptions,\n IClient,\n ISubscribeClient,\n ISubscription,\n LatestBlockParams,\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 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 toSendTxInput,\n toSwapRouteInput,\n fromWsCandle,\n fromWsTokenDataSubscribed,\n fromWsTokenSupplyToSubscribed,\n fromWsTokenHolderToSubscribed,\n fromWsTokenLiquidityToSubscribed,\n fromWsTokenMaxLiquidityToSubscribed,\n fromWsTokenTotalLiquidityToSubscribed,\n fromWsTokenBondingCurveToSubscribed,\n fromWsRankingTokenListToSubscribed,\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 if (options?.sortBy !== \"realizedPnl\") {\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 : undefined,\n },\n );\n return fromSdkTokenHolderPage(holders);\n }\n\n // Compatibility fallback: SDK 2.1.12 still does not expose the\n // `realizedPnl` holder sort used by token top traders.\n const holders = await phase3GetTokenHolders(\n this._phase3,\n toChainDTO(chain),\n address,\n {\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n sortBy: options?.sortBy,\n },\n );\n return fromTokenHolderPage(holders);\n }\n\n async getTokenMarketData(\n chain: Chain,\n address: string,\n ): Promise<TokenMarketData> {\n const marketData = await this._client.token.getMarketData(\n toChainDTO(chain),\n address,\n );\n return fromTokenMarketDataDTO(marketData);\n }\n\n async getNewTokens(\n chain: Chain,\n options?: GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getNewTokens(\n toChainDTO(chain),\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async getFinalStretchTokens(\n chain: Chain,\n options?: 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 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"]}