import { ChannelState } from "@synet/patterns/realtime";
import type { RealtimeChannel, RealtimeProviderOptions, RealtimeEvent, EventSelector } from "@synet/patterns/realtime/client";
import type { WebsocketOptions } from "./websocket-types";
/**
 * WebSocket implementation of RealtimeChannel
 */
export declare class WebSocketRealtimeChannel<TIn extends RealtimeEvent = RealtimeEvent, TOut extends RealtimeEvent = RealtimeEvent> implements RealtimeChannel<TIn, TOut> {
    private url;
    private options;
    readonly id: `${string}-${string}-${string}-${string}-${string}`;
    private socket;
    private state;
    private eventHandlers;
    private reconnectTimer;
    private reconnectAttempts;
    private connectionPromise;
    constructor(url: string, options?: RealtimeProviderOptions<WebsocketOptions>);
    /**
     * Connect to the WebSocket channel
     * Returns immediately but establishes connection in background
     */
    connect(): Promise<void>;
    on<T extends TIn = TIn>(selector: EventSelector, handler: (event: T) => void): () => void;
    emit(event: TOut): Promise<void>;
    close(): Promise<void>;
    getState(): ChannelState;
    private processIncomingEvent;
    private scheduleReconnect;
}
