import { ClientSample } from './schema/ClientSample';
import EventEmitter from 'eventemitter3';
import { ClientEvent, ClientIssue, ClientMetaData, ClientMonitorEvents } from './ClientMonitorEvents';
import { PeerConnectionMonitor } from './monitors/PeerConnectionMonitor';
import { AppliedClientMonitorConfig, ClientMonitorConfig, ClientMonitorSourceType } from './ClientMonitorConfig';
import { PartialBy } from './utils/common';
import { Detectors } from './detectors/Detectors';
import { OutboundTrackMonitor } from './monitors/OutboundTrackMonitor';
import { InboundTrackMonitor } from './monitors/InboundTrackMonitor';
import { TrackMonitor } from './monitors/TrackMonitor';
import { ScoreCalculator } from "./scores/ScoreCalculator";
import { ClientEventPayloadProvider } from './sources/ClientEventPayloadProvider';
export declare class ClientMonitor extends EventEmitter<ClientMonitorEvents> {
    static readonly samplingSchemaVersion = "3.0.0";
    readonly mappedPeerConnections: Map<string, PeerConnectionMonitor>;
    readonly detectors: Detectors;
    readonly clientEventPayloadProvider: ClientEventPayloadProvider;
    scoreCalculator: ScoreCalculator;
    closed: boolean;
    lastSampledAt: number;
    lastCollectingStatsAt: number;
    cpuPerformanceAlertOn: boolean;
    sendingAudioBitrate: number;
    sendingVideoBitrate: number;
    receivingAudioBitrate: number;
    receivingVideoBitrate: number;
    totalAvailableIncomingBitrate: number;
    totalAvailableOutgoingBitrate: number;
    avgRttInSec: number;
    score: number;
    scoreReasons?: Record<string, number>;
    private _browser?;
    private readonly _sources;
    private _timer?;
    private _samplingTick;
    private _collectingCounter;
    private _clientEvents;
    private _clientMetaItems;
    private _clientIssues;
    private _extensionStats;
    durationOfCollectingStatsInMs: number;
    readonly config: AppliedClientMonitorConfig;
    attachments?: Record<string, unknown>;
    constructor(config?: Partial<ClientMonitorConfig>);
    get clientId(): string | undefined;
    set clientId(clientId: string | undefined);
    get callId(): string | undefined;
    set callId(callId: string | undefined);
    get appData(): Record<string, unknown> | undefined;
    set appData(appData: Record<string, unknown> | undefined);
    set browser(browser: {
        name: 'chrome' | 'firefox' | 'safari' | 'edge' | 'opera' | 'unknown';
        version: string;
    } | undefined);
    set onsamplecreated(listener: (...args: ClientMonitorEvents['sample-created']) => void);
    set onstatscollected(listener: (...args: ClientMonitorEvents['stats-collected']) => void);
    set onclientevent(listener: (...args: ClientMonitorEvents['client-event']) => void);
    set onissue(listener: (...args: ClientMonitorEvents['issue']) => void);
    get browser(): {
        name: "chrome" | "firefox" | "safari" | "edge" | "opera" | "unknown";
        version: string;
    } | undefined;
    close(): void;
    on<K extends keyof ClientMonitorEvents>(event: K, listener: (...args: ClientMonitorEvents[K]) => void): this;
    once<K extends keyof ClientMonitorEvents>(event: K, listener: (...args: ClientMonitorEvents[K]) => void): this;
    off<K extends keyof ClientMonitorEvents>(event: K, listener: (...args: ClientMonitorEvents[K]) => void): this;
    emit(event: keyof ClientMonitorEvents, ...args: ClientMonitorEvents[typeof event]): boolean;
    collect(): Promise<[string, RTCStats[]][]>;
    getPeerConnectionMonitor(peerConnectionId: string): PeerConnectionMonitor | undefined;
    setScore<T extends Record<string, number>>(score: number, reasons?: T): void;
    createSample(): ClientSample | undefined;
    addPeerConnectionMonitor(peerConnectionMonitor: PeerConnectionMonitor): void;
    addClientJoinEvent(event?: {
        payload?: Record<string, unknown>;
        timestamp?: number;
    }): void;
    addClientLeftEvent(event?: {
        payload?: Record<string, unknown>;
        timestamp?: number;
    }): void;
    addEvent<Payload = Record<string, unknown>>(event: PartialBy<ClientEvent, 'timestamp'> & {
        payload?: Payload;
    }): void;
    addIssue(issue: PartialBy<ClientIssue, 'timestamp'>): void;
    addMetaData(metaData: PartialBy<ClientMetaData, 'timestamp'>): void;
    addExtensionStats(stats: {
        type: string;
        payload?: Record<string, unknown>;
    }): void;
    addSource(source: unknown, type?: ClientMonitorSourceType): void;
    removeSource(source: unknown, type?: ClientMonitorSourceType): void;
    fetchUserAgentData(): any;
    watchNavigatorMediaDevices(): void;
    get peerConnections(): PeerConnectionMonitor[];
    get codecs(): import(".").CodecMonitor[];
    get inboundRtps(): import(".").InboundRtpMonitor[];
    get outboundRtps(): import(".").OutboundRtpMonitor[];
    get remoteInboundRtps(): import(".").RemoteInboundRtpMonitor[];
    get remoteOutboundRtps(): import(".").RemoteOutboundRtpMonitor[];
    get mediaSources(): import(".").MediaSourceMonitor[];
    get mediaPlayouts(): import(".").MediaPlayoutMonitor[];
    get dataChannels(): import(".").DataChannelMonitor[];
    get iceCandidatePairs(): import(".").IceCandidatePairMonitor[];
    get iceCandidates(): import(".").IceCandidateMonitor[];
    get iceTransports(): import(".").IceTransportMonitor[];
    get certificates(): import(".").CertificateMonitor[];
    get tracks(): TrackMonitor[];
    getTrackMonitor(trackId: string): TrackMonitor | undefined;
    getInboundTrackMonitor(trackId: string): InboundTrackMonitor | undefined;
    getOutboundTrackMonitor(trackId: string): OutboundTrackMonitor | undefined;
    setCollectingPeriod(collectingPeriodInMs: number): void;
    setSamplingPeriod(samplingPeriodInMs: number): void;
    private _setSamplingTick;
}
