@observertc/client-monitor-js
Version:
ObserveRTC Client Integration Javascript Library
143 lines (142 loc) • 6.92 kB
TypeScript
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;
}