interface WebSocketManagerOptions {
    wsTimeout?: number;
    wsExtendTimeout?: number;
    maxSubscriptions?: number;
    onEvict?: ((identifier: string, type: 'address' | 'token') => void) | null;
}
interface ChronikWebSocket {
    subscribeToAddress: (address: string) => void;
    unsubscribeFromAddress: (address: string) => void;
    subscribeToTokenId: (tokenId: string) => void;
    unsubscribeFromTokenId: (tokenId: string) => void;
    close: () => void;
    readyState: number;
    manuallyClosed: boolean;
    waitForOpen: () => Promise<void>;
}
interface ChronikClient {
    ws?: (config: any) => ChronikWebSocket;
}
export default class WebSocketManager {
    private chronik;
    addressWs: ChronikWebSocket | null;
    tokenWs: ChronikWebSocket | null;
    private addressSubscriptions;
    private tokenSubscriptions;
    private failover;
    private logger;
    private wsTimeout;
    private wsExtendTimeout;
    private maxSubscriptions;
    private onEvict;
    constructor(chronik: ChronikClient, failoverOptions?: any, enableLogging?: boolean, options?: WebSocketManagerOptions);
    private _ensureAddressWs;
    private _ensureTokenWs;
    initWebsocketForAddress(address: string, onNewTransaction: (address: string, txid: string, msgType: string) => Promise<void>): Promise<void>;
    initWebsocketForToken(tokenId: string, onNewTransaction: (tokenId: string, txid: string, msgType: string) => Promise<void>): Promise<void>;
    unsubscribeAddress(address: string): void;
    unsubscribeToken(tokenId: string): void;
    unsubscribeAll(): void;
    resetWsTimer(identifier: string, options?: {
        isToken?: boolean;
    }, onTimeout?: ((identifier: string) => void) | null): void;
    getRemainingTime(identifier: string, options?: {
        isToken?: boolean;
    }): {
        active: boolean;
        remainingSec?: number;
        message?: string;
    };
    private _evictOldestAddressSubscription;
    private _evictOldestTokenSubscription;
    private _getInstanceCount;
    private _getSubscriptionCount;
    getRemainingTimeForAddress(address: string): {
        active: boolean;
        remainingSec?: number;
        message?: string;
    };
}
export {};
