@wazo/sdk 0.37.24 → 0.37.25

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 (94) hide show
  1. package/dist/wazo-sdk.js +6 -6
  2. package/esm/__tests__/api-client.test.js +12 -12
  3. package/esm/__tests__/web-rtc-client.test.js +120 -103
  4. package/esm/api/amid.js +1 -1
  5. package/esm/api/call-logd.js +2 -2
  6. package/esm/api/ctid-ng.js +3 -3
  7. package/esm/api/dird.js +1 -1
  8. package/esm/api/webhookd.js +1 -1
  9. package/esm/api-client.js +12 -12
  10. package/esm/checker/Checker.js +145 -128
  11. package/esm/checker/checks/aor.js +12 -12
  12. package/esm/checker/checks/api.js +12 -12
  13. package/esm/checker/checks/index.js +135 -118
  14. package/esm/checker/checks/wazo-websocket.js +15 -15
  15. package/esm/checker/checks/webrtc-transport.js +120 -103
  16. package/esm/checker/checks/webrtc.js +120 -103
  17. package/esm/domain/AdHocAPIConference.js +12 -12
  18. package/esm/domain/CallLog.js +1 -1
  19. package/esm/domain/Contact.js +1 -1
  20. package/esm/domain/Features.js +12 -12
  21. package/esm/domain/Phone/CTIPhone.js +26 -26
  22. package/esm/domain/Phone/WebRTCPhone.js +87 -86
  23. package/esm/domain/__tests__/CallLog.test.js +1 -1
  24. package/esm/domain/__tests__/Contact.test.js +1 -1
  25. package/esm/index.js +356 -338
  26. package/esm/lib/WazoSessionDescriptionHandler.js +1 -1
  27. package/esm/service/CallApi.js +12 -12
  28. package/esm/service/IssueReporter.js +1 -1
  29. package/esm/service/__tests__/IssueReporter.test.js +1 -1
  30. package/esm/service/getApiClient.js +12 -12
  31. package/esm/simple/Auth.js +346 -328
  32. package/esm/simple/Configuration.js +346 -328
  33. package/esm/simple/Directory.js +12 -12
  34. package/esm/simple/Phone.js +346 -328
  35. package/esm/simple/Websocket.js +17 -17
  36. package/esm/simple/index.js +350 -332
  37. package/esm/simple/room/LocalParticipant.js +350 -332
  38. package/esm/simple/room/Participant.js +350 -332
  39. package/esm/simple/room/RemoteParticipant.js +350 -332
  40. package/esm/simple/room/Room.js +351 -333
  41. package/esm/simple/room/SipRoom.js +350 -332
  42. package/esm/simple/room/Stream.js +350 -332
  43. package/esm/simple/room/__tests__/RemoteParticipant.test.js +350 -332
  44. package/esm/simple/utils.js +350 -332
  45. package/esm/web-rtc-client.js +120 -103
  46. package/esm/websocket-client.js +15 -15
  47. package/lib/__tests__/api-client.test.js +12 -12
  48. package/lib/__tests__/web-rtc-client.test.js +120 -103
  49. package/lib/api/amid.js +1 -1
  50. package/lib/api/call-logd.js +2 -2
  51. package/lib/api/ctid-ng.js +3 -3
  52. package/lib/api/dird.js +1 -1
  53. package/lib/api/webhookd.js +1 -1
  54. package/lib/api-client.js +12 -12
  55. package/lib/checker/Checker.js +145 -128
  56. package/lib/checker/checks/aor.js +12 -12
  57. package/lib/checker/checks/api.js +12 -12
  58. package/lib/checker/checks/index.js +135 -118
  59. package/lib/checker/checks/wazo-websocket.js +15 -15
  60. package/lib/checker/checks/webrtc-transport.js +120 -103
  61. package/lib/checker/checks/webrtc.js +120 -103
  62. package/lib/domain/AdHocAPIConference.js +12 -12
  63. package/lib/domain/CallLog.js +1 -1
  64. package/lib/domain/Contact.js +1 -1
  65. package/lib/domain/Features.js +12 -12
  66. package/lib/domain/Phone/CTIPhone.js +26 -26
  67. package/lib/domain/Phone/WebRTCPhone.js +87 -86
  68. package/lib/domain/__tests__/CallLog.test.js +1 -1
  69. package/lib/domain/__tests__/Contact.test.js +1 -1
  70. package/lib/index.js +356 -338
  71. package/lib/lib/WazoSessionDescriptionHandler.js +1 -1
  72. package/lib/service/CallApi.js +12 -12
  73. package/lib/service/IssueReporter.js +1 -1
  74. package/lib/service/__tests__/IssueReporter.test.js +1 -1
  75. package/lib/service/getApiClient.js +12 -12
  76. package/lib/simple/Auth.js +346 -328
  77. package/lib/simple/Configuration.js +346 -328
  78. package/lib/simple/Directory.js +12 -12
  79. package/lib/simple/Phone.js +346 -328
  80. package/lib/simple/Websocket.js +17 -17
  81. package/lib/simple/index.js +350 -332
  82. package/lib/simple/room/LocalParticipant.js +350 -332
  83. package/lib/simple/room/Participant.js +350 -332
  84. package/lib/simple/room/RemoteParticipant.js +350 -332
  85. package/lib/simple/room/Room.js +351 -333
  86. package/lib/simple/room/SipRoom.js +350 -332
  87. package/lib/simple/room/Stream.js +350 -332
  88. package/lib/simple/room/__tests__/RemoteParticipant.test.js +350 -332
  89. package/lib/simple/utils.js +350 -332
  90. package/lib/web-rtc-client.js +120 -103
  91. package/lib/websocket-client.js +15 -15
  92. package/package.json +1 -1
  93. package/src/domain/Phone/WebRTCPhone.js +3 -2
  94. package/src/web-rtc-client.js +27 -10
@@ -100,7 +100,7 @@ const isMobile = () => typeof navigator !== 'undefined' && navigator.product ===
100
100
 
101
101
  const methods = ['head', 'get', 'post', 'put', 'delete'];
102
102
 
103
- const logger = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
103
+ const logger$2 = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
104
104
 
105
105
  // Use a function here to be able to mock it in tests
106
106
  const realFetch = () => {
@@ -239,7 +239,7 @@ class ApiRequester {
239
239
  };
240
240
 
241
241
  if (this.refreshTokenPromise) {
242
- logger.info('A token is already refreshing, waiting ...', { url });
242
+ logger$2.info('A token is already refreshing, waiting ...', { url });
243
243
  await this.refreshTokenPromise;
244
244
  }
245
245
 
@@ -259,7 +259,7 @@ class ApiRequester {
259
259
  return promise.then(async (err ) => {
260
260
  // Check if the token is still valid
261
261
  if (firstCall && this._checkTokenExpired(response, err)) {
262
- logger.warn('token expired', { error: err.reason });
262
+ logger$2.warn('token expired', { error: err.reason });
263
263
  // Replay the call after refreshing the token
264
264
  return this._replayWithNewToken(err, path, method, body, headers, parse);
265
265
  }
@@ -269,7 +269,7 @@ class ApiRequester {
269
269
  : exceptionClass.fromResponse(err, response.status);
270
270
 
271
271
  if (this.shouldLogErrors) {
272
- logger.error('API error', error);
272
+ logger$2.error('API error', error);
273
273
  }
274
274
 
275
275
  throw error;
@@ -279,7 +279,7 @@ class ApiRequester {
279
279
  return newParse(response, isJson);
280
280
  }).catch(error => {
281
281
  if (this.shouldLogErrors) {
282
- logger.error('Fetch failed', { url, options, message: error.message, stack: error.stack });
282
+ logger$2.error('Fetch failed', { url, options, message: error.message, stack: error.stack });
283
283
  }
284
284
 
285
285
  throw error;
@@ -307,13 +307,13 @@ class ApiRequester {
307
307
  ) {
308
308
  const isTokenNotFound = this._isTokenNotFound(err);
309
309
  let newPath = path;
310
- logger.info('refreshing token', { inProgress: !!this.refreshTokenPromise });
310
+ logger$2.info('refreshing token', { inProgress: !!this.refreshTokenPromise });
311
311
 
312
312
  this.refreshTokenPromise = this.refreshTokenPromise || this.refreshTokenCallback();
313
313
 
314
314
  return this.refreshTokenPromise.then(() => {
315
315
  this.refreshTokenPromise = null;
316
- logger.info('token refreshed', { isTokenNotFound });
316
+ logger$2.info('token refreshed', { isTokenNotFound });
317
317
  if (isTokenNotFound) {
318
318
  const pathParts = path.split('/');
319
319
  pathParts.pop();
@@ -4138,7 +4138,7 @@ const TRANSFER_FLOW_BLIND = 'blind';
4138
4138
 
4139
4139
  // const MINIMUM_WAZO_ENGINE_VERSION_FOR_CTI_HOLD = '20.11';
4140
4140
 
4141
- const logger$1 = IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
4141
+ IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
4142
4142
 
4143
4143
  /* */
4144
4144
 
@@ -5057,7 +5057,7 @@ const AGENTD_VERSION = '1.0';
5057
5057
  const WEBHOOKD_VERSION = '1.0';
5058
5058
  const AMID_VERSION = '1.0';
5059
5059
 
5060
- const logger$2 = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
5060
+ const logger$1 = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
5061
5061
 
5062
5062
  class ApiClient {
5063
5063
 
@@ -5109,12 +5109,12 @@ class ApiClient {
5109
5109
  }
5110
5110
 
5111
5111
  async forceRefreshToken() {
5112
- logger$2.info('forcing refresh token, calling callback');
5112
+ logger$1.info('forcing refresh token, calling callback');
5113
5113
  return this.refreshTokenCallback();
5114
5114
  }
5115
5115
 
5116
5116
  async refreshTokenCallback() {
5117
- logger$2.info('refresh token callback called', {
5117
+ logger$1.info('refresh token callback called', {
5118
5118
  refreshToken: this.refreshToken,
5119
5119
  refreshBackend: this.refreshBackend,
5120
5120
  refreshExpiration: this.refreshExpiration,
@@ -5132,7 +5132,7 @@ class ApiClient {
5132
5132
  this.isMobile,
5133
5133
  );
5134
5134
 
5135
- logger$2.info('token refreshed', { token: session.token });
5135
+ logger$1.info('token refreshed', { token: session.token });
5136
5136
 
5137
5137
  if (this.onRefreshToken) {
5138
5138
  this.onRefreshToken(session.token, session);
@@ -5305,7 +5305,7 @@ const DEFAULT_ICE_TIMEOUT = 3000;
5305
5305
  const SEND_STATS_DELAY = 5000;
5306
5306
 
5307
5307
  const states = ['STATUS_NULL', 'STATUS_NEW', 'STATUS_CONNECTING', 'STATUS_CONNECTED', 'STATUS_COMPLETED'];
5308
- const logger$3 = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-client') : console;
5308
+ const logger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-client') : console;
5309
5309
  const statsLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-stats') : console;
5310
5310
 
5311
5311
  // events
@@ -5481,13 +5481,13 @@ class WebRTCClient extends Emitter {
5481
5481
 
5482
5482
  createUserAgent(configOverrides ) {
5483
5483
  const webRTCConfiguration = this._createWebRTCConfiguration(configOverrides);
5484
- logger$3.info('sdk webrtc, creating UA', { webRTCConfiguration });
5484
+ logger.info('sdk webrtc, creating UA', { webRTCConfiguration });
5485
5485
 
5486
5486
  webRTCConfiguration.delegate = {
5487
5487
  onConnect: this.onConnect.bind(this),
5488
5488
  onDisconnect: this.onDisconnect.bind(this),
5489
5489
  onInvite: (invitation ) => {
5490
- logger$3.info('sdk webrtc on invite', {
5490
+ logger.info('sdk webrtc on invite', {
5491
5491
  method: 'delegate.onInvite',
5492
5492
  id: invitation.id,
5493
5493
  remoteURI: invitation.remoteURI,
@@ -5530,7 +5530,7 @@ class WebRTCClient extends Emitter {
5530
5530
  }
5531
5531
 
5532
5532
  onConnect() {
5533
- logger$3.info('sdk webrtc connected', { method: 'delegate.onConnect' });
5533
+ logger.info('sdk webrtc connected', { method: 'delegate.onConnect' });
5534
5534
  this.eventEmitter.emit(CONNECTED);
5535
5535
  if (!this.isRegistered() && this.registerer && this.registerer.waiting) {
5536
5536
  this.registerer.waitingToggle(false);
@@ -5539,7 +5539,7 @@ class WebRTCClient extends Emitter {
5539
5539
  }
5540
5540
 
5541
5541
  async onDisconnect(error ) {
5542
- logger$3.info('sdk webrtc disconnected', { method: 'delegate.onConnect', error });
5542
+ logger.info('sdk webrtc disconnected', { method: 'delegate.onConnect', error });
5543
5543
  this.connectionPromise = null;
5544
5544
  // The UA will attempt to reconnect automatically when an error occurred
5545
5545
  this.eventEmitter.emit(DISCONNECTED, error);
@@ -5564,37 +5564,37 @@ class WebRTCClient extends Emitter {
5564
5564
  };
5565
5565
 
5566
5566
  if (this.skipRegister) {
5567
- logger$3.info('sdk webrtc skip register...', logInfo);
5567
+ logger.info('sdk webrtc skip register...', logInfo);
5568
5568
  return Promise.resolve();
5569
5569
  }
5570
5570
 
5571
- logger$3.info('sdk webrtc registering...', logInfo);
5571
+ logger.info('sdk webrtc registering...', logInfo);
5572
5572
 
5573
5573
  if (!this.userAgent) {
5574
- logger$3.info('sdk webrtc recreating User Agent');
5574
+ logger.info('sdk webrtc recreating User Agent');
5575
5575
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
5576
5576
  }
5577
5577
  if (!this.userAgent || this.isRegistered()) {
5578
- logger$3.info('sdk webrtc registering aborted, already registered or no UA can be created');
5578
+ logger.info('sdk webrtc registering aborted, already registered or no UA can be created');
5579
5579
  return Promise.resolve();
5580
5580
  }
5581
5581
 
5582
5582
  if (this.connectionPromise || (this.registerer && this.registerer.waiting)) {
5583
- logger$3.info('sdk webrtc registering aborted due to a registration in progress.');
5583
+ logger.info('sdk webrtc registering aborted due to a registration in progress.');
5584
5584
  return Promise.resolve();
5585
5585
  }
5586
5586
 
5587
5587
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
5588
5588
 
5589
5589
  const onRegisterFailed = () => {
5590
- logger$3.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
5590
+ logger.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
5591
5591
  this.connectionPromise = null;
5592
5592
  if (this.registerer && this.registerer.waiting) {
5593
5593
  this.registerer.waitingToggle(false);
5594
5594
  }
5595
5595
 
5596
5596
  if (tries <= MAX_REGISTER_TRIES) {
5597
- logger$3.info('sdk webrtc registering, retrying...', { tries });
5597
+ logger.info('sdk webrtc registering, retrying...', { tries });
5598
5598
  setTimeout(() => this.register(tries + 1), 300);
5599
5599
  }
5600
5600
  };
@@ -5603,18 +5603,18 @@ class WebRTCClient extends Emitter {
5603
5603
  // Avoid race condition with the close method called just before register and setting userAgent to null
5604
5604
  // during the resolution of the primise.
5605
5605
  if (!this.userAgent) {
5606
- logger$3.info('sdk webrtc recreating User Agent after connection');
5606
+ logger.info('sdk webrtc recreating User Agent after connection');
5607
5607
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
5608
5608
  }
5609
5609
 
5610
- logger$3.info('sdk webrtc registering, transport connected', { registerOptions, ua: !!this.userAgent });
5610
+ logger.info('sdk webrtc registering, transport connected', { registerOptions, ua: !!this.userAgent });
5611
5611
  this.registerer = new Registerer(this.userAgent, registerOptions);
5612
5612
  this.connectionPromise = null;
5613
5613
  this._monkeyPatchRegisterer(this.registerer);
5614
5614
 
5615
5615
  // Bind registerer events
5616
5616
  this.registerer.stateChange.addListener(newState => {
5617
- logger$3.info('sdk webrtc registering, state changed', { newState });
5617
+ logger.info('sdk webrtc registering, state changed', { newState });
5618
5618
 
5619
5619
  if (newState === RegistererState.Registered && this.registerer
5620
5620
  && this.registerer.state === RegistererState.Registered) {
@@ -5627,7 +5627,7 @@ class WebRTCClient extends Emitter {
5627
5627
  const options = {
5628
5628
  requestDelegate: {
5629
5629
  onReject: response => {
5630
- logger$3.error('sdk webrtc registering, rejected', { response });
5630
+ logger.error('sdk webrtc registering, rejected', { response });
5631
5631
 
5632
5632
  onRegisterFailed();
5633
5633
  },
@@ -5635,13 +5635,13 @@ class WebRTCClient extends Emitter {
5635
5635
  };
5636
5636
 
5637
5637
  return this.registerer.register(options).catch((e) => {
5638
- logger$3.error('sdk webrtc registering, error', e);
5638
+ logger.error('sdk webrtc registering, error', e);
5639
5639
 
5640
5640
  this.eventEmitter.emit(REGISTRATION_FAILED);
5641
5641
  return e;
5642
5642
  });
5643
5643
  }).catch(error => {
5644
- logger$3.error('sdk webrtc registering, transport error', error);
5644
+ logger.error('sdk webrtc registering, transport error', error);
5645
5645
  onRegisterFailed();
5646
5646
  });
5647
5647
  }
@@ -5670,21 +5670,21 @@ class WebRTCClient extends Emitter {
5670
5670
  }
5671
5671
 
5672
5672
  unregister() {
5673
- logger$3.info('sdk webrtc unregistering..', { userAgent: !!this.userAgent, registerer: !!this.registerer });
5673
+ logger.info('sdk webrtc unregistering..', { userAgent: !!this.userAgent, registerer: !!this.registerer });
5674
5674
  if (!this.registerer) {
5675
5675
  return Promise.resolve();
5676
5676
  }
5677
5677
 
5678
5678
  try {
5679
5679
  return this.registerer.unregister().then(() => {
5680
- logger$3.info('sdk webrtc unregistered');
5680
+ logger.info('sdk webrtc unregistered');
5681
5681
  this._cleanupRegister();
5682
5682
  }).catch(e => {
5683
- logger$3.error('sdk webrtc unregistering, promise error', e);
5683
+ logger.error('sdk webrtc unregistering, promise error', e);
5684
5684
  this._cleanupRegister();
5685
5685
  });
5686
5686
  } catch (e) {
5687
- logger$3.error('sdk webrtc unregistering, error', e);
5687
+ logger.error('sdk webrtc unregistering, error', e);
5688
5688
  // Avoid issue with `undefined is not an object (evaluating 'new.target.prototype')` when triggering a new
5689
5689
  // error when the registerer is in a bad state
5690
5690
  this._cleanupRegister();
@@ -5692,7 +5692,7 @@ class WebRTCClient extends Emitter {
5692
5692
  }
5693
5693
 
5694
5694
  stop() {
5695
- logger$3.info('sdk webrtc stop', { userAgent: !!this.userAgent });
5695
+ logger.info('sdk webrtc stop', { userAgent: !!this.userAgent });
5696
5696
  if (!this.userAgent) {
5697
5697
  return Promise.resolve();
5698
5698
  }
@@ -5700,12 +5700,12 @@ class WebRTCClient extends Emitter {
5700
5700
  return this.userAgent.stop().then(() => {
5701
5701
  return this._cleanupRegister();
5702
5702
  }).catch(e => {
5703
- logger$3.warn('sdk webrtc stop, error', { message: e.message, stack: e.stack });
5703
+ logger.warn('sdk webrtc stop, error', { message: e.message, stack: e.stack });
5704
5704
  });
5705
5705
  }
5706
5706
 
5707
5707
  call(number , enableVideo , audioOnly = false, conference = false) {
5708
- logger$3.info('sdk webrtc creating call', { number, enableVideo, audioOnly });
5708
+ logger.info('sdk webrtc creating call', { number, enableVideo, audioOnly, conference });
5709
5709
  const inviterOptions = {
5710
5710
  sessionDescriptionHandlerOptionsReInvite: {
5711
5711
  conference,
@@ -5736,7 +5736,7 @@ class WebRTCClient extends Emitter {
5736
5736
  this._onAccepted(session, response.session, true);
5737
5737
  },
5738
5738
  onReject: (response ) => {
5739
- logger$3.info('on call rejected', { id: session.id, fromTag: session.fromTag });
5739
+ logger.info('on call rejected', { id: session.id, fromTag: session.fromTag });
5740
5740
  this._stopSendingStats(session);
5741
5741
  this.stopNetworkMonitoring(session);
5742
5742
 
@@ -5759,11 +5759,11 @@ class WebRTCClient extends Emitter {
5759
5759
  }
5760
5760
 
5761
5761
  answer(session , enableVideo ) {
5762
- logger$3.info('sdk webrtc answer call', { id: session.id, enableVideo });
5762
+ logger.info('sdk webrtc answer call', { id: session.id, enableVideo });
5763
5763
 
5764
5764
  if (!session || !session.accept) {
5765
5765
  const error = 'No session to answer, or not an invitation';
5766
- logger$3.warn(error);
5766
+ logger.warn(error);
5767
5767
  return Promise.reject(new Error(error));
5768
5768
  }
5769
5769
  const options = {
@@ -5773,15 +5773,15 @@ class WebRTCClient extends Emitter {
5773
5773
  return session.accept(options).then(() => {
5774
5774
  if (session.isCanceled) {
5775
5775
  const message = 'accepted a canceled session (or was canceled during the accept phase).';
5776
- logger$3.error(message, { id: session.id });
5776
+ logger.error(message, { id: session.id });
5777
5777
  this.onCallEnded(session);
5778
5778
 
5779
5779
  throw new CanceledCallError(message);
5780
5780
  }
5781
- logger$3.info('sdk webrtc answer, accepted.');
5781
+ logger.info('sdk webrtc answer, accepted.');
5782
5782
  this._onAccepted(session);
5783
5783
  }).catch(e => {
5784
- logger$3.error(`answer call error for ${session ? session.id : 'n/a'}`, e);
5784
+ logger.error(`answer call error for ${session ? session.id : 'n/a'}`, e);
5785
5785
 
5786
5786
  throw e;
5787
5787
  });
@@ -5789,7 +5789,7 @@ class WebRTCClient extends Emitter {
5789
5789
 
5790
5790
  hangup(session ) {
5791
5791
  const { state, id } = session;
5792
- logger$3.info('sdk webrtc hangup call', { id, state });
5792
+ logger.info('sdk webrtc hangup call', { id, state });
5793
5793
 
5794
5794
  try {
5795
5795
  this._stopSendingStats(session);
@@ -5818,7 +5818,7 @@ class WebRTCClient extends Emitter {
5818
5818
 
5819
5819
  return bye();
5820
5820
  } catch (error) {
5821
- logger$3.warn('sdk webrtc hangup, error', error);
5821
+ logger.warn('sdk webrtc hangup, error', error);
5822
5822
  }
5823
5823
 
5824
5824
  return null;
@@ -5836,7 +5836,7 @@ class WebRTCClient extends Emitter {
5836
5836
  // Fetch and emit an event at `interval` with session network stats
5837
5837
  startNetworkMonitoring(session , interval = 1000) {
5838
5838
  const sessionId = this.getSipSessionId(session);
5839
- logger$3.info('starting network inspection', { id: sessionId });
5839
+ logger.info('starting network inspection', { id: sessionId });
5840
5840
 
5841
5841
  this.sessionNetworkStats[sessionId] = [];
5842
5842
 
@@ -5846,7 +5846,7 @@ class WebRTCClient extends Emitter {
5846
5846
  stopNetworkMonitoring(session ) {
5847
5847
  const sessionId = this.getSipSessionId(session);
5848
5848
  const exists = sessionId in this.networkMonitoringInterval;
5849
- logger$3.info('stopping network inspection', { id: sessionId, exists });
5849
+ logger.info('stopping network inspection', { id: sessionId, exists });
5850
5850
 
5851
5851
  if (exists) {
5852
5852
  clearInterval(this.networkMonitoringInterval[sessionId]);
@@ -5856,17 +5856,17 @@ class WebRTCClient extends Emitter {
5856
5856
  }
5857
5857
 
5858
5858
  reject(session ) {
5859
- logger$3.info('sdk webrtc reject call', { id: session.id });
5859
+ logger.info('sdk webrtc reject call', { id: session.id });
5860
5860
 
5861
5861
  try {
5862
5862
  return session.reject ? session.reject() : session.cancel();
5863
5863
  } catch (e) {
5864
- logger$3.warn('Error when rejecting call', e.message, e.stack);
5864
+ logger.warn('Error when rejecting call', e.message, e.stack);
5865
5865
  }
5866
5866
  }
5867
5867
 
5868
5868
  async close() {
5869
- logger$3.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
5869
+ logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
5870
5870
  this._cleanupMedia();
5871
5871
  this.connectionPromise = null;
5872
5872
 
@@ -5897,7 +5897,7 @@ class WebRTCClient extends Emitter {
5897
5897
  // eg: "INVITE not rejectable in state Completed"
5898
5898
  }
5899
5899
  this.userAgent = null;
5900
- logger$3.info('sdk webrtc client closed');
5900
+ logger.info('sdk webrtc client closed');
5901
5901
  }
5902
5902
 
5903
5903
  getNumber(session ) {
@@ -5910,13 +5910,13 @@ class WebRTCClient extends Emitter {
5910
5910
  }
5911
5911
 
5912
5912
  mute(session ) {
5913
- logger$3.info('sdk webrtc mute', { id: session.id });
5913
+ logger.info('sdk webrtc mute', { id: session.id });
5914
5914
 
5915
5915
  this._toggleAudio(session, true);
5916
5916
  }
5917
5917
 
5918
5918
  unmute(session ) {
5919
- logger$3.info('sdk webrtc unmute', { id: session.id });
5919
+ logger.info('sdk webrtc unmute', { id: session.id });
5920
5920
 
5921
5921
  this._toggleAudio(session, false);
5922
5922
  }
@@ -5956,13 +5956,13 @@ class WebRTCClient extends Emitter {
5956
5956
  }
5957
5957
 
5958
5958
  toggleCameraOn(session ) {
5959
- logger$3.info('sdk webrtc toggle camera on', { id: session.id });
5959
+ logger.info('sdk webrtc toggle camera on', { id: session.id });
5960
5960
 
5961
5961
  this._toggleVideo(session, false);
5962
5962
  }
5963
5963
 
5964
5964
  toggleCameraOff(session ) {
5965
- logger$3.info('sdk webrtc toggle camera off', { id: session.id });
5965
+ logger.info('sdk webrtc toggle camera off', { id: session.id });
5966
5966
 
5967
5967
  this._toggleVideo(session, true);
5968
5968
  }
@@ -5971,7 +5971,7 @@ class WebRTCClient extends Emitter {
5971
5971
  const sessionId = this.getSipSessionId(session);
5972
5972
  const hasVideo = hadVideo || this.hasLocalVideo(sessionId);
5973
5973
 
5974
- logger$3.info('sdk webrtc hold', {
5974
+ logger.info('sdk webrtc hold', {
5975
5975
  sessionId,
5976
5976
  keys: Object.keys(this.heldSessions),
5977
5977
  pendingReinvite: !!session.pendingReinvite,
@@ -6020,7 +6020,7 @@ class WebRTCClient extends Emitter {
6020
6020
  const sessionId = this.getSipSessionId(session);
6021
6021
  const hasVideo = sessionId in this.heldSessions && this.heldSessions[sessionId].hasVideo;
6022
6022
 
6023
- logger$3.info('sdk webrtc unhold', {
6023
+ logger.info('sdk webrtc unhold', {
6024
6024
  sessionId,
6025
6025
  keys: Object.keys(this.heldSessions),
6026
6026
  pendingReinvite: !!session.pendingReinvite,
@@ -6168,7 +6168,7 @@ class WebRTCClient extends Emitter {
6168
6168
  if (!session.sessionDescriptionHandler) {
6169
6169
  return;
6170
6170
  }
6171
- logger$3.info('Sending DTMF', {
6171
+ logger.info('Sending DTMF', {
6172
6172
  id: this.getSipSessionId(session),
6173
6173
  tone,
6174
6174
  });
@@ -6184,7 +6184,7 @@ class WebRTCClient extends Emitter {
6184
6184
  transfer(session , target ) {
6185
6185
  this.hold(session);
6186
6186
 
6187
- logger$3.info('Transfering a session', {
6187
+ logger.info('Transfering a session', {
6188
6188
  id: this.getSipSessionId(session),
6189
6189
  target,
6190
6190
  });
@@ -6206,17 +6206,17 @@ class WebRTCClient extends Emitter {
6206
6206
  atxfer(session ) {
6207
6207
  this.hold(session);
6208
6208
 
6209
- logger$3.info('webrtc transfer started', { id: this.getSipSessionId(session) });
6209
+ logger.info('webrtc transfer started', { id: this.getSipSessionId(session) });
6210
6210
 
6211
6211
  const result = {
6212
6212
  newSession: null,
6213
6213
  init: async (target ) => {
6214
- logger$3.info('webrtc transfer initialized', { id: this.getSipSessionId(session), target });
6214
+ logger.info('webrtc transfer initialized', { id: this.getSipSessionId(session), target });
6215
6215
 
6216
6216
  result.newSession = await this.call(target);
6217
6217
  },
6218
6218
  complete: () => {
6219
- logger$3.info('webrtc transfer completed', {
6219
+ logger.info('webrtc transfer completed', {
6220
6220
  id: this.getSipSessionId(session),
6221
6221
  referId: this.getSipSessionId(result.newSession),
6222
6222
  });
@@ -6237,7 +6237,7 @@ class WebRTCClient extends Emitter {
6237
6237
  return;
6238
6238
  }
6239
6239
 
6240
- logger$3.info('send WebRTC message', { sipId: sipSession.id, contentType });
6240
+ logger.info('send WebRTC message', { sipId: sipSession.id, contentType });
6241
6241
 
6242
6242
  try {
6243
6243
  sipSession.message({
@@ -6279,7 +6279,7 @@ class WebRTCClient extends Emitter {
6279
6279
  }
6280
6280
 
6281
6281
  changeAudioOutputVolume(volume ) {
6282
- logger$3.info('Changing audio output volume', { volume });
6282
+ logger.info('Changing audio output volume', { volume });
6283
6283
 
6284
6284
  Object.values(this.audioElements).forEach(audioElement => {
6285
6285
  if (audioElement instanceof HTMLAudioElement) {
@@ -6291,7 +6291,7 @@ class WebRTCClient extends Emitter {
6291
6291
  }
6292
6292
 
6293
6293
  changeAudioOutputDevice(id ) {
6294
- logger$3.info('Changing audio output device', { id });
6294
+ logger.info('Changing audio output device', { id });
6295
6295
 
6296
6296
  Object.values(this.audioElements).forEach(audioElement => {
6297
6297
  // `setSinkId` method is not included in any flow type definitions for HTMLAudioElements but is a valid method
@@ -6308,7 +6308,7 @@ class WebRTCClient extends Emitter {
6308
6308
 
6309
6309
  changeAudioInputDevice(id , session ) {
6310
6310
  const currentId = this.getAudioDeviceId();
6311
- logger$3.info('setting audio input device', { id, currentId, session: !!session });
6311
+ logger.info('setting audio input device', { id, currentId, session: !!session });
6312
6312
 
6313
6313
  if (id === currentId) {
6314
6314
  return null;
@@ -6354,7 +6354,7 @@ class WebRTCClient extends Emitter {
6354
6354
 
6355
6355
  setVideoInputDevice(id ) {
6356
6356
  const currentId = this.getVideoDeviceId();
6357
- logger$3.info('setting video input device', { id, currentId });
6357
+ logger.info('setting video input device', { id, currentId });
6358
6358
 
6359
6359
  if (id === currentId) {
6360
6360
  return null;
@@ -6379,7 +6379,7 @@ class WebRTCClient extends Emitter {
6379
6379
  const sessionId = this.getSipSessionId(session);
6380
6380
  const localStream = this.getLocalStream(sessionId);
6381
6381
 
6382
- logger$3.info('changing video input device', { id, sessionId });
6382
+ logger.info('changing video input device', { id, sessionId });
6383
6383
 
6384
6384
  // Release old video stream
6385
6385
  if (localStream) {
@@ -6447,7 +6447,7 @@ class WebRTCClient extends Emitter {
6447
6447
  const shouldDoScreenSharing = newConstraints && newConstraints.screen;
6448
6448
  const desktop = newConstraints && newConstraints.desktop;
6449
6449
 
6450
- logger$3.info('Sending reinvite', {
6450
+ logger.info('Sending reinvite', {
6451
6451
  id: this.getSipSessionId(sipSession),
6452
6452
  newConstraints,
6453
6453
  conference,
@@ -6485,7 +6485,7 @@ class WebRTCClient extends Emitter {
6485
6485
  sipSession.incomingInviteRequest.message.body = response.message.body;
6486
6486
  }
6487
6487
 
6488
- logger$3.info('on re-INVITE accepted', {
6488
+ logger.info('on re-INVITE accepted', {
6489
6489
  id: this.getSipSessionId(sipSession),
6490
6490
  wasMuted,
6491
6491
  shouldDoScreenSharing,
@@ -6660,7 +6660,7 @@ class WebRTCClient extends Emitter {
6660
6660
  }
6661
6661
 
6662
6662
  startHeartbeat() {
6663
- logger$3.info('sdk webrtc start heartbeat', { userAgent: !!this.userAgent });
6663
+ logger.info('sdk webrtc start heartbeat', { userAgent: !!this.userAgent });
6664
6664
  if (!this.userAgent) {
6665
6665
  this.heartbeat.stop();
6666
6666
  return;
@@ -6673,7 +6673,7 @@ class WebRTCClient extends Emitter {
6673
6673
  }
6674
6674
 
6675
6675
  stopHeartbeat() {
6676
- logger$3.info('sdk webrtc stop heartbeat');
6676
+ logger.info('sdk webrtc stop heartbeat');
6677
6677
  this.heartbeat.stop();
6678
6678
  }
6679
6679
 
@@ -6694,7 +6694,7 @@ class WebRTCClient extends Emitter {
6694
6694
  }
6695
6695
 
6696
6696
  attemptReconnection() {
6697
- logger$3.info('attempt reconnection', { userAgent: !!this.userAgent });
6697
+ logger.info('attempt reconnection', { userAgent: !!this.userAgent });
6698
6698
  if (!this.userAgent) {
6699
6699
  return;
6700
6700
  }
@@ -6719,7 +6719,7 @@ class WebRTCClient extends Emitter {
6719
6719
  return;
6720
6720
  }
6721
6721
 
6722
- logger$3.info('setting local media stream', {
6722
+ logger.info('setting local media stream', {
6723
6723
  sipSessionId,
6724
6724
  tracks: newStream ? newStream.getTracks() : null,
6725
6725
  });
@@ -6736,7 +6736,7 @@ class WebRTCClient extends Emitter {
6736
6736
 
6737
6737
  const oldStream = this.getLocalStream(sipSessionId);
6738
6738
 
6739
- logger$3.info('updating local stream', {
6739
+ logger.info('updating local stream', {
6740
6740
  sipSessionId,
6741
6741
  oldStream: !!oldStream,
6742
6742
  tracks: newStream.getTracks(),
@@ -6756,7 +6756,7 @@ class WebRTCClient extends Emitter {
6756
6756
  const remoteStream = this.getRemoteStream(sessionId);
6757
6757
  const pc = this.getPeerConnection(sessionId);
6758
6758
 
6759
- logger$3.info('Updating remote stream', {
6759
+ logger.info('Updating remote stream', {
6760
6760
  sessionId,
6761
6761
  tracks: remoteStream ? remoteStream.getTracks() : null,
6762
6762
  receiverTracks: pc && pc.getReceivers ? pc.getReceivers().map(receiver => receiver.track) : null,
@@ -6781,14 +6781,16 @@ class WebRTCClient extends Emitter {
6781
6781
  const screenSharing = constraints && 'screen' in constraints ? constraints.screen : false;
6782
6782
  const isDesktop = constraints && 'desktop' in constraints ? constraints.desktop : false;
6783
6783
  const withAudio = constraints && 'audio' in constraints ? constraints.audio : true;
6784
+ const mandatoryVideo = constraints && typeof constraints.video === 'object' ? constraints.video.mandatory : {};
6784
6785
 
6785
- logger$3.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
6786
+ logger.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
6786
6787
 
6787
6788
  return {
6788
6789
  constraints: {
6789
6790
  // Exact constraint are not supported with `getDisplayMedia` and we must have a video=false in desktop screenshare
6790
6791
  audio: screenSharing ? !isDesktop : (withAudio ? this._getAudioConstraints() : false),
6791
- video: screenSharing ? (isDesktop ? ({ mandatory: { chromeMediaSource: 'desktop' } }) : { cursor: 'always' })
6792
+ video: screenSharing ? (isDesktop
6793
+ ? ({ mandatory: { chromeMediaSource: 'desktop', ...(mandatoryVideo || {}) } }) : { cursor: 'always' })
6792
6794
  : this._getVideoConstraints(enableVideo),
6793
6795
  screen: screenSharing,
6794
6796
  desktop: isDesktop,
@@ -6831,7 +6833,7 @@ class WebRTCClient extends Emitter {
6831
6833
  }
6832
6834
 
6833
6835
  _onTransportError() {
6834
- logger$3.error('on transport error');
6836
+ logger.error('on transport error');
6835
6837
  this.eventEmitter.emit(TRANSPORT_ERROR);
6836
6838
  this.attemptReconnection();
6837
6839
  }
@@ -6840,7 +6842,7 @@ class WebRTCClient extends Emitter {
6840
6842
  const body = message && typeof message === 'object' ? message.data : message;
6841
6843
  if (body && body.indexOf('200 OK') !== -1) {
6842
6844
  if (this.hasHeartbeat()) {
6843
- logger$3.info('on heartbeat received from Asterisk', { hasHeartbeat: this.hasHeartbeat() });
6845
+ logger.info('on heartbeat received from Asterisk', { hasHeartbeat: this.hasHeartbeat() });
6844
6846
 
6845
6847
  this.heartbeat.onHeartbeat();
6846
6848
  if (this.heartbeatCb) {
@@ -6851,7 +6853,7 @@ class WebRTCClient extends Emitter {
6851
6853
  }
6852
6854
 
6853
6855
  async _onHeartbeatTimeout() {
6854
- logger$3.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
6856
+ logger.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
6855
6857
 
6856
6858
  if (this.heartbeatTimeoutCb) {
6857
6859
  this.heartbeatTimeoutCb();
@@ -6863,7 +6865,7 @@ class WebRTCClient extends Emitter {
6863
6865
  try {
6864
6866
  await this.userAgent.transport.disconnect();
6865
6867
  } catch (e) {
6866
- logger$3.error('Transport disconnection after heartbeat timeout, error', e);
6868
+ logger.error('Transport disconnection after heartbeat timeout, error', e);
6867
6869
  }
6868
6870
  }
6869
6871
 
@@ -6896,31 +6898,31 @@ class WebRTCClient extends Emitter {
6896
6898
  }
6897
6899
 
6898
6900
  _connectIfNeeded() {
6899
- logger$3.info('connect if needed, checking', { connected: this.isConnected() });
6901
+ logger.info('connect if needed, checking', { connected: this.isConnected() });
6900
6902
  if (!this.userAgent) {
6901
- logger$3.info('need to recreate User Agent');
6903
+ logger.info('need to recreate User Agent');
6902
6904
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
6903
6905
  }
6904
6906
 
6905
6907
  if (this.isConnected()) {
6906
- logger$3.info('webrtc sdk, already connected');
6908
+ logger.info('webrtc sdk, already connected');
6907
6909
  return Promise.resolve();
6908
6910
  }
6909
6911
 
6910
6912
  if (this.isConnecting()) {
6911
- logger$3.info('webrtc sdk, already connecting...');
6913
+ logger.info('webrtc sdk, already connecting...');
6912
6914
 
6913
6915
  this.connectionPromise = this.userAgent.transport.connectPromise;
6914
6916
  return this.connectionPromise;
6915
6917
  }
6916
6918
 
6917
6919
  if (this.connectionPromise) {
6918
- logger$3.info('webrtc sdk, connection promise connecting...');
6920
+ logger.info('webrtc sdk, connection promise connecting...');
6919
6921
  // $FlowFixMe
6920
6922
  return this.connectionPromise;
6921
6923
  }
6922
6924
 
6923
- logger$3.info('WebRTC UA needs to connect');
6925
+ logger.info('WebRTC UA needs to connect');
6924
6926
 
6925
6927
  // Force UA to reconnect
6926
6928
  if (this.userAgent && this.userAgent.state !== UserAgentState.Stopped) {
@@ -7045,7 +7047,7 @@ class WebRTCClient extends Emitter {
7045
7047
 
7046
7048
  sdh.peerConnectionDelegate = {
7047
7049
  onicecandidateerror: (error ) => {
7048
- logger$3.error('on icecandidate error', {
7050
+ logger.error('on icecandidate error', {
7049
7051
  address: error.address,
7050
7052
  port: error.port,
7051
7053
  errorCode: error.errorCode,
@@ -7074,7 +7076,7 @@ class WebRTCClient extends Emitter {
7074
7076
  updatedNumber = session.assertedIdentity.uri.normal.user;
7075
7077
  updatedCalleeName = session.assertedIdentity.displayName || updatedNumber;
7076
7078
  }
7077
- logger$3.info('re-invite received', { updatedCalleeName, updatedNumber, hadRemoteVideo });
7079
+ logger.info('re-invite received', { updatedCalleeName, updatedNumber, hadRemoteVideo });
7078
7080
 
7079
7081
  // Useful to know if it's a video upgrade or an unhold from a remote peer with a video stream
7080
7082
 
@@ -7095,7 +7097,7 @@ class WebRTCClient extends Emitter {
7095
7097
  }
7096
7098
 
7097
7099
  _onAccepted(session , sessionDialog , withEvent = true) {
7098
- logger$3.info('on call accepted', { id: session.id, remoteTag: session.remoteTag });
7100
+ logger.info('on call accepted', { id: session.id, remoteTag: session.remoteTag });
7099
7101
 
7100
7102
  this.storeSipSession(session);
7101
7103
 
@@ -7107,7 +7109,7 @@ class WebRTCClient extends Emitter {
7107
7109
  const onTrack = (event ) => {
7108
7110
  const isAudioOnly = this._isAudioOnly(session);
7109
7111
  const { kind, label, readyState, id, muted } = event.track;
7110
- logger$3.info('on track event', { isAudioOnly, kind, label, readyState, id, muted });
7112
+ logger.info('on track event', { isAudioOnly, kind, label, readyState, id, muted });
7111
7113
 
7112
7114
  // Stop video track in audio only mode
7113
7115
  if (isAudioOnly && kind === 'video') {
@@ -7123,12 +7125,14 @@ class WebRTCClient extends Emitter {
7123
7125
 
7124
7126
  session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
7125
7127
 
7126
- pc.oniceconnectionstatechange = () => {
7127
- logger$3.info('on ice connection state changed', { state: pc.iceConnectionState });
7128
- if (pc.iceConnectionState === 'disconnected') {
7129
- this.eventEmitter.emit(ON_DISCONNECTED);
7130
- }
7131
- };
7128
+ if (pc) {
7129
+ pc.oniceconnectionstatechange = () => {
7130
+ logger.info('on ice connection state changed', { state: pc.iceConnectionState });
7131
+ if (pc.iceConnectionState === 'disconnected') {
7132
+ this.eventEmitter.emit(ON_DISCONNECTED);
7133
+ }
7134
+ };
7135
+ }
7132
7136
 
7133
7137
  if (withEvent) {
7134
7138
  this.eventEmitter.emit(ACCEPTED, session, sessionDialog);
@@ -7297,10 +7301,10 @@ class WebRTCClient extends Emitter {
7297
7301
 
7298
7302
  _stopSendingStats(session ) {
7299
7303
  const sessionId = this.getSipSessionId(session);
7300
- logger$3.trace('Check for stopping stats', { sessionId, ids: Object.keys(this.statsIntervals) });
7304
+ logger.trace('Check for stopping stats', { sessionId, ids: Object.keys(this.statsIntervals) });
7301
7305
 
7302
7306
  if (sessionId in this.statsIntervals) {
7303
- logger$3.trace('Stop sending stats for call', { sessionId });
7307
+ logger.trace('Stop sending stats for call', { sessionId });
7304
7308
  this.statsIntervals[sessionId]();
7305
7309
  delete this.statsIntervals[sessionId];
7306
7310
  }
@@ -7316,7 +7320,7 @@ class WebRTCClient extends Emitter {
7316
7320
  try {
7317
7321
  await this.userAgent.transport.disconnect();
7318
7322
  } catch (e) {
7319
- logger$3.error('WebRTC transport disconnect, error', e);
7323
+ logger.error('WebRTC transport disconnect, error', e);
7320
7324
  }
7321
7325
  }
7322
7326
  }
@@ -7338,13 +7342,17 @@ class WebRTCClient extends Emitter {
7338
7342
  const nbStats = this.sessionNetworkStats[sessionId].length;
7339
7343
  const lastNetworkStats = this.sessionNetworkStats[sessionId][nbStats - 1];
7340
7344
  const lastAudioSent = lastNetworkStats ? lastNetworkStats.audioBytesSent : 0;
7345
+ const lastAudioContentSent = lastNetworkStats ? lastNetworkStats.audioContentSent : 0;
7341
7346
  const lastVideoSent = lastNetworkStats ? lastNetworkStats.videoBytesSent : 0;
7342
7347
  const lastAudioReceived = lastNetworkStats ? lastNetworkStats.audioBytesReceived : 0;
7348
+ const lastAudioContentReceived = lastNetworkStats ? lastNetworkStats.audioContentReceived : 0;
7343
7349
  const lastVideoReceived = lastNetworkStats ? lastNetworkStats.videoBytesReceived : 0;
7344
7350
  const lastTransportSent = lastNetworkStats ? lastNetworkStats.transportSent : 0;
7345
7351
  const lastTransportReceived = lastNetworkStats ? lastNetworkStats.transportReceived : 0;
7346
- let audioBytesSent = 0;
7347
- let audioBytesReceived = 0;
7352
+ let audioBytesSent = 0; // content + header
7353
+ let audioBytesReceived = 0; // content + header
7354
+ let audioContentSent = 0; // useful to detect blank call
7355
+ let audioContentReceived = 0;
7348
7356
  let videoBytesSent = 0;
7349
7357
  let videoBytesReceived = 0;
7350
7358
  let transportSent = 0;
@@ -7354,6 +7362,7 @@ class WebRTCClient extends Emitter {
7354
7362
  stats.forEach(report => {
7355
7363
  if (report.type === 'outbound-rtp' && report.kind === 'audio') {
7356
7364
  audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
7365
+ audioContentSent += Number(report.bytesSent);
7357
7366
  }
7358
7367
  if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
7359
7368
  audioBytesSent += Number(report.bytesSent);
@@ -7365,6 +7374,7 @@ class WebRTCClient extends Emitter {
7365
7374
  packetsLost += Number(report.packetsLost);
7366
7375
  networkStats.packetsReceived = Number(report.packetsReceived);
7367
7376
  audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
7377
+ audioContentReceived += Number(report.bytesReceived);
7368
7378
  }
7369
7379
  if (report.type === 'inbound-rtp' && report.kind === 'video') {
7370
7380
  videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
@@ -7393,10 +7403,17 @@ class WebRTCClient extends Emitter {
7393
7403
  });
7394
7404
 
7395
7405
  networkStats.packetsLost = packetsLost;
7406
+
7396
7407
  networkStats.totalAudioBytesSent = audioBytesSent;
7397
7408
  networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
7398
7409
  networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
7399
7410
  networkStats.audioBytesReceived = audioBytesReceived;
7411
+
7412
+ networkStats.totalAudioContentSent = audioContentSent;
7413
+ networkStats.audioContentSent = audioContentSent - lastAudioContentSent;
7414
+ networkStats.totalAudioBytesReceived = audioContentReceived - lastAudioContentReceived;
7415
+ networkStats.audioContentReceived = audioContentReceived;
7416
+
7400
7417
  networkStats.totalVideoBytesSent = videoBytesSent;
7401
7418
  networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
7402
7419
  networkStats.totalVideoBytesReceived = videoBytesReceived;