/// <reference types="ws" />
import { APIError } from "../types/errors";
import WebSocket, { MessageEvent } from 'isomorphic-ws';
import { BalancesMessage, TimeseriesMessage, MessageResponse } from "../types/websocket_types";
interface MessagePromise<T> {
    promise: Promise<T>;
    resolve: (value: T | null) => void;
    reject: (reason?: APIError) => void;
}
declare class WebsocketClient {
    base_url: string;
    callbackHandlers: {
        [requestID: string]: (response: MessageEvent) => void;
    };
    messagePromises: {
        [requestID: string]: MessagePromise<any | null>[];
    };
    websocketIsOpening: boolean;
    websocketIsClosing: boolean;
    websocket_conn: WebSocket | null;
    api_key: string;
    constructor(api_key: string, base_url: string, use_ssl: boolean);
    transitionToOpen(): Promise<void>;
    transitionToClosed(): Promise<void>;
    createNewWebSocketConnection(attempt?: number): Promise<WebSocket>;
    private handleWebSocketClosure;
    private closeWebsocket;
    private sendMessage;
    handleResponse<T extends BalancesMessage | TimeseriesMessage>(requestID: string, msg: T, finishedEventType: string): AsyncGenerator<MessageResponse<T>>;
    private setupCallbackHandler;
    private sendMessageAndProcessMessages;
    private waitForMessageOrTimeout;
    private performFinalCleanup;
    private processPayload;
    private getEventDict;
    private createMessagePromise;
    private cleanupRequest;
    private waitForState;
    private waitForWebSocketClosureCompletion;
    private waitForWebSocketOpeningCompletion;
}
export default WebsocketClient;
