import type { IWebSocketCloseInfo, IWebSocketConnectOptions, IWebSocketMessageEnvelope, IWebSocketMessageHandler, IWebSocketTransport } from '@mcp-abap-adt/interfaces';
/**
 * Minimal WS-like instance contract to avoid hard dependency on a specific WS library.
 */
interface IWebSocketLike {
    readyState: number;
    send(data: string): void;
    close(code?: number, reason?: string): void;
    onopen: ((event: unknown) => void) | null;
    onmessage: ((event: {
        data: unknown;
    }) => void) | null;
    onerror: ((event: unknown) => void) | null;
    onclose: ((event: {
        code?: number;
        reason?: string;
        wasClean?: boolean;
    }) => void) | null;
}
interface IWebSocketFactory {
    create(url: string, protocols?: string | string[], options?: IWebSocketConnectOptions): IWebSocketLike;
}
export declare class GenericWebSocketTransport implements IWebSocketTransport {
    private readonly factory;
    private socket;
    private messageHandlers;
    private openHandlers;
    private errorHandlers;
    private closeHandlers;
    constructor(factory: IWebSocketFactory);
    connect(url: string, options?: IWebSocketConnectOptions): Promise<void>;
    disconnect(code?: number, reason?: string): Promise<void>;
    send<T = unknown>(message: IWebSocketMessageEnvelope<T>): Promise<void>;
    onMessage<T = unknown>(handler: IWebSocketMessageHandler<T>): void;
    onOpen(handler: () => void | Promise<void>): void;
    onError(handler: (error: Error) => void | Promise<void>): void;
    onClose(handler: (info: IWebSocketCloseInfo) => void | Promise<void>): void;
    isConnected(): boolean;
    private handleIncomingMessage;
    private normalizeError;
    private emitOpen;
    private emitError;
    private emitClose;
}
export type { IWebSocketFactory, IWebSocketLike };
//# sourceMappingURL=GenericWebSocketTransport.d.ts.map