import { Logger } from "./utils/logger";
export type AppliedClientMonitorConfig<AppData extends Record<string, unknown> = Record<string, unknown>> = {
    clientId?: string;
    callId?: string;
    bufferingEventsForSamples?: boolean;
    collectingPeriodInMs: number;
    samplingPeriodInMs?: number;
    integrateNavigatorMediaDevices: boolean | MediaDevices;
    addClientJointEventOnCreated?: boolean;
    addClientLeftEventOnClose?: boolean;
    videoFreezesDetector: Record<string, never> | null;
    dryInboundTrackDetector: {
        thresholdInMs: number;
    } | null;
    dryOutboundTrackDetector: {
        thresholdInMs: number;
    } | null;
    playoutDiscrepancyDetector: {
        lowSkewThreshold: number;
        highSkewThreshold: number;
    } | null;
    syntheticSamplesDetector: {
        createEvent?: boolean;
        minSynthesizedSamplesDuration: number;
    } | null;
    audioDesyncDetector: {
        fractionalCorrectionAlertOnThreshold: number;
        fractionalCorrectionAlertOffThreshold: number;
    } | null;
    congestionDetector: {
        sensitivity: 'low' | 'medium' | 'high';
    } | null;
    cpuPerformanceDetector: {
        incomingDecodedFramesRatioThresholds: {
            alertOn: number;
            alertOff: number;
            minReceivedFrames: number;
        };
        durationOfCollectingStatsThreshold: {
            lowWatermark: number;
            highWatermark: number;
        };
        encoderCpuLimitationShareThreshold?: number;
        encodeTimeBudgetRatio?: number;
    } | null;
    audioConcealmentDetector: {
        onThreshold: number;
        offThreshold: number;
        windowInMs: number;
        minSamplesInWindow: number;
    } | null;
    jitterBufferStressDetector: {
        targetDelayThresholdInMs: number;
        timeStretchThreshold: number;
        minConsecutiveTicks: number;
    } | null;
    decoderPerformanceDetector: {
        decodeTimeBudgetRatio: number;
        dropRatioThreshold: number;
        minFramesReceived: number;
        quietLossThreshold: number;
        minConsecutiveTicks: number;
    } | null;
    videoRecoveryDetector: {
        windowInMs: number;
        pliRateAlertOn: number;
        pliRateAlertOff: number;
        recoveryFailedThresholdInMs: number;
        recoveryFailedMinPliCount: number;
    } | null;
    sourceEncoderBottleneckDetector: {
        captureFpsRatioThreshold: number;
        minSourceFps: number;
        encodeFpsRatioThreshold: number;
        encodeTimeBudgetRatio: number;
        cpuLimitationShareThreshold: number;
        minConsecutiveTicks: number;
    } | null;
    simulcastLayerDetector: {
        createEvent?: boolean;
    } | null;
    captureFailureDetector: {
        silenceThresholdInMs: number;
        silenceRmsThreshold: number;
        createEvent?: boolean;
    } | null;
    codecChangeDetector: {
        createEvent?: boolean;
    } | null;
    videoResolutionChangeDetector: {
        createEvent?: boolean;
    } | null;
    stuckDecoderDetector: {
        thresholdInMs: number;
        rttMultiplier: number;
        minStuckTicks: number;
        minBitrate: number;
        minPliCount: number;
    } | null;
    statsGapDetector: {
        gapRatioThreshold: number;
        minGapInMs: number;
        createEvent?: boolean;
    } | null;
    longPcConnectionEstablishmentDetector: {
        createEvent?: boolean;
        thresholdInMs: number;
    } | null;
    iceConnectivityDetector: {
        disconnectedThresholdInMs: number;
        transportStallThresholdInMs: number;
        createEvent?: boolean;
        pathSwitchWindowInMs: number;
        pathSwitchThreshold: number;
        iceRestartRecommendationThresholdInMs: number;
        iceRestartRecommendationCooldownInMs: number;
    } | null;
    appData: AppData;
};
export type ClientMonitorConfig<AppData extends Record<string, unknown> = Record<string, unknown>> = Partial<AppliedClientMonitorConfig<AppData>> & {
    logger?: Logger;
};
export type ClientMonitorSourceType = 'mediasoup-device' | 'RTCPeerConnection' | 'mediasoup-transport';
