import type { IStockProvider, IProviderConfig } from '../interfaces/provider.js';
import type { IStockPrice, IStockDataRequest } from '../interfaces/stockprice.js';
/**
 * CoinGecko Crypto Price Provider
 *
 * Documentation: https://docs.coingecko.com/v3.0.1/reference/endpoint-overview
 *
 * Features:
 * - Current crypto prices (single and batch)
 * - Historical price data with OHLCV
 * - 13M+ tokens, 240+ networks, 1600+ exchanges
 * - Accepts both ticker symbols (BTC, ETH) and CoinGecko IDs (bitcoin, ethereum)
 * - 24/7 market data (crypto never closes)
 *
 * Rate Limits:
 * - Free tier (no key): 5-15 requests/minute
 * - Demo plan (free with registration): ~30 requests/minute, 10,000/month
 * - Paid plans: Higher limits
 *
 * API Authentication:
 * - Optional API key for Demo/paid plans
 * - Header: x-cg-demo-api-key (Demo) or x-cg-pro-api-key (paid)
 */
export declare class CoinGeckoProvider implements IStockProvider {
    private config?;
    name: string;
    priority: number;
    readonly requiresAuth = false;
    readonly rateLimit: {
        requestsPerMinute: number;
        requestsPerDay: number;
    };
    private logger;
    private baseUrl;
    private apiKey?;
    private rateLimiter;
    private coinMapCache;
    private coinListLoadedAt;
    private readonly coinListCacheTTL;
    private readonly priorityTickerMap;
    constructor(apiKey?: string, config?: IProviderConfig | undefined);
    /**
     * Unified data fetching method supporting all request types
     */
    fetchData(request: IStockDataRequest): Promise<IStockPrice | IStockPrice[]>;
    /**
     * Fetch current price for a single crypto
     */
    private fetchCurrentPrice;
    /**
     * Fetch batch current prices for multiple cryptos
     */
    private fetchBatchCurrentPrices;
    /**
     * Fetch historical prices with OHLCV data
     */
    private fetchHistoricalPrices;
    /**
     * Fetch intraday prices with hourly intervals
     */
    private fetchIntradayPrices;
    /**
     * Check if CoinGecko API is available
     */
    isAvailable(): Promise<boolean>;
    /**
     * Check if a market/network is supported
     * CoinGecko supports 240+ networks
     */
    supportsMarket(market: string): boolean;
    /**
     * Check if a ticker format is supported
     * Supports both ticker symbols (BTC) and CoinGecko IDs (bitcoin)
     */
    supportsTicker(ticker: string): boolean;
    /**
     * Resolve ticker symbol or CoinGecko ID to canonical CoinGecko ID
     * Supports both formats: "BTC" -> "bitcoin", "bitcoin" -> "bitcoin"
     */
    private resolveCoinId;
    /**
     * Load complete coin list from CoinGecko API
     */
    private loadCoinList;
    /**
     * Map CoinGecko simple/price response to IStockPrice
     */
    private mapToStockPrice;
    /**
     * Build HTTP headers with optional API key
     */
    private buildHeaders;
    /**
     * Check if response indicates a rate limit error (429)
     */
    private isRateLimitError;
    /**
     * Wrapper for fetch operations with automatic rate limit retry and exponential backoff
     */
    private fetchWithRateLimitRetry;
}
