import { type NetworkProbeEvent, type NetworkProbeState } from './Lifecycle.js'; export interface NetworkProbeOptions { /** Sampling interval. Defaults to 1000 ms; valid range is 250..60000. */ intervalMs?: number; /** Number of completed snapshots retained for diagnostics. Defaults to 30. */ historySize?: number; } export interface NetworkProbeOnceOptions { /** Counter-delta observation window. Defaults to 1000 ms; valid range is 250..10000. */ sampleWindowMs?: number; signal?: AbortSignal; } export type NetworkQuality = 'unknown' | 'good' | 'fair' | 'poor'; export interface NetworkDirectionMetrics { /** Packets observed during this sample window. Null until a counter delta exists. */ packets: number | null; packetsLost: number | null; /** Ratio in the range 0..1. */ packetLossRate: number | null; bitrateBps: number | null; jitterMs: number | null; } export interface NetworkRoute { protocol: string | null; relayProtocol: string | null; localCandidateType: string | null; remoteCandidateType: string | null; } export interface NetworkPeerSnapshot { peerId: string; rttMs: number | null; inbound: NetworkDirectionMetrics; outbound: NetworkDirectionMetrics; route: NetworkRoute | null; quality: NetworkQuality; } export interface NetworkSummary { peerCount: number; rttMs: number | null; jitterMs: number | null; packetLossRate: number | null; inboundBitrateBps: number | null; outboundBitrateBps: number | null; quality: NetworkQuality; } export interface NetworkProbeSnapshot { sequence: number; sampledAt: number; sampleWindowMs: number | null; peers: NetworkPeerSnapshot[]; summary: NetworkSummary; } export interface NetworkProbe { readonly state: NetworkProbeState; readonly latest: NetworkProbeSnapshot | null; readonly history: NetworkProbeSnapshot[]; readonly lifecycleHistory: { from: NetworkProbeState; event: NetworkProbeEvent; to: NetworkProbeState; }[]; start(): void; sample(): Promise; stop(): void; onChange(listener: (snapshot: NetworkProbeSnapshot) => void): () => void; onError(listener: (error: Error) => void): () => void; } export type NetworkStatsProvider = () => Promise<{ peerId: string; report: RTCStatsReport; }[]>; export declare function createNetworkProbe(provider: NetworkStatsProvider, options?: NetworkProbeOptions): NetworkProbe; export declare function probeNetworkOnce(provider: NetworkStatsProvider, options?: NetworkProbeOnceOptions): Promise;