@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
@@ -458,7 +458,7 @@ var IssueReporter$1 = new IssueReporter();
458
458
 
459
459
  const methods = ['head', 'get', 'post', 'put', 'delete'];
460
460
 
461
- const logger = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
461
+ const logger$3 = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
462
462
 
463
463
  // Use a function here to be able to mock it in tests
464
464
  const realFetch = () => {
@@ -597,7 +597,7 @@ class ApiRequester {
597
597
  };
598
598
 
599
599
  if (this.refreshTokenPromise) {
600
- logger.info('A token is already refreshing, waiting ...', { url });
600
+ logger$3.info('A token is already refreshing, waiting ...', { url });
601
601
  await this.refreshTokenPromise;
602
602
  }
603
603
 
@@ -617,7 +617,7 @@ class ApiRequester {
617
617
  return promise.then(async (err ) => {
618
618
  // Check if the token is still valid
619
619
  if (firstCall && this._checkTokenExpired(response, err)) {
620
- logger.warn('token expired', { error: err.reason });
620
+ logger$3.warn('token expired', { error: err.reason });
621
621
  // Replay the call after refreshing the token
622
622
  return this._replayWithNewToken(err, path, method, body, headers, parse);
623
623
  }
@@ -627,7 +627,7 @@ class ApiRequester {
627
627
  : exceptionClass.fromResponse(err, response.status);
628
628
 
629
629
  if (this.shouldLogErrors) {
630
- logger.error('API error', error);
630
+ logger$3.error('API error', error);
631
631
  }
632
632
 
633
633
  throw error;
@@ -637,7 +637,7 @@ class ApiRequester {
637
637
  return newParse(response, isJson);
638
638
  }).catch(error => {
639
639
  if (this.shouldLogErrors) {
640
- logger.error('Fetch failed', { url, options, message: error.message, stack: error.stack });
640
+ logger$3.error('Fetch failed', { url, options, message: error.message, stack: error.stack });
641
641
  }
642
642
 
643
643
  throw error;
@@ -665,13 +665,13 @@ class ApiRequester {
665
665
  ) {
666
666
  const isTokenNotFound = this._isTokenNotFound(err);
667
667
  let newPath = path;
668
- logger.info('refreshing token', { inProgress: !!this.refreshTokenPromise });
668
+ logger$3.info('refreshing token', { inProgress: !!this.refreshTokenPromise });
669
669
 
670
670
  this.refreshTokenPromise = this.refreshTokenPromise || this.refreshTokenCallback();
671
671
 
672
672
  return this.refreshTokenPromise.then(() => {
673
673
  this.refreshTokenPromise = null;
674
- logger.info('token refreshed', { isTokenNotFound });
674
+ logger$3.info('token refreshed', { isTokenNotFound });
675
675
  if (isTokenNotFound) {
676
676
  const pathParts = path.split('/');
677
677
  pathParts.pop();
@@ -3639,7 +3639,7 @@ const TRANSFER_FLOW_BLIND = 'blind';
3639
3639
 
3640
3640
  // const MINIMUM_WAZO_ENGINE_VERSION_FOR_CTI_HOLD = '20.11';
3641
3641
 
3642
- const logger$1 = IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
3642
+ IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
3643
3643
 
3644
3644
  /* */
3645
3645
 
@@ -4983,7 +4983,7 @@ const BLACKLIST_EVENTS = [
4983
4983
  ];
4984
4984
 
4985
4985
  const HEARTBEAT_ENGINE_VERSION = '20.09';
4986
- const logger$3 = IssueReporter$1.loggerFor('wazo-ws');
4986
+ const logger$1 = IssueReporter$1.loggerFor('wazo-ws');
4987
4987
  const messageLogger = IssueReporter$1.loggerFor('wazo-ws-message');
4988
4988
 
4989
4989
  class WebSocketClient extends Emitter {
@@ -5032,19 +5032,19 @@ class WebSocketClient extends Emitter {
5032
5032
  }
5033
5033
 
5034
5034
  connect() {
5035
- logger$3.info('connect method started', { host: this.host, token: this.token });
5035
+ logger$1.info('connect method started', { host: this.host, token: this.token });
5036
5036
  this.socket = new ReconnectingWebSocket(this._getUrl.bind(this), [], this.options);
5037
5037
  if (this.options.binaryType) {
5038
5038
  this.socket.binaryType = this.options.binaryType;
5039
5039
  }
5040
5040
 
5041
5041
  this.socket.onopen = () => {
5042
- logger$3.info('on Wazo WS open', { method: 'connect', host: this.host });
5042
+ logger$1.info('on Wazo WS open', { method: 'connect', host: this.host });
5043
5043
  this.eventEmitter.emit(SOCKET_EVENTS.ON_OPEN);
5044
5044
  };
5045
5045
 
5046
5046
  this.socket.onerror = event => {
5047
- logger$3.error('on Wazo WS error', event.target);
5047
+ logger$1.error('on Wazo WS error', event.target);
5048
5048
  this.eventEmitter.emit(SOCKET_EVENTS.ON_ERROR, event);
5049
5049
  };
5050
5050
 
@@ -5074,7 +5074,7 @@ class WebSocketClient extends Emitter {
5074
5074
 
5075
5075
  this.socket.onclose = event => {
5076
5076
  // Can't be converted to JSON (circular structure)
5077
- logger$3.info('on Wazo WS close', {
5077
+ logger$1.info('on Wazo WS close', {
5078
5078
  reason: event.reason,
5079
5079
  code: event.code,
5080
5080
  readyState: event.target.readyState,
@@ -5092,12 +5092,12 @@ class WebSocketClient extends Emitter {
5092
5092
  };
5093
5093
 
5094
5094
  this.socket.onerror = event => {
5095
- logger$3.info('Wazo WS error', { message: event.message, code: event.code, readyState: event.target.readyState });
5095
+ logger$1.info('Wazo WS error', { message: event.message, code: event.code, readyState: event.target.readyState });
5096
5096
  };
5097
5097
  }
5098
5098
 
5099
5099
  close(force = false) {
5100
- logger$3.info('Wazo WS close', { socket: !!this.socket, host: this.host, token: this.token });
5100
+ logger$1.info('Wazo WS close', { socket: !!this.socket, host: this.host, token: this.token });
5101
5101
 
5102
5102
  if (!this.socket) {
5103
5103
  return;
@@ -5115,7 +5115,7 @@ class WebSocketClient extends Emitter {
5115
5115
 
5116
5116
  updateToken(token ) {
5117
5117
  this.token = token;
5118
- logger$3.info('Wazo WS updating token', { url: this._getUrl(), token, socket: !!this.socket });
5118
+ logger$1.info('Wazo WS updating token', { url: this._getUrl(), token, socket: !!this.socket });
5119
5119
 
5120
5120
  if (this.socket) {
5121
5121
  // If still connected, send the token to the WS
@@ -5133,7 +5133,7 @@ class WebSocketClient extends Emitter {
5133
5133
  }
5134
5134
 
5135
5135
  startHeartbeat() {
5136
- logger$3.info('Wazo WS start heartbeat', { host: this.host, token: this.token });
5136
+ logger$1.info('Wazo WS start heartbeat', { host: this.host, token: this.token });
5137
5137
 
5138
5138
  if (!this.socket) {
5139
5139
  this.heartbeat.stop();
@@ -5147,7 +5147,7 @@ class WebSocketClient extends Emitter {
5147
5147
  }
5148
5148
 
5149
5149
  stopHeartbeat() {
5150
- logger$3.info('Wazo WS stop heartbeat', { host: this.host, token: this.token });
5150
+ logger$1.info('Wazo WS stop heartbeat', { host: this.host, token: this.token });
5151
5151
 
5152
5152
  this.heartbeat.stop();
5153
5153
  }
@@ -5177,7 +5177,7 @@ class WebSocketClient extends Emitter {
5177
5177
  }
5178
5178
 
5179
5179
  reconnect(reason ) {
5180
- logger$3.info('Wazo WS reconnect', { reason, socket: !!this.socket, host: this.host, token: this.token });
5180
+ logger$1.info('Wazo WS reconnect', { reason, socket: !!this.socket, host: this.host, token: this.token });
5181
5181
  if (!this.socket) {
5182
5182
  return;
5183
5183
  }
@@ -5233,7 +5233,7 @@ class WebSocketClient extends Emitter {
5233
5233
  this.close();
5234
5234
  }
5235
5235
  const url = `wss://${this.host || ''}/api/websocketd/?token=${this.token || ''}&version=${this.version}`;
5236
- logger$3.log('Wazo WS url computed to reconnect', { url });
5236
+ logger$1.log('Wazo WS url computed to reconnect', { url });
5237
5237
 
5238
5238
  return url;
5239
5239
  }
@@ -5241,12 +5241,12 @@ class WebSocketClient extends Emitter {
5241
5241
  _onHeartbeat(message ) {
5242
5242
  if (message.payload === 'pong') {
5243
5243
  this.heartbeat.onHeartbeat();
5244
- logger$3.log('on heartbeat received from Wazo WS');
5244
+ logger$1.log('on heartbeat received from Wazo WS');
5245
5245
  }
5246
5246
  }
5247
5247
 
5248
5248
  async _onHeartbeatTimeout() {
5249
- logger$3.log('heartbeat timed out', { host: this.host, token: this.token });
5249
+ logger$1.log('heartbeat timed out', { host: this.host, token: this.token });
5250
5250
 
5251
5251
  this.close();
5252
5252
  this.eventEmitter.emit(SOCKET_EVENTS.ON_CLOSE, new Error('Websocket ping failure.'));
@@ -5367,7 +5367,7 @@ var wazoWebsocket = {
5367
5367
 
5368
5368
  /* */
5369
5369
 
5370
- const parseCandidate = (candidate ) => {
5370
+ const parseCandidate$1 = (candidate ) => {
5371
5371
  if (!candidate) {
5372
5372
  return null;
5373
5373
  }
@@ -5521,7 +5521,7 @@ class WazoSessionDescriptionHandler extends SessionDescriptionHandler {
5521
5521
  this.peerConnectionDelegate.onicecandidate = event => {
5522
5522
  wazoLogger.trace('onicecandidate', event.candidate ? event.candidate.candidate : { done: true });
5523
5523
  if (event.candidate) {
5524
- this.gatheredCandidates.push(parseCandidate(event.candidate.candidate));
5524
+ this.gatheredCandidates.push(parseCandidate$1(event.candidate.candidate));
5525
5525
  }
5526
5526
  };
5527
5527
 
@@ -5890,7 +5890,7 @@ const DEFAULT_ICE_TIMEOUT = 3000;
5890
5890
  const SEND_STATS_DELAY = 5000;
5891
5891
 
5892
5892
  const states = ['STATUS_NULL', 'STATUS_NEW', 'STATUS_CONNECTING', 'STATUS_CONNECTED', 'STATUS_COMPLETED'];
5893
- const logger$4 = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-client') : console;
5893
+ const logger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-client') : console;
5894
5894
  const statsLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-stats') : console;
5895
5895
 
5896
5896
  // events
@@ -6066,13 +6066,13 @@ class WebRTCClient extends Emitter {
6066
6066
 
6067
6067
  createUserAgent(configOverrides ) {
6068
6068
  const webRTCConfiguration = this._createWebRTCConfiguration(configOverrides);
6069
- logger$4.info('sdk webrtc, creating UA', { webRTCConfiguration });
6069
+ logger.info('sdk webrtc, creating UA', { webRTCConfiguration });
6070
6070
 
6071
6071
  webRTCConfiguration.delegate = {
6072
6072
  onConnect: this.onConnect.bind(this),
6073
6073
  onDisconnect: this.onDisconnect.bind(this),
6074
6074
  onInvite: (invitation ) => {
6075
- logger$4.info('sdk webrtc on invite', {
6075
+ logger.info('sdk webrtc on invite', {
6076
6076
  method: 'delegate.onInvite',
6077
6077
  id: invitation.id,
6078
6078
  remoteURI: invitation.remoteURI,
@@ -6115,7 +6115,7 @@ class WebRTCClient extends Emitter {
6115
6115
  }
6116
6116
 
6117
6117
  onConnect() {
6118
- logger$4.info('sdk webrtc connected', { method: 'delegate.onConnect' });
6118
+ logger.info('sdk webrtc connected', { method: 'delegate.onConnect' });
6119
6119
  this.eventEmitter.emit(CONNECTED);
6120
6120
  if (!this.isRegistered() && this.registerer && this.registerer.waiting) {
6121
6121
  this.registerer.waitingToggle(false);
@@ -6124,7 +6124,7 @@ class WebRTCClient extends Emitter {
6124
6124
  }
6125
6125
 
6126
6126
  async onDisconnect(error ) {
6127
- logger$4.info('sdk webrtc disconnected', { method: 'delegate.onConnect', error });
6127
+ logger.info('sdk webrtc disconnected', { method: 'delegate.onConnect', error });
6128
6128
  this.connectionPromise = null;
6129
6129
  // The UA will attempt to reconnect automatically when an error occurred
6130
6130
  this.eventEmitter.emit(DISCONNECTED, error);
@@ -6149,37 +6149,37 @@ class WebRTCClient extends Emitter {
6149
6149
  };
6150
6150
 
6151
6151
  if (this.skipRegister) {
6152
- logger$4.info('sdk webrtc skip register...', logInfo);
6152
+ logger.info('sdk webrtc skip register...', logInfo);
6153
6153
  return Promise.resolve();
6154
6154
  }
6155
6155
 
6156
- logger$4.info('sdk webrtc registering...', logInfo);
6156
+ logger.info('sdk webrtc registering...', logInfo);
6157
6157
 
6158
6158
  if (!this.userAgent) {
6159
- logger$4.info('sdk webrtc recreating User Agent');
6159
+ logger.info('sdk webrtc recreating User Agent');
6160
6160
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
6161
6161
  }
6162
6162
  if (!this.userAgent || this.isRegistered()) {
6163
- logger$4.info('sdk webrtc registering aborted, already registered or no UA can be created');
6163
+ logger.info('sdk webrtc registering aborted, already registered or no UA can be created');
6164
6164
  return Promise.resolve();
6165
6165
  }
6166
6166
 
6167
6167
  if (this.connectionPromise || (this.registerer && this.registerer.waiting)) {
6168
- logger$4.info('sdk webrtc registering aborted due to a registration in progress.');
6168
+ logger.info('sdk webrtc registering aborted due to a registration in progress.');
6169
6169
  return Promise.resolve();
6170
6170
  }
6171
6171
 
6172
6172
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
6173
6173
 
6174
6174
  const onRegisterFailed = () => {
6175
- logger$4.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6175
+ logger.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6176
6176
  this.connectionPromise = null;
6177
6177
  if (this.registerer && this.registerer.waiting) {
6178
6178
  this.registerer.waitingToggle(false);
6179
6179
  }
6180
6180
 
6181
6181
  if (tries <= MAX_REGISTER_TRIES) {
6182
- logger$4.info('sdk webrtc registering, retrying...', { tries });
6182
+ logger.info('sdk webrtc registering, retrying...', { tries });
6183
6183
  setTimeout(() => this.register(tries + 1), 300);
6184
6184
  }
6185
6185
  };
@@ -6188,18 +6188,18 @@ class WebRTCClient extends Emitter {
6188
6188
  // Avoid race condition with the close method called just before register and setting userAgent to null
6189
6189
  // during the resolution of the primise.
6190
6190
  if (!this.userAgent) {
6191
- logger$4.info('sdk webrtc recreating User Agent after connection');
6191
+ logger.info('sdk webrtc recreating User Agent after connection');
6192
6192
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
6193
6193
  }
6194
6194
 
6195
- logger$4.info('sdk webrtc registering, transport connected', { registerOptions, ua: !!this.userAgent });
6195
+ logger.info('sdk webrtc registering, transport connected', { registerOptions, ua: !!this.userAgent });
6196
6196
  this.registerer = new Registerer(this.userAgent, registerOptions);
6197
6197
  this.connectionPromise = null;
6198
6198
  this._monkeyPatchRegisterer(this.registerer);
6199
6199
 
6200
6200
  // Bind registerer events
6201
6201
  this.registerer.stateChange.addListener(newState => {
6202
- logger$4.info('sdk webrtc registering, state changed', { newState });
6202
+ logger.info('sdk webrtc registering, state changed', { newState });
6203
6203
 
6204
6204
  if (newState === RegistererState.Registered && this.registerer
6205
6205
  && this.registerer.state === RegistererState.Registered) {
@@ -6212,7 +6212,7 @@ class WebRTCClient extends Emitter {
6212
6212
  const options = {
6213
6213
  requestDelegate: {
6214
6214
  onReject: response => {
6215
- logger$4.error('sdk webrtc registering, rejected', { response });
6215
+ logger.error('sdk webrtc registering, rejected', { response });
6216
6216
 
6217
6217
  onRegisterFailed();
6218
6218
  },
@@ -6220,13 +6220,13 @@ class WebRTCClient extends Emitter {
6220
6220
  };
6221
6221
 
6222
6222
  return this.registerer.register(options).catch((e) => {
6223
- logger$4.error('sdk webrtc registering, error', e);
6223
+ logger.error('sdk webrtc registering, error', e);
6224
6224
 
6225
6225
  this.eventEmitter.emit(REGISTRATION_FAILED);
6226
6226
  return e;
6227
6227
  });
6228
6228
  }).catch(error => {
6229
- logger$4.error('sdk webrtc registering, transport error', error);
6229
+ logger.error('sdk webrtc registering, transport error', error);
6230
6230
  onRegisterFailed();
6231
6231
  });
6232
6232
  }
@@ -6255,21 +6255,21 @@ class WebRTCClient extends Emitter {
6255
6255
  }
6256
6256
 
6257
6257
  unregister() {
6258
- logger$4.info('sdk webrtc unregistering..', { userAgent: !!this.userAgent, registerer: !!this.registerer });
6258
+ logger.info('sdk webrtc unregistering..', { userAgent: !!this.userAgent, registerer: !!this.registerer });
6259
6259
  if (!this.registerer) {
6260
6260
  return Promise.resolve();
6261
6261
  }
6262
6262
 
6263
6263
  try {
6264
6264
  return this.registerer.unregister().then(() => {
6265
- logger$4.info('sdk webrtc unregistered');
6265
+ logger.info('sdk webrtc unregistered');
6266
6266
  this._cleanupRegister();
6267
6267
  }).catch(e => {
6268
- logger$4.error('sdk webrtc unregistering, promise error', e);
6268
+ logger.error('sdk webrtc unregistering, promise error', e);
6269
6269
  this._cleanupRegister();
6270
6270
  });
6271
6271
  } catch (e) {
6272
- logger$4.error('sdk webrtc unregistering, error', e);
6272
+ logger.error('sdk webrtc unregistering, error', e);
6273
6273
  // Avoid issue with `undefined is not an object (evaluating 'new.target.prototype')` when triggering a new
6274
6274
  // error when the registerer is in a bad state
6275
6275
  this._cleanupRegister();
@@ -6277,7 +6277,7 @@ class WebRTCClient extends Emitter {
6277
6277
  }
6278
6278
 
6279
6279
  stop() {
6280
- logger$4.info('sdk webrtc stop', { userAgent: !!this.userAgent });
6280
+ logger.info('sdk webrtc stop', { userAgent: !!this.userAgent });
6281
6281
  if (!this.userAgent) {
6282
6282
  return Promise.resolve();
6283
6283
  }
@@ -6285,12 +6285,12 @@ class WebRTCClient extends Emitter {
6285
6285
  return this.userAgent.stop().then(() => {
6286
6286
  return this._cleanupRegister();
6287
6287
  }).catch(e => {
6288
- logger$4.warn('sdk webrtc stop, error', { message: e.message, stack: e.stack });
6288
+ logger.warn('sdk webrtc stop, error', { message: e.message, stack: e.stack });
6289
6289
  });
6290
6290
  }
6291
6291
 
6292
6292
  call(number , enableVideo , audioOnly = false, conference = false) {
6293
- logger$4.info('sdk webrtc creating call', { number, enableVideo, audioOnly });
6293
+ logger.info('sdk webrtc creating call', { number, enableVideo, audioOnly, conference });
6294
6294
  const inviterOptions = {
6295
6295
  sessionDescriptionHandlerOptionsReInvite: {
6296
6296
  conference,
@@ -6321,7 +6321,7 @@ class WebRTCClient extends Emitter {
6321
6321
  this._onAccepted(session, response.session, true);
6322
6322
  },
6323
6323
  onReject: (response ) => {
6324
- logger$4.info('on call rejected', { id: session.id, fromTag: session.fromTag });
6324
+ logger.info('on call rejected', { id: session.id, fromTag: session.fromTag });
6325
6325
  this._stopSendingStats(session);
6326
6326
  this.stopNetworkMonitoring(session);
6327
6327
 
@@ -6344,11 +6344,11 @@ class WebRTCClient extends Emitter {
6344
6344
  }
6345
6345
 
6346
6346
  answer(session , enableVideo ) {
6347
- logger$4.info('sdk webrtc answer call', { id: session.id, enableVideo });
6347
+ logger.info('sdk webrtc answer call', { id: session.id, enableVideo });
6348
6348
 
6349
6349
  if (!session || !session.accept) {
6350
6350
  const error = 'No session to answer, or not an invitation';
6351
- logger$4.warn(error);
6351
+ logger.warn(error);
6352
6352
  return Promise.reject(new Error(error));
6353
6353
  }
6354
6354
  const options = {
@@ -6358,15 +6358,15 @@ class WebRTCClient extends Emitter {
6358
6358
  return session.accept(options).then(() => {
6359
6359
  if (session.isCanceled) {
6360
6360
  const message = 'accepted a canceled session (or was canceled during the accept phase).';
6361
- logger$4.error(message, { id: session.id });
6361
+ logger.error(message, { id: session.id });
6362
6362
  this.onCallEnded(session);
6363
6363
 
6364
6364
  throw new CanceledCallError(message);
6365
6365
  }
6366
- logger$4.info('sdk webrtc answer, accepted.');
6366
+ logger.info('sdk webrtc answer, accepted.');
6367
6367
  this._onAccepted(session);
6368
6368
  }).catch(e => {
6369
- logger$4.error(`answer call error for ${session ? session.id : 'n/a'}`, e);
6369
+ logger.error(`answer call error for ${session ? session.id : 'n/a'}`, e);
6370
6370
 
6371
6371
  throw e;
6372
6372
  });
@@ -6374,7 +6374,7 @@ class WebRTCClient extends Emitter {
6374
6374
 
6375
6375
  hangup(session ) {
6376
6376
  const { state, id } = session;
6377
- logger$4.info('sdk webrtc hangup call', { id, state });
6377
+ logger.info('sdk webrtc hangup call', { id, state });
6378
6378
 
6379
6379
  try {
6380
6380
  this._stopSendingStats(session);
@@ -6403,7 +6403,7 @@ class WebRTCClient extends Emitter {
6403
6403
 
6404
6404
  return bye();
6405
6405
  } catch (error) {
6406
- logger$4.warn('sdk webrtc hangup, error', error);
6406
+ logger.warn('sdk webrtc hangup, error', error);
6407
6407
  }
6408
6408
 
6409
6409
  return null;
@@ -6421,7 +6421,7 @@ class WebRTCClient extends Emitter {
6421
6421
  // Fetch and emit an event at `interval` with session network stats
6422
6422
  startNetworkMonitoring(session , interval = 1000) {
6423
6423
  const sessionId = this.getSipSessionId(session);
6424
- logger$4.info('starting network inspection', { id: sessionId });
6424
+ logger.info('starting network inspection', { id: sessionId });
6425
6425
 
6426
6426
  this.sessionNetworkStats[sessionId] = [];
6427
6427
 
@@ -6431,7 +6431,7 @@ class WebRTCClient extends Emitter {
6431
6431
  stopNetworkMonitoring(session ) {
6432
6432
  const sessionId = this.getSipSessionId(session);
6433
6433
  const exists = sessionId in this.networkMonitoringInterval;
6434
- logger$4.info('stopping network inspection', { id: sessionId, exists });
6434
+ logger.info('stopping network inspection', { id: sessionId, exists });
6435
6435
 
6436
6436
  if (exists) {
6437
6437
  clearInterval(this.networkMonitoringInterval[sessionId]);
@@ -6441,17 +6441,17 @@ class WebRTCClient extends Emitter {
6441
6441
  }
6442
6442
 
6443
6443
  reject(session ) {
6444
- logger$4.info('sdk webrtc reject call', { id: session.id });
6444
+ logger.info('sdk webrtc reject call', { id: session.id });
6445
6445
 
6446
6446
  try {
6447
6447
  return session.reject ? session.reject() : session.cancel();
6448
6448
  } catch (e) {
6449
- logger$4.warn('Error when rejecting call', e.message, e.stack);
6449
+ logger.warn('Error when rejecting call', e.message, e.stack);
6450
6450
  }
6451
6451
  }
6452
6452
 
6453
6453
  async close() {
6454
- logger$4.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
6454
+ logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
6455
6455
  this._cleanupMedia();
6456
6456
  this.connectionPromise = null;
6457
6457
 
@@ -6482,7 +6482,7 @@ class WebRTCClient extends Emitter {
6482
6482
  // eg: "INVITE not rejectable in state Completed"
6483
6483
  }
6484
6484
  this.userAgent = null;
6485
- logger$4.info('sdk webrtc client closed');
6485
+ logger.info('sdk webrtc client closed');
6486
6486
  }
6487
6487
 
6488
6488
  getNumber(session ) {
@@ -6495,13 +6495,13 @@ class WebRTCClient extends Emitter {
6495
6495
  }
6496
6496
 
6497
6497
  mute(session ) {
6498
- logger$4.info('sdk webrtc mute', { id: session.id });
6498
+ logger.info('sdk webrtc mute', { id: session.id });
6499
6499
 
6500
6500
  this._toggleAudio(session, true);
6501
6501
  }
6502
6502
 
6503
6503
  unmute(session ) {
6504
- logger$4.info('sdk webrtc unmute', { id: session.id });
6504
+ logger.info('sdk webrtc unmute', { id: session.id });
6505
6505
 
6506
6506
  this._toggleAudio(session, false);
6507
6507
  }
@@ -6541,13 +6541,13 @@ class WebRTCClient extends Emitter {
6541
6541
  }
6542
6542
 
6543
6543
  toggleCameraOn(session ) {
6544
- logger$4.info('sdk webrtc toggle camera on', { id: session.id });
6544
+ logger.info('sdk webrtc toggle camera on', { id: session.id });
6545
6545
 
6546
6546
  this._toggleVideo(session, false);
6547
6547
  }
6548
6548
 
6549
6549
  toggleCameraOff(session ) {
6550
- logger$4.info('sdk webrtc toggle camera off', { id: session.id });
6550
+ logger.info('sdk webrtc toggle camera off', { id: session.id });
6551
6551
 
6552
6552
  this._toggleVideo(session, true);
6553
6553
  }
@@ -6556,7 +6556,7 @@ class WebRTCClient extends Emitter {
6556
6556
  const sessionId = this.getSipSessionId(session);
6557
6557
  const hasVideo = hadVideo || this.hasLocalVideo(sessionId);
6558
6558
 
6559
- logger$4.info('sdk webrtc hold', {
6559
+ logger.info('sdk webrtc hold', {
6560
6560
  sessionId,
6561
6561
  keys: Object.keys(this.heldSessions),
6562
6562
  pendingReinvite: !!session.pendingReinvite,
@@ -6605,7 +6605,7 @@ class WebRTCClient extends Emitter {
6605
6605
  const sessionId = this.getSipSessionId(session);
6606
6606
  const hasVideo = sessionId in this.heldSessions && this.heldSessions[sessionId].hasVideo;
6607
6607
 
6608
- logger$4.info('sdk webrtc unhold', {
6608
+ logger.info('sdk webrtc unhold', {
6609
6609
  sessionId,
6610
6610
  keys: Object.keys(this.heldSessions),
6611
6611
  pendingReinvite: !!session.pendingReinvite,
@@ -6753,7 +6753,7 @@ class WebRTCClient extends Emitter {
6753
6753
  if (!session.sessionDescriptionHandler) {
6754
6754
  return;
6755
6755
  }
6756
- logger$4.info('Sending DTMF', {
6756
+ logger.info('Sending DTMF', {
6757
6757
  id: this.getSipSessionId(session),
6758
6758
  tone,
6759
6759
  });
@@ -6769,7 +6769,7 @@ class WebRTCClient extends Emitter {
6769
6769
  transfer(session , target ) {
6770
6770
  this.hold(session);
6771
6771
 
6772
- logger$4.info('Transfering a session', {
6772
+ logger.info('Transfering a session', {
6773
6773
  id: this.getSipSessionId(session),
6774
6774
  target,
6775
6775
  });
@@ -6791,17 +6791,17 @@ class WebRTCClient extends Emitter {
6791
6791
  atxfer(session ) {
6792
6792
  this.hold(session);
6793
6793
 
6794
- logger$4.info('webrtc transfer started', { id: this.getSipSessionId(session) });
6794
+ logger.info('webrtc transfer started', { id: this.getSipSessionId(session) });
6795
6795
 
6796
6796
  const result = {
6797
6797
  newSession: null,
6798
6798
  init: async (target ) => {
6799
- logger$4.info('webrtc transfer initialized', { id: this.getSipSessionId(session), target });
6799
+ logger.info('webrtc transfer initialized', { id: this.getSipSessionId(session), target });
6800
6800
 
6801
6801
  result.newSession = await this.call(target);
6802
6802
  },
6803
6803
  complete: () => {
6804
- logger$4.info('webrtc transfer completed', {
6804
+ logger.info('webrtc transfer completed', {
6805
6805
  id: this.getSipSessionId(session),
6806
6806
  referId: this.getSipSessionId(result.newSession),
6807
6807
  });
@@ -6822,7 +6822,7 @@ class WebRTCClient extends Emitter {
6822
6822
  return;
6823
6823
  }
6824
6824
 
6825
- logger$4.info('send WebRTC message', { sipId: sipSession.id, contentType });
6825
+ logger.info('send WebRTC message', { sipId: sipSession.id, contentType });
6826
6826
 
6827
6827
  try {
6828
6828
  sipSession.message({
@@ -6864,7 +6864,7 @@ class WebRTCClient extends Emitter {
6864
6864
  }
6865
6865
 
6866
6866
  changeAudioOutputVolume(volume ) {
6867
- logger$4.info('Changing audio output volume', { volume });
6867
+ logger.info('Changing audio output volume', { volume });
6868
6868
 
6869
6869
  Object.values(this.audioElements).forEach(audioElement => {
6870
6870
  if (audioElement instanceof HTMLAudioElement) {
@@ -6876,7 +6876,7 @@ class WebRTCClient extends Emitter {
6876
6876
  }
6877
6877
 
6878
6878
  changeAudioOutputDevice(id ) {
6879
- logger$4.info('Changing audio output device', { id });
6879
+ logger.info('Changing audio output device', { id });
6880
6880
 
6881
6881
  Object.values(this.audioElements).forEach(audioElement => {
6882
6882
  // `setSinkId` method is not included in any flow type definitions for HTMLAudioElements but is a valid method
@@ -6893,7 +6893,7 @@ class WebRTCClient extends Emitter {
6893
6893
 
6894
6894
  changeAudioInputDevice(id , session ) {
6895
6895
  const currentId = this.getAudioDeviceId();
6896
- logger$4.info('setting audio input device', { id, currentId, session: !!session });
6896
+ logger.info('setting audio input device', { id, currentId, session: !!session });
6897
6897
 
6898
6898
  if (id === currentId) {
6899
6899
  return null;
@@ -6939,7 +6939,7 @@ class WebRTCClient extends Emitter {
6939
6939
 
6940
6940
  setVideoInputDevice(id ) {
6941
6941
  const currentId = this.getVideoDeviceId();
6942
- logger$4.info('setting video input device', { id, currentId });
6942
+ logger.info('setting video input device', { id, currentId });
6943
6943
 
6944
6944
  if (id === currentId) {
6945
6945
  return null;
@@ -6964,7 +6964,7 @@ class WebRTCClient extends Emitter {
6964
6964
  const sessionId = this.getSipSessionId(session);
6965
6965
  const localStream = this.getLocalStream(sessionId);
6966
6966
 
6967
- logger$4.info('changing video input device', { id, sessionId });
6967
+ logger.info('changing video input device', { id, sessionId });
6968
6968
 
6969
6969
  // Release old video stream
6970
6970
  if (localStream) {
@@ -7032,7 +7032,7 @@ class WebRTCClient extends Emitter {
7032
7032
  const shouldDoScreenSharing = newConstraints && newConstraints.screen;
7033
7033
  const desktop = newConstraints && newConstraints.desktop;
7034
7034
 
7035
- logger$4.info('Sending reinvite', {
7035
+ logger.info('Sending reinvite', {
7036
7036
  id: this.getSipSessionId(sipSession),
7037
7037
  newConstraints,
7038
7038
  conference,
@@ -7070,7 +7070,7 @@ class WebRTCClient extends Emitter {
7070
7070
  sipSession.incomingInviteRequest.message.body = response.message.body;
7071
7071
  }
7072
7072
 
7073
- logger$4.info('on re-INVITE accepted', {
7073
+ logger.info('on re-INVITE accepted', {
7074
7074
  id: this.getSipSessionId(sipSession),
7075
7075
  wasMuted,
7076
7076
  shouldDoScreenSharing,
@@ -7245,7 +7245,7 @@ class WebRTCClient extends Emitter {
7245
7245
  }
7246
7246
 
7247
7247
  startHeartbeat() {
7248
- logger$4.info('sdk webrtc start heartbeat', { userAgent: !!this.userAgent });
7248
+ logger.info('sdk webrtc start heartbeat', { userAgent: !!this.userAgent });
7249
7249
  if (!this.userAgent) {
7250
7250
  this.heartbeat.stop();
7251
7251
  return;
@@ -7258,7 +7258,7 @@ class WebRTCClient extends Emitter {
7258
7258
  }
7259
7259
 
7260
7260
  stopHeartbeat() {
7261
- logger$4.info('sdk webrtc stop heartbeat');
7261
+ logger.info('sdk webrtc stop heartbeat');
7262
7262
  this.heartbeat.stop();
7263
7263
  }
7264
7264
 
@@ -7279,7 +7279,7 @@ class WebRTCClient extends Emitter {
7279
7279
  }
7280
7280
 
7281
7281
  attemptReconnection() {
7282
- logger$4.info('attempt reconnection', { userAgent: !!this.userAgent });
7282
+ logger.info('attempt reconnection', { userAgent: !!this.userAgent });
7283
7283
  if (!this.userAgent) {
7284
7284
  return;
7285
7285
  }
@@ -7304,7 +7304,7 @@ class WebRTCClient extends Emitter {
7304
7304
  return;
7305
7305
  }
7306
7306
 
7307
- logger$4.info('setting local media stream', {
7307
+ logger.info('setting local media stream', {
7308
7308
  sipSessionId,
7309
7309
  tracks: newStream ? newStream.getTracks() : null,
7310
7310
  });
@@ -7321,7 +7321,7 @@ class WebRTCClient extends Emitter {
7321
7321
 
7322
7322
  const oldStream = this.getLocalStream(sipSessionId);
7323
7323
 
7324
- logger$4.info('updating local stream', {
7324
+ logger.info('updating local stream', {
7325
7325
  sipSessionId,
7326
7326
  oldStream: !!oldStream,
7327
7327
  tracks: newStream.getTracks(),
@@ -7341,7 +7341,7 @@ class WebRTCClient extends Emitter {
7341
7341
  const remoteStream = this.getRemoteStream(sessionId);
7342
7342
  const pc = this.getPeerConnection(sessionId);
7343
7343
 
7344
- logger$4.info('Updating remote stream', {
7344
+ logger.info('Updating remote stream', {
7345
7345
  sessionId,
7346
7346
  tracks: remoteStream ? remoteStream.getTracks() : null,
7347
7347
  receiverTracks: pc && pc.getReceivers ? pc.getReceivers().map(receiver => receiver.track) : null,
@@ -7366,14 +7366,16 @@ class WebRTCClient extends Emitter {
7366
7366
  const screenSharing = constraints && 'screen' in constraints ? constraints.screen : false;
7367
7367
  const isDesktop = constraints && 'desktop' in constraints ? constraints.desktop : false;
7368
7368
  const withAudio = constraints && 'audio' in constraints ? constraints.audio : true;
7369
+ const mandatoryVideo = constraints && typeof constraints.video === 'object' ? constraints.video.mandatory : {};
7369
7370
 
7370
- logger$4.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
7371
+ logger.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
7371
7372
 
7372
7373
  return {
7373
7374
  constraints: {
7374
7375
  // Exact constraint are not supported with `getDisplayMedia` and we must have a video=false in desktop screenshare
7375
7376
  audio: screenSharing ? !isDesktop : (withAudio ? this._getAudioConstraints() : false),
7376
- video: screenSharing ? (isDesktop ? ({ mandatory: { chromeMediaSource: 'desktop' } }) : { cursor: 'always' })
7377
+ video: screenSharing ? (isDesktop
7378
+ ? ({ mandatory: { chromeMediaSource: 'desktop', ...(mandatoryVideo || {}) } }) : { cursor: 'always' })
7377
7379
  : this._getVideoConstraints(enableVideo),
7378
7380
  screen: screenSharing,
7379
7381
  desktop: isDesktop,
@@ -7416,7 +7418,7 @@ class WebRTCClient extends Emitter {
7416
7418
  }
7417
7419
 
7418
7420
  _onTransportError() {
7419
- logger$4.error('on transport error');
7421
+ logger.error('on transport error');
7420
7422
  this.eventEmitter.emit(TRANSPORT_ERROR);
7421
7423
  this.attemptReconnection();
7422
7424
  }
@@ -7425,7 +7427,7 @@ class WebRTCClient extends Emitter {
7425
7427
  const body = message && typeof message === 'object' ? message.data : message;
7426
7428
  if (body && body.indexOf('200 OK') !== -1) {
7427
7429
  if (this.hasHeartbeat()) {
7428
- logger$4.info('on heartbeat received from Asterisk', { hasHeartbeat: this.hasHeartbeat() });
7430
+ logger.info('on heartbeat received from Asterisk', { hasHeartbeat: this.hasHeartbeat() });
7429
7431
 
7430
7432
  this.heartbeat.onHeartbeat();
7431
7433
  if (this.heartbeatCb) {
@@ -7436,7 +7438,7 @@ class WebRTCClient extends Emitter {
7436
7438
  }
7437
7439
 
7438
7440
  async _onHeartbeatTimeout() {
7439
- logger$4.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
7441
+ logger.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
7440
7442
 
7441
7443
  if (this.heartbeatTimeoutCb) {
7442
7444
  this.heartbeatTimeoutCb();
@@ -7448,7 +7450,7 @@ class WebRTCClient extends Emitter {
7448
7450
  try {
7449
7451
  await this.userAgent.transport.disconnect();
7450
7452
  } catch (e) {
7451
- logger$4.error('Transport disconnection after heartbeat timeout, error', e);
7453
+ logger.error('Transport disconnection after heartbeat timeout, error', e);
7452
7454
  }
7453
7455
  }
7454
7456
 
@@ -7481,31 +7483,31 @@ class WebRTCClient extends Emitter {
7481
7483
  }
7482
7484
 
7483
7485
  _connectIfNeeded() {
7484
- logger$4.info('connect if needed, checking', { connected: this.isConnected() });
7486
+ logger.info('connect if needed, checking', { connected: this.isConnected() });
7485
7487
  if (!this.userAgent) {
7486
- logger$4.info('need to recreate User Agent');
7488
+ logger.info('need to recreate User Agent');
7487
7489
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
7488
7490
  }
7489
7491
 
7490
7492
  if (this.isConnected()) {
7491
- logger$4.info('webrtc sdk, already connected');
7493
+ logger.info('webrtc sdk, already connected');
7492
7494
  return Promise.resolve();
7493
7495
  }
7494
7496
 
7495
7497
  if (this.isConnecting()) {
7496
- logger$4.info('webrtc sdk, already connecting...');
7498
+ logger.info('webrtc sdk, already connecting...');
7497
7499
 
7498
7500
  this.connectionPromise = this.userAgent.transport.connectPromise;
7499
7501
  return this.connectionPromise;
7500
7502
  }
7501
7503
 
7502
7504
  if (this.connectionPromise) {
7503
- logger$4.info('webrtc sdk, connection promise connecting...');
7505
+ logger.info('webrtc sdk, connection promise connecting...');
7504
7506
  // $FlowFixMe
7505
7507
  return this.connectionPromise;
7506
7508
  }
7507
7509
 
7508
- logger$4.info('WebRTC UA needs to connect');
7510
+ logger.info('WebRTC UA needs to connect');
7509
7511
 
7510
7512
  // Force UA to reconnect
7511
7513
  if (this.userAgent && this.userAgent.state !== UserAgentState.Stopped) {
@@ -7630,7 +7632,7 @@ class WebRTCClient extends Emitter {
7630
7632
 
7631
7633
  sdh.peerConnectionDelegate = {
7632
7634
  onicecandidateerror: (error ) => {
7633
- logger$4.error('on icecandidate error', {
7635
+ logger.error('on icecandidate error', {
7634
7636
  address: error.address,
7635
7637
  port: error.port,
7636
7638
  errorCode: error.errorCode,
@@ -7659,7 +7661,7 @@ class WebRTCClient extends Emitter {
7659
7661
  updatedNumber = session.assertedIdentity.uri.normal.user;
7660
7662
  updatedCalleeName = session.assertedIdentity.displayName || updatedNumber;
7661
7663
  }
7662
- logger$4.info('re-invite received', { updatedCalleeName, updatedNumber, hadRemoteVideo });
7664
+ logger.info('re-invite received', { updatedCalleeName, updatedNumber, hadRemoteVideo });
7663
7665
 
7664
7666
  // Useful to know if it's a video upgrade or an unhold from a remote peer with a video stream
7665
7667
 
@@ -7680,7 +7682,7 @@ class WebRTCClient extends Emitter {
7680
7682
  }
7681
7683
 
7682
7684
  _onAccepted(session , sessionDialog , withEvent = true) {
7683
- logger$4.info('on call accepted', { id: session.id, remoteTag: session.remoteTag });
7685
+ logger.info('on call accepted', { id: session.id, remoteTag: session.remoteTag });
7684
7686
 
7685
7687
  this.storeSipSession(session);
7686
7688
 
@@ -7692,7 +7694,7 @@ class WebRTCClient extends Emitter {
7692
7694
  const onTrack = (event ) => {
7693
7695
  const isAudioOnly = this._isAudioOnly(session);
7694
7696
  const { kind, label, readyState, id, muted } = event.track;
7695
- logger$4.info('on track event', { isAudioOnly, kind, label, readyState, id, muted });
7697
+ logger.info('on track event', { isAudioOnly, kind, label, readyState, id, muted });
7696
7698
 
7697
7699
  // Stop video track in audio only mode
7698
7700
  if (isAudioOnly && kind === 'video') {
@@ -7708,12 +7710,14 @@ class WebRTCClient extends Emitter {
7708
7710
 
7709
7711
  session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
7710
7712
 
7711
- pc.oniceconnectionstatechange = () => {
7712
- logger$4.info('on ice connection state changed', { state: pc.iceConnectionState });
7713
- if (pc.iceConnectionState === 'disconnected') {
7714
- this.eventEmitter.emit(ON_DISCONNECTED);
7715
- }
7716
- };
7713
+ if (pc) {
7714
+ pc.oniceconnectionstatechange = () => {
7715
+ logger.info('on ice connection state changed', { state: pc.iceConnectionState });
7716
+ if (pc.iceConnectionState === 'disconnected') {
7717
+ this.eventEmitter.emit(ON_DISCONNECTED);
7718
+ }
7719
+ };
7720
+ }
7717
7721
 
7718
7722
  if (withEvent) {
7719
7723
  this.eventEmitter.emit(ACCEPTED, session, sessionDialog);
@@ -7882,10 +7886,10 @@ class WebRTCClient extends Emitter {
7882
7886
 
7883
7887
  _stopSendingStats(session ) {
7884
7888
  const sessionId = this.getSipSessionId(session);
7885
- logger$4.trace('Check for stopping stats', { sessionId, ids: Object.keys(this.statsIntervals) });
7889
+ logger.trace('Check for stopping stats', { sessionId, ids: Object.keys(this.statsIntervals) });
7886
7890
 
7887
7891
  if (sessionId in this.statsIntervals) {
7888
- logger$4.trace('Stop sending stats for call', { sessionId });
7892
+ logger.trace('Stop sending stats for call', { sessionId });
7889
7893
  this.statsIntervals[sessionId]();
7890
7894
  delete this.statsIntervals[sessionId];
7891
7895
  }
@@ -7901,7 +7905,7 @@ class WebRTCClient extends Emitter {
7901
7905
  try {
7902
7906
  await this.userAgent.transport.disconnect();
7903
7907
  } catch (e) {
7904
- logger$4.error('WebRTC transport disconnect, error', e);
7908
+ logger.error('WebRTC transport disconnect, error', e);
7905
7909
  }
7906
7910
  }
7907
7911
  }
@@ -7923,13 +7927,17 @@ class WebRTCClient extends Emitter {
7923
7927
  const nbStats = this.sessionNetworkStats[sessionId].length;
7924
7928
  const lastNetworkStats = this.sessionNetworkStats[sessionId][nbStats - 1];
7925
7929
  const lastAudioSent = lastNetworkStats ? lastNetworkStats.audioBytesSent : 0;
7930
+ const lastAudioContentSent = lastNetworkStats ? lastNetworkStats.audioContentSent : 0;
7926
7931
  const lastVideoSent = lastNetworkStats ? lastNetworkStats.videoBytesSent : 0;
7927
7932
  const lastAudioReceived = lastNetworkStats ? lastNetworkStats.audioBytesReceived : 0;
7933
+ const lastAudioContentReceived = lastNetworkStats ? lastNetworkStats.audioContentReceived : 0;
7928
7934
  const lastVideoReceived = lastNetworkStats ? lastNetworkStats.videoBytesReceived : 0;
7929
7935
  const lastTransportSent = lastNetworkStats ? lastNetworkStats.transportSent : 0;
7930
7936
  const lastTransportReceived = lastNetworkStats ? lastNetworkStats.transportReceived : 0;
7931
- let audioBytesSent = 0;
7932
- let audioBytesReceived = 0;
7937
+ let audioBytesSent = 0; // content + header
7938
+ let audioBytesReceived = 0; // content + header
7939
+ let audioContentSent = 0; // useful to detect blank call
7940
+ let audioContentReceived = 0;
7933
7941
  let videoBytesSent = 0;
7934
7942
  let videoBytesReceived = 0;
7935
7943
  let transportSent = 0;
@@ -7939,6 +7947,7 @@ class WebRTCClient extends Emitter {
7939
7947
  stats.forEach(report => {
7940
7948
  if (report.type === 'outbound-rtp' && report.kind === 'audio') {
7941
7949
  audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
7950
+ audioContentSent += Number(report.bytesSent);
7942
7951
  }
7943
7952
  if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
7944
7953
  audioBytesSent += Number(report.bytesSent);
@@ -7950,6 +7959,7 @@ class WebRTCClient extends Emitter {
7950
7959
  packetsLost += Number(report.packetsLost);
7951
7960
  networkStats.packetsReceived = Number(report.packetsReceived);
7952
7961
  audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
7962
+ audioContentReceived += Number(report.bytesReceived);
7953
7963
  }
7954
7964
  if (report.type === 'inbound-rtp' && report.kind === 'video') {
7955
7965
  videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
@@ -7978,10 +7988,17 @@ class WebRTCClient extends Emitter {
7978
7988
  });
7979
7989
 
7980
7990
  networkStats.packetsLost = packetsLost;
7991
+
7981
7992
  networkStats.totalAudioBytesSent = audioBytesSent;
7982
7993
  networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
7983
7994
  networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
7984
7995
  networkStats.audioBytesReceived = audioBytesReceived;
7996
+
7997
+ networkStats.totalAudioContentSent = audioContentSent;
7998
+ networkStats.audioContentSent = audioContentSent - lastAudioContentSent;
7999
+ networkStats.totalAudioBytesReceived = audioContentReceived - lastAudioContentReceived;
8000
+ networkStats.audioContentReceived = audioContentReceived;
8001
+
7985
8002
  networkStats.totalVideoBytesSent = videoBytesSent;
7986
8003
  networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
7987
8004
  networkStats.totalVideoBytesReceived = videoBytesReceived;
@@ -8084,7 +8101,7 @@ var webrtc = {
8084
8101
  }),
8085
8102
  };
8086
8103
 
8087
- const parseCandidate$1 = line => {
8104
+ const parseCandidate = line => {
8088
8105
  let parts;
8089
8106
  // Parse both variants.
8090
8107
  if (line.indexOf('a=candidate:') === 0) {
@@ -8175,7 +8192,7 @@ var SymmetricNat = {
8175
8192
  }
8176
8193
 
8177
8194
  if (e.candidate && e.candidate.candidate.indexOf('srflx') !== -1) {
8178
- const cand = parseCandidate$1(e.candidate.candidate);
8195
+ const cand = parseCandidate(e.candidate.candidate);
8179
8196
  if (!candidates[cand.relatedPort]) candidates[cand.relatedPort] = [];
8180
8197
  candidates[cand.relatedPort].push(cand.port);
8181
8198
  } else if (!e.candidate) {
@@ -8243,7 +8260,7 @@ var iceIpv4 = {
8243
8260
  const rawCandidate = e.candidate.candidate;
8244
8261
  if (rawCandidate.indexOf('srflx') !== -1 || rawCandidate.indexOf('relay') !== -1) {
8245
8262
  hasSrflxOrRelay = true;
8246
- const candidate = parseCandidate$1(e.candidate.candidate);
8263
+ const candidate = parseCandidate(e.candidate.candidate);
8247
8264
  ips.push(candidate.ip);
8248
8265
  }
8249
8266
  } else if (!e.candidate) {