@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
@@ -5484,13 +5484,13 @@ class WebRTCClient extends Emitter {
5484
5484
 
5485
5485
  createUserAgent(configOverrides ) {
5486
5486
  const webRTCConfiguration = this._createWebRTCConfiguration(configOverrides);
5487
- logger$3.info('sdk webrtc, creating UA', { webRTCConfiguration });
5487
+ logger.info('sdk webrtc, creating UA', { webRTCConfiguration });
5488
5488
 
5489
5489
  webRTCConfiguration.delegate = {
5490
5490
  onConnect: this.onConnect.bind(this),
5491
5491
  onDisconnect: this.onDisconnect.bind(this),
5492
5492
  onInvite: (invitation ) => {
5493
- logger$3.info('sdk webrtc on invite', {
5493
+ logger.info('sdk webrtc on invite', {
5494
5494
  method: 'delegate.onInvite',
5495
5495
  id: invitation.id,
5496
5496
  remoteURI: invitation.remoteURI,
@@ -5533,7 +5533,7 @@ class WebRTCClient extends Emitter {
5533
5533
  }
5534
5534
 
5535
5535
  onConnect() {
5536
- logger$3.info('sdk webrtc connected', { method: 'delegate.onConnect' });
5536
+ logger.info('sdk webrtc connected', { method: 'delegate.onConnect' });
5537
5537
  this.eventEmitter.emit(CONNECTED);
5538
5538
  if (!this.isRegistered() && this.registerer && this.registerer.waiting) {
5539
5539
  this.registerer.waitingToggle(false);
@@ -5542,7 +5542,7 @@ class WebRTCClient extends Emitter {
5542
5542
  }
5543
5543
 
5544
5544
  async onDisconnect(error ) {
5545
- logger$3.info('sdk webrtc disconnected', { method: 'delegate.onConnect', error });
5545
+ logger.info('sdk webrtc disconnected', { method: 'delegate.onConnect', error });
5546
5546
  this.connectionPromise = null;
5547
5547
  // The UA will attempt to reconnect automatically when an error occurred
5548
5548
  this.eventEmitter.emit(DISCONNECTED, error);
@@ -5567,37 +5567,37 @@ class WebRTCClient extends Emitter {
5567
5567
  };
5568
5568
 
5569
5569
  if (this.skipRegister) {
5570
- logger$3.info('sdk webrtc skip register...', logInfo);
5570
+ logger.info('sdk webrtc skip register...', logInfo);
5571
5571
  return Promise.resolve();
5572
5572
  }
5573
5573
 
5574
- logger$3.info('sdk webrtc registering...', logInfo);
5574
+ logger.info('sdk webrtc registering...', logInfo);
5575
5575
 
5576
5576
  if (!this.userAgent) {
5577
- logger$3.info('sdk webrtc recreating User Agent');
5577
+ logger.info('sdk webrtc recreating User Agent');
5578
5578
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
5579
5579
  }
5580
5580
  if (!this.userAgent || this.isRegistered()) {
5581
- logger$3.info('sdk webrtc registering aborted, already registered or no UA can be created');
5581
+ logger.info('sdk webrtc registering aborted, already registered or no UA can be created');
5582
5582
  return Promise.resolve();
5583
5583
  }
5584
5584
 
5585
5585
  if (this.connectionPromise || (this.registerer && this.registerer.waiting)) {
5586
- logger$3.info('sdk webrtc registering aborted due to a registration in progress.');
5586
+ logger.info('sdk webrtc registering aborted due to a registration in progress.');
5587
5587
  return Promise.resolve();
5588
5588
  }
5589
5589
 
5590
5590
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
5591
5591
 
5592
5592
  const onRegisterFailed = () => {
5593
- logger$3.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
5593
+ logger.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
5594
5594
  this.connectionPromise = null;
5595
5595
  if (this.registerer && this.registerer.waiting) {
5596
5596
  this.registerer.waitingToggle(false);
5597
5597
  }
5598
5598
 
5599
5599
  if (tries <= MAX_REGISTER_TRIES) {
5600
- logger$3.info('sdk webrtc registering, retrying...', { tries });
5600
+ logger.info('sdk webrtc registering, retrying...', { tries });
5601
5601
  setTimeout(() => this.register(tries + 1), 300);
5602
5602
  }
5603
5603
  };
@@ -5606,18 +5606,18 @@ class WebRTCClient extends Emitter {
5606
5606
  // Avoid race condition with the close method called just before register and setting userAgent to null
5607
5607
  // during the resolution of the primise.
5608
5608
  if (!this.userAgent) {
5609
- logger$3.info('sdk webrtc recreating User Agent after connection');
5609
+ logger.info('sdk webrtc recreating User Agent after connection');
5610
5610
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
5611
5611
  }
5612
5612
 
5613
- logger$3.info('sdk webrtc registering, transport connected', { registerOptions, ua: !!this.userAgent });
5613
+ logger.info('sdk webrtc registering, transport connected', { registerOptions, ua: !!this.userAgent });
5614
5614
  this.registerer = new Registerer(this.userAgent, registerOptions);
5615
5615
  this.connectionPromise = null;
5616
5616
  this._monkeyPatchRegisterer(this.registerer);
5617
5617
 
5618
5618
  // Bind registerer events
5619
5619
  this.registerer.stateChange.addListener(newState => {
5620
- logger$3.info('sdk webrtc registering, state changed', { newState });
5620
+ logger.info('sdk webrtc registering, state changed', { newState });
5621
5621
 
5622
5622
  if (newState === RegistererState.Registered && this.registerer
5623
5623
  && this.registerer.state === RegistererState.Registered) {
@@ -5630,7 +5630,7 @@ class WebRTCClient extends Emitter {
5630
5630
  const options = {
5631
5631
  requestDelegate: {
5632
5632
  onReject: response => {
5633
- logger$3.error('sdk webrtc registering, rejected', { response });
5633
+ logger.error('sdk webrtc registering, rejected', { response });
5634
5634
 
5635
5635
  onRegisterFailed();
5636
5636
  },
@@ -5638,13 +5638,13 @@ class WebRTCClient extends Emitter {
5638
5638
  };
5639
5639
 
5640
5640
  return this.registerer.register(options).catch((e) => {
5641
- logger$3.error('sdk webrtc registering, error', e);
5641
+ logger.error('sdk webrtc registering, error', e);
5642
5642
 
5643
5643
  this.eventEmitter.emit(REGISTRATION_FAILED);
5644
5644
  return e;
5645
5645
  });
5646
5646
  }).catch(error => {
5647
- logger$3.error('sdk webrtc registering, transport error', error);
5647
+ logger.error('sdk webrtc registering, transport error', error);
5648
5648
  onRegisterFailed();
5649
5649
  });
5650
5650
  }
@@ -5673,21 +5673,21 @@ class WebRTCClient extends Emitter {
5673
5673
  }
5674
5674
 
5675
5675
  unregister() {
5676
- logger$3.info('sdk webrtc unregistering..', { userAgent: !!this.userAgent, registerer: !!this.registerer });
5676
+ logger.info('sdk webrtc unregistering..', { userAgent: !!this.userAgent, registerer: !!this.registerer });
5677
5677
  if (!this.registerer) {
5678
5678
  return Promise.resolve();
5679
5679
  }
5680
5680
 
5681
5681
  try {
5682
5682
  return this.registerer.unregister().then(() => {
5683
- logger$3.info('sdk webrtc unregistered');
5683
+ logger.info('sdk webrtc unregistered');
5684
5684
  this._cleanupRegister();
5685
5685
  }).catch(e => {
5686
- logger$3.error('sdk webrtc unregistering, promise error', e);
5686
+ logger.error('sdk webrtc unregistering, promise error', e);
5687
5687
  this._cleanupRegister();
5688
5688
  });
5689
5689
  } catch (e) {
5690
- logger$3.error('sdk webrtc unregistering, error', e);
5690
+ logger.error('sdk webrtc unregistering, error', e);
5691
5691
  // Avoid issue with `undefined is not an object (evaluating 'new.target.prototype')` when triggering a new
5692
5692
  // error when the registerer is in a bad state
5693
5693
  this._cleanupRegister();
@@ -5695,7 +5695,7 @@ class WebRTCClient extends Emitter {
5695
5695
  }
5696
5696
 
5697
5697
  stop() {
5698
- logger$3.info('sdk webrtc stop', { userAgent: !!this.userAgent });
5698
+ logger.info('sdk webrtc stop', { userAgent: !!this.userAgent });
5699
5699
  if (!this.userAgent) {
5700
5700
  return Promise.resolve();
5701
5701
  }
@@ -5703,12 +5703,12 @@ class WebRTCClient extends Emitter {
5703
5703
  return this.userAgent.stop().then(() => {
5704
5704
  return this._cleanupRegister();
5705
5705
  }).catch(e => {
5706
- logger$3.warn('sdk webrtc stop, error', { message: e.message, stack: e.stack });
5706
+ logger.warn('sdk webrtc stop, error', { message: e.message, stack: e.stack });
5707
5707
  });
5708
5708
  }
5709
5709
 
5710
5710
  call(number , enableVideo , audioOnly = false, conference = false) {
5711
- logger$3.info('sdk webrtc creating call', { number, enableVideo, audioOnly });
5711
+ logger.info('sdk webrtc creating call', { number, enableVideo, audioOnly, conference });
5712
5712
  const inviterOptions = {
5713
5713
  sessionDescriptionHandlerOptionsReInvite: {
5714
5714
  conference,
@@ -5739,7 +5739,7 @@ class WebRTCClient extends Emitter {
5739
5739
  this._onAccepted(session, response.session, true);
5740
5740
  },
5741
5741
  onReject: (response ) => {
5742
- logger$3.info('on call rejected', { id: session.id, fromTag: session.fromTag });
5742
+ logger.info('on call rejected', { id: session.id, fromTag: session.fromTag });
5743
5743
  this._stopSendingStats(session);
5744
5744
  this.stopNetworkMonitoring(session);
5745
5745
 
@@ -5762,11 +5762,11 @@ class WebRTCClient extends Emitter {
5762
5762
  }
5763
5763
 
5764
5764
  answer(session , enableVideo ) {
5765
- logger$3.info('sdk webrtc answer call', { id: session.id, enableVideo });
5765
+ logger.info('sdk webrtc answer call', { id: session.id, enableVideo });
5766
5766
 
5767
5767
  if (!session || !session.accept) {
5768
5768
  const error = 'No session to answer, or not an invitation';
5769
- logger$3.warn(error);
5769
+ logger.warn(error);
5770
5770
  return Promise.reject(new Error(error));
5771
5771
  }
5772
5772
  const options = {
@@ -5776,15 +5776,15 @@ class WebRTCClient extends Emitter {
5776
5776
  return session.accept(options).then(() => {
5777
5777
  if (session.isCanceled) {
5778
5778
  const message = 'accepted a canceled session (or was canceled during the accept phase).';
5779
- logger$3.error(message, { id: session.id });
5779
+ logger.error(message, { id: session.id });
5780
5780
  this.onCallEnded(session);
5781
5781
 
5782
5782
  throw new CanceledCallError(message);
5783
5783
  }
5784
- logger$3.info('sdk webrtc answer, accepted.');
5784
+ logger.info('sdk webrtc answer, accepted.');
5785
5785
  this._onAccepted(session);
5786
5786
  }).catch(e => {
5787
- logger$3.error(`answer call error for ${session ? session.id : 'n/a'}`, e);
5787
+ logger.error(`answer call error for ${session ? session.id : 'n/a'}`, e);
5788
5788
 
5789
5789
  throw e;
5790
5790
  });
@@ -5792,7 +5792,7 @@ class WebRTCClient extends Emitter {
5792
5792
 
5793
5793
  hangup(session ) {
5794
5794
  const { state, id } = session;
5795
- logger$3.info('sdk webrtc hangup call', { id, state });
5795
+ logger.info('sdk webrtc hangup call', { id, state });
5796
5796
 
5797
5797
  try {
5798
5798
  this._stopSendingStats(session);
@@ -5821,7 +5821,7 @@ class WebRTCClient extends Emitter {
5821
5821
 
5822
5822
  return bye();
5823
5823
  } catch (error) {
5824
- logger$3.warn('sdk webrtc hangup, error', error);
5824
+ logger.warn('sdk webrtc hangup, error', error);
5825
5825
  }
5826
5826
 
5827
5827
  return null;
@@ -5839,7 +5839,7 @@ class WebRTCClient extends Emitter {
5839
5839
  // Fetch and emit an event at `interval` with session network stats
5840
5840
  startNetworkMonitoring(session , interval = 1000) {
5841
5841
  const sessionId = this.getSipSessionId(session);
5842
- logger$3.info('starting network inspection', { id: sessionId });
5842
+ logger.info('starting network inspection', { id: sessionId });
5843
5843
 
5844
5844
  this.sessionNetworkStats[sessionId] = [];
5845
5845
 
@@ -5849,7 +5849,7 @@ class WebRTCClient extends Emitter {
5849
5849
  stopNetworkMonitoring(session ) {
5850
5850
  const sessionId = this.getSipSessionId(session);
5851
5851
  const exists = sessionId in this.networkMonitoringInterval;
5852
- logger$3.info('stopping network inspection', { id: sessionId, exists });
5852
+ logger.info('stopping network inspection', { id: sessionId, exists });
5853
5853
 
5854
5854
  if (exists) {
5855
5855
  clearInterval(this.networkMonitoringInterval[sessionId]);
@@ -5859,17 +5859,17 @@ class WebRTCClient extends Emitter {
5859
5859
  }
5860
5860
 
5861
5861
  reject(session ) {
5862
- logger$3.info('sdk webrtc reject call', { id: session.id });
5862
+ logger.info('sdk webrtc reject call', { id: session.id });
5863
5863
 
5864
5864
  try {
5865
5865
  return session.reject ? session.reject() : session.cancel();
5866
5866
  } catch (e) {
5867
- logger$3.warn('Error when rejecting call', e.message, e.stack);
5867
+ logger.warn('Error when rejecting call', e.message, e.stack);
5868
5868
  }
5869
5869
  }
5870
5870
 
5871
5871
  async close() {
5872
- logger$3.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
5872
+ logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
5873
5873
  this._cleanupMedia();
5874
5874
  this.connectionPromise = null;
5875
5875
 
@@ -5900,7 +5900,7 @@ class WebRTCClient extends Emitter {
5900
5900
  // eg: "INVITE not rejectable in state Completed"
5901
5901
  }
5902
5902
  this.userAgent = null;
5903
- logger$3.info('sdk webrtc client closed');
5903
+ logger.info('sdk webrtc client closed');
5904
5904
  }
5905
5905
 
5906
5906
  getNumber(session ) {
@@ -5913,13 +5913,13 @@ class WebRTCClient extends Emitter {
5913
5913
  }
5914
5914
 
5915
5915
  mute(session ) {
5916
- logger$3.info('sdk webrtc mute', { id: session.id });
5916
+ logger.info('sdk webrtc mute', { id: session.id });
5917
5917
 
5918
5918
  this._toggleAudio(session, true);
5919
5919
  }
5920
5920
 
5921
5921
  unmute(session ) {
5922
- logger$3.info('sdk webrtc unmute', { id: session.id });
5922
+ logger.info('sdk webrtc unmute', { id: session.id });
5923
5923
 
5924
5924
  this._toggleAudio(session, false);
5925
5925
  }
@@ -5959,13 +5959,13 @@ class WebRTCClient extends Emitter {
5959
5959
  }
5960
5960
 
5961
5961
  toggleCameraOn(session ) {
5962
- logger$3.info('sdk webrtc toggle camera on', { id: session.id });
5962
+ logger.info('sdk webrtc toggle camera on', { id: session.id });
5963
5963
 
5964
5964
  this._toggleVideo(session, false);
5965
5965
  }
5966
5966
 
5967
5967
  toggleCameraOff(session ) {
5968
- logger$3.info('sdk webrtc toggle camera off', { id: session.id });
5968
+ logger.info('sdk webrtc toggle camera off', { id: session.id });
5969
5969
 
5970
5970
  this._toggleVideo(session, true);
5971
5971
  }
@@ -5974,7 +5974,7 @@ class WebRTCClient extends Emitter {
5974
5974
  const sessionId = this.getSipSessionId(session);
5975
5975
  const hasVideo = hadVideo || this.hasLocalVideo(sessionId);
5976
5976
 
5977
- logger$3.info('sdk webrtc hold', {
5977
+ logger.info('sdk webrtc hold', {
5978
5978
  sessionId,
5979
5979
  keys: Object.keys(this.heldSessions),
5980
5980
  pendingReinvite: !!session.pendingReinvite,
@@ -6023,7 +6023,7 @@ class WebRTCClient extends Emitter {
6023
6023
  const sessionId = this.getSipSessionId(session);
6024
6024
  const hasVideo = sessionId in this.heldSessions && this.heldSessions[sessionId].hasVideo;
6025
6025
 
6026
- logger$3.info('sdk webrtc unhold', {
6026
+ logger.info('sdk webrtc unhold', {
6027
6027
  sessionId,
6028
6028
  keys: Object.keys(this.heldSessions),
6029
6029
  pendingReinvite: !!session.pendingReinvite,
@@ -6171,7 +6171,7 @@ class WebRTCClient extends Emitter {
6171
6171
  if (!session.sessionDescriptionHandler) {
6172
6172
  return;
6173
6173
  }
6174
- logger$3.info('Sending DTMF', {
6174
+ logger.info('Sending DTMF', {
6175
6175
  id: this.getSipSessionId(session),
6176
6176
  tone,
6177
6177
  });
@@ -6187,7 +6187,7 @@ class WebRTCClient extends Emitter {
6187
6187
  transfer(session , target ) {
6188
6188
  this.hold(session);
6189
6189
 
6190
- logger$3.info('Transfering a session', {
6190
+ logger.info('Transfering a session', {
6191
6191
  id: this.getSipSessionId(session),
6192
6192
  target,
6193
6193
  });
@@ -6209,17 +6209,17 @@ class WebRTCClient extends Emitter {
6209
6209
  atxfer(session ) {
6210
6210
  this.hold(session);
6211
6211
 
6212
- logger$3.info('webrtc transfer started', { id: this.getSipSessionId(session) });
6212
+ logger.info('webrtc transfer started', { id: this.getSipSessionId(session) });
6213
6213
 
6214
6214
  const result = {
6215
6215
  newSession: null,
6216
6216
  init: async (target ) => {
6217
- logger$3.info('webrtc transfer initialized', { id: this.getSipSessionId(session), target });
6217
+ logger.info('webrtc transfer initialized', { id: this.getSipSessionId(session), target });
6218
6218
 
6219
6219
  result.newSession = await this.call(target);
6220
6220
  },
6221
6221
  complete: () => {
6222
- logger$3.info('webrtc transfer completed', {
6222
+ logger.info('webrtc transfer completed', {
6223
6223
  id: this.getSipSessionId(session),
6224
6224
  referId: this.getSipSessionId(result.newSession),
6225
6225
  });
@@ -6240,7 +6240,7 @@ class WebRTCClient extends Emitter {
6240
6240
  return;
6241
6241
  }
6242
6242
 
6243
- logger$3.info('send WebRTC message', { sipId: sipSession.id, contentType });
6243
+ logger.info('send WebRTC message', { sipId: sipSession.id, contentType });
6244
6244
 
6245
6245
  try {
6246
6246
  sipSession.message({
@@ -6282,7 +6282,7 @@ class WebRTCClient extends Emitter {
6282
6282
  }
6283
6283
 
6284
6284
  changeAudioOutputVolume(volume ) {
6285
- logger$3.info('Changing audio output volume', { volume });
6285
+ logger.info('Changing audio output volume', { volume });
6286
6286
 
6287
6287
  Object.values(this.audioElements).forEach(audioElement => {
6288
6288
  if (audioElement instanceof HTMLAudioElement) {
@@ -6294,7 +6294,7 @@ class WebRTCClient extends Emitter {
6294
6294
  }
6295
6295
 
6296
6296
  changeAudioOutputDevice(id ) {
6297
- logger$3.info('Changing audio output device', { id });
6297
+ logger.info('Changing audio output device', { id });
6298
6298
 
6299
6299
  Object.values(this.audioElements).forEach(audioElement => {
6300
6300
  // `setSinkId` method is not included in any flow type definitions for HTMLAudioElements but is a valid method
@@ -6311,7 +6311,7 @@ class WebRTCClient extends Emitter {
6311
6311
 
6312
6312
  changeAudioInputDevice(id , session ) {
6313
6313
  const currentId = this.getAudioDeviceId();
6314
- logger$3.info('setting audio input device', { id, currentId, session: !!session });
6314
+ logger.info('setting audio input device', { id, currentId, session: !!session });
6315
6315
 
6316
6316
  if (id === currentId) {
6317
6317
  return null;
@@ -6357,7 +6357,7 @@ class WebRTCClient extends Emitter {
6357
6357
 
6358
6358
  setVideoInputDevice(id ) {
6359
6359
  const currentId = this.getVideoDeviceId();
6360
- logger$3.info('setting video input device', { id, currentId });
6360
+ logger.info('setting video input device', { id, currentId });
6361
6361
 
6362
6362
  if (id === currentId) {
6363
6363
  return null;
@@ -6382,7 +6382,7 @@ class WebRTCClient extends Emitter {
6382
6382
  const sessionId = this.getSipSessionId(session);
6383
6383
  const localStream = this.getLocalStream(sessionId);
6384
6384
 
6385
- logger$3.info('changing video input device', { id, sessionId });
6385
+ logger.info('changing video input device', { id, sessionId });
6386
6386
 
6387
6387
  // Release old video stream
6388
6388
  if (localStream) {
@@ -6450,7 +6450,7 @@ class WebRTCClient extends Emitter {
6450
6450
  const shouldDoScreenSharing = newConstraints && newConstraints.screen;
6451
6451
  const desktop = newConstraints && newConstraints.desktop;
6452
6452
 
6453
- logger$3.info('Sending reinvite', {
6453
+ logger.info('Sending reinvite', {
6454
6454
  id: this.getSipSessionId(sipSession),
6455
6455
  newConstraints,
6456
6456
  conference,
@@ -6488,7 +6488,7 @@ class WebRTCClient extends Emitter {
6488
6488
  sipSession.incomingInviteRequest.message.body = response.message.body;
6489
6489
  }
6490
6490
 
6491
- logger$3.info('on re-INVITE accepted', {
6491
+ logger.info('on re-INVITE accepted', {
6492
6492
  id: this.getSipSessionId(sipSession),
6493
6493
  wasMuted,
6494
6494
  shouldDoScreenSharing,
@@ -6663,7 +6663,7 @@ class WebRTCClient extends Emitter {
6663
6663
  }
6664
6664
 
6665
6665
  startHeartbeat() {
6666
- logger$3.info('sdk webrtc start heartbeat', { userAgent: !!this.userAgent });
6666
+ logger.info('sdk webrtc start heartbeat', { userAgent: !!this.userAgent });
6667
6667
  if (!this.userAgent) {
6668
6668
  this.heartbeat.stop();
6669
6669
  return;
@@ -6676,7 +6676,7 @@ class WebRTCClient extends Emitter {
6676
6676
  }
6677
6677
 
6678
6678
  stopHeartbeat() {
6679
- logger$3.info('sdk webrtc stop heartbeat');
6679
+ logger.info('sdk webrtc stop heartbeat');
6680
6680
  this.heartbeat.stop();
6681
6681
  }
6682
6682
 
@@ -6697,7 +6697,7 @@ class WebRTCClient extends Emitter {
6697
6697
  }
6698
6698
 
6699
6699
  attemptReconnection() {
6700
- logger$3.info('attempt reconnection', { userAgent: !!this.userAgent });
6700
+ logger.info('attempt reconnection', { userAgent: !!this.userAgent });
6701
6701
  if (!this.userAgent) {
6702
6702
  return;
6703
6703
  }
@@ -6722,7 +6722,7 @@ class WebRTCClient extends Emitter {
6722
6722
  return;
6723
6723
  }
6724
6724
 
6725
- logger$3.info('setting local media stream', {
6725
+ logger.info('setting local media stream', {
6726
6726
  sipSessionId,
6727
6727
  tracks: newStream ? newStream.getTracks() : null,
6728
6728
  });
@@ -6739,7 +6739,7 @@ class WebRTCClient extends Emitter {
6739
6739
 
6740
6740
  const oldStream = this.getLocalStream(sipSessionId);
6741
6741
 
6742
- logger$3.info('updating local stream', {
6742
+ logger.info('updating local stream', {
6743
6743
  sipSessionId,
6744
6744
  oldStream: !!oldStream,
6745
6745
  tracks: newStream.getTracks(),
@@ -6759,7 +6759,7 @@ class WebRTCClient extends Emitter {
6759
6759
  const remoteStream = this.getRemoteStream(sessionId);
6760
6760
  const pc = this.getPeerConnection(sessionId);
6761
6761
 
6762
- logger$3.info('Updating remote stream', {
6762
+ logger.info('Updating remote stream', {
6763
6763
  sessionId,
6764
6764
  tracks: remoteStream ? remoteStream.getTracks() : null,
6765
6765
  receiverTracks: pc && pc.getReceivers ? pc.getReceivers().map(receiver => receiver.track) : null,
@@ -6784,14 +6784,16 @@ class WebRTCClient extends Emitter {
6784
6784
  const screenSharing = constraints && 'screen' in constraints ? constraints.screen : false;
6785
6785
  const isDesktop = constraints && 'desktop' in constraints ? constraints.desktop : false;
6786
6786
  const withAudio = constraints && 'audio' in constraints ? constraints.audio : true;
6787
+ const mandatoryVideo = constraints && typeof constraints.video === 'object' ? constraints.video.mandatory : {};
6787
6788
 
6788
- logger$3.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
6789
+ logger.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
6789
6790
 
6790
6791
  return {
6791
6792
  constraints: {
6792
6793
  // Exact constraint are not supported with `getDisplayMedia` and we must have a video=false in desktop screenshare
6793
6794
  audio: screenSharing ? !isDesktop : (withAudio ? this._getAudioConstraints() : false),
6794
- video: screenSharing ? (isDesktop ? ({ mandatory: { chromeMediaSource: 'desktop' } }) : { cursor: 'always' })
6795
+ video: screenSharing ? (isDesktop
6796
+ ? ({ mandatory: { chromeMediaSource: 'desktop', ...(mandatoryVideo || {}) } }) : { cursor: 'always' })
6795
6797
  : this._getVideoConstraints(enableVideo),
6796
6798
  screen: screenSharing,
6797
6799
  desktop: isDesktop,
@@ -6834,7 +6836,7 @@ class WebRTCClient extends Emitter {
6834
6836
  }
6835
6837
 
6836
6838
  _onTransportError() {
6837
- logger$3.error('on transport error');
6839
+ logger.error('on transport error');
6838
6840
  this.eventEmitter.emit(TRANSPORT_ERROR);
6839
6841
  this.attemptReconnection();
6840
6842
  }
@@ -6843,7 +6845,7 @@ class WebRTCClient extends Emitter {
6843
6845
  const body = message && typeof message === 'object' ? message.data : message;
6844
6846
  if (body && body.indexOf('200 OK') !== -1) {
6845
6847
  if (this.hasHeartbeat()) {
6846
- logger$3.info('on heartbeat received from Asterisk', { hasHeartbeat: this.hasHeartbeat() });
6848
+ logger.info('on heartbeat received from Asterisk', { hasHeartbeat: this.hasHeartbeat() });
6847
6849
 
6848
6850
  this.heartbeat.onHeartbeat();
6849
6851
  if (this.heartbeatCb) {
@@ -6854,7 +6856,7 @@ class WebRTCClient extends Emitter {
6854
6856
  }
6855
6857
 
6856
6858
  async _onHeartbeatTimeout() {
6857
- logger$3.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
6859
+ logger.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
6858
6860
 
6859
6861
  if (this.heartbeatTimeoutCb) {
6860
6862
  this.heartbeatTimeoutCb();
@@ -6866,7 +6868,7 @@ class WebRTCClient extends Emitter {
6866
6868
  try {
6867
6869
  await this.userAgent.transport.disconnect();
6868
6870
  } catch (e) {
6869
- logger$3.error('Transport disconnection after heartbeat timeout, error', e);
6871
+ logger.error('Transport disconnection after heartbeat timeout, error', e);
6870
6872
  }
6871
6873
  }
6872
6874
 
@@ -6899,31 +6901,31 @@ class WebRTCClient extends Emitter {
6899
6901
  }
6900
6902
 
6901
6903
  _connectIfNeeded() {
6902
- logger$3.info('connect if needed, checking', { connected: this.isConnected() });
6904
+ logger.info('connect if needed, checking', { connected: this.isConnected() });
6903
6905
  if (!this.userAgent) {
6904
- logger$3.info('need to recreate User Agent');
6906
+ logger.info('need to recreate User Agent');
6905
6907
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
6906
6908
  }
6907
6909
 
6908
6910
  if (this.isConnected()) {
6909
- logger$3.info('webrtc sdk, already connected');
6911
+ logger.info('webrtc sdk, already connected');
6910
6912
  return Promise.resolve();
6911
6913
  }
6912
6914
 
6913
6915
  if (this.isConnecting()) {
6914
- logger$3.info('webrtc sdk, already connecting...');
6916
+ logger.info('webrtc sdk, already connecting...');
6915
6917
 
6916
6918
  this.connectionPromise = this.userAgent.transport.connectPromise;
6917
6919
  return this.connectionPromise;
6918
6920
  }
6919
6921
 
6920
6922
  if (this.connectionPromise) {
6921
- logger$3.info('webrtc sdk, connection promise connecting...');
6923
+ logger.info('webrtc sdk, connection promise connecting...');
6922
6924
  // $FlowFixMe
6923
6925
  return this.connectionPromise;
6924
6926
  }
6925
6927
 
6926
- logger$3.info('WebRTC UA needs to connect');
6928
+ logger.info('WebRTC UA needs to connect');
6927
6929
 
6928
6930
  // Force UA to reconnect
6929
6931
  if (this.userAgent && this.userAgent.state !== UserAgentState.Stopped) {
@@ -7048,7 +7050,7 @@ class WebRTCClient extends Emitter {
7048
7050
 
7049
7051
  sdh.peerConnectionDelegate = {
7050
7052
  onicecandidateerror: (error ) => {
7051
- logger$3.error('on icecandidate error', {
7053
+ logger.error('on icecandidate error', {
7052
7054
  address: error.address,
7053
7055
  port: error.port,
7054
7056
  errorCode: error.errorCode,
@@ -7077,7 +7079,7 @@ class WebRTCClient extends Emitter {
7077
7079
  updatedNumber = session.assertedIdentity.uri.normal.user;
7078
7080
  updatedCalleeName = session.assertedIdentity.displayName || updatedNumber;
7079
7081
  }
7080
- logger$3.info('re-invite received', { updatedCalleeName, updatedNumber, hadRemoteVideo });
7082
+ logger.info('re-invite received', { updatedCalleeName, updatedNumber, hadRemoteVideo });
7081
7083
 
7082
7084
  // Useful to know if it's a video upgrade or an unhold from a remote peer with a video stream
7083
7085
 
@@ -7098,7 +7100,7 @@ class WebRTCClient extends Emitter {
7098
7100
  }
7099
7101
 
7100
7102
  _onAccepted(session , sessionDialog , withEvent = true) {
7101
- logger$3.info('on call accepted', { id: session.id, remoteTag: session.remoteTag });
7103
+ logger.info('on call accepted', { id: session.id, remoteTag: session.remoteTag });
7102
7104
 
7103
7105
  this.storeSipSession(session);
7104
7106
 
@@ -7110,7 +7112,7 @@ class WebRTCClient extends Emitter {
7110
7112
  const onTrack = (event ) => {
7111
7113
  const isAudioOnly = this._isAudioOnly(session);
7112
7114
  const { kind, label, readyState, id, muted } = event.track;
7113
- logger$3.info('on track event', { isAudioOnly, kind, label, readyState, id, muted });
7115
+ logger.info('on track event', { isAudioOnly, kind, label, readyState, id, muted });
7114
7116
 
7115
7117
  // Stop video track in audio only mode
7116
7118
  if (isAudioOnly && kind === 'video') {
@@ -7126,12 +7128,14 @@ class WebRTCClient extends Emitter {
7126
7128
 
7127
7129
  session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
7128
7130
 
7129
- pc.oniceconnectionstatechange = () => {
7130
- logger$3.info('on ice connection state changed', { state: pc.iceConnectionState });
7131
- if (pc.iceConnectionState === 'disconnected') {
7132
- this.eventEmitter.emit(ON_DISCONNECTED);
7133
- }
7134
- };
7131
+ if (pc) {
7132
+ pc.oniceconnectionstatechange = () => {
7133
+ logger.info('on ice connection state changed', { state: pc.iceConnectionState });
7134
+ if (pc.iceConnectionState === 'disconnected') {
7135
+ this.eventEmitter.emit(ON_DISCONNECTED);
7136
+ }
7137
+ };
7138
+ }
7135
7139
 
7136
7140
  if (withEvent) {
7137
7141
  this.eventEmitter.emit(ACCEPTED, session, sessionDialog);
@@ -7300,10 +7304,10 @@ class WebRTCClient extends Emitter {
7300
7304
 
7301
7305
  _stopSendingStats(session ) {
7302
7306
  const sessionId = this.getSipSessionId(session);
7303
- logger$3.trace('Check for stopping stats', { sessionId, ids: Object.keys(this.statsIntervals) });
7307
+ logger.trace('Check for stopping stats', { sessionId, ids: Object.keys(this.statsIntervals) });
7304
7308
 
7305
7309
  if (sessionId in this.statsIntervals) {
7306
- logger$3.trace('Stop sending stats for call', { sessionId });
7310
+ logger.trace('Stop sending stats for call', { sessionId });
7307
7311
  this.statsIntervals[sessionId]();
7308
7312
  delete this.statsIntervals[sessionId];
7309
7313
  }
@@ -7319,7 +7323,7 @@ class WebRTCClient extends Emitter {
7319
7323
  try {
7320
7324
  await this.userAgent.transport.disconnect();
7321
7325
  } catch (e) {
7322
- logger$3.error('WebRTC transport disconnect, error', e);
7326
+ logger.error('WebRTC transport disconnect, error', e);
7323
7327
  }
7324
7328
  }
7325
7329
  }
@@ -7341,13 +7345,17 @@ class WebRTCClient extends Emitter {
7341
7345
  const nbStats = this.sessionNetworkStats[sessionId].length;
7342
7346
  const lastNetworkStats = this.sessionNetworkStats[sessionId][nbStats - 1];
7343
7347
  const lastAudioSent = lastNetworkStats ? lastNetworkStats.audioBytesSent : 0;
7348
+ const lastAudioContentSent = lastNetworkStats ? lastNetworkStats.audioContentSent : 0;
7344
7349
  const lastVideoSent = lastNetworkStats ? lastNetworkStats.videoBytesSent : 0;
7345
7350
  const lastAudioReceived = lastNetworkStats ? lastNetworkStats.audioBytesReceived : 0;
7351
+ const lastAudioContentReceived = lastNetworkStats ? lastNetworkStats.audioContentReceived : 0;
7346
7352
  const lastVideoReceived = lastNetworkStats ? lastNetworkStats.videoBytesReceived : 0;
7347
7353
  const lastTransportSent = lastNetworkStats ? lastNetworkStats.transportSent : 0;
7348
7354
  const lastTransportReceived = lastNetworkStats ? lastNetworkStats.transportReceived : 0;
7349
- let audioBytesSent = 0;
7350
- let audioBytesReceived = 0;
7355
+ let audioBytesSent = 0; // content + header
7356
+ let audioBytesReceived = 0; // content + header
7357
+ let audioContentSent = 0; // useful to detect blank call
7358
+ let audioContentReceived = 0;
7351
7359
  let videoBytesSent = 0;
7352
7360
  let videoBytesReceived = 0;
7353
7361
  let transportSent = 0;
@@ -7357,6 +7365,7 @@ class WebRTCClient extends Emitter {
7357
7365
  stats.forEach(report => {
7358
7366
  if (report.type === 'outbound-rtp' && report.kind === 'audio') {
7359
7367
  audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
7368
+ audioContentSent += Number(report.bytesSent);
7360
7369
  }
7361
7370
  if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
7362
7371
  audioBytesSent += Number(report.bytesSent);
@@ -7368,6 +7377,7 @@ class WebRTCClient extends Emitter {
7368
7377
  packetsLost += Number(report.packetsLost);
7369
7378
  networkStats.packetsReceived = Number(report.packetsReceived);
7370
7379
  audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
7380
+ audioContentReceived += Number(report.bytesReceived);
7371
7381
  }
7372
7382
  if (report.type === 'inbound-rtp' && report.kind === 'video') {
7373
7383
  videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
@@ -7396,10 +7406,17 @@ class WebRTCClient extends Emitter {
7396
7406
  });
7397
7407
 
7398
7408
  networkStats.packetsLost = packetsLost;
7409
+
7399
7410
  networkStats.totalAudioBytesSent = audioBytesSent;
7400
7411
  networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
7401
7412
  networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
7402
7413
  networkStats.audioBytesReceived = audioBytesReceived;
7414
+
7415
+ networkStats.totalAudioContentSent = audioContentSent;
7416
+ networkStats.audioContentSent = audioContentSent - lastAudioContentSent;
7417
+ networkStats.totalAudioBytesReceived = audioContentReceived - lastAudioContentReceived;
7418
+ networkStats.audioContentReceived = audioContentReceived;
7419
+
7403
7420
  networkStats.totalVideoBytesSent = videoBytesSent;
7404
7421
  networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
7405
7422
  networkStats.totalVideoBytesReceived = videoBytesReceived;