@observertc/observer-js 1.0.1-c2558cc.0 → 1.0.1-c665f5a.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 (131) hide show
  1. package/README.md +535 -1
  2. package/lib/ObservedCall.d.ts +4 -2
  3. package/lib/ObservedCall.d.ts.map +1 -1
  4. package/lib/ObservedCall.js +37 -11
  5. package/lib/ObservedCallEventMonitor.d.ts +13 -13
  6. package/lib/ObservedCallEventMonitor.d.ts.map +1 -1
  7. package/lib/ObservedCallEventMonitor.js +1 -1
  8. package/lib/ObservedClient.d.ts +9 -9
  9. package/lib/ObservedClient.d.ts.map +1 -1
  10. package/lib/ObservedClient.js +104 -17
  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 +0 -1
  20. package/lib/Observer.d.ts.map +1 -1
  21. package/lib/Observer.js +9 -20
  22. package/lib/ObserverEventMonitor.d.ts +13 -13
  23. package/lib/ObserverEventMonitor.d.ts.map +1 -1
  24. package/lib/ObserverEventMonitor.js +1 -1
  25. package/lib/index.d.ts +17 -17
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/index.js +16 -16
  28. package/lib/mediasoup/ObservedMediasoupRouter.d.ts +7 -0
  29. package/lib/mediasoup/ObservedMediasoupRouter.d.ts.map +1 -0
  30. package/lib/mediasoup/ObservedMediasoupRouter.js +12 -0
  31. package/lib/schema/ClientEventTypes.d.ts +147 -79
  32. package/lib/schema/ClientEventTypes.d.ts.map +1 -1
  33. package/lib/schema/ClientEventTypes.js +5 -2
  34. package/lib/utils/MediasoupRemoteTrackResolver.d.ts +2 -2
  35. package/lib/utils/MediasoupRemoteTrackResolver.d.ts.map +1 -1
  36. package/lib/utils/RemoteTrackResolver.d.ts +2 -2
  37. package/lib/utils/RemoteTrackResolver.d.ts.map +1 -1
  38. package/lib/{ObservedCertificate.d.ts → webrtc/ObservedCertificate.d.ts} +1 -1
  39. package/lib/webrtc/ObservedCertificate.d.ts.map +1 -0
  40. package/lib/{ObservedCodec.d.ts → webrtc/ObservedCodec.d.ts} +1 -1
  41. package/lib/webrtc/ObservedCodec.d.ts.map +1 -0
  42. package/lib/{ObservedDataChannel.d.ts → webrtc/ObservedDataChannel.d.ts} +1 -1
  43. package/lib/webrtc/ObservedDataChannel.d.ts.map +1 -0
  44. package/lib/{ObservedIceCandidate.d.ts → webrtc/ObservedIceCandidate.d.ts} +1 -1
  45. package/lib/webrtc/ObservedIceCandidate.d.ts.map +1 -0
  46. package/lib/{ObservedIceCandidatePair.d.ts → webrtc/ObservedIceCandidatePair.d.ts} +1 -1
  47. package/lib/webrtc/ObservedIceCandidatePair.d.ts.map +1 -0
  48. package/lib/{ObservedIceTransport.d.ts → webrtc/ObservedIceTransport.d.ts} +1 -1
  49. package/lib/webrtc/ObservedIceTransport.d.ts.map +1 -0
  50. package/lib/{ObservedInboundRtp.d.ts → webrtc/ObservedInboundRtp.d.ts} +2 -2
  51. package/lib/webrtc/ObservedInboundRtp.d.ts.map +1 -0
  52. package/lib/{ObservedInboundTrack.d.ts → webrtc/ObservedInboundTrack.d.ts} +4 -4
  53. package/lib/webrtc/ObservedInboundTrack.d.ts.map +1 -0
  54. package/lib/{ObservedInboundTrack.js → webrtc/ObservedInboundTrack.js} +1 -1
  55. package/lib/{ObservedMediaPlayout.d.ts → webrtc/ObservedMediaPlayout.d.ts} +2 -2
  56. package/lib/webrtc/ObservedMediaPlayout.d.ts.map +1 -0
  57. package/lib/{ObservedMediaSource.d.ts → webrtc/ObservedMediaSource.d.ts} +2 -2
  58. package/lib/webrtc/ObservedMediaSource.d.ts.map +1 -0
  59. package/lib/{ObservedOutboundRtp.d.ts → webrtc/ObservedOutboundRtp.d.ts} +2 -2
  60. package/lib/webrtc/ObservedOutboundRtp.d.ts.map +1 -0
  61. package/lib/{ObservedOutboundTrack.d.ts → webrtc/ObservedOutboundTrack.d.ts} +4 -4
  62. package/lib/webrtc/ObservedOutboundTrack.d.ts.map +1 -0
  63. package/lib/{ObservedOutboundTrack.js → webrtc/ObservedOutboundTrack.js} +1 -1
  64. package/lib/{ObservedPeerConnection.d.ts → webrtc/ObservedPeerConnection.d.ts} +7 -4
  65. package/lib/webrtc/ObservedPeerConnection.d.ts.map +1 -0
  66. package/lib/{ObservedPeerConnection.js → webrtc/ObservedPeerConnection.js} +5 -2
  67. package/lib/{ObservedPeerConnectionTransport.d.ts → webrtc/ObservedPeerConnectionTransport.d.ts} +1 -1
  68. package/lib/webrtc/ObservedPeerConnectionTransport.d.ts.map +1 -0
  69. package/lib/{ObservedRemoteInboundRtp.d.ts → webrtc/ObservedRemoteInboundRtp.d.ts} +2 -2
  70. package/lib/webrtc/ObservedRemoteInboundRtp.d.ts.map +1 -0
  71. package/lib/{ObservedRemoteOutboundRtp.d.ts → webrtc/ObservedRemoteOutboundRtp.d.ts} +2 -2
  72. package/lib/webrtc/ObservedRemoteOutboundRtp.d.ts.map +1 -0
  73. package/package.json +1 -1
  74. package/src/ObservedCall.ts +39 -17
  75. package/src/ObservedCallEventMonitor.ts +14 -14
  76. package/src/ObservedClient.ts +116 -24
  77. package/src/ObservedClientEventMonitor.ts +59 -51
  78. package/src/ObservedTURN.ts +2 -1
  79. package/src/ObservedTurnServer.ts +2 -2
  80. package/src/Observer.ts +13 -24
  81. package/src/ObserverEventMonitor.ts +14 -14
  82. package/src/index.ts +17 -17
  83. package/src/mediasoup/ObservedMediasoupRouter.ts +12 -0
  84. package/src/schema/ClientEventTypes.ts +187 -83
  85. package/src/utils/MediasoupRemoteTrackResolver.ts +2 -2
  86. package/src/utils/RemoteTrackResolver.ts +2 -2
  87. package/src/{ObservedCertificate.ts → webrtc/ObservedCertificate.ts} +1 -1
  88. package/src/{ObservedCodec.ts → webrtc/ObservedCodec.ts} +1 -1
  89. package/src/{ObservedDataChannel.ts → webrtc/ObservedDataChannel.ts} +1 -1
  90. package/src/{ObservedIceCandidate.ts → webrtc/ObservedIceCandidate.ts} +1 -1
  91. package/src/{ObservedIceCandidatePair.ts → webrtc/ObservedIceCandidatePair.ts} +1 -1
  92. package/src/{ObservedIceTransport.ts → webrtc/ObservedIceTransport.ts} +1 -1
  93. package/src/{ObservedInboundRtp.ts → webrtc/ObservedInboundRtp.ts} +2 -2
  94. package/src/{ObservedInboundTrack.ts → webrtc/ObservedInboundTrack.ts} +4 -4
  95. package/src/{ObservedMediaPlayout.ts → webrtc/ObservedMediaPlayout.ts} +2 -2
  96. package/src/{ObservedMediaSource.ts → webrtc/ObservedMediaSource.ts} +2 -2
  97. package/src/{ObservedOutboundRtp.ts → webrtc/ObservedOutboundRtp.ts} +2 -2
  98. package/src/{ObservedOutboundTrack.ts → webrtc/ObservedOutboundTrack.ts} +4 -4
  99. package/src/{ObservedPeerConnection.ts → webrtc/ObservedPeerConnection.ts} +27 -7
  100. package/src/{ObservedPeerConnectionTransport.ts → webrtc/ObservedPeerConnectionTransport.ts} +1 -1
  101. package/src/{ObservedRemoteInboundRtp.ts → webrtc/ObservedRemoteInboundRtp.ts} +2 -2
  102. package/src/{ObservedRemoteOutboundRtp.ts → webrtc/ObservedRemoteOutboundRtp.ts} +2 -2
  103. package/lib/ObservedCertificate.d.ts.map +0 -1
  104. package/lib/ObservedCodec.d.ts.map +0 -1
  105. package/lib/ObservedDataChannel.d.ts.map +0 -1
  106. package/lib/ObservedIceCandidate.d.ts.map +0 -1
  107. package/lib/ObservedIceCandidatePair.d.ts.map +0 -1
  108. package/lib/ObservedIceTransport.d.ts.map +0 -1
  109. package/lib/ObservedInboundRtp.d.ts.map +0 -1
  110. package/lib/ObservedInboundTrack.d.ts.map +0 -1
  111. package/lib/ObservedMediaPlayout.d.ts.map +0 -1
  112. package/lib/ObservedMediaSource.d.ts.map +0 -1
  113. package/lib/ObservedOutboundRtp.d.ts.map +0 -1
  114. package/lib/ObservedOutboundTrack.d.ts.map +0 -1
  115. package/lib/ObservedPeerConnection.d.ts.map +0 -1
  116. package/lib/ObservedPeerConnectionTransport.d.ts.map +0 -1
  117. package/lib/ObservedRemoteInboundRtp.d.ts.map +0 -1
  118. package/lib/ObservedRemoteOutboundRtp.d.ts.map +0 -1
  119. /package/lib/{ObservedCertificate.js → webrtc/ObservedCertificate.js} +0 -0
  120. /package/lib/{ObservedCodec.js → webrtc/ObservedCodec.js} +0 -0
  121. /package/lib/{ObservedDataChannel.js → webrtc/ObservedDataChannel.js} +0 -0
  122. /package/lib/{ObservedIceCandidate.js → webrtc/ObservedIceCandidate.js} +0 -0
  123. /package/lib/{ObservedIceCandidatePair.js → webrtc/ObservedIceCandidatePair.js} +0 -0
  124. /package/lib/{ObservedIceTransport.js → webrtc/ObservedIceTransport.js} +0 -0
  125. /package/lib/{ObservedInboundRtp.js → webrtc/ObservedInboundRtp.js} +0 -0
  126. /package/lib/{ObservedMediaPlayout.js → webrtc/ObservedMediaPlayout.js} +0 -0
  127. /package/lib/{ObservedMediaSource.js → webrtc/ObservedMediaSource.js} +0 -0
  128. /package/lib/{ObservedOutboundRtp.js → webrtc/ObservedOutboundRtp.js} +0 -0
  129. /package/lib/{ObservedPeerConnectionTransport.js → webrtc/ObservedPeerConnectionTransport.js} +0 -0
  130. /package/lib/{ObservedRemoteInboundRtp.js → webrtc/ObservedRemoteInboundRtp.js} +0 -0
  131. /package/lib/{ObservedRemoteOutboundRtp.js → webrtc/ObservedRemoteOutboundRtp.js} +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;
@@ -52,8 +54,8 @@ class ObservedCall extends events_1.EventEmitter {
52
54
  startedAt;
53
55
  endedAt;
54
56
  closedAt;
55
- _callStartedEvent;
56
- _callEndedEvent;
57
+ maxIdleIfEmptyMs;
58
+ _autoCloseTimer;
57
59
  constructor(settings, observer) {
58
60
  super();
59
61
  this.observer = observer;
@@ -61,6 +63,7 @@ class ObservedCall extends events_1.EventEmitter {
61
63
  this.callId = settings.callId;
62
64
  this.appData = settings.appData ?? {};
63
65
  this.scoreCalculator = new DefaultCallScoreCalculator_1.DefaultCallScoreCalculator(this);
66
+ this.maxIdleIfEmptyMs = settings.maxIdleIfEmptyMs;
64
67
  this.detectors = new Detectors_1.Detectors();
65
68
  if (settings.updateIntervalInMs) {
66
69
  if (settings.updatePolicy !== 'update-on-interval') {
@@ -69,10 +72,10 @@ class ObservedCall extends events_1.EventEmitter {
69
72
  }
70
73
  switch (settings.updatePolicy) {
71
74
  case 'update-on-any-client-updated':
72
- this.updater = new OnAllClientCallUpdater_1.OnAllClientCallUpdater(this);
75
+ this.updater = new OnAnyClientCallUpdater_1.OnAnyClientCallUpdater(this);
73
76
  break;
74
77
  case 'update-when-all-client-updated':
75
- this.updater = new OnAnyClientCallUpdater_1.OnAnyClientCallUpdater(this);
78
+ this.updater = new OnAllClientCallUpdater_1.OnAllClientCallUpdater(this);
76
79
  break;
77
80
  case 'update-on-interval':
78
81
  if (!settings.updateIntervalInMs) {
@@ -85,12 +88,6 @@ class ObservedCall extends events_1.EventEmitter {
85
88
  case 'mediasoup-sfu':
86
89
  break;
87
90
  }
88
- this._callStartedEvent = {
89
- emitted: false,
90
- };
91
- this._callEndedEvent = {
92
- emitted: false,
93
- };
94
91
  }
95
92
  get numberOfClients() {
96
93
  return this.observedClients.size;
@@ -104,7 +101,19 @@ class ObservedCall extends events_1.EventEmitter {
104
101
  this.update(); // last update before closing
105
102
  this.closed = true;
106
103
  this.updater?.close();
107
- [...this.observedClients.values()].forEach((client) => client.close());
104
+ let minSampleTimestamps;
105
+ let maxSampleTimestamps;
106
+ for (const client of this.observedClients.values()) {
107
+ client.close();
108
+ if (client.joinedAt)
109
+ minSampleTimestamps = Math.min(minSampleTimestamps ?? client.joinedAt, client.joinedAt);
110
+ if (client.leftAt)
111
+ maxSampleTimestamps = Math.max(maxSampleTimestamps ?? client.leftAt, client.leftAt);
112
+ }
113
+ if (this.startedAt === undefined)
114
+ this.startedAt = minSampleTimestamps;
115
+ if (this.endedAt === undefined)
116
+ this.endedAt = maxSampleTimestamps;
108
117
  this.closedAt = Date.now();
109
118
  this.emit('close');
110
119
  }
@@ -130,6 +139,7 @@ class ObservedCall extends events_1.EventEmitter {
130
139
  this.observedClients.delete(settings.clientId);
131
140
  if (this.observedClients.size === 0) {
132
141
  this.emit('empty');
142
+ this._createAutoClose();
133
143
  }
134
144
  ++this.totalRemovedClients;
135
145
  });
@@ -142,6 +152,8 @@ class ObservedCall extends events_1.EventEmitter {
142
152
  this.emit('newclient', result);
143
153
  if (wasEmpty) {
144
154
  this.emit('not-empty');
155
+ clearTimeout(this._autoCloseTimer);
156
+ this._autoCloseTimer = undefined;
145
157
  }
146
158
  return result;
147
159
  }
@@ -203,5 +215,19 @@ class ObservedCall extends events_1.EventEmitter {
203
215
  return;
204
216
  this.endedAt = Math.max(this.endedAt ?? client.leftAt, client.leftAt);
205
217
  }
218
+ _createAutoClose() {
219
+ if (this.closed)
220
+ return;
221
+ if (this.maxIdleIfEmptyMs === undefined || this.maxIdleIfEmptyMs < 1)
222
+ return;
223
+ this._autoCloseTimer = setTimeout(() => {
224
+ if (this.closed)
225
+ return;
226
+ if (this.observedClients.size > 0)
227
+ return;
228
+ logger.debug(`Call ${this.callId} is empty for ${this.maxIdleIfEmptyMs}ms, closing...`);
229
+ this.close();
230
+ }, this.maxIdleIfEmptyMs);
231
+ }
206
232
  }
207
233
  exports.ObservedCall = ObservedCall;
@@ -1,18 +1,18 @@
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;
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedCallEventMonitor.d.ts","sourceRoot":"","sources":["../src/ObservedCallEventMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAwB,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE9G,qBAAa,wBAAwB,CAAC,OAAO;aAE3B,IAAI,EAAE,YAAY;aAClB,OAAO,EAAE,OAAO;gBADhB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,OAAO;IA2C1B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACzD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAE3D,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/D,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1F,gBAAgB,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACpG,sBAAsB,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/G,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,sBAAsB,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/F,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACvF,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACvF,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnF,qBAAqB,CAAC,EAAE,CAAC,cAAc,EAAE,sBAAsB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACvF,uBAAuB,CAAC,EAAE,CAAC,cAAc,EAAE,sBAAsB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACzF,8BAA8B,CAAC,EAAE,CAAC,cAAc,EAAE,sBAAsB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAChG,yBAAyB,CAAC,EAAE,CAAC,cAAc,EAAE,sBAAsB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3F,0BAA0B,CAAC,EAAE,CAAC,cAAc,EAAE,sBAAsB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5F,uBAAuB,CAAC,EAAE,CAAC,cAAc,EAAE,sBAAsB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzF,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9E,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEhF,mBAAmB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjF,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnF,oBAAoB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACpF,sBAAsB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEtF,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3E,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAE7E,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9E,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEhF,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9E,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEhF,mBAAmB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjF,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnF,mBAAmB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjF,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnF,uBAAuB,CAAC,EAAE,CAAC,aAAa,EAAE,wBAAwB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1F,yBAAyB,CAAC,EAAE,CAAC,aAAa,EAAE,wBAAwB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAE5F,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnE,mBAAmB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjF,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnF,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9E,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvF,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,cAAc;IA0CtB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,0BAA0B;IAwElC,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;CAGpB"}
1
+ {"version":3,"file":"ObservedCallEventMonitor.d.ts","sourceRoot":"","sources":["../src/ObservedCallEventMonitor.ts"],"names":[],"mappings":"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"}
@@ -117,7 +117,7 @@ class ObservedCallEventMonitor {
117
117
  const onClientExtensionStats = (extensionStats) => this._onClientExtensionStats(observedClient, extensionStats);
118
118
  const onUsingTurn = (usingTurn) => this._onUsingTurn(observedClient, usingTurn);
119
119
  const onUserMediaError = (error) => this._onUserMediaError(observedClient, error);
120
- const onClientUpdated = (...args) => this.onClientUpdated?.(observedClient, args[0].sample, this.context);
120
+ const onClientUpdated = (...args) => this.onClientUpdated?.(observedClient, args[0], this.context);
121
121
  const onClientEvent = (event) => this.onClientEvent?.(observedClient, event, this.context);
122
122
  observedClient.once('close', () => {
123
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,36 @@ 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
+ this._autoCloseTimer = setTimeout(() => {
137
+ if (this.closed)
138
+ return;
139
+ logger.debug(`Client ${this.clientId} is idle for ${this.settings.maxIdleTimeMs}ms, closing...`);
140
+ this.close();
141
+ }, this.settings.maxIdleTimeMs);
142
+ }
114
143
  accept(sample) {
115
144
  if (this.closed)
116
145
  throw new Error(`Client ${this.clientId} is closed`);
146
+ this._createAutoClose();
117
147
  const now = Date.now();
118
148
  const elapsedInMs = now - this.updated;
119
149
  const elapsedInSeconds = elapsedInMs / 1000;
@@ -248,11 +278,9 @@ class ObservedClient extends events_1.EventEmitter {
248
278
  this.currentAvgRttInMs = 0 < numberOfRttMeasurements ? sumOfRtts / numberOfRttMeasurements : undefined;
249
279
  this.calculatedScore.value = sample.score;
250
280
  this.detectors.update();
281
+ this.lastSampleTimestamp = sample.timestamp;
251
282
  // emit update
252
- this.emit('update', {
253
- sample,
254
- elapsedTimeInMs: now - this.updated,
255
- });
283
+ this.emit('update', sample, now - this.updated);
256
284
  this.updated = now;
257
285
  // if result changed after update
258
286
  if (this.calculatedScore.value) {
@@ -278,6 +306,7 @@ class ObservedClient extends events_1.EventEmitter {
278
306
  logger.warn(`Client ${this.clientId} joinedAt timestamp was updated to ${event.timestamp}. the joined event will not be emitted.`);
279
307
  }
280
308
  }
309
+ logger.debug('Client %s joined at %o', this.clientId, event);
281
310
  break;
282
311
  }
283
312
  case ClientEventTypes_1.ClientEventTypes.CLIENT_LEFT: {
@@ -290,6 +319,7 @@ class ObservedClient extends events_1.EventEmitter {
290
319
  logger.warn(`Client ${this.clientId} leftAt timestamp was already set`);
291
320
  }
292
321
  }
322
+ logger.debug('Client %s left at %o', this.clientId, event);
293
323
  break;
294
324
  }
295
325
  case ClientEventTypes_1.ClientEventTypes.PEER_CONNECTION_OPENED: {
@@ -303,7 +333,7 @@ class ObservedClient extends events_1.EventEmitter {
303
333
  postBuffer.push(event);
304
334
  }
305
335
  else {
306
- logger.warn('Received PEER_CONNECTION_OPENED event without a corresponding observedPeerConnection', event);
336
+ logger.warn('Received PEER_CONNECTION_OPENED event without a corresponding observedPeerConnection: %o', event);
307
337
  }
308
338
  }
309
339
  break;
@@ -319,7 +349,7 @@ class ObservedClient extends events_1.EventEmitter {
319
349
  postBuffer.push(event);
320
350
  }
321
351
  else {
322
- logger.warn('Received PEER_CONNECTION_CLOSED event without a corresponding observedPeerConnection', event);
352
+ logger.warn('Received PEER_CONNECTION_CLOSED event without a corresponding observedPeerConnection: %o', event);
323
353
  }
324
354
  }
325
355
  break;
@@ -336,7 +366,7 @@ class ObservedClient extends events_1.EventEmitter {
336
366
  postBuffer.push(event);
337
367
  }
338
368
  else {
339
- logger.warn('Received MEDIA_TRACK_ADDED event without a corresponding observedPeerConnection or observedTrack', event);
369
+ logger.warn('Received MEDIA_TRACK_ADDED event without a corresponding observedPeerConnection or observedTrack: %o', event);
340
370
  }
341
371
  }
342
372
  break;
@@ -353,7 +383,7 @@ class ObservedClient extends events_1.EventEmitter {
353
383
  postBuffer.push(event);
354
384
  }
355
385
  else {
356
- logger.warn('Received MEDIA_TRACK_REMOVED event without a corresponding observedPeerConnection or observedTrack', event);
386
+ logger.warn('Received MEDIA_TRACK_REMOVED event without a corresponding observedPeerConnection or observedTrack: %o', event);
357
387
  }
358
388
  }
359
389
  break;
@@ -370,7 +400,7 @@ class ObservedClient extends events_1.EventEmitter {
370
400
  postBuffer.push(event);
371
401
  }
372
402
  else {
373
- logger.warn('Received DATA_CHANNEL_OPENED event without a corresponding observedPeerConnection or observedDataChannel', event);
403
+ logger.warn('Received DATA_CHANNEL_OPENED event without a corresponding observedPeerConnection or observedDataChannel: %o', event);
374
404
  }
375
405
  }
376
406
  break;
@@ -387,7 +417,7 @@ class ObservedClient extends events_1.EventEmitter {
387
417
  postBuffer.push(event);
388
418
  }
389
419
  else {
390
- logger.warn('Received DATA_CHANNEL_CLOSE event without a corresponding observedPeerConnection or observedDataChannel', event);
420
+ logger.warn('Received DATA_CHANNEL_CLOSE event without a corresponding observedPeerConnection or observedDataChannel: %o', event);
391
421
  }
392
422
  }
393
423
  break;
@@ -412,7 +442,7 @@ class ObservedClient extends events_1.EventEmitter {
412
442
  postBuffer.push(event);
413
443
  }
414
444
  else {
415
- logger.warn('Received MEDIA_TRACK_MUTED event without a corresponding observedPeerConnection or observedTrack', event);
445
+ logger.warn('Received MEDIA_TRACK_MUTED event without a corresponding observedPeerConnection or observedTrack: %o', event);
416
446
  }
417
447
  }
418
448
  break;
@@ -437,7 +467,64 @@ class ObservedClient extends events_1.EventEmitter {
437
467
  postBuffer.push(event);
438
468
  }
439
469
  else {
440
- logger.warn('Received MEDIA_TRACK_UNMUTED event without a corresponding observedPeerConnection or observedTrack', event);
470
+ logger.warn('Received MEDIA_TRACK_UNMUTED event without a corresponding observedPeerConnection or observedTrack: %o', event);
471
+ }
472
+ }
473
+ break;
474
+ }
475
+ case ClientEventTypes_1.ClientEventTypes.ICE_CONNECTION_STATE_CHANGED: {
476
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
477
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.iceConnectionState && typeof payload.iceConnectionState === 'string') {
478
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
479
+ if (observedPeerConnection) {
480
+ observedPeerConnection.iceConnectionState = payload.iceConnectionState;
481
+ observedPeerConnection.emit('iceconnectionstatechange', {
482
+ state: payload.iceConnectionState,
483
+ });
484
+ }
485
+ else if (postBuffer) {
486
+ postBuffer.push(event);
487
+ }
488
+ else {
489
+ logger.warn('Received ICE_CONNECTION_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
490
+ }
491
+ }
492
+ break;
493
+ }
494
+ case ClientEventTypes_1.ClientEventTypes.ICE_GATHERING_STATE_CHANGED: {
495
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
496
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.iceGatheringState && typeof payload.iceGatheringState === 'string') {
497
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
498
+ if (observedPeerConnection) {
499
+ observedPeerConnection.iceGatheringState = payload.iceGatheringState;
500
+ observedPeerConnection.emit('icegatheringstatechange', {
501
+ state: payload.iceGatheringState,
502
+ });
503
+ }
504
+ else if (postBuffer) {
505
+ postBuffer.push(event);
506
+ }
507
+ else {
508
+ logger.warn('Received ICE_GATHERING_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
509
+ }
510
+ }
511
+ break;
512
+ }
513
+ case ClientEventTypes_1.ClientEventTypes.PEER_CONNECTION_STATE_CHANGED: {
514
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
515
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.peerConnectionState && typeof payload.peerConnectionState === 'string') {
516
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
517
+ if (observedPeerConnection) {
518
+ observedPeerConnection.connectionState = payload.peerConnectionState;
519
+ observedPeerConnection.emit('connectionstatechange', {
520
+ state: payload.peerConnectionState,
521
+ });
522
+ }
523
+ else if (postBuffer) {
524
+ postBuffer.push(event);
525
+ }
526
+ else {
527
+ logger.warn('Received PEER_CONNECTION_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
441
528
  }
442
529
  }
443
530
  break;