import { Logger } from "./utils/logger"; export type AppliedClientMonitorConfig = Record> = { clientId?: string; callId?: string; bufferingEventsForSamples?: boolean; collectingPeriodInMs: number; samplingPeriodInMs?: number; integrateNavigatorMediaDevices: boolean | MediaDevices; addClientJointEventOnCreated?: boolean; addClientLeftEventOnClose?: boolean; videoFreezesDetector: Record | 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; sendResolvedIssuesToServer?: boolean; appData: AppData; }; export type ClientMonitorConfig = Record> = Partial> & { logger?: Logger; }; export type ClientMonitorSourceType = 'mediasoup-device' | 'RTCPeerConnection' | 'mediasoup-transport';