import EventEmitter from 'eventemitter3';
import { IceCandidatePairMonitor, IcePathKind } from "./IceCandidatePairMonitor";
import { PeerConnectionMonitor } from "./PeerConnectionMonitor";
export type IcePathTransition = 'initial-selection' | 'direct-to-relay' | 'relay-to-direct' | 'relay-protocol-changed' | 'turn-server-changed' | 'path-changed';
export type IcePathEvidence = {
    kind: IcePathKind;
    pairId?: string;
    transportId?: string;
    localCandidateId?: string;
    remoteCandidateId?: string;
    localCandidateType?: string;
    remoteCandidateType?: string;
    protocol?: string;
    relayProtocol?: string;
    turnUrl?: string;
    turnServer?: string;
    localAddress?: string;
    localPort?: number;
    remoteAddress?: string;
    remotePort?: number;
};
export type SelectedIcePathEvents = {
    'changed': [{
        transition: IcePathTransition;
        from?: IcePathEvidence;
        to: IcePathEvidence;
    }];
    'close': [];
};
export type IcePathDurations = Record<IcePathKind, number>;
export declare class SelectedIcePath extends EventEmitter<SelectedIcePathEvents> {
    readonly key: string;
    private _pair;
    private readonly _peerConnection;
    readonly createdAt: number;
    updatedAt: number;
    closed: boolean;
    readonly durations: IcePathDurations;
    pathSwitches: number;
    directToRelaySwitches: number;
    relayToDirectSwitches: number;
    relayProtocolSwitches: number;
    turnServerSwitches: number;
    firstRelaySelectedAt?: number;
    lastSwitchedAt?: number;
    totalBytesSent: number;
    totalBytesReceived: number;
    totalPacketsSent: number;
    totalPacketsReceived: number;
    relayBytesSent: number;
    relayBytesReceived: number;
    relayPacketsSent: number;
    relayPacketsReceived: number;
    private _kind;
    private _turnServer?;
    private _tuple;
    private _kindSince;
    private readonly _switchTimestamps;
    appData?: Record<string, unknown> | undefined;
    constructor(key: string, _pair: IceCandidatePairMonitor, _peerConnection: PeerConnectionMonitor);
    getPeerConnection(): PeerConnectionMonitor;
    get pair(): IceCandidatePairMonitor;
    get localCandidate(): import("./IceCandidateMonitor").IceCandidateMonitor | undefined;
    get remoteCandidate(): import("./IceCandidateMonitor").IceCandidateMonitor | undefined;
    get iceTransport(): import("./IceTransportMonitor").IceTransportMonitor | undefined;
    get pairId(): string;
    get transportId(): string | undefined;
    get kind(): IcePathKind;
    get usingTurn(): boolean;
    get usingTcp(): boolean;
    get relayProtocol(): import("./IceCandidateMonitor").IceRelayProtocol | undefined;
    get turnUrl(): string | undefined;
    get turnServer(): string | undefined;
    get tuple(): string;
    get protocol(): string | undefined;
    get localCandidateType(): string | undefined;
    get remoteCandidateType(): string | undefined;
    get localAddress(): string | undefined;
    get localPort(): number | undefined;
    get localAddressFamily(): import("./IceCandidateMonitor").IceAddressFamily | undefined;
    get remoteAddress(): string | undefined;
    get remotePort(): number | undefined;
    get remoteAddressFamily(): import("./IceCandidateMonitor").IceAddressFamily | undefined;
    get currentRoundTripTime(): number | undefined;
    get state(): "new" | "in-progress" | "waiting" | "failed" | "succeeded" | undefined;
    get durationInMs(): number;
    get relayDurationInMs(): number;
    get timeToFirstRelayInMs(): number | undefined;
    get relayBytesRatio(): number | undefined;
    getSwitchCountSince(timestamp: number): number;
    update(pair: IceCandidatePairMonitor): void;
    notifyInitialSelection(): void;
    close(): void;
    private _accumulateTraffic;
    private _notify;
    private _describe;
}
