| |
| |
| |
| |
| |
| |
|
|
| |
|
|
| export enum ResourceType { |
| MARKET_DATA = "market_data", |
| NEWS = "news", |
| SENTIMENT = "sentiment", |
| BLOCKCHAIN = "blockchain", |
| ONCHAIN = "onchain", |
| DEFI = "defi", |
| WHALE_TRACKING = "whale_tracking", |
| TECHNICAL = "technical", |
| AI_MODEL = "ai_model", |
| SOCIAL = "social", |
| HISTORICAL = "historical" |
| } |
|
|
| export enum TimeFrame { |
| REALTIME = "realtime", |
| MINUTE_1 = "1m", |
| MINUTE_5 = "5m", |
| MINUTE_15 = "15m", |
| MINUTE_30 = "30m", |
| HOUR_1 = "1h", |
| HOUR_4 = "4h", |
| DAY_1 = "1d", |
| WEEK_1 = "1w", |
| MONTH_1 = "1M" |
| } |
|
|
| export interface APIEndpoint { |
| name: string; |
| path: string; |
| method?: "GET" | "POST" | "PUT" | "DELETE"; |
| params?: Record<string, string>; |
| } |
|
|
| export interface APIResource { |
| id: string; |
| name: string; |
| resourceType: ResourceType; |
| baseUrl: string; |
| apiKeyEnv?: string; |
| apiKey?: string; |
| rateLimit: string; |
| isFree: boolean; |
| requiresAuth: boolean; |
| isActive: boolean; |
| priority: number; |
| description: string; |
| endpoints: Record<string, string>; |
| supportedTimeframes: string[]; |
| features: string[]; |
| headers?: Record<string, string>; |
| documentationUrl?: string; |
| } |
|
|
| |
|
|
| export const API_KEYS = { |
| |
| etherscan: { |
| key: "", |
| backupKey: "" |
| }, |
| bscscan: { |
| key: "" |
| }, |
| tronscan: { |
| key: "" |
| }, |
| |
| |
| coinmarketcap: { |
| keys: [ |
| "", |
| "" |
| ] |
| }, |
| |
| |
| newsapi: { |
| key: "" |
| }, |
| |
| |
| sentimentApi: { |
| key: "" |
| }, |
| |
| |
| huggingface: { |
| key: "" |
| }, |
| |
| |
| telegram: { |
| enabled: false, |
| botToken: "", |
| chatId: "" |
| } |
| }; |
|
|
| |
|
|
| export const BLOCK_EXPLORERS: Record<string, APIResource> = { |
| etherscan: { |
| id: "etherscan", |
| name: "Etherscan", |
| resourceType: ResourceType.BLOCKCHAIN, |
| baseUrl: "https://api.etherscan.io/api", |
| apiKeyEnv: "ETHERSCAN_KEY", |
| apiKey: API_KEYS.etherscan.key, |
| rateLimit: "5 req/sec", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 1, |
| description: "Ethereum blockchain explorer API", |
| endpoints: { |
| account_balance: "?module=account&action=balance", |
| account_txlist: "?module=account&action=txlist", |
| token_balance: "?module=account&action=tokenbalance", |
| gas_price: "?module=gastracker&action=gasoracle", |
| eth_price: "?module=stats&action=ethprice", |
| block_by_time: "?module=block&action=getblocknobytime", |
| contract_abi: "?module=contract&action=getabi", |
| token_transfers: "?module=account&action=tokentx" |
| }, |
| supportedTimeframes: [], |
| features: ["transactions", "tokens", "gas", "prices", "contracts"], |
| documentationUrl: "https://docs.etherscan.io/" |
| }, |
| |
| bscscan: { |
| id: "bscscan", |
| name: "BscScan", |
| resourceType: ResourceType.BLOCKCHAIN, |
| baseUrl: "https://api.bscscan.com/api", |
| apiKeyEnv: "BSCSCAN_KEY", |
| apiKey: API_KEYS.bscscan.key, |
| rateLimit: "5 req/sec", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 1, |
| description: "BSC blockchain explorer API", |
| endpoints: { |
| account_balance: "?module=account&action=balance", |
| account_txlist: "?module=account&action=txlist", |
| token_balance: "?module=account&action=tokenbalance", |
| gas_price: "?module=gastracker&action=gasoracle", |
| bnb_price: "?module=stats&action=bnbprice", |
| token_transfers: "?module=account&action=tokentx" |
| }, |
| supportedTimeframes: [], |
| features: ["transactions", "tokens", "gas", "prices", "contracts"], |
| documentationUrl: "https://docs.bscscan.com/" |
| }, |
| |
| tronscan: { |
| id: "tronscan", |
| name: "TronScan", |
| resourceType: ResourceType.BLOCKCHAIN, |
| baseUrl: "https://apilist.tronscanapi.com/api", |
| apiKeyEnv: "TRONSCAN_KEY", |
| apiKey: API_KEYS.tronscan.key, |
| rateLimit: "varies", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 1, |
| description: "Tron blockchain explorer API", |
| endpoints: { |
| account: "/account", |
| account_list: "/accountv2", |
| transaction: "/transaction", |
| transaction_info: "/transaction-info", |
| token: "/token", |
| token_trc10: "/token_trc10", |
| token_trc20: "/token_trc20", |
| contract: "/contract", |
| node: "/node" |
| }, |
| supportedTimeframes: [], |
| features: ["transactions", "tokens", "contracts", "trc10", "trc20"], |
| headers: { "TRON-PRO-API-KEY": API_KEYS.tronscan.key }, |
| documentationUrl: "https://tronscan.org/#/doc" |
| }, |
| |
| polygonscan: { |
| id: "polygonscan", |
| name: "Polygonscan", |
| resourceType: ResourceType.BLOCKCHAIN, |
| baseUrl: "https://api.polygonscan.com/api", |
| apiKeyEnv: "POLYGONSCAN_KEY", |
| rateLimit: "5 req/sec", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 2, |
| description: "Polygon blockchain explorer API", |
| endpoints: { |
| account_balance: "?module=account&action=balance", |
| account_txlist: "?module=account&action=txlist", |
| token_balance: "?module=account&action=tokenbalance", |
| gas_price: "?module=gastracker&action=gasoracle", |
| matic_price: "?module=stats&action=maticprice" |
| }, |
| supportedTimeframes: [], |
| features: ["transactions", "tokens", "gas", "prices"], |
| documentationUrl: "https://docs.polygonscan.com/" |
| }, |
| |
| blockchair: { |
| id: "blockchair", |
| name: "Blockchair", |
| resourceType: ResourceType.BLOCKCHAIN, |
| baseUrl: "https://api.blockchair.com", |
| rateLimit: "30 req/min free", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 2, |
| description: "Multi-chain blockchain explorer API", |
| endpoints: { |
| bitcoin_stats: "/bitcoin/stats", |
| ethereum_stats: "/ethereum/stats", |
| bitcoin_blocks: "/bitcoin/blocks", |
| ethereum_blocks: "/ethereum/blocks", |
| bitcoin_transactions: "/bitcoin/transactions", |
| ethereum_transactions: "/ethereum/transactions" |
| }, |
| supportedTimeframes: [], |
| features: ["multi-chain", "transactions", "blocks", "stats"], |
| documentationUrl: "https://blockchair.com/api/docs" |
| } |
| }; |
|
|
| |
|
|
| export const MARKET_DATA_SOURCES: Record<string, APIResource> = { |
| coinmarketcap: { |
| id: "coinmarketcap", |
| name: "CoinMarketCap", |
| resourceType: ResourceType.MARKET_DATA, |
| baseUrl: "https://pro-api.coinmarketcap.com/v1", |
| apiKeyEnv: "COINMARKETCAP_KEY", |
| apiKey: API_KEYS.coinmarketcap.keys[0], |
| rateLimit: "333 req/day free", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 1, |
| description: "Leading cryptocurrency market data API", |
| endpoints: { |
| listings_latest: "/cryptocurrency/listings/latest", |
| quotes_latest: "/cryptocurrency/quotes/latest", |
| info: "/cryptocurrency/info", |
| map: "/cryptocurrency/map", |
| categories: "/cryptocurrency/categories", |
| global_metrics: "/global-metrics/quotes/latest", |
| exchange_listings: "/exchange/listings/latest" |
| }, |
| supportedTimeframes: ["1h", "24h", "7d", "30d", "60d", "90d"], |
| features: ["prices", "market_cap", "volume", "rankings", "historical"], |
| headers: { "X-CMC_PRO_API_KEY": API_KEYS.coinmarketcap.keys[0] }, |
| documentationUrl: "https://coinmarketcap.com/api/documentation/v1/" |
| }, |
| |
| coingecko: { |
| id: "coingecko", |
| name: "CoinGecko", |
| resourceType: ResourceType.MARKET_DATA, |
| baseUrl: "https://api.coingecko.com/api/v3", |
| rateLimit: "10-50 req/min free", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 1, |
| description: "Comprehensive cryptocurrency data API", |
| endpoints: { |
| ping: "/ping", |
| simple_price: "/simple/price", |
| coins_list: "/coins/list", |
| coins_markets: "/coins/markets", |
| coin_detail: "/coins/{id}", |
| coin_history: "/coins/{id}/history", |
| coin_market_chart: "/coins/{id}/market_chart", |
| coin_ohlc: "/coins/{id}/ohlc", |
| trending: "/search/trending", |
| global: "/global", |
| exchanges: "/exchanges" |
| }, |
| supportedTimeframes: ["1d", "7d", "14d", "30d", "90d", "180d", "365d", "max"], |
| features: ["prices", "market_cap", "volume", "historical", "trending", "defi"], |
| documentationUrl: "https://www.coingecko.com/en/api/documentation" |
| }, |
| |
| coincap: { |
| id: "coincap", |
| name: "CoinCap", |
| resourceType: ResourceType.MARKET_DATA, |
| baseUrl: "https://api.coincap.io/v2", |
| rateLimit: "200 req/min free", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 1, |
| description: "Real-time cryptocurrency market data", |
| endpoints: { |
| assets: "/assets", |
| asset_detail: "/assets/{id}", |
| asset_history: "/assets/{id}/history", |
| markets: "/assets/{id}/markets", |
| rates: "/rates", |
| exchanges: "/exchanges", |
| candles: "/candles" |
| }, |
| supportedTimeframes: ["m1", "m5", "m15", "m30", "h1", "h2", "h6", "h12", "d1"], |
| features: ["real-time", "prices", "volume", "market_cap", "historical"], |
| documentationUrl: "https://docs.coincap.io/" |
| }, |
| |
| binance: { |
| id: "binance", |
| name: "Binance", |
| resourceType: ResourceType.MARKET_DATA, |
| baseUrl: "https://api.binance.com/api/v3", |
| rateLimit: "1200 req/min", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 1, |
| description: "Binance exchange public API", |
| endpoints: { |
| ping: "/ping", |
| time: "/time", |
| ticker_price: "/ticker/price", |
| ticker_24hr: "/ticker/24hr", |
| klines: "/klines", |
| depth: "/depth", |
| trades: "/trades", |
| avg_price: "/avgPrice", |
| exchange_info: "/exchangeInfo" |
| }, |
| supportedTimeframes: ["1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "6h", "8h", "12h", "1d", "3d", "1w", "1M"], |
| features: ["real-time", "prices", "ohlcv", "order_book", "trades"], |
| documentationUrl: "https://binance-docs.github.io/apidocs/spot/en/" |
| }, |
| |
| kucoin: { |
| id: "kucoin", |
| name: "KuCoin", |
| resourceType: ResourceType.MARKET_DATA, |
| baseUrl: "https://api.kucoin.com/api/v1", |
| rateLimit: "varies", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 2, |
| description: "KuCoin exchange public API", |
| endpoints: { |
| market_list: "/market/allTickers", |
| ticker: "/market/orderbook/level1", |
| market_stats: "/market/stats", |
| currencies: "/currencies", |
| symbols: "/symbols", |
| klines: "/market/candles" |
| }, |
| supportedTimeframes: ["1min", "3min", "5min", "15min", "30min", "1hour", "2hour", "4hour", "6hour", "8hour", "12hour", "1day", "1week"], |
| features: ["prices", "ohlcv", "order_book", "trades"], |
| documentationUrl: "https://docs.kucoin.com/" |
| }, |
| |
| kraken: { |
| id: "kraken", |
| name: "Kraken", |
| resourceType: ResourceType.MARKET_DATA, |
| baseUrl: "https://api.kraken.com/0/public", |
| rateLimit: "1 req/sec", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 2, |
| description: "Kraken exchange public API", |
| endpoints: { |
| time: "/Time", |
| assets: "/Assets", |
| asset_pairs: "/AssetPairs", |
| ticker: "/Ticker", |
| ohlc: "/OHLC", |
| depth: "/Depth", |
| trades: "/Trades", |
| spread: "/Spread" |
| }, |
| supportedTimeframes: ["1", "5", "15", "30", "60", "240", "1440", "10080", "21600"], |
| features: ["prices", "ohlcv", "order_book", "trades"], |
| documentationUrl: "https://docs.kraken.com/rest/" |
| } |
| }; |
|
|
| |
|
|
| export const NEWS_SOURCES: Record<string, APIResource> = { |
| newsapi: { |
| id: "newsapi", |
| name: "NewsAPI", |
| resourceType: ResourceType.NEWS, |
| baseUrl: "https://newsapi.org/v2", |
| apiKeyEnv: "NEWSAPI_KEY", |
| apiKey: API_KEYS.newsapi.key, |
| rateLimit: "100 req/day free", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 1, |
| description: "News articles from thousands of sources", |
| endpoints: { |
| everything: "/everything", |
| top_headlines: "/top-headlines", |
| sources: "/sources" |
| }, |
| supportedTimeframes: [], |
| features: ["articles", "headlines", "sources", "search"], |
| documentationUrl: "https://newsapi.org/docs" |
| }, |
| |
| cryptopanic: { |
| id: "cryptopanic", |
| name: "CryptoPanic", |
| resourceType: ResourceType.NEWS, |
| baseUrl: "https://cryptopanic.com/api/v1", |
| apiKeyEnv: "CRYPTOPANIC_KEY", |
| rateLimit: "5 req/sec", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 1, |
| description: "Cryptocurrency news aggregator", |
| endpoints: { |
| posts: "/posts/", |
| currencies: "/currencies/" |
| }, |
| supportedTimeframes: [], |
| features: ["news", "sentiment", "trending"], |
| documentationUrl: "https://cryptopanic.com/developers/api/" |
| }, |
| |
| coindesk_rss: { |
| id: "coindesk_rss", |
| name: "CoinDesk RSS", |
| resourceType: ResourceType.NEWS, |
| baseUrl: "https://www.coindesk.com", |
| rateLimit: "unlimited", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 2, |
| description: "CoinDesk crypto news RSS feed", |
| endpoints: { |
| rss: "/arc/outboundfeeds/rss/" |
| }, |
| supportedTimeframes: [], |
| features: ["news", "rss"], |
| documentationUrl: "https://www.coindesk.com/arc/outboundfeeds/rss/" |
| }, |
| |
| cointelegraph_rss: { |
| id: "cointelegraph_rss", |
| name: "Cointelegraph RSS", |
| resourceType: ResourceType.NEWS, |
| baseUrl: "https://cointelegraph.com", |
| rateLimit: "unlimited", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 2, |
| description: "Cointelegraph crypto news RSS feed", |
| endpoints: { |
| rss: "/rss" |
| }, |
| supportedTimeframes: [], |
| features: ["news", "rss"], |
| documentationUrl: "https://cointelegraph.com/rss" |
| }, |
| |
| cryptocompare_news: { |
| id: "cryptocompare_news", |
| name: "CryptoCompare News", |
| resourceType: ResourceType.NEWS, |
| baseUrl: "https://min-api.cryptocompare.com/data", |
| rateLimit: "100,000 req/month free", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 2, |
| description: "CryptoCompare news API", |
| endpoints: { |
| news_latest: "/v2/news/?lang=EN", |
| news_feeds: "/news/feeds", |
| news_categories: "/news/categories" |
| }, |
| supportedTimeframes: [], |
| features: ["news", "categories", "feeds"], |
| documentationUrl: "https://min-api.cryptocompare.com/documentation" |
| } |
| }; |
|
|
| |
|
|
| export const SENTIMENT_SOURCES: Record<string, APIResource> = { |
| fear_greed_index: { |
| id: "fear_greed_index", |
| name: "Fear & Greed Index", |
| resourceType: ResourceType.SENTIMENT, |
| baseUrl: "https://api.alternative.me", |
| rateLimit: "unlimited", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 1, |
| description: "Crypto Fear & Greed Index", |
| endpoints: { |
| fng: "/fng/", |
| fng_history: "/fng/?limit=30" |
| }, |
| supportedTimeframes: ["daily"], |
| features: ["sentiment", "fear_greed", "historical"], |
| documentationUrl: "https://alternative.me/crypto/fear-and-greed-index/" |
| }, |
| |
| custom_sentiment: { |
| id: "custom_sentiment", |
| name: "Custom Sentiment API", |
| resourceType: ResourceType.SENTIMENT, |
| baseUrl: "https://sentiment-api.example.com", |
| apiKeyEnv: "SENTIMENT_API_KEY", |
| apiKey: API_KEYS.sentimentApi.key, |
| rateLimit: "varies", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 2, |
| description: "Custom sentiment analysis API", |
| endpoints: { |
| analyze: "/analyze", |
| market_sentiment: "/market-sentiment", |
| social_sentiment: "/social-sentiment" |
| }, |
| supportedTimeframes: [], |
| features: ["sentiment", "social", "market"] |
| }, |
| |
| lunarcrush: { |
| id: "lunarcrush", |
| name: "LunarCrush", |
| resourceType: ResourceType.SENTIMENT, |
| baseUrl: "https://lunarcrush.com/api/v2", |
| apiKeyEnv: "LUNARCRUSH_KEY", |
| rateLimit: "varies", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 2, |
| description: "Social sentiment analytics", |
| endpoints: { |
| assets: "/assets", |
| market: "/market", |
| global: "/global", |
| influencers: "/influencers" |
| }, |
| supportedTimeframes: [], |
| features: ["social_sentiment", "influencers", "trending"], |
| documentationUrl: "https://lunarcrush.com/developers" |
| } |
| }; |
|
|
| |
|
|
| export const ONCHAIN_SOURCES: Record<string, APIResource> = { |
| blockchain_com: { |
| id: "blockchain_com", |
| name: "Blockchain.com", |
| resourceType: ResourceType.ONCHAIN, |
| baseUrl: "https://api.blockchain.info", |
| rateLimit: "varies", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 1, |
| description: "Bitcoin blockchain data", |
| endpoints: { |
| stats: "/stats", |
| ticker: "/ticker", |
| rawblock: "/rawblock/{hash}", |
| rawtx: "/rawtx/{hash}", |
| balance: "/balance" |
| }, |
| supportedTimeframes: [], |
| features: ["bitcoin", "transactions", "blocks", "addresses"], |
| documentationUrl: "https://www.blockchain.com/api" |
| }, |
| |
| mempool_space: { |
| id: "mempool_space", |
| name: "Mempool.space", |
| resourceType: ResourceType.ONCHAIN, |
| baseUrl: "https://mempool.space/api", |
| rateLimit: "varies", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 1, |
| description: "Bitcoin mempool and blockchain explorer", |
| endpoints: { |
| mempool: "/mempool", |
| fees_recommended: "/v1/fees/recommended", |
| blocks: "/blocks", |
| block_height: "/block-height/{height}", |
| tx: "/tx/{txid}" |
| }, |
| supportedTimeframes: [], |
| features: ["mempool", "fees", "blocks", "transactions"], |
| documentationUrl: "https://mempool.space/docs/api" |
| } |
| }; |
|
|
| |
|
|
| export const DEFI_SOURCES: Record<string, APIResource> = { |
| defillama: { |
| id: "defillama", |
| name: "DefiLlama", |
| resourceType: ResourceType.DEFI, |
| baseUrl: "https://api.llama.fi", |
| rateLimit: "unlimited", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 1, |
| description: "DeFi TVL and protocol analytics", |
| endpoints: { |
| protocols: "/protocols", |
| protocol_detail: "/protocol/{protocol}", |
| tvl_all: "/tvl", |
| chains: "/chains", |
| stablecoins: "/stablecoins", |
| yields: "/yields/pools", |
| dexs: "/overview/dexs" |
| }, |
| supportedTimeframes: [], |
| features: ["tvl", "protocols", "chains", "yields", "dexs"], |
| documentationUrl: "https://defillama.com/docs/api" |
| }, |
| |
| inch_1: { |
| id: "1inch", |
| name: "1inch", |
| resourceType: ResourceType.DEFI, |
| baseUrl: "https://api.1inch.io/v5.0/1", |
| rateLimit: "varies", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 2, |
| description: "DEX aggregator API", |
| endpoints: { |
| tokens: "/tokens", |
| quote: "/quote", |
| swap: "/swap", |
| liquidity_sources: "/liquidity-sources" |
| }, |
| supportedTimeframes: [], |
| features: ["dex", "swap", "quotes", "aggregator"], |
| documentationUrl: "https://docs.1inch.io/" |
| } |
| }; |
|
|
| |
|
|
| export const WHALE_SOURCES: Record<string, APIResource> = { |
| whale_alert: { |
| id: "whale_alert", |
| name: "Whale Alert", |
| resourceType: ResourceType.WHALE_TRACKING, |
| baseUrl: "https://api.whale-alert.io/v1", |
| apiKeyEnv: "WHALE_ALERT_KEY", |
| rateLimit: "10 req/min free", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 1, |
| description: "Large crypto transaction tracking", |
| endpoints: { |
| status: "/status", |
| transactions: "/transactions" |
| }, |
| supportedTimeframes: [], |
| features: ["whale_alerts", "large_transactions", "multi-chain"], |
| documentationUrl: "https://docs.whale-alert.io/" |
| } |
| }; |
|
|
| |
|
|
| export const TECHNICAL_SOURCES: Record<string, APIResource> = { |
| taapi: { |
| id: "taapi", |
| name: "TAAPI.IO", |
| resourceType: ResourceType.TECHNICAL, |
| baseUrl: "https://api.taapi.io", |
| apiKeyEnv: "TAAPI_KEY", |
| rateLimit: "varies", |
| isFree: true, |
| requiresAuth: true, |
| isActive: true, |
| priority: 1, |
| description: "Technical analysis indicators API", |
| endpoints: { |
| rsi: "/rsi", |
| macd: "/macd", |
| ema: "/ema", |
| sma: "/sma", |
| bbands: "/bbands", |
| stoch: "/stoch", |
| atr: "/atr", |
| adx: "/adx", |
| dmi: "/dmi", |
| sar: "/sar", |
| ichimoku: "/ichimoku" |
| }, |
| supportedTimeframes: [], |
| features: ["indicators", "rsi", "macd", "bollinger", "ema", "sma"], |
| documentationUrl: "https://taapi.io/documentation/" |
| } |
| }; |
|
|
| |
|
|
| export const SOCIAL_SOURCES: Record<string, APIResource> = { |
| reddit: { |
| id: "reddit", |
| name: "Reddit API", |
| resourceType: ResourceType.SOCIAL, |
| baseUrl: "https://www.reddit.com", |
| rateLimit: "60 req/min", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 1, |
| description: "Reddit cryptocurrency communities", |
| endpoints: { |
| r_crypto: "/r/CryptoCurrency/hot.json", |
| r_bitcoin: "/r/Bitcoin/hot.json", |
| r_ethereum: "/r/ethereum/hot.json", |
| r_altcoin: "/r/altcoin/hot.json", |
| r_defi: "/r/defi/hot.json" |
| }, |
| supportedTimeframes: [], |
| features: ["discussions", "sentiment", "trending"], |
| documentationUrl: "https://www.reddit.com/dev/api/" |
| } |
| }; |
|
|
| |
|
|
| export const HISTORICAL_SOURCES: Record<string, APIResource> = { |
| cryptocompare_historical: { |
| id: "cryptocompare_historical", |
| name: "CryptoCompare Historical", |
| resourceType: ResourceType.HISTORICAL, |
| baseUrl: "https://min-api.cryptocompare.com/data", |
| rateLimit: "100,000 req/month free", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 1, |
| description: "Historical crypto price data", |
| endpoints: { |
| histoday: "/v2/histoday", |
| histohour: "/v2/histohour", |
| histominute: "/histominute" |
| }, |
| supportedTimeframes: ["1m", "1h", "1d"], |
| features: ["ohlcv", "historical", "daily", "hourly", "minute"], |
| documentationUrl: "https://min-api.cryptocompare.com/documentation" |
| }, |
| |
| messari: { |
| id: "messari", |
| name: "Messari", |
| resourceType: ResourceType.HISTORICAL, |
| baseUrl: "https://data.messari.io/api/v1", |
| apiKeyEnv: "MESSARI_KEY", |
| rateLimit: "20 req/min free", |
| isFree: true, |
| requiresAuth: false, |
| isActive: true, |
| priority: 2, |
| description: "Crypto research and data", |
| endpoints: { |
| assets: "/assets", |
| asset_detail: "/assets/{symbol}", |
| asset_metrics: "/assets/{symbol}/metrics", |
| asset_profile: "/assets/{symbol}/profile" |
| }, |
| supportedTimeframes: [], |
| features: ["metrics", "profiles", "research"], |
| documentationUrl: "https://messari.io/api" |
| } |
| }; |
|
|
| |
|
|
| export interface MLModel { |
| name: string; |
| type: string; |
| purpose: string; |
| inputFeatures?: string[]; |
| timeframes?: string[]; |
| huggingfaceModel?: string; |
| } |
|
|
| export const ML_MODELS_CONFIG: Record<string, MLModel> = { |
| price_prediction_lstm: { |
| name: "PricePredictionLSTM", |
| type: "LSTM", |
| purpose: "Short-term price prediction", |
| inputFeatures: ["open", "high", "low", "close", "volume"], |
| timeframes: ["1m", "5m", "15m", "1h", "4h"] |
| }, |
| sentiment_analysis_transformer: { |
| name: "SentimentAnalysisTransformer", |
| type: "Transformer", |
| purpose: "News and social media sentiment analysis", |
| huggingfaceModel: "ProsusAI/finbert" |
| }, |
| anomaly_detection_isolation_forest: { |
| name: "AnomalyDetectionIsolationForest", |
| type: "Isolation Forest", |
| purpose: "Detecting market anomalies" |
| }, |
| trend_classification_random_forest: { |
| name: "TrendClassificationRandomForest", |
| type: "Random Forest", |
| purpose: "Market trend classification" |
| } |
| }; |
|
|
| |
|
|
| export const ANALYSIS_ENDPOINTS: Record<string, string> = { |
| track_position: "/track_position", |
| market_analysis: "/market_analysis", |
| technical_analysis: "/technical_analysis", |
| sentiment_analysis: "/sentiment_analysis", |
| whale_activity: "/whale_activity", |
| trading_strategies: "/trading_strategies", |
| ai_prediction: "/ai_prediction", |
| risk_management: "/risk_management", |
| pdf_analysis: "/pdf_analysis", |
| ai_enhanced_analysis: "/ai_enhanced_analysis", |
| multi_source_data: "/multi_source_data", |
| news_analysis: "/news_analysis", |
| exchange_integration: "/exchange_integration", |
| smart_alerts: "/smart_alerts", |
| advanced_social_media_analysis: "/advanced_social_media_analysis", |
| dynamic_modeling: "/dynamic_modeling", |
| multi_currency_analysis: "/multi_currency_analysis", |
| telegram_settings: "/telegram_settings", |
| collect_data: "/collect-data", |
| greed_fear_index: "/greed-fear-index", |
| onchain_metrics: "/onchain-metrics", |
| custom_alerts: "/custom-alerts", |
| stakeholder_analysis: "/stakeholder-analysis" |
| }; |
|
|
| |
|
|
| export const ALL_RESOURCES: Record<string, APIResource> = { |
| ...BLOCK_EXPLORERS, |
| ...MARKET_DATA_SOURCES, |
| ...NEWS_SOURCES, |
| ...SENTIMENT_SOURCES, |
| ...ONCHAIN_SOURCES, |
| ...DEFI_SOURCES, |
| ...WHALE_SOURCES, |
| ...TECHNICAL_SOURCES, |
| ...SOCIAL_SOURCES, |
| ...HISTORICAL_SOURCES |
| }; |
|
|
| |
|
|
| export function getResourceById(id: string): APIResource | undefined { |
| return ALL_RESOURCES[id]; |
| } |
|
|
| export function getResourcesByType(type: ResourceType): APIResource[] { |
| return Object.values(ALL_RESOURCES).filter(r => r.resourceType === type); |
| } |
|
|
| export function getFreeResources(): APIResource[] { |
| return Object.values(ALL_RESOURCES).filter(r => r.isFree); |
| } |
|
|
| export function getActiveResources(): APIResource[] { |
| return Object.values(ALL_RESOURCES).filter(r => r.isActive); |
| } |
|
|
| export function getNoAuthResources(): APIResource[] { |
| return Object.values(ALL_RESOURCES).filter(r => !r.requiresAuth); |
| } |
|
|
| export function searchResources(query: string): APIResource[] { |
| const q = query.toLowerCase(); |
| return Object.values(ALL_RESOURCES).filter( |
| r => r.name.toLowerCase().includes(q) || |
| r.description.toLowerCase().includes(q) || |
| r.features.some(f => f.toLowerCase().includes(q)) |
| ); |
| } |
|
|
| export function getStatistics(): { |
| total: number; |
| free: number; |
| active: number; |
| noAuth: number; |
| byType: Record<string, number>; |
| } { |
| const resources = Object.values(ALL_RESOURCES); |
| const byType: Record<string, number> = {}; |
| |
| for (const r of resources) { |
| const type = r.resourceType; |
| byType[type] = (byType[type] || 0) + 1; |
| } |
| |
| return { |
| total: resources.length, |
| free: resources.filter(r => r.isFree).length, |
| active: resources.filter(r => r.isActive).length, |
| noAuth: resources.filter(r => !r.requiresAuth).length, |
| byType |
| }; |
| } |
|
|
| |
| export default { |
| API_KEYS, |
| ALL_RESOURCES, |
| BLOCK_EXPLORERS, |
| MARKET_DATA_SOURCES, |
| NEWS_SOURCES, |
| SENTIMENT_SOURCES, |
| ONCHAIN_SOURCES, |
| DEFI_SOURCES, |
| WHALE_SOURCES, |
| TECHNICAL_SOURCES, |
| SOCIAL_SOURCES, |
| HISTORICAL_SOURCES, |
| ML_MODELS_CONFIG, |
| ANALYSIS_ENDPOINTS, |
| getResourceById, |
| getResourcesByType, |
| getFreeResources, |
| getActiveResources, |
| getNoAuthResources, |
| searchResources, |
| getStatistics |
| }; |
|
|