export type WSOptions = {
    host: string;
    path: string;
    subprotocols: string[];
    reconnect?: boolean;
    jsonParse?: boolean;
    bufferMax?: number;
    bufferFlushInterval?: number;
    timeout?: number;
};
type GenericHandler<T = any> = (data: T) => void;
export type OpenHandler = GenericHandler<undefined>;
export type CloseHandler = GenericHandler<CloseEvent>;
export type ErrorHandler = GenericHandler<Event>;
/**
 * The WebSocket can send JSON that is parsed, or we just send it through as-is
 */
export type MessageDataType = object | any;
export type MessageHandler = GenericHandler<MessageDataType>;
/**
 * Data is provided potentially by .destroy() caller.
 */
export type DestroyHandler = GenericHandler<unknown | undefined>;
export type BulkMessageHandler = GenericHandler<MessageDataType>;
/**
 * @class WebSocket factory and utility wrapper.
 */
export declare class WSFactory {
    private readonly id;
    private paused;
    private handlers;
    private state;
    private messageBuffer;
    private connectionAttempt;
    private readonly flushCanceler;
    private options;
    private bufferMax;
    private ws;
    /**
     * @param id - unique id for the WebSocket.
     * @param options - websocket options to initate the WebSocket with.
     */
    constructor(id: string, options: WSOptions);
    private reconnect;
    private connect;
    private registerHandler;
    /**
     * Invoke all registered handler callbacks for a given event type.
     */
    private invokeHandlers;
    /**
     * Triggers event to be buffered or invoked depending on config.
     */
    private triggerEvent;
    onmessage(fn: MessageHandler): this;
    onbulkmessage(fn: BulkMessageHandler): this;
    onerror(fn: ErrorHandler): this;
    onopen(fn: OpenHandler): this;
    onclose(fn: CloseHandler): this;
    ondestroy(fn: DestroyHandler): this;
    flushMessageBuffer(): void;
    /**
     *  Pausing prevents any buffer flushing until unpaused.
     */
    pause(): void;
    unpause(): void;
    isPaused(): boolean;
    getState(): string;
    bufferSize(): number;
    destroy(eventData?: unknown): void;
    send(data: Parameters<typeof WebSocket.prototype.send>[0]): void;
}
export {};
