import { PeerConnectionMonitor } from "../monitors/PeerConnectionMonitor";
import { ClientEventPayloadMap } from "./ClientEventPayloadProvider";
export type RtcPeerConnectionEventerContext = {
    peerConnection: RTCPeerConnection;
    monitor: PeerConnectionMonitor;
    peerConnectionId: string;
    appData?: Record<string, unknown>;
};
export declare class RtcPeerConnectionBinding {
    readonly peerConnection: RTCPeerConnection;
    readonly monitor: PeerConnectionMonitor;
    constructor(peerConnection: RTCPeerConnection, monitor: PeerConnectionMonitor);
    unbind(): void;
    bind(): void;
    private _onDataChannel;
    private _onIceCandidateError;
    private _onIceConnectionStateChange;
    private _onConnectionStateChange;
    private _onIceCandidate;
    private _onIceGatheringStateChange;
    private _onNegotiationNeeded;
    private _onSignalingStateChange;
    private _onTrack;
    private _fireEvent;
}
export declare function bindMediaStreamTrackEvents(options: {
    pcMonitor: PeerConnectionMonitor;
    track: MediaStreamTrack;
    fireEvent: <K extends keyof ClientEventPayloadMap>(eventType: K, payload: ClientEventPayloadMap[K]) => void;
    attachments?: Record<string, unknown>;
}): void;
export declare function bindRtcDataChannelEvents(options: {
    monitor: PeerConnectionMonitor;
    dataChannel: RTCDataChannel;
    fireEvent: <K extends keyof ClientEventPayloadMap>(eventType: K, payload: ClientEventPayloadMap[K]) => void;
}): void;
