crypull 1.0.2 → 1.0.3

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/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/coingecko.ts","../src/providers/dexscreener.ts","../src/providers/geckoterminal.ts","../src/providers/binance.ts","../src/providers/coinpaprika.ts","../src/providers/coincap.ts","../src/providers/cryptocompare.ts","../src/Crypull.ts","../src/index.ts","../src/cli.ts"],"names":["Command","pc","asciichart","intro","select","isCancel","outro","text"],"mappings":"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","file":"cli.js","sourcesContent":["import { ICryptoProvider, PriceData, SearchResult, TokenInfo } from '../types.js';\n\nexport class CoinGeckoProvider implements ICryptoProvider {\n name = 'CoinGecko';\n private baseUrl = 'https://api.coingecko.com/api/v3';\n\n async search(query: string): Promise<SearchResult[]> {\n try {\n const res = await fetch(`${this.baseUrl}/search?query=${query}`);\n if (!res.ok) return [];\n const data = await res.json();\n return (data.coins || []).slice(0, 10).map((coin: any) => ({\n id: coin.id,\n name: coin.name,\n symbol: coin.symbol.toUpperCase(),\n source: this.name,\n }));\n } catch (e) {\n return [];\n }\n }\n\n async getPrice(symbolOrId: string): Promise<PriceData | null> {\n try {\n let id = symbolOrId.toLowerCase();\n \n const searchRes = await this.search(id);\n const match = searchRes.find(s => s.symbol.toLowerCase() === id || s.id === id);\n if (match && match.id) {\n id = match.id;\n }\n\n const res = await fetch(`${this.baseUrl}/simple/price?ids=${id}&vs_currencies=usd`);\n if (!res.ok) return null;\n const data = await res.json();\n \n if (!data[id] || typeof data[id].usd === 'undefined') return null;\n\n return {\n symbol: match ? match.symbol : id.toUpperCase(),\n priceUsd: data[id].usd,\n source: this.name,\n lastUpdated: Date.now(),\n };\n } catch (e) {\n return null;\n }\n }\n\n async getTokenInfo(id: string): Promise<TokenInfo | null> {\n try {\n // By default, assuming id is the coingecko internal ID (like \"bitcoin\")\n const res = await fetch(`${this.baseUrl}/coins/${id.toLowerCase()}?localization=false&tickers=false&market_data=true&community_data=false&developer_data=false&sparkline=false`);\n if (!res.ok) return null;\n const data = await res.json();\n \n if (data.error) return null;\n\n return {\n name: data.name,\n symbol: data.symbol.toUpperCase(),\n description: data.description?.en,\n priceUsd: data.market_data?.current_price?.usd || 0,\n marketCap: data.market_data?.market_cap?.usd,\n marketCapRank: data.market_cap_rank,\n fdv: data.market_data?.fully_diluted_valuation?.usd,\n circulatingSupply: data.market_data?.circulating_supply,\n totalSupply: data.market_data?.total_supply,\n maxSupply: data.market_data?.max_supply,\n volume24h: data.market_data?.total_volume?.usd,\n priceChange24h: data.market_data?.price_change_24h,\n priceChangePercentage24h: data.market_data?.price_change_percentage_24h,\n priceChangePercentage7d: data.market_data?.price_change_percentage_7d,\n ath: data.market_data?.ath?.usd,\n athDate: data.market_data?.ath_date?.usd,\n atl: data.market_data?.atl?.usd,\n atlDate: data.market_data?.atl_date?.usd,\n links: {\n website: data.links?.homepage?.[0],\n twitter: data.links?.twitter_screen_name ? `https://twitter.com/${data.links.twitter_screen_name}` : undefined,\n telegram: data.links?.telegram_channel_identifier ? `https://t.me/${data.links.telegram_channel_identifier}` : undefined,\n discord: data.links?.chat_url?.find((url: string) => url.includes('discord')),\n github: data.links?.repos_url?.github?.[0],\n },\n source: this.name,\n lastUpdated: Date.now(),\n };\n } catch (e) {\n return null;\n }\n }\n}","import { DexPairInfo, ICryptoProvider, PriceData, SearchResult, TokenInfo } from '../types.js';\n\nexport class DexScreenerProvider implements ICryptoProvider {\n name = 'DexScreener';\n private baseUrl = 'https://api.dexscreener.com/latest/dex';\n\n async search(query: string): Promise<SearchResult[]> {\n try {\n const res = await fetch(`${this.baseUrl}/search?q=${query}`);\n if (!res.ok) return [];\n const data = await res.json();\n return (data.pairs || []).slice(0, 10).map((pair: any) => ({\n id: pair.baseToken.address,\n name: pair.baseToken.name,\n symbol: pair.baseToken.symbol.toUpperCase(),\n network: pair.chainId,\n source: this.name,\n }));\n } catch (e) {\n return [];\n }\n }\n\n async getPrice(address: string): Promise<PriceData | null> {\n const info = await this.getTokenInfo(address);\n if (!info) return null;\n return {\n symbol: info.symbol,\n priceUsd: info.priceUsd,\n source: this.name,\n lastUpdated: info.lastUpdated,\n };\n }\n\n async getTokenInfo(address: string): Promise<TokenInfo | null> {\n try {\n const res = await fetch(`${this.baseUrl}/tokens/${address}`);\n if (!res.ok) return null;\n const data = await res.json();\n \n if (!data.pairs || data.pairs.length === 0) return null;\n\n // The first pair is usually the most liquid one\n const pair = data.pairs[0];\n \n // Map out all the pairs available on DEXs for this token\n const mappedPairs: DexPairInfo[] = data.pairs.slice(0, 10).map((p: any) => ({\n dexId: p.dexId,\n url: p.url,\n pairAddress: p.pairAddress,\n baseTokenSymbol: p.baseToken.symbol,\n quoteTokenSymbol: p.quoteToken.symbol,\n priceUsd: parseFloat(p.priceUsd) || 0,\n volume24h: p.volume?.h24,\n liquidityUsd: p.liquidity?.usd,\n }));\n\n return {\n name: pair.baseToken.name,\n symbol: pair.baseToken.symbol.toUpperCase(),\n address: pair.baseToken.address,\n network: pair.chainId,\n priceUsd: parseFloat(pair.priceUsd) || 0,\n fdv: pair.fdv,\n volume24h: pair.volume?.h24,\n liquidityUsd: pair.liquidity?.usd,\n priceChangePercentage24h: pair.priceChange?.h24,\n pairs: mappedPairs,\n links: {\n website: pair.info?.websites?.[0]?.url,\n twitter: pair.info?.socials?.find((s: any) => s.type === 'twitter')?.url,\n telegram: pair.info?.socials?.find((s: any) => s.type === 'telegram')?.url,\n discord: pair.info?.socials?.find((s: any) => s.type === 'discord')?.url,\n },\n source: this.name,\n lastUpdated: Date.now(),\n };\n } catch (e) {\n return null;\n }\n }\n}","import { DexPairInfo, ICryptoProvider, PriceData, SearchResult, TokenInfo } from '../types.js';\n\nexport class GeckoTerminalProvider implements ICryptoProvider {\n name = 'GeckoTerminal';\n private baseUrl = 'https://api.geckoterminal.com/api/v2';\n\n async search(query: string): Promise<SearchResult[]> {\n try {\n const res = await fetch(`${this.baseUrl}/search/pools?query=${query}`);\n if (!res.ok) return [];\n const data = await res.json();\n \n const pools = data.data || [];\n return pools.slice(0, 10).map((pool: any) => {\n const attributes = pool.attributes;\n const baseToken = attributes.name.split(' / ')[0]; // Usually Base / Quote\n return {\n id: pool.id, // e.g. \"eth_0x...\"\n name: attributes.name,\n symbol: baseToken,\n network: pool.relationships.network.data.id,\n source: this.name,\n };\n });\n } catch (e) {\n return [];\n }\n }\n\n async getPrice(address: string, network: string = 'eth'): Promise<PriceData | null> {\n const info = await this.getTokenInfo(address, network);\n if (!info) return null;\n return {\n symbol: info.symbol,\n priceUsd: info.priceUsd,\n source: this.name,\n lastUpdated: info.lastUpdated,\n };\n }\n\n async getTokenInfo(address: string, network: string = 'eth'): Promise<TokenInfo | null> {\n try {\n const res = await fetch(`${this.baseUrl}/networks/${network}/tokens/${address}`);\n if (!res.ok) return null;\n const json = await res.json();\n \n if (!json.data || !json.data.attributes) return null;\n\n const attrs = json.data.attributes;\n\n // Try to get pairs from pools list if geckoterminal provides it via another endpoint or included relationships\n // For now, GeckoTerminal's token endpoint doesn't return rich pairs list natively without separate call.\n // So we map what we can.\n \n return {\n name: attrs.name,\n symbol: attrs.symbol.toUpperCase(),\n address: attrs.address,\n network: network,\n priceUsd: parseFloat(attrs.price_usd) || 0,\n fdv: parseFloat(attrs.fdv_usd),\n volume24h: parseFloat(attrs.volume_usd?.h24 || 0),\n source: this.name,\n lastUpdated: Date.now(),\n };\n } catch (e) {\n return null;\n }\n }\n}","import { ICryptoProvider, PriceData, SearchResult, TokenInfo } from '../types.js';\n\nexport class BinanceProvider implements ICryptoProvider {\n name = 'Binance';\n private baseUrl = 'https://api.binance.com/api/v3';\n\n async search(query: string): Promise<SearchResult[]> {\n try {\n // Binance doesn't have a direct \"search\" that returns symbols nicely for our format\n // We can fetch exchangeInfo, but it's large. For speed, we return a mock match if they query\n // or we just return an empty array and rely on other providers for search.\n // But let's try a quick hack: if query is short, construct a symbol.\n const symbol = query.toUpperCase();\n const res = await fetch(`${this.baseUrl}/ticker/price?symbol=${symbol}USDT`);\n if (res.ok) {\n return [{\n id: `${symbol}USDT`,\n name: symbol,\n symbol: symbol,\n source: this.name\n }];\n }\n return [];\n } catch (e) {\n return [];\n }\n }\n\n async getPrice(symbol: string): Promise<PriceData | null> {\n try {\n let querySymbol = symbol.toUpperCase();\n if (!querySymbol.endsWith('USDT') && !querySymbol.endsWith('BUSD') && !querySymbol.endsWith('BTC')) {\n querySymbol += 'USDT';\n }\n\n const res = await fetch(`${this.baseUrl}/ticker/price?symbol=${querySymbol}`);\n if (!res.ok) return null;\n const data = await res.json();\n\n return {\n symbol: symbol.toUpperCase(),\n priceUsd: parseFloat(data.price) || 0,\n source: this.name,\n lastUpdated: Date.now(),\n };\n } catch (e) {\n return null;\n }\n }\n\n async getTokenInfo(symbol: string): Promise<TokenInfo | null> {\n try {\n let querySymbol = symbol.toUpperCase();\n if (!querySymbol.endsWith('USDT') && !querySymbol.endsWith('BUSD') && !querySymbol.endsWith('BTC')) {\n querySymbol += 'USDT';\n }\n\n const res = await fetch(`${this.baseUrl}/ticker/24hr?symbol=${querySymbol}`);\n if (!res.ok) return null;\n const data = await res.json();\n\n return {\n name: symbol.toUpperCase(),\n symbol: symbol.toUpperCase(),\n priceUsd: parseFloat(data.lastPrice) || 0,\n volume24h: parseFloat(data.quoteVolume) || 0, // Quote volume in USDT roughly = USD volume\n source: this.name,\n lastUpdated: Date.now(),\n };\n } catch (e) {\n return null;\n }\n }\n}","import { ICryptoProvider, PriceData, SearchResult, TokenInfo } from '../types.js';\n\nexport class CoinpaprikaProvider implements ICryptoProvider {\n name = 'Coinpaprika';\n private baseUrl = 'https://api.coinpaprika.com/v1';\n\n async search(query: string): Promise<SearchResult[]> {\n try {\n const res = await fetch(`${this.baseUrl}/search?q=${query}&c=currencies&limit=10`);\n if (!res.ok) return [];\n const data = await res.json();\n \n return (data.currencies || []).map((coin: any) => ({\n id: coin.id,\n name: coin.name,\n symbol: coin.symbol.toUpperCase(),\n source: this.name,\n }));\n } catch (e) {\n return [];\n }\n }\n\n async getPrice(symbolOrId: string): Promise<PriceData | null> {\n const info = await this.getTokenInfo(symbolOrId);\n if (!info) return null;\n return {\n symbol: info.symbol,\n priceUsd: info.priceUsd,\n source: this.name,\n lastUpdated: info.lastUpdated,\n };\n }\n\n async getTokenInfo(symbolOrId: string): Promise<TokenInfo | null> {\n try {\n let id = symbolOrId.toLowerCase();\n \n // If it doesn't look like a coinpaprika id (e.g. btc-bitcoin), search for it\n if (!id.includes('-')) {\n const searchRes = await this.search(id);\n const match = searchRes.find(s => s.symbol.toLowerCase() === id || s.id === id);\n if (match && match.id) {\n id = match.id;\n } else if (searchRes.length > 0 && searchRes[0].id) {\n id = searchRes[0].id;\n }\n }\n\n const res = await fetch(`${this.baseUrl}/tickers/${id}`);\n if (!res.ok) return null;\n const data = await res.json();\n \n return {\n name: data.name,\n symbol: data.symbol.toUpperCase(),\n description: data.description,\n priceUsd: data.quotes?.USD?.price || 0,\n marketCap: data.quotes?.USD?.market_cap,\n marketCapRank: data.rank,\n circulatingSupply: data.circulating_supply,\n totalSupply: data.total_supply,\n maxSupply: data.max_supply,\n volume24h: data.quotes?.USD?.volume_24h,\n priceChangePercentage24h: data.quotes?.USD?.percent_change_24h,\n priceChangePercentage7d: data.quotes?.USD?.percent_change_7d,\n ath: data.quotes?.USD?.ath_price,\n athDate: data.quotes?.USD?.ath_date,\n links: {\n website: data.links?.website?.[0],\n twitter: data.links?.twitter?.[0],\n discord: data.links?.discord?.[0],\n github: data.links?.source_code?.[0],\n },\n source: this.name,\n lastUpdated: Date.now(),\n };\n } catch (e) {\n return null;\n }\n }\n}","import { ICryptoProvider, PriceData, SearchResult, TokenInfo } from '../types.js';\n\nexport class CoinCapProvider implements ICryptoProvider {\n name = 'CoinCap';\n private baseUrl = 'https://api.coincap.io/v2';\n\n async search(query: string): Promise<SearchResult[]> {\n try {\n const res = await fetch(`${this.baseUrl}/assets?search=${query}&limit=10`);\n if (!res.ok) return [];\n const data = await res.json();\n \n return (data.data || []).map((coin: any) => ({\n id: coin.id,\n name: coin.name,\n symbol: coin.symbol.toUpperCase(),\n source: this.name,\n }));\n } catch (e) {\n return [];\n }\n }\n\n async getPrice(symbolOrId: string): Promise<PriceData | null> {\n const info = await this.getTokenInfo(symbolOrId);\n if (!info) return null;\n return {\n symbol: info.symbol,\n priceUsd: info.priceUsd,\n source: this.name,\n lastUpdated: info.lastUpdated,\n };\n }\n\n async getTokenInfo(symbolOrId: string): Promise<TokenInfo | null> {\n try {\n let id = symbolOrId.toLowerCase();\n \n const searchRes = await this.search(id);\n const match = searchRes.find(s => s.symbol.toLowerCase() === id || s.id === id);\n if (match && match.id) {\n id = match.id;\n }\n\n const res = await fetch(`${this.baseUrl}/assets/${id}`);\n if (!res.ok) return null;\n const data = await res.json();\n const asset = data.data;\n\n if (!asset) return null;\n\n return {\n name: asset.name,\n symbol: asset.symbol.toUpperCase(),\n priceUsd: parseFloat(asset.priceUsd) || 0,\n marketCap: parseFloat(asset.marketCapUsd),\n volume24h: parseFloat(asset.volumeUsd24Hr),\n source: this.name,\n lastUpdated: Date.now(),\n };\n } catch (e) {\n return null;\n }\n }\n}","import { ICryptoProvider, PriceData, SearchResult, TokenInfo } from '../types.js';\n\nexport class CryptoCompareProvider implements ICryptoProvider {\n name = 'CryptoCompare';\n private baseUrl = 'https://min-api.cryptocompare.com/data';\n\n async search(query: string): Promise<SearchResult[]> {\n // CryptoCompare search is a bit heavy (fetches all coins), so we mock or skip for basic search\n // Returning empty array and letting other providers handle search is better for perf.\n return [];\n }\n\n async getPrice(symbol: string): Promise<PriceData | null> {\n try {\n const sym = symbol.toUpperCase();\n const res = await fetch(`${this.baseUrl}/price?fsym=${sym}&tsyms=USD`);\n if (!res.ok) return null;\n const data = await res.json();\n \n if (data.Response === 'Error' || !data.USD) return null;\n\n return {\n symbol: sym,\n priceUsd: data.USD,\n source: this.name,\n lastUpdated: Date.now(),\n };\n } catch (e) {\n return null;\n }\n }\n\n async getTokenInfo(symbol: string): Promise<TokenInfo | null> {\n try {\n const sym = symbol.toUpperCase();\n const res = await fetch(`${this.baseUrl}/pricemultifull?fsyms=${sym}&tsyms=USD`);\n if (!res.ok) return null;\n const data = await res.json();\n \n if (!data.RAW || !data.RAW[sym] || !data.RAW[sym].USD) return null;\n const raw = data.RAW[sym].USD;\n\n return {\n name: sym, // CryptoCompare doesn't give full name in this endpoint\n symbol: sym,\n priceUsd: raw.PRICE || 0,\n marketCap: raw.MKTCAP,\n volume24h: raw.TOTALVOLUME24HTO,\n source: this.name,\n lastUpdated: Date.now(),\n };\n } catch (e) {\n return null;\n }\n }\n}","import { ChartData, DexPairInfo, GasData, GlobalMarketData, ICryptoProvider, PriceData, SearchResult, SentimentData, TokenInfo, TrendingCoin, TopCoin } from './types.js';\r\nimport { CoinGeckoProvider } from './providers/coingecko.js';\r\nimport { DexScreenerProvider } from './providers/dexscreener.js';\r\nimport { GeckoTerminalProvider } from './providers/geckoterminal.js';\r\nimport { BinanceProvider } from './providers/binance.js';\r\nimport { CoinpaprikaProvider } from './providers/coinpaprika.js';\r\nimport { CoinCapProvider } from './providers/coincap.js';\r\nimport { CryptoCompareProvider } from './providers/cryptocompare.js';\r\n\r\nexport interface CrypullOptions {\r\n providers?: ICryptoProvider[];\r\n}\r\n\r\nexport class Crypull {\r\n public providers: ICryptoProvider[];\r\n \r\n // Standard free providers\r\n private coinGecko = new CoinGeckoProvider();\r\n private dexScreener = new DexScreenerProvider();\r\n private geckoTerminal = new GeckoTerminalProvider();\r\n private binance = new BinanceProvider();\r\n private coinpaprika = new CoinpaprikaProvider();\r\n private coincap = new CoinCapProvider();\r\n private cryptoCompare = new CryptoCompareProvider();\r\n\r\n constructor(options?: CrypullOptions) {\r\n this.providers = options?.providers || [\r\n this.binance,\r\n this.coinGecko,\r\n this.coinpaprika,\r\n this.coincap,\r\n this.dexScreener,\r\n this.geckoTerminal,\r\n this.cryptoCompare\r\n ];\r\n }\r\n\r\n private isAddress(query: string): boolean {\r\n return (query.startsWith('0x') && query.length === 42) || query.length > 30;\r\n }\r\n\r\n /**\r\n * Search for a token or coin across multiple providers in parallel\r\n */\r\n async search(query: string): Promise<SearchResult[]> {\r\n const promises = [\r\n this.coinGecko.search(query),\r\n this.dexScreener.search(query),\r\n this.coinpaprika.search(query),\r\n this.coincap.search(query)\r\n ];\r\n \r\n const results = await Promise.allSettled(promises);\r\n const combined: SearchResult[] = [];\r\n \r\n for (const res of results) {\r\n if (res.status === 'fulfilled' && res.value) {\r\n combined.push(...res.value);\r\n }\r\n }\r\n \r\n // Deduplicate by symbol to keep results clean\r\n const seen = new Set();\r\n return combined.filter(item => {\r\n const key = `${item.symbol}`;\r\n if (seen.has(key)) return false;\r\n seen.add(key);\r\n return true;\r\n });\r\n }\r\n\r\n /**\r\n * Get the current price of a cryptocurrency\r\n * @param query Can be a symbol (e.g., 'BTC') or a contract address\r\n * @param network Optional network for DEX addresses (e.g., 'eth', 'bsc')\r\n */\r\n async price(query: string, network?: string): Promise<PriceData | null> {\r\n if (this.isAddress(query)) {\r\n let res = await this.dexScreener.getPrice(query);\r\n if (res) return res;\r\n \r\n if (network) {\r\n res = await this.geckoTerminal.getPrice(query, network);\r\n if (res) return res;\r\n }\r\n } else {\r\n // Fast top-tier providers first\r\n let res = await this.binance.getPrice(query);\r\n if (res) return res;\r\n\r\n res = await this.coincap.getPrice(query);\r\n if (res) return res;\r\n\r\n res = await this.coinGecko.getPrice(query);\r\n if (res) return res;\r\n\r\n res = await this.coinpaprika.getPrice(query);\r\n if (res) return res;\r\n\r\n res = await this.cryptoCompare.getPrice(query);\r\n if (res) return res;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get detailed token info (market cap, volume, liquidity, etc.)\r\n * @param query Can be a symbol (e.g., 'BTC') or a contract address\r\n * @param network Optional network for DEX addresses\r\n */\r\n async info(query: string, network?: string): Promise<TokenInfo | null> {\r\n if (this.isAddress(query)) {\r\n let res = await this.dexScreener.getTokenInfo(query);\r\n if (res) return res;\r\n\r\n if (network) {\r\n res = await this.geckoTerminal.getTokenInfo(query, network);\r\n if (res) return res;\r\n }\r\n } else {\r\n // Attempt in order of best info\r\n let res = await this.coinGecko.getTokenInfo(query);\r\n if (res) return res;\r\n\r\n res = await this.coinpaprika.getTokenInfo(query);\r\n if (res) return res;\r\n\r\n res = await this.coincap.getTokenInfo(query);\r\n if (res) return res;\r\n\r\n res = await this.binance.getTokenInfo(query);\r\n if (res) return res;\r\n\r\n res = await this.cryptoCompare.getTokenInfo(query);\r\n if (res) return res;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get global market data\r\n */\r\n async market(): Promise<GlobalMarketData | null> {\r\n try {\r\n const res = await fetch(`https://api.coingecko.com/api/v3/global`);\r\n if (!res.ok) return null;\r\n const data = await res.json();\r\n const d = data.data;\r\n\r\n return {\r\n totalMarketCapUsd: d.total_market_cap.usd,\r\n totalVolume24hUsd: d.total_volume.usd,\r\n bitcoinDominancePercentage: d.market_cap_percentage.btc,\r\n ethereumDominancePercentage: d.market_cap_percentage.eth,\r\n activeCryptocurrencies: d.active_cryptocurrencies,\r\n lastUpdated: d.updated_at * 1000,\r\n };\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get trending coins\r\n */\r\n async trending(): Promise<TrendingCoin[]> {\r\n try {\r\n const res = await fetch(`https://api.coingecko.com/api/v3/search/trending`);\r\n if (!res.ok) return [];\r\n const data = await res.json();\r\n\r\n return data.coins.slice(0, 10).map((c: any) => ({\r\n id: c.item.id,\r\n name: c.item.name,\r\n symbol: c.item.symbol.toUpperCase(),\r\n marketCapRank: c.item.market_cap_rank,\r\n priceUsd: c.item.data?.price,\r\n priceChange24h: c.item.data?.price_change_percentage_24h?.usd,\r\n volume24h: c.item.data?.total_volume,\r\n }));\r\n } catch (e) {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Get top 50 coins by market cap\r\n */\r\n async top(): Promise<TopCoin[]> {\r\n try {\r\n const res = await fetch(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=50&page=1&sparkline=false`);\r\n if (!res.ok) return [];\r\n const data = await res.json();\r\n\r\n return data.map((c: any) => ({\r\n id: c.id,\r\n name: c.name,\r\n symbol: c.symbol.toUpperCase(),\r\n marketCapRank: c.market_cap_rank,\r\n priceUsd: c.current_price,\r\n marketCap: c.market_cap,\r\n volume24h: c.total_volume,\r\n priceChange24h: c.price_change_percentage_24h,\r\n }));\r\n } catch (e) {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Get fear and greed index\r\n */\r\n async sentiment(): Promise<SentimentData | null> {\r\n try {\r\n const res = await fetch(`https://api.alternative.me/fng/?limit=1`);\r\n if (!res.ok) return null;\r\n const data = await res.json();\r\n const item = data.data[0];\r\n\r\n return {\r\n value: parseInt(item.value),\r\n classification: item.value_classification,\r\n lastUpdated: parseInt(item.timestamp) * 1000,\r\n };\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get current ethereum gas prices (in Gwei)\r\n */\r\n async gas(): Promise<GasData | null> {\r\n try {\r\n // Using Etherscan public API V2 (rate limited but works for basic usage)\r\n const res = await fetch(`https://api.etherscan.io/v2/api?chainid=1&module=gastracker&action=gasoracle`);\r\n if (!res.ok) return null;\r\n const data = await res.json();\r\n \r\n if (data.status !== '1') return null;\r\n\r\n return {\r\n network: 'Ethereum',\r\n low: parseFloat(data.result.SafeGasPrice),\r\n average: parseFloat(data.result.ProposeGasPrice),\r\n high: parseFloat(data.result.FastGasPrice),\r\n baseFee: parseFloat(data.result.suggestBaseFee),\r\n };\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get historical chart data for a coin\r\n * @param query Coin symbol or ID\r\n * @param days Number of days (e.g. 1, 7, 30)\r\n */\r\n async chart(query: string, days: number = 7): Promise<ChartData | null> {\r\n try {\r\n let id = query.toLowerCase();\r\n // Try to find the correct coingecko ID if a symbol is passed\r\n const searchRes = await this.coinGecko.search(id);\r\n const match = searchRes.find(s => s.symbol.toLowerCase() === id || s.id === id);\r\n if (match && match.id) {\r\n id = match.id;\r\n }\r\n\r\n const res = await fetch(`https://api.coingecko.com/api/v3/coins/${id}/market_chart?vs_currency=usd&days=${days}`);\r\n if (!res.ok) return null;\r\n const data = await res.json();\r\n\r\n if (!data.prices || data.prices.length === 0) return null;\r\n\r\n const prices = data.prices.map((p: any) => p[1]);\r\n const timestamps = data.prices.map((p: any) => p[0]);\r\n\r\n return {\r\n prices,\r\n timestamps,\r\n minPrice: Math.min(...prices),\r\n maxPrice: Math.max(...prices),\r\n };\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n}","export * from './types.js';\nexport * from './Crypull.js';\nexport * from './providers/coingecko.js';\nexport * from './providers/dexscreener.js';\nexport * from './providers/geckoterminal.js';\nexport * from './providers/binance.js';\nexport * from './providers/coinpaprika.js';\nexport * from './providers/coincap.js';\nexport * from './providers/cryptocompare.js';\n\nimport { Crypull } from './Crypull.js';\n\n// Export a default instance for quick usage\nexport const crypull = new Crypull();\n","#!/usr/bin/env node\r\nimport { Command } from 'commander';\r\nimport pc from 'picocolors';\r\nimport * as asciichart from 'asciichart';\r\nimport { crypull } from './index.js';\r\nimport { intro, outro, select, text, isCancel } from '@clack/prompts';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('crypull')\r\n .description('A human-friendly CLI to fetch crypto prices and info from multiple providers')\r\n .version('1.0.1');\r\n\r\nconst handlePrice = async (query: string) => {\r\n console.log(pc.cyan(`\\nFetching price for ${pc.bold(query)}...`));\r\n \r\n const data = await crypull.price(query);\r\n \r\n if (!data) {\r\n console.log(pc.red(`\\n✖ Could not find price for \"${query}\".`));\r\n return;\r\n }\r\n\r\n console.log(pc.green(`\\n✔ Success! Found via ${pc.bold(data.source)}`));\r\n console.log(pc.white(`----------------------------------------`));\r\n console.log(`${pc.gray('Symbol:')} ${pc.yellow(pc.bold(data.symbol))}`);\r\n console.log(`${pc.gray('Price:')} ${pc.green('$' + data.priceUsd.toLocaleString(undefined, { maximumFractionDigits: 6 }))}`);\r\n console.log(`${pc.gray('Updated:')} ${new Date(data.lastUpdated).toLocaleTimeString()}`);\r\n console.log(pc.white(`----------------------------------------\\n`));\r\n};\r\n\r\nconst handleInfo = async (query: string) => {\r\n console.log(pc.cyan(`\\nFetching detailed info for ${pc.bold(query)}...`));\r\n \r\n const data = await crypull.info(query);\r\n \r\n if (!data) {\r\n console.log(pc.red(`\\n✖ Could not find info for \"${query}\".`));\r\n return;\r\n }\r\n\r\n console.log(pc.green(`\\n✔ Success! Found via ${pc.bold(data.source)}`));\r\n console.log(pc.white(`----------------------------------------`));\r\n console.log(`${pc.gray('Name:')} ${pc.white(pc.bold(data.name))}`);\r\n console.log(`${pc.gray('Symbol:')} ${pc.yellow(pc.bold(data.symbol))}`);\r\n console.log(`${pc.gray('Price:')} ${pc.green('$' + data.priceUsd.toLocaleString(undefined, { maximumFractionDigits: 6 }))}`);\r\n \r\n if (data.marketCap) {\r\n console.log(`${pc.gray('MarketCap:')} ${pc.white('$' + data.marketCap.toLocaleString())}`);\r\n }\r\n if (data.marketCapRank) {\r\n console.log(`${pc.gray('Rank:')} ${pc.magenta('#' + data.marketCapRank)}`);\r\n }\r\n if (data.fdv) {\r\n console.log(`${pc.gray('FDV:')} ${pc.white('$' + data.fdv.toLocaleString())}`);\r\n }\r\n if (data.circulatingSupply) {\r\n console.log(`${pc.gray('Circ. Sup:')} ${pc.white(data.circulatingSupply.toLocaleString())}`);\r\n }\r\n if (data.totalSupply) {\r\n console.log(`${pc.gray('Total Sup:')} ${pc.white(data.totalSupply.toLocaleString())}`);\r\n }\r\n if (data.maxSupply) {\r\n console.log(`${pc.gray('Max Sup:')} ${pc.white(data.maxSupply.toLocaleString())}`);\r\n }\r\n if (data.volume24h) {\r\n console.log(`${pc.gray('24h Vol:')} ${pc.white('$' + data.volume24h.toLocaleString())}`);\r\n }\r\n if (data.priceChangePercentage24h !== undefined) {\r\n const pc24 = data.priceChangePercentage24h;\r\n const color = pc24 >= 0 ? pc.green : pc.red;\r\n console.log(`${pc.gray('24h %:')} ${color(pc24.toFixed(2) + '%')}`);\r\n }\r\n if (data.liquidityUsd) {\r\n console.log(`${pc.gray('Liquidity:')} ${pc.white('$' + data.liquidityUsd.toLocaleString())}`);\r\n }\r\n if (data.ath) {\r\n console.log(`${pc.gray('ATH:')} ${pc.green('$' + data.ath.toLocaleString())} ${data.athDate ? pc.gray(`(${new Date(data.athDate).toLocaleDateString()})`) : ''}`);\r\n }\r\n if (data.atl) {\r\n console.log(`${pc.gray('ATL:')} ${pc.red('$' + data.atl.toLocaleString())} ${data.atlDate ? pc.gray(`(${new Date(data.atlDate).toLocaleDateString()})`) : ''}`);\r\n }\r\n if (data.network) {\r\n console.log(`${pc.gray('Network:')} ${pc.magenta(data.network)}`);\r\n }\r\n if (data.address) {\r\n console.log(`${pc.gray('Address:')} ${pc.gray(data.address)}`);\r\n }\r\n\r\n if (data.links && Object.values(data.links).some(l => !!l)) {\r\n console.log(pc.white(`\\n--- Links ---`));\r\n if (data.links.website) console.log(`${pc.gray('Website:')} ${pc.blue(data.links.website)}`);\r\n if (data.links.twitter) console.log(`${pc.gray('Twitter:')} ${pc.blue(data.links.twitter)}`);\r\n if (data.links.telegram) console.log(`${pc.gray('Telegram:')} ${pc.blue(data.links.telegram)}`);\r\n if (data.links.discord) console.log(`${pc.gray('Discord:')} ${pc.blue(data.links.discord)}`);\r\n if (data.links.github) console.log(`${pc.gray('GitHub:')} ${pc.blue(data.links.github)}`);\r\n }\r\n\r\n if (data.description && data.description.length > 0) {\r\n console.log(pc.white(`\\n--- Description ---`));\r\n // Truncate to 300 chars to not flood terminal\r\n const desc = data.description.replace(/(<([^>]+)>)/gi, \"\"); // strip html\r\n const truncated = desc.length > 300 ? desc.substring(0, 300) + '...' : desc;\r\n console.log(pc.gray(truncated));\r\n }\r\n\r\n if (data.pairs && data.pairs.length > 0) {\r\n console.log(pc.white(`\\n--- Top Trading Pairs ---`));\r\n data.pairs.slice(0, 5).forEach((p, i) => {\r\n const title = `${p.baseTokenSymbol}/${p.quoteTokenSymbol}`;\r\n const priceStr = p.priceUsd ? `$${p.priceUsd.toLocaleString(undefined, { maximumFractionDigits: 6 })}` : 'N/A';\r\n const volStr = p.volume24h ? `$${p.volume24h.toLocaleString(undefined, { maximumFractionDigits: 0 })}` : 'N/A';\r\n console.log(`${pc.blue(String(i + 1) + '.')} ${pc.yellow(title.padEnd(12, ' '))} | ${pc.green(priceStr.padEnd(12, ' '))} | Vol: ${pc.white(volStr)} | DEX: ${pc.magenta(p.dexId)}`);\r\n });\r\n }\r\n \r\n console.log(pc.white(`\\n----------------------------------------`));\r\n console.log(`${pc.gray('Updated:')} ${new Date(data.lastUpdated).toLocaleTimeString()}`);\r\n console.log(pc.white(`----------------------------------------\\n`));\r\n};\r\n\r\nconst handleTop = async () => {\r\n console.log(pc.cyan(`\\nFetching top 50 cryptocurrencies...`));\r\n \r\n const results = await crypull.top();\r\n \r\n if (!results || results.length === 0) {\r\n console.log(pc.red(`\\n✖ Could not fetch top coins at this time.`));\r\n return;\r\n }\r\n\r\n console.log(pc.green(`\\n✔ Top 50 Cryptocurrencies:`));\r\n console.log(pc.white(`----------------------------------------`));\r\n \r\n results.forEach((res, i) => {\r\n const priceStr = res.priceUsd ? `$${res.priceUsd.toLocaleString(undefined, { maximumFractionDigits: 6 })}` : 'N/A';\r\n const mcapStr = res.marketCap ? `$${res.marketCap.toLocaleString()}` : 'N/A';\r\n \r\n let changeStr = '';\r\n if (res.priceChange24h !== undefined && res.priceChange24h !== null) {\r\n const color = res.priceChange24h >= 0 ? pc.green : pc.red;\r\n changeStr = color(`(${res.priceChange24h >= 0 ? '+' : ''}${res.priceChange24h.toFixed(2)}%)`);\r\n }\r\n \r\n console.log(`${pc.blue(String(i + 1).padStart(2, ' '))}. ${pc.yellow(pc.bold(res.symbol.padEnd(8, ' ')))} | ${pc.green(priceStr.padEnd(12, ' '))} ${changeStr.padEnd(15, ' ')} | Mcap: ${pc.white(mcapStr)}`);\r\n });\r\n \r\n console.log(pc.white(`----------------------------------------\\n`));\r\n};\r\n\r\nconst handleSearch = async (query: string) => {\r\n console.log(pc.cyan(`\\nSearching for ${pc.bold(query)}...`));\r\n \r\n const results = await crypull.search(query);\r\n \r\n if (!results || results.length === 0) {\r\n console.log(pc.red(`\\n✖ No results found for \"${query}\".`));\r\n return;\r\n }\r\n\r\n console.log(pc.green(`\\n✔ Found ${results.length} results:`));\r\n console.log(pc.white(`----------------------------------------`));\r\n \r\n results.forEach((res, i) => {\r\n console.log(`${pc.blue(String(i + 1).padStart(2, ' '))}. ${pc.yellow(pc.bold(res.symbol.padEnd(8, ' ')))} | ${pc.white(res.name)} ${pc.gray(`(via ${res.source})`)}`);\r\n if (res.network) {\r\n console.log(` ${pc.gray('Network:')} ${pc.magenta(res.network)}`);\r\n }\r\n if (res.id && res.id.length > 20) {\r\n console.log(` ${pc.gray('Address:')} ${pc.gray(res.id)}`);\r\n }\r\n });\r\n \r\n console.log(pc.white(`----------------------------------------\\n`));\r\n};\r\n\r\nconst handleTrending = async () => {\r\n console.log(pc.cyan(`\\nFetching top trending coins...`));\r\n \r\n const results = await crypull.trending();\r\n \r\n if (!results || results.length === 0) {\r\n console.log(pc.red(`\\n✖ Could not fetch trending data at this time.`));\r\n return;\r\n }\r\n\r\n console.log(pc.green(`\\n✔ Top 10 Trending Coins:`));\r\n console.log(pc.white(`----------------------------------------`));\r\n \r\n results.forEach((res, i) => {\r\n const priceStr = res.priceUsd ? `$${res.priceUsd.toLocaleString(undefined, { maximumFractionDigits: 6 })}` : 'N/A';\r\n let changeStr = '';\r\n if (res.priceChange24h !== undefined) {\r\n const color = res.priceChange24h >= 0 ? pc.green : pc.red;\r\n changeStr = color(`(${res.priceChange24h >= 0 ? '+' : ''}${res.priceChange24h.toFixed(2)}%)`);\r\n }\r\n const rankStr = res.marketCapRank ? pc.magenta(`#${res.marketCapRank}`) : '';\r\n \r\n console.log(`${pc.blue(String(i + 1).padStart(2, ' '))}. ${pc.yellow(pc.bold(res.symbol.padEnd(8, ' ')))} | ${pc.green(priceStr.padEnd(12, ' '))} ${changeStr.padEnd(15, ' ')} | ${rankStr}`);\r\n });\r\n \r\n console.log(pc.white(`----------------------------------------\\n`));\r\n};\r\n\r\nconst handleMarket = async () => {\r\n console.log(pc.cyan(`\\nFetching global market data...`));\r\n \r\n const data = await crypull.market();\r\n \r\n if (!data) {\r\n console.log(pc.red(`\\n✖ Could not fetch global market data at this time.`));\r\n return;\r\n }\r\n\r\n console.log(pc.green(`\\n✔ Global Market Overview:`));\r\n console.log(pc.white(`----------------------------------------`));\r\n console.log(`${pc.gray('Total Market Cap:')} ${pc.white('$' + data.totalMarketCapUsd.toLocaleString())}`);\r\n console.log(`${pc.gray('24h Volume:')} ${pc.white('$' + data.totalVolume24hUsd.toLocaleString())}`);\r\n console.log(`${pc.gray('BTC Dominance:')} ${pc.yellow(data.bitcoinDominancePercentage.toFixed(2) + '%')}`);\r\n console.log(`${pc.gray('ETH Dominance:')} ${pc.blue(data.ethereumDominancePercentage.toFixed(2) + '%')}`);\r\n console.log(`${pc.gray('Active Coins:')} ${pc.white(data.activeCryptocurrencies.toLocaleString())}`);\r\n console.log(pc.white(`----------------------------------------`));\r\n console.log(`${pc.gray('Updated:')} ${new Date(data.lastUpdated).toLocaleTimeString()}`);\r\n console.log(pc.white(`----------------------------------------\\n`));\r\n};\r\n\r\nconst handleSentiment = async () => {\r\n console.log(pc.cyan(`\\nFetching Fear & Greed Index...`));\r\n \r\n const data = await crypull.sentiment();\r\n \r\n if (!data) {\r\n console.log(pc.red(`\\n✖ Could not fetch sentiment data at this time.`));\r\n return;\r\n }\r\n\r\n const value = data.value;\r\n let color = pc.white;\r\n if (value <= 25) color = pc.red;\r\n else if (value <= 45) color = pc.yellow;\r\n else if (value <= 55) color = pc.white;\r\n else if (value <= 75) color = pc.green;\r\n else color = pc.blue;\r\n\r\n console.log(pc.green(`\\n✔ Current Market Sentiment:`));\r\n console.log(pc.white(`----------------------------------------`));\r\n console.log(`${pc.gray('Score:')} ${color(pc.bold(value.toString()) + ' / 100')}`);\r\n console.log(`${pc.gray('Classification:')} ${color(pc.bold(data.classification))}`);\r\n console.log(pc.white(`----------------------------------------\\n`));\r\n};\r\n\r\nconst handleGas = async () => {\r\n console.log(pc.cyan(`\\nFetching network gas prices...`));\r\n \r\n const data = await crypull.gas();\r\n \r\n if (!data) {\r\n console.log(pc.red(`\\n✖ Could not fetch gas prices at this time.`));\r\n return;\r\n }\r\n\r\n console.log(pc.green(`\\n✔ ${data.network} Gas Tracker (Gwei):`));\r\n console.log(pc.white(`----------------------------------------`));\r\n console.log(`${pc.gray('Low (Safe):')} ${pc.green(data.low + ' gwei')}`);\r\n console.log(`${pc.gray('Average:')} ${pc.yellow(data.average + ' gwei')}`);\r\n console.log(`${pc.gray('High (Fast):')} ${pc.red(data.high + ' gwei')}`);\r\n if (data.baseFee) {\r\n console.log(`${pc.gray('Base Fee:')} ${pc.white(data.baseFee + ' gwei')}`);\r\n }\r\n console.log(pc.white(`----------------------------------------\\n`));\r\n};\r\n\r\nconst handleChart = async (query: string, options: { days: string }) => {\r\n const days = parseInt(options.days) || 7;\r\n console.log(pc.cyan(`\\nFetching ${days}-day chart data for ${pc.bold(query)}...`));\r\n \r\n const data = await crypull.chart(query, days);\r\n \r\n if (!data || !data.prices || data.prices.length === 0) {\r\n console.log(pc.red(`\\n✖ Could not fetch chart data for \"${query}\". Note: Charts may only be available for major coins.`));\r\n return;\r\n }\r\n\r\n // Determine color based on price action\r\n const firstPrice = data.prices[0];\r\n const lastPrice = data.prices[data.prices.length - 1];\r\n const isUp = lastPrice >= firstPrice;\r\n \r\n const chartConfig = {\r\n colors: [isUp ? asciichart.lightgreen : asciichart.lightred],\r\n height: 10\r\n };\r\n\r\n console.log(pc.green(`\\n✔ ${days}-Day Chart for ${query.toUpperCase()}:`));\r\n console.log(pc.gray(`Min: $${data.minPrice.toLocaleString(undefined, { maximumFractionDigits: 6 })} | Max: $${data.maxPrice.toLocaleString(undefined, { maximumFractionDigits: 6 })}`));\r\n console.log(pc.white(`\\n` + asciichart.plot(data.prices, chartConfig) + `\\n`));\r\n};\r\n\r\nconst handleDonate = () => {\r\n console.log(pc.cyan(`\\n💖 Support the development of crypull:`));\r\n console.log(pc.white(`----------------------------------------`));\r\n console.log(`${pc.yellow('BTC:')} ${pc.white('bc1qj4zt3lva4r68xspayg0p8s4hyg40nhjz8fuhqq')}`);\r\n console.log(`${pc.blue('EVM (All):')} ${pc.white('0x63a875d0c4Dad8E18B95D844caE6FF915dF0a2BD')}`);\r\n console.log(`${pc.green('Solana:')} ${pc.white('8J5VvZu6ayQa4XnSAAzx4YX3QsXYyyNrP4Zr7JEx1KFY')}`);\r\n console.log(`${pc.red('TRX:')} ${pc.white('TPgZSrHUhKdjyMwaGd15utJvsbk85oBbit')}`);\r\n console.log(pc.white(`----------------------------------------\\n`));\r\n};\r\n\r\n// Register commands\r\nprogram\r\n .command('price <query>')\r\n .description('Get the current price of a cryptocurrency (symbol or contract address)')\r\n .action(handlePrice);\r\n\r\nprogram\r\n .command('info <query>')\r\n .description('Get detailed info about a cryptocurrency (market cap, volume, FDV, etc.)')\r\n .action(handleInfo);\r\n\r\nprogram\r\n .command('top')\r\n .description('Show top 50 cryptocurrencies by market cap')\r\n .action(handleTop);\r\n\r\nprogram\r\n .command('search <query>')\r\n .description('Search for tokens or coins across multiple providers')\r\n .action(handleSearch);\r\n\r\nprogram\r\n .command('trending')\r\n .description('Show top 10 trending coins/tokens right now')\r\n .action(handleTrending);\r\n\r\nprogram\r\n .command('market')\r\n .description('Show global cryptocurrency market overview')\r\n .action(handleMarket);\r\n\r\nprogram\r\n .command('sentiment')\r\n .description('Show current Crypto Fear & Greed Index')\r\n .action(handleSentiment);\r\n\r\nprogram\r\n .command('gas')\r\n .description('Show current Ethereum network gas prices')\r\n .action(handleGas);\r\n\r\nprogram\r\n .command('chart <query>')\r\n .description('Draw a terminal ASCII chart of historical prices')\r\n .option('-d, --days <days>', 'Number of days to chart', '7')\r\n .action(handleChart);\r\n\r\nprogram\r\n .command('donate')\r\n .description('Show donation addresses to support development')\r\n .action(handleDonate);\r\n\r\nasync function interactiveMode() {\r\n console.clear();\r\n intro(pc.bgCyan(pc.black(' crypull CLI ')));\r\n\r\n while (true) {\r\n const action = await select({\r\n message: 'What would you like to do?',\r\n options: [\r\n { value: 'price', label: '💰 Get token price' },\r\n { value: 'info', label: 'ℹ️ Get detailed token info' },\r\n { value: 'top', label: '🏆 Show top 50 cryptocurrencies' },\r\n { value: 'search', label: '🔍 Search for a token' },\r\n { value: 'trending', label: '🔥 Show trending coins' },\r\n { value: 'market', label: '🌍 Show global market overview' },\r\n { value: 'sentiment', label: '🎭 Show Fear & Greed Index' },\r\n { value: 'gas', label: '⛽ Show ETH gas prices' },\r\n { value: 'chart', label: '📈 Show historical price chart' },\r\n { value: 'donate', label: '💖 Donate / Support' },\r\n { value: 'exit', label: '❌ Exit' },\r\n ]\r\n });\r\n\r\n if (isCancel(action) || action === 'exit') {\r\n outro('Goodbye!');\r\n process.exit(0);\r\n }\r\n\r\n if (['price', 'info', 'search', 'chart'].includes(action as string)) {\r\n const query = await text({\r\n message: 'Enter token symbol or contract address:',\r\n placeholder: 'e.g., btc, ethereum, 0x...',\r\n validate: (value) => {\r\n if (!value) return 'Please enter a valid query.';\r\n }\r\n });\r\n\r\n if (isCancel(query)) {\r\n outro('Goodbye!');\r\n process.exit(0);\r\n }\r\n \r\n if (action === 'price') await handlePrice(query as string);\r\n else if (action === 'info') await handleInfo(query as string);\r\n else if (action === 'search') await handleSearch(query as string);\r\n else if (action === 'chart') {\r\n const days = await text({\r\n message: 'Enter number of days for the chart (default 7):',\r\n placeholder: '7',\r\n defaultValue: '7'\r\n });\r\n if (isCancel(days)) {\r\n outro('Goodbye!');\r\n process.exit(0);\r\n }\r\n await handleChart(query as string, { days: days as string });\r\n }\r\n } else {\r\n if (action === 'top') await handleTop();\r\n else if (action === 'trending') await handleTrending();\r\n else if (action === 'market') await handleMarket();\r\n else if (action === 'sentiment') await handleSentiment();\r\n else if (action === 'gas') await handleGas();\r\n else if (action === 'donate') handleDonate();\r\n }\r\n \r\n console.log(pc.gray('\\n---\\n'));\r\n }\r\n}\r\n\r\nif (process.argv.length <= 2) {\r\n // Run interactive mode\r\n interactiveMode().catch((err) => {\r\n console.error(pc.red('An error occurred:'), err);\r\n process.exit(1);\r\n });\r\n} else {\r\n // Use commander parsing\r\n program.parse(process.argv);\r\n}\r\n"]}