import { ICacheService } from '../../application/ports/cache-service';
import { IExternalApiKeyRotationService } from '../../application/ports/external-api-key-rotation.service';
import { ILogger } from '../../application/ports/logger';
export interface CoinMarketCapCoin {
    readonly id: number;
    readonly name: string;
    readonly symbol: string;
    readonly slug: string;
    readonly description: string;
    readonly logo: string | null;
}
export interface CoinMarketCapPlatform {
    readonly id: number;
    readonly name: string;
    readonly symbol: string;
    readonly slug: string;
    readonly token_address: string;
}
export interface CoinMarketCapMapEntry {
    readonly id: number;
    readonly name: string;
    readonly symbol: string;
    readonly slug: string;
    readonly rank: number | null;
    readonly platform: CoinMarketCapPlatform | null;
}
export interface CoinMarketCapContractAddressEntry {
    readonly contract_address: string;
    readonly platform: {
        readonly name: string;
        readonly coin: {
            readonly id: string;
            readonly name: string;
            readonly symbol: string;
            readonly slug: string;
        };
    };
}
export interface CoinMarketCapContractInfoEntry {
    readonly id: number;
    readonly name: string;
    readonly symbol: string;
    readonly slug: string;
    readonly description: string;
    readonly logo: string | null;
    readonly cmc_rank?: number | null;
    readonly platform: CoinMarketCapPlatform | null;
    readonly contract_address: CoinMarketCapContractAddressEntry[];
}
export interface CoinMarketCapPrice {
    readonly id: number;
    readonly price: number;
}
export interface CoinMarketCapTokenQuote {
    readonly price: number;
    readonly change24h: number;
    readonly marketCap: number;
}
export interface CoinMarketCapHistoricalPrice {
    readonly timestamp: string;
    readonly price: number;
}
export declare class CoinMarketCapClient {
    private readonly cacheService;
    private readonly rotationService;
    private readonly logger;
    private readonly http;
    private readonly apiKeys;
    constructor(cacheService: ICacheService, rotationService: IExternalApiKeyRotationService, logger: ILogger);
    getCoin(cmcId: number): Promise<CoinMarketCapCoin>;
    getCoins(cmcIds: number[]): Promise<CoinMarketCapCoin[]>;
    getCoinInfoBySlug(slug: string): Promise<CoinMarketCapCoin | null>;
    getCoinDescription(cmcId: number): Promise<string | null>;
    getPrices(cmcIds: number[], currency?: string): Promise<Map<number, number>>;
    getTokenQuotes(cmcIds: number[], currency?: string): Promise<Map<number, CoinMarketCapTokenQuote>>;
    getPriceHistory(cmcId: number, interval: string, count: number): Promise<CoinMarketCapHistoricalPrice[]>;
    private generateFallbackPriceHistory;
    private estimateIntervalMs;
    getMarketCaps(cmcIds: number[], currency?: string): Promise<Map<number, number>>;
    getCoinIdByToken(name: string, symbol: string, isNative: boolean): Promise<number | null>;
    getNetworkMarketCap(name: string, symbol: string): Promise<number | null>;
    getNetworkMarketCaps(networks: {
        readonly name: string;
        readonly symbol: string;
    }[]): Promise<Map<string, number | null>>;
    getNetworkMarketCapsByName(networks: {
        readonly name: string;
        readonly symbol: string;
    }[]): Promise<Map<string, number | null>>;
    getCoinMap(limit?: number): Promise<CoinMarketCapMapEntry[]>;
    getNetworkLogoUrl(name: string, symbol: string): Promise<string | null>;
    getNetworkLogoUrlByName(name: string): Promise<string | null>;
    getTokenLogoUrl(name: string, symbol: string): Promise<string | null>;
    getTopTokensByNetwork(network: {
        name: string;
        symbol: string;
    }, limit?: number): Promise<CoinMarketCapMapEntry[]>;
    getTokenCoinIdsByNetwork(tokens: {
        readonly id: string;
        readonly name: string;
        readonly symbol: string;
        readonly address: string | null;
        readonly networkName: string;
    }[]): Promise<Map<string, CoinMarketCapMapEntry | null>>;
    getTokenByContractAddress(networkName: string, contractAddress: string): Promise<CoinMarketCapMapEntry | null>;
    getCoinWithContractAddresses(cmcId: number): Promise<CoinMarketCapContractInfoEntry | null>;
    private getCoinMarketCapV2BaseUrl;
    private matchesNetworkName;
    resolveNetworkPlatformId(entries: CoinMarketCapMapEntry[], networkName: string): number | null;
    private findCoinByNetworkName;
    private findNativeCoin;
    private requestWithRetry;
    private sleep;
}
//# sourceMappingURL=coinmarketcap-client.d.ts.map