import { IcePathKind } from "../monitors/IceCandidatePairMonitor";
import { PeerConnectionMonitor } from "../monitors/PeerConnectionMonitor";
import { Detector } from "./Detector";
export type IceDisconnectedIssuePayload = {
    peerConnectionId: string;
    transportId: string;
    iceState?: string;
    dtlsState?: string;
    selectedCandidatePairId?: string;
    disconnectedForMs: number;
    iceGeneration: number;
    durationInMs?: number;
};
export type IceConnectionFailedIssuePayload = {
    peerConnectionId: string;
    transportId: string;
    dtlsState?: string;
    selectedCandidatePairId?: string;
    disconnectedForMs?: number;
    iceGeneration: number;
    durationInMs?: number;
};
export type IceTransportStalledIssuePayload = {
    peerConnectionId: string;
    transportId: string;
    iceState?: string;
    candidatePairState?: string;
    selectedCandidatePairId?: string;
    direction: 'inbound';
    stalledForMs: number;
    outboundBytesDelta?: number;
    inboundBytesDelta?: number;
    currentRoundTripTime?: number;
    lastPacketReceivedTimestamp?: number;
    iceGeneration: number;
    durationInMs?: number;
};
export type UnstableIcePathIssuePayload = {
    peerConnectionId: string;
    pathKey: string;
    transportId?: string;
    switches: number;
    windowInMs: number;
    kind: IcePathKind;
    durationInMs?: number;
};
export type IceRestartRecommendationReason = 'ice-failed' | 'ice-disconnected' | 'transport-stalled' | 'never-established';
export type IceRestartRecommendedEventPayload = {
    peerConnectionId: string;
    transportId?: string;
    reason: IceRestartRecommendationReason;
    conditionDurationInMs: number;
    iceGeneration: number;
    recommendationCount: number;
    iceState?: string;
    dtlsState?: string;
    selectedCandidatePairId?: string;
};
export type IceRestartOutcome = 'detected' | 'recovered' | 'failed';
export type IceRestartClientEventPayload = {
    peerConnectionId: string;
    transportId: string;
    iceGeneration: number;
    outcome: IceRestartOutcome;
    iceState?: string;
    evidence: 'ice-username-fragment-changed';
    timestamp: number;
};
export declare class IceConnectivityDetector implements Detector {
    readonly peerConnection: PeerConnectionMonitor;
    static readonly DISCONNECTED_ISSUE_TYPE = "ice-disconnected";
    static readonly FAILED_ISSUE_TYPE = "ice-connection-failed";
    static readonly STALLED_ISSUE_TYPE = "ice-transport-stalled";
    static readonly UNSTABLE_PATH_ISSUE_TYPE = "unstable-ice-path";
    readonly name = "ice-connectivity-detector";
    disabled: boolean;
    private readonly _states;
    private readonly _unstablePaths;
    private _establishmentRecommendedAt?;
    private _establishmentRecommendations;
    constructor(peerConnection: PeerConnectionMonitor);
    private get config();
    update(): void;
    private _checkPathStability;
    private _getState;
    private _checkIceRestart;
    private _usernameFragmentOf;
    private _checkIceState;
    private _checkInboundStall;
    private _checkRestartRecommendation;
    private _checkEstablishmentRecommendation;
    private _recommendRestart;
    private _notifyRestart;
    private _resolveAll;
    private _resolveIssue;
    private _issueKey;
}
