@observertc/observer-js 1.0.1-9d3744d.0 → 1.0.1-a6fb9d3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +535 -1
- package/lib/ObservedCall.d.ts +8 -7
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +42 -38
- package/lib/ObservedCallEventMonitor.d.ts +104 -0
- package/lib/ObservedCallEventMonitor.d.ts.map +1 -0
- package/lib/ObservedCallEventMonitor.js +314 -0
- package/lib/ObservedClient.d.ts +20 -10
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +330 -13
- package/lib/ObservedClientEventMonitor.d.ts +91 -0
- package/lib/ObservedClientEventMonitor.d.ts.map +1 -0
- package/lib/ObservedClientEventMonitor.js +254 -0
- package/lib/ObservedTURN.d.ts +1 -1
- package/lib/ObservedTURN.d.ts.map +1 -1
- package/lib/ObservedTURN.js +1 -0
- package/lib/ObservedTurnServer.d.ts +2 -2
- package/lib/ObservedTurnServer.d.ts.map +1 -1
- package/lib/Observer.d.ts +9 -6
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +26 -25
- package/lib/ObserverEventMonitor.d.ts +138 -0
- package/lib/ObserverEventMonitor.d.ts.map +1 -0
- package/lib/ObserverEventMonitor.js +433 -0
- package/lib/common/ObserverSummary.d.ts.map +1 -0
- package/lib/common/SummaryTypes.d.ts +75 -0
- package/lib/common/SummaryTypes.d.ts.map +1 -0
- package/lib/common/SummaryTypes.js +2 -0
- package/lib/index.d.ts +19 -17
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +21 -17
- package/lib/mediasoup/ObservedMediasoupRouter.d.ts +7 -0
- package/lib/mediasoup/ObservedMediasoupRouter.d.ts.map +1 -0
- package/lib/mediasoup/ObservedMediasoupRouter.js +12 -0
- package/lib/monitors/SummaryMonitor.d.ts +19 -0
- package/lib/monitors/SummaryMonitor.d.ts.map +1 -0
- package/lib/monitors/SummaryMonitor.js +129 -0
- package/lib/schema/ClientEventTypes.d.ts +147 -19
- package/lib/schema/ClientEventTypes.d.ts.map +1 -1
- package/lib/schema/ClientEventTypes.js +5 -2
- package/lib/schema/ClientSample.d.ts +1 -1
- package/lib/schema/ClientSample.d.ts.map +1 -1
- package/lib/updaters/{OnAllCallObserverUpdater_.d.ts → OnAllCallObserverUpdater.d.ts} +3 -1
- package/lib/updaters/OnAllCallObserverUpdater.d.ts.map +1 -0
- package/lib/updaters/{OnAllCallObserverUpdater_.js → OnAllCallObserverUpdater.js} +13 -1
- package/lib/updaters/OnAllClientCallUpdater.d.ts +2 -0
- package/lib/updaters/OnAllClientCallUpdater.d.ts.map +1 -1
- package/lib/updaters/OnAllClientCallUpdater.js +16 -0
- package/lib/updaters/{OnAnyCallObserverUpdater_.d.ts → OnAnyCallObserverUpdater.d.ts} +2 -1
- package/lib/updaters/OnAnyCallObserverUpdater.d.ts.map +1 -0
- package/lib/updaters/{OnAnyCallObserverUpdater_.js → OnAnyCallObserverUpdater.js} +11 -1
- package/lib/updaters/OnAnyClientCallUpdater.d.ts +1 -0
- package/lib/updaters/OnAnyClientCallUpdater.d.ts.map +1 -1
- package/lib/updaters/OnAnyClientCallUpdater.js +11 -2
- package/lib/utils/MediasoupRemoteTrackResolver.d.ts +25 -0
- package/lib/utils/MediasoupRemoteTrackResolver.d.ts.map +1 -0
- package/lib/utils/MediasoupRemoteTrackResolver.js +110 -0
- package/lib/utils/RemoteTrackResolver.d.ts +2 -2
- package/lib/utils/RemoteTrackResolver.d.ts.map +1 -1
- package/lib/{ObservedCertificate.d.ts → webrtc/ObservedCertificate.d.ts} +1 -1
- package/lib/webrtc/ObservedCertificate.d.ts.map +1 -0
- package/lib/{ObservedCodec.d.ts → webrtc/ObservedCodec.d.ts} +1 -1
- package/lib/webrtc/ObservedCodec.d.ts.map +1 -0
- package/lib/{ObservedDataChannel.d.ts → webrtc/ObservedDataChannel.d.ts} +3 -1
- package/lib/webrtc/ObservedDataChannel.d.ts.map +1 -0
- package/lib/{ObservedDataChannel.js → webrtc/ObservedDataChannel.js} +2 -0
- package/lib/{ObservedIceCandidate.d.ts → webrtc/ObservedIceCandidate.d.ts} +1 -1
- package/lib/webrtc/ObservedIceCandidate.d.ts.map +1 -0
- package/lib/{ObservedIceCandidatePair.d.ts → webrtc/ObservedIceCandidatePair.d.ts} +3 -2
- package/lib/webrtc/ObservedIceCandidatePair.d.ts.map +1 -0
- package/lib/{ObservedIceCandidatePair.js → webrtc/ObservedIceCandidatePair.js} +17 -1
- package/lib/{ObservedIceTransport.d.ts → webrtc/ObservedIceTransport.d.ts} +1 -1
- package/lib/webrtc/ObservedIceTransport.d.ts.map +1 -0
- package/lib/{ObservedInboundRtp.d.ts → webrtc/ObservedInboundRtp.d.ts} +2 -2
- package/lib/webrtc/ObservedInboundRtp.d.ts.map +1 -0
- package/lib/{ObservedInboundTrack.d.ts → webrtc/ObservedInboundTrack.d.ts} +7 -4
- package/lib/webrtc/ObservedInboundTrack.d.ts.map +1 -0
- package/lib/{ObservedInboundTrack.js → webrtc/ObservedInboundTrack.js} +4 -1
- package/lib/{ObservedMediaPlayout.d.ts → webrtc/ObservedMediaPlayout.d.ts} +2 -2
- package/lib/webrtc/ObservedMediaPlayout.d.ts.map +1 -0
- package/lib/{ObservedMediaSource.d.ts → webrtc/ObservedMediaSource.d.ts} +2 -2
- package/lib/webrtc/ObservedMediaSource.d.ts.map +1 -0
- package/lib/{ObservedOutboundRtp.d.ts → webrtc/ObservedOutboundRtp.d.ts} +2 -2
- package/lib/webrtc/ObservedOutboundRtp.d.ts.map +1 -0
- package/lib/{ObservedOutboundTrack.d.ts → webrtc/ObservedOutboundTrack.d.ts} +7 -4
- package/lib/webrtc/ObservedOutboundTrack.d.ts.map +1 -0
- package/lib/{ObservedOutboundTrack.js → webrtc/ObservedOutboundTrack.js} +4 -1
- package/lib/{ObservedPeerConnection.d.ts → webrtc/ObservedPeerConnection.d.ts} +26 -4
- package/lib/webrtc/ObservedPeerConnection.d.ts.map +1 -0
- package/lib/{ObservedPeerConnection.js → webrtc/ObservedPeerConnection.js} +82 -17
- package/lib/{ObservedPeerConnectionTransport.d.ts → webrtc/ObservedPeerConnectionTransport.d.ts} +1 -1
- package/lib/webrtc/ObservedPeerConnectionTransport.d.ts.map +1 -0
- package/lib/{ObservedRemoteInboundRtp.d.ts → webrtc/ObservedRemoteInboundRtp.d.ts} +2 -2
- package/lib/webrtc/ObservedRemoteInboundRtp.d.ts.map +1 -0
- package/lib/{ObservedRemoteOutboundRtp.d.ts → webrtc/ObservedRemoteOutboundRtp.d.ts} +2 -2
- package/lib/webrtc/ObservedRemoteOutboundRtp.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/ObservedCall.ts +44 -48
- package/src/ObservedCallEventMonitor.ts +392 -0
- package/src/ObservedClient.ts +363 -22
- package/src/ObservedClientEventMonitor.ts +309 -0
- package/src/ObservedTURN.ts +2 -1
- package/src/ObservedTurnServer.ts +2 -2
- package/src/Observer.ts +37 -33
- package/src/ObserverEventMonitor.ts +551 -0
- package/src/common/SummaryTypes.ts +91 -0
- package/src/index.ts +19 -18
- package/src/mediasoup/ObservedMediasoupRouter.ts +12 -0
- package/src/monitors/SummaryMonitor.ts +181 -0
- package/src/schema/ClientEventTypes.ts +187 -19
- package/src/schema/ClientSample.ts +1 -1
- package/src/updaters/{OnAllCallObserverUpdater_.ts → OnAllCallObserverUpdater.ts} +14 -1
- package/src/updaters/OnAllClientCallUpdater.ts +15 -0
- package/src/updaters/{OnAnyCallObserverUpdater_.ts → OnAnyCallObserverUpdater.ts} +12 -3
- package/src/updaters/OnAnyClientCallUpdater.ts +9 -2
- package/src/utils/MediasoupRemoteTrackResolver.ts +155 -0
- package/src/utils/RemoteTrackResolver.ts +2 -2
- package/src/{ObservedCertificate.ts → webrtc/ObservedCertificate.ts} +1 -1
- package/src/{ObservedCodec.ts → webrtc/ObservedCodec.ts} +1 -1
- package/src/{ObservedDataChannel.ts → webrtc/ObservedDataChannel.ts} +4 -1
- package/src/{ObservedIceCandidate.ts → webrtc/ObservedIceCandidate.ts} +1 -1
- package/src/{ObservedIceCandidatePair.ts → webrtc/ObservedIceCandidatePair.ts} +19 -3
- package/src/{ObservedIceTransport.ts → webrtc/ObservedIceTransport.ts} +1 -1
- package/src/{ObservedInboundRtp.ts → webrtc/ObservedInboundRtp.ts} +2 -2
- package/src/{ObservedInboundTrack.ts → webrtc/ObservedInboundTrack.ts} +9 -4
- package/src/{ObservedMediaPlayout.ts → webrtc/ObservedMediaPlayout.ts} +2 -2
- package/src/{ObservedMediaSource.ts → webrtc/ObservedMediaSource.ts} +2 -2
- package/src/{ObservedOutboundRtp.ts → webrtc/ObservedOutboundRtp.ts} +2 -2
- package/src/{ObservedOutboundTrack.ts → webrtc/ObservedOutboundTrack.ts} +9 -4
- package/src/{ObservedPeerConnection.ts → webrtc/ObservedPeerConnection.ts} +124 -37
- package/src/{ObservedPeerConnectionTransport.ts → webrtc/ObservedPeerConnectionTransport.ts} +1 -1
- package/src/{ObservedRemoteInboundRtp.ts → webrtc/ObservedRemoteInboundRtp.ts} +2 -2
- package/src/{ObservedRemoteOutboundRtp.ts → webrtc/ObservedRemoteOutboundRtp.ts} +2 -2
- package/lib/ObservedCertificate.d.ts.map +0 -1
- package/lib/ObservedCodec.d.ts.map +0 -1
- package/lib/ObservedDataChannel.d.ts.map +0 -1
- package/lib/ObservedIceCandidate.d.ts.map +0 -1
- package/lib/ObservedIceCandidatePair.d.ts.map +0 -1
- package/lib/ObservedIceTransport.d.ts.map +0 -1
- package/lib/ObservedInboundRtp.d.ts.map +0 -1
- package/lib/ObservedInboundTrack.d.ts.map +0 -1
- package/lib/ObservedMediaPlayout.d.ts.map +0 -1
- package/lib/ObservedMediaSource.d.ts.map +0 -1
- package/lib/ObservedOutboundRtp.d.ts.map +0 -1
- package/lib/ObservedOutboundTrack.d.ts.map +0 -1
- package/lib/ObservedPeerConnection.d.ts.map +0 -1
- package/lib/ObservedPeerConnectionTransport.d.ts.map +0 -1
- package/lib/ObservedRemoteInboundRtp.d.ts.map +0 -1
- package/lib/ObservedRemoteOutboundRtp.d.ts.map +0 -1
- package/lib/ObserverSummary.d.ts.map +0 -1
- package/lib/updaters/OnAllCallObserverUpdater_.d.ts.map +0 -1
- package/lib/updaters/OnAnyCallObserverUpdater_.d.ts.map +0 -1
- /package/lib/{ObserverSummary.d.ts → common/ObserverSummary.d.ts} +0 -0
- /package/lib/{ObserverSummary.js → common/ObserverSummary.js} +0 -0
- /package/lib/{ObservedCertificate.js → webrtc/ObservedCertificate.js} +0 -0
- /package/lib/{ObservedCodec.js → webrtc/ObservedCodec.js} +0 -0
- /package/lib/{ObservedIceCandidate.js → webrtc/ObservedIceCandidate.js} +0 -0
- /package/lib/{ObservedIceTransport.js → webrtc/ObservedIceTransport.js} +0 -0
- /package/lib/{ObservedInboundRtp.js → webrtc/ObservedInboundRtp.js} +0 -0
- /package/lib/{ObservedMediaPlayout.js → webrtc/ObservedMediaPlayout.js} +0 -0
- /package/lib/{ObservedMediaSource.js → webrtc/ObservedMediaSource.js} +0 -0
- /package/lib/{ObservedOutboundRtp.js → webrtc/ObservedOutboundRtp.js} +0 -0
- /package/lib/{ObservedPeerConnectionTransport.js → webrtc/ObservedPeerConnectionTransport.js} +0 -0
- /package/lib/{ObservedRemoteInboundRtp.js → webrtc/ObservedRemoteInboundRtp.js} +0 -0
- /package/lib/{ObservedRemoteOutboundRtp.js → webrtc/ObservedRemoteOutboundRtp.js} +0 -0
- /package/src/{ObserverSummary.ts → common/ObserverSummary.ts} +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
|
-
import { ObservedClient } from '
|
|
4
|
-
import { OutboundTrackSample, PeerConnectionSample } from './schema/ClientSample';
|
|
3
|
+
import { ObservedClient } from '../ObservedClient';
|
|
5
4
|
import { ObservedInboundRtp } from './ObservedInboundRtp';
|
|
6
5
|
import { ObservedOutboundRtp } from './ObservedOutboundRtp';
|
|
7
6
|
import { ObservedCertificate } from './ObservedCertificate';
|
|
@@ -17,8 +16,9 @@ import { ObservedRemoteInboundRtp } from './ObservedRemoteInboundRtp';
|
|
|
17
16
|
import { ObservedRemoteOutboundRtp } from './ObservedRemoteOutboundRtp';
|
|
18
17
|
import { ObservedInboundTrack } from './ObservedInboundTrack';
|
|
19
18
|
import { ObservedOutboundTrack } from './ObservedOutboundTrack';
|
|
20
|
-
import { CalculatedScore } from '
|
|
21
|
-
import { ObservedTurnServer } from '
|
|
19
|
+
import { CalculatedScore } from '../scores/CalculatedScore';
|
|
20
|
+
import { ObservedTurnServer } from '../ObservedTurnServer';
|
|
21
|
+
import { OutboundTrackSample, PeerConnectionSample } from '../schema/ClientSample';
|
|
22
22
|
export type ObservedPeerConnectionEvents = {
|
|
23
23
|
iceconnectionstatechange: [
|
|
24
24
|
{
|
|
@@ -66,6 +66,25 @@ export type ObservedPeerConnectionEvents = {
|
|
|
66
66
|
'removed-peer-connection-transport': [ObservedPeerConnectionTransport];
|
|
67
67
|
'removed-remote-inbound-rtp': [ObservedRemoteInboundRtp];
|
|
68
68
|
'removed-remote-outbound-rtp': [ObservedRemoteOutboundRtp];
|
|
69
|
+
'updated-inbound-rtp': [ObservedInboundRtp];
|
|
70
|
+
'updated-outbound-rtp': [ObservedOutboundRtp];
|
|
71
|
+
'updated-inbound-track': [ObservedInboundTrack];
|
|
72
|
+
'updated-outbound-track': [ObservedOutboundTrack];
|
|
73
|
+
'updated-ice-candidate-pair': [ObservedIceCandidatePair];
|
|
74
|
+
'updated-ice-transport': [ObservedIceTransport];
|
|
75
|
+
'updated-peer-connection-transport': [ObservedPeerConnectionTransport];
|
|
76
|
+
'updated-media-source': [ObservedMediaSource];
|
|
77
|
+
'updated-media-playout': [ObservedMediaPlayout];
|
|
78
|
+
'updated-data-channel': [ObservedDataChannel];
|
|
79
|
+
'updated-ice-candidate': [ObservedIceCandidate];
|
|
80
|
+
'updated-certificate': [ObservedCertificate];
|
|
81
|
+
'updated-codec': [ObservedCodec];
|
|
82
|
+
'updated-remote-inbound-rtp': [ObservedRemoteInboundRtp];
|
|
83
|
+
'updated-remote-outbound-rtp': [ObservedRemoteOutboundRtp];
|
|
84
|
+
'muted-inbound-track': [ObservedInboundTrack];
|
|
85
|
+
'muted-outbound-track': [ObservedOutboundTrack];
|
|
86
|
+
'unmuted-inbound-track': [ObservedInboundTrack];
|
|
87
|
+
'unmuted-outbound-track': [ObservedOutboundTrack];
|
|
69
88
|
'update': [];
|
|
70
89
|
close: [];
|
|
71
90
|
};
|
|
@@ -85,6 +104,9 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
85
104
|
openedAt?: number;
|
|
86
105
|
closedAt?: number;
|
|
87
106
|
updated: number;
|
|
107
|
+
connectionState?: string;
|
|
108
|
+
iceConnectionState?: string;
|
|
109
|
+
iceGatheringState?: string;
|
|
88
110
|
availableIncomingBitrate: number;
|
|
89
111
|
availableOutgoingBitrate: number;
|
|
90
112
|
totalInboundPacketsLost: number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedPeerConnection.d.ts","sourceRoot":"","sources":["../../src/webrtc/ObservedPeerConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ObservedPeerConnection = void 0;
|
|
4
4
|
const events_1 = require("events");
|
|
5
5
|
const ObservedInboundRtp_1 = require("./ObservedInboundRtp");
|
|
6
|
-
const logger_1 = require("
|
|
6
|
+
const logger_1 = require("../common/logger");
|
|
7
7
|
const ObservedOutboundRtp_1 = require("./ObservedOutboundRtp");
|
|
8
8
|
const ObservedCertificate_1 = require("./ObservedCertificate");
|
|
9
9
|
const ObservedCodec_1 = require("./ObservedCodec");
|
|
@@ -18,7 +18,7 @@ const ObservedRemoteInboundRtp_1 = require("./ObservedRemoteInboundRtp");
|
|
|
18
18
|
const ObservedRemoteOutboundRtp_1 = require("./ObservedRemoteOutboundRtp");
|
|
19
19
|
const ObservedInboundTrack_1 = require("./ObservedInboundTrack");
|
|
20
20
|
const ObservedOutboundTrack_1 = require("./ObservedOutboundTrack");
|
|
21
|
-
const utils_1 = require("
|
|
21
|
+
const utils_1 = require("../common/utils");
|
|
22
22
|
const logger = (0, logger_1.createLogger)('ObservedPeerConnection');
|
|
23
23
|
class ObservedPeerConnection extends events_1.EventEmitter {
|
|
24
24
|
peerConnectionId;
|
|
@@ -35,6 +35,9 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
35
35
|
// timestamp of the PEER_CONNECTION_CLOSED event
|
|
36
36
|
closedAt;
|
|
37
37
|
updated = Date.now();
|
|
38
|
+
connectionState;
|
|
39
|
+
iceConnectionState;
|
|
40
|
+
iceGatheringState;
|
|
38
41
|
availableIncomingBitrate = 0;
|
|
39
42
|
availableOutgoingBitrate = 0;
|
|
40
43
|
totalInboundPacketsLost = 0;
|
|
@@ -177,6 +180,8 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
177
180
|
this.observedRemoteInboundRtps.clear();
|
|
178
181
|
this.observedRemoteOutboundRtps.clear();
|
|
179
182
|
this.client.call.observer.observedTURN.removePeerConnection(this);
|
|
183
|
+
if (!this.closedAt)
|
|
184
|
+
this.closedAt = Date.now();
|
|
180
185
|
this.emit('close');
|
|
181
186
|
}
|
|
182
187
|
accept(sample) {
|
|
@@ -510,10 +515,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
510
515
|
return logger.warn(`ObservedPeerConnection received an invalid CertificateStats (missing timestamp OR id OR fingerprint field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
511
516
|
}
|
|
512
517
|
observedCertificate = new ObservedCertificate_1.ObservedCertificate(stats.timestamp, stats.id, this);
|
|
518
|
+
observedCertificate.update(stats);
|
|
513
519
|
this.observedCertificates.set(stats.id, observedCertificate);
|
|
514
520
|
this.emit('added-certificate', observedCertificate);
|
|
515
521
|
}
|
|
516
|
-
|
|
522
|
+
else {
|
|
523
|
+
observedCertificate.update(stats);
|
|
524
|
+
this.emit('updated-certificate', observedCertificate);
|
|
525
|
+
}
|
|
517
526
|
return observedCertificate;
|
|
518
527
|
}
|
|
519
528
|
_updateCodecStats(stats) {
|
|
@@ -523,10 +532,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
523
532
|
return logger.warn(`ObservedPeerConnection received an invalid CodecStats (missing timestamp OR id OR mimeType field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
524
533
|
}
|
|
525
534
|
observedCodec = new ObservedCodec_1.ObservedCodec(stats.timestamp, stats.id, stats.mimeType, this);
|
|
535
|
+
observedCodec.update(stats);
|
|
526
536
|
this.observedCodecs.set(stats.id, observedCodec);
|
|
527
537
|
this.emit('added-codec', observedCodec);
|
|
528
538
|
}
|
|
529
|
-
|
|
539
|
+
else {
|
|
540
|
+
observedCodec.update(stats);
|
|
541
|
+
}
|
|
542
|
+
this.emit('updated-codec', observedCodec);
|
|
530
543
|
return observedCodec;
|
|
531
544
|
}
|
|
532
545
|
_updateDataChannelStats(stats) {
|
|
@@ -536,10 +549,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
536
549
|
return logger.warn(`ObservedPeerConnection received an invalid DataChannelStats (missing timestamp OR id field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
537
550
|
}
|
|
538
551
|
observedDataChannel = new ObservedDataChannel_1.ObservedDataChannel(stats.timestamp, stats.id, this);
|
|
552
|
+
observedDataChannel.update(stats);
|
|
539
553
|
this.observedDataChannels.set(stats.id, observedDataChannel);
|
|
540
554
|
this.emit('added-data-channel', observedDataChannel);
|
|
541
555
|
}
|
|
542
|
-
|
|
556
|
+
else {
|
|
557
|
+
observedDataChannel.update(stats);
|
|
558
|
+
}
|
|
559
|
+
this.emit('updated-data-channel', observedDataChannel);
|
|
543
560
|
return observedDataChannel;
|
|
544
561
|
}
|
|
545
562
|
_updateIceCandidateStats(stats) {
|
|
@@ -549,10 +566,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
549
566
|
return logger.warn(`ObservedPeerConnection received an invalid IceCandidateStats (missing timestamp OR id field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
550
567
|
}
|
|
551
568
|
observedIceCandidate = new ObservedIceCandidate_1.ObservedIceCandidate(stats.timestamp, stats.id, this);
|
|
569
|
+
observedIceCandidate.update(stats);
|
|
552
570
|
this.observedIceCandidates.set(stats.id, observedIceCandidate);
|
|
553
571
|
this.emit('added-ice-candidate', observedIceCandidate);
|
|
554
572
|
}
|
|
555
|
-
|
|
573
|
+
else {
|
|
574
|
+
observedIceCandidate.update(stats);
|
|
575
|
+
}
|
|
576
|
+
this.emit('updated-ice-candidate', observedIceCandidate);
|
|
556
577
|
return observedIceCandidate;
|
|
557
578
|
}
|
|
558
579
|
_updateIceCandidatePairStats(stats) {
|
|
@@ -562,10 +583,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
562
583
|
return logger.warn(`ObservedPeerConnection received an invalid IceCandidateStats (missing timestamp OR id field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
563
584
|
}
|
|
564
585
|
observedIceCandidatePair = new ObservedIceCandidatePair_1.ObservedIceCandidatePair(stats.timestamp, stats.id, this);
|
|
586
|
+
observedIceCandidatePair.update(stats);
|
|
565
587
|
this.observedIceCandidatesPair.set(stats.id, observedIceCandidatePair);
|
|
566
588
|
this.emit('added-ice-candidate-pair', observedIceCandidatePair);
|
|
567
589
|
}
|
|
568
|
-
|
|
590
|
+
else {
|
|
591
|
+
observedIceCandidatePair.update(stats);
|
|
592
|
+
}
|
|
593
|
+
this.emit('updated-ice-candidate-pair', observedIceCandidatePair);
|
|
569
594
|
return observedIceCandidatePair;
|
|
570
595
|
}
|
|
571
596
|
_updateIceTransportStats(stats) {
|
|
@@ -575,10 +600,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
575
600
|
return logger.warn(`ObservedPeerConnection received an invalid IceCandidateStats (missing timestamp OR id field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
576
601
|
}
|
|
577
602
|
observedIceTransport = new ObservedIceTransport_1.ObservedIceTransport(stats.timestamp, stats.id, this);
|
|
603
|
+
observedIceTransport.update(stats);
|
|
578
604
|
this.observedIceTransports.set(stats.id, observedIceTransport);
|
|
579
605
|
this.emit('added-ice-transport', observedIceTransport);
|
|
580
606
|
}
|
|
581
|
-
|
|
607
|
+
else {
|
|
608
|
+
observedIceTransport.update(stats);
|
|
609
|
+
}
|
|
610
|
+
this.emit('updated-ice-transport', observedIceTransport);
|
|
582
611
|
return observedIceTransport;
|
|
583
612
|
}
|
|
584
613
|
_updateInboundRtpStats(stats) {
|
|
@@ -588,10 +617,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
588
617
|
return logger.warn(`ObservedPeerConnection received an invalid InboundRtpStats (missing timestamp OR id OR ssrc OR kind OR trackIdentifier field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
589
618
|
}
|
|
590
619
|
observedInboundRtp = new ObservedInboundRtp_1.ObservedInboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, stats.trackIdentifier, this);
|
|
620
|
+
observedInboundRtp.update(stats);
|
|
591
621
|
this.observedInboundRtps.set(stats.ssrc, observedInboundRtp);
|
|
592
622
|
this.emit('added-inbound-rtp', observedInboundRtp);
|
|
593
623
|
}
|
|
594
|
-
|
|
624
|
+
else {
|
|
625
|
+
observedInboundRtp.update(stats);
|
|
626
|
+
}
|
|
627
|
+
this.emit('updated-inbound-rtp', observedInboundRtp);
|
|
595
628
|
return observedInboundRtp;
|
|
596
629
|
}
|
|
597
630
|
_updateInboundTrackSample(stats) {
|
|
@@ -604,10 +637,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
604
637
|
const mediaPlayout = inboundRtp ?
|
|
605
638
|
[...this.observedMediaPlayouts.values()].find((mp) => mp.id === inboundRtp.playoutId) : undefined;
|
|
606
639
|
observedInboundTrack = new ObservedInboundTrack_1.ObservedInboundTrack(stats.timestamp, stats.id, stats.kind, this, inboundRtp, mediaPlayout);
|
|
640
|
+
observedInboundTrack.update(stats);
|
|
607
641
|
this.observedInboundTracks.set(stats.id, observedInboundTrack);
|
|
608
642
|
this.emit('added-inbound-track', observedInboundTrack);
|
|
609
643
|
}
|
|
610
|
-
|
|
644
|
+
else {
|
|
645
|
+
observedInboundTrack.update(stats);
|
|
646
|
+
}
|
|
647
|
+
this.emit('updated-inbound-track', observedInboundTrack);
|
|
611
648
|
return observedInboundTrack;
|
|
612
649
|
}
|
|
613
650
|
_updateMediaPlayoutStats(stats) {
|
|
@@ -617,10 +654,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
617
654
|
return logger.warn(`ObservedPeerConnection received an invalid InboundRtpStats (missing timestamp OR id OR kind OR trackIdentifier field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
618
655
|
}
|
|
619
656
|
observedMediaPlayout = new ObservedMediaPlayout_1.ObservedMediaPlayout(stats.timestamp, stats.id, stats.kind, this);
|
|
657
|
+
observedMediaPlayout.update(stats);
|
|
620
658
|
this.observedMediaPlayouts.set(stats.id, observedMediaPlayout);
|
|
621
659
|
this.emit('added-media-playout', observedMediaPlayout);
|
|
622
660
|
}
|
|
623
|
-
|
|
661
|
+
else {
|
|
662
|
+
observedMediaPlayout.update(stats);
|
|
663
|
+
}
|
|
664
|
+
this.emit('updated-media-playout', observedMediaPlayout);
|
|
624
665
|
return observedMediaPlayout;
|
|
625
666
|
}
|
|
626
667
|
_updateMediaSourceStats(stats) {
|
|
@@ -630,10 +671,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
630
671
|
return logger.warn(`ObservedPeerConnection received an invalid InboundRtpStats (missing timestamp OR id OR kind field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
631
672
|
}
|
|
632
673
|
observedMediaSource = new ObservedMediaSource_1.ObservedMediaSource(stats.timestamp, stats.id, stats.kind, this);
|
|
674
|
+
observedMediaSource.update(stats);
|
|
633
675
|
this.observedMediaSources.set(stats.id, observedMediaSource);
|
|
634
676
|
this.emit('added-media-source', observedMediaSource);
|
|
635
677
|
}
|
|
636
|
-
|
|
678
|
+
else {
|
|
679
|
+
observedMediaSource.update(stats);
|
|
680
|
+
}
|
|
681
|
+
this.emit('updated-media-source', observedMediaSource);
|
|
637
682
|
return observedMediaSource;
|
|
638
683
|
}
|
|
639
684
|
_updateOutboundRtpStats(stats) {
|
|
@@ -643,10 +688,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
643
688
|
return logger.warn(`ObservedPeerConnection received an invalid OutboundRtpStats (missing timestamp OR id OR ssrc OR kind field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
644
689
|
}
|
|
645
690
|
observedOutboundRtp = new ObservedOutboundRtp_1.ObservedOutboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, this);
|
|
691
|
+
observedOutboundRtp.update(stats);
|
|
646
692
|
this.observedOutboundRtps.set(stats.ssrc, observedOutboundRtp);
|
|
647
693
|
this.emit('added-outbound-rtp', observedOutboundRtp);
|
|
648
694
|
}
|
|
649
|
-
|
|
695
|
+
else {
|
|
696
|
+
observedOutboundRtp.update(stats);
|
|
697
|
+
}
|
|
698
|
+
this.emit('updated-outbound-rtp', observedOutboundRtp);
|
|
650
699
|
return observedOutboundRtp;
|
|
651
700
|
}
|
|
652
701
|
_updateOutboundTrackSample(stats) {
|
|
@@ -659,10 +708,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
659
708
|
const outboundRtps = observedMediaSource
|
|
660
709
|
? [...this.observedOutboundRtps.values()].filter((outboundRtp) => outboundRtp.mediaSourceId === observedMediaSource?.id) : undefined;
|
|
661
710
|
observedOutboundTrack = new ObservedOutboundTrack_1.ObservedOutboundTrack(stats.timestamp, stats.id, stats.kind, this, outboundRtps, observedMediaSource);
|
|
711
|
+
observedOutboundTrack.update(stats);
|
|
662
712
|
this.observedOutboundTracks.set(stats.id, observedOutboundTrack);
|
|
663
713
|
this.emit('added-outbound-track', observedOutboundTrack);
|
|
664
714
|
}
|
|
665
|
-
|
|
715
|
+
else {
|
|
716
|
+
observedOutboundTrack.update(stats);
|
|
717
|
+
}
|
|
718
|
+
this.emit('updated-outbound-track', observedOutboundTrack);
|
|
666
719
|
return observedOutboundTrack;
|
|
667
720
|
}
|
|
668
721
|
_updatePeerConnectionTransportStats(stats) {
|
|
@@ -672,10 +725,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
672
725
|
return logger.warn(`ObservedPeerConnection received an invalid PeerConnectionTransportStats (missing timestamp OR id field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
673
726
|
}
|
|
674
727
|
observedPeerConnectionTransport = new ObservedPeerConnectionTransport_1.ObservedPeerConnectionTransport(stats.timestamp, stats.id, this);
|
|
728
|
+
observedPeerConnectionTransport.update(stats);
|
|
675
729
|
this.observedPeerConnectionTransports.set(stats.id, observedPeerConnectionTransport);
|
|
676
730
|
this.emit('added-peer-connection-transport', observedPeerConnectionTransport);
|
|
677
731
|
}
|
|
678
|
-
|
|
732
|
+
else {
|
|
733
|
+
observedPeerConnectionTransport.update(stats);
|
|
734
|
+
}
|
|
735
|
+
this.emit('updated-peer-connection-transport', observedPeerConnectionTransport);
|
|
679
736
|
return observedPeerConnectionTransport;
|
|
680
737
|
}
|
|
681
738
|
_updateRemoteInboundRtpStats(stats) {
|
|
@@ -685,10 +742,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
685
742
|
return logger.warn(`ObservedPeerConnection received an invalid RemoteInboundRtpStats (missing timestamp OR id OR ssrc OR kind field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
686
743
|
}
|
|
687
744
|
observedRemoteInboundRtp = new ObservedRemoteInboundRtp_1.ObservedRemoteInboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, this);
|
|
745
|
+
observedRemoteInboundRtp.update(stats);
|
|
688
746
|
this.observedRemoteInboundRtps.set(stats.ssrc, observedRemoteInboundRtp);
|
|
689
747
|
this.emit('added-remote-inbound-rtp', observedRemoteInboundRtp);
|
|
690
748
|
}
|
|
691
|
-
|
|
749
|
+
else {
|
|
750
|
+
observedRemoteInboundRtp.update(stats);
|
|
751
|
+
}
|
|
752
|
+
this.emit('updated-remote-inbound-rtp', observedRemoteInboundRtp);
|
|
692
753
|
return observedRemoteInboundRtp;
|
|
693
754
|
}
|
|
694
755
|
_updateRemoteOutboundRtpStats(stats) {
|
|
@@ -698,10 +759,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
698
759
|
return logger.warn(`ObservedPeerConnection received an invalid RemoteOutboundRtpStats (missing timestamp OR id OR ssrc OR kind field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
699
760
|
}
|
|
700
761
|
observedRemoteOutboundRtp = new ObservedRemoteOutboundRtp_1.ObservedRemoteOutboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, this);
|
|
762
|
+
observedRemoteOutboundRtp.update(stats);
|
|
701
763
|
this.observedRemoteOutboundRtps.set(stats.ssrc, observedRemoteOutboundRtp);
|
|
702
764
|
this.emit('added-remote-outbound-rtp', observedRemoteOutboundRtp);
|
|
703
765
|
}
|
|
704
|
-
|
|
766
|
+
else {
|
|
767
|
+
observedRemoteOutboundRtp.update(stats);
|
|
768
|
+
}
|
|
769
|
+
this.emit('updated-remote-outbound-rtp', observedRemoteOutboundRtp);
|
|
705
770
|
return observedRemoteOutboundRtp;
|
|
706
771
|
}
|
|
707
772
|
}
|
package/lib/{ObservedPeerConnectionTransport.d.ts → webrtc/ObservedPeerConnectionTransport.d.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
2
|
-
import { PeerConnectionTransportStats } from '
|
|
2
|
+
import { PeerConnectionTransportStats } from '../schema/ClientSample';
|
|
3
3
|
export declare class ObservedPeerConnectionTransport implements PeerConnectionTransportStats {
|
|
4
4
|
timestamp: number;
|
|
5
5
|
id: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedPeerConnectionTransport.d.ts","sourceRoot":"","sources":["../../src/webrtc/ObservedPeerConnectionTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEtE,qBAAa,+BAAgC,YAAW,4BAA4B;IAS3E,SAAS,EAAE,MAAM;IACjB,EAAE,EAAE,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAVjC,OAAO,CAAC,QAAQ,CAAS;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAG1C,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACA,eAAe,EAAE,sBAAsB;IAGzD,IAAW,OAAO,YAMjB;IAEM,iBAAiB;IAIjB,MAAM,CAAC,KAAK,EAAE,4BAA4B;CAQjD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { MediaKind } from '
|
|
1
|
+
import { MediaKind } from '../common/types';
|
|
2
2
|
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
3
|
-
import { RemoteInboundRtpStats } from '
|
|
3
|
+
import { RemoteInboundRtpStats } from '../schema/ClientSample';
|
|
4
4
|
export declare class ObservedRemoteInboundRtp implements RemoteInboundRtpStats {
|
|
5
5
|
timestamp: number;
|
|
6
6
|
id: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedRemoteInboundRtp.d.ts","sourceRoot":"","sources":["../../src/webrtc/ObservedRemoteInboundRtp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,qBAAa,wBAAyB,YAAW,qBAAqB;IAgB7D,SAAS,EAAE,MAAM;IACjB,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,SAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAnBjC,OAAO,CAAC,QAAQ,CAAS;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,yBAAyB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAG1C,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,EACL,eAAe,EAAE,sBAAsB;IAGzD,IAAW,OAAO,YAMjB;IAEM,iBAAiB;IAIjB,cAAc;IAId,QAAQ;IAIR,MAAM,CAAC,KAAK,EAAE,qBAAqB;CAgB1C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { MediaKind } from '
|
|
1
|
+
import { MediaKind } from '../common/types';
|
|
2
2
|
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
3
|
-
import { RemoteOutboundRtpStats } from '
|
|
3
|
+
import { RemoteOutboundRtpStats } from '../schema/ClientSample';
|
|
4
4
|
export declare class ObservedRemoteOutboundRtp implements RemoteOutboundRtpStats {
|
|
5
5
|
timestamp: number;
|
|
6
6
|
id: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedRemoteOutboundRtp.d.ts","sourceRoot":"","sources":["../../src/webrtc/ObservedRemoteOutboundRtp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,qBAAa,yBAA0B,YAAW,sBAAsB;IAiB/D,SAAS,EAAE,MAAM;IACjB,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,SAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IApBjC,OAAO,CAAC,QAAQ,CAAS;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,yBAAyB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAG1C,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,EACL,eAAe,EAAE,sBAAsB;IAGzD,IAAW,OAAO,YAMjB;IAEM,iBAAiB;IAIjB,aAAa;IAIb,QAAQ;IAIR,MAAM,CAAC,KAAK,EAAE,sBAAsB;CAgB3C"}
|
package/package.json
CHANGED
package/src/ObservedCall.ts
CHANGED
|
@@ -10,6 +10,10 @@ import { OnAllClientCallUpdater } from './updaters/OnAllClientCallUpdater';
|
|
|
10
10
|
import { Updater } from './updaters/Updater';
|
|
11
11
|
import { OnIntervalUpdater } from './updaters/OnIntervalUpdater';
|
|
12
12
|
import { OnAnyClientCallUpdater } from './updaters/OnAnyClientCallUpdater';
|
|
13
|
+
import { ObservedCallEventMonitor } from './ObservedCallEventMonitor';
|
|
14
|
+
import { createLogger } from './common/logger';
|
|
15
|
+
|
|
16
|
+
const logger = createLogger('ObservedCall');
|
|
13
17
|
|
|
14
18
|
export type ObservedCallSettings<AppData extends Record<string, unknown> = Record<string, unknown>> = {
|
|
15
19
|
callId: string;
|
|
@@ -17,6 +21,7 @@ export type ObservedCallSettings<AppData extends Record<string, unknown> = Recor
|
|
|
17
21
|
remoteTrackResolvePolicy?: 'p2p' | 'mediasoup-sfu',
|
|
18
22
|
updatePolicy?: 'update-on-any-client-updated' | 'update-when-all-client-updated' | 'update-on-interval',
|
|
19
23
|
updateIntervalInMs?: number,
|
|
24
|
+
maxIdleIfEmptyMs?: number,
|
|
20
25
|
};
|
|
21
26
|
|
|
22
27
|
export type ObservedCallEvents = {
|
|
@@ -25,8 +30,6 @@ export type ObservedCallEvents = {
|
|
|
25
30
|
empty: [],
|
|
26
31
|
'not-empty': [],
|
|
27
32
|
close: [],
|
|
28
|
-
started: [],
|
|
29
|
-
ended: [],
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
export declare interface ObservedCall {
|
|
@@ -84,15 +87,11 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
84
87
|
public appData: AppData;
|
|
85
88
|
public closed = false;
|
|
86
89
|
public startedAt?: number;
|
|
87
|
-
public
|
|
90
|
+
public endedAt?: number;
|
|
91
|
+
public closedAt?: number;
|
|
88
92
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
timer?: ReturnType<typeof setTimeout>,
|
|
92
|
-
};
|
|
93
|
-
private _callEndedEvent: {
|
|
94
|
-
emitted: boolean
|
|
95
|
-
};
|
|
93
|
+
public maxIdleIfEmptyMs?: number;
|
|
94
|
+
private _autoCloseTimer?: ReturnType<typeof setTimeout>;
|
|
96
95
|
|
|
97
96
|
public constructor(
|
|
98
97
|
settings: ObservedCallSettings<AppData>,
|
|
@@ -104,6 +103,7 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
104
103
|
this.callId = settings.callId;
|
|
105
104
|
this.appData = settings.appData ?? {} as AppData;
|
|
106
105
|
this.scoreCalculator = new DefaultCallScoreCalculator(this);
|
|
106
|
+
this.maxIdleIfEmptyMs = settings.maxIdleIfEmptyMs;
|
|
107
107
|
this.detectors = new Detectors();
|
|
108
108
|
|
|
109
109
|
if (settings.updateIntervalInMs) {
|
|
@@ -113,10 +113,10 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
113
113
|
}
|
|
114
114
|
switch (settings.updatePolicy) {
|
|
115
115
|
case 'update-on-any-client-updated':
|
|
116
|
-
this.updater = new
|
|
116
|
+
this.updater = new OnAnyClientCallUpdater(this);
|
|
117
117
|
break;
|
|
118
118
|
case 'update-when-all-client-updated':
|
|
119
|
-
this.updater = new
|
|
119
|
+
this.updater = new OnAllClientCallUpdater(this);
|
|
120
120
|
break;
|
|
121
121
|
case 'update-on-interval':
|
|
122
122
|
if (!settings.updateIntervalInMs) {
|
|
@@ -133,13 +133,6 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
133
133
|
case 'mediasoup-sfu':
|
|
134
134
|
break;
|
|
135
135
|
}
|
|
136
|
-
|
|
137
|
-
this._callStartedEvent = {
|
|
138
|
-
emitted: false,
|
|
139
|
-
};
|
|
140
|
-
this._callEndedEvent = {
|
|
141
|
-
emitted: false,
|
|
142
|
-
};
|
|
143
136
|
}
|
|
144
137
|
|
|
145
138
|
public get numberOfClients() {
|
|
@@ -157,11 +150,20 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
157
150
|
|
|
158
151
|
this.updater?.close();
|
|
159
152
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
this.
|
|
153
|
+
let minSampleTimestamps: number | undefined;
|
|
154
|
+
let maxSampleTimestamps: number | undefined;
|
|
155
|
+
|
|
156
|
+
for (const client of this.observedClients.values()) {
|
|
157
|
+
client.close();
|
|
158
|
+
|
|
159
|
+
if (client.joinedAt) minSampleTimestamps = Math.min(minSampleTimestamps ?? client.joinedAt, client.joinedAt);
|
|
160
|
+
if (client.leftAt) maxSampleTimestamps = Math.max(maxSampleTimestamps ?? client.leftAt, client.leftAt);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (this.startedAt === undefined) this.startedAt = minSampleTimestamps;
|
|
164
|
+
if (this.endedAt === undefined) this.endedAt = maxSampleTimestamps;
|
|
164
165
|
|
|
166
|
+
this.closedAt = Date.now();
|
|
165
167
|
this.emit('close');
|
|
166
168
|
}
|
|
167
169
|
|
|
@@ -189,6 +191,8 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
189
191
|
|
|
190
192
|
if (this.observedClients.size === 0) {
|
|
191
193
|
this.emit('empty');
|
|
194
|
+
|
|
195
|
+
this._createAutoClose();
|
|
192
196
|
}
|
|
193
197
|
++this.totalRemovedClients;
|
|
194
198
|
});
|
|
@@ -204,11 +208,18 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
204
208
|
|
|
205
209
|
if (wasEmpty) {
|
|
206
210
|
this.emit('not-empty');
|
|
211
|
+
|
|
212
|
+
clearTimeout(this._autoCloseTimer);
|
|
213
|
+
this._autoCloseTimer = undefined;
|
|
207
214
|
}
|
|
208
215
|
|
|
209
216
|
return result;
|
|
210
217
|
}
|
|
211
218
|
|
|
219
|
+
public createEventMonitor<CTX>(context: CTX): ObservedCallEventMonitor<CTX> {
|
|
220
|
+
return new ObservedCallEventMonitor(this, context);
|
|
221
|
+
}
|
|
222
|
+
|
|
212
223
|
public update() {
|
|
213
224
|
if (this.closed) return;
|
|
214
225
|
|
|
@@ -268,40 +279,25 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
268
279
|
if (!client.joinedAt) return;
|
|
269
280
|
|
|
270
281
|
this.startedAt = Math.min(this.startedAt ?? client.joinedAt, client.joinedAt);
|
|
271
|
-
|
|
272
|
-
if (this._callStartedEvent.emitted) return;
|
|
273
|
-
if (this._callStartedEvent.timer) {
|
|
274
|
-
if (1 < this.observedClients.size) {
|
|
275
|
-
this.emitCallStartedEvent();
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
this._callStartedEvent.timer = setTimeout(() => {
|
|
281
|
-
this.emitCallStartedEvent();
|
|
282
|
-
}, 5000);
|
|
283
282
|
}
|
|
284
283
|
|
|
285
284
|
private _clientLeft(client: ObservedClient) {
|
|
286
285
|
if (!client.leftAt) return;
|
|
287
286
|
|
|
288
|
-
this.
|
|
287
|
+
this.endedAt = Math.max(this.endedAt ?? client.leftAt, client.leftAt);
|
|
289
288
|
}
|
|
290
289
|
|
|
291
|
-
|
|
292
|
-
if (this.
|
|
293
|
-
this.
|
|
294
|
-
clearTimeout(this._callStartedEvent.timer);
|
|
295
|
-
this._callStartedEvent.timer = undefined;
|
|
296
|
-
|
|
297
|
-
this.emit('started');
|
|
298
|
-
}
|
|
290
|
+
private _createAutoClose() {
|
|
291
|
+
if (this.closed) return;
|
|
292
|
+
if (this.maxIdleIfEmptyMs === undefined || this.maxIdleIfEmptyMs < 1) return;
|
|
299
293
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
294
|
+
this._autoCloseTimer = setTimeout(() => {
|
|
295
|
+
if (this.closed) return;
|
|
296
|
+
if (this.observedClients.size > 0) return;
|
|
303
297
|
|
|
304
|
-
|
|
298
|
+
logger.debug(`Call ${this.callId} is empty for ${this.maxIdleIfEmptyMs}ms, closing...`);
|
|
299
|
+
this.close();
|
|
300
|
+
}, this.maxIdleIfEmptyMs);
|
|
305
301
|
}
|
|
306
302
|
|
|
307
303
|
// public resetSummaryMetrics() {
|