import { BaseConnectionManager, type ManagedProvider } from './base.manager';
import type { Hash, UniversalBlock, UniversalBlockStats, UniversalTrace } from '../providers/interfaces';
export interface EvmNetworkProvider extends ManagedProvider {
    reconnectWebSocket?(): Promise<void>;
    hasWebSocketSupport?: boolean;
    isWebSocketConnected?: boolean;
    subscribeToNewBlocks(callback: (blockNumber: number) => void): {
        unsubscribe(): void;
    };
    getBlockHeight(): Promise<number>;
    getManyBlocksByHeights(heights: number[], fullTransactions?: boolean, verifyTrie?: boolean): Promise<Array<UniversalBlock | null>>;
    getManyBlocksByHashes(hashes: Hash[], fullTransactions?: boolean): Promise<Array<UniversalBlock | null>>;
    getManyBlocksStatsByHeights(heights: number[]): Promise<Array<UniversalBlockStats | null>>;
    getManyBlocksWithReceipts(heights: string[] | number[], fullTransactions?: boolean, verifyTrie?: boolean): Promise<Array<UniversalBlock | null>>;
    assertTraceSupport(): Promise<void>;
    getTracesByBlockNumber(blockNumber: number): Promise<UniversalTrace[]>;
    getTracesByTxHash(hash: string): Promise<UniversalTrace[]>;
}
export declare class NetworkConnectionManager<T extends EvmNetworkProvider = EvmNetworkProvider> extends BaseConnectionManager<T> {
    private activeProviderName;
    private failedProviders;
    private reconnectionAttempts;
    private readonly maxReconnectionAttempts;
    private failedAt;
    private readonly failedProviderTtlMs;
    private isRecovering;
    initialize(): Promise<void>;
    switchActiveProvider(name: string): Promise<void>;
    getActiveProvider(): Promise<T>;
    handleProviderFailure(providerName: string, error: unknown, methodName: string): Promise<T>;
}
