@liberfi.io/client 0.3.17 → 0.3.18
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 +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {ChainStreamClient,WsChannelType,ChainSymbol,Resolution,SearchSortBy,SwapRouteInputSwapMode,WsMetricType,TokenField}from'@chainstream-io/sdk';import {Chain,SwapMode}from'@liberfi.io/types';import {SafeBigNumber,SOLANA_TOKENS}from'@liberfi.io/utils';var w=class extends Error{code="NotImplemented";constructor(s,t){super(t?`${s} is not yet implemented by the backend: ${t}`:`${s} is not yet implemented by the backend`),this.name="NotImplementedError";}};function Ke(e){return e instanceof Error&&e.code==="NotImplemented"}var Re="https://api.chainstream.io";async function pe(e){return typeof e=="string"?e:Promise.resolve(e.getToken())}function He(e,s,t){if(t!=null){if(t instanceof Date){e.set(s,String(t.getTime()));return}e.set(s,String(t));}}async function x(e,s,t){let r=new URL(s,e.baseUrl),n=new URLSearchParams;for(let[k,u]of Object.entries(t))He(n,k,u);let i=n.toString();i&&(r.search=i);let a=await pe(e.accessToken),c=await fetch(r.toString(),{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${a}`}});if(!c.ok){let k=await c.text().catch(()=>"");throw new Error(`[phase3Http] ${c.status} ${c.statusText} ${r.pathname}: ${k}`)}return await c.json()}function j(e,s){return {baseUrl:s??Re,accessToken:e}}function Q(e,s,t,r){return x(e,`/v2/token/${encodeURIComponent(s)}/${encodeURIComponent(t)}/holders`,r)}function K(e,s,t){return x(e,`/v2/trade/${encodeURIComponent(s)}/activities`,t)}function J(e,s,t,r){return x(e,`/v2/wallet/${encodeURIComponent(s)}/${encodeURIComponent(t)}/net-worth/tokens`,r)}function Y(e,s,t,r){return x(e,`/v2/wallet/${encodeURIComponent(s)}/${encodeURIComponent(t)}/pnl-details`,r)}function o(e){return e??void 0}function d(e){switch(e){case Chain.ETHEREUM:return ChainSymbol.eth;case Chain.BINANCE:return ChainSymbol.bsc;case Chain.SOLANA:return ChainSymbol.sol}throw new Error(`Unsupported chain: ${e}`)}function N(e){switch(e){case "1s":return Resolution["1s"];case "15s":return Resolution["15s"];case "30s":return Resolution["30s"];case "1m":return Resolution["1m"];case "5m":return Resolution["5m"];case "15m":return Resolution["15m"];case "30m":case "1h":return Resolution["1h"];case "4h":return Resolution["4h"];case "12h":return Resolution["12h"];case "24h":return Resolution["1d"]}}function We(e){return e}function se(e){switch(e){case "marketCap":return SearchSortBy.marketCapInUsd;case "tvl":return SearchSortBy.liquidityInUsd;case "price":return SearchSortBy.priceInUsd;case "holders":return SearchSortBy.holderCount;case "volumes24h":return SearchSortBy.h24VolumeInUsd;case "trades24h":return SearchSortBy.h24Transactions;case "createdAt":return SearchSortBy.tokenCreatedAt}throw new Error(`Unsupported search field: ${e}`)}function O(e){switch(e){case "price":return TokenField.marketDatapriceInUsd;case "priceChange1m":return TokenField.statspriceChangeRatioInUsd1m;case "priceChange5m":return TokenField.statspriceChangeRatioInUsd5m;case "priceChange1h":return TokenField.statspriceChangeRatioInUsd1h;case "priceChange4h":return TokenField.statspriceChangeRatioInUsd4h;case "priceChange24h":return TokenField.statspriceChangeRatioInUsd24h;case "marketCap":return TokenField.marketDatamarketCapInUsd;case "tvl":return TokenField.marketDatamaxPoolTvlInUsd;case "top10Holdings":return TokenField.marketDatatop10TotalHoldings;case "top10Ratio":return TokenField.marketDatatop10HoldingsRatio;case "top100Holdings":return TokenField.marketDatatop100TotalHoldings;case "top100Ratio":return TokenField.marketDatatop100HoldingsRatio;case "holders":return TokenField.marketDataholders;case "creatorsHoldings":return TokenField.marketDatacreatorHoldings;case "creatorsRatio":return TokenField.marketDatacreatorHoldingsRatio;case "buys1m":return TokenField.statsbuys1m;case "buys5m":return TokenField.statsbuys5m;case "buys15m":return TokenField.statsbuys15m;case "buys30m":return TokenField.statsbuys30m;case "buys1h":return TokenField.statsbuys1h;case "buys4h":return TokenField.statsbuys4h;case "buys24h":return TokenField.statsbuys24h;case "sells1m":return TokenField.statssells1m;case "sells5m":return TokenField.statssells5m;case "sells15m":return TokenField.statssells15m;case "sells30m":return TokenField.statssells30m;case "sells1h":return TokenField.statssells1h;case "sells4h":return TokenField.statssells4h;case "sells24h":return TokenField.statssells24h;case "trades1m":return TokenField.statstrades1m;case "trades5m":return TokenField.statstrades5m;case "trades1h":return TokenField.statstrades1h;case "trades4h":return TokenField.statstrades4h;case "trades24h":return TokenField.statstrades24h;case "traders1m":return TokenField.statstraders1m;case "traders5m":return TokenField.statstraders5m;case "traders1h":return TokenField.statstraders1h;case "traders4h":return TokenField.statstraders4h;case "traders24h":return TokenField.statstraders24h;case "volumes1m":return TokenField.statsvolumesInUsd1m;case "volumes5m":return TokenField.statsvolumesInUsd5m;case "volumes1h":return TokenField.statsvolumesInUsd1h;case "volumes4h":return TokenField.statsvolumesInUsd4h;case "volumes24h":return TokenField.statsvolumesInUsd24h;case "createdAt":return TokenField.tokenCreatedAt}throw new Error(`Unsupported sortBy: ${e}`)}function te(e){return e.filter(s=>["gt","gte","lt","lte","between"].indexOf(s.operator)>=0).map(s=>{let t={field:O(s.field)};return ["gt","gte","between"].indexOf(s.operator)>=0&&(t.min=typeof s.value=="number"?new SafeBigNumber(s.value).toString():s.value),["lt","lte","between"].indexOf(s.operator)>=0&&(t.max=typeof s.value=="number"?new SafeBigNumber(s.value).toString():s.value),t})}function p(e){switch(e){case ChainSymbol.eth:return Chain.ETHEREUM;case ChainSymbol.bsc:return Chain.BINANCE;case ChainSymbol.sol:case "solana":return Chain.SOLANA}throw new Error(`Unsupported chain: ${e}`)}function De(e){return {address:e.address??void 0,share:e.share??void 0,isVerified:e.isVerified??void 0}}function g(e){return {chain:p(e.chain),name:e.name,symbol:e.symbol,address:e.address,decimals:e.decimals,image:e.imageUrl??void 0,description:e.description??void 0,creators:e.tokenCreators?.map(De),launchedFrom:{programAddress:e.extra?.launchFromProgramAddress??void 0,protocolFamily:e.extra?.launchFromProtocolFamily??void 0},migrateProgress:e.marketData?.completionRatio?new SafeBigNumber(e.marketData.completionRatio).shiftedBy(2).toString():void 0,migratedTo:{programAddress:e.extra?.migratedToProgramAddress??void 0,protocolFamily:e.extra?.migratedToProtocolFamily??void 0,poolAddress:e.extra?.migratedToPoolAddress??void 0,migratedAt:e.extra?.migratedAt?new Date(e.extra.migratedAt):void 0},socialMedias:e.socialMedias?Object.fromEntries(Object.entries(e.socialMedias).filter(([,s])=>s!=null).map(([s,t])=>[s,t])):void 0,stats:e.stats?B(e.stats):void 0,marketData:e.marketData?_(e.marketData):void 0,createdAt:e.tokenCreatedAt?new Date(e.tokenCreatedAt):void 0}}function B(e){return {"1m":y(e,"1m"),"5m":y(e,"5m"),"15m":y(e,"15m"),"30m":y(e,"30m"),"1h":y(e,"1h"),"4h":y(e,"4h"),"24h":y(e,"24h")}}function A(e){return e===void 0?void 0:parseInt(e)}function y(e,s){let t=e.periods?.[s];return t?{buys:A(t.buys),sells:A(t.sells),trades:A(t.trades),buyers:A(t.buyers),sellers:A(t.sellers),traders:A(t.traders),buyVolumes:t.buyVolume,sellVolumes:t.sellVolume,volumes:t.totalVolumeInNative,buyVolumesInUsd:t.buyVolumeInUsd,sellVolumesInUsd:t.sellVolumeInUsd,volumesInUsd:t.totalVolumeInUsd,openPriceInUsd:t.openInUsd,closePriceInUsd:t.closeInUsd,highPriceInUsd:t.highInUsd,lowPriceInUsd:t.lowInUsd,priceInUsd:t.closeInUsd,priceChange:t.priceChangeRatioInUsd}:{}}function ot(e){return {poolAddress:e.poolAddress,programAddress:e.programAddress??void 0,protocolFamily:e.protocolFamily??void 0,tvl:e.tvlInSol??void 0,tvlInUsd:e.tvlInUsd??void 0}}function _(e){return {totalSupply:e.totalSupply??void 0,marketCap:e.marketCapInSol??void 0,marketCapInUsd:e.marketCapInUsd??void 0,price:e.priceInSol??void 0,priceInUsd:e.priceInUsd??void 0,tvl:e.totalTvlInSol??void 0,tvlInUsd:e.totalTvlInUsd??void 0,holders:e.holders?parseInt(e.holders):void 0,top10Holdings:e.top10TotalHoldings??void 0,top10HoldingsRatio:e.top10HoldingsRatio??void 0,top50Holdings:e.top50TotalHoldings??void 0,top50HoldingsRatio:e.top50HoldingsRatio??void 0,top100Holdings:e.top100TotalHoldings??void 0,top100HoldingsRatio:e.top100HoldingsRatio??void 0,bluechipHolders:e.bluechipTotalHolders?parseInt(e.bluechipTotalHolders):void 0,bluechipHoldings:e.bluechipTotalHoldings??void 0,bluechipHoldingsRatio:e.bluechipHoldingsRatio??void 0,kolHolders:e.kolTotalHolders?parseInt(e.kolTotalHolders):void 0,kolHoldings:e.kolTotalHoldings??void 0,kolHoldingsRatio:e.kolHoldingsRatio??void 0,sniperHolders:e.sniperTotalHolders?parseInt(e.sniperTotalHolders):void 0,sniperHoldings:e.sniperTotalHoldings??void 0,sniperHoldingsRatio:e.sniperHoldingsRatio??void 0,proHolders:e.proTotalHolders?parseInt(e.proTotalHolders):void 0,proHoldings:e.proTotalHoldings??void 0,proHoldingsRatio:e.proHoldingsRatio??void 0,insiderHolders:e.insiderTotalHolders?parseInt(e.insiderTotalHolders):void 0,insiderHoldings:e.insiderTotalHoldings??void 0,insiderHoldingsRatio:e.insiderHoldingsRatio??void 0,sandwichHolders:e.sandwishTotalHolders?parseInt(e.sandwishTotalHolders):void 0,sandwichHoldings:e.sandwishTotalHoldings??void 0,sandwichHoldingsRatio:e.sandwishHoldingsRatio??void 0,freshHolders:e.freshTotalHolders?parseInt(e.freshTotalHolders):void 0,freshHoldings:e.freshTotalHoldings??void 0,freshHoldingsRatio:e.freshHoldingsRatio??void 0,bundleHolders:e.bundleTotalHolders?parseInt(e.bundleTotalHolders):void 0,bundleHoldings:e.bundleTotalHoldings??void 0,bundleHoldingsRatio:e.bundleHoldingsRatio??void 0,devHolders:e.devTotalHolders?parseInt(e.devTotalHolders):void 0,devHoldings:e.devTotalHoldings??void 0,devHoldingsRatio:e.devHoldingsRatio??void 0}}function re(e,s){return {open:e.open,close:e.close,high:e.high,low:e.low,volume:e.volume,resolution:s,timestamp:new Date(e.timestamp)}}function Ne(e){return e==="1d"?"24h":e}function ne(e){return {hasTransferFee:e.hasTransferFee,isTransferFeeUpgradable:e.isTransferFeeUpgradable,isTransferable:e.isTransferable,isFreezable:e.isFreezable,isClosable:e.isClosable}}var Oe=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]),Be="0x0000000000000000000000000000000000000000",_e="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";function Le(e){return e===SOLANA_TOKENS.native.address?SOLANA_TOKENS.wrapped.address:e}function Fe(e){return e.toLowerCase()===Be.toLowerCase()?_e:e}function Ee(e){return e.dex==="jupiter"?"jupiter":e.dex==="kyberswap"?"kyberswap":Oe.has(e.chain)?"jupiter":"kyberswap"}function D(e,s){return e==="jupiter"?Le(s):e==="kyberswap"?Fe(s):s}function at(e,s){return D(e,s)}function oe(e){let s=Ee(e),t=D(s,e.input),r=D(s,e.output);return {dex:s,userAddress:e.userAddress,amount:e.amount,swapMode:e.mode===SwapMode.EXACT_IN?SwapRouteInputSwapMode.ExactIn:SwapRouteInputSwapMode.ExactOut,slippage:e.slippage??1,inputMint:t,outputMint:r,priorityFee:e.priorityFee,...e.tipFee&&{tipFee:e.tipFee},...e.isAntiMev!=null&&{isAntiMev:e.isAntiMev},...e.permit&&{permit:e.permit},...e.deadline!=null&&{deadline:e.deadline}}}function ae(e){return {signedTx:e.serializedTx}}function R(e){return e==null?void 0:new Date(e)}function L(e){if(!(!e||e.length===0))return e}function ie(e){return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(s=>({address:s.walletAddress,amount:s.amount,amountInUsd:s.amountInUsd,ratio:s.percentage,tags:L(s.tags),lastActiveAt:R(s.lastActiveAt),startHoldingAt:R(s.startHoldingAt)}))}}function le(e){let s=e;return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(g),extra:o(s.countsByProtocols)}}function de(e){return {serializedTx:e.serializedTx,recentBlockhash:o(e.recentBlockhash),lastValidBlockHeight:o(e.lastValidBlockHeight),plans:[],extra:e.routeInfo}}function ce(e){return {blockhash:e.blockhash,lastValidBlockHeight:e.lastValidBlockHeight}}function ue(e){return {txHash:e.signature,extra:{jobId:e.jobId,elapsedTime:e.elapsedTime}}}function me(e,s){let t=(s.data??[]).map(r=>({chain:p(r.chain),address:r.tokenAddress,name:r.name,symbol:r.symbol,image:o(r.logoUri),priceInUsd:r.priceInUsd,priceInNative:r.priceInNative,amount:r.amount,amountInUsd:r.valueInUsd,amountInNative:r.valueInNative,decimals:r.decimals}));return {chain:t[0]?.chain??e,address:s.walletAddress,balanceInUsd:s.totalValueInUsd,balanceInNative:s.totalValueInNative,startCursor:o(s.startCursor),endCursor:o(s.endCursor),hasPrev:s.hasPrev,hasNext:s.hasNext,portfolios:t}}function Te(e,s,t){return {chain:e,address:s,tokens:t.tokens?Number(t.tokens):void 0,buys:t.buys?Number(t.buys):void 0,sells:t.sells?Number(t.sells):void 0,totalTrades:t.totalTrades?Number(t.totalTrades):void 0,wins:t.wins?Number(t.wins):void 0,losses:t.losses?Number(t.losses):void 0,winRate:o(t.winRate),buyAmountInUsd:o(t.buyAmountInUsd),sellAmountInUsd:o(t.sellAmountInUsd),totalCostInUsd:o(t.totalCostInUsd),realizedProfitInUsd:o(t.realizedProfitInUsd),realizedProfitRatio:o(t.realizedProfitRatio),unrealizedProfitInUsd:o(t.unrealizedProfitInUsd),unrealizedProfitRatio:o(t.unrealizedProfitRatio),totalProfitInUsd:o(t.totalProfitInUsd),totalProfitRatio:o(t.totalProfitRatio),avgProfitPerTradeInUsd:o(t.avgProfitPerTradeInUsd)}}function Me(e,s){return {chain:e,address:s.tokenAddress,name:s.name??"",symbol:s.symbol??"",image:o(s.logoUri),amount:s.balance,amountInUsd:s.currentValue,priceInUsd:s.priceInUsd,decimals:s.decimals??0,totalTrades:s.totalTrades!=null?Number(s.totalTrades):void 0,buys:s.buys!=null?Number(s.buys):void 0,buyVolumes:s.buyAmount,buyVolumesInUsd:s.buyAmountInUsd,buyAvgPriceInUsd:s.avgBuyPriceInUsd,sells:s.sells!=null?Number(s.sells):void 0,sellVolumes:s.sellAmount,sellVolumesInUsd:s.sellAmountInUsd,sellAvgPriceInUsd:s.avgSellPriceInUsd,realizedProfitInUsd:s.realizedProfitInUsd,realizedProfitRatio:s.realizedProfitRatio,unrealizedProfitInUsd:s.unrealizedProfitInUsd,unrealizedProfitRatio:s.unrealizedProfitRatio,totalProfitInUsd:s.totalProfitInUsd,totalProfitRatio:s.totalProfitRatio,isClosed:s.isClosed,firstBuyAt:R(s.firstBuyAt),lastSellAt:R(s.lastSellAt)}}function ge(e,s,t){return {chain:e,address:s,tokens:t.summary.tokens!=null?Number(t.summary.tokens):void 0,buys:t.summary.buys!=null?Number(t.summary.buys):void 0,sells:t.summary.sells!=null?Number(t.summary.sells):void 0,totalTrades:t.summary.totalTrades!=null?Number(t.summary.totalTrades):void 0,wins:t.summary.wins!=null?Number(t.summary.wins):void 0,losses:t.summary.losses!=null?Number(t.summary.losses):void 0,winRate:o(t.summary.winRate),buyAmountInUsd:o(t.summary.buyAmountInUsd),sellAmountInUsd:o(t.summary.sellAmountInUsd),totalCostInUsd:t.summary.totalCostInUsd,realizedProfitInUsd:o(t.summary.realizedProfitInUsd),unrealizedProfitInUsd:o(t.summary.unrealizedProfitInUsd),totalProfitInUsd:o(t.summary.totalProfitInUsd),totalProfitRatio:o(t.summary.totalProfitRatio),avgProfitPerTradeInUsd:o(t.summary.avgProfitPerTradeInUsd),startCursor:o(t.startCursor),endCursor:o(t.endCursor),hasPrev:t.hasPrev,hasNext:t.hasNext,portfolios:t.data.map(r=>Me(e,r))}}function ke(e,s){return (s.data??[]).map(t=>({chain:p(t.chain),address:t.tokenAddress,name:t.name,symbol:t.symbol,image:o(t.logoUri),priceInUsd:t.priceInUsd,priceInNative:t.priceInNative,amount:t.amount,amountInUsd:t.valueInUsd,amountInNative:t.valueInNative,decimals:t.decimals,isActive:t.isActive,avgCostUsd:o(t.avgCostUsd),lastActiveAt:R(t.lastActiveAt),walletTokenTags:L(t.walletTokenTags)}))}function be(e,s){return s.data.map(t=>({chain:e,address:t.tokenAddress,name:t.name??"",symbol:t.symbol??"",image:o(t.logoUri),amount:t.balance,amountInUsd:t.currentValue,priceInUsd:t.priceInUsd,decimals:t.decimals??0,totalTrades:Number(t.totalTrades),buys:Number(t.buys),buyVolumes:t.buyAmount,buyVolumesInUsd:t.buyAmountInUsd,buyAvgPriceInUsd:t.avgBuyPriceInUsd,sells:Number(t.sells),sellVolumes:t.sellAmount,sellVolumesInUsd:t.sellAmountInUsd,sellAvgPriceInUsd:t.avgSellPriceInUsd,realizedProfitInUsd:t.realizedProfitInUsd,realizedProfitRatio:t.realizedProfitRatio,unrealizedProfitInUsd:t.unrealizedProfitInUsd,unrealizedProfitRatio:t.unrealizedProfitRatio,totalProfitInUsd:t.totalProfitInUsd,totalProfitRatio:t.totalProfitRatio}))}function fe(e){return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(ze)}}function ze(e){let s=e.type.toLowerCase()==="buy";return {chain:p(e.chain),walletAddress:e.accountOwnerAddress,txHash:e.transactionSignature,type:s?"buy":"sell",from:{address:s?e.sideTokenAddress:e.tokenAddress,symbol:s?e.sideTokenSymbol:e.tokenSymbol,name:s?e.sideTokenName:e.tokenName,image:o(s?e.sideTokenImageUrl:e.tokenImageUrl),amount:s?e.sideTokenAmount:e.tokenAmount,amountInUsd:s?e.sideTokenAmountInUsd:e.tokenAmountInUsd,priceInUsd:s?e.sideTokenPriceInUsd:e.tokenPriceInUsd},to:{address:s?e.tokenAddress:e.sideTokenAddress,symbol:s?e.tokenSymbol:e.sideTokenSymbol,name:s?e.tokenName:e.sideTokenName,image:o(s?e.tokenImageUrl:e.sideTokenImageUrl),amount:s?e.tokenAmount:e.sideTokenAmount,amountInUsd:s?e.tokenAmountInUsd:e.sideTokenAmountInUsd,priceInUsd:s?e.tokenPriceInUsd:e.sideTokenPriceInUsd},dex:{programAddress:o(e.dexProgramAddress),protocolFamily:o(e.dexProtocolFamily),image:o(e.dexImage)},poolAddress:o(e.poolAddress),status:e.status??"success",time:new Date(e.blockTimestamp*1e3)}}function he(e){return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(Ve)}}function Ve(e){let s=e.type.toLowerCase().replace(/ /g,"_"),t=s==="buy",r=e.blockTimestamp<1e12?e.blockTimestamp*1e3:e.blockTimestamp;return {chain:p(e.chain),walletAddress:e.accountOwnerAddress,txHash:e.transactionSignature,type:s,from:{address:t?e.sideTokenAddress:e.tokenAddress,symbol:t?e.sideTokenSymbol:e.tokenSymbol,name:t?e.sideTokenName:e.tokenName,image:o(t?e.sideTokenImageUrl:e.tokenImageUrl),amount:t?e.sideTokenAmount:e.tokenAmount,amountInUsd:t?e.sideTokenAmountInUsd:e.tokenAmountInUsd,priceInUsd:t?e.sideTokenPriceInUsd:e.tokenPriceInUsd},to:{address:t?e.tokenAddress:e.sideTokenAddress,symbol:t?e.tokenSymbol:e.sideTokenSymbol,name:t?e.tokenName:e.sideTokenName,image:o(t?e.tokenImageUrl:e.sideTokenImageUrl),amount:t?e.tokenAmount:e.sideTokenAmount,amountInUsd:t?e.tokenAmountInUsd:e.sideTokenAmountInUsd,priceInUsd:t?e.tokenPriceInUsd:e.sideTokenPriceInUsd},dex:{programAddress:o(e.dexProgramAddress),protocolFamily:o(e.dexProtocolFamily),image:o(e.dexImage)},poolAddress:o(e.poolAddress),status:e.status??"success",time:new Date(r),gasFee:e.gasFee!=null?String(e.gasFee):void 0,traderTags:L(e.traderTags)}}function ye(e,s){return {chain:e,address:s.tokenAddress,name:s.name,symbol:s.symbol,decimals:s.decimals,createdAt:s.createdAtMs?new Date(s.createdAtMs):void 0,launchedFrom:s.launchFrom?{programAddress:s.launchFrom.programAddress,protocolFamily:s.launchFrom.protocolFamily}:void 0}}function Pe(e,s){return {chain:e,address:s.tokenAddress,name:s.name,symbol:s.symbol,decimals:s.decimals,image:s.imageUrl,description:s.description,socialMedias:s.socialMedia?{...s.socialMedia}:void 0,createdAt:s.createdAtMs?new Date(s.createdAtMs):void 0,launchedFrom:s.launchFrom?{programAddress:s.launchFrom.programAddress,protocolFamily:s.launchFrom.protocolFamily}:void 0,migratedTo:s.migratedTo?{programAddress:s.migratedTo.programAddress,protocolFamily:s.migratedTo.protocolFamily}:void 0}}function Ae(e){return {open:e.open,close:e.close,high:e.high,low:e.low,volume:e.volume,resolution:Ne(e.resolution),timestamp:new Date(e.time)}}function qe(e){let s=["1m","5m","15m","30m","1h","4h","24h"],t=e,r={};for(let n of s){let i=t[`buys${n}`],a=t[`sells${n}`],c=t[`buyers${n}`],k=t[`sellers${n}`],u=t[`buyVolumeInUsd${n}`],P=t[`sellVolumeInUsd${n}`],U=t[`trades${n}`],C=t[`price${n}`],f=t[`openInUsd${n}`],v=t[`closeInUsd${n}`];if(!(i!==void 0||a!==void 0||U!==void 0||C!==void 0))continue;let W=U??(i!==void 0&&a!==void 0?i+a:void 0),Ce=c!==void 0&&k!==void 0?c+k:void 0,ve=u!==void 0&&P!==void 0?new SafeBigNumber(u).plus(P).toString():void 0,we=f&&v&&new SafeBigNumber(f).gt(0)?new SafeBigNumber(v).minus(f).div(f).toString():void 0;r[n]={buys:i,sells:a,trades:W,buyers:c,sellers:k,traders:Ce,buyVolumesInUsd:u,sellVolumesInUsd:P,volumesInUsd:ve,openPriceInUsd:f,closePriceInUsd:v,priceInUsd:C??v,priceChange:we};}return r}function Ge(e){return {priceInUsd:e.price}}function F(e,s){return {chain:e,address:s.address,stats:qe(s),marketData:Ge(s)}}function E(e,s,t){return {chain:e,address:s,marketData:{totalSupply:t.supply,marketCapInUsd:t.marketCapInUsd}}}function M(e,s,t){return {chain:e,address:s,marketData:$e(t)}}function z(e,s,t){return t.metricType===WsMetricType.LIQUIDITY_IN_USD?{chain:e,address:s,marketData:{tvlInUsd:t.value}}:t.metricType===WsMetricType.MIGRATED_RATIO?{chain:e,address:s,migrateProgress:new SafeBigNumber(t.value).shiftedBy(2).toString()}:{chain:e,address:s}}function V(e,s){return {chain:e,address:s.tokenAddress??"",migrateProgress:s.progressRatio?new SafeBigNumber(s.progressRatio).shiftedBy(2).toString():void 0}}function Ie(e,s,t){return {chain:e,address:s,liquidities:[{poolAddress:t.poolAddress,tvlInUsd:t.liquidityInUsd,tvl:t.liquidityInNative}]}}function Se(e,s,t){return {chain:e,address:s,marketData:{tvlInUsd:t.liquidityInUsd,tvl:t.liquidityInNative}}}function $e(e){return {holders:e.holders,top10Holdings:e.top10HoldersAmount,top10HoldingsRatio:e.top10HoldersRatio,top50Holdings:e.top50HoldersAmount,top50HoldingsRatio:e.top50HoldersRatio,top100Holdings:e.top100HoldersAmount,top100HoldingsRatio:e.top100HoldersRatio,devHolders:e.balanceTagDevHolders===void 0?void 0:e.balanceTagDevHolders,devHoldings:e.balanceTagDevAmount,devHoldingsRatio:e.balanceTagDevRatio,sniperHolders:e.balanceTagSniperHolders===void 0?void 0:e.balanceTagSniperHolders,sniperHoldings:e.balanceTagSniperAmount,sniperHoldingsRatio:e.balanceTagSniperRatio,freshHolders:e.balanceTagFreshHolders===void 0?void 0:e.balanceTagFreshHolders,freshHoldings:e.balanceTagFreshAmount,freshHoldingsRatio:e.balanceTagFreshRatio,bundleHolders:e.balanceTagBundleHolders===void 0?void 0:e.balanceTagBundleHolders,bundleHoldings:e.balanceTagBundleAmount,bundleHoldingsRatio:e.balanceTagBundleRatio,sandwichHolders:e.balanceTagSandwichHolders===void 0?void 0:e.balanceTagSandwichHolders,sandwichHoldings:e.balanceTagSandwichAmount,sandwichHoldingsRatio:e.balanceTagSandwichRatio}}function q(e,s){let t=s.kind.toLowerCase()==="buy";return {chain:e,walletAddress:t?s.buyWalletAddress:s.sellWalletAddress,txHash:s.txHash,type:t?"buy":"sell",from:{address:s.sellTokenAddress,symbol:s.sellTokenSymbol,name:s.sellTokenName,amount:s.sellAmount,amountInUsd:s.sellAmountInUsd},to:{address:s.buyTokenAddress,symbol:s.buyTokenSymbol,name:s.buyTokenName,amount:s.buyAmount,amountInUsd:s.buyAmountInUsd},status:"success",time:new Date(s.timestamp)}}function G(e,s){let t=s.kind.toLowerCase().replace(/ /g,"_");return {chain:e,walletAddress:t==="buy"?s.buyWalletAddress:s.sellWalletAddress,txHash:s.txHash,type:t,from:{address:s.sellTokenAddress,symbol:s.sellTokenSymbol,name:s.sellTokenName,amount:s.sellAmount,amountInUsd:s.sellAmountInUsd},to:{address:s.buyTokenAddress,symbol:s.buyTokenSymbol,name:s.buyTokenName,amount:s.buyAmount,amountInUsd:s.buyAmountInUsd},status:"success",time:new Date(s.timestamp)}}var Ue=class e{constructor(s,t){this.accessToken=s;this.options=t;this._client=new ChainStreamClient(this.accessToken,this.options),this._phase3=j(this.accessToken,this.options?.serverUrl);}_client;_phase3;async getToken(s,t){let r=await this._client.token.getToken(d(s),t);return g(r)}async getTokens(s,t){return (await this._client.token.getTokens(d(s),{tokenAddresses:t.join(",")})).map(g)}async getTokenCandles(s,t,r,n){return (await this._client.token.getCandles(d(s),t,{resolution:N(r),from:n?.after?.getTime(),to:n?.before?.getTime(),limit:n?.limit})).map(a=>re(a,r))}async getTokenSecurity(s,t){let r=await this._client.token.getSecurity(d(s),t);return ne(r)}async getTokenStats(s,t){let r=await this._client.token.getStats(d(s),t);return B(r)}async getTokenHolders(s,t,r){let n=await Q(this._phase3,d(s),t,{cursor:r?.cursor,limit:r?.limit,direction:r?.direction,sortBy:r?.sortBy});return ie(n)}async getTokenMarketData(s,t){let r=await this._client.token.getMarketData(d(s),t);return _(r)}async getNewTokens(s,t){return (await this._client.ranking.getNewTokens(d(s),this._buildRankingParams(t))).map(g)}async getFinalStretchTokens(s,t){return (await this._client.ranking.getFinalStretchTokens(d(s),this._buildRankingParams(t))).map(g)}async getMigratedTokens(s,t){return (await this._client.ranking.getMigratedTokens(d(s),this._buildRankingParams(t))).map(g)}async getTrendingTokens(s,t,r){return (await this._client.ranking.getHotTokens(d(s),t,this._buildRankingParams(r))).map(g)}async getStockTokens(s,t){return (await this._client.ranking.getStocksTokens(d(s),this._buildRankingParams(t))).map(g)}async searchTokens(s){let t=await this._client.token.search({chains:s?.chains?.map(d),q:s?.keyword,limit:s?.limit,cursor:s?.cursor,sortBy:s?.sortBy?se(s.sortBy):void 0,sort:s?.sortDirection});return le(t)}async swapRoute(s){let t=await this._client.dex.route(d(s.chain),oe(s));return de(t)}async getLatestBlock(s){let t=await this._client.blockchain.getLatestBlock(d(s.chain));return ce(t)}async sendTx(s){let t=await this._client.transaction.send(d(s.chain),ae(s));return ue(t)}async checkTxSuccess(s,t,r){let{success:n}=await this._client.waitForJob(t,r);return n}async getWalletPortfolios(s,t,r){let n=e._CHAIN_TO_BALANCE_PARAM[s];if(n&&this.options?.nativeBalanceApiUrl)return this._getWalletPortfoliosFromBalanceApi(s,n,t);let i=await this._client.wallet.getNetWorth(d(s),t,{cursor:r?.cursor,limit:r?.limit??100});return me(s,i)}async getWalletPnl(s,t,r){let n=await this._client.wallet.getPnl(d(s),t,r?{resolution:r}:void 0);return Te(s,t,n)}async getWalletPortfolioPnls(s,t,r){let n=await Y(this._phase3,d(s),t,{resolution:r?.resolution??"30d",positionState:r?.positionState,sortBy:r?.sortBy,cursor:r?.cursor,limit:r?.limit??100,direction:r?.direction});return ge(s,t,n)}async getWalletPortfoliosByTokens(s,t,r){let n=e._CHAIN_TO_BALANCE_PARAM[s];if(n&&this.options?.nativeBalanceApiUrl)return this._getPortfoliosFromBalanceApi(s,n,t,r);let i=await J(this._phase3,d(s),t,{tokenAddresses:r.join(",")});return ke(s,i)}async getWalletPortfolioPnlsByTokens(s,t,r){let n=await this._client.wallet.getPnlByToken(d(s),t,{tokenAddresses:r.join(",")});return be(s,n)}async getWalletTrades(s,t,r){return this._getTrades(s,{walletAddress:t},r)}async getTokenTrades(s,t,r){return this._getTrades(s,{tokenAddress:t},r)}async getWalletActivities(s,t,r){return this._getActivities(s,{walletAddress:t},r)}async getTokenActivities(s,t,r){return this._getActivities(s,{tokenAddress:t},r)}async getPresignedUploadUrl(){return (await this._client.ipfs.presign()).presignUrl}async getWalletLimitOrders(s,t,r){throw new w("Client.getWalletLimitOrders","no limit-orders endpoint on the backend yet")}async getTokensByCreator(s,t,r){throw new w("Client.getTokensByCreator","no creator-index endpoint on the backend yet")}subscribeToken(s,t,r){let n=d(s),i=[this._client.stream.subscribeTokenStats({chain:n,tokenAddress:t,callback:a=>r([F(s,a)])}),this._client.stream.subscribeTokenSupply({chain:n,tokenAddress:t,callback:a=>r([E(s,t,a)])}),this._client.stream.subscribeTokenHolders({chain:n,tokenAddress:t,callback:a=>r([M(s,t,a)])}),this._client.stream.subscribeTokenLiquidity({chain:n,tokenAddress:t,callback:a=>r([z(s,t,a)])}),this._client.stream.subscribeTokenMaxLiquidity({chain:n,tokenAddress:t,callback:a=>r([Ie(s,t,a)])}),this._client.stream.subscribeTokenTotalLiquidity({chain:n,tokenAddress:t,callback:a=>r([Se(s,t,a)])})];return {unsubscribe:()=>i.forEach(a=>a.unsubscribe())}}subscribeTokenCandles(s,t,r,n){return this._client.stream.subscribeTokenCandles({chain:d(s),tokenAddress:t,resolution:N(r),callback:i=>n([Ae(i)])})}subscribeWalletPnl(s,t,r){return this._client.stream.subscribeWalletPnlList({chain:d(s),walletAddress:t,callback:n=>r(n.map(i=>({chain:s,address:i.walletAddress,buys:i.buys,buyAmountInUsd:i.buyAmountInUsd,sells:i.sells,sellAmountInUsd:i.sellAmountInUsd,wins:i.wins,winRate:i.winRatio,totalProfitInUsd:i.pnlInUsd,totalProfitRatio:i.pnlRatio,avgProfitPerTradeInUsd:i.averagePnlInUsd,tokens:i.tokens,resolution:i.resolution})))})}subscribeWalletPortfolios(s,t,r){return this._client.stream.subscribeWalletBalance({chain:d(s),walletAddress:t,callback:n=>r(n.map(i=>({chain:s,walletAddress:i.walletAddress,tokenAddress:i.tokenAddress,priceInUsd:i.tokenPriceInUsd,amount:i.balance})))})}subscribeWalletPortfolioPnls(s,t,r){return this._client.stream.subscribeWalletPnl({chain:d(s),walletAddress:t,callback:n=>r([{chain:s,walletAddress:n.walletAddress,tokenAddress:n.tokenAddress,openTime:n.opentime?new Date(n.opentime):void 0,closeTime:n.closetime?new Date(n.closetime):void 0,buys:n.buyCount,buyVolumes:n.buyAmount,buyVolumesInUsd:n.buyAmountInUsd,buyAvgPriceInUsd:n.averageBuyPriceInUsd,sells:n.sellCount,sellVolumes:n.sellAmount,sellVolumesInUsd:n.sellAmountInUsd,sellAvgPriceInUsd:n.averageSellPriceInUsd,realizedProfitInUsd:n.realizedProfitInUsd,realizedProfitRatio:n.realizedProfitRatio,unrealizedProfitInUsd:n.unrealizedProfitInUsd,unrealizedProfitRatio:n.unrealizedProfitRatio,totalProfitInUsd:n.totalRealizedProfitInUsd,totalProfitRatio:n.totalRealizedProfitRatio}])})}subscribeWalletTrades(s,t,r){return this._client.stream.subscribeWalletTrade({chain:d(s),walletAddress:t,callback:n=>r([q(s,n)])})}subscribeTokenTrades(s,t,r){return this._client.stream.subscribeTokenTrade({chain:d(s),tokenAddress:t,callback:n=>r([q(s,n)])})}subscribeWalletActivities(s,t,r){return this._client.stream.subscribeWalletTrade({chain:d(s),walletAddress:t,callback:n=>r([G(s,n)])})}subscribeTokenActivities(s,t,r){return this._client.stream.subscribeTokenTrade({chain:d(s),tokenAddress:t,callback:n=>r([G(s,n)])})}subscribeNewTokens(s,t){let r=d(s),n=this._subscribeRankingTokens(s,WsChannelType.New,t),i=[this._client.stream.subscribeNewToken({chain:r,callback:a=>t([ye(s,a)])}),this._client.stream.subscribeNewTokensMetadata({chain:r,callback:a=>t(a.map(c=>Pe(s,c)))}),this._client.stream.subscribeRankingTokensBondingCurve({chain:r,callback:a=>t(a.map(c=>V(s,c)))})];return {unsubscribe:()=>{n.unsubscribe(),i.forEach(a=>a.unsubscribe());}}}subscribeTrendingTokens(s,t){return this._subscribeRankingTokens(s,WsChannelType.HOT,t)}subscribeMigratedTokens(s,t){return this._subscribeRankingTokens(s,WsChannelType.MIGRATED,t)}subscribeFinalStretchTokens(s,t){let r=d(s),n=this._subscribeRankingTokens(s,WsChannelType.FINAL_STRETCH,t),i=this._client.stream.subscribeRankingTokensBondingCurve({chain:r,callback:a=>t(a.map(c=>V(s,c)))});return {unsubscribe:()=>{n.unsubscribe(),i.unsubscribe();}}}subscribeStockTokens(s,t){return this._subscribeRankingTokens(s,WsChannelType.US_STOCKS,t)}static _CHAIN_TO_BALANCE_PARAM={[Chain.SOLANA]:"sol",[Chain.ETHEREUM]:"eth",[Chain.BINANCE]:"bnb"};static _NATIVE_TOKEN_ADDRESS={[Chain.SOLANA]:"11111111111111111111111111111111",[Chain.ETHEREUM]:"0x0000000000000000000000000000000000000000",[Chain.BINANCE]:"0x0000000000000000000000000000000000000000"};async _getPortfoliosFromBalanceApi(s,t,r,n){let i=this.options.nativeBalanceApiUrl,a=new URLSearchParams({chain:t,address:r});n?.length&&a.set("tokens",n.join(","));let c=await fetch(`${i}?${a.toString()}`);if(!c.ok)throw new Error(`Balance API returned ${c.status}`);return (await c.json()).balances.map(u=>{let P=BigInt(u.balance),U=u.decimals,C=BigInt(10)**BigInt(U),f=P/C,$=(P%C).toString().padStart(U,"0"),W=`${f}.${$}`.replace(/\.?0+$/,"")||"0";return {chain:s,address:u.address,name:"",symbol:"",priceInUsd:"0",priceInNative:"0",amount:W,amountInUsd:"0",amountInNative:"0",decimals:u.decimals}})}async _getWalletPortfoliosFromBalanceApi(s,t,r){let n=await this._getPortfoliosFromBalanceApi(s,t,r),i=e._NATIVE_TOKEN_ADDRESS[s],a=i?n.find(c=>c.address===i):void 0;return {chain:s,address:r,balanceInUsd:"0",balanceInNative:a?.amount??"0",portfolios:n,hasPrev:false,hasNext:false}}_buildRankingParams(s){return {sortBy:s?.sortBy?O(s.sortBy):void 0,sortDirection:s?.sortDirection?s.sortDirection:void 0,rangeFilters:s?.filters?te(s.filters):void 0,launchpadPlatform:s?.filters?Qe(s.filters):void 0,searchKeywords:s?.keywords,excludeKeywords:s?.excludeKeywords}}async _getTrades(s,t,r){let n=await this._client.trade.getTrades(d(s),{...t,cursor:r?.cursor,limit:r?.limit,direction:r?.direction,beforeTimestamp:r?.before?.getTime(),afterTimestamp:r?.after?.getTime(),beforeBlockHeight:r?.beforeBlockHeight,afterBlockHeight:r?.afterBlockHeight,poolAddress:r?.poolAddress,type:r?.type?r.type.toUpperCase():void 0});return fe(n)}async _getActivities(s,t,r){let n=await K(this._phase3,d(s),{...t,cursor:r?.cursor,limit:r?.limit,direction:r?.direction,beforeTimestamp:r?.before?.getTime(),afterTimestamp:r?.after?.getTime(),beforeBlockHeight:r?.beforeBlockHeight,afterBlockHeight:r?.afterBlockHeight,poolAddress:r?.poolAddress,type:r?.type?r.type.toUpperCase():void 0,sortBy:r?.sortBy});return he(n)}_subscribeRankingTokens(s,t,r){let n=d(s),i=[this._client.stream.subscribeRankingTokensStats({chain:n,channelType:t,callback:a=>r(a.map(c=>F(s,c)))}),this._client.stream.subscribeRankingTokensHolders({chain:n,channelType:t,callback:a=>r(a.map(c=>M(s,c.tokenAddress,c)))}),this._client.stream.subscribeRankingTokensSupply({chain:n,channelType:t,callback:a=>r(a.map(c=>E(s,c.tokenAddress,c)))}),this._client.stream.subscribeRankingTokensLiquidity({chain:n,channelType:t,callback:a=>r(a.map(c=>z(s,c.tokenAddress,c)))})];return {unsubscribe:()=>i.forEach(a=>a.unsubscribe())}}};function Qe(e){let s=e.find(t=>t.field==="launchedFromProtocolFamily");if(s){if(s.operator==="eq")return [s.value];if(s.operator==="in")return s.value;console.warn("invalid launchedFromProtocolFamily filter",s);}}
|
|
2
|
-
export{Ue as Client,
|
|
1
|
+
import {ChainStreamClient,WsChannelType,ChainSymbol,Resolution,SearchSortBy,SwapRouteInputSwapMode,WsMetricType,TokenField}from'@chainstream-io/sdk';import {Chain,SwapMode}from'@liberfi.io/types';import {SafeBigNumber,SOLANA_TOKENS}from'@liberfi.io/utils';var w=class extends Error{code="NotImplemented";constructor(s,t){super(t?`${s} is not yet implemented by the backend: ${t}`:`${s} is not yet implemented by the backend`),this.name="NotImplementedError";}};function Je(e){return e instanceof Error&&e.code==="NotImplemented"}var Re="https://api.chainstream.io";async function pe(e){return typeof e=="string"?e:Promise.resolve(e.getToken())}function He(e,s,t){if(t!=null){if(t instanceof Date){e.set(s,String(t.getTime()));return}e.set(s,String(t));}}function xe(e,s){let t=e.endsWith("/")?e.slice(0,-1):e,r=s.startsWith("/")?s:`/${s}`;return t+r}async function x(e,s,t){let r=new URL(xe(e.baseUrl,s)),n=new URLSearchParams;for(let[k,u]of Object.entries(t))He(n,k,u);let i=n.toString();i&&(r.search=i);let a=await pe(e.accessToken),c=await fetch(r.toString(),{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${a}`}});if(!c.ok){let k=await c.text().catch(()=>"");throw new Error(`[phase3Http] ${c.status} ${c.statusText} ${r.pathname}: ${k}`)}return await c.json()}function j(e,s){return {baseUrl:s??Re,accessToken:e}}function Q(e,s,t,r){return x(e,`/v2/token/${encodeURIComponent(s)}/${encodeURIComponent(t)}/holders`,r)}function K(e,s,t){return x(e,`/v2/trade/${encodeURIComponent(s)}/activities`,t)}function J(e,s,t,r){return x(e,`/v2/wallet/${encodeURIComponent(s)}/${encodeURIComponent(t)}/net-worth/tokens`,r)}function Y(e,s,t,r){return x(e,`/v2/wallet/${encodeURIComponent(s)}/${encodeURIComponent(t)}/pnl-details`,r)}function o(e){return e??void 0}function d(e){switch(e){case Chain.ETHEREUM:return ChainSymbol.eth;case Chain.BINANCE:return ChainSymbol.bsc;case Chain.SOLANA:return ChainSymbol.sol}throw new Error(`Unsupported chain: ${e}`)}function N(e){switch(e){case "1s":return Resolution["1s"];case "15s":return Resolution["15s"];case "30s":return Resolution["30s"];case "1m":return Resolution["1m"];case "5m":return Resolution["5m"];case "15m":return Resolution["15m"];case "30m":case "1h":return Resolution["1h"];case "4h":return Resolution["4h"];case "12h":return Resolution["12h"];case "24h":return Resolution["1d"]}}function De(e){return e}function se(e){switch(e){case "marketCap":return SearchSortBy.marketCapInUsd;case "tvl":return SearchSortBy.liquidityInUsd;case "price":return SearchSortBy.priceInUsd;case "holders":return SearchSortBy.holderCount;case "volumes24h":return SearchSortBy.h24VolumeInUsd;case "trades24h":return SearchSortBy.h24Transactions;case "createdAt":return SearchSortBy.tokenCreatedAt}throw new Error(`Unsupported search field: ${e}`)}function B(e){switch(e){case "price":return TokenField.marketDatapriceInUsd;case "priceChange1m":return TokenField.statspriceChangeRatioInUsd1m;case "priceChange5m":return TokenField.statspriceChangeRatioInUsd5m;case "priceChange1h":return TokenField.statspriceChangeRatioInUsd1h;case "priceChange4h":return TokenField.statspriceChangeRatioInUsd4h;case "priceChange24h":return TokenField.statspriceChangeRatioInUsd24h;case "marketCap":return TokenField.marketDatamarketCapInUsd;case "tvl":return TokenField.marketDatamaxPoolTvlInUsd;case "top10Holdings":return TokenField.marketDatatop10TotalHoldings;case "top10Ratio":return TokenField.marketDatatop10HoldingsRatio;case "top100Holdings":return TokenField.marketDatatop100TotalHoldings;case "top100Ratio":return TokenField.marketDatatop100HoldingsRatio;case "holders":return TokenField.marketDataholders;case "creatorsHoldings":return TokenField.marketDatacreatorHoldings;case "creatorsRatio":return TokenField.marketDatacreatorHoldingsRatio;case "buys1m":return TokenField.statsbuys1m;case "buys5m":return TokenField.statsbuys5m;case "buys15m":return TokenField.statsbuys15m;case "buys30m":return TokenField.statsbuys30m;case "buys1h":return TokenField.statsbuys1h;case "buys4h":return TokenField.statsbuys4h;case "buys24h":return TokenField.statsbuys24h;case "sells1m":return TokenField.statssells1m;case "sells5m":return TokenField.statssells5m;case "sells15m":return TokenField.statssells15m;case "sells30m":return TokenField.statssells30m;case "sells1h":return TokenField.statssells1h;case "sells4h":return TokenField.statssells4h;case "sells24h":return TokenField.statssells24h;case "trades1m":return TokenField.statstrades1m;case "trades5m":return TokenField.statstrades5m;case "trades1h":return TokenField.statstrades1h;case "trades4h":return TokenField.statstrades4h;case "trades24h":return TokenField.statstrades24h;case "traders1m":return TokenField.statstraders1m;case "traders5m":return TokenField.statstraders5m;case "traders1h":return TokenField.statstraders1h;case "traders4h":return TokenField.statstraders4h;case "traders24h":return TokenField.statstraders24h;case "volumes1m":return TokenField.statsvolumesInUsd1m;case "volumes5m":return TokenField.statsvolumesInUsd5m;case "volumes1h":return TokenField.statsvolumesInUsd1h;case "volumes4h":return TokenField.statsvolumesInUsd4h;case "volumes24h":return TokenField.statsvolumesInUsd24h;case "createdAt":return TokenField.tokenCreatedAt}throw new Error(`Unsupported sortBy: ${e}`)}function te(e){return e.filter(s=>["gt","gte","lt","lte","between"].indexOf(s.operator)>=0).map(s=>{let t={field:B(s.field)};return ["gt","gte","between"].indexOf(s.operator)>=0&&(t.min=typeof s.value=="number"?new SafeBigNumber(s.value).toString():s.value),["lt","lte","between"].indexOf(s.operator)>=0&&(t.max=typeof s.value=="number"?new SafeBigNumber(s.value).toString():s.value),t})}function p(e){switch(e){case ChainSymbol.eth:return Chain.ETHEREUM;case ChainSymbol.bsc:return Chain.BINANCE;case ChainSymbol.sol:case "solana":return Chain.SOLANA}throw new Error(`Unsupported chain: ${e}`)}function Ne(e){return {address:e.address??void 0,share:e.share??void 0,isVerified:e.isVerified??void 0}}function g(e){return {chain:p(e.chain),name:e.name,symbol:e.symbol,address:e.address,decimals:e.decimals,image:e.imageUrl??void 0,description:e.description??void 0,creators:e.tokenCreators?.map(Ne),launchedFrom:{programAddress:e.extra?.launchFromProgramAddress??void 0,protocolFamily:e.extra?.launchFromProtocolFamily??void 0},migrateProgress:e.marketData?.completionRatio?new SafeBigNumber(e.marketData.completionRatio).shiftedBy(2).toString():void 0,migratedTo:{programAddress:e.extra?.migratedToProgramAddress??void 0,protocolFamily:e.extra?.migratedToProtocolFamily??void 0,poolAddress:e.extra?.migratedToPoolAddress??void 0,migratedAt:e.extra?.migratedAt?new Date(e.extra.migratedAt):void 0},socialMedias:e.socialMedias?Object.fromEntries(Object.entries(e.socialMedias).filter(([,s])=>s!=null).map(([s,t])=>[s,t])):void 0,stats:e.stats?O(e.stats):void 0,marketData:e.marketData?_(e.marketData):void 0,createdAt:e.tokenCreatedAt?new Date(e.tokenCreatedAt):void 0}}function O(e){return {"1m":y(e,"1m"),"5m":y(e,"5m"),"15m":y(e,"15m"),"30m":y(e,"30m"),"1h":y(e,"1h"),"4h":y(e,"4h"),"24h":y(e,"24h")}}function A(e){return e===void 0?void 0:parseInt(e)}function y(e,s){let t=e.periods?.[s];return t?{buys:A(t.buys),sells:A(t.sells),trades:A(t.trades),buyers:A(t.buyers),sellers:A(t.sellers),traders:A(t.traders),buyVolumes:t.buyVolume,sellVolumes:t.sellVolume,volumes:t.totalVolumeInNative,buyVolumesInUsd:t.buyVolumeInUsd,sellVolumesInUsd:t.sellVolumeInUsd,volumesInUsd:t.totalVolumeInUsd,openPriceInUsd:t.openInUsd,closePriceInUsd:t.closeInUsd,highPriceInUsd:t.highInUsd,lowPriceInUsd:t.lowInUsd,priceInUsd:t.closeInUsd,priceChange:t.priceChangeRatioInUsd}:{}}function at(e){return {poolAddress:e.poolAddress,programAddress:e.programAddress??void 0,protocolFamily:e.protocolFamily??void 0,tvl:e.tvlInSol??void 0,tvlInUsd:e.tvlInUsd??void 0}}function _(e){return {totalSupply:e.totalSupply??void 0,marketCap:e.marketCapInSol??void 0,marketCapInUsd:e.marketCapInUsd??void 0,price:e.priceInSol??void 0,priceInUsd:e.priceInUsd??void 0,tvl:e.totalTvlInSol??void 0,tvlInUsd:e.totalTvlInUsd??void 0,holders:e.holders?parseInt(e.holders):void 0,top10Holdings:e.top10TotalHoldings??void 0,top10HoldingsRatio:e.top10HoldingsRatio??void 0,top50Holdings:e.top50TotalHoldings??void 0,top50HoldingsRatio:e.top50HoldingsRatio??void 0,top100Holdings:e.top100TotalHoldings??void 0,top100HoldingsRatio:e.top100HoldingsRatio??void 0,bluechipHolders:e.bluechipTotalHolders?parseInt(e.bluechipTotalHolders):void 0,bluechipHoldings:e.bluechipTotalHoldings??void 0,bluechipHoldingsRatio:e.bluechipHoldingsRatio??void 0,kolHolders:e.kolTotalHolders?parseInt(e.kolTotalHolders):void 0,kolHoldings:e.kolTotalHoldings??void 0,kolHoldingsRatio:e.kolHoldingsRatio??void 0,sniperHolders:e.sniperTotalHolders?parseInt(e.sniperTotalHolders):void 0,sniperHoldings:e.sniperTotalHoldings??void 0,sniperHoldingsRatio:e.sniperHoldingsRatio??void 0,proHolders:e.proTotalHolders?parseInt(e.proTotalHolders):void 0,proHoldings:e.proTotalHoldings??void 0,proHoldingsRatio:e.proHoldingsRatio??void 0,insiderHolders:e.insiderTotalHolders?parseInt(e.insiderTotalHolders):void 0,insiderHoldings:e.insiderTotalHoldings??void 0,insiderHoldingsRatio:e.insiderHoldingsRatio??void 0,sandwichHolders:e.sandwishTotalHolders?parseInt(e.sandwishTotalHolders):void 0,sandwichHoldings:e.sandwishTotalHoldings??void 0,sandwichHoldingsRatio:e.sandwishHoldingsRatio??void 0,freshHolders:e.freshTotalHolders?parseInt(e.freshTotalHolders):void 0,freshHoldings:e.freshTotalHoldings??void 0,freshHoldingsRatio:e.freshHoldingsRatio??void 0,bundleHolders:e.bundleTotalHolders?parseInt(e.bundleTotalHolders):void 0,bundleHoldings:e.bundleTotalHoldings??void 0,bundleHoldingsRatio:e.bundleHoldingsRatio??void 0,devHolders:e.devTotalHolders?parseInt(e.devTotalHolders):void 0,devHoldings:e.devTotalHoldings??void 0,devHoldingsRatio:e.devHoldingsRatio??void 0}}function re(e,s){return {open:e.open,close:e.close,high:e.high,low:e.low,volume:e.volume,resolution:s,timestamp:new Date(e.timestamp)}}function Be(e){return e==="1d"?"24h":e}function ne(e){return {hasTransferFee:e.hasTransferFee,isTransferFeeUpgradable:e.isTransferFeeUpgradable,isTransferable:e.isTransferable,isFreezable:e.isFreezable,isClosable:e.isClosable}}var Oe=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]),_e="0x0000000000000000000000000000000000000000",Le="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";function Fe(e){return e===SOLANA_TOKENS.native.address?SOLANA_TOKENS.wrapped.address:e}function Ee(e){return e.toLowerCase()===_e.toLowerCase()?Le:e}function Me(e){return e.dex==="jupiter"?"jupiter":e.dex==="kyberswap"?"kyberswap":Oe.has(e.chain)?"jupiter":"kyberswap"}function D(e,s){return e==="jupiter"?Fe(s):e==="kyberswap"?Ee(s):s}function it(e,s){return D(e,s)}function oe(e){let s=Me(e),t=D(s,e.input),r=D(s,e.output);return {dex:s,userAddress:e.userAddress,amount:e.amount,swapMode:e.mode===SwapMode.EXACT_IN?SwapRouteInputSwapMode.ExactIn:SwapRouteInputSwapMode.ExactOut,slippage:e.slippage??1,inputMint:t,outputMint:r,priorityFee:e.priorityFee,...e.tipFee&&{tipFee:e.tipFee},...e.isAntiMev!=null&&{isAntiMev:e.isAntiMev},...e.permit&&{permit:e.permit},...e.deadline!=null&&{deadline:e.deadline}}}function ae(e){return {signedTx:e.serializedTx}}function R(e){return e==null?void 0:new Date(e)}function L(e){if(!(!e||e.length===0))return e}function ie(e){return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(s=>({address:s.walletAddress,amount:s.amount,amountInUsd:s.amountInUsd,ratio:s.percentage,tags:L(s.tags),lastActiveAt:R(s.lastActiveAt),startHoldingAt:R(s.startHoldingAt)}))}}function le(e){let s=e;return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(g),extra:o(s.countsByProtocols)}}function de(e){return {serializedTx:e.serializedTx,recentBlockhash:o(e.recentBlockhash),lastValidBlockHeight:o(e.lastValidBlockHeight),plans:[],extra:e.routeInfo}}function ce(e){return {blockhash:e.blockhash,lastValidBlockHeight:e.lastValidBlockHeight}}function ue(e){return {txHash:e.signature,extra:{jobId:e.jobId,elapsedTime:e.elapsedTime}}}function me(e,s){let t=(s.data??[]).map(r=>({chain:p(r.chain),address:r.tokenAddress,name:r.name,symbol:r.symbol,image:o(r.logoUri),priceInUsd:r.priceInUsd,priceInNative:r.priceInNative,amount:r.amount,amountInUsd:r.valueInUsd,amountInNative:r.valueInNative,decimals:r.decimals}));return {chain:t[0]?.chain??e,address:s.walletAddress,balanceInUsd:s.totalValueInUsd,balanceInNative:s.totalValueInNative,startCursor:o(s.startCursor),endCursor:o(s.endCursor),hasPrev:s.hasPrev,hasNext:s.hasNext,portfolios:t}}function Te(e,s,t){return {chain:e,address:s,tokens:t.tokens?Number(t.tokens):void 0,buys:t.buys?Number(t.buys):void 0,sells:t.sells?Number(t.sells):void 0,totalTrades:t.totalTrades?Number(t.totalTrades):void 0,wins:t.wins?Number(t.wins):void 0,losses:t.losses?Number(t.losses):void 0,winRate:o(t.winRate),buyAmountInUsd:o(t.buyAmountInUsd),sellAmountInUsd:o(t.sellAmountInUsd),totalCostInUsd:o(t.totalCostInUsd),realizedProfitInUsd:o(t.realizedProfitInUsd),realizedProfitRatio:o(t.realizedProfitRatio),unrealizedProfitInUsd:o(t.unrealizedProfitInUsd),unrealizedProfitRatio:o(t.unrealizedProfitRatio),totalProfitInUsd:o(t.totalProfitInUsd),totalProfitRatio:o(t.totalProfitRatio),avgProfitPerTradeInUsd:o(t.avgProfitPerTradeInUsd)}}function ze(e,s){return {chain:e,address:s.tokenAddress,name:s.name??"",symbol:s.symbol??"",image:o(s.logoUri),amount:s.balance,amountInUsd:s.currentValue,priceInUsd:s.priceInUsd,decimals:s.decimals??0,totalTrades:s.totalTrades!=null?Number(s.totalTrades):void 0,buys:s.buys!=null?Number(s.buys):void 0,buyVolumes:s.buyAmount,buyVolumesInUsd:s.buyAmountInUsd,buyAvgPriceInUsd:s.avgBuyPriceInUsd,sells:s.sells!=null?Number(s.sells):void 0,sellVolumes:s.sellAmount,sellVolumesInUsd:s.sellAmountInUsd,sellAvgPriceInUsd:s.avgSellPriceInUsd,realizedProfitInUsd:s.realizedProfitInUsd,realizedProfitRatio:s.realizedProfitRatio,unrealizedProfitInUsd:s.unrealizedProfitInUsd,unrealizedProfitRatio:s.unrealizedProfitRatio,totalProfitInUsd:s.totalProfitInUsd,totalProfitRatio:s.totalProfitRatio,isClosed:s.isClosed,firstBuyAt:R(s.firstBuyAt),lastSellAt:R(s.lastSellAt)}}function ge(e,s,t){return {chain:e,address:s,tokens:t.summary.tokens!=null?Number(t.summary.tokens):void 0,buys:t.summary.buys!=null?Number(t.summary.buys):void 0,sells:t.summary.sells!=null?Number(t.summary.sells):void 0,totalTrades:t.summary.totalTrades!=null?Number(t.summary.totalTrades):void 0,wins:t.summary.wins!=null?Number(t.summary.wins):void 0,losses:t.summary.losses!=null?Number(t.summary.losses):void 0,winRate:o(t.summary.winRate),buyAmountInUsd:o(t.summary.buyAmountInUsd),sellAmountInUsd:o(t.summary.sellAmountInUsd),totalCostInUsd:t.summary.totalCostInUsd,realizedProfitInUsd:o(t.summary.realizedProfitInUsd),unrealizedProfitInUsd:o(t.summary.unrealizedProfitInUsd),totalProfitInUsd:o(t.summary.totalProfitInUsd),totalProfitRatio:o(t.summary.totalProfitRatio),avgProfitPerTradeInUsd:o(t.summary.avgProfitPerTradeInUsd),startCursor:o(t.startCursor),endCursor:o(t.endCursor),hasPrev:t.hasPrev,hasNext:t.hasNext,portfolios:t.data.map(r=>ze(e,r))}}function ke(e,s){return (s.data??[]).map(t=>({chain:p(t.chain),address:t.tokenAddress,name:t.name,symbol:t.symbol,image:o(t.logoUri),priceInUsd:t.priceInUsd,priceInNative:t.priceInNative,amount:t.amount,amountInUsd:t.valueInUsd,amountInNative:t.valueInNative,decimals:t.decimals,isActive:t.isActive,avgCostUsd:o(t.avgCostUsd),lastActiveAt:R(t.lastActiveAt),walletTokenTags:L(t.walletTokenTags)}))}function fe(e,s){return s.data.map(t=>({chain:e,address:t.tokenAddress,name:t.name??"",symbol:t.symbol??"",image:o(t.logoUri),amount:t.balance,amountInUsd:t.currentValue,priceInUsd:t.priceInUsd,decimals:t.decimals??0,totalTrades:Number(t.totalTrades),buys:Number(t.buys),buyVolumes:t.buyAmount,buyVolumesInUsd:t.buyAmountInUsd,buyAvgPriceInUsd:t.avgBuyPriceInUsd,sells:Number(t.sells),sellVolumes:t.sellAmount,sellVolumesInUsd:t.sellAmountInUsd,sellAvgPriceInUsd:t.avgSellPriceInUsd,realizedProfitInUsd:t.realizedProfitInUsd,realizedProfitRatio:t.realizedProfitRatio,unrealizedProfitInUsd:t.unrealizedProfitInUsd,unrealizedProfitRatio:t.unrealizedProfitRatio,totalProfitInUsd:t.totalProfitInUsd,totalProfitRatio:t.totalProfitRatio}))}function be(e){return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(Ve)}}function Ve(e){let s=e.type.toLowerCase()==="buy";return {chain:p(e.chain),walletAddress:e.accountOwnerAddress,txHash:e.transactionSignature,type:s?"buy":"sell",from:{address:s?e.sideTokenAddress:e.tokenAddress,symbol:s?e.sideTokenSymbol:e.tokenSymbol,name:s?e.sideTokenName:e.tokenName,image:o(s?e.sideTokenImageUrl:e.tokenImageUrl),amount:s?e.sideTokenAmount:e.tokenAmount,amountInUsd:s?e.sideTokenAmountInUsd:e.tokenAmountInUsd,priceInUsd:s?e.sideTokenPriceInUsd:e.tokenPriceInUsd},to:{address:s?e.tokenAddress:e.sideTokenAddress,symbol:s?e.tokenSymbol:e.sideTokenSymbol,name:s?e.tokenName:e.sideTokenName,image:o(s?e.tokenImageUrl:e.sideTokenImageUrl),amount:s?e.tokenAmount:e.sideTokenAmount,amountInUsd:s?e.tokenAmountInUsd:e.sideTokenAmountInUsd,priceInUsd:s?e.tokenPriceInUsd:e.sideTokenPriceInUsd},dex:{programAddress:o(e.dexProgramAddress),protocolFamily:o(e.dexProtocolFamily),image:o(e.dexImage)},poolAddress:o(e.poolAddress),status:e.status??"success",time:new Date(e.blockTimestamp*1e3)}}function he(e){return {startCursor:o(e.startCursor),endCursor:o(e.endCursor),hasPrev:e.hasPrev,hasNext:e.hasNext,data:e.data.map(qe)}}function qe(e){let s=e.type.toLowerCase().replace(/ /g,"_"),t=s==="buy",r=e.blockTimestamp<1e12?e.blockTimestamp*1e3:e.blockTimestamp;return {chain:p(e.chain),walletAddress:e.accountOwnerAddress,txHash:e.transactionSignature,type:s,from:{address:t?e.sideTokenAddress:e.tokenAddress,symbol:t?e.sideTokenSymbol:e.tokenSymbol,name:t?e.sideTokenName:e.tokenName,image:o(t?e.sideTokenImageUrl:e.tokenImageUrl),amount:t?e.sideTokenAmount:e.tokenAmount,amountInUsd:t?e.sideTokenAmountInUsd:e.tokenAmountInUsd,priceInUsd:t?e.sideTokenPriceInUsd:e.tokenPriceInUsd},to:{address:t?e.tokenAddress:e.sideTokenAddress,symbol:t?e.tokenSymbol:e.sideTokenSymbol,name:t?e.tokenName:e.sideTokenName,image:o(t?e.tokenImageUrl:e.sideTokenImageUrl),amount:t?e.tokenAmount:e.sideTokenAmount,amountInUsd:t?e.tokenAmountInUsd:e.sideTokenAmountInUsd,priceInUsd:t?e.tokenPriceInUsd:e.sideTokenPriceInUsd},dex:{programAddress:o(e.dexProgramAddress),protocolFamily:o(e.dexProtocolFamily),image:o(e.dexImage)},poolAddress:o(e.poolAddress),status:e.status??"success",time:new Date(r),gasFee:e.gasFee!=null?String(e.gasFee):void 0,traderTags:L(e.traderTags)}}function ye(e,s){return {chain:e,address:s.tokenAddress,name:s.name,symbol:s.symbol,decimals:s.decimals,createdAt:s.createdAtMs?new Date(s.createdAtMs):void 0,launchedFrom:s.launchFrom?{programAddress:s.launchFrom.programAddress,protocolFamily:s.launchFrom.protocolFamily}:void 0}}function Pe(e,s){return {chain:e,address:s.tokenAddress,name:s.name,symbol:s.symbol,decimals:s.decimals,image:s.imageUrl,description:s.description,socialMedias:s.socialMedia?{...s.socialMedia}:void 0,createdAt:s.createdAtMs?new Date(s.createdAtMs):void 0,launchedFrom:s.launchFrom?{programAddress:s.launchFrom.programAddress,protocolFamily:s.launchFrom.protocolFamily}:void 0,migratedTo:s.migratedTo?{programAddress:s.migratedTo.programAddress,protocolFamily:s.migratedTo.protocolFamily}:void 0}}function Ae(e){return {open:e.open,close:e.close,high:e.high,low:e.low,volume:e.volume,resolution:Be(e.resolution),timestamp:new Date(e.time)}}function Ge(e){let s=["1m","5m","15m","30m","1h","4h","24h"],t=e,r={};for(let n of s){let i=t[`buys${n}`],a=t[`sells${n}`],c=t[`buyers${n}`],k=t[`sellers${n}`],u=t[`buyVolumeInUsd${n}`],P=t[`sellVolumeInUsd${n}`],U=t[`trades${n}`],C=t[`price${n}`],b=t[`openInUsd${n}`],v=t[`closeInUsd${n}`];if(!(i!==void 0||a!==void 0||U!==void 0||C!==void 0))continue;let W=U??(i!==void 0&&a!==void 0?i+a:void 0),Ce=c!==void 0&&k!==void 0?c+k:void 0,ve=u!==void 0&&P!==void 0?new SafeBigNumber(u).plus(P).toString():void 0,we=b&&v&&new SafeBigNumber(b).gt(0)?new SafeBigNumber(v).minus(b).div(b).toString():void 0;r[n]={buys:i,sells:a,trades:W,buyers:c,sellers:k,traders:Ce,buyVolumesInUsd:u,sellVolumesInUsd:P,volumesInUsd:ve,openPriceInUsd:b,closePriceInUsd:v,priceInUsd:C??v,priceChange:we};}return r}function $e(e){return {priceInUsd:e.price}}function F(e,s){return {chain:e,address:s.address,stats:Ge(s),marketData:$e(s)}}function E(e,s,t){return {chain:e,address:s,marketData:{totalSupply:t.supply,marketCapInUsd:t.marketCapInUsd}}}function M(e,s,t){return {chain:e,address:s,marketData:je(t)}}function z(e,s,t){return t.metricType===WsMetricType.LIQUIDITY_IN_USD?{chain:e,address:s,marketData:{tvlInUsd:t.value}}:t.metricType===WsMetricType.MIGRATED_RATIO?{chain:e,address:s,migrateProgress:new SafeBigNumber(t.value).shiftedBy(2).toString()}:{chain:e,address:s}}function V(e,s){return {chain:e,address:s.tokenAddress??"",migrateProgress:s.progressRatio?new SafeBigNumber(s.progressRatio).shiftedBy(2).toString():void 0}}function Ie(e,s,t){return {chain:e,address:s,liquidities:[{poolAddress:t.poolAddress,tvlInUsd:t.liquidityInUsd,tvl:t.liquidityInNative}]}}function Se(e,s,t){return {chain:e,address:s,marketData:{tvlInUsd:t.liquidityInUsd,tvl:t.liquidityInNative}}}function je(e){return {holders:e.holders,top10Holdings:e.top10HoldersAmount,top10HoldingsRatio:e.top10HoldersRatio,top50Holdings:e.top50HoldersAmount,top50HoldingsRatio:e.top50HoldersRatio,top100Holdings:e.top100HoldersAmount,top100HoldingsRatio:e.top100HoldersRatio,devHolders:e.balanceTagDevHolders===void 0?void 0:e.balanceTagDevHolders,devHoldings:e.balanceTagDevAmount,devHoldingsRatio:e.balanceTagDevRatio,sniperHolders:e.balanceTagSniperHolders===void 0?void 0:e.balanceTagSniperHolders,sniperHoldings:e.balanceTagSniperAmount,sniperHoldingsRatio:e.balanceTagSniperRatio,freshHolders:e.balanceTagFreshHolders===void 0?void 0:e.balanceTagFreshHolders,freshHoldings:e.balanceTagFreshAmount,freshHoldingsRatio:e.balanceTagFreshRatio,bundleHolders:e.balanceTagBundleHolders===void 0?void 0:e.balanceTagBundleHolders,bundleHoldings:e.balanceTagBundleAmount,bundleHoldingsRatio:e.balanceTagBundleRatio,sandwichHolders:e.balanceTagSandwichHolders===void 0?void 0:e.balanceTagSandwichHolders,sandwichHoldings:e.balanceTagSandwichAmount,sandwichHoldingsRatio:e.balanceTagSandwichRatio}}function q(e,s){let t=s.kind.toLowerCase()==="buy";return {chain:e,walletAddress:t?s.buyWalletAddress:s.sellWalletAddress,txHash:s.txHash,type:t?"buy":"sell",from:{address:s.sellTokenAddress,symbol:s.sellTokenSymbol,name:s.sellTokenName,amount:s.sellAmount,amountInUsd:s.sellAmountInUsd},to:{address:s.buyTokenAddress,symbol:s.buyTokenSymbol,name:s.buyTokenName,amount:s.buyAmount,amountInUsd:s.buyAmountInUsd},status:"success",time:new Date(s.timestamp)}}function G(e,s){let t=s.kind.toLowerCase().replace(/ /g,"_");return {chain:e,walletAddress:t==="buy"?s.buyWalletAddress:s.sellWalletAddress,txHash:s.txHash,type:t,from:{address:s.sellTokenAddress,symbol:s.sellTokenSymbol,name:s.sellTokenName,amount:s.sellAmount,amountInUsd:s.sellAmountInUsd},to:{address:s.buyTokenAddress,symbol:s.buyTokenSymbol,name:s.buyTokenName,amount:s.buyAmount,amountInUsd:s.buyAmountInUsd},status:"success",time:new Date(s.timestamp)}}var Ue=class e{constructor(s,t){this.accessToken=s;this.options=t;this._client=new ChainStreamClient(this.accessToken,this.options),this._phase3=j(this.accessToken,this.options?.serverUrl);}_client;_phase3;async getToken(s,t){let r=await this._client.token.getToken(d(s),t);return g(r)}async getTokens(s,t){return (await this._client.token.getTokens(d(s),{tokenAddresses:t.join(",")})).map(g)}async getTokenCandles(s,t,r,n){return (await this._client.token.getCandles(d(s),t,{resolution:N(r),from:n?.after?.getTime(),to:n?.before?.getTime(),limit:n?.limit})).map(a=>re(a,r))}async getTokenSecurity(s,t){let r=await this._client.token.getSecurity(d(s),t);return ne(r)}async getTokenStats(s,t){let r=await this._client.token.getStats(d(s),t);return O(r)}async getTokenHolders(s,t,r){let n=await Q(this._phase3,d(s),t,{cursor:r?.cursor,limit:r?.limit,direction:r?.direction,sortBy:r?.sortBy});return ie(n)}async getTokenMarketData(s,t){let r=await this._client.token.getMarketData(d(s),t);return _(r)}async getNewTokens(s,t){return (await this._client.ranking.getNewTokens(d(s),this._buildRankingParams(t))).map(g)}async getFinalStretchTokens(s,t){return (await this._client.ranking.getFinalStretchTokens(d(s),this._buildRankingParams(t))).map(g)}async getMigratedTokens(s,t){return (await this._client.ranking.getMigratedTokens(d(s),this._buildRankingParams(t))).map(g)}async getTrendingTokens(s,t,r){return (await this._client.ranking.getHotTokens(d(s),t,this._buildRankingParams(r))).map(g)}async getStockTokens(s,t){return (await this._client.ranking.getStocksTokens(d(s),this._buildRankingParams(t))).map(g)}async searchTokens(s){let t=await this._client.token.search({chains:s?.chains?.map(d),q:s?.keyword,limit:s?.limit,cursor:s?.cursor,sortBy:s?.sortBy?se(s.sortBy):void 0,sort:s?.sortDirection});return le(t)}async swapRoute(s){let t=await this._client.dex.route(d(s.chain),oe(s));return de(t)}async getLatestBlock(s){let t=await this._client.blockchain.getLatestBlock(d(s.chain));return ce(t)}async sendTx(s){let t=await this._client.transaction.send(d(s.chain),ae(s));return ue(t)}async checkTxSuccess(s,t,r){let{success:n}=await this._client.waitForJob(t,r);return n}async getWalletPortfolios(s,t,r){let n=e._CHAIN_TO_BALANCE_PARAM[s];if(n&&this.options?.nativeBalanceApiUrl)return this._getWalletPortfoliosFromBalanceApi(s,n,t);let i=await this._client.wallet.getNetWorth(d(s),t,{cursor:r?.cursor,limit:r?.limit??100});return me(s,i)}async getWalletPnl(s,t,r){let n=await this._client.wallet.getPnl(d(s),t,r?{resolution:r}:void 0);return Te(s,t,n)}async getWalletPortfolioPnls(s,t,r){let n=await Y(this._phase3,d(s),t,{resolution:r?.resolution??"30d",positionState:r?.positionState,sortBy:r?.sortBy,cursor:r?.cursor,limit:r?.limit??100,direction:r?.direction});return ge(s,t,n)}async getWalletPortfoliosByTokens(s,t,r){let n=e._CHAIN_TO_BALANCE_PARAM[s];if(n&&this.options?.nativeBalanceApiUrl)return this._getPortfoliosFromBalanceApi(s,n,t,r);let i=await J(this._phase3,d(s),t,{tokenAddresses:r.join(",")});return ke(s,i)}async getWalletPortfolioPnlsByTokens(s,t,r){let n=await this._client.wallet.getPnlByToken(d(s),t,{tokenAddresses:r.join(",")});return fe(s,n)}async getWalletTrades(s,t,r){return this._getTrades(s,{walletAddress:t},r)}async getTokenTrades(s,t,r){return this._getTrades(s,{tokenAddress:t},r)}async getWalletActivities(s,t,r){return this._getActivities(s,{walletAddress:t},r)}async getTokenActivities(s,t,r){return this._getActivities(s,{tokenAddress:t},r)}async getPresignedUploadUrl(){return (await this._client.ipfs.presign()).presignUrl}async getWalletLimitOrders(s,t,r){throw new w("Client.getWalletLimitOrders","no limit-orders endpoint on the backend yet")}async getTokensByCreator(s,t,r){throw new w("Client.getTokensByCreator","no creator-index endpoint on the backend yet")}subscribeToken(s,t,r){let n=d(s),i=[this._client.stream.subscribeTokenStats({chain:n,tokenAddress:t,callback:a=>r([F(s,a)])}),this._client.stream.subscribeTokenSupply({chain:n,tokenAddress:t,callback:a=>r([E(s,t,a)])}),this._client.stream.subscribeTokenHolders({chain:n,tokenAddress:t,callback:a=>r([M(s,t,a)])}),this._client.stream.subscribeTokenLiquidity({chain:n,tokenAddress:t,callback:a=>r([z(s,t,a)])}),this._client.stream.subscribeTokenMaxLiquidity({chain:n,tokenAddress:t,callback:a=>r([Ie(s,t,a)])}),this._client.stream.subscribeTokenTotalLiquidity({chain:n,tokenAddress:t,callback:a=>r([Se(s,t,a)])})];return {unsubscribe:()=>i.forEach(a=>a.unsubscribe())}}subscribeTokenCandles(s,t,r,n){return this._client.stream.subscribeTokenCandles({chain:d(s),tokenAddress:t,resolution:N(r),callback:i=>n([Ae(i)])})}subscribeWalletPnl(s,t,r){return this._client.stream.subscribeWalletPnlList({chain:d(s),walletAddress:t,callback:n=>r(n.map(i=>({chain:s,address:i.walletAddress,buys:i.buys,buyAmountInUsd:i.buyAmountInUsd,sells:i.sells,sellAmountInUsd:i.sellAmountInUsd,wins:i.wins,winRate:i.winRatio,totalProfitInUsd:i.pnlInUsd,totalProfitRatio:i.pnlRatio,avgProfitPerTradeInUsd:i.averagePnlInUsd,tokens:i.tokens,resolution:i.resolution})))})}subscribeWalletPortfolios(s,t,r){return this._client.stream.subscribeWalletBalance({chain:d(s),walletAddress:t,callback:n=>r(n.map(i=>({chain:s,walletAddress:i.walletAddress,tokenAddress:i.tokenAddress,priceInUsd:i.tokenPriceInUsd,amount:i.balance})))})}subscribeWalletPortfolioPnls(s,t,r){return this._client.stream.subscribeWalletPnl({chain:d(s),walletAddress:t,callback:n=>r([{chain:s,walletAddress:n.walletAddress,tokenAddress:n.tokenAddress,openTime:n.opentime?new Date(n.opentime):void 0,closeTime:n.closetime?new Date(n.closetime):void 0,buys:n.buyCount,buyVolumes:n.buyAmount,buyVolumesInUsd:n.buyAmountInUsd,buyAvgPriceInUsd:n.averageBuyPriceInUsd,sells:n.sellCount,sellVolumes:n.sellAmount,sellVolumesInUsd:n.sellAmountInUsd,sellAvgPriceInUsd:n.averageSellPriceInUsd,realizedProfitInUsd:n.realizedProfitInUsd,realizedProfitRatio:n.realizedProfitRatio,unrealizedProfitInUsd:n.unrealizedProfitInUsd,unrealizedProfitRatio:n.unrealizedProfitRatio,totalProfitInUsd:n.totalRealizedProfitInUsd,totalProfitRatio:n.totalRealizedProfitRatio}])})}subscribeWalletTrades(s,t,r){return this._client.stream.subscribeWalletTrade({chain:d(s),walletAddress:t,callback:n=>r([q(s,n)])})}subscribeTokenTrades(s,t,r){return this._client.stream.subscribeTokenTrade({chain:d(s),tokenAddress:t,callback:n=>r([q(s,n)])})}subscribeWalletActivities(s,t,r){return this._client.stream.subscribeWalletTrade({chain:d(s),walletAddress:t,callback:n=>r([G(s,n)])})}subscribeTokenActivities(s,t,r){return this._client.stream.subscribeTokenTrade({chain:d(s),tokenAddress:t,callback:n=>r([G(s,n)])})}subscribeNewTokens(s,t){let r=d(s),n=this._subscribeRankingTokens(s,WsChannelType.New,t),i=[this._client.stream.subscribeNewToken({chain:r,callback:a=>t([ye(s,a)])}),this._client.stream.subscribeNewTokensMetadata({chain:r,callback:a=>t(a.map(c=>Pe(s,c)))}),this._client.stream.subscribeRankingTokensBondingCurve({chain:r,callback:a=>t(a.map(c=>V(s,c)))})];return {unsubscribe:()=>{n.unsubscribe(),i.forEach(a=>a.unsubscribe());}}}subscribeTrendingTokens(s,t){return this._subscribeRankingTokens(s,WsChannelType.HOT,t)}subscribeMigratedTokens(s,t){return this._subscribeRankingTokens(s,WsChannelType.MIGRATED,t)}subscribeFinalStretchTokens(s,t){let r=d(s),n=this._subscribeRankingTokens(s,WsChannelType.FINAL_STRETCH,t),i=this._client.stream.subscribeRankingTokensBondingCurve({chain:r,callback:a=>t(a.map(c=>V(s,c)))});return {unsubscribe:()=>{n.unsubscribe(),i.unsubscribe();}}}subscribeStockTokens(s,t){return this._subscribeRankingTokens(s,WsChannelType.US_STOCKS,t)}static _CHAIN_TO_BALANCE_PARAM={[Chain.SOLANA]:"sol",[Chain.ETHEREUM]:"eth",[Chain.BINANCE]:"bnb"};static _NATIVE_TOKEN_ADDRESS={[Chain.SOLANA]:"11111111111111111111111111111111",[Chain.ETHEREUM]:"0x0000000000000000000000000000000000000000",[Chain.BINANCE]:"0x0000000000000000000000000000000000000000"};async _getPortfoliosFromBalanceApi(s,t,r,n){let i=this.options.nativeBalanceApiUrl,a=new URLSearchParams({chain:t,address:r});n?.length&&a.set("tokens",n.join(","));let c=await fetch(`${i}?${a.toString()}`);if(!c.ok)throw new Error(`Balance API returned ${c.status}`);return (await c.json()).balances.map(u=>{let P=BigInt(u.balance),U=u.decimals,C=BigInt(10)**BigInt(U),b=P/C,$=(P%C).toString().padStart(U,"0"),W=`${b}.${$}`.replace(/\.?0+$/,"")||"0";return {chain:s,address:u.address,name:"",symbol:"",priceInUsd:"0",priceInNative:"0",amount:W,amountInUsd:"0",amountInNative:"0",decimals:u.decimals}})}async _getWalletPortfoliosFromBalanceApi(s,t,r){let n=await this._getPortfoliosFromBalanceApi(s,t,r),i=e._NATIVE_TOKEN_ADDRESS[s],a=i?n.find(c=>c.address===i):void 0;return {chain:s,address:r,balanceInUsd:"0",balanceInNative:a?.amount??"0",portfolios:n,hasPrev:false,hasNext:false}}_buildRankingParams(s){return {sortBy:s?.sortBy?B(s.sortBy):void 0,sortDirection:s?.sortDirection?s.sortDirection:void 0,rangeFilters:s?.filters?te(s.filters):void 0,launchpadPlatform:s?.filters?Ke(s.filters):void 0,searchKeywords:s?.keywords,excludeKeywords:s?.excludeKeywords}}async _getTrades(s,t,r){let n=await this._client.trade.getTrades(d(s),{...t,cursor:r?.cursor,limit:r?.limit,direction:r?.direction,beforeTimestamp:r?.before?.getTime(),afterTimestamp:r?.after?.getTime(),beforeBlockHeight:r?.beforeBlockHeight,afterBlockHeight:r?.afterBlockHeight,poolAddress:r?.poolAddress,type:r?.type?r.type.toUpperCase():void 0});return be(n)}async _getActivities(s,t,r){let n=await K(this._phase3,d(s),{...t,cursor:r?.cursor,limit:r?.limit,direction:r?.direction,beforeTimestamp:r?.before?.getTime(),afterTimestamp:r?.after?.getTime(),beforeBlockHeight:r?.beforeBlockHeight,afterBlockHeight:r?.afterBlockHeight,poolAddress:r?.poolAddress,type:r?.type?r.type.toUpperCase():void 0,sortBy:r?.sortBy});return he(n)}_subscribeRankingTokens(s,t,r){let n=d(s),i=[this._client.stream.subscribeRankingTokensStats({chain:n,channelType:t,callback:a=>r(a.map(c=>F(s,c)))}),this._client.stream.subscribeRankingTokensHolders({chain:n,channelType:t,callback:a=>r(a.map(c=>M(s,c.tokenAddress,c)))}),this._client.stream.subscribeRankingTokensSupply({chain:n,channelType:t,callback:a=>r(a.map(c=>E(s,c.tokenAddress,c)))}),this._client.stream.subscribeRankingTokensLiquidity({chain:n,channelType:t,callback:a=>r(a.map(c=>z(s,c.tokenAddress,c)))})];return {unsubscribe:()=>i.forEach(a=>a.unsubscribe())}}};function Ke(e){let s=e.find(t=>t.field==="launchedFromProtocolFamily");if(s){if(s.operator==="eq")return [s.value];if(s.operator==="in")return s.value;console.warn("invalid launchedFromProtocolFamily filter",s);}}
|
|
2
|
+
export{Ue as Client,Le as KYBERSWAP_NATIVE_SENTINEL,w as NotImplementedError,he as fromActivityPage,p as fromChainDTO,ce as fromLatestBlock,fe as fromPnlDetailItems,ge as fromPnlDetailsPage,ue as fromSendTxResult,de as fromSwapRoute,re as fromTokenCandle,Ne as fromTokenCreatorDTO,g as fromTokenDTO,ie as fromTokenHolderPage,at as fromTokenLiquidityDTO,_ as fromTokenMarketDataDTO,Pe as fromTokenMetadataSubscribed,le as fromTokenPage,ne as fromTokenSecurity,O as fromTokenStatsDTO,ye as fromTokenSubscribed,be as fromTradePage,ke as fromWalletNetWorthByTokens,Te as fromWalletPnlSummary,me as fromWalletPortfolios,G as fromWsActivity,Ae as fromWsCandle,V as fromWsTokenBondingCurveToSubscribed,F as fromWsTokenDataSubscribed,M as fromWsTokenHolderToSubscribed,z as fromWsTokenLiquidityToSubscribed,je as fromWsTokenMarketDataFromHolder,$e as fromWsTokenMarketDataFromStats,Ie as fromWsTokenMaxLiquidityToSubscribed,Ge as fromWsTokenStats,E as fromWsTokenSupplyToSubscribed,Se as fromWsTokenTotalLiquidityToSubscribed,q as fromWsTradeActivity,Je as isNotImplementedError,d as toChainDTO,B as toFieldDTO,it as toMintForRoute,te as toRangeFiltersDTO,N as toResolutionDTO,se as toSearchFieldDTO,ae as toSendTxInput,De as toSortDirectionDTO,oe as toSwapRouteInput};//# sourceMappingURL=index.mjs.map
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|