UNPKG

@observertc/client-monitor-js

Version:

ObserveRTC Client Integration Javascript Library

143 lines (142 loc) 6.92 kB
import { ClientSample } from './schema/ClientSample'; import { Logger } from "./utils/logger"; import EventEmitter from 'eventemitter3'; import { AddedClientIssue, ClientEvent, ClientIssuePayload, ClientMetaData, ClientMonitorEvents, RaisedClientIssue, ResolvedClientIssue } 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 type ExtensionStatProvider = () => { type: string; payload?: Record<string, unknown>; } | Promise<{ type: string; payload?: Record<string, unknown>; }>; export declare class ClientMonitor<AppData extends Record<string, unknown> = Record<string, unknown>> extends EventEmitter<ClientMonitorEvents> { static readonly samplingSchemaVersion = "3.2.0"; readonly mappedPeerConnections: Map<string, PeerConnectionMonitor>; readonly detectors: Detectors; readonly clientEventPayloadProvider: ClientEventPayloadProvider; readonly extensionStatsProviders: Set<ExtensionStatProvider>; readonly activeIssues: Map<string, RaisedClientIssue>; scoreCalculator: ScoreCalculator; readonly logger: Logger; 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<AppData>; attachments?: Record<string, unknown>; constructor(config?: Partial<ClientMonitorConfig<AppData>>); get clientId(): string | undefined; set clientId(clientId: string | undefined); get callId(): string | undefined; set callId(callId: string | undefined); get appData(): AppData; set appData(appData: AppData); 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<T extends ClientIssuePayload = ClientIssuePayload>(input: { type: string; payload?: T; timestamp?: number; }): AddedClientIssue<T> | undefined; raiseIssue<T extends ClientIssuePayload = ClientIssuePayload>(key: string, input: { type: string; payload?: T; timestamp?: number; }): RaisedClientIssue<T> | undefined; resolveIssue<T extends ClientIssuePayload = ClientIssuePayload>(key: string, input: { comment?: string; payload?: T; resolvedAt?: number; }): ResolvedClientIssue | undefined; getActiveIssuesByType(type?: string): RaisedClientIssue[]; isIssueActive(key: string): boolean; private _bufferIssueForSample; 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; }