import IConnectionObserver, { RTCIceCandidatePair } from './IConnectionObserver';
import { HMSConnectionRole } from './model';
import { HMSAudioTrackSettings, HMSVideoTrackSettings } from '../media/settings';
import { HMSLocalTrack } from '../media/tracks';
import { TrackState } from '../notification-manager';
import JsonRpcSignal from '../signal/jsonrpc';
export default abstract class HMSConnection {
    readonly role: HMSConnectionRole;
    protected readonly signal: JsonRpcSignal;
    protected abstract readonly observer: IConnectionObserver;
    abstract readonly nativeConnection: RTCPeerConnection;
    /**
     * We keep a list of pending IceCandidates received
     * from the signalling server. When the peer-connection
     * is initialized we call [addIceCandidate] for each.
     *
     * WARN:
     *  - [HMSPublishConnection] keeps the complete list of candidates (for
     *      ice-connection failed/disconnect) forever.
     *  - [HMSSubscribeConnection] clears this list as soon as we call [addIceCandidate]
     */
    readonly candidates: RTCIceCandidateInit[];
    sfuNodeId?: string;
    selectedCandidatePair?: RTCIceCandidatePair;
    protected constructor(role: HMSConnectionRole, signal: JsonRpcSignal);
    get iceConnectionState(): RTCIceConnectionState;
    get connectionState(): RTCPeerConnectionState;
    private get action();
    setSfuNodeId(nodeId?: string): void;
    addTransceiver(track: MediaStreamTrack, init: RTCRtpTransceiverInit): RTCRtpTransceiver;
    createOffer(tracks?: Map<string, TrackState>, options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit>;
    createAnswer(options?: RTCOfferOptions | undefined): Promise<RTCSessionDescriptionInit>;
    setLocalDescription(description: RTCSessionDescriptionInit): Promise<void>;
    setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void>;
    addIceCandidate(candidate: RTCIceCandidateInit): Promise<void>;
    get remoteDescription(): RTCSessionDescription | null;
    getSenders(): Array<RTCRtpSender>;
    handleSelectedIceCandidatePairs(): void;
    removeTrack(sender: RTCRtpSender): void;
    setMaxBitrateAndFramerate(track: HMSLocalTrack, updatedSettings?: HMSAudioTrackSettings | HMSVideoTrackSettings): Promise<void>;
    getStats(): Promise<RTCStatsReport>;
    close(): void;
    private getReceivers;
}
