@observertc/observer-js 1.0.1-9d3744d.0 → 1.0.1-b52220e.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 (39) hide show
  1. package/lib/ObservedCall.d.ts +2 -5
  2. package/lib/ObservedCall.d.ts.map +1 -1
  3. package/lib/ObservedCall.js +4 -30
  4. package/lib/ObservedClient.d.ts +11 -1
  5. package/lib/ObservedClient.d.ts.map +1 -1
  6. package/lib/ObservedClient.js +185 -4
  7. package/lib/ObservedClientEventMonitor.d.ts +89 -0
  8. package/lib/ObservedClientEventMonitor.d.ts.map +1 -0
  9. package/lib/ObservedClientEventMonitor.js +247 -0
  10. package/lib/ObservedDataChannel.d.ts +2 -0
  11. package/lib/ObservedDataChannel.d.ts.map +1 -1
  12. package/lib/ObservedDataChannel.js +2 -0
  13. package/lib/ObservedInboundTrack.d.ts +2 -0
  14. package/lib/ObservedInboundTrack.d.ts.map +1 -1
  15. package/lib/ObservedInboundTrack.js +2 -0
  16. package/lib/ObservedOutboundTrack.d.ts +2 -0
  17. package/lib/ObservedOutboundTrack.d.ts.map +1 -1
  18. package/lib/ObservedOutboundTrack.js +2 -0
  19. package/lib/ObservedPeerConnection.d.ts.map +1 -1
  20. package/lib/ObservedPeerConnection.js +2 -0
  21. package/lib/Observer.d.ts +1 -1
  22. package/lib/Observer.d.ts.map +1 -1
  23. package/lib/Observer.js +3 -3
  24. package/lib/index.d.ts +1 -0
  25. package/lib/index.d.ts.map +1 -1
  26. package/lib/index.js +3 -1
  27. package/lib/schema/ClientEventTypes.d.ts +60 -0
  28. package/lib/schema/ClientEventTypes.d.ts.map +1 -1
  29. package/package.json +1 -1
  30. package/src/ObservedCall.ts +4 -35
  31. package/src/ObservedClient.ts +205 -5
  32. package/src/ObservedClientEventMonitor.ts +301 -0
  33. package/src/ObservedDataChannel.ts +3 -0
  34. package/src/ObservedInboundTrack.ts +3 -0
  35. package/src/ObservedOutboundTrack.ts +3 -0
  36. package/src/ObservedPeerConnection.ts +2 -0
  37. package/src/Observer.ts +3 -3
  38. package/src/index.ts +1 -0
  39. package/src/schema/ClientEventTypes.ts +64 -0
@@ -20,8 +20,6 @@ export type ObservedCallEvents = {
20
20
  empty: [];
21
21
  'not-empty': [];
22
22
  close: [];
23
- started: [];
24
- ended: [];
25
23
  };
26
24
  export declare interface ObservedCall {
27
25
  on<U extends keyof ObservedCallEvents>(event: U, listener: (...args: ObservedCallEvents[U]) => void): this;
@@ -67,7 +65,8 @@ export declare class ObservedCall<AppData extends Record<string, unknown> = Reco
67
65
  appData: AppData;
68
66
  closed: boolean;
69
67
  startedAt?: number;
70
- ended?: number;
68
+ endedAt?: number;
69
+ closedAt?: number;
71
70
  private _callStartedEvent;
72
71
  private _callEndedEvent;
73
72
  constructor(settings: ObservedCallSettings<AppData>, observer: Observer);
@@ -80,7 +79,5 @@ export declare class ObservedCall<AppData extends Record<string, unknown> = Reco
80
79
  private _onClientUpdate;
81
80
  private _clientJoined;
82
81
  private _clientLeft;
83
- emitCallStartedEvent(): void;
84
- emitCallEndedEvent(): void;
85
82
  }
86
83
  //# sourceMappingURL=ObservedCall.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedCall.d.ts","sourceRoot":"","sources":["../src/ObservedCall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObservedCall.d.ts","sourceRoot":"","sources":["../src/ObservedCall.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,8 @@ class ObservedCall extends events_1.EventEmitter {
49
49
  appData;
50
50
  closed = false;
51
51
  startedAt;
52
- ended;
52
+ endedAt;
53
+ closedAt;
53
54
  _callStartedEvent;
54
55
  _callEndedEvent;
55
56
  constructor(settings, observer) {
@@ -103,9 +104,7 @@ class ObservedCall extends events_1.EventEmitter {
103
104
  this.closed = true;
104
105
  this.updater?.close();
105
106
  [...this.observedClients.values()].forEach((client) => client.close());
106
- // make sure to emit the events
107
- this.emitCallStartedEvent();
108
- this.emitCallEndedEvent();
107
+ this.closedAt = Date.now();
109
108
  this.emit('close');
110
109
  }
111
110
  getObservedClient(clientId) {
@@ -194,36 +193,11 @@ class ObservedCall extends events_1.EventEmitter {
194
193
  if (!client.joinedAt)
195
194
  return;
196
195
  this.startedAt = Math.min(this.startedAt ?? client.joinedAt, client.joinedAt);
197
- if (this._callStartedEvent.emitted)
198
- return;
199
- if (this._callStartedEvent.timer) {
200
- if (1 < this.observedClients.size) {
201
- this.emitCallStartedEvent();
202
- }
203
- return;
204
- }
205
- this._callStartedEvent.timer = setTimeout(() => {
206
- this.emitCallStartedEvent();
207
- }, 5000);
208
196
  }
209
197
  _clientLeft(client) {
210
198
  if (!client.leftAt)
211
199
  return;
212
- this.ended = Math.max(this.ended ?? client.leftAt, client.leftAt);
213
- }
214
- emitCallStartedEvent() {
215
- if (this._callStartedEvent.emitted)
216
- return;
217
- this._callStartedEvent.emitted = true;
218
- clearTimeout(this._callStartedEvent.timer);
219
- this._callStartedEvent.timer = undefined;
220
- this.emit('started');
221
- }
222
- emitCallEndedEvent() {
223
- if (this._callEndedEvent.emitted)
224
- return;
225
- this._callEndedEvent.emitted = true;
226
- this.emit('ended');
200
+ this.endedAt = Math.max(this.endedAt ?? client.leftAt, client.leftAt);
227
201
  }
228
202
  }
229
203
  exports.ObservedCall = ObservedCall;
@@ -1,11 +1,12 @@
1
1
  /// <reference types="node" />
2
2
  import { EventEmitter } from 'events';
3
3
  import { ObservedPeerConnection } from './ObservedPeerConnection';
4
- import { ClientMetaData, ClientSample, ClientIssue, ExtensionStat } from './schema/ClientSample';
4
+ import { ClientEvent, ClientMetaData, ClientSample, ClientIssue, ExtensionStat } from './schema/ClientSample';
5
5
  import * as MetaData from './schema/ClientMetaTypes';
6
6
  import { ObservedCall } from './ObservedCall';
7
7
  import { CalculatedScore } from './scores/CalculatedScore';
8
8
  import { Detectors } from './detectors/Detectors';
9
+ import { ObservedClientEventMonitor } from './ObservedClientEventMonitor';
9
10
  export type ObservedClientSettings<AppData extends Record<string, unknown> = Record<string, unknown>> = {
10
11
  clientId: string;
11
12
  appData?: AppData;
@@ -46,6 +47,7 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
46
47
  closed: boolean;
47
48
  joinedAt?: number;
48
49
  leftAt?: number;
50
+ closedAt?: number;
49
51
  operationSystem?: MetaData.OperationSystem;
50
52
  engine?: MetaData.Engine;
51
53
  platform?: MetaData.Platform;
@@ -107,15 +109,23 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
107
109
  totalNumberOfIssues: number;
108
110
  readonly mediaDevices: MetaData.MediaDeviceInfo[];
109
111
  issues: ClientIssue[];
112
+ private _injections;
110
113
  constructor(settings: ObservedClientSettings<AppData>, call: ObservedCall);
111
114
  get numberOfPeerConnections(): number;
112
115
  get score(): number | undefined;
113
116
  close(): void;
114
117
  accept(sample: ClientSample): void;
115
118
  private _processClientEvent;
119
+ injectMetaData(metaData: ClientMetaData): void;
120
+ injectEvent(event: ClientEvent): void;
121
+ injectIssue(issue: ClientIssue): void;
122
+ injectExtensionStat(stat: ExtensionStat): void;
123
+ injectAttachment(key: string, value: unknown): void;
116
124
  addMetadata(metadata: ClientMetaData): void;
117
125
  addIssue(issue: ClientIssue): void;
118
126
  addExtensionStats(stats: ExtensionStat): void;
119
127
  private _updatePeerConnection;
128
+ createEventMonitor<CTX = unknown>(ctx?: CTX): ObservedClientEventMonitor<CTX>;
129
+ private _mergeInjections;
120
130
  }
121
131
  //# sourceMappingURL=ObservedClient.d.ts.map
@@ -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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"}
@@ -8,6 +8,7 @@ const ClientEventTypes_1 = require("./schema/ClientEventTypes");
8
8
  const ClientMetaTypes_1 = require("./schema/ClientMetaTypes");
9
9
  const utils_1 = require("./common/utils");
10
10
  const Detectors_1 = require("./detectors/Detectors");
11
+ const ObservedClientEventMonitor_1 = require("./ObservedClientEventMonitor");
11
12
  const logger = (0, logger_1.createLogger)('ObservedClient');
12
13
  class ObservedClient extends events_1.EventEmitter {
13
14
  call;
@@ -25,6 +26,7 @@ class ObservedClient extends events_1.EventEmitter {
25
26
  closed = false;
26
27
  joinedAt;
27
28
  leftAt;
29
+ closedAt;
28
30
  // the timestamp of the CLIENT_JOINED event
29
31
  operationSystem;
30
32
  engine;
@@ -87,6 +89,7 @@ class ObservedClient extends events_1.EventEmitter {
87
89
  totalNumberOfIssues = 0;
88
90
  mediaDevices = [];
89
91
  issues = [];
92
+ _injections = {};
90
93
  constructor(settings, call) {
91
94
  super();
92
95
  this.call = call;
@@ -106,6 +109,7 @@ class ObservedClient extends events_1.EventEmitter {
106
109
  return;
107
110
  this.closed = true;
108
111
  Array.from(this.observedPeerConnections.values()).forEach((peerConnection) => peerConnection.close());
112
+ this.closedAt = Date.now();
109
113
  this.emit('close');
110
114
  }
111
115
  accept(sample) {
@@ -146,8 +150,11 @@ class ObservedClient extends events_1.EventEmitter {
146
150
  this.usingTCP = false;
147
151
  this.currentMinRttInMs = undefined;
148
152
  this.currentMaxRttInMs = undefined;
153
+ this._mergeInjections(sample);
154
+ const clientEventsPostBuffer = [];
149
155
  for (const clientEvent of sample.clientEvents ?? []) {
150
- this._processClientEvent(clientEvent);
156
+ this._processClientEvent(clientEvent, clientEventsPostBuffer);
157
+ this.call.observer.emit('client-event', this, clientEvent);
151
158
  }
152
159
  for (const metaData of sample.clientMetaItems ?? []) {
153
160
  this.addMetadata(metaData);
@@ -212,7 +219,9 @@ class ObservedClient extends events_1.EventEmitter {
212
219
  ++numberOfRttMeasurements;
213
220
  }
214
221
  }
215
- sample.peerConnections?.forEach(this._updatePeerConnection.bind(this));
222
+ for (const clientEvent of clientEventsPostBuffer) {
223
+ this._processClientEvent(clientEvent);
224
+ }
216
225
  // emit new attachments?
217
226
  this.attachments = sample.attachments;
218
227
  this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
@@ -252,7 +261,7 @@ class ObservedClient extends events_1.EventEmitter {
252
261
  ++this.numberOfScoreMeasurements;
253
262
  }
254
263
  }
255
- _processClientEvent(event) {
264
+ _processClientEvent(event, postBuffer) {
256
265
  // eslint-disable-next-line no-console
257
266
  // console.warn('ClientEvent', event);
258
267
  switch (event.type) {
@@ -284,8 +293,142 @@ class ObservedClient extends events_1.EventEmitter {
284
293
  }
285
294
  break;
286
295
  }
296
+ case ClientEventTypes_1.ClientEventTypes.PEER_CONNECTION_OPENED: {
297
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
298
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string') {
299
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
300
+ if (observedPeerConnection) {
301
+ observedPeerConnection.openedAt = event.timestamp;
302
+ }
303
+ else if (postBuffer) {
304
+ postBuffer.push(event);
305
+ }
306
+ else {
307
+ logger.warn('Received PEER_CONNECTION_OPENED event without a corresponding observedPeerConnection', event);
308
+ }
309
+ }
310
+ break;
311
+ }
312
+ case ClientEventTypes_1.ClientEventTypes.PEER_CONNECTION_CLOSED: {
313
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
314
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string') {
315
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
316
+ if (observedPeerConnection) {
317
+ observedPeerConnection.closedAt = event.timestamp;
318
+ }
319
+ else if (postBuffer) {
320
+ postBuffer.push(event);
321
+ }
322
+ else {
323
+ logger.warn('Received PEER_CONNECTION_CLOSED event without a corresponding observedPeerConnection', event);
324
+ }
325
+ }
326
+ break;
327
+ }
328
+ case ClientEventTypes_1.ClientEventTypes.MEDIA_TRACK_ADDED: {
329
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
330
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
331
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
332
+ const observedTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId) ?? observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
333
+ if (observedTrack) {
334
+ observedTrack.addedAt = event.timestamp;
335
+ }
336
+ else if (postBuffer) {
337
+ postBuffer.push(event);
338
+ }
339
+ else {
340
+ logger.warn('Received MEDIA_TRACK_ADDED event without a corresponding observedPeerConnection or observedTrack', event);
341
+ }
342
+ }
343
+ break;
344
+ }
345
+ case ClientEventTypes_1.ClientEventTypes.MEDIA_TRACK_REMOVED: {
346
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
347
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
348
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
349
+ const observedTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId) ?? observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
350
+ if (observedTrack) {
351
+ observedTrack.removedAt = event.timestamp;
352
+ }
353
+ else if (postBuffer) {
354
+ postBuffer.push(event);
355
+ }
356
+ else {
357
+ logger.warn('Received MEDIA_TRACK_REMOVED event without a corresponding observedPeerConnection or observedTrack', event);
358
+ }
359
+ }
360
+ break;
361
+ }
362
+ case ClientEventTypes_1.ClientEventTypes.DATA_CHANNEL_OPEN: {
363
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
364
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.dataChannelId && typeof payload.dataChannelId === 'string') {
365
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
366
+ const observedDataChannel = observedPeerConnection?.observedDataChannels.get(payload.dataChannelId);
367
+ if (observedDataChannel) {
368
+ observedDataChannel.addedAt = event.timestamp;
369
+ }
370
+ else if (postBuffer) {
371
+ postBuffer.push(event);
372
+ }
373
+ else {
374
+ logger.warn('Received DATA_CHANNEL_OPENED event without a corresponding observedPeerConnection or observedDataChannel', event);
375
+ }
376
+ }
377
+ break;
378
+ }
379
+ case ClientEventTypes_1.ClientEventTypes.DATA_CHANNEL_CLOSED: {
380
+ const payload = (0, utils_1.parseJsonAs)(event.payload);
381
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.dataChannelId && typeof payload.dataChannelId === 'string') {
382
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
383
+ const observedDataChannel = observedPeerConnection?.observedDataChannels.get(payload.dataChannelId);
384
+ if (observedDataChannel) {
385
+ observedDataChannel.removedAt = event.timestamp;
386
+ }
387
+ else if (postBuffer) {
388
+ postBuffer.push(event);
389
+ }
390
+ else {
391
+ logger.warn('Received DATA_CHANNEL_CLOSE event without a corresponding observedPeerConnection or observedDataChannel', event);
392
+ }
393
+ }
394
+ break;
395
+ }
287
396
  }
288
- this.call.observer.emit('client-event', this, event);
397
+ }
398
+ injectMetaData(metaData) {
399
+ if (this.closed)
400
+ return;
401
+ if (!this._injections.clientMetaItems)
402
+ this._injections.clientMetaItems = [];
403
+ this._injections.clientMetaItems.push(metaData);
404
+ }
405
+ injectEvent(event) {
406
+ if (this.closed)
407
+ return;
408
+ if (!this._injections.clientEvents)
409
+ this._injections.clientEvents = [];
410
+ this._injections.clientEvents.push(event);
411
+ }
412
+ injectIssue(issue) {
413
+ if (this.closed)
414
+ return;
415
+ if (!this._injections.clientIssues)
416
+ this._injections.clientIssues = [];
417
+ this._injections.clientIssues.push(issue);
418
+ }
419
+ injectExtensionStat(stat) {
420
+ if (this.closed)
421
+ return;
422
+ if (!this._injections.extensionStats)
423
+ this._injections.extensionStats = [];
424
+ this._injections.extensionStats.push(stat);
425
+ }
426
+ injectAttachment(key, value) {
427
+ if (this.closed)
428
+ return;
429
+ if (!this._injections.attachments)
430
+ this._injections.attachments = {};
431
+ this._injections.attachments[key] = value;
289
432
  }
290
433
  addMetadata(metadata) {
291
434
  if (this.closed)
@@ -335,5 +478,43 @@ class ObservedClient extends events_1.EventEmitter {
335
478
  observedPeerConnection.accept(sample);
336
479
  return observedPeerConnection;
337
480
  }
481
+ createEventMonitor(ctx) {
482
+ return new ObservedClientEventMonitor_1.ObservedClientEventMonitor(this, ctx ?? {});
483
+ }
484
+ _mergeInjections(sample) {
485
+ if (this.closed)
486
+ return sample;
487
+ if (this._injections.clientEvents) {
488
+ if (!sample.clientEvents)
489
+ sample.clientEvents = [];
490
+ sample.clientEvents.push(...this._injections.clientEvents);
491
+ this._injections.clientEvents = undefined;
492
+ }
493
+ if (this._injections.clientIssues) {
494
+ if (!sample.clientIssues)
495
+ sample.clientIssues = [];
496
+ sample.clientIssues.push(...this._injections.clientIssues);
497
+ this._injections.clientIssues = undefined;
498
+ }
499
+ if (this._injections.extensionStats) {
500
+ if (!sample.extensionStats)
501
+ sample.extensionStats = [];
502
+ sample.extensionStats.push(...this._injections.extensionStats);
503
+ this._injections.extensionStats = undefined;
504
+ }
505
+ if (this._injections.attachments) {
506
+ if (!sample.attachments)
507
+ sample.attachments = {};
508
+ Object.assign(sample.attachments, this._injections.attachments);
509
+ this._injections.attachments = undefined;
510
+ }
511
+ if (this._injections.clientMetaItems) {
512
+ if (!sample.clientMetaItems)
513
+ sample.clientMetaItems = [];
514
+ sample.clientMetaItems.push(...this._injections.clientMetaItems);
515
+ this._injections.clientMetaItems = undefined;
516
+ }
517
+ return sample;
518
+ }
338
519
  }
339
520
  exports.ObservedClient = ObservedClient;
@@ -0,0 +1,89 @@
1
+ import { ObservedCertificate } from './ObservedCertificate';
2
+ import { ObservedClient } from './ObservedClient';
3
+ import { ObservedCodec } from './ObservedCodec';
4
+ import { ObservedDataChannel } from './ObservedDataChannel';
5
+ import { ObservedIceCandidate } from './ObservedIceCandidate';
6
+ import { ObservedIceCandidatePair } from './ObservedIceCandidatePair';
7
+ import { ObservedIceTransport } from './ObservedIceTransport';
8
+ import { ObservedInboundRtp } from './ObservedInboundRtp';
9
+ import { ObservedInboundTrack } from './ObservedInboundTrack';
10
+ import { ObservedMediaPlayout } from './ObservedMediaPlayout';
11
+ import { ObservedMediaSource } from './ObservedMediaSource';
12
+ import { ObservedOutboundRtp } from './ObservedOutboundRtp';
13
+ import { ObservedOutboundTrack } from './ObservedOutboundTrack';
14
+ import { ObservedPeerConnection } from './ObservedPeerConnection';
15
+ import { ClientIssue, ClientMetaData, ExtensionStat } from './schema/ClientSample';
16
+ export declare class ObservedClientEventMonitor<Context> {
17
+ readonly observedClient: ObservedClient;
18
+ readonly context: Context;
19
+ constructor(observedClient: ObservedClient, context: Context);
20
+ onClientClosed?: (client: ObservedClient, ctx: Context) => void;
21
+ private _onClientClosed;
22
+ onPeerConnectionAdded?: (peerConnection: ObservedPeerConnection, ctx: Context) => void;
23
+ private _onPeerConnconnectionAdded;
24
+ onPeerConnectionRemoved?: (peerConnection: ObservedPeerConnection, ctx: Context) => void;
25
+ private _onPeerConnectionRemoved;
26
+ onCertificateAdded?: (certificate: ObservedCertificate, ctx: Context) => void;
27
+ private _onCertificateAdded;
28
+ onCertificateRemoved?: (certificate: ObservedCertificate, ctx: Context) => void;
29
+ private _onCertificateRemoved;
30
+ onInboundTrackAdded?: (inboundTrack: ObservedInboundTrack, ctx: Context) => void;
31
+ private _onInboundTrackAdded;
32
+ onInboundTrackRemoved?: (inboundTrack: ObservedInboundTrack, ctx: Context) => void;
33
+ private _onInboundTrackRemoved;
34
+ onOutboundTrackAdded?: (outboundTrack: ObservedOutboundTrack, ctx: Context) => void;
35
+ private _onOutboundTrackAdded;
36
+ onOutboundTrackRemoved?: (outboundTrack: ObservedOutboundTrack, ctx: Context) => void;
37
+ private _onOutboundTrackRemoved;
38
+ onInboundRtpAdded?: (inboundRtp: ObservedInboundRtp, ctx: Context) => void;
39
+ private _onInboundRtpAdded;
40
+ onInboundRtpRemoved?: (inboundRtp: ObservedInboundRtp, ctx: Context) => void;
41
+ private _onInboundRtpRemoved;
42
+ onOutboundRtpAdded?: (outboundRtp: ObservedOutboundRtp, ctx: Context) => void;
43
+ private _onOutboundRtpAdded;
44
+ onOutboundRtpRemoved?: (outboundRtp: ObservedOutboundRtp, ctx: Context) => void;
45
+ private _onOutboundRtpRemoved;
46
+ onDataChannelAdded?: (dataChannel: ObservedDataChannel, ctx: Context) => void;
47
+ private _onDataChannelAdded;
48
+ onDataChannelRemoved?: (dataChannel: ObservedDataChannel, ctx: Context) => void;
49
+ private _onDataChannelRemoved;
50
+ onAddedIceTransport?: (iceTransport: ObservedIceTransport, ctx: Context) => void;
51
+ private _onAddedIceTransport;
52
+ onRemovedIceTransport?: (iceTransport: ObservedIceTransport, ctx: Context) => void;
53
+ private _onRemovedIceTransport;
54
+ onIceCandidateAdded?: (iceCandidate: ObservedIceCandidate, ctx: Context) => void;
55
+ private _onIceCandidateAdded;
56
+ onIceCandidateRemoved?: (iceCandidate: ObservedIceCandidate, ctx: Context) => void;
57
+ private _onIceCandidateRemoved;
58
+ onAddedIceCandidatePair?: (candidatePair: ObservedIceCandidatePair, ctx: Context) => void;
59
+ private _onAddedIceCandidatePair;
60
+ onRemovedIceCandidatePair?: (candidatePair: ObservedIceCandidatePair, ctx: Context) => void;
61
+ private _onRemovedIceCandidatePair;
62
+ onAddedMediaCodec?: (codec: ObservedCodec, ctx: Context) => void;
63
+ private _onAddedMediaCodec;
64
+ onRemovedMediaCodec?: (codec: ObservedCodec, ctx: Context) => void;
65
+ private _onRemovedMediaCodec;
66
+ onAddedMediaPlayout?: (mediaPlayout: ObservedMediaPlayout, ctx: Context) => void;
67
+ private _onAddedMediaPlayout;
68
+ onRemovedMediaPlayout?: (mediaPlayout: ObservedMediaPlayout, ctx: Context) => void;
69
+ private _onRemovedMediaPlayout;
70
+ onMediaSourceAdded?: (mediaSource: ObservedMediaSource, ctx: Context) => void;
71
+ private _onMediaSourceAdded;
72
+ onMediaSourceRemoved?: (mediaSource: ObservedMediaSource, ctx: Context) => void;
73
+ private _onMediaSourceRemoved;
74
+ onClientIssue?: (issue: ClientIssue, ctx: Context) => void;
75
+ private _onClientIssue;
76
+ onClientMetadata?: (metadata: ClientMetaData, ctx: Context) => void;
77
+ private _onClientMetadata;
78
+ onClientExtensionStats?: (extensionStats: ExtensionStat, ctx: Context) => void;
79
+ private _onClientExtensionStats;
80
+ onClientJoined?: (client: ObservedClient, ctx: Context) => void;
81
+ private _onClientJoined;
82
+ onClientLeft?: (client: ObservedClient, ctx: Context) => void;
83
+ private _onClientLeft;
84
+ onUserMediaError?: (error: string, observedClient: ObservedClient, ctx: Context) => void;
85
+ private _onUserMediaError;
86
+ onUsingTurn?: (client: ObservedClient, ctx: Context) => void;
87
+ private _onUsingTurn;
88
+ }
89
+ //# sourceMappingURL=ObservedClientEventMonitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservedClientEventMonitor.d.ts","sourceRoot":"","sources":["../src/ObservedClientEventMonitor.ts"],"names":[],"mappings":"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"}