/**
 * Browser transport that relays {@link RealtimeMessage} frames through a
 * shared WebSocket hub (demo server or custom relay). Unlike
 * {@link BroadcastChannelTransport}, this works across different browsers on
 * the same origin.
 */
import type { RealtimeMessage, RealtimeTransport } from './types.js';
export interface WebSocketRelayTransportOptions {
    /** Local peer identity. */
    id: string;
    /** Hub URL, e.g. `ws://localhost:8231/rt`. */
    url: string;
    /** Injectable WebSocket for tests. */
    WebSocketImpl?: typeof WebSocket;
}
export declare class WebSocketRelayTransport implements RealtimeTransport {
    readonly id: string;
    private ws;
    private handlers;
    private closed;
    private pending;
    constructor(opts: WebSocketRelayTransportOptions);
    send(message: RealtimeMessage): void;
    onMessage(handler: (message: RealtimeMessage) => void): () => void;
    close(): void;
    private flushPending;
}
//# sourceMappingURL=websocket-relay-transport.d.ts.map