import { IncomingHttpHeaders } from 'http';
import { Observer, Subject } from 'rxjs';
import { WebSocketConnectionError } from './errors';
import { IWebSocketConfiguration } from './types';
import { RequestMessage } from '../message';
import { TFunction } from '../../../../types';
export declare class WebSocket<TIncoming = any, TOutgoing = any> {
    url: string;
    configuration: Omit<IWebSocketConfiguration, 'url'>;
    observable: Subject<RequestMessage<TIncoming>>;
    private nested;
    constructor(url: string, configuration: Omit<IWebSocketConfiguration, 'url'>);
    get error(): WebSocketConnectionError | null;
    headers(): Promise<IncomingHttpHeaders>;
    status(): Promise<number>;
    subscribe(observer: Partial<Observer<RequestMessage<TIncoming>>>): this;
    forEach(handler: TFunction<unknown, [RequestMessage<TIncoming>]>): Promise<void>;
    waitUntilComplete(): Promise<void>;
    checkIsConnected(): boolean;
    send(payload: TOutgoing): Promise<void>;
    connect(): this;
    close(status?: number): void;
    /** Resolves `connecting` ready state of the web socket */
    private resolve;
    private handleAbortSignal;
    private scheduleConnectionClosing;
    static build<TIncoming, TOutgoing = any>(configuration: IWebSocketConfiguration): WebSocket<TIncoming, TOutgoing>;
}
//# sourceMappingURL=model.d.ts.map