diff --git a/package.json b/package.json index 4565bab..b28289c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@observertc/observer-js", - "version": "1.0.0-beta.1", + "version": "1.0.0", "description": "Server Side NodeJS Library for processing ObserveRTC Samples", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/src/ObservedCall.ts b/src/ObservedCall.ts index fa68b0e..8551489 100644 --- a/src/ObservedCall.ts +++ b/src/ObservedCall.ts @@ -11,6 +11,9 @@ import { Updater } from './updaters/Updater'; import { OnIntervalUpdater } from './updaters/OnIntervalUpdater'; import { OnAnyClientCallUpdater } from './updaters/OnAnyClientCallUpdater'; import { ObservedCallEventMonitor } from './ObservedCallEventMonitor'; +import { createLogger } from './common/logger'; + +const logger = createLogger('ObservedCall'); export type ObservedCallSettings = Record> = { callId: string; @@ -18,6 +21,7 @@ export type ObservedCallSettings = Recor remoteTrackResolvePolicy?: 'p2p' | 'mediasoup-sfu', updatePolicy?: 'update-on-any-client-updated' | 'update-when-all-client-updated' | 'update-on-interval', updateIntervalInMs?: number, + maxIdleIfEmptyMs?: number, }; export type ObservedCallEvents = { @@ -75,6 +79,20 @@ export class ObservedCall = Record = Record, - }; - private _callEndedEvent: { - emitted: boolean - }; + public maxIdleIfEmptyMs?: number; + private _autoCloseTimer?: ReturnType; public constructor( settings: ObservedCallSettings, @@ -104,6 +118,7 @@ export class ObservedCall = Record = Record = Record = Record = Record c.lastSampleTimestamp ?? 0)); + this.emit('update'); this.deltaNumberOfIssues = 0; @@ -247,6 +262,20 @@ export class ObservedCall = Record = Record { + if (this.closed) return; + if (this.observedClients.size > 0) return; + + logger.debug(`Call ${this.callId} is empty for ${this.maxIdleIfEmptyMs}ms, closing...`); + this.close(); + }, this.maxIdleIfEmptyMs); + } + // public resetSummaryMetrics() { // this.totalAddedClients = 0; // this.totalRemovedClients = 0; diff --git a/src/ObservedCallEventMonitor.ts b/src/ObservedCallEventMonitor.ts index 6d390d5..1a5b5ca 100644 --- a/src/ObservedCallEventMonitor.ts +++ b/src/ObservedCallEventMonitor.ts @@ -1,18 +1,18 @@ import { ObservedCall } from './ObservedCall'; -import { ObservedCertificate } from './ObservedCertificate'; +import { ObservedCertificate } from './webrtc/ObservedCertificate'; import { ObservedClient, ObservedClientEvents } from './ObservedClient'; -import { ObservedCodec } from './ObservedCodec'; -import { ObservedDataChannel } from './ObservedDataChannel'; -import { ObservedIceCandidate } from './ObservedIceCandidate'; -import { ObservedIceCandidatePair } from './ObservedIceCandidatePair'; -import { ObservedIceTransport } from './ObservedIceTransport'; -import { ObservedInboundRtp } from './ObservedInboundRtp'; -import { ObservedInboundTrack } from './ObservedInboundTrack'; -import { ObservedMediaPlayout } from './ObservedMediaPlayout'; -import { ObservedMediaSource } from './ObservedMediaSource'; -import { ObservedOutboundRtp } from './ObservedOutboundRtp'; -import { ObservedOutboundTrack } from './ObservedOutboundTrack'; -import { ObservedPeerConnection } from './ObservedPeerConnection'; +import { ObservedCodec } from './webrtc/ObservedCodec'; +import { ObservedDataChannel } from './webrtc/ObservedDataChannel'; +import { ObservedIceCandidate } from './webrtc/ObservedIceCandidate'; +import { ObservedIceCandidatePair } from './webrtc/ObservedIceCandidatePair'; +import { ObservedIceTransport } from './webrtc/ObservedIceTransport'; +import { ObservedInboundRtp } from './webrtc/ObservedInboundRtp'; +import { ObservedInboundTrack } from './webrtc/ObservedInboundTrack'; +import { ObservedMediaPlayout } from './webrtc/ObservedMediaPlayout'; +import { ObservedMediaSource } from './webrtc/ObservedMediaSource'; +import { ObservedOutboundRtp } from './webrtc/ObservedOutboundRtp'; +import { ObservedOutboundTrack } from './webrtc/ObservedOutboundTrack'; +import { ObservedPeerConnection } from './webrtc/ObservedPeerConnection'; import { ClientEvent, ClientIssue, ClientMetaData, ClientSample, ExtensionStat } from './schema/ClientSample'; export class ObservedCallEventMonitor { @@ -152,7 +152,7 @@ export class ObservedCallEventMonitor { const onClientExtensionStats = (extensionStats: ExtensionStat) => this._onClientExtensionStats(observedClient, extensionStats); const onUsingTurn = (usingTurn: boolean) => this._onUsingTurn(observedClient, usingTurn); const onUserMediaError = (error: string) => this._onUserMediaError(observedClient, error); - const onClientUpdated = (...args: ObservedClientEvents['update']) => this.onClientUpdated?.(observedClient, args[0].sample, this.context); + const onClientUpdated = (...args: ObservedClientEvents['update']) => this.onClientUpdated?.(observedClient, args[0], this.context); const onClientEvent = (event: ClientEvent) => this.onClientEvent?.(observedClient, event, this.context); observedClient.once('close', () => { diff --git a/src/ObservedClient.ts b/src/ObservedClient.ts index 1426cd9..b524ea2 100644 --- a/src/ObservedClient.ts +++ b/src/ObservedClient.ts @@ -1,5 +1,5 @@ import { EventEmitter } from 'events'; -import { ObservedPeerConnection } from './ObservedPeerConnection'; +import { ObservedPeerConnection } from './webrtc/ObservedPeerConnection'; import { createLogger } from './common/logger'; // eslint-disable-next-line camelcase import { ClientEvent, ClientMetaData, ClientSample, PeerConnectionSample, ClientIssue, ExtensionStat } from './schema/ClientSample'; @@ -10,11 +10,14 @@ import { ClientMetaTypes } from './schema/ClientMetaTypes'; import { parseJsonAs } from './common/utils'; import { CalculatedScore } from './scores/CalculatedScore'; import { Detectors } from './detectors/Detectors'; +import { clear } from 'console'; +import { ParsedUserAgent } from './common/types'; const logger = createLogger('ObservedClient'); export type ObservedClientSettings = Record> = { clientId: string; + maxIdleTimeMs?: number; appData?: AppData; }; @@ -44,14 +47,12 @@ export declare interface ObservedClient { export class ObservedClient = Record> extends EventEmitter { public readonly detectors: Detectors; - public readonly clientId: string; public readonly observedPeerConnections = new Map(); public readonly calculatedScore: CalculatedScore = { weight: 1, value: undefined, }; - public appData: AppData; public attachments?: Record; public updated = Date.now(); @@ -135,16 +136,26 @@ export class ObservedClient = Record = {}; + private _autoCloseTimer?: ReturnType; - public constructor(settings: ObservedClientSettings, public readonly call: ObservedCall) { + public constructor( + public readonly settings: ObservedClientSettings, + public readonly call: ObservedCall + ) { super(); this.setMaxListeners(Infinity); + this._createAutoClose(); - this.clientId = settings.clientId; - this.appData = settings.appData ?? {} as AppData; - this.detectors = new Detectors(); } + + public get clientId() { + return this.settings.clientId; + } + + public get appData(): AppData { + return this.settings.appData ?? {} as AppData; + } public get numberOfPeerConnections() { return this.observedPeerConnections.size; @@ -176,8 +187,24 @@ export class ObservedClient = Record { + if (this.closed) return; + + logger.debug(`Client ${this.clientId} is idle for ${this.settings.maxIdleTimeMs}ms, closing...`); + this.close(); + }, this.settings.maxIdleTimeMs); + } + public accept(sample: ClientSample): void { if (this.closed) throw new Error(`Client ${this.clientId} is closed`); + + this._createAutoClose(); const now = Date.now(); const elapsedInMs = now - this.updated; @@ -654,6 +681,34 @@ export class ObservedClient = Record(metadata.payload); + if (userAgentData) { + if (this.operationSystem === undefined) { + this.operationSystem = { + name: userAgentData.os.name.toLowerCase(), + version: userAgentData.os.version, + }; + } + if (this.engine === undefined) { + this.engine = { + name: userAgentData.engine.name.toLowerCase(), + version: userAgentData.engine.version, + }; + } + if (this.browser === undefined) { + this.browser = { + name: userAgentData.browser.name.toLowerCase(), + version: userAgentData.browser.version, + }; + } + } + + } catch (error) { + logger.warn('Failed to parse USER_AGENT_DATA metadata: %o', error); + } + } } this.call.observer.emit('client-metadata', this, metadata); diff --git a/src/ObservedClientEventMonitor.ts b/src/ObservedClientEventMonitor.ts index 7199779..2488c25 100644 --- a/src/ObservedClientEventMonitor.ts +++ b/src/ObservedClientEventMonitor.ts @@ -1,17 +1,17 @@ -import { ObservedCertificate } from './ObservedCertificate'; +import { ObservedCertificate } from './webrtc/ObservedCertificate'; import { ObservedClient, ObservedClientEvents } from './ObservedClient'; -import { ObservedCodec } from './ObservedCodec'; -import { ObservedDataChannel } from './ObservedDataChannel'; -import { ObservedIceCandidate } from './ObservedIceCandidate'; -import { ObservedIceCandidatePair } from './ObservedIceCandidatePair'; -import { ObservedIceTransport } from './ObservedIceTransport'; -import { ObservedInboundRtp } from './ObservedInboundRtp'; -import { ObservedInboundTrack } from './ObservedInboundTrack'; -import { ObservedMediaPlayout } from './ObservedMediaPlayout'; -import { ObservedMediaSource } from './ObservedMediaSource'; -import { ObservedOutboundRtp } from './ObservedOutboundRtp'; -import { ObservedOutboundTrack } from './ObservedOutboundTrack'; -import { ObservedPeerConnection } from './ObservedPeerConnection'; +import { ObservedCodec } from './webrtc/ObservedCodec'; +import { ObservedDataChannel } from './webrtc/ObservedDataChannel'; +import { ObservedIceCandidate } from './webrtc/ObservedIceCandidate'; +import { ObservedIceCandidatePair } from './webrtc/ObservedIceCandidatePair'; +import { ObservedIceTransport } from './webrtc/ObservedIceTransport'; +import { ObservedInboundRtp } from './webrtc/ObservedInboundRtp'; +import { ObservedInboundTrack } from './webrtc/ObservedInboundTrack'; +import { ObservedMediaPlayout } from './webrtc/ObservedMediaPlayout'; +import { ObservedMediaSource } from './webrtc/ObservedMediaSource'; +import { ObservedOutboundRtp } from './webrtc/ObservedOutboundRtp'; +import { ObservedOutboundTrack } from './webrtc/ObservedOutboundTrack'; +import { ObservedPeerConnection } from './webrtc/ObservedPeerConnection'; import { ClientIssue, ClientMetaData, ExtensionStat } from './schema/ClientSample'; export class ObservedClientEventMonitor = Record> { diff --git a/src/ObservedTURN.ts b/src/ObservedTURN.ts index 7ded965..7affa60 100644 --- a/src/ObservedTURN.ts +++ b/src/ObservedTURN.ts @@ -1,5 +1,5 @@ import { EventEmitter } from 'stream'; -import { ObservedPeerConnection } from './ObservedPeerConnection'; +import { ObservedPeerConnection } from './webrtc/ObservedPeerConnection'; import { ObservedTurnServer } from './ObservedTurnServer'; import { createLogger } from './common/logger'; @@ -34,6 +34,7 @@ export class ObservedTURN extends EventEmitter { public constructor( ) { super(); + this.setMaxListeners(Infinity); } public update() { diff --git a/src/ObservedTurnServer.ts b/src/ObservedTurnServer.ts index e6cefe5..0127ab2 100644 --- a/src/ObservedTurnServer.ts +++ b/src/ObservedTurnServer.ts @@ -1,5 +1,5 @@ -import { ObservedIceCandidatePair } from './ObservedIceCandidatePair'; -import { ObservedPeerConnection } from './ObservedPeerConnection'; +import { ObservedIceCandidatePair } from './webrtc/ObservedIceCandidatePair'; +import { ObservedPeerConnection } from './webrtc/ObservedPeerConnection'; import { ObservedTURN } from './ObservedTURN'; export class ObservedTurnServer { diff --git a/src/Observer.ts b/src/Observer.ts index 7d80049..3b682d4 100644 --- a/src/Observer.ts +++ b/src/Observer.ts @@ -68,8 +68,6 @@ export class Observer = Record; - public constructor(public readonly config: ObserverConfig = { updatePolicy: 'update-when-all-call-updated', updateIntervalInMs: undefined, @@ -154,8 +152,6 @@ export class Observer = Record call.close()); diff --git a/src/ObserverEventMonitor.ts b/src/ObserverEventMonitor.ts index b847903..b36a13f 100644 --- a/src/ObserverEventMonitor.ts +++ b/src/ObserverEventMonitor.ts @@ -1,18 +1,18 @@ import { ObservedCall } from './ObservedCall'; -import { ObservedCertificate } from './ObservedCertificate'; +import { ObservedCertificate } from './webrtc/ObservedCertificate'; import { ObservedClient, ObservedClientEvents } from './ObservedClient'; -import { ObservedCodec } from './ObservedCodec'; -import { ObservedDataChannel } from './ObservedDataChannel'; -import { ObservedIceCandidate } from './ObservedIceCandidate'; -import { ObservedIceCandidatePair } from './ObservedIceCandidatePair'; -import { ObservedIceTransport } from './ObservedIceTransport'; -import { ObservedInboundRtp } from './ObservedInboundRtp'; -import { ObservedInboundTrack } from './ObservedInboundTrack'; -import { ObservedMediaPlayout } from './ObservedMediaPlayout'; -import { ObservedMediaSource } from './ObservedMediaSource'; -import { ObservedOutboundRtp } from './ObservedOutboundRtp'; -import { ObservedOutboundTrack } from './ObservedOutboundTrack'; -import { ObservedPeerConnection } from './ObservedPeerConnection'; +import { ObservedCodec } from './webrtc/ObservedCodec'; +import { ObservedDataChannel } from './webrtc/ObservedDataChannel'; +import { ObservedIceCandidate } from './webrtc/ObservedIceCandidate'; +import { ObservedIceCandidatePair } from './webrtc/ObservedIceCandidatePair'; +import { ObservedIceTransport } from './webrtc/ObservedIceTransport'; +import { ObservedInboundRtp } from './webrtc/ObservedInboundRtp'; +import { ObservedInboundTrack } from './webrtc/ObservedInboundTrack'; +import { ObservedMediaPlayout } from './webrtc/ObservedMediaPlayout'; +import { ObservedMediaSource } from './webrtc/ObservedMediaSource'; +import { ObservedOutboundRtp } from './webrtc/ObservedOutboundRtp'; +import { ObservedOutboundTrack } from './webrtc/ObservedOutboundTrack'; +import { ObservedPeerConnection } from './webrtc/ObservedPeerConnection'; import { Observer } from './Observer'; import { ClientEvent, ClientIssue, ClientMetaData, ClientSample, ExtensionStat } from './schema/ClientSample'; diff --git a/src/ObserverSummary.ts b/src/common/ObserverSummary.ts similarity index 100% rename from src/ObserverSummary.ts rename to src/common/ObserverSummary.ts diff --git a/src/common/types.ts b/src/common/types.ts index 3bf8fca..c95cab1 100644 --- a/src/common/types.ts +++ b/src/common/types.ts @@ -1,4 +1,23 @@ export type MediaKind = 'audio' | 'video'; export type SupportedVideoCodecType = 'vp8' | 'vp9' | 'h264' | 'h265'; - +export type ParsedUserAgent = { + ua: string; + browser: { + name: string; + version: string; + major: string; + }; + engine: { + name: string; + version: string; + }; + os: { + name: string; + version: string; + }; + device: Record; // or `{}` if always empty + cpu: { + architecture: string; + }; +}; // export type EvaluatorMiddleware = Middleware; diff --git a/src/index.ts b/src/index.ts index 2cb6a7a..ac86583 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,27 +2,27 @@ export type { ObserverEvents } from './Observer'; export { Observer } from './Observer'; export { ObservedCall } from './ObservedCall'; -export { ObservedInboundTrack } from './ObservedInboundTrack'; -export { ObservedOutboundTrack } from './ObservedOutboundTrack'; +export { ObservedInboundTrack } from './webrtc/ObservedInboundTrack'; +export { ObservedOutboundTrack } from './webrtc/ObservedOutboundTrack'; export { ObservedClient } from './ObservedClient'; -export { ObservedPeerConnection } from './ObservedPeerConnection'; -export { ObservedMediaSource } from './ObservedMediaSource'; -export { ObservedMediaPlayout } from './ObservedMediaPlayout'; -export { ObservedCodec } from './ObservedCodec'; -export { ObservedCertificate } from './ObservedCertificate'; -export { ObservedDataChannel } from './ObservedDataChannel'; -export { ObservedInboundRtp } from './ObservedInboundRtp'; -export { ObservedOutboundRtp } from './ObservedOutboundRtp'; -export { ObservedRemoteInboundRtp } from './ObservedRemoteInboundRtp'; -export { ObservedRemoteOutboundRtp } from './ObservedRemoteOutboundRtp'; -export { ObservedIceCandidatePair } from './ObservedIceCandidatePair'; -export { ObservedIceCandidate } from './ObservedIceCandidate'; -export { ObservedIceTransport } from './ObservedIceTransport'; -export { ObservedPeerConnectionTransport } from './ObservedPeerConnectionTransport'; +export { ObservedPeerConnection } from './webrtc/ObservedPeerConnection'; +export { ObservedMediaSource } from './webrtc/ObservedMediaSource'; +export { ObservedMediaPlayout } from './webrtc/ObservedMediaPlayout'; +export { ObservedCodec } from './webrtc/ObservedCodec'; +export { ObservedCertificate } from './webrtc/ObservedCertificate'; +export { ObservedDataChannel } from './webrtc/ObservedDataChannel'; +export { ObservedInboundRtp } from './webrtc/ObservedInboundRtp'; +export { ObservedOutboundRtp } from './webrtc/ObservedOutboundRtp'; +export { ObservedRemoteInboundRtp } from './webrtc/ObservedRemoteInboundRtp'; +export { ObservedRemoteOutboundRtp } from './webrtc/ObservedRemoteOutboundRtp'; +export { ObservedIceCandidatePair } from './webrtc/ObservedIceCandidatePair'; +export { ObservedIceCandidate } from './webrtc/ObservedIceCandidate'; +export { ObservedIceTransport } from './webrtc/ObservedIceTransport'; +export { ObservedPeerConnectionTransport } from './webrtc/ObservedPeerConnectionTransport'; export { ClientEventTypes } from './schema/ClientEventTypes'; export { ClientMetaTypes } from './schema/ClientMetaTypes'; export { ClientSample, ClientIssue, ClientEvent, ClientMetaData } from './schema/ClientSample'; export { ScoreCalculator } from './scores/ScoreCalculator'; export { ObservedClientEventMonitor } from './ObservedClientEventMonitor'; export { ObserverEventMonitor } from './ObserverEventMonitor'; -export { Middleware } from './common/Middleware'; +export { Middleware } from './common/Middleware'; \ No newline at end of file diff --git a/src/mediasoup/ObservedMediaRouter.ts b/src/mediasoup/ObservedMediaRouter.ts deleted file mode 100644 index 4b3a273..0000000 --- a/src/mediasoup/ObservedMediaRouter.ts +++ /dev/null @@ -1,10 +0,0 @@ -export type Item = { - callId: string; - appData?: Record; - region: string; - publishers: string[]; - subscribers: string[]; -} -export class ObservedMediaRouter { - -} \ No newline at end of file diff --git a/src/mediasoup/ObservedMediasoupRouter.ts b/src/mediasoup/ObservedMediasoupRouter.ts new file mode 100644 index 0000000..be15767 --- /dev/null +++ b/src/mediasoup/ObservedMediasoupRouter.ts @@ -0,0 +1,12 @@ +import { Observer } from "../Observer"; + +export class ObservedMediasoupRouter = Record> { + public readonly appData: T; + public constructor( + public readonly parent: Observer, + appData?: T + ) { + this.appData = appData ?? {} as T; + } +} + diff --git a/src/utils/MediasoupRemoteTrackResolver.ts b/src/utils/MediasoupRemoteTrackResolver.ts index 1ae272b..afcc96d 100644 --- a/src/utils/MediasoupRemoteTrackResolver.ts +++ b/src/utils/MediasoupRemoteTrackResolver.ts @@ -1,7 +1,7 @@ import { ObservedCall } from '../ObservedCall'; import { ObservedCallEventMonitor } from '../ObservedCallEventMonitor'; -import { ObservedInboundTrack } from '../ObservedInboundTrack'; -import { ObservedOutboundTrack } from '../ObservedOutboundTrack'; +import { ObservedInboundTrack } from '../webrtc/ObservedInboundTrack'; +import { ObservedOutboundTrack } from '../webrtc/ObservedOutboundTrack'; import { RemoteTrackResolver } from './RemoteTrackResolver'; export class MediasoupRemoteTrackResolver implements RemoteTrackResolver { diff --git a/src/utils/RemoteTrackResolver.ts b/src/utils/RemoteTrackResolver.ts index 1383dcc..f90b423 100644 --- a/src/utils/RemoteTrackResolver.ts +++ b/src/utils/RemoteTrackResolver.ts @@ -1,5 +1,5 @@ -import { ObservedInboundTrack } from '../ObservedInboundTrack'; -import { ObservedOutboundTrack } from '../ObservedOutboundTrack'; +import { ObservedInboundTrack } from '../webrtc/ObservedInboundTrack'; +import { ObservedOutboundTrack } from '../webrtc/ObservedOutboundTrack'; export interface RemoteTrackResolver { resolveRemoteOutboundTrack( diff --git a/src/ObservedCertificate.ts b/src/webrtc/ObservedCertificate.ts similarity index 94% rename from src/ObservedCertificate.ts rename to src/webrtc/ObservedCertificate.ts index d2aa0a8..a7b0cff 100644 --- a/src/ObservedCertificate.ts +++ b/src/webrtc/ObservedCertificate.ts @@ -1,5 +1,5 @@ import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { CertificateStats } from './schema/ClientSample'; +import { CertificateStats } from '../schema/ClientSample'; export class ObservedCertificate implements CertificateStats { public appData?: Record; diff --git a/src/ObservedCodec.ts b/src/webrtc/ObservedCodec.ts similarity index 95% rename from src/ObservedCodec.ts rename to src/webrtc/ObservedCodec.ts index 9b96997..1b86fdc 100644 --- a/src/ObservedCodec.ts +++ b/src/webrtc/ObservedCodec.ts @@ -1,5 +1,5 @@ import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { CodecStats } from './schema/ClientSample'; +import { CodecStats } from '../schema/ClientSample'; export class ObservedCodec implements CodecStats { private _visited = false; diff --git a/src/ObservedDataChannel.ts b/src/webrtc/ObservedDataChannel.ts similarity index 97% rename from src/ObservedDataChannel.ts rename to src/webrtc/ObservedDataChannel.ts index 0442688..7e15108 100644 --- a/src/ObservedDataChannel.ts +++ b/src/webrtc/ObservedDataChannel.ts @@ -1,5 +1,5 @@ import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { DataChannelStats } from './schema/ClientSample'; +import { DataChannelStats } from '../schema/ClientSample'; export type ObservedDataChannelState = 'connecting' | 'open' | 'closing' | 'closed'; diff --git a/src/ObservedIceCandidate.ts b/src/webrtc/ObservedIceCandidate.ts similarity index 96% rename from src/ObservedIceCandidate.ts rename to src/webrtc/ObservedIceCandidate.ts index 4639ab3..5ca9a24 100644 --- a/src/ObservedIceCandidate.ts +++ b/src/webrtc/ObservedIceCandidate.ts @@ -1,5 +1,5 @@ import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { IceCandidateStats } from './schema/ClientSample'; +import { IceCandidateStats } from '../schema/ClientSample'; export class ObservedIceCandidate implements IceCandidateStats { private _visited = false; diff --git a/src/ObservedIceCandidatePair.ts b/src/webrtc/ObservedIceCandidatePair.ts similarity index 98% rename from src/ObservedIceCandidatePair.ts rename to src/webrtc/ObservedIceCandidatePair.ts index 8ea3ea6..d3ec1d2 100644 --- a/src/ObservedIceCandidatePair.ts +++ b/src/webrtc/ObservedIceCandidatePair.ts @@ -1,5 +1,5 @@ import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { IceCandidatePairStats } from './schema/ClientSample'; +import { IceCandidatePairStats } from '../schema/ClientSample'; export class ObservedIceCandidatePair implements IceCandidatePairStats { private _visited = false; diff --git a/src/ObservedIceTransport.ts b/src/webrtc/ObservedIceTransport.ts similarity index 98% rename from src/ObservedIceTransport.ts rename to src/webrtc/ObservedIceTransport.ts index 0f0c687..d5aa5d7 100644 --- a/src/ObservedIceTransport.ts +++ b/src/webrtc/ObservedIceTransport.ts @@ -1,5 +1,5 @@ import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { IceTransportStats } from './schema/ClientSample'; +import { IceTransportStats } from '../schema/ClientSample'; export class ObservedIceTransport implements IceTransportStats { private _visited = false; diff --git a/src/ObservedInboundRtp.ts b/src/webrtc/ObservedInboundRtp.ts similarity index 98% rename from src/ObservedInboundRtp.ts rename to src/webrtc/ObservedInboundRtp.ts index 7239c80..6ec1130 100644 --- a/src/ObservedInboundRtp.ts +++ b/src/webrtc/ObservedInboundRtp.ts @@ -1,6 +1,6 @@ -import { MediaKind } from './common/types'; +import { MediaKind } from '../common/types'; import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { InboundRtpStats } from './schema/ClientSample'; +import { InboundRtpStats } from '../schema/ClientSample'; export class ObservedInboundRtp implements InboundRtpStats { public appData?: Record; diff --git a/src/ObservedInboundTrack.ts b/src/webrtc/ObservedInboundTrack.ts similarity index 88% rename from src/ObservedInboundTrack.ts rename to src/webrtc/ObservedInboundTrack.ts index 2f883b9..0f0d41e 100644 --- a/src/ObservedInboundTrack.ts +++ b/src/webrtc/ObservedInboundTrack.ts @@ -1,7 +1,7 @@ -import { CalculatedScore } from './scores/CalculatedScore'; -import { MediaKind } from './common/types'; -import { InboundTrackSample } from './schema/ClientSample'; -import { Detectors } from './detectors/Detectors'; +import { CalculatedScore } from '../scores/CalculatedScore'; +import { MediaKind } from '../common/types'; +import { InboundTrackSample } from '../schema/ClientSample'; +import { Detectors } from '../detectors/Detectors'; import { ObservedPeerConnection } from './ObservedPeerConnection'; import { ObservedInboundRtp } from './ObservedInboundRtp'; import { ObservedMediaPlayout } from './ObservedMediaPlayout'; diff --git a/src/ObservedMediaPlayout.ts b/src/webrtc/ObservedMediaPlayout.ts similarity index 92% rename from src/ObservedMediaPlayout.ts rename to src/webrtc/ObservedMediaPlayout.ts index 88cd7da..9443cc5 100644 --- a/src/ObservedMediaPlayout.ts +++ b/src/webrtc/ObservedMediaPlayout.ts @@ -1,6 +1,6 @@ -import { MediaKind } from './common/types'; +import { MediaKind } from '../common/types'; import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { MediaPlayoutStats } from './schema/ClientSample'; +import { MediaPlayoutStats } from '../schema/ClientSample'; export class ObservedMediaPlayout implements MediaPlayoutStats { private _visited = false; diff --git a/src/ObservedMediaSource.ts b/src/webrtc/ObservedMediaSource.ts similarity index 94% rename from src/ObservedMediaSource.ts rename to src/webrtc/ObservedMediaSource.ts index 59c861f..8056799 100644 --- a/src/ObservedMediaSource.ts +++ b/src/webrtc/ObservedMediaSource.ts @@ -1,6 +1,6 @@ -import { MediaKind } from './common/types'; +import { MediaKind } from '../common/types'; import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { MediaSourceStats } from './schema/ClientSample'; +import { MediaSourceStats } from '../schema/ClientSample'; export class ObservedMediaSource implements MediaSourceStats { private _visited = false; diff --git a/src/ObservedOutboundRtp.ts b/src/webrtc/ObservedOutboundRtp.ts similarity index 97% rename from src/ObservedOutboundRtp.ts rename to src/webrtc/ObservedOutboundRtp.ts index ac72bec..59d8a5c 100644 --- a/src/ObservedOutboundRtp.ts +++ b/src/webrtc/ObservedOutboundRtp.ts @@ -1,6 +1,6 @@ -import { MediaKind } from './common/types'; +import { MediaKind } from '../common/types'; import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { OutboundRtpStats, QualityLimitationDurations } from './schema/ClientSample'; +import { OutboundRtpStats, QualityLimitationDurations } from '../schema/ClientSample'; export class ObservedOutboundRtp implements OutboundRtpStats { private _visited = false; diff --git a/src/ObservedOutboundTrack.ts b/src/webrtc/ObservedOutboundTrack.ts similarity index 88% rename from src/ObservedOutboundTrack.ts rename to src/webrtc/ObservedOutboundTrack.ts index a841345..63a34e7 100644 --- a/src/ObservedOutboundTrack.ts +++ b/src/webrtc/ObservedOutboundTrack.ts @@ -1,7 +1,7 @@ -import { CalculatedScore } from './scores/CalculatedScore'; -import { MediaKind } from './common/types'; -import { OutboundTrackSample } from './schema/ClientSample'; -import { Detectors } from './detectors/Detectors'; +import { CalculatedScore } from '../scores/CalculatedScore'; +import { MediaKind } from '../common/types'; +import { OutboundTrackSample } from '../schema/ClientSample'; +import { Detectors } from '../detectors/Detectors'; import { ObservedPeerConnection } from './ObservedPeerConnection'; import { ObservedOutboundRtp } from './ObservedOutboundRtp'; import { ObservedMediaSource } from './ObservedMediaSource'; diff --git a/src/ObservedPeerConnection.ts b/src/webrtc/ObservedPeerConnection.ts similarity index 98% rename from src/ObservedPeerConnection.ts rename to src/webrtc/ObservedPeerConnection.ts index 25cb2bc..850d80b 100644 --- a/src/ObservedPeerConnection.ts +++ b/src/webrtc/ObservedPeerConnection.ts @@ -1,9 +1,8 @@ import { EventEmitter } from 'events'; -import { ObservedClient } from './ObservedClient'; -import { CertificateStats, CodecStats, DataChannelStats, IceCandidateStats, InboundRtpStats, InboundTrackSample, MediaPlayoutStats, MediaSourceStats, OutboundRtpStats, OutboundTrackSample, PeerConnectionSample, PeerConnectionTransportStats, RemoteInboundRtpStats, RemoteOutboundRtpStats } from './schema/ClientSample'; +import { ObservedClient } from '../ObservedClient'; import { ObservedInboundRtp } from './ObservedInboundRtp'; -import { createLogger } from './common/logger'; -import { MediaKind } from './common/types'; +import { createLogger } from '../common/logger'; +import { MediaKind } from '../common/types'; import { ObservedOutboundRtp } from './ObservedOutboundRtp'; import { ObservedCertificate } from './ObservedCertificate'; import { ObservedCodec } from './ObservedCodec'; @@ -18,9 +17,26 @@ import { ObservedRemoteInboundRtp } from './ObservedRemoteInboundRtp'; import { ObservedRemoteOutboundRtp } from './ObservedRemoteOutboundRtp'; import { ObservedInboundTrack } from './ObservedInboundTrack'; import { ObservedOutboundTrack } from './ObservedOutboundTrack'; -import { CalculatedScore } from './scores/CalculatedScore'; -import { ObservedTurnServer } from './ObservedTurnServer'; -import { getMedian } from './common/utils'; +import { CalculatedScore } from '../scores/CalculatedScore'; +import { ObservedTurnServer } from '../ObservedTurnServer'; +import { getMedian } from '../common/utils'; +import { + CertificateStats, + CodecStats, + DataChannelStats, + IceCandidateStats, + InboundRtpStats, + InboundTrackSample, + MediaPlayoutStats, + MediaSourceStats, + OutboundRtpStats, + OutboundTrackSample, + PeerConnectionSample, + PeerConnectionTransportStats, + RemoteInboundRtpStats, + RemoteOutboundRtpStats +} from '../schema/ClientSample'; + const logger = createLogger('ObservedPeerConnection'); diff --git a/src/ObservedPeerConnectionTransport.ts b/src/webrtc/ObservedPeerConnectionTransport.ts similarity index 92% rename from src/ObservedPeerConnectionTransport.ts rename to src/webrtc/ObservedPeerConnectionTransport.ts index 8d8d0bf..f458b47 100644 --- a/src/ObservedPeerConnectionTransport.ts +++ b/src/webrtc/ObservedPeerConnectionTransport.ts @@ -1,5 +1,5 @@ import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { PeerConnectionTransportStats } from './schema/ClientSample'; +import { PeerConnectionTransportStats } from '../schema/ClientSample'; export class ObservedPeerConnectionTransport implements PeerConnectionTransportStats { private _visited = false; diff --git a/src/ObservedRemoteInboundRtp.ts b/src/webrtc/ObservedRemoteInboundRtp.ts similarity index 94% rename from src/ObservedRemoteInboundRtp.ts rename to src/webrtc/ObservedRemoteInboundRtp.ts index f0237ec..4857c10 100644 --- a/src/ObservedRemoteInboundRtp.ts +++ b/src/webrtc/ObservedRemoteInboundRtp.ts @@ -1,6 +1,6 @@ -import { MediaKind } from './common/types'; +import { MediaKind } from '../common/types'; import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { RemoteInboundRtpStats } from './schema/ClientSample'; +import { RemoteInboundRtpStats } from '../schema/ClientSample'; export class ObservedRemoteInboundRtp implements RemoteInboundRtpStats { private _visited = false; diff --git a/src/ObservedRemoteOutboundRtp.ts b/src/webrtc/ObservedRemoteOutboundRtp.ts similarity index 94% rename from src/ObservedRemoteOutboundRtp.ts rename to src/webrtc/ObservedRemoteOutboundRtp.ts index 204aa79..92b1177 100644 --- a/src/ObservedRemoteOutboundRtp.ts +++ b/src/webrtc/ObservedRemoteOutboundRtp.ts @@ -1,6 +1,6 @@ -import { MediaKind } from './common/types'; +import { MediaKind } from '../common/types'; import { ObservedPeerConnection } from './ObservedPeerConnection'; -import { RemoteOutboundRtpStats } from './schema/ClientSample'; +import { RemoteOutboundRtpStats } from '../schema/ClientSample'; export class ObservedRemoteOutboundRtp implements RemoteOutboundRtpStats { private _visited = false;