import { Transport, RPCMessage } from '../types';
/**
 * @group Transport Layer
 */
export declare class WebRTCTransport implements Transport {
    private dataChannel;
    private messageHandler?;
    constructor(dataChannel: RTCDataChannel);
    send(message: RPCMessage): Promise<void>;
    onMessage(handler: (message: RPCMessage) => void): void;
    connect(): Promise<void>;
    disconnect(): Promise<void>;
    isConnected(): boolean;
    private setupEventHandlers;
}
/**
 * @group Transport Layer
 */
export interface WebRTCConfig {
    iceServers?: RTCIceServer[];
    iceTransportPolicy?: RTCIceTransportPolicy;
    bundlePolicy?: RTCBundlePolicy;
}
/**
 * @group Transport Layer
 */
export declare class WebRTCPeerConnection {
    private peerConnection;
    private dataChannel?;
    constructor(config?: WebRTCConfig);
    createOffer(channelLabel?: string): Promise<RTCSessionDescriptionInit>;
    createAnswer(): Promise<RTCSessionDescriptionInit>;
    handleAnswer(answer: RTCSessionDescriptionInit): Promise<void>;
    setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void>;
    addIceCandidate(candidate: RTCIceCandidateInit): Promise<void>;
    onIceCandidate(handler: (candidate: RTCIceCandidate | null) => void): void;
    onDataChannel(handler: (channel: RTCDataChannel) => void): void;
    onConnectionStateChange(handler: (state: RTCPeerConnectionState) => void): void;
    getDataChannel(): RTCDataChannel | undefined;
    getConnectionState(): RTCPeerConnectionState;
    close(): void;
    private setupPeerConnectionHandlers;
}
/**
 * @group Transport Layer
 */
export declare function createWebRTCTransport(dataChannel: RTCDataChannel): WebRTCTransport;
//# sourceMappingURL=webrtc.d.ts.map