@observertc/observer-js 0.40.3-beta → 0.40.5-beta

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 (56) hide show
  1. package/lib/CallSummary.d.ts +2 -9
  2. package/lib/CallSummary.d.ts.map +1 -1
  3. package/lib/ObservedCall.d.ts +2 -0
  4. package/lib/ObservedCall.d.ts.map +1 -1
  5. package/lib/ObservedCall.js +8 -0
  6. package/lib/ObservedClient.d.ts +20 -2
  7. package/lib/ObservedClient.d.ts.map +1 -1
  8. package/lib/ObservedClient.js +57 -18
  9. package/lib/ObservedDataChannel.d.ts +1 -0
  10. package/lib/ObservedDataChannel.d.ts.map +1 -1
  11. package/lib/ObservedDataChannel.js +1 -1
  12. package/lib/ObservedICE.d.ts +1 -0
  13. package/lib/ObservedICE.d.ts.map +1 -1
  14. package/lib/ObservedICE.js +1 -1
  15. package/lib/ObservedInboundTrack.d.ts +1 -0
  16. package/lib/ObservedInboundTrack.d.ts.map +1 -1
  17. package/lib/ObservedInboundTrack.js +1 -1
  18. package/lib/ObservedOutboundTrack.d.ts +1 -0
  19. package/lib/ObservedOutboundTrack.d.ts.map +1 -1
  20. package/lib/ObservedOutboundTrack.js +2 -1
  21. package/lib/ObservedPeerConnection.d.ts +6 -3
  22. package/lib/ObservedPeerConnection.d.ts.map +1 -1
  23. package/lib/ObservedPeerConnection.js +51 -42
  24. package/lib/ObservedSfu.d.ts +12 -0
  25. package/lib/ObservedSfu.d.ts.map +1 -1
  26. package/lib/ObservedSfu.js +76 -0
  27. package/lib/ObservedSfuInboundRtpPad.d.ts +38 -0
  28. package/lib/ObservedSfuInboundRtpPad.d.ts.map +1 -0
  29. package/lib/ObservedSfuInboundRtpPad.js +67 -0
  30. package/lib/ObservedSfuOutboundRtpPad.d.ts +38 -0
  31. package/lib/ObservedSfuOutboundRtpPad.d.ts.map +1 -0
  32. package/lib/ObservedSfuOutboundRtpPad.js +68 -0
  33. package/lib/ObservedSfuSctpChannel.d.ts +38 -0
  34. package/lib/ObservedSfuSctpChannel.d.ts.map +1 -0
  35. package/lib/ObservedSfuSctpChannel.js +53 -0
  36. package/lib/ObservedSfuTransport.d.ts +54 -0
  37. package/lib/ObservedSfuTransport.d.ts.map +1 -0
  38. package/lib/ObservedSfuTransport.js +116 -0
  39. package/lib/Observer.d.ts +5 -0
  40. package/lib/Observer.d.ts.map +1 -1
  41. package/lib/Observer.js +21 -0
  42. package/package.json +1 -1
  43. package/src/CallSummary.ts +2 -10
  44. package/src/ObservedCall.ts +9 -0
  45. package/src/ObservedClient.ts +71 -21
  46. package/src/ObservedDataChannel.ts +2 -0
  47. package/src/ObservedICE.ts +3 -0
  48. package/src/ObservedInboundTrack.ts +2 -0
  49. package/src/ObservedOutboundTrack.ts +3 -0
  50. package/src/ObservedPeerConnection.ts +56 -45
  51. package/src/ObservedSfu.ts +118 -2
  52. package/src/ObservedSfuInboundRtpPad.ts +100 -0
  53. package/src/ObservedSfuOutboundRtpPad.ts +101 -0
  54. package/src/ObservedSfuSctpChannel.ts +97 -0
  55. package/src/ObservedSfuTransport.ts +179 -0
  56. package/src/Observer.ts +31 -1
@@ -25,9 +25,9 @@ class ObservedPeerConnection extends events_1.EventEmitter {
25
25
  this.totalReceivedVideoPackets = 0;
26
26
  this.totalReceivedAudioBytes = 0;
27
27
  this.totalReceivedVideoBytes = 0;
28
- this.deltaInboundLostPackets = 0;
29
- this.deltaInboundReceivedPackets = 0;
30
- this.deltaOutboundSentPackets = 0;
28
+ this.deltaInboundPacketsLost = 0;
29
+ this.deltaInboundPacketsReceived = 0;
30
+ this.deltaOutboundPacketsSent = 0;
31
31
  this.deltaDataChannelBytesSent = 0;
32
32
  this.deltaDataChannelBytesReceived = 0;
33
33
  this.deltaInboundReceivedBytes = 0;
@@ -116,6 +116,18 @@ class ObservedPeerConnection extends events_1.EventEmitter {
116
116
  get uptimeInMs() {
117
117
  return this._updated - this.created;
118
118
  }
119
+ get marker() {
120
+ return this._marker;
121
+ }
122
+ set marker(value) {
123
+ this._marker = value;
124
+ this._inboundAudioTracks.forEach((track) => (track.marker = value));
125
+ this._inboundVideoTracks.forEach((track) => (track.marker = value));
126
+ this._outboundAudioTracks.forEach((track) => (track.marker = value));
127
+ this._outboundVideoTracks.forEach((track) => (track.marker = value));
128
+ this._dataChannels.forEach((channel) => (channel.marker = value));
129
+ this.ICE.marker = value;
130
+ }
119
131
  get closed() {
120
132
  return this._closed;
121
133
  }
@@ -134,9 +146,9 @@ class ObservedPeerConnection extends events_1.EventEmitter {
134
146
  return (_c = (_b = (_a = this._inboundAudioTracks.get(trackId)) !== null && _a !== void 0 ? _a : this._inboundVideoTracks.get(trackId)) !== null && _b !== void 0 ? _b : this._outboundAudioTracks.get(trackId)) !== null && _c !== void 0 ? _c : this._outboundVideoTracks.get(trackId);
135
147
  }
136
148
  resetMetrics() {
137
- this.deltaInboundLostPackets = 0;
138
- this.deltaInboundReceivedPackets = 0;
139
- this.deltaOutboundSentPackets = 0;
149
+ this.deltaInboundPacketsLost = 0;
150
+ this.deltaInboundPacketsReceived = 0;
151
+ this.deltaOutboundPacketsSent = 0;
140
152
  this.deltaDataChannelBytesSent = 0;
141
153
  this.deltaDataChannelBytesReceived = 0;
142
154
  this.deltaReceivedAudioBytes = 0;
@@ -149,78 +161,62 @@ class ObservedPeerConnection extends events_1.EventEmitter {
149
161
  this._outboundVideoTracks.forEach((track) => track.resetMetrics());
150
162
  }
151
163
  updateMetrics() {
164
+ // this.totalInboundPacketsLost = 0;
165
+ // this.totalInboundPacketsReceived = 0;
166
+ // this.totalOutboundPacketsSent = 0;
167
+ // this.totalDataChannelBytesSent = 0;
168
+ // this.totalDataChannelBytesReceived = 0;
152
169
  var _a;
153
- this.totalInboundPacketsLost = 0;
154
- this.totalInboundPacketsReceived = 0;
155
- this.totalOutboundPacketsSent = 0;
156
- this.totalDataChannelBytesSent = 0;
157
- this.totalDataChannelBytesReceived = 0;
158
- this.totalSentAudioBytes = 0;
159
- this.totalSentVideoBytes = 0;
160
- this.totalReceivedAudioBytes = 0;
161
- this.totalReceivedVideoBytes = 0;
162
- this.sendingAudioBitrate = 0;
163
- this.sendingVideoBitrate = 0;
164
- this.receivingAudioBitrate = 0;
165
- this.receivingVideoBitrate = 0;
170
+ // this.totalSentAudioBytes = 0;
171
+ // this.totalSentVideoBytes = 0;
172
+ // this.totalReceivedAudioBytes = 0;
173
+ // this.totalReceivedVideoBytes = 0;
174
+ // this.sendingAudioBitrate = 0;
175
+ // this.sendingVideoBitrate = 0;
176
+ // this.receivingAudioBitrate = 0;
177
+ // this.receivingVideoBitrate = 0;
166
178
  let sumRttInMs = 0;
167
179
  this._inboundAudioTracks.forEach((track) => {
168
180
  var _a;
169
- this.deltaInboundLostPackets += track.deltaLostPackets;
170
- this.deltaInboundReceivedPackets += track.deltaReceivedPackets;
181
+ this.deltaInboundPacketsLost += track.deltaLostPackets;
182
+ this.deltaInboundPacketsReceived += track.deltaReceivedPackets;
171
183
  this.deltaInboundReceivedBytes += track.deltaBytesReceived;
172
184
  this.deltaReceivedAudioBytes += track.deltaBytesReceived;
173
185
  this.deltaReceivedAudioPackets += track.deltaReceivedPackets;
174
186
  this.receivingAudioBitrate += track.bitrate;
175
- this.totalInboundPacketsLost += track.totalLostPackets;
176
- this.totalInboundPacketsReceived += track.totalReceivedPackets;
177
- this.totalReceivedAudioBytes += track.totalBytesReceived;
178
- this.totalReceivedAudioPacktes += track.totalReceivedPackets;
179
187
  sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
180
188
  });
181
189
  this._inboundVideoTracks.forEach((track) => {
182
190
  var _a;
183
- this.deltaInboundLostPackets += track.deltaLostPackets;
184
- this.deltaInboundReceivedPackets += track.deltaReceivedPackets;
191
+ this.deltaInboundPacketsLost += track.deltaLostPackets;
192
+ this.deltaInboundPacketsReceived += track.deltaReceivedPackets;
185
193
  this.deltaInboundReceivedBytes += track.deltaBytesReceived;
186
194
  this.deltaReceivedVideoBytes += track.deltaBytesReceived;
187
195
  this.deltaReceivedVideoPackets += track.deltaReceivedPackets;
188
196
  this.receivingVideoBitrate += track.bitrate;
189
- this.totalInboundPacketsLost += track.totalLostPackets;
190
- this.totalInboundPacketsReceived += track.totalReceivedPackets;
191
- this.totalReceivedVideoBytes += track.totalBytesReceived;
192
- this.totalReceivedVideoPackets += track.totalReceivedPackets;
193
197
  sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
194
198
  });
195
199
  this._outboundAudioTracks.forEach((track) => {
196
200
  var _a;
197
- this.deltaOutboundSentPackets += track.deltaSentPackets;
201
+ this.deltaOutboundPacketsSent += track.deltaSentPackets;
198
202
  this.deltaOutboundSentBytes += track.deltaSentBytes;
199
203
  this.deltaSentAudioBytes += track.deltaSentBytes;
200
204
  this.deltaSentAudioBytes += track.deltaSentPackets;
201
205
  this.sendingAudioBitrate += track.bitrate;
202
- this.totalOutboundPacketsSent += track.totalSentPackets;
203
- this.totalSentAudioBytes += track.totalSentBytes;
204
- this.totalSentAudioPackets += track.totalSentPackets;
205
206
  sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
206
207
  });
207
208
  this._outboundVideoTracks.forEach((track) => {
208
209
  var _a;
209
- this.deltaOutboundSentPackets += track.deltaSentPackets;
210
+ this.deltaOutboundPacketsSent += track.deltaSentPackets;
210
211
  this.deltaOutboundSentBytes += track.deltaSentBytes;
211
212
  this.deltaSentVideoBytes += track.deltaSentBytes;
212
213
  this.deltaSentVideoBytes += track.deltaSentPackets;
213
214
  this.sendingVideoBitrate += track.bitrate;
214
- this.totalOutboundPacketsSent += track.totalSentPackets;
215
- this.totalSentVideoBytes += track.totalSentBytes;
216
- this.totalSentVideoPackets += track.totalSentPackets;
217
215
  sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
218
216
  });
219
217
  this._dataChannels.forEach((channel) => {
220
218
  this.deltaDataChannelBytesSent += channel.deltaBytesSent;
221
219
  this.deltaDataChannelBytesReceived += channel.deltaBytesReceived;
222
- this.totalDataChannelBytesSent += channel.totalBytesSent;
223
- this.totalDataChannelBytesReceived += channel.totalBytesReceived;
224
220
  });
225
221
  const iceRttInMs = (_a = this.ICE.stats) === null || _a === void 0 ? void 0 : _a.currentRoundTripTime;
226
222
  let nrOfBelongings = this._inboundAudioTracks.size + this._inboundVideoTracks.size + this._outboundAudioTracks.size + this._outboundVideoTracks.size;
@@ -229,6 +225,19 @@ class ObservedPeerConnection extends events_1.EventEmitter {
229
225
  nrOfBelongings += 1;
230
226
  }
231
227
  this.avgRttInMs = 0 < nrOfBelongings ? sumRttInMs / nrOfBelongings : undefined;
228
+ this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
229
+ this.totalDataChannelBytesSent += this.deltaDataChannelBytesSent;
230
+ this.totalInboundPacketsLost += this.deltaInboundPacketsLost;
231
+ this.totalInboundPacketsReceived += this.deltaInboundPacketsReceived;
232
+ this.totalOutboundPacketsSent += this.deltaOutboundPacketsSent;
233
+ this.totalSentAudioBytes += this.deltaSentAudioBytes;
234
+ this.totalSentVideoBytes += this.deltaSentVideoBytes;
235
+ this.totalReceivedAudioBytes += this.deltaReceivedAudioBytes;
236
+ this.totalReceivedVideoBytes += this.deltaReceivedVideoBytes;
237
+ this.totalReceivedAudioPacktes += this.deltaReceivedAudioPackets;
238
+ this.totalReceivedVideoPackets += this.deltaReceivedVideoPackets;
239
+ this.totalSentAudioPackets += this.deltaSentAudioBytes;
240
+ this.totalSentVideoPackets += this.deltaSentVideoBytes;
232
241
  }
233
242
  update(sample, timestamp) {
234
243
  if (this._closed)
@@ -239,7 +248,7 @@ class ObservedPeerConnection extends events_1.EventEmitter {
239
248
  if (this._model.label !== sample.label) {
240
249
  this._model.label = sample.label;
241
250
  }
242
- const report = Object.assign(Object.assign({ serviceId: this.client.call.serviceId, roomId: this.client.call.roomId, callId: this.client.call.callId, clientId: this.client.clientId, userId: this.client.userId, mediaUnitId: this.client.mediaUnitId }, sample), { timestamp, sampleSeq: -1 });
251
+ const report = Object.assign(Object.assign({ serviceId: this.client.call.serviceId, roomId: this.client.call.roomId, callId: this.client.call.callId, clientId: this.client.clientId, userId: this.client.userId, mediaUnitId: this.client.mediaUnitId }, sample), { timestamp, sampleSeq: -1, marker: this.marker });
243
252
  this.reports.addPeerConnectionTransportReports(report);
244
253
  this._updated = Date.now();
245
254
  this.emit('update');
@@ -2,14 +2,17 @@
2
2
  import { EventEmitter } from 'events';
3
3
  import { Observer } from './Observer';
4
4
  import { SfuSample } from '@observertc/sample-schemas-js';
5
+ import { ObservedSfuTransport } from './ObservedSfuTransport';
5
6
  export type ObservedSfuModel = {
6
7
  serviceId: string;
8
+ mediaUnitId: string;
7
9
  sfuId: string;
8
10
  joined?: number;
9
11
  };
10
12
  export type ObservedSfuEvents = {
11
13
  update: [];
12
14
  close: [];
15
+ newtransport: [ObservedSfuTransport];
13
16
  };
14
17
  export declare interface ObservedSfu<AppData extends Record<string, unknown> = Record<string, unknown>> {
15
18
  on<U extends keyof ObservedSfuEvents>(event: U, listener: (...args: ObservedSfuEvents[U]) => void): this;
@@ -26,12 +29,21 @@ export declare class ObservedSfu<AppData extends Record<string, unknown> = Recor
26
29
  readonly created: number;
27
30
  private _updated;
28
31
  private _closed;
32
+ private _marker?;
33
+ private _timeZoneOffsetInHours?;
34
+ private _left?;
35
+ private readonly _transports;
29
36
  constructor(_model: ObservedSfuModel, observer: Observer, appData: AppData);
37
+ get marker(): string | undefined;
38
+ get reports(): import("./ReportsCollector").ReportsCollector;
30
39
  get serviceId(): string;
40
+ get mediaUnitId(): string;
31
41
  get sfuId(): string;
32
42
  get joined(): number;
43
+ get transports(): ReadonlyMap<string, ObservedSfuTransport>;
33
44
  get updated(): number;
34
45
  get closed(): boolean;
35
46
  close(): void;
47
+ private _createTransport;
36
48
  }
37
49
  //# sourceMappingURL=ObservedSfu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedSfu.d.ts","sourceRoot":"","sources":["../src/ObservedSfu.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAE;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,WAAW,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrG,EAAE,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACzG,GAAG,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1G,IAAI,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3G,IAAI,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAE1F,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAChC;AAED,qBAAa,WAAW,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,YAAY;IAO9G,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,QAAQ,EAAE,QAAQ;aAClB,OAAO,EAAE,OAAO;IARjC,SAAgB,OAAO,SAAc;IAErC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAGN,MAAM,EAAE,gBAAgB,EACzB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO;IAMjC,IAAW,SAAS,WAGnB;IAED,IAAW,KAAK,WAGf;IAED,IAAW,MAAM,WAGhB;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK;CAaZ"}
1
+ {"version":3,"file":"ObservedSfu.d.ts","sourceRoot":"","sources":["../src/ObservedSfu.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAA6B,MAAM,wBAAwB,CAAC;AAGzF,MAAM,MAAM,gBAAgB,GAAE;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;IACV,YAAY,EAAE,CAAC,oBAAoB,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,WAAW,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrG,EAAE,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACzG,GAAG,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1G,IAAI,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3G,IAAI,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAE1F,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAChC;AAED,qBAAa,WAAW,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,YAAY;IAY9G,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,QAAQ,EAAE,QAAQ;aAClB,OAAO,EAAE,OAAO;IAbjC,SAAgB,OAAO,SAAc;IAErC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,sBAAsB,CAAC,CAAS;IACxC,OAAO,CAAC,KAAK,CAAC,CAAS;IAEvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2C;gBAGrD,MAAM,EAAE,gBAAgB,EACzB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO;IAMjC,IAAW,MAAM,uBAEhB;IAED,IAAW,OAAO,kDAEjB;IAED,IAAW,SAAS,WAGnB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,KAAK,WAGf;IAED,IAAW,MAAM,WAGhB;IAED,IAAW,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAEjE;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK;IA4FZ,OAAO,CAAC,gBAAgB;CAYxB"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ObservedSfu = void 0;
4
4
  const events_1 = require("events");
5
+ const ObservedSfuTransport_1 = require("./ObservedSfuTransport");
5
6
  class ObservedSfu extends events_1.EventEmitter {
6
7
  constructor(_model, observer, appData) {
7
8
  super();
@@ -11,12 +12,22 @@ class ObservedSfu extends events_1.EventEmitter {
11
12
  this.created = Date.now();
12
13
  this._updated = Date.now();
13
14
  this._closed = false;
15
+ this._transports = new Map();
14
16
  this.setMaxListeners(Infinity);
15
17
  }
18
+ get marker() {
19
+ return this._marker;
20
+ }
21
+ get reports() {
22
+ return this.observer.reports;
23
+ }
16
24
  get serviceId() {
17
25
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
18
26
  return this._model.serviceId;
19
27
  }
28
+ get mediaUnitId() {
29
+ return this._model.mediaUnitId;
30
+ }
20
31
  get sfuId() {
21
32
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
22
33
  return this._model.sfuId;
@@ -25,6 +36,9 @@ class ObservedSfu extends events_1.EventEmitter {
25
36
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
26
37
  return Number(this._model.joined);
27
38
  }
39
+ get transports() {
40
+ return this._transports;
41
+ }
28
42
  get updated() {
29
43
  return this._updated;
30
44
  }
@@ -35,15 +49,77 @@ class ObservedSfu extends events_1.EventEmitter {
35
49
  if (this._closed)
36
50
  return;
37
51
  this._closed = true;
52
+ [...this._transports.values()].forEach((transport) => transport.close());
38
53
  this.emit('close');
39
54
  }
40
55
  update(sample) {
56
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
41
57
  if (this._closed)
42
58
  throw new Error(`Sfu ${this.sfuId} is closed`);
43
59
  if (sample.sfuId !== this.sfuId)
44
60
  throw new Error(`Sfu ${this.sfuId} is not the same as sample.sfuId`);
61
+ if (!this._timeZoneOffsetInHours && sample.timeZoneOffsetInHours) {
62
+ this._timeZoneOffsetInHours = sample.timeZoneOffsetInHours;
63
+ }
64
+ for (const customSfuEvents of (_a = sample.customSfuEvents) !== null && _a !== void 0 ? _a : []) {
65
+ const report = Object.assign(Object.assign({ serviceId: this.serviceId, mediaUnitId: this.mediaUnitId, sfuId: this.sfuId }, customSfuEvents), { timestamp: sample.timestamp, marker: this._marker });
66
+ this.reports.addSfuEventReport(report);
67
+ }
68
+ for (const extensionStats of (_b = sample.extensionStats) !== null && _b !== void 0 ? _b : []) {
69
+ const report = {
70
+ serviceId: this.serviceId,
71
+ mediaUnitId: this.mediaUnitId,
72
+ sfuId: this.sfuId,
73
+ extensionType: extensionStats.type,
74
+ payload: extensionStats.payload,
75
+ timestamp: sample.timestamp,
76
+ };
77
+ this.reports.addSfuExtensionReport(report);
78
+ }
79
+ for (const transport of (_c = sample.transports) !== null && _c !== void 0 ? _c : []) {
80
+ const observedSfuTransport = (_d = this._transports.get(transport.transportId)) !== null && _d !== void 0 ? _d : this._createTransport({
81
+ sfuTransportId: transport.transportId,
82
+ });
83
+ observedSfuTransport.update(transport, sample.timestamp);
84
+ }
85
+ for (const inboundRtpPad of (_e = sample.inboundRtpPads) !== null && _e !== void 0 ? _e : []) {
86
+ const transport = (_f = this._transports.get(inboundRtpPad.transportId)) !== null && _f !== void 0 ? _f : this._createTransport({
87
+ sfuTransportId: inboundRtpPad.transportId,
88
+ });
89
+ const observedSfuInboundRtpPad = (_g = transport.inboundRtpPads.get(inboundRtpPad.padId)) !== null && _g !== void 0 ? _g : transport.createSfuInboundRtpPad({
90
+ sfuInboundRtpPadId: inboundRtpPad.padId,
91
+ });
92
+ observedSfuInboundRtpPad.update(inboundRtpPad, sample.timestamp);
93
+ }
94
+ for (const outboundRtpPad of (_h = sample.outboundRtpPads) !== null && _h !== void 0 ? _h : []) {
95
+ const transport = (_j = this._transports.get(outboundRtpPad.transportId)) !== null && _j !== void 0 ? _j : this._createTransport({
96
+ sfuTransportId: outboundRtpPad.transportId,
97
+ });
98
+ const observedSfuOutboundRtpPad = (_k = transport.outboundRtpPads.get(outboundRtpPad.padId)) !== null && _k !== void 0 ? _k : transport.createSfuOutboundRtpPad({
99
+ sfuOutboundRtpPadId: outboundRtpPad.padId,
100
+ });
101
+ observedSfuOutboundRtpPad.update(outboundRtpPad, sample.timestamp);
102
+ }
103
+ for (const sctpChannel of (_l = sample.sctpChannels) !== null && _l !== void 0 ? _l : []) {
104
+ const transport = (_m = this._transports.get(sctpChannel.transportId)) !== null && _m !== void 0 ? _m : this._createTransport({
105
+ sfuTransportId: sctpChannel.transportId,
106
+ });
107
+ const observedSfuSctpChannel = (_o = transport.sctpChannels.get(sctpChannel.channelId)) !== null && _o !== void 0 ? _o : transport.createSfuSctpChannel({
108
+ sfuSctpChannelId: sctpChannel.channelId,
109
+ });
110
+ observedSfuSctpChannel.update(sctpChannel, sample.timestamp);
111
+ }
45
112
  this._updated = Date.now();
46
113
  this.emit('update');
47
114
  }
115
+ _createTransport(model) {
116
+ const result = new ObservedSfuTransport_1.ObservedSfuTransport(model, this);
117
+ result.once('close', () => {
118
+ this._transports.delete(model.sfuTransportId);
119
+ });
120
+ this._transports.set(model.sfuTransportId, result);
121
+ this.emit('newtransport', result);
122
+ return result;
123
+ }
48
124
  }
49
125
  exports.ObservedSfu = ObservedSfu;
@@ -0,0 +1,38 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from 'events';
3
+ import { SfuInboundRtpPad } from '@observertc/sample-schemas-js';
4
+ import { ObservedSfuTransport } from './ObservedSfuTransport';
5
+ export type ObservedSfuInboundRtpPadModel = {
6
+ sfuInboundRtpPadId: string;
7
+ };
8
+ export type ObservedSfuInboundRtpPadEvents = {
9
+ update: [];
10
+ close: [];
11
+ };
12
+ export declare interface ObservedSfuInboundRtpPad {
13
+ on<U extends keyof ObservedSfuInboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuInboundRtpPadEvents[U]) => void): this;
14
+ off<U extends keyof ObservedSfuInboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuInboundRtpPadEvents[U]) => void): this;
15
+ once<U extends keyof ObservedSfuInboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuInboundRtpPadEvents[U]) => void): this;
16
+ emit<U extends keyof ObservedSfuInboundRtpPadEvents>(event: U, ...args: ObservedSfuInboundRtpPadEvents[U]): boolean;
17
+ update(sample: SfuInboundRtpPad, timestamp: number): void;
18
+ }
19
+ export declare class ObservedSfuInboundRtpPad extends EventEmitter {
20
+ private readonly _model;
21
+ readonly transport: ObservedSfuTransport;
22
+ readonly created: number;
23
+ stats?: SfuInboundRtpPad;
24
+ marker?: string;
25
+ private _updated;
26
+ private _closed;
27
+ constructor(_model: ObservedSfuInboundRtpPadModel, transport: ObservedSfuTransport);
28
+ get reports(): import("./ReportsCollector").ReportsCollector;
29
+ get serviceId(): string;
30
+ get mediaUnitId(): string;
31
+ get sfuId(): string;
32
+ get sfuTransportId(): string;
33
+ get sfuRtpPadId(): string;
34
+ get updated(): number;
35
+ get closed(): boolean;
36
+ close(): void;
37
+ }
38
+ //# sourceMappingURL=ObservedSfuInboundRtpPad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservedSfuInboundRtpPad.d.ts","sourceRoot":"","sources":["../src/ObservedSfuInboundRtpPad.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,MAAM,6BAA6B,GAAE;IAC1C,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC5C,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAChD,EAAE,CAAC,CAAC,SAAS,MAAM,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACnI,GAAG,CAAC,CAAC,SAAS,MAAM,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACpI,IAAI,CAAC,CAAC,SAAS,MAAM,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACrI,IAAI,CAAC,CAAC,SAAS,MAAM,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAEpH,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1D;AAED,qBAAa,wBAAyB,SAAQ,YAAY;IASxD,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,SAAS,EAAE,oBAAoB;IAThD,SAAgB,OAAO,SAAc;IAE9B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAGN,MAAM,EAAE,6BAA6B,EACtC,SAAS,EAAE,oBAAoB;IAMhD,IAAW,OAAO,kDAEjB;IAED,IAAW,SAAS,WAEnB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,KAAK,WAEf;IAED,IAAW,cAAc,WAExB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK;CA4BZ"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.ObservedSfuInboundRtpPad = void 0;
15
+ const events_1 = require("events");
16
+ class ObservedSfuInboundRtpPad extends events_1.EventEmitter {
17
+ constructor(_model, transport) {
18
+ super();
19
+ this._model = _model;
20
+ this.transport = transport;
21
+ this.created = Date.now();
22
+ this._updated = Date.now();
23
+ this._closed = false;
24
+ this.setMaxListeners(Infinity);
25
+ }
26
+ get reports() {
27
+ return this.transport.reports;
28
+ }
29
+ get serviceId() {
30
+ return this.transport.serviceId;
31
+ }
32
+ get mediaUnitId() {
33
+ return this.transport.mediaUnitId;
34
+ }
35
+ get sfuId() {
36
+ return this.transport.sfuId;
37
+ }
38
+ get sfuTransportId() {
39
+ return this.transport.sfuTransportId;
40
+ }
41
+ get sfuRtpPadId() {
42
+ return this._model.sfuInboundRtpPadId;
43
+ }
44
+ get updated() {
45
+ return this._updated;
46
+ }
47
+ get closed() {
48
+ return this._closed;
49
+ }
50
+ close() {
51
+ if (this._closed)
52
+ return;
53
+ this._closed = true;
54
+ this.emit('close');
55
+ }
56
+ update(sample, timestamp) {
57
+ const { streamId: sfuStreamId, padId: rtpPadId } = sample, reportData = __rest(sample, ["streamId", "padId"]);
58
+ const report = Object.assign(Object.assign({ serviceId: this.serviceId, mediaUnitId: this.mediaUnitId, sfuId: this.sfuId, callId: undefined, // TODO: where to get this from?
59
+ sfuStreamId,
60
+ rtpPadId }, reportData), { timestamp, marker: this.marker });
61
+ this.reports.addSfuInboundRtpPadReport(report);
62
+ this.stats = sample;
63
+ this._updated = Date.now();
64
+ this.emit('update');
65
+ }
66
+ }
67
+ exports.ObservedSfuInboundRtpPad = ObservedSfuInboundRtpPad;
@@ -0,0 +1,38 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from 'events';
3
+ import { SfuOutboundRtpPad } from '@observertc/sample-schemas-js';
4
+ import { ObservedSfuTransport } from './ObservedSfuTransport';
5
+ export type ObservedSfuOutboundRtpPadModel = {
6
+ sfuOutboundRtpPadId: string;
7
+ };
8
+ export type ObservedSfuOutboundRtpPadEvents = {
9
+ update: [];
10
+ close: [];
11
+ };
12
+ export declare interface ObservedSfuOutboundRtpPad {
13
+ on<U extends keyof ObservedSfuOutboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuOutboundRtpPadEvents[U]) => void): this;
14
+ off<U extends keyof ObservedSfuOutboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuOutboundRtpPadEvents[U]) => void): this;
15
+ once<U extends keyof ObservedSfuOutboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuOutboundRtpPadEvents[U]) => void): this;
16
+ emit<U extends keyof ObservedSfuOutboundRtpPadEvents>(event: U, ...args: ObservedSfuOutboundRtpPadEvents[U]): boolean;
17
+ update(sample: SfuOutboundRtpPad, timestamp: number): void;
18
+ }
19
+ export declare class ObservedSfuOutboundRtpPad extends EventEmitter {
20
+ private readonly _model;
21
+ readonly transport: ObservedSfuTransport;
22
+ readonly created: number;
23
+ stats?: SfuOutboundRtpPad;
24
+ marker?: string;
25
+ private _updated;
26
+ private _closed;
27
+ constructor(_model: ObservedSfuOutboundRtpPadModel, transport: ObservedSfuTransport);
28
+ get reports(): import("./ReportsCollector").ReportsCollector;
29
+ get serviceId(): string;
30
+ get mediaUnitId(): string;
31
+ get sfuId(): string;
32
+ get sfuTransportId(): string;
33
+ get sfuRtpPadId(): string;
34
+ get updated(): number;
35
+ get closed(): boolean;
36
+ close(): void;
37
+ }
38
+ //# sourceMappingURL=ObservedSfuOutboundRtpPad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservedSfuOutboundRtpPad.d.ts","sourceRoot":"","sources":["../src/ObservedSfuOutboundRtpPad.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,8BAA8B,GAAE;IAC3C,mBAAmB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC7C,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,yBAAyB;IACjD,EAAE,CAAC,CAAC,SAAS,MAAM,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACrI,GAAG,CAAC,CAAC,SAAS,MAAM,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACtI,IAAI,CAAC,CAAC,SAAS,MAAM,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACvI,IAAI,CAAC,CAAC,SAAS,MAAM,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAEtH,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3D;AAED,qBAAa,yBAA0B,SAAQ,YAAY;IASzD,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,SAAS,EAAE,oBAAoB;IAThD,SAAgB,OAAO,SAAc;IAE9B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAGN,MAAM,EAAE,8BAA8B,EACvC,SAAS,EAAE,oBAAoB;IAMhD,IAAW,OAAO,kDAEjB;IAED,IAAW,SAAS,WAEnB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,KAAK,WAEf;IAED,IAAW,cAAc,WAExB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK;CA6BZ"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.ObservedSfuOutboundRtpPad = void 0;
15
+ const events_1 = require("events");
16
+ class ObservedSfuOutboundRtpPad extends events_1.EventEmitter {
17
+ constructor(_model, transport) {
18
+ super();
19
+ this._model = _model;
20
+ this.transport = transport;
21
+ this.created = Date.now();
22
+ this._updated = Date.now();
23
+ this._closed = false;
24
+ this.setMaxListeners(Infinity);
25
+ }
26
+ get reports() {
27
+ return this.transport.reports;
28
+ }
29
+ get serviceId() {
30
+ return this.transport.serviceId;
31
+ }
32
+ get mediaUnitId() {
33
+ return this.transport.mediaUnitId;
34
+ }
35
+ get sfuId() {
36
+ return this.transport.sfuId;
37
+ }
38
+ get sfuTransportId() {
39
+ return this.transport.sfuTransportId;
40
+ }
41
+ get sfuRtpPadId() {
42
+ return this._model.sfuOutboundRtpPadId;
43
+ }
44
+ get updated() {
45
+ return this._updated;
46
+ }
47
+ get closed() {
48
+ return this._closed;
49
+ }
50
+ close() {
51
+ if (this._closed)
52
+ return;
53
+ this._closed = true;
54
+ this.emit('close');
55
+ }
56
+ update(sample, timestamp) {
57
+ const { streamId: sfuStreamId, padId: rtpPadId, sinkId: sfuSinkId } = sample, reportData = __rest(sample, ["streamId", "padId", "sinkId"]);
58
+ const report = Object.assign(Object.assign({ serviceId: this.serviceId, mediaUnitId: this.mediaUnitId, sfuId: this.sfuId, callId: undefined, // TODO: where to get this from?
59
+ sfuStreamId,
60
+ sfuSinkId,
61
+ rtpPadId }, reportData), { timestamp, marker: this.marker });
62
+ this.reports.addSfuOutboundRtpPadReport(report);
63
+ this.stats = sample;
64
+ this._updated = Date.now();
65
+ this.emit('update');
66
+ }
67
+ }
68
+ exports.ObservedSfuOutboundRtpPad = ObservedSfuOutboundRtpPad;
@@ -0,0 +1,38 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from 'events';
3
+ import { SfuSctpChannel } from '@observertc/sample-schemas-js';
4
+ import { ObservedSfuTransport } from './ObservedSfuTransport';
5
+ export type ObservedSfuSctpChannelModel = {
6
+ sfuSctpChannelId: string;
7
+ };
8
+ export type ObservedSfuSctpChannelEvents = {
9
+ update: [];
10
+ close: [];
11
+ };
12
+ export declare interface ObservedSfuSctpChannel {
13
+ on<U extends keyof ObservedSfuSctpChannelEvents>(event: U, listener: (...args: ObservedSfuSctpChannelEvents[U]) => void): this;
14
+ off<U extends keyof ObservedSfuSctpChannelEvents>(event: U, listener: (...args: ObservedSfuSctpChannelEvents[U]) => void): this;
15
+ once<U extends keyof ObservedSfuSctpChannelEvents>(event: U, listener: (...args: ObservedSfuSctpChannelEvents[U]) => void): this;
16
+ emit<U extends keyof ObservedSfuSctpChannelEvents>(event: U, ...args: ObservedSfuSctpChannelEvents[U]): boolean;
17
+ update(sample: SfuSctpChannel, timestamp: number): void;
18
+ }
19
+ export declare class ObservedSfuSctpChannel extends EventEmitter {
20
+ private readonly _model;
21
+ readonly transport: ObservedSfuTransport;
22
+ readonly created: number;
23
+ stats?: SfuSctpChannel;
24
+ marker?: string;
25
+ private _updated;
26
+ private _closed;
27
+ constructor(_model: ObservedSfuSctpChannelModel, transport: ObservedSfuTransport);
28
+ get serviceId(): string;
29
+ get sfuId(): string;
30
+ get mediaUnitId(): string;
31
+ get sfuTransportId(): string;
32
+ get sfuSctpChannelId(): string;
33
+ get reports(): import("./ReportsCollector").ReportsCollector;
34
+ get updated(): number;
35
+ get closed(): boolean;
36
+ close(): void;
37
+ }
38
+ //# sourceMappingURL=ObservedSfuSctpChannel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservedSfuSctpChannel.d.ts","sourceRoot":"","sources":["../src/ObservedSfuSctpChannel.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,MAAM,2BAA2B,GAAE;IACxC,gBAAgB,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IAC1C,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,sBAAsB;IAC9C,EAAE,CAAC,CAAC,SAAS,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,4BAA4B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/H,GAAG,CAAC,CAAC,SAAS,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,4BAA4B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAChI,IAAI,CAAC,CAAC,SAAS,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,4BAA4B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACjI,IAAI,CAAC,CAAC,SAAS,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,4BAA4B,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAEhH,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACxD;AAED,qBAAa,sBAAuB,SAAQ,YAAY;IAStD,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,SAAS,EAAE,oBAAoB;IAThD,SAAgB,OAAO,SAAc;IAE9B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAGN,MAAM,EAAE,2BAA2B,EACpC,SAAS,EAAE,oBAAoB;IAMhD,IAAW,SAAS,WAEnB;IAED,IAAW,KAAK,WAEf;IAED,IAAW,WAAW,WAErB;IAED,IAAW,cAAc,WAExB;IAED,IAAW,gBAAgB,WAE1B;IAED,IAAW,OAAO,kDAEjB;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK;CAyBZ"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObservedSfuSctpChannel = void 0;
4
+ const events_1 = require("events");
5
+ class ObservedSfuSctpChannel extends events_1.EventEmitter {
6
+ constructor(_model, transport) {
7
+ super();
8
+ this._model = _model;
9
+ this.transport = transport;
10
+ this.created = Date.now();
11
+ this._updated = Date.now();
12
+ this._closed = false;
13
+ this.setMaxListeners(Infinity);
14
+ }
15
+ get serviceId() {
16
+ return this.transport.serviceId;
17
+ }
18
+ get sfuId() {
19
+ return this.transport.sfuId;
20
+ }
21
+ get mediaUnitId() {
22
+ return this.transport.mediaUnitId;
23
+ }
24
+ get sfuTransportId() {
25
+ return this.transport.sfuTransportId;
26
+ }
27
+ get sfuSctpChannelId() {
28
+ return this._model.sfuSctpChannelId;
29
+ }
30
+ get reports() {
31
+ return this.transport.reports;
32
+ }
33
+ get updated() {
34
+ return this._updated;
35
+ }
36
+ get closed() {
37
+ return this._closed;
38
+ }
39
+ close() {
40
+ if (this._closed)
41
+ return;
42
+ this._closed = true;
43
+ this.emit('close');
44
+ }
45
+ update(sample, timestamp) {
46
+ const report = Object.assign(Object.assign({ serviceId: this.serviceId, mediaUnitId: this.mediaUnitId, sfuId: this.sfuId, callId: undefined, roomId: undefined }, sample), { timestamp, marker: this.marker });
47
+ this.reports.addSfuTransportReport(report);
48
+ this.stats = sample;
49
+ this._updated = Date.now();
50
+ this.emit('update');
51
+ }
52
+ }
53
+ exports.ObservedSfuSctpChannel = ObservedSfuSctpChannel;