@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.
Files changed (166) hide show
  1. package/README.md +535 -1
  2. package/lib/ObservedCall.d.ts +8 -7
  3. package/lib/ObservedCall.d.ts.map +1 -1
  4. package/lib/ObservedCall.js +42 -38
  5. package/lib/ObservedCallEventMonitor.d.ts +104 -0
  6. package/lib/ObservedCallEventMonitor.d.ts.map +1 -0
  7. package/lib/ObservedCallEventMonitor.js +314 -0
  8. package/lib/ObservedClient.d.ts +20 -10
  9. package/lib/ObservedClient.d.ts.map +1 -1
  10. package/lib/ObservedClient.js +330 -13
  11. package/lib/ObservedClientEventMonitor.d.ts +91 -0
  12. package/lib/ObservedClientEventMonitor.d.ts.map +1 -0
  13. package/lib/ObservedClientEventMonitor.js +254 -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 +9 -6
  20. package/lib/Observer.d.ts.map +1 -1
  21. package/lib/Observer.js +26 -25
  22. package/lib/ObserverEventMonitor.d.ts +138 -0
  23. package/lib/ObserverEventMonitor.d.ts.map +1 -0
  24. package/lib/ObserverEventMonitor.js +433 -0
  25. package/lib/common/ObserverSummary.d.ts.map +1 -0
  26. package/lib/common/SummaryTypes.d.ts +75 -0
  27. package/lib/common/SummaryTypes.d.ts.map +1 -0
  28. package/lib/common/SummaryTypes.js +2 -0
  29. package/lib/index.d.ts +19 -17
  30. package/lib/index.d.ts.map +1 -1
  31. package/lib/index.js +21 -17
  32. package/lib/mediasoup/ObservedMediasoupRouter.d.ts +7 -0
  33. package/lib/mediasoup/ObservedMediasoupRouter.d.ts.map +1 -0
  34. package/lib/mediasoup/ObservedMediasoupRouter.js +12 -0
  35. package/lib/monitors/SummaryMonitor.d.ts +19 -0
  36. package/lib/monitors/SummaryMonitor.d.ts.map +1 -0
  37. package/lib/monitors/SummaryMonitor.js +129 -0
  38. package/lib/schema/ClientEventTypes.d.ts +147 -19
  39. package/lib/schema/ClientEventTypes.d.ts.map +1 -1
  40. package/lib/schema/ClientEventTypes.js +5 -2
  41. package/lib/schema/ClientSample.d.ts +1 -1
  42. package/lib/schema/ClientSample.d.ts.map +1 -1
  43. package/lib/updaters/{OnAllCallObserverUpdater_.d.ts → OnAllCallObserverUpdater.d.ts} +3 -1
  44. package/lib/updaters/OnAllCallObserverUpdater.d.ts.map +1 -0
  45. package/lib/updaters/{OnAllCallObserverUpdater_.js → OnAllCallObserverUpdater.js} +13 -1
  46. package/lib/updaters/OnAllClientCallUpdater.d.ts +2 -0
  47. package/lib/updaters/OnAllClientCallUpdater.d.ts.map +1 -1
  48. package/lib/updaters/OnAllClientCallUpdater.js +16 -0
  49. package/lib/updaters/{OnAnyCallObserverUpdater_.d.ts → OnAnyCallObserverUpdater.d.ts} +2 -1
  50. package/lib/updaters/OnAnyCallObserverUpdater.d.ts.map +1 -0
  51. package/lib/updaters/{OnAnyCallObserverUpdater_.js → OnAnyCallObserverUpdater.js} +11 -1
  52. package/lib/updaters/OnAnyClientCallUpdater.d.ts +1 -0
  53. package/lib/updaters/OnAnyClientCallUpdater.d.ts.map +1 -1
  54. package/lib/updaters/OnAnyClientCallUpdater.js +11 -2
  55. package/lib/utils/MediasoupRemoteTrackResolver.d.ts +25 -0
  56. package/lib/utils/MediasoupRemoteTrackResolver.d.ts.map +1 -0
  57. package/lib/utils/MediasoupRemoteTrackResolver.js +110 -0
  58. package/lib/utils/RemoteTrackResolver.d.ts +2 -2
  59. package/lib/utils/RemoteTrackResolver.d.ts.map +1 -1
  60. package/lib/{ObservedCertificate.d.ts → webrtc/ObservedCertificate.d.ts} +1 -1
  61. package/lib/webrtc/ObservedCertificate.d.ts.map +1 -0
  62. package/lib/{ObservedCodec.d.ts → webrtc/ObservedCodec.d.ts} +1 -1
  63. package/lib/webrtc/ObservedCodec.d.ts.map +1 -0
  64. package/lib/{ObservedDataChannel.d.ts → webrtc/ObservedDataChannel.d.ts} +3 -1
  65. package/lib/webrtc/ObservedDataChannel.d.ts.map +1 -0
  66. package/lib/{ObservedDataChannel.js → webrtc/ObservedDataChannel.js} +2 -0
  67. package/lib/{ObservedIceCandidate.d.ts → webrtc/ObservedIceCandidate.d.ts} +1 -1
  68. package/lib/webrtc/ObservedIceCandidate.d.ts.map +1 -0
  69. package/lib/{ObservedIceCandidatePair.d.ts → webrtc/ObservedIceCandidatePair.d.ts} +3 -2
  70. package/lib/webrtc/ObservedIceCandidatePair.d.ts.map +1 -0
  71. package/lib/{ObservedIceCandidatePair.js → webrtc/ObservedIceCandidatePair.js} +17 -1
  72. package/lib/{ObservedIceTransport.d.ts → webrtc/ObservedIceTransport.d.ts} +1 -1
  73. package/lib/webrtc/ObservedIceTransport.d.ts.map +1 -0
  74. package/lib/{ObservedInboundRtp.d.ts → webrtc/ObservedInboundRtp.d.ts} +2 -2
  75. package/lib/webrtc/ObservedInboundRtp.d.ts.map +1 -0
  76. package/lib/{ObservedInboundTrack.d.ts → webrtc/ObservedInboundTrack.d.ts} +7 -4
  77. package/lib/webrtc/ObservedInboundTrack.d.ts.map +1 -0
  78. package/lib/{ObservedInboundTrack.js → webrtc/ObservedInboundTrack.js} +4 -1
  79. package/lib/{ObservedMediaPlayout.d.ts → webrtc/ObservedMediaPlayout.d.ts} +2 -2
  80. package/lib/webrtc/ObservedMediaPlayout.d.ts.map +1 -0
  81. package/lib/{ObservedMediaSource.d.ts → webrtc/ObservedMediaSource.d.ts} +2 -2
  82. package/lib/webrtc/ObservedMediaSource.d.ts.map +1 -0
  83. package/lib/{ObservedOutboundRtp.d.ts → webrtc/ObservedOutboundRtp.d.ts} +2 -2
  84. package/lib/webrtc/ObservedOutboundRtp.d.ts.map +1 -0
  85. package/lib/{ObservedOutboundTrack.d.ts → webrtc/ObservedOutboundTrack.d.ts} +7 -4
  86. package/lib/webrtc/ObservedOutboundTrack.d.ts.map +1 -0
  87. package/lib/{ObservedOutboundTrack.js → webrtc/ObservedOutboundTrack.js} +4 -1
  88. package/lib/{ObservedPeerConnection.d.ts → webrtc/ObservedPeerConnection.d.ts} +26 -4
  89. package/lib/webrtc/ObservedPeerConnection.d.ts.map +1 -0
  90. package/lib/{ObservedPeerConnection.js → webrtc/ObservedPeerConnection.js} +82 -17
  91. package/lib/{ObservedPeerConnectionTransport.d.ts → webrtc/ObservedPeerConnectionTransport.d.ts} +1 -1
  92. package/lib/webrtc/ObservedPeerConnectionTransport.d.ts.map +1 -0
  93. package/lib/{ObservedRemoteInboundRtp.d.ts → webrtc/ObservedRemoteInboundRtp.d.ts} +2 -2
  94. package/lib/webrtc/ObservedRemoteInboundRtp.d.ts.map +1 -0
  95. package/lib/{ObservedRemoteOutboundRtp.d.ts → webrtc/ObservedRemoteOutboundRtp.d.ts} +2 -2
  96. package/lib/webrtc/ObservedRemoteOutboundRtp.d.ts.map +1 -0
  97. package/package.json +1 -1
  98. package/src/ObservedCall.ts +44 -48
  99. package/src/ObservedCallEventMonitor.ts +392 -0
  100. package/src/ObservedClient.ts +363 -22
  101. package/src/ObservedClientEventMonitor.ts +309 -0
  102. package/src/ObservedTURN.ts +2 -1
  103. package/src/ObservedTurnServer.ts +2 -2
  104. package/src/Observer.ts +37 -33
  105. package/src/ObserverEventMonitor.ts +551 -0
  106. package/src/common/SummaryTypes.ts +91 -0
  107. package/src/index.ts +19 -18
  108. package/src/mediasoup/ObservedMediasoupRouter.ts +12 -0
  109. package/src/monitors/SummaryMonitor.ts +181 -0
  110. package/src/schema/ClientEventTypes.ts +187 -19
  111. package/src/schema/ClientSample.ts +1 -1
  112. package/src/updaters/{OnAllCallObserverUpdater_.ts → OnAllCallObserverUpdater.ts} +14 -1
  113. package/src/updaters/OnAllClientCallUpdater.ts +15 -0
  114. package/src/updaters/{OnAnyCallObserverUpdater_.ts → OnAnyCallObserverUpdater.ts} +12 -3
  115. package/src/updaters/OnAnyClientCallUpdater.ts +9 -2
  116. package/src/utils/MediasoupRemoteTrackResolver.ts +155 -0
  117. package/src/utils/RemoteTrackResolver.ts +2 -2
  118. package/src/{ObservedCertificate.ts → webrtc/ObservedCertificate.ts} +1 -1
  119. package/src/{ObservedCodec.ts → webrtc/ObservedCodec.ts} +1 -1
  120. package/src/{ObservedDataChannel.ts → webrtc/ObservedDataChannel.ts} +4 -1
  121. package/src/{ObservedIceCandidate.ts → webrtc/ObservedIceCandidate.ts} +1 -1
  122. package/src/{ObservedIceCandidatePair.ts → webrtc/ObservedIceCandidatePair.ts} +19 -3
  123. package/src/{ObservedIceTransport.ts → webrtc/ObservedIceTransport.ts} +1 -1
  124. package/src/{ObservedInboundRtp.ts → webrtc/ObservedInboundRtp.ts} +2 -2
  125. package/src/{ObservedInboundTrack.ts → webrtc/ObservedInboundTrack.ts} +9 -4
  126. package/src/{ObservedMediaPlayout.ts → webrtc/ObservedMediaPlayout.ts} +2 -2
  127. package/src/{ObservedMediaSource.ts → webrtc/ObservedMediaSource.ts} +2 -2
  128. package/src/{ObservedOutboundRtp.ts → webrtc/ObservedOutboundRtp.ts} +2 -2
  129. package/src/{ObservedOutboundTrack.ts → webrtc/ObservedOutboundTrack.ts} +9 -4
  130. package/src/{ObservedPeerConnection.ts → webrtc/ObservedPeerConnection.ts} +124 -37
  131. package/src/{ObservedPeerConnectionTransport.ts → webrtc/ObservedPeerConnectionTransport.ts} +1 -1
  132. package/src/{ObservedRemoteInboundRtp.ts → webrtc/ObservedRemoteInboundRtp.ts} +2 -2
  133. package/src/{ObservedRemoteOutboundRtp.ts → webrtc/ObservedRemoteOutboundRtp.ts} +2 -2
  134. package/lib/ObservedCertificate.d.ts.map +0 -1
  135. package/lib/ObservedCodec.d.ts.map +0 -1
  136. package/lib/ObservedDataChannel.d.ts.map +0 -1
  137. package/lib/ObservedIceCandidate.d.ts.map +0 -1
  138. package/lib/ObservedIceCandidatePair.d.ts.map +0 -1
  139. package/lib/ObservedIceTransport.d.ts.map +0 -1
  140. package/lib/ObservedInboundRtp.d.ts.map +0 -1
  141. package/lib/ObservedInboundTrack.d.ts.map +0 -1
  142. package/lib/ObservedMediaPlayout.d.ts.map +0 -1
  143. package/lib/ObservedMediaSource.d.ts.map +0 -1
  144. package/lib/ObservedOutboundRtp.d.ts.map +0 -1
  145. package/lib/ObservedOutboundTrack.d.ts.map +0 -1
  146. package/lib/ObservedPeerConnection.d.ts.map +0 -1
  147. package/lib/ObservedPeerConnectionTransport.d.ts.map +0 -1
  148. package/lib/ObservedRemoteInboundRtp.d.ts.map +0 -1
  149. package/lib/ObservedRemoteOutboundRtp.d.ts.map +0 -1
  150. package/lib/ObserverSummary.d.ts.map +0 -1
  151. package/lib/updaters/OnAllCallObserverUpdater_.d.ts.map +0 -1
  152. package/lib/updaters/OnAnyCallObserverUpdater_.d.ts.map +0 -1
  153. /package/lib/{ObserverSummary.d.ts → common/ObserverSummary.d.ts} +0 -0
  154. /package/lib/{ObserverSummary.js → common/ObserverSummary.js} +0 -0
  155. /package/lib/{ObservedCertificate.js → webrtc/ObservedCertificate.js} +0 -0
  156. /package/lib/{ObservedCodec.js → webrtc/ObservedCodec.js} +0 -0
  157. /package/lib/{ObservedIceCandidate.js → webrtc/ObservedIceCandidate.js} +0 -0
  158. /package/lib/{ObservedIceTransport.js → webrtc/ObservedIceTransport.js} +0 -0
  159. /package/lib/{ObservedInboundRtp.js → webrtc/ObservedInboundRtp.js} +0 -0
  160. /package/lib/{ObservedMediaPlayout.js → webrtc/ObservedMediaPlayout.js} +0 -0
  161. /package/lib/{ObservedMediaSource.js → webrtc/ObservedMediaSource.js} +0 -0
  162. /package/lib/{ObservedOutboundRtp.js → webrtc/ObservedOutboundRtp.js} +0 -0
  163. /package/lib/{ObservedPeerConnectionTransport.js → webrtc/ObservedPeerConnectionTransport.js} +0 -0
  164. /package/lib/{ObservedRemoteInboundRtp.js → webrtc/ObservedRemoteInboundRtp.js} +0 -0
  165. /package/lib/{ObservedRemoteOutboundRtp.js → webrtc/ObservedRemoteOutboundRtp.js} +0 -0
  166. /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 './ObservedClient';
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 './scores/CalculatedScore';
21
- import { ObservedTurnServer } from './ObservedTurnServer';
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("./common/logger");
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("./common/utils");
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
- observedCertificate.update(stats);
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
- observedCodec.update(stats);
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
- observedDataChannel.update(stats);
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
- observedIceCandidate.update(stats);
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
- observedIceCandidatePair.update(stats);
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
- observedIceTransport.update(stats);
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
- observedInboundRtp.update(stats);
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
- observedInboundTrack.update(stats);
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
- observedMediaPlayout.update(stats);
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
- observedMediaSource.update(stats);
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
- observedOutboundRtp.update(stats);
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
- observedOutboundTrack.update(stats);
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
- observedPeerConnectionTransport.update(stats);
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
- observedRemoteInboundRtp.update(stats);
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
- observedRemoteOutboundRtp.update(stats);
766
+ else {
767
+ observedRemoteOutboundRtp.update(stats);
768
+ }
769
+ this.emit('updated-remote-outbound-rtp', observedRemoteOutboundRtp);
705
770
  return observedRemoteOutboundRtp;
706
771
  }
707
772
  }
@@ -1,5 +1,5 @@
1
1
  import { ObservedPeerConnection } from './ObservedPeerConnection';
2
- import { PeerConnectionTransportStats } from './schema/ClientSample';
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 './common/types';
1
+ import { MediaKind } from '../common/types';
2
2
  import { ObservedPeerConnection } from './ObservedPeerConnection';
3
- import { RemoteInboundRtpStats } from './schema/ClientSample';
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 './common/types';
1
+ import { MediaKind } from '../common/types';
2
2
  import { ObservedPeerConnection } from './ObservedPeerConnection';
3
- import { RemoteOutboundRtpStats } from './schema/ClientSample';
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@observertc/observer-js",
3
- "version": "1.0.1-9d3744d.0",
3
+ "version": "1.0.1-a6fb9d3.0",
4
4
  "description": "Server Side NodeJS Library for processing ObserveRTC Samples",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -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 ended?: number;
90
+ public endedAt?: number;
91
+ public closedAt?: number;
88
92
 
89
- private _callStartedEvent: {
90
- emitted: boolean,
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 OnAllClientCallUpdater(this);
116
+ this.updater = new OnAnyClientCallUpdater(this);
117
117
  break;
118
118
  case 'update-when-all-client-updated':
119
- this.updater = new OnAnyClientCallUpdater(this);
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
- [ ...this.observedClients.values() ].forEach((client) => client.close());
161
- // make sure to emit the events
162
- this.emitCallStartedEvent();
163
- this.emitCallEndedEvent();
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.ended = Math.max(this.ended ?? client.leftAt, client.leftAt);
287
+ this.endedAt = Math.max(this.endedAt ?? client.leftAt, client.leftAt);
289
288
  }
290
289
 
291
- public emitCallStartedEvent() {
292
- if (this._callStartedEvent.emitted) return;
293
- this._callStartedEvent.emitted = true;
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
- public emitCallEndedEvent() {
301
- if (this._callEndedEvent.emitted) return;
302
- this._callEndedEvent.emitted = true;
294
+ this._autoCloseTimer = setTimeout(() => {
295
+ if (this.closed) return;
296
+ if (this.observedClients.size > 0) return;
303
297
 
304
- this.emit('ended');
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() {