@observertc/observer-js 1.0.1-4daea92.0 → 1.0.1-5a1b94b.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.
Files changed (144) hide show
  1. package/README.md +535 -1
  2. package/lib/ObservedCall.d.ts +18 -2
  3. package/lib/ObservedCall.d.ts.map +1 -1
  4. package/lib/ObservedCall.js +65 -11
  5. package/lib/ObservedCallEventMonitor.d.ts +14 -13
  6. package/lib/ObservedCallEventMonitor.d.ts.map +1 -1
  7. package/lib/ObservedCallEventMonitor.js +3 -1
  8. package/lib/ObservedClient.d.ts +9 -9
  9. package/lib/ObservedClient.d.ts.map +1 -1
  10. package/lib/ObservedClient.js +181 -15
  11. package/lib/ObservedClientEventMonitor.d.ts +54 -52
  12. package/lib/ObservedClientEventMonitor.d.ts.map +1 -1
  13. package/lib/ObservedClientEventMonitor.js +7 -0
  14. package/lib/ObservedTURN.d.ts +1 -1
  15. package/lib/ObservedTURN.d.ts.map +1 -1
  16. package/lib/ObservedTURN.js +1 -0
  17. package/lib/ObservedTurnServer.d.ts +2 -2
  18. package/lib/ObservedTurnServer.d.ts.map +1 -1
  19. package/lib/Observer.d.ts +6 -5
  20. package/lib/Observer.d.ts.map +1 -1
  21. package/lib/Observer.js +13 -20
  22. package/lib/ObserverEventMonitor.d.ts +45 -13
  23. package/lib/ObserverEventMonitor.d.ts.map +1 -1
  24. package/lib/ObserverEventMonitor.js +114 -1
  25. package/lib/common/ObserverSummary.d.ts.map +1 -0
  26. package/lib/common/types.d.ts +20 -0
  27. package/lib/common/types.d.ts.map +1 -1
  28. package/lib/index.d.ts +17 -17
  29. package/lib/index.d.ts.map +1 -1
  30. package/lib/index.js +16 -16
  31. package/lib/mediasoup/ObservedMediasoupRouter.d.ts +7 -0
  32. package/lib/mediasoup/ObservedMediasoupRouter.d.ts.map +1 -0
  33. package/lib/mediasoup/ObservedMediasoupRouter.js +12 -0
  34. package/lib/schema/ClientEventTypes.d.ts +147 -79
  35. package/lib/schema/ClientEventTypes.d.ts.map +1 -1
  36. package/lib/schema/ClientEventTypes.js +5 -2
  37. package/lib/schema/ClientSample.d.ts +1 -1
  38. package/lib/schema/ClientSample.d.ts.map +1 -1
  39. package/lib/updaters/OnAnyCallObserverUpdater.d.ts.map +1 -1
  40. package/lib/utils/MediasoupRemoteTrackResolver.d.ts +2 -2
  41. package/lib/utils/MediasoupRemoteTrackResolver.d.ts.map +1 -1
  42. package/lib/utils/RemoteTrackResolver.d.ts +2 -2
  43. package/lib/utils/RemoteTrackResolver.d.ts.map +1 -1
  44. package/lib/{ObservedCertificate.d.ts → webrtc/ObservedCertificate.d.ts} +1 -1
  45. package/lib/webrtc/ObservedCertificate.d.ts.map +1 -0
  46. package/lib/{ObservedCodec.d.ts → webrtc/ObservedCodec.d.ts} +1 -1
  47. package/lib/webrtc/ObservedCodec.d.ts.map +1 -0
  48. package/lib/{ObservedDataChannel.d.ts → webrtc/ObservedDataChannel.d.ts} +1 -1
  49. package/lib/webrtc/ObservedDataChannel.d.ts.map +1 -0
  50. package/lib/{ObservedIceCandidate.d.ts → webrtc/ObservedIceCandidate.d.ts} +1 -1
  51. package/lib/webrtc/ObservedIceCandidate.d.ts.map +1 -0
  52. package/lib/{ObservedIceCandidatePair.d.ts → webrtc/ObservedIceCandidatePair.d.ts} +3 -2
  53. package/lib/webrtc/ObservedIceCandidatePair.d.ts.map +1 -0
  54. package/lib/{ObservedIceCandidatePair.js → webrtc/ObservedIceCandidatePair.js} +17 -1
  55. package/lib/{ObservedIceTransport.d.ts → webrtc/ObservedIceTransport.d.ts} +1 -1
  56. package/lib/webrtc/ObservedIceTransport.d.ts.map +1 -0
  57. package/lib/{ObservedInboundRtp.d.ts → webrtc/ObservedInboundRtp.d.ts} +2 -2
  58. package/lib/webrtc/ObservedInboundRtp.d.ts.map +1 -0
  59. package/lib/{ObservedInboundTrack.d.ts → webrtc/ObservedInboundTrack.d.ts} +5 -4
  60. package/lib/webrtc/ObservedInboundTrack.d.ts.map +1 -0
  61. package/lib/{ObservedInboundTrack.js → webrtc/ObservedInboundTrack.js} +2 -1
  62. package/lib/{ObservedMediaPlayout.d.ts → webrtc/ObservedMediaPlayout.d.ts} +2 -2
  63. package/lib/webrtc/ObservedMediaPlayout.d.ts.map +1 -0
  64. package/lib/{ObservedMediaSource.d.ts → webrtc/ObservedMediaSource.d.ts} +2 -2
  65. package/lib/webrtc/ObservedMediaSource.d.ts.map +1 -0
  66. package/lib/{ObservedOutboundRtp.d.ts → webrtc/ObservedOutboundRtp.d.ts} +2 -2
  67. package/lib/webrtc/ObservedOutboundRtp.d.ts.map +1 -0
  68. package/lib/{ObservedOutboundTrack.d.ts → webrtc/ObservedOutboundTrack.d.ts} +5 -4
  69. package/lib/webrtc/ObservedOutboundTrack.d.ts.map +1 -0
  70. package/lib/{ObservedOutboundTrack.js → webrtc/ObservedOutboundTrack.js} +2 -1
  71. package/lib/{ObservedPeerConnection.d.ts → webrtc/ObservedPeerConnection.d.ts} +26 -4
  72. package/lib/webrtc/ObservedPeerConnection.d.ts.map +1 -0
  73. package/lib/{ObservedPeerConnection.js → webrtc/ObservedPeerConnection.js} +80 -17
  74. package/lib/{ObservedPeerConnectionTransport.d.ts → webrtc/ObservedPeerConnectionTransport.d.ts} +1 -1
  75. package/lib/webrtc/ObservedPeerConnectionTransport.d.ts.map +1 -0
  76. package/lib/{ObservedRemoteInboundRtp.d.ts → webrtc/ObservedRemoteInboundRtp.d.ts} +2 -2
  77. package/lib/webrtc/ObservedRemoteInboundRtp.d.ts.map +1 -0
  78. package/lib/{ObservedRemoteOutboundRtp.d.ts → webrtc/ObservedRemoteOutboundRtp.d.ts} +2 -2
  79. package/lib/webrtc/ObservedRemoteOutboundRtp.d.ts.map +1 -0
  80. package/package.json +1 -1
  81. package/src/ObservedCall.ts +70 -17
  82. package/src/ObservedCallEventMonitor.ts +17 -14
  83. package/src/ObservedClient.ts +195 -22
  84. package/src/ObservedClientEventMonitor.ts +59 -51
  85. package/src/ObservedTURN.ts +2 -1
  86. package/src/ObservedTurnServer.ts +2 -2
  87. package/src/Observer.ts +22 -27
  88. package/src/ObserverEventMonitor.ts +167 -14
  89. package/src/common/types.ts +20 -1
  90. package/src/index.ts +18 -19
  91. package/src/mediasoup/ObservedMediasoupRouter.ts +12 -0
  92. package/src/schema/ClientEventTypes.ts +187 -83
  93. package/src/schema/ClientSample.ts +1 -1
  94. package/src/updaters/OnAnyCallObserverUpdater.ts +1 -1
  95. package/src/utils/MediasoupRemoteTrackResolver.ts +2 -2
  96. package/src/utils/RemoteTrackResolver.ts +2 -2
  97. package/src/{ObservedCertificate.ts → webrtc/ObservedCertificate.ts} +1 -1
  98. package/src/{ObservedCodec.ts → webrtc/ObservedCodec.ts} +1 -1
  99. package/src/{ObservedDataChannel.ts → webrtc/ObservedDataChannel.ts} +1 -1
  100. package/src/{ObservedIceCandidate.ts → webrtc/ObservedIceCandidate.ts} +1 -1
  101. package/src/{ObservedIceCandidatePair.ts → webrtc/ObservedIceCandidatePair.ts} +19 -3
  102. package/src/{ObservedIceTransport.ts → webrtc/ObservedIceTransport.ts} +1 -1
  103. package/src/{ObservedInboundRtp.ts → webrtc/ObservedInboundRtp.ts} +2 -2
  104. package/src/{ObservedInboundTrack.ts → webrtc/ObservedInboundTrack.ts} +6 -4
  105. package/src/{ObservedMediaPlayout.ts → webrtc/ObservedMediaPlayout.ts} +2 -2
  106. package/src/{ObservedMediaSource.ts → webrtc/ObservedMediaSource.ts} +2 -2
  107. package/src/{ObservedOutboundRtp.ts → webrtc/ObservedOutboundRtp.ts} +2 -2
  108. package/src/{ObservedOutboundTrack.ts → webrtc/ObservedOutboundTrack.ts} +6 -4
  109. package/src/{ObservedPeerConnection.ts → webrtc/ObservedPeerConnection.ts} +122 -37
  110. package/src/{ObservedPeerConnectionTransport.ts → webrtc/ObservedPeerConnectionTransport.ts} +1 -1
  111. package/src/{ObservedRemoteInboundRtp.ts → webrtc/ObservedRemoteInboundRtp.ts} +2 -2
  112. package/src/{ObservedRemoteOutboundRtp.ts → webrtc/ObservedRemoteOutboundRtp.ts} +2 -2
  113. package/lib/ObservedCertificate.d.ts.map +0 -1
  114. package/lib/ObservedCodec.d.ts.map +0 -1
  115. package/lib/ObservedDataChannel.d.ts.map +0 -1
  116. package/lib/ObservedIceCandidate.d.ts.map +0 -1
  117. package/lib/ObservedIceCandidatePair.d.ts.map +0 -1
  118. package/lib/ObservedIceTransport.d.ts.map +0 -1
  119. package/lib/ObservedInboundRtp.d.ts.map +0 -1
  120. package/lib/ObservedInboundTrack.d.ts.map +0 -1
  121. package/lib/ObservedMediaPlayout.d.ts.map +0 -1
  122. package/lib/ObservedMediaSource.d.ts.map +0 -1
  123. package/lib/ObservedOutboundRtp.d.ts.map +0 -1
  124. package/lib/ObservedOutboundTrack.d.ts.map +0 -1
  125. package/lib/ObservedPeerConnection.d.ts.map +0 -1
  126. package/lib/ObservedPeerConnectionTransport.d.ts.map +0 -1
  127. package/lib/ObservedRemoteInboundRtp.d.ts.map +0 -1
  128. package/lib/ObservedRemoteOutboundRtp.d.ts.map +0 -1
  129. package/lib/ObserverSummary.d.ts.map +0 -1
  130. /package/lib/{ObserverSummary.d.ts → common/ObserverSummary.d.ts} +0 -0
  131. /package/lib/{ObserverSummary.js → common/ObserverSummary.js} +0 -0
  132. /package/lib/{ObservedCertificate.js → webrtc/ObservedCertificate.js} +0 -0
  133. /package/lib/{ObservedCodec.js → webrtc/ObservedCodec.js} +0 -0
  134. /package/lib/{ObservedDataChannel.js → webrtc/ObservedDataChannel.js} +0 -0
  135. /package/lib/{ObservedIceCandidate.js → webrtc/ObservedIceCandidate.js} +0 -0
  136. /package/lib/{ObservedIceTransport.js → webrtc/ObservedIceTransport.js} +0 -0
  137. /package/lib/{ObservedInboundRtp.js → webrtc/ObservedInboundRtp.js} +0 -0
  138. /package/lib/{ObservedMediaPlayout.js → webrtc/ObservedMediaPlayout.js} +0 -0
  139. /package/lib/{ObservedMediaSource.js → webrtc/ObservedMediaSource.js} +0 -0
  140. /package/lib/{ObservedOutboundRtp.js → webrtc/ObservedOutboundRtp.js} +0 -0
  141. /package/lib/{ObservedPeerConnectionTransport.js → webrtc/ObservedPeerConnectionTransport.js} +0 -0
  142. /package/lib/{ObservedRemoteInboundRtp.js → webrtc/ObservedRemoteInboundRtp.js} +0 -0
  143. /package/lib/{ObservedRemoteOutboundRtp.js → webrtc/ObservedRemoteOutboundRtp.js} +0 -0
  144. /package/src/{ObserverSummary.ts → common/ObserverSummary.ts} +0 -0
@@ -9,6 +9,8 @@ const OnAllClientCallUpdater_1 = require("./updaters/OnAllClientCallUpdater");
9
9
  const OnIntervalUpdater_1 = require("./updaters/OnIntervalUpdater");
10
10
  const OnAnyClientCallUpdater_1 = require("./updaters/OnAnyClientCallUpdater");
11
11
  const ObservedCallEventMonitor_1 = require("./ObservedCallEventMonitor");
12
+ const logger_1 = require("./common/logger");
13
+ const logger = (0, logger_1.createLogger)('ObservedCall');
12
14
  class ObservedCall extends events_1.EventEmitter {
13
15
  observer;
14
16
  detectors;
@@ -43,6 +45,19 @@ class ObservedCall extends events_1.EventEmitter {
43
45
  numberOfDataChannels = 0;
44
46
  maxNumberOfClients = 0;
45
47
  deltaNumberOfIssues = 0;
48
+ deltaDataChannelBytesReceived = 0;
49
+ deltaDataChannelBytesSent = 0;
50
+ deltaDataChannelMessagesReceived = 0;
51
+ deltaDataChannelMessagesSent = 0;
52
+ deltaInboundPacketsLost = 0;
53
+ deltaInboundPacketsReceived = 0;
54
+ deltaOutboundPacketsSent = 0;
55
+ deltaReceivedAudioBytes = 0;
56
+ deltaReceivedVideoBytes = 0;
57
+ deltaSentAudioBytes = 0;
58
+ deltaSentVideoBytes = 0;
59
+ deltaTransportReceivedBytes = 0;
60
+ deltaTransportSentBytes = 0;
46
61
  deltaRttLt50Measurements = 0;
47
62
  deltaRttLt150Measurements = 0;
48
63
  deltaRttLt300Measurements = 0;
@@ -52,8 +67,9 @@ class ObservedCall extends events_1.EventEmitter {
52
67
  startedAt;
53
68
  endedAt;
54
69
  closedAt;
55
- _callStartedEvent;
56
- _callEndedEvent;
70
+ lastClientTimestamp = 0;
71
+ maxIdleIfEmptyMs;
72
+ _autoCloseTimer;
57
73
  constructor(settings, observer) {
58
74
  super();
59
75
  this.observer = observer;
@@ -61,6 +77,7 @@ class ObservedCall extends events_1.EventEmitter {
61
77
  this.callId = settings.callId;
62
78
  this.appData = settings.appData ?? {};
63
79
  this.scoreCalculator = new DefaultCallScoreCalculator_1.DefaultCallScoreCalculator(this);
80
+ this.maxIdleIfEmptyMs = settings.maxIdleIfEmptyMs;
64
81
  this.detectors = new Detectors_1.Detectors();
65
82
  if (settings.updateIntervalInMs) {
66
83
  if (settings.updatePolicy !== 'update-on-interval') {
@@ -69,10 +86,10 @@ class ObservedCall extends events_1.EventEmitter {
69
86
  }
70
87
  switch (settings.updatePolicy) {
71
88
  case 'update-on-any-client-updated':
72
- this.updater = new OnAllClientCallUpdater_1.OnAllClientCallUpdater(this);
89
+ this.updater = new OnAnyClientCallUpdater_1.OnAnyClientCallUpdater(this);
73
90
  break;
74
91
  case 'update-when-all-client-updated':
75
- this.updater = new OnAnyClientCallUpdater_1.OnAnyClientCallUpdater(this);
92
+ this.updater = new OnAllClientCallUpdater_1.OnAllClientCallUpdater(this);
76
93
  break;
77
94
  case 'update-on-interval':
78
95
  if (!settings.updateIntervalInMs) {
@@ -85,12 +102,6 @@ class ObservedCall extends events_1.EventEmitter {
85
102
  case 'mediasoup-sfu':
86
103
  break;
87
104
  }
88
- this._callStartedEvent = {
89
- emitted: false,
90
- };
91
- this._callEndedEvent = {
92
- emitted: false,
93
- };
94
105
  }
95
106
  get numberOfClients() {
96
107
  return this.observedClients.size;
@@ -104,7 +115,19 @@ class ObservedCall extends events_1.EventEmitter {
104
115
  this.update(); // last update before closing
105
116
  this.closed = true;
106
117
  this.updater?.close();
107
- [...this.observedClients.values()].forEach((client) => client.close());
118
+ let minSampleTimestamps;
119
+ let maxSampleTimestamps;
120
+ for (const client of this.observedClients.values()) {
121
+ client.close();
122
+ if (client.joinedAt)
123
+ minSampleTimestamps = Math.min(minSampleTimestamps ?? client.joinedAt, client.joinedAt);
124
+ if (client.leftAt)
125
+ maxSampleTimestamps = Math.max(maxSampleTimestamps ?? client.leftAt, client.leftAt);
126
+ }
127
+ if (this.startedAt === undefined)
128
+ this.startedAt = minSampleTimestamps;
129
+ if (this.endedAt === undefined)
130
+ this.endedAt = maxSampleTimestamps;
108
131
  this.closedAt = Date.now();
109
132
  this.emit('close');
110
133
  }
@@ -130,6 +153,7 @@ class ObservedCall extends events_1.EventEmitter {
130
153
  this.observedClients.delete(settings.clientId);
131
154
  if (this.observedClients.size === 0) {
132
155
  this.emit('empty');
156
+ this._createAutoClose();
133
157
  }
134
158
  ++this.totalRemovedClients;
135
159
  });
@@ -142,6 +166,8 @@ class ObservedCall extends events_1.EventEmitter {
142
166
  this.emit('newclient', result);
143
167
  if (wasEmpty) {
144
168
  this.emit('not-empty');
169
+ clearTimeout(this._autoCloseTimer);
170
+ this._autoCloseTimer = undefined;
145
171
  }
146
172
  return result;
147
173
  }
@@ -163,12 +189,26 @@ class ObservedCall extends events_1.EventEmitter {
163
189
  }
164
190
  this.detectors.update();
165
191
  this.scoreCalculator.update();
192
+ this.lastClientTimestamp = Math.max(...Array.from(this.observedClients.values()).map((c) => c.lastSampleTimestamp ?? 0));
166
193
  this.emit('update');
167
194
  this.deltaNumberOfIssues = 0;
168
195
  this.deltaRttLt50Measurements = 0;
169
196
  this.deltaRttLt150Measurements = 0;
170
197
  this.deltaRttLt300Measurements = 0;
171
198
  this.deltaRttGtOrEq300Measurements = 0;
199
+ this.deltaDataChannelBytesReceived = 0;
200
+ this.deltaDataChannelBytesSent = 0;
201
+ this.deltaDataChannelMessagesReceived = 0;
202
+ this.deltaDataChannelMessagesSent = 0;
203
+ this.deltaInboundPacketsLost = 0;
204
+ this.deltaInboundPacketsReceived = 0;
205
+ this.deltaOutboundPacketsSent = 0;
206
+ this.deltaReceivedAudioBytes = 0;
207
+ this.deltaReceivedVideoBytes = 0;
208
+ this.deltaSentAudioBytes = 0;
209
+ this.deltaSentVideoBytes = 0;
210
+ this.deltaTransportReceivedBytes = 0;
211
+ this.deltaTransportSentBytes = 0;
172
212
  }
173
213
  _onClientUpdate(client) {
174
214
  this.totalClientsReceivedAudioBytes += client.deltaReceivedAudioBytes;
@@ -203,5 +243,19 @@ class ObservedCall extends events_1.EventEmitter {
203
243
  return;
204
244
  this.endedAt = Math.max(this.endedAt ?? client.leftAt, client.leftAt);
205
245
  }
246
+ _createAutoClose() {
247
+ if (this.closed)
248
+ return;
249
+ if (this.maxIdleIfEmptyMs === undefined || this.maxIdleIfEmptyMs < 1)
250
+ return;
251
+ this._autoCloseTimer = setTimeout(() => {
252
+ if (this.closed)
253
+ return;
254
+ if (this.observedClients.size > 0)
255
+ return;
256
+ logger.debug(`Call ${this.callId} is empty for ${this.maxIdleIfEmptyMs}ms, closing...`);
257
+ this.close();
258
+ }, this.maxIdleIfEmptyMs);
259
+ }
206
260
  }
207
261
  exports.ObservedCall = ObservedCall;
@@ -1,23 +1,24 @@
1
1
  import { ObservedCall } from './ObservedCall';
2
- import { ObservedCertificate } from './ObservedCertificate';
2
+ import { ObservedCertificate } from './webrtc/ObservedCertificate';
3
3
  import { ObservedClient } from './ObservedClient';
4
- import { ObservedCodec } from './ObservedCodec';
5
- import { ObservedDataChannel } from './ObservedDataChannel';
6
- import { ObservedIceCandidate } from './ObservedIceCandidate';
7
- import { ObservedIceCandidatePair } from './ObservedIceCandidatePair';
8
- import { ObservedIceTransport } from './ObservedIceTransport';
9
- import { ObservedInboundRtp } from './ObservedInboundRtp';
10
- import { ObservedInboundTrack } from './ObservedInboundTrack';
11
- import { ObservedMediaPlayout } from './ObservedMediaPlayout';
12
- import { ObservedMediaSource } from './ObservedMediaSource';
13
- import { ObservedOutboundRtp } from './ObservedOutboundRtp';
14
- import { ObservedOutboundTrack } from './ObservedOutboundTrack';
15
- import { ObservedPeerConnection } from './ObservedPeerConnection';
4
+ import { ObservedCodec } from './webrtc/ObservedCodec';
5
+ import { ObservedDataChannel } from './webrtc/ObservedDataChannel';
6
+ import { ObservedIceCandidate } from './webrtc/ObservedIceCandidate';
7
+ import { ObservedIceCandidatePair } from './webrtc/ObservedIceCandidatePair';
8
+ import { ObservedIceTransport } from './webrtc/ObservedIceTransport';
9
+ import { ObservedInboundRtp } from './webrtc/ObservedInboundRtp';
10
+ import { ObservedInboundTrack } from './webrtc/ObservedInboundTrack';
11
+ import { ObservedMediaPlayout } from './webrtc/ObservedMediaPlayout';
12
+ import { ObservedMediaSource } from './webrtc/ObservedMediaSource';
13
+ import { ObservedOutboundRtp } from './webrtc/ObservedOutboundRtp';
14
+ import { ObservedOutboundTrack } from './webrtc/ObservedOutboundTrack';
15
+ import { ObservedPeerConnection } from './webrtc/ObservedPeerConnection';
16
16
  import { ClientEvent, ClientIssue, ClientMetaData, ClientSample, ExtensionStat } from './schema/ClientSample';
17
17
  export declare class ObservedCallEventMonitor<Context> {
18
18
  readonly call: ObservedCall;
19
19
  readonly context: Context;
20
20
  constructor(call: ObservedCall, context: Context);
21
+ onCallClosed?: (call: ObservedCall, ctx: Context) => void;
21
22
  onCallEmpty?: (call: ObservedCall, ctx: Context) => void;
22
23
  onCallNotEmpty?: (call: ObservedCall, ctx: Context) => void;
23
24
  onCallUpdated?: (call: ObservedCall, ctx: Context) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedCallEventMonitor.d.ts","sourceRoot":"","sources":["../src/ObservedCallEventMonitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObservedCallEventMonitor.d.ts","sourceRoot":"","sources":["../src/ObservedCallEventMonitor.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,7 @@ class ObservedCallEventMonitor {
46
46
  this._onCallAdded(call);
47
47
  }
48
48
  // Public event handlers
49
+ onCallClosed;
49
50
  onCallEmpty;
50
51
  onCallNotEmpty;
51
52
  onCallUpdated;
@@ -100,6 +101,7 @@ class ObservedCallEventMonitor {
100
101
  call.off('empty', onCallEmpty);
101
102
  call.off('not-empty', onCallNotEmpty);
102
103
  call.off('update', onCallUpdated);
104
+ this.onCallClosed?.(call, this.context);
103
105
  });
104
106
  call.on('newclient', this._onClientAdded);
105
107
  call.on('empty', onCallEmpty);
@@ -115,7 +117,7 @@ class ObservedCallEventMonitor {
115
117
  const onClientExtensionStats = (extensionStats) => this._onClientExtensionStats(observedClient, extensionStats);
116
118
  const onUsingTurn = (usingTurn) => this._onUsingTurn(observedClient, usingTurn);
117
119
  const onUserMediaError = (error) => this._onUserMediaError(observedClient, error);
118
- const onClientUpdated = (...args) => this.onClientUpdated?.(observedClient, args[0].sample, this.context);
120
+ const onClientUpdated = (...args) => this.onClientUpdated?.(observedClient, args[0], this.context);
119
121
  const onClientEvent = (event) => this.onClientEvent?.(observedClient, event, this.context);
120
122
  observedClient.once('close', () => {
121
123
  observedClient.off('newpeerconnection', this._onPeerConnconnectionAdded);
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import { EventEmitter } from 'events';
3
- import { ObservedPeerConnection } from './ObservedPeerConnection';
3
+ import { ObservedPeerConnection } from './webrtc/ObservedPeerConnection';
4
4
  import { ClientEvent, ClientMetaData, ClientSample, ClientIssue, ExtensionStat } from './schema/ClientSample';
5
5
  import * as MetaData from './schema/ClientMetaTypes';
6
6
  import { ObservedCall } from './ObservedCall';
@@ -8,15 +8,11 @@ import { CalculatedScore } from './scores/CalculatedScore';
8
8
  import { Detectors } from './detectors/Detectors';
9
9
  export type ObservedClientSettings<AppData extends Record<string, unknown> = Record<string, unknown>> = {
10
10
  clientId: string;
11
+ maxIdleTimeMs?: number;
11
12
  appData?: AppData;
12
13
  };
13
14
  export type ObservedClientEvents = {
14
- update: [
15
- {
16
- sample: ClientSample;
17
- elapsedTimeInMs: number;
18
- }
19
- ];
15
+ update: [sample: ClientSample, elapsedTimeInMs: number];
20
16
  close: [];
21
17
  joined: [];
22
18
  issue: [ClientIssue];
@@ -36,12 +32,11 @@ export declare interface ObservedClient {
36
32
  emit<U extends keyof ObservedClientEvents>(event: U, ...args: ObservedClientEvents[U]): boolean;
37
33
  }
38
34
  export declare class ObservedClient<AppData extends Record<string, unknown> = Record<string, unknown>> extends EventEmitter {
35
+ readonly settings: ObservedClientSettings<AppData>;
39
36
  readonly call: ObservedCall;
40
37
  readonly detectors: Detectors;
41
- readonly clientId: string;
42
38
  readonly observedPeerConnections: Map<string, ObservedPeerConnection>;
43
39
  readonly calculatedScore: CalculatedScore;
44
- appData: AppData;
45
40
  attachments?: Record<string, unknown>;
46
41
  updated: number;
47
42
  acceptedSamples: number;
@@ -49,6 +44,7 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
49
44
  joinedAt?: number;
50
45
  leftAt?: number;
51
46
  closedAt?: number;
47
+ lastSampleTimestamp?: number;
52
48
  operationSystem?: MetaData.OperationSystem;
53
49
  engine?: MetaData.Engine;
54
50
  platform?: MetaData.Platform;
@@ -111,10 +107,14 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
111
107
  readonly mediaDevices: MetaData.MediaDeviceInfo[];
112
108
  issues: ClientIssue[];
113
109
  private _injections;
110
+ private _autoCloseTimer?;
114
111
  constructor(settings: ObservedClientSettings<AppData>, call: ObservedCall);
112
+ get clientId(): string;
113
+ get appData(): AppData;
115
114
  get numberOfPeerConnections(): number;
116
115
  get score(): number | undefined;
117
116
  close(): void;
117
+ private _createAutoClose;
118
118
  accept(sample: ClientSample): void;
119
119
  private _processClientEvent;
120
120
  injectMetaData(metaData: ClientMetaData): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ObservedClient = void 0;
4
4
  const events_1 = require("events");
5
- const ObservedPeerConnection_1 = require("./ObservedPeerConnection");
5
+ const ObservedPeerConnection_1 = require("./webrtc/ObservedPeerConnection");
6
6
  const logger_1 = require("./common/logger");
7
7
  const ClientEventTypes_1 = require("./schema/ClientEventTypes");
8
8
  const ClientMetaTypes_1 = require("./schema/ClientMetaTypes");
@@ -10,15 +10,14 @@ const utils_1 = require("./common/utils");
10
10
  const Detectors_1 = require("./detectors/Detectors");
11
11
  const logger = (0, logger_1.createLogger)('ObservedClient');
12
12
  class ObservedClient extends events_1.EventEmitter {
13
+ settings;
13
14
  call;
14
15
  detectors;
15
- clientId;
16
16
  observedPeerConnections = new Map();
17
17
  calculatedScore = {
18
18
  weight: 1,
19
19
  value: undefined,
20
20
  };
21
- appData;
22
21
  attachments;
23
22
  updated = Date.now();
24
23
  acceptedSamples = 0;
@@ -26,6 +25,7 @@ class ObservedClient extends events_1.EventEmitter {
26
25
  joinedAt;
27
26
  leftAt;
28
27
  closedAt;
28
+ lastSampleTimestamp;
29
29
  // the timestamp of the CLIENT_JOINED event
30
30
  operationSystem;
31
31
  engine;
@@ -89,14 +89,21 @@ class ObservedClient extends events_1.EventEmitter {
89
89
  mediaDevices = [];
90
90
  issues = [];
91
91
  _injections = {};
92
+ _autoCloseTimer;
92
93
  constructor(settings, call) {
93
94
  super();
95
+ this.settings = settings;
94
96
  this.call = call;
95
97
  this.setMaxListeners(Infinity);
96
- this.clientId = settings.clientId;
97
- this.appData = settings.appData ?? {};
98
+ this._createAutoClose();
98
99
  this.detectors = new Detectors_1.Detectors();
99
100
  }
101
+ get clientId() {
102
+ return this.settings.clientId;
103
+ }
104
+ get appData() {
105
+ return this.settings.appData ?? {};
106
+ }
100
107
  get numberOfPeerConnections() {
101
108
  return this.observedPeerConnections.size;
102
109
  }
@@ -107,13 +114,37 @@ class ObservedClient extends events_1.EventEmitter {
107
114
  if (this.closed)
108
115
  return;
109
116
  this.closed = true;
117
+ this._injections.clientEvents?.forEach((clientEvent) => this._processClientEvent(clientEvent));
118
+ this._injections.clientIssues?.forEach((clientIssue) => this.addIssue(clientIssue));
119
+ this._injections.extensionStats?.forEach((extensionStat) => this.addExtensionStats(extensionStat));
120
+ this._injections.clientMetaItems?.forEach((clientMetaItem) => this.addMetadata(clientMetaItem));
110
121
  Array.from(this.observedPeerConnections.values()).forEach((peerConnection) => peerConnection.close());
122
+ if (!this.leftAt) {
123
+ this.leftAt = this.lastSampleTimestamp;
124
+ if (this.leftAt) {
125
+ this.emit('left');
126
+ }
127
+ }
111
128
  this.closedAt = Date.now();
112
129
  this.emit('close');
113
130
  }
131
+ _createAutoClose() {
132
+ if (this.closed)
133
+ return;
134
+ if (this.settings.maxIdleTimeMs === undefined || this.settings.maxIdleTimeMs < 1)
135
+ return;
136
+ clearTimeout(this._autoCloseTimer);
137
+ this._autoCloseTimer = setTimeout(() => {
138
+ if (this.closed)
139
+ return;
140
+ logger.debug(`Client ${this.clientId} is idle for ${this.settings.maxIdleTimeMs}ms, closing...`);
141
+ this.close();
142
+ }, this.settings.maxIdleTimeMs);
143
+ }
114
144
  accept(sample) {
115
145
  if (this.closed)
116
146
  throw new Error(`Client ${this.clientId} is closed`);
147
+ this._createAutoClose();
117
148
  const now = Date.now();
118
149
  const elapsedInMs = now - this.updated;
119
150
  const elapsedInSeconds = elapsedInMs / 1000;
@@ -248,11 +279,9 @@ class ObservedClient extends events_1.EventEmitter {
248
279
  this.currentAvgRttInMs = 0 < numberOfRttMeasurements ? sumOfRtts / numberOfRttMeasurements : undefined;
249
280
  this.calculatedScore.value = sample.score;
250
281
  this.detectors.update();
282
+ this.lastSampleTimestamp = sample.timestamp;
251
283
  // emit update
252
- this.emit('update', {
253
- sample,
254
- elapsedTimeInMs: now - this.updated,
255
- });
284
+ this.emit('update', sample, now - this.updated);
256
285
  this.updated = now;
257
286
  // if result changed after update
258
287
  if (this.calculatedScore.value) {
@@ -278,6 +307,7 @@ class ObservedClient extends events_1.EventEmitter {
278
307
  logger.warn(`Client ${this.clientId} joinedAt timestamp was updated to ${event.timestamp}. the joined event will not be emitted.`);
279
308
  }
280
309
  }
310
+ logger.debug('Client %s joined at %o', this.clientId, event);
281
311
  break;
282
312
  }
283
313
  case ClientEventTypes_1.ClientEventTypes.CLIENT_LEFT: {
@@ -290,6 +320,7 @@ class ObservedClient extends events_1.EventEmitter {
290
320
  logger.warn(`Client ${this.clientId} leftAt timestamp was already set`);
291
321
  }
292
322
  }
323
+ logger.debug('Client %s left at %o', this.clientId, event);
293
324
  break;
294
325
  }
295
326
  case ClientEventTypes_1.ClientEventTypes.PEER_CONNECTION_OPENED: {
@@ -303,7 +334,7 @@ class ObservedClient extends events_1.EventEmitter {
303
334
  postBuffer.push(event);
304
335
  }
305
336
  else {
306
- logger.warn('Received PEER_CONNECTION_OPENED event without a corresponding observedPeerConnection', event);
337
+ logger.warn('Received PEER_CONNECTION_OPENED event without a corresponding observedPeerConnection: %o', event);
307
338
  }
308
339
  }
309
340
  break;
@@ -319,7 +350,7 @@ class ObservedClient extends events_1.EventEmitter {
319
350
  postBuffer.push(event);
320
351
  }
321
352
  else {
322
- logger.warn('Received PEER_CONNECTION_CLOSED event without a corresponding observedPeerConnection', event);
353
+ logger.warn('Received PEER_CONNECTION_CLOSED event without a corresponding observedPeerConnection: %o', event);
323
354
  }
324
355
  }
325
356
  break;
@@ -336,7 +367,7 @@ class ObservedClient extends events_1.EventEmitter {
336
367
  postBuffer.push(event);
337
368
  }
338
369
  else {
339
- logger.warn('Received MEDIA_TRACK_ADDED event without a corresponding observedPeerConnection or observedTrack', event);
370
+ logger.warn('Received MEDIA_TRACK_ADDED event without a corresponding observedPeerConnection or observedTrack: %o', event);
340
371
  }
341
372
  }
342
373
  break;
@@ -353,7 +384,7 @@ class ObservedClient extends events_1.EventEmitter {
353
384
  postBuffer.push(event);
354
385
  }
355
386
  else {
356
- logger.warn('Received MEDIA_TRACK_REMOVED event without a corresponding observedPeerConnection or observedTrack', event);
387
+ logger.warn('Received MEDIA_TRACK_REMOVED event without a corresponding observedPeerConnection or observedTrack: %o', event);
357
388
  }
358
389
  }
359
390
  break;
@@ -370,7 +401,7 @@ class ObservedClient extends events_1.EventEmitter {
370
401
  postBuffer.push(event);
371
402
  }
372
403
  else {
373
- logger.warn('Received DATA_CHANNEL_OPENED event without a corresponding observedPeerConnection or observedDataChannel', event);
404
+ logger.warn('Received DATA_CHANNEL_OPENED event without a corresponding observedPeerConnection or observedDataChannel: %o', event);
374
405
  }
375
406
  }
376
407
  break;
@@ -387,7 +418,114 @@ class ObservedClient extends events_1.EventEmitter {
387
418
  postBuffer.push(event);
388
419
  }
389
420
  else {
390
- logger.warn('Received DATA_CHANNEL_CLOSE event without a corresponding observedPeerConnection or observedDataChannel', event);
421
+ logger.warn('Received DATA_CHANNEL_CLOSE event without a corresponding observedPeerConnection or observedDataChannel: %o', event);
422
+ }
423
+ }
424
+ break;
425
+ }
426
+ case ClientEventTypes_1.ClientEventTypes.MEDIA_TRACK_MUTED: {
427
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
428
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
429
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
430
+ const observedInboundTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId);
431
+ const observedOutboundTrack = observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
432
+ if (observedPeerConnection) {
433
+ if (observedInboundTrack) {
434
+ observedInboundTrack.muted = true;
435
+ observedPeerConnection?.emit('muted-inbound-track', observedInboundTrack);
436
+ }
437
+ else if (observedOutboundTrack) {
438
+ observedOutboundTrack.muted = true;
439
+ observedPeerConnection?.emit('muted-outbound-track', observedOutboundTrack);
440
+ }
441
+ }
442
+ else if (postBuffer) {
443
+ postBuffer.push(event);
444
+ }
445
+ else {
446
+ logger.warn('Received MEDIA_TRACK_MUTED event without a corresponding observedPeerConnection or observedTrack: %o', event);
447
+ }
448
+ }
449
+ break;
450
+ }
451
+ case ClientEventTypes_1.ClientEventTypes.MEDIA_TRACK_UNMUTED: {
452
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
453
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
454
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
455
+ const observedInboundTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId);
456
+ const observedOutboundTrack = observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
457
+ if (observedPeerConnection) {
458
+ if (observedInboundTrack) {
459
+ observedInboundTrack.muted = false;
460
+ observedPeerConnection?.emit('unmuted-inbound-track', observedInboundTrack);
461
+ }
462
+ else if (observedOutboundTrack) {
463
+ observedOutboundTrack.muted = false;
464
+ observedPeerConnection?.emit('unmuted-outbound-track', observedOutboundTrack);
465
+ }
466
+ }
467
+ else if (postBuffer) {
468
+ postBuffer.push(event);
469
+ }
470
+ else {
471
+ logger.warn('Received MEDIA_TRACK_UNMUTED event without a corresponding observedPeerConnection or observedTrack: %o', event);
472
+ }
473
+ }
474
+ break;
475
+ }
476
+ case ClientEventTypes_1.ClientEventTypes.ICE_CONNECTION_STATE_CHANGED: {
477
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
478
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.iceConnectionState && typeof payload.iceConnectionState === 'string') {
479
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
480
+ if (observedPeerConnection) {
481
+ observedPeerConnection.iceConnectionState = payload.iceConnectionState;
482
+ observedPeerConnection.emit('iceconnectionstatechange', {
483
+ state: payload.iceConnectionState,
484
+ });
485
+ }
486
+ else if (postBuffer) {
487
+ postBuffer.push(event);
488
+ }
489
+ else {
490
+ logger.warn('Received ICE_CONNECTION_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
491
+ }
492
+ }
493
+ break;
494
+ }
495
+ case ClientEventTypes_1.ClientEventTypes.ICE_GATHERING_STATE_CHANGED: {
496
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
497
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.iceGatheringState && typeof payload.iceGatheringState === 'string') {
498
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
499
+ if (observedPeerConnection) {
500
+ observedPeerConnection.iceGatheringState = payload.iceGatheringState;
501
+ observedPeerConnection.emit('icegatheringstatechange', {
502
+ state: payload.iceGatheringState,
503
+ });
504
+ }
505
+ else if (postBuffer) {
506
+ postBuffer.push(event);
507
+ }
508
+ else {
509
+ logger.warn('Received ICE_GATHERING_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
510
+ }
511
+ }
512
+ break;
513
+ }
514
+ case ClientEventTypes_1.ClientEventTypes.PEER_CONNECTION_STATE_CHANGED: {
515
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
516
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.peerConnectionState && typeof payload.peerConnectionState === 'string') {
517
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
518
+ if (observedPeerConnection) {
519
+ observedPeerConnection.connectionState = payload.peerConnectionState;
520
+ observedPeerConnection.emit('connectionstatechange', {
521
+ state: payload.peerConnectionState,
522
+ });
523
+ }
524
+ else if (postBuffer) {
525
+ postBuffer.push(event);
526
+ }
527
+ else {
528
+ logger.warn('Received PEER_CONNECTION_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
391
529
  }
392
530
  }
393
531
  break;
@@ -450,6 +588,34 @@ class ObservedClient extends events_1.EventEmitter {
450
588
  this.operationSystem = (0, utils_1.parseJsonAs)(metadata.payload);
451
589
  break;
452
590
  }
591
+ case 'USER_AGENT_DATA': {
592
+ try {
593
+ const userAgentData = (0, utils_1.parseJsonAs)(metadata.payload);
594
+ if (userAgentData) {
595
+ if (this.operationSystem === undefined) {
596
+ this.operationSystem = {
597
+ name: userAgentData.os.name.toLowerCase(),
598
+ version: userAgentData.os.version,
599
+ };
600
+ }
601
+ if (this.engine === undefined) {
602
+ this.engine = {
603
+ name: userAgentData.engine.name.toLowerCase(),
604
+ version: userAgentData.engine.version,
605
+ };
606
+ }
607
+ if (this.browser === undefined) {
608
+ this.browser = {
609
+ name: userAgentData.browser.name.toLowerCase(),
610
+ version: userAgentData.browser.version,
611
+ };
612
+ }
613
+ }
614
+ }
615
+ catch (error) {
616
+ logger.warn('Failed to parse USER_AGENT_DATA metadata: %o', error);
617
+ }
618
+ }
453
619
  }
454
620
  this.call.observer.emit('client-metadata', this, metadata);
455
621
  }