import { RTCSessionDescription, MediaStream } from 'react-native-webrtc';
import type { MediaTrackConstraints } from 'react-native-webrtc/lib/typescript/Constraints';
import type { RTCSessionDescriptionInit } from 'react-native-webrtc/lib/typescript/RTCSessionDescription';
import type { CallOptions } from './call-options';
type MediaConstraints = {
    audio?: boolean | MediaTrackConstraints;
    video?: boolean | MediaTrackConstraints;
};
export declare class Peer {
    static createOffer: (callOptions: CallOptions) => Promise<Peer>;
    mediaConstraints: MediaConstraints;
    private instance;
    private options;
    private iceGatheringComplete;
    constructor(options: CallOptions);
    close: () => this;
    setRemoteDescription: (session: RTCSessionDescriptionInit) => Promise<this>;
    get remoteDescription(): RTCSessionDescription | null;
    get localDescription(): RTCSessionDescription | null;
    createPeerConnection: () => this;
    createAnswer: () => Promise<this>;
    createOffer: () => Promise<this>;
    attachLocalStream: (constraints: MediaConstraints) => Promise<this>;
    waitForIceGatheringComplete: () => Promise<this>;
    setMediaStreamState: (stream: MediaStream, enabled: boolean) => this;
    private onIceGatheringStateChange;
    private onIceCandidate;
    private onIceCandidateError;
    private getIceServers;
    private onTrackEvent;
    private onSignalingStateChange;
    private onIceConnectionStateChange;
    private onConnectionStateChange;
}
export {};
