| |
| |
| |
| |
| |
|
|
| export const API_REGISTRY = { |
| |
| |
| |
| market: { |
| coingecko: { |
| name: 'CoinGecko', |
| url: 'https://api.coingecko.com/api/v3', |
| auth: { type: 'none' }, |
| endpoints: { |
| prices: '/simple/price?ids={ids}&vs_currencies=usd,eur,gbp', |
| markets: '/coins/markets?vs_currency=usd&per_page=250&order=market_cap_desc', |
| trending: '/search/trending', |
| chart: '/coins/{id}/market_chart?vs_currency=usd&days={days}', |
| global: '/global' |
| }, |
| rateLimit: '10-50 calls/min', |
| priority: 1 |
| }, |
| binance: { |
| name: 'Binance', |
| url: 'https://api.binance.com/api/v3', |
| auth: { type: 'none' }, |
| endpoints: { |
| ticker24h: '/ticker/24hr?symbol={symbol}', |
| price: '/ticker/price?symbol={symbol}', |
| klines: '/klines?symbol={symbol}&interval={interval}&limit=1000', |
| exchangeInfo: '/exchangeInfo' |
| }, |
| rateLimit: '1200 requests per minute', |
| priority: 1 |
| }, |
| coinmarketcap: { |
| name: 'CoinMarketCap', |
| url: 'https://pro-api.coinmarketcap.com/v1', |
| auth: { type: 'api_key', param_name: 'X-CMC_PRO_API_KEY' }, |
| key: '04cf4b5b-9868-465c-8ba0-9f2e78c92eb1', |
| endpoints: { |
| latest: '/cryptocurrency/quotes/latest?symbol={symbol}&convert=USD', |
| listings: '/cryptocurrency/listings/latest?limit=100&convert=USD', |
| map: '/cryptocurrency/map' |
| }, |
| rateLimit: '333 calls/day (free)', |
| priority: 2 |
| }, |
| cryptoCompare: { |
| name: 'CryptoCompare', |
| url: 'https://min-api.cryptocompare.com/data', |
| auth: { type: 'none' }, |
| endpoints: { |
| price: '/pricemulti?fsyms={symbols}&tsyms=USD,EUR', |
| historical: '/histoday?fsym={from}&tsym={to}&limit=2000', |
| mining: '/mining/equipment' |
| }, |
| rateLimit: '200 req/min', |
| priority: 2 |
| }, |
| coinpaprika: { |
| name: 'CoinPaprika', |
| url: 'https://api.coinpaprika.com/v1', |
| auth: { type: 'none' }, |
| endpoints: { |
| tickers: '/tickers', |
| coins: '/coins', |
| coin: '/coins/{id}', |
| markets: '/coins/{id}/markets' |
| }, |
| rateLimit: 'Unlimited', |
| priority: 2 |
| }, |
| coincap: { |
| name: 'CoinCap', |
| url: 'https://api.coincap.io/v2', |
| auth: { type: 'none' }, |
| endpoints: { |
| assets: '/assets?limit=2000', |
| asset: '/assets/{id}', |
| history: '/assets/{id}/history?interval=d1&limit=365', |
| markets: '/markets?exchangeId={id}&limit=2000' |
| }, |
| rateLimit: 'Unlimited', |
| priority: 1 |
| } |
| }, |
|
|
| |
| |
| |
| explorers: { |
| etherscan: { |
| name: 'Etherscan', |
| url: 'https://api.etherscan.io/api', |
| auth: { type: 'api_key', param_name: 'apikey' }, |
| key: 'SZHYFZK2RR8H9TIMJBVW54V4H81K2Z2KR2', |
| chain: 'ethereum', |
| endpoints: { |
| balance: '?module=account&action=balance&address={address}', |
| transactions: '?module=account&action=txlist&address={address}', |
| gasPrice: '?module=gastracker&action=gasoracle', |
| tokenInfo: '?module=token&action=tokeninfo&contractaddress={contract}' |
| }, |
| rateLimit: '5 calls/sec', |
| priority: 1 |
| }, |
| bscscan: { |
| name: 'BscScan', |
| url: 'https://api.bscscan.com/api', |
| auth: { type: 'api_key', param_name: 'apikey' }, |
| key: 'K62RKHGXTDCG53RU4MCG6XABIMJKTN19IT', |
| chain: 'bsc', |
| endpoints: { |
| balance: '?module=account&action=balance&address={address}', |
| tokenBalance: '?module=account&action=tokenbalance&address={address}' |
| }, |
| priority: 1 |
| }, |
| polygonscan: { |
| name: 'PolygonScan', |
| url: 'https://api.polygonscan.com/api', |
| auth: { type: 'api_key', param_name: 'apikey' }, |
| chain: 'polygon', |
| endpoints: { |
| balance: '?module=account&action=balance&address={address}' |
| }, |
| priority: 1 |
| }, |
| trongrid: { |
| name: 'TronGrid', |
| url: 'https://api.trongrid.io', |
| auth: { type: 'none' }, |
| chain: 'tron', |
| endpoints: { |
| account: '/wallet/getaccount', |
| balance: '/wallet/getbalance', |
| transactions: '/wallet/gettransactioncount' |
| }, |
| priority: 1 |
| }, |
| ethplorer: { |
| name: 'Ethplorer', |
| url: 'https://api.ethplorer.io', |
| auth: { type: 'api_key', param_name: 'apiKey', key: 'freekey' }, |
| chain: 'ethereum', |
| endpoints: { |
| address: '/getAddressInfo/{address}?apiKey=freekey', |
| token: '/getTokenInfo/{token}?apiKey=freekey', |
| tokenHistory: '/getTokenHistory/{token}?apiKey=freekey' |
| }, |
| priority: 2 |
| } |
| }, |
|
|
| |
| |
| |
| news: { |
| cryptopanic: { |
| name: 'CryptoPanic', |
| url: 'https://cryptopanic.com/api/v1', |
| auth: { type: 'none' }, |
| endpoints: { |
| posts: '/posts/?auth_token={token}', |
| currency: '/posts/?currencies={symbol}&auth_token={token}' |
| }, |
| priority: 1 |
| }, |
| newsapi: { |
| name: 'NewsAPI', |
| url: 'https://newsapi.org/v2', |
| auth: { type: 'api_key', param_name: 'apiKey' }, |
| key: 'pub_346789abc123def456789ghi012345jkl', |
| endpoints: { |
| everything: '/everything?q={query}&sortBy=publishedAt&apiKey={key}', |
| headlines: '/top-headlines?category=business&apiKey={key}' |
| }, |
| priority: 1 |
| }, |
| cryptocontrol: { |
| name: 'CryptoControl', |
| url: 'https://cryptocontrol.io/api/v1/public', |
| auth: { type: 'none' }, |
| endpoints: { |
| local: '/news/local?language=EN', |
| latest: '/news?latest=true' |
| }, |
| priority: 2 |
| }, |
| coindesk: { |
| name: 'CoinDesk RSS', |
| url: 'https://www.coindesk.com/arc/outboundfeeds/rss/', |
| auth: { type: 'none' }, |
| type: 'rss', |
| priority: 2 |
| } |
| }, |
|
|
| |
| |
| |
| sentiment: { |
| fearAndGreed: { |
| name: 'Fear & Greed Index', |
| url: 'https://api.alternative.me/fng/', |
| auth: { type: 'none' }, |
| endpoints: { |
| latest: '?limit=1', |
| history: '?limit=30', |
| date: '?date={date}&date_format=world' |
| }, |
| priority: 1 |
| }, |
| lunarcrush: { |
| name: 'LunarCrush', |
| url: 'https://api.lunarcrush.com/v2', |
| auth: { type: 'api_key', param_name: 'key' }, |
| endpoints: { |
| assets: '?data=assets&key={key}', |
| market: '?data=market&key={key}', |
| influencers: '?data=influencers&key={key}' |
| }, |
| priority: 1 |
| }, |
| santiment: { |
| name: 'Santiment', |
| url: 'https://api.santiment.net/graphql', |
| auth: { type: 'graphql' }, |
| endpoints: { |
| sentiment: 'query sentiment' |
| }, |
| priority: 2 |
| }, |
| cryptoquant: { |
| name: 'CryptoQuant', |
| url: 'https://api.cryptoquant.com/v1', |
| auth: { type: 'api_key' }, |
| endpoints: { |
| onchain: '/on-chain/all/transactions' |
| }, |
| priority: 2 |
| } |
| }, |
|
|
| |
| |
| |
| aiModels: { |
| sentiment: [ |
| { |
| id: 'crypto_bert', |
| name: 'CryptoBERT', |
| url: 'kk08/CryptoBERT', |
| task: 'sentiment', |
| language: 'cryptocurrency' |
| }, |
| { |
| id: 'finbert', |
| name: 'FinBERT', |
| url: 'ProsusAI/finbert', |
| task: 'sentiment', |
| language: 'financial' |
| }, |
| { |
| id: 'twitter_roberta', |
| name: 'Twitter RoBERTa', |
| url: 'cardiffnlp/twitter-roberta-base-sentiment-latest', |
| task: 'sentiment', |
| language: 'social' |
| }, |
| { |
| id: 'fintwitbert', |
| name: 'FinTwitBERT', |
| url: 'StephanAkkerman/FinTwitBERT-sentiment', |
| task: 'sentiment', |
| language: 'financial-social' |
| } |
| ], |
| trading: [ |
| { |
| id: 'crypto_trader_lm', |
| name: 'CryptoTrader LM', |
| url: 'agarkovv/CryptoTrader-LM', |
| task: 'trading-signals' |
| } |
| ], |
| summarization: [ |
| { |
| id: 'crypto_news_summarizer', |
| name: 'Crypto News Summarizer', |
| url: 'FurkanGozukara/Crypto-Financial-News-Summarizer', |
| task: 'summarization' |
| } |
| ], |
| generation: [ |
| { |
| id: 'crypto_gpt', |
| name: 'Crypto GPT O3 Mini', |
| url: 'OpenC/crypto-gpt-o3-mini', |
| task: 'text-generation' |
| } |
| ] |
| }, |
|
|
| |
| |
| |
| whaleTracking: { |
| whaleAlert: { |
| name: 'Whale Alert', |
| url: 'https://api.whale-alert.io/v1', |
| auth: { type: 'api_key', param_name: 'api_key' }, |
| endpoints: { |
| transactions: '/transactions?api_key={key}&min_value=1000000', |
| transactionsByTime: '/transactions?api_key={key}&start={timestamp}' |
| }, |
| priority: 1 |
| }, |
| nansen: { |
| name: 'Nansen', |
| url: 'https://api.nansen.ai/v1', |
| auth: { type: 'api_key' }, |
| endpoints: { |
| smartMoney: '/smart-money', |
| whaleWatching: '/whale-watching' |
| }, |
| priority: 2 |
| } |
| }, |
|
|
| |
| |
| |
| onchain: { |
| glassnode: { |
| name: 'Glassnode', |
| url: 'https://api.glassnode.com/v1', |
| auth: { type: 'api_key', param_name: 'api_key' }, |
| endpoints: { |
| addresses: '/metrics/addresses/active_count', |
| transactions: '/metrics/transactions/count', |
| volume: '/metrics/spot_trading_volume' |
| }, |
| priority: 1 |
| }, |
| covalent: { |
| name: 'Covalent', |
| url: 'https://api.covalenthq.com/v1', |
| auth: { type: 'api_key', param_name: 'key' }, |
| endpoints: { |
| balances: '/{chainId}/address/{address}/balances_v2/?key={key}', |
| tokenHolders: '/{chainId}/tokens/{address}/token_holders/?key={key}', |
| transactions: '/{chainId}/address/{address}/transactions_v2/?key={key}' |
| }, |
| priority: 1 |
| }, |
| theGraph: { |
| name: 'The Graph', |
| url: 'https://api.thegraph.com/subgraphs', |
| auth: { type: 'none' }, |
| endpoints: { |
| uniswap: '/graphql?query={uniswap-query}' |
| }, |
| priority: 2 |
| }, |
| bitquery: { |
| name: 'Bitquery', |
| url: 'https://graphql.bitquery.io', |
| auth: { type: 'graphql' }, |
| endpoints: { |
| trades: 'query trades' |
| }, |
| priority: 2 |
| } |
| }, |
|
|
| |
| |
| |
| defi: { |
| uniswap: { |
| name: 'Uniswap', |
| url: 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', |
| type: 'subgraph' |
| }, |
| aave: { |
| name: 'Aave', |
| url: 'https://api.thegraph.com/subgraphs/name/aave/protocol-v2', |
| type: 'subgraph' |
| }, |
| curve: { |
| name: 'Curve', |
| url: 'https://api.curve.fi/api/pools' |
| }, |
| yearn: { |
| name: 'Yearn', |
| url: 'https://ydaemon.yearn.fi/1/vaults' |
| } |
| }, |
|
|
| |
| |
| |
| rpc: { |
| ethereum: [ |
| { |
| name: 'Infura', |
| url: 'https://mainnet.infura.io/v3/{PROJECT_ID}', |
| priority: 1 |
| }, |
| { |
| name: 'Alchemy', |
| url: 'https://eth-mainnet.g.alchemy.com/v2/{API_KEY}', |
| priority: 1 |
| }, |
| { |
| name: 'Ankr', |
| url: 'https://rpc.ankr.com/eth', |
| priority: 2 |
| }, |
| { |
| name: 'PublicNode', |
| url: 'https://ethereum.publicnode.com', |
| priority: 2 |
| }, |
| { |
| name: 'Cloudflare', |
| url: 'https://cloudflare-eth.com', |
| priority: 3 |
| } |
| ], |
| bsc: [ |
| { |
| name: 'BSC Official', |
| url: 'https://bsc-dataseed.binance.org', |
| priority: 1 |
| }, |
| { |
| name: 'Ankr', |
| url: 'https://rpc.ankr.com/bsc', |
| priority: 1 |
| }, |
| { |
| name: 'PublicNode', |
| url: 'https://bsc-rpc.publicnode.com', |
| priority: 2 |
| } |
| ], |
| polygon: [ |
| { |
| name: 'Polygon Official', |
| url: 'https://polygon-rpc.com', |
| priority: 1 |
| }, |
| { |
| name: 'Ankr', |
| url: 'https://rpc.ankr.com/polygon', |
| priority: 1 |
| }, |
| { |
| name: 'PublicNode', |
| url: 'https://polygon-bor-rpc.publicnode.com', |
| priority: 2 |
| } |
| ], |
| tron: [ |
| { |
| name: 'TronGrid', |
| url: 'https://api.trongrid.io', |
| priority: 1 |
| }, |
| { |
| name: 'TronStack', |
| url: 'https://api.tronstack.io', |
| priority: 2 |
| } |
| ] |
| }, |
|
|
| |
| |
| |
| corsProxies: [] |
| }; |
|
|
| |
| |
| |
| export const DATA_SOURCE_CATEGORIES = [ |
| { |
| name: 'Market Data', |
| count: 6, |
| sources: ['CoinGecko', 'Binance', 'CoinMarketCap', 'CryptoCompare', 'CoinPaprika', 'CoinCap'] |
| }, |
| { |
| name: 'Blockchain Explorers', |
| count: 5, |
| sources: ['Etherscan', 'BscScan', 'PolygonScan', 'TronGrid', 'Ethplorer'] |
| }, |
| { |
| name: 'News & Media', |
| count: 4, |
| sources: ['CryptoPanic', 'NewsAPI', 'CryptoControl', 'CoinDesk RSS'] |
| }, |
| { |
| name: 'Sentiment Analysis', |
| count: 4, |
| sources: ['Fear & Greed', 'LunarCrush', 'Santiment', 'CryptoQuant'] |
| }, |
| { |
| name: 'AI/ML Models', |
| count: 10, |
| sources: ['CryptoBERT', 'FinBERT', 'Twitter RoBERTa', 'HuggingFace'] |
| }, |
| { |
| name: 'On-Chain Analytics', |
| count: 4, |
| sources: ['Glassnode', 'Covalent', 'The Graph', 'Bitquery'] |
| }, |
| { |
| name: 'Whale Tracking', |
| count: 2, |
| sources: ['Whale Alert', 'Nansen'] |
| }, |
| { |
| name: 'DeFi Protocols', |
| count: 4, |
| sources: ['Uniswap', 'Aave', 'Curve', 'Yearn'] |
| }, |
| { |
| name: 'RPC Nodes', |
| count: 20, |
| sources: ['Infura', 'Alchemy', 'Ankr', 'PublicNode', 'Cloudflare'] |
| } |
| ]; |
|
|
| |
| |
| |
| export function getTotalEndpointsCount() { |
| let count = 0; |
| |
| |
| for (const provider of Object.values(API_REGISTRY.market)) { |
| if (provider.endpoints) count += Object.keys(provider.endpoints).length; |
| } |
| for (const provider of Object.values(API_REGISTRY.explorers)) { |
| if (provider.endpoints) count += Object.keys(provider.endpoints).length; |
| } |
| for (const provider of Object.values(API_REGISTRY.news)) { |
| if (provider.endpoints) count += Object.keys(provider.endpoints).length; |
| } |
| for (const provider of Object.values(API_REGISTRY.sentiment)) { |
| if (provider.endpoints) count += Object.keys(provider.endpoints).length; |
| } |
| |
| return count; |
| } |
|
|
| |
| |
| |
| export function getProvider(category, providerName) { |
| const cat = API_REGISTRY[category]; |
| if (!cat) return null; |
| return cat[providerName] || null; |
| } |
|
|
| export default API_REGISTRY; |
|
|