@wazo/sdk 0.37.20 → 0.37.24

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 (147) hide show
  1. package/dist/wazo-sdk.js +6 -6
  2. package/esm/__tests__/api-client.test.js +91 -21
  3. package/esm/__tests__/web-rtc-client.test.js +214 -165
  4. package/esm/api/agentd.js +25 -2
  5. package/esm/api/amid.js +26 -3
  6. package/esm/api/application.js +25 -2
  7. package/esm/api/auth.js +25 -2
  8. package/esm/api/call-logd.js +34 -4
  9. package/esm/api/calld.js +35 -2
  10. package/esm/api/chatd.js +32 -2
  11. package/esm/api/confd.js +56 -9
  12. package/esm/api/ctid-ng.js +38 -5
  13. package/esm/api/dird.js +29 -3
  14. package/esm/api/webhookd.js +26 -3
  15. package/esm/api-client.js +91 -21
  16. package/esm/checker/Checker.js +241 -190
  17. package/esm/checker/checks/aor.js +91 -21
  18. package/esm/checker/checks/api.js +91 -21
  19. package/esm/checker/checks/index.js +231 -180
  20. package/esm/checker/checks/wazo-websocket.js +42 -17
  21. package/esm/checker/checks/webrtc-transport.js +214 -165
  22. package/esm/checker/checks/webrtc.js +214 -165
  23. package/esm/domain/AdHocAPIConference.js +91 -21
  24. package/esm/domain/Call.js +3 -0
  25. package/esm/domain/CallLog.js +8 -1
  26. package/esm/domain/ChatMessage.js +4 -0
  27. package/esm/domain/ChatRoom.js +3 -0
  28. package/esm/domain/Contact.js +4 -1
  29. package/esm/domain/Features.js +91 -21
  30. package/esm/domain/Meeting.js +28 -5
  31. package/esm/domain/Phone/CTIPhone.js +109 -35
  32. package/esm/domain/Phone/WebRTCPhone.js +159 -102
  33. package/esm/domain/Recording.js +3 -0
  34. package/esm/domain/Voicemail.js +3 -0
  35. package/esm/domain/__tests__/Call.test.js +3 -0
  36. package/esm/domain/__tests__/CallLog.test.js +8 -1
  37. package/esm/domain/__tests__/Contact.test.js +4 -1
  38. package/esm/domain/__tests__/Meeting.test.js +144 -0
  39. package/esm/domain/__tests__/Voicemail.test.js +3 -0
  40. package/esm/index.js +509 -414
  41. package/esm/lib/WazoSessionDescriptionHandler.js +26 -41
  42. package/esm/service/CallApi.js +91 -21
  43. package/esm/service/IssueReporter.js +26 -3
  44. package/esm/service/__tests__/IssueReporter.test.js +26 -3
  45. package/esm/service/getApiClient.js +91 -21
  46. package/esm/simple/Auth.js +499 -404
  47. package/esm/simple/Configuration.js +499 -404
  48. package/esm/simple/Directory.js +91 -21
  49. package/esm/simple/Phone.js +499 -404
  50. package/esm/simple/Websocket.js +45 -19
  51. package/esm/simple/index.js +503 -408
  52. package/esm/simple/room/LocalParticipant.js +503 -408
  53. package/esm/simple/room/Participant.js +503 -408
  54. package/esm/simple/room/RemoteParticipant.js +503 -408
  55. package/esm/simple/room/Room.js +504 -409
  56. package/esm/simple/room/SipRoom.js +503 -408
  57. package/esm/simple/room/Stream.js +503 -408
  58. package/esm/simple/room/__tests__/RemoteParticipant.test.js +503 -408
  59. package/esm/simple/utils.js +503 -408
  60. package/esm/types/WebSocketMessage.js +1 -1
  61. package/esm/utils/__tests__/api-requester.test.js +25 -2
  62. package/esm/utils/api-requester.js +25 -2
  63. package/esm/web-rtc-client.js +214 -165
  64. package/esm/websocket-client.js +43 -18
  65. package/lib/__tests__/api-client.test.js +91 -21
  66. package/lib/__tests__/web-rtc-client.test.js +214 -165
  67. package/lib/api/agentd.js +25 -2
  68. package/lib/api/amid.js +26 -3
  69. package/lib/api/application.js +25 -2
  70. package/lib/api/auth.js +25 -2
  71. package/lib/api/call-logd.js +34 -4
  72. package/lib/api/calld.js +35 -2
  73. package/lib/api/chatd.js +32 -2
  74. package/lib/api/confd.js +56 -9
  75. package/lib/api/ctid-ng.js +38 -5
  76. package/lib/api/dird.js +29 -3
  77. package/lib/api/webhookd.js +26 -3
  78. package/lib/api-client.js +91 -21
  79. package/lib/checker/Checker.js +241 -190
  80. package/lib/checker/checks/aor.js +91 -21
  81. package/lib/checker/checks/api.js +91 -21
  82. package/lib/checker/checks/index.js +231 -180
  83. package/lib/checker/checks/wazo-websocket.js +42 -17
  84. package/lib/checker/checks/webrtc-transport.js +214 -165
  85. package/lib/checker/checks/webrtc.js +214 -165
  86. package/lib/domain/AdHocAPIConference.js +91 -21
  87. package/lib/domain/Call.js +3 -0
  88. package/lib/domain/CallLog.js +8 -1
  89. package/lib/domain/ChatMessage.js +4 -0
  90. package/lib/domain/ChatRoom.js +3 -0
  91. package/lib/domain/Contact.js +4 -1
  92. package/lib/domain/Features.js +91 -21
  93. package/lib/domain/Meeting.js +32 -5
  94. package/lib/domain/Phone/CTIPhone.js +109 -35
  95. package/lib/domain/Phone/WebRTCPhone.js +159 -102
  96. package/lib/domain/Recording.js +3 -0
  97. package/lib/domain/Voicemail.js +3 -0
  98. package/lib/domain/__tests__/Call.test.js +3 -0
  99. package/lib/domain/__tests__/CallLog.test.js +8 -1
  100. package/lib/domain/__tests__/Contact.test.js +4 -1
  101. package/lib/domain/__tests__/Meeting.test.js +150 -0
  102. package/lib/domain/__tests__/Voicemail.test.js +3 -0
  103. package/lib/index.js +509 -414
  104. package/lib/lib/WazoSessionDescriptionHandler.js +26 -41
  105. package/lib/service/CallApi.js +91 -21
  106. package/lib/service/IssueReporter.js +26 -3
  107. package/lib/service/__tests__/IssueReporter.test.js +26 -3
  108. package/lib/service/getApiClient.js +91 -21
  109. package/lib/simple/Auth.js +499 -404
  110. package/lib/simple/Configuration.js +499 -404
  111. package/lib/simple/Directory.js +91 -21
  112. package/lib/simple/Phone.js +499 -404
  113. package/lib/simple/Websocket.js +45 -19
  114. package/lib/simple/index.js +503 -408
  115. package/lib/simple/room/LocalParticipant.js +503 -408
  116. package/lib/simple/room/Participant.js +503 -408
  117. package/lib/simple/room/RemoteParticipant.js +503 -408
  118. package/lib/simple/room/Room.js +504 -409
  119. package/lib/simple/room/SipRoom.js +503 -408
  120. package/lib/simple/room/Stream.js +503 -408
  121. package/lib/simple/room/__tests__/RemoteParticipant.test.js +503 -408
  122. package/lib/simple/utils.js +503 -408
  123. package/lib/types/WebSocketMessage.js +2 -0
  124. package/lib/utils/__tests__/api-requester.test.js +25 -2
  125. package/lib/utils/api-requester.js +25 -2
  126. package/lib/web-rtc-client.js +214 -165
  127. package/lib/websocket-client.js +43 -17
  128. package/package.json +1 -1
  129. package/src/api/confd.js +5 -2
  130. package/src/domain/Call.js +3 -0
  131. package/src/domain/CallLog.js +4 -0
  132. package/src/domain/ChatMessage.js +4 -0
  133. package/src/domain/ChatRoom.js +3 -0
  134. package/src/domain/Contact.js +3 -0
  135. package/src/domain/Meeting.js +28 -5
  136. package/src/domain/Phone/CTIPhone.js +4 -0
  137. package/src/domain/Phone/Phone.js +2 -0
  138. package/src/domain/Phone/WebRTCPhone.js +49 -15
  139. package/src/domain/Recording.js +3 -0
  140. package/src/domain/Voicemail.js +3 -0
  141. package/src/domain/__tests__/Meeting.test.js +50 -0
  142. package/src/lib/WazoSessionDescriptionHandler.js +1 -35
  143. package/src/service/IssueReporter.js +25 -2
  144. package/src/simple/Phone.js +5 -0
  145. package/src/types/WebSocketMessage.js +5 -1
  146. package/src/web-rtc-client.js +41 -24
  147. package/src/websocket-client.js +2 -0
@@ -102,7 +102,7 @@ const isMobile = () => typeof navigator !== 'undefined' && navigator.product ===
102
102
 
103
103
  const methods = ['head', 'get', 'post', 'put', 'delete'];
104
104
 
105
- const logger$c = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
105
+ const logger = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
106
106
 
107
107
  // Use a function here to be able to mock it in tests
108
108
  const realFetch = () => {
@@ -241,7 +241,7 @@ class ApiRequester {
241
241
  };
242
242
 
243
243
  if (this.refreshTokenPromise) {
244
- logger$c.info('A token is already refreshing, waiting ...', { url });
244
+ logger.info('A token is already refreshing, waiting ...', { url });
245
245
  await this.refreshTokenPromise;
246
246
  }
247
247
 
@@ -261,7 +261,7 @@ class ApiRequester {
261
261
  return promise.then(async (err ) => {
262
262
  // Check if the token is still valid
263
263
  if (firstCall && this._checkTokenExpired(response, err)) {
264
- logger$c.warn('token expired', { error: err.reason });
264
+ logger.warn('token expired', { error: err.reason });
265
265
  // Replay the call after refreshing the token
266
266
  return this._replayWithNewToken(err, path, method, body, headers, parse);
267
267
  }
@@ -271,7 +271,7 @@ class ApiRequester {
271
271
  : exceptionClass.fromResponse(err, response.status);
272
272
 
273
273
  if (this.shouldLogErrors) {
274
- logger$c.error('API error', error);
274
+ logger.error('API error', error);
275
275
  }
276
276
 
277
277
  throw error;
@@ -281,7 +281,7 @@ class ApiRequester {
281
281
  return newParse(response, isJson);
282
282
  }).catch(error => {
283
283
  if (this.shouldLogErrors) {
284
- logger$c.error('Fetch failed', { url, options, message: error.message, stack: error.stack });
284
+ logger.error('Fetch failed', { url, options, message: error.message, stack: error.stack });
285
285
  }
286
286
 
287
287
  throw error;
@@ -309,13 +309,13 @@ class ApiRequester {
309
309
  ) {
310
310
  const isTokenNotFound = this._isTokenNotFound(err);
311
311
  let newPath = path;
312
- logger$c.info('refreshing token', { inProgress: !!this.refreshTokenPromise });
312
+ logger.info('refreshing token', { inProgress: !!this.refreshTokenPromise });
313
313
 
314
314
  this.refreshTokenPromise = this.refreshTokenPromise || this.refreshTokenCallback();
315
315
 
316
316
  return this.refreshTokenPromise.then(() => {
317
317
  this.refreshTokenPromise = null;
318
- logger$c.info('token refreshed', { isTokenNotFound });
318
+ logger.info('token refreshed', { isTokenNotFound });
319
319
  if (isTokenNotFound) {
320
320
  const pathParts = path.split('/');
321
321
  pathParts.pop();
@@ -414,6 +414,7 @@ class IssueReporter {
414
414
 
415
415
 
416
416
 
417
+
417
418
 
418
419
  constructor() {
419
420
  addLevelsTo(this);
@@ -425,12 +426,17 @@ class IssueReporter {
425
426
  this.bufferTimeout = null;
426
427
  this._boundProcessBuffer = this._processBuffer.bind(this);
427
428
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
429
+ this._callback = null;
428
430
  }
429
431
 
430
432
  init() {
431
433
  this._catchConsole();
432
434
  }
433
435
 
436
+ setCallback(cb ) {
437
+ this._callback = cb;
438
+ }
439
+
434
440
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
435
441
  this.remoteClientConfiguration = configuration;
436
442
  }
@@ -466,6 +472,7 @@ class IssueReporter {
466
472
 
467
473
  // Handle category label
468
474
  let category = null;
475
+ let skipSendToRemote = false;
469
476
  let extra = {};
470
477
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
471
478
  category = args[0].split('=')[1];
@@ -481,6 +488,7 @@ class IssueReporter {
481
488
  errorMessage: lastArg.message,
482
489
  errorStack: lastArg.stack,
483
490
  errorType: lastArg.constructor.name,
491
+ skipSendToRemote: lastArg.skipSendToRemote,
484
492
  };
485
493
  } else {
486
494
  extra = lastArg;
@@ -489,6 +497,11 @@ class IssueReporter {
489
497
  args.splice(1, 1);
490
498
  }
491
499
 
500
+ if (extra.skipSendToRemote) {
501
+ skipSendToRemote = true;
502
+ delete extra.skipSendToRemote;
503
+ }
504
+
492
505
  const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
493
506
  const message = args.join(', ');
494
507
  let consoleMessage = message;
@@ -509,7 +522,13 @@ class IssueReporter {
509
522
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
510
523
  oldMethod.apply(oldMethod, [date, consoleMessage]);
511
524
 
512
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
525
+ if (this._callback) {
526
+ this._callback(level, consoleMessage);
527
+ }
528
+
529
+ if (!skipSendToRemote) {
530
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
531
+ }
513
532
  }
514
533
 
515
534
  logRequest(url , options , response , start ) {
@@ -654,7 +673,11 @@ class IssueReporter {
654
673
  },
655
674
  // $FlowFixMe
656
675
  body,
657
- }).catch(() => {
676
+ }).catch((e ) => {
677
+ // $FlowFixMe
678
+ e.skipSendToRemote = true;
679
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
680
+
658
681
  setTimeout(() => {
659
682
  if (isArray) {
660
683
  payload = payload.map(message => {
@@ -1527,6 +1550,9 @@ class Contact {
1527
1550
  }
1528
1551
 
1529
1552
  static parseMany(response ) {
1553
+ if (!response || !response.results) {
1554
+ return [];
1555
+ }
1530
1556
  return response.results.map(r => Contact.parse(r, response.column_types));
1531
1557
  }
1532
1558
 
@@ -2604,8 +2630,9 @@ class ExternalApp {
2604
2630
 
2605
2631
 
2606
2632
 
2607
-
2633
+
2608
2634
 
2635
+
2609
2636
 
2610
2637
 
2611
2638
  class Meeting {
@@ -2616,9 +2643,10 @@ class Meeting {
2616
2643
 
2617
2644
 
2618
2645
 
2619
-
2646
+
2620
2647
 
2621
2648
 
2649
+
2622
2650
 
2623
2651
  static parse(plain ) {
2624
2652
  return new Meeting({
@@ -2628,24 +2656,43 @@ class Meeting {
2628
2656
  ownerUuids: plain.owner_uuids,
2629
2657
  port: plain.port,
2630
2658
  uuid: plain.uuid,
2631
- number: plain.number,
2659
+ extension: plain.exten,
2632
2660
  persistent: plain.persistent,
2661
+ creationTime: moment(plain.creation_time).toDate(),
2633
2662
  });
2634
2663
  }
2635
2664
 
2665
+ static parseMany(items ) {
2666
+ if (!items) {
2667
+ return [];
2668
+ }
2669
+ return items.map(plain => Meeting.parse(plain));
2670
+ }
2671
+
2636
2672
  static newFrom(meeting ) {
2637
2673
  return newFrom(meeting, Meeting);
2638
2674
  }
2639
2675
 
2640
- constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
2676
+ constructor({
2677
+ uuid,
2678
+ name,
2679
+ guestSipAuthorization,
2680
+ ownerUuids,
2681
+ port,
2682
+ uri,
2683
+ extension,
2684
+ persistent,
2685
+ creationTime,
2686
+ } = {}) {
2641
2687
  this.guestSipAuthorization = guestSipAuthorization;
2642
2688
  this.uri = uri;
2643
2689
  this.name = name;
2644
2690
  this.ownerUuids = ownerUuids;
2645
2691
  this.port = port;
2646
2692
  this.uuid = uuid;
2647
- this.number = number;
2693
+ this.extension = extension;
2648
2694
  this.persistent = persistent;
2695
+ this.creationTime = creationTime;
2649
2696
 
2650
2697
  // Useful to compare instead of instanceof with minified code
2651
2698
  this.type = 'Meeting';
@@ -2723,8 +2770,11 @@ var confdMethods = (client , baseUrl ) => ({
2723
2770
  }
2724
2771
  },
2725
2772
 
2726
- createMyMeeting: (name ) =>
2727
- client.post(`${baseUrl}/users/me/meetings`, { name }).then(Meeting.parse),
2773
+ getMyMeetings: () =>
2774
+ client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
2775
+
2776
+ createMyMeeting: (name , persistent ) =>
2777
+ client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
2728
2778
 
2729
2779
  deleteMyMeeting: (meetingUuid ) =>
2730
2780
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -2820,6 +2870,10 @@ class ChatMessage {
2820
2870
 
2821
2871
 
2822
2872
  static parseMany(plain ) {
2873
+ if (!plain || !plain.items) {
2874
+ return [];
2875
+ }
2876
+
2823
2877
  return plain.items.map(item => ChatMessage.parse(item));
2824
2878
  }
2825
2879
 
@@ -2929,6 +2983,9 @@ class Voicemail {
2929
2983
  }
2930
2984
 
2931
2985
  static parseMany(plain ) {
2986
+ if (!plain) {
2987
+ return [];
2988
+ }
2932
2989
  const plainUnread = plain.folders.filter(folder => folder.type === 'new')[0].messages;
2933
2990
  const plainRead = plain.folders.filter(folder => folder.type === 'old')[0].messages;
2934
2991
 
@@ -3038,6 +3095,9 @@ class Call {
3038
3095
 
3039
3096
 
3040
3097
  static parseMany(plain ) {
3098
+ if (!plain) {
3099
+ return [];
3100
+ }
3041
3101
  return plain.map((plainCall ) => Call.parse(plainCall));
3042
3102
  }
3043
3103
 
@@ -3581,6 +3641,9 @@ class Recording {
3581
3641
 
3582
3642
 
3583
3643
  static parseMany(recordings = []) {
3644
+ if (!recordings) {
3645
+ return [];
3646
+ }
3584
3647
  return recordings.map(item => Recording.parse(item));
3585
3648
  }
3586
3649
 
@@ -3682,6 +3745,10 @@ class CallLog {
3682
3745
  }
3683
3746
 
3684
3747
  static parseMany(plain ) {
3748
+ if (!plain || !plain.items) {
3749
+ return [];
3750
+ }
3751
+
3685
3752
  return plain.items.map(item => CallLog.parse(item));
3686
3753
  }
3687
3754
 
@@ -3986,7 +4053,7 @@ const TRANSFER_FLOW_BLIND = 'blind';
3986
4053
 
3987
4054
  // const MINIMUM_WAZO_ENGINE_VERSION_FOR_CTI_HOLD = '20.11';
3988
4055
 
3989
- const logger$b = IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
4056
+ const logger$1 = IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
3990
4057
 
3991
4058
  class CTIPhone extends Emitter {
3992
4059
 
@@ -3999,7 +4066,7 @@ class CTIPhone extends Emitter {
3999
4066
 
4000
4067
  constructor(session , isMobile = false, callbackAllLines = false) {
4001
4068
  super();
4002
- logger$b.info('CTI Phone created');
4069
+ logger$1.info('CTI Phone created');
4003
4070
  this.session = session;
4004
4071
  this.isMobile = isMobile;
4005
4072
  this.callbackAllLines = callbackAllLines;
@@ -4060,7 +4127,7 @@ class CTIPhone extends Emitter {
4060
4127
  }
4061
4128
 
4062
4129
  async makeCall(number , line ) {
4063
- logger$b.info('make CTI call', { number });
4130
+ logger$1.info('make CTI call', { number });
4064
4131
 
4065
4132
  if (!number) {
4066
4133
  return null;
@@ -4083,7 +4150,7 @@ class CTIPhone extends Emitter {
4083
4150
  if (!callSession) {
4084
4151
  return Promise.resolve(null);
4085
4152
  }
4086
- logger$b.info('accept CTI call', { callId: callSession.getId(), number: callSession.number });
4153
+ logger$1.info('accept CTI call', { callId: callSession.getId(), number: callSession.number });
4087
4154
 
4088
4155
  if (!this.currentCall) {
4089
4156
  this.currentCall = callSession.call;
@@ -4096,7 +4163,7 @@ class CTIPhone extends Emitter {
4096
4163
  if (!callSession) {
4097
4164
  return;
4098
4165
  }
4099
- logger$b.info('end current CTI call', { callId: callSession.getId(), number: callSession.number });
4166
+ logger$1.info('end current CTI call', { callId: callSession.getId(), number: callSession.number });
4100
4167
 
4101
4168
  this.currentCall = undefined;
4102
4169
  this.eventEmitter.emit('onCallEnded', callSession);
@@ -4106,7 +4173,7 @@ class CTIPhone extends Emitter {
4106
4173
  if (!callSession) {
4107
4174
  return Promise.resolve(false);
4108
4175
  }
4109
- logger$b.info('hangup CTI call', { callId: callSession.getId(), number: callSession.number });
4176
+ logger$1.info('hangup CTI call', { callId: callSession.getId(), number: callSession.number });
4110
4177
 
4111
4178
  try {
4112
4179
  await CallApi.cancelCall(callSession);
@@ -4117,7 +4184,7 @@ class CTIPhone extends Emitter {
4117
4184
  this.eventEmitter.emit('onCallEnded', callSession);
4118
4185
  return true;
4119
4186
  } catch (e) {
4120
- logger$b.error('hangup CTI call, error', e);
4187
+ logger$1.error('hangup CTI call, error', e);
4121
4188
 
4122
4189
  this.eventEmitter.emit('onCallFailed', callSession);
4123
4190
  return false;
@@ -4130,7 +4197,7 @@ class CTIPhone extends Emitter {
4130
4197
  if (!callSession) {
4131
4198
  return;
4132
4199
  }
4133
- logger$b.info('reject CTI call', { callId: callSession.getId(), number: callSession.number });
4200
+ logger$1.info('reject CTI call', { callId: callSession.getId(), number: callSession.number });
4134
4201
 
4135
4202
  await CallApi.cancelCall(callSession);
4136
4203
  this.eventEmitter.emit('onCallEnded', callSession);
@@ -4140,7 +4207,7 @@ class CTIPhone extends Emitter {
4140
4207
  if (!callSession) {
4141
4208
  return;
4142
4209
  }
4143
- logger$b.info('transfer CTI call', { callId: callSession.getId(), number: callSession.number, to: number });
4210
+ logger$1.info('transfer CTI call', { callId: callSession.getId(), number: callSession.number, to: number });
4144
4211
 
4145
4212
  await CallApi.transferCall(callSession.callId, number, TRANSFER_FLOW_BLIND);
4146
4213
  }
@@ -4153,19 +4220,19 @@ class CTIPhone extends Emitter {
4153
4220
  if (!callSession) {
4154
4221
  return;
4155
4222
  }
4156
- logger$b.info('indirect CTI transfer', { callId: callSession.getId(), number: callSession.number, to: number });
4223
+ logger$1.info('indirect CTI transfer', { callId: callSession.getId(), number: callSession.number, to: number });
4157
4224
 
4158
4225
  return CallApi.transferCall(callSession.callId, number, TRANSFER_FLOW_ATTENDED);
4159
4226
  }
4160
4227
 
4161
4228
  async cancelCTIIndirectTransfer(transferId ) {
4162
- logger$b.info('cancel CTI transfer', { transferId });
4229
+ logger$1.info('cancel CTI transfer', { transferId });
4163
4230
 
4164
4231
  return CallApi.cancelCallTransfer(transferId);
4165
4232
  }
4166
4233
 
4167
4234
  async confirmCTIIndirectTransfer(transferId ) {
4168
- logger$b.info('confirm CTI transfer', { transferId });
4235
+ logger$1.info('confirm CTI transfer', { transferId });
4169
4236
 
4170
4237
  return CallApi.confirmCallTransfer(transferId);
4171
4238
  }
@@ -4174,19 +4241,19 @@ class CTIPhone extends Emitter {
4174
4241
  if (!callSession) {
4175
4242
  return;
4176
4243
  }
4177
- logger$b.info('send CTI key', { callId: callSession.getId(), number: callSession.number, digits });
4244
+ logger$1.info('send CTI key', { callId: callSession.getId(), number: callSession.number, digits });
4178
4245
 
4179
4246
  return CallApi.sendDTMF(callSession.callId, digits);
4180
4247
  }
4181
4248
 
4182
4249
  onConnectionMade() {
4183
- logger$b.info('on CTI connection made');
4250
+ logger$1.info('on CTI connection made');
4184
4251
 
4185
4252
  this.eventEmitter.emit('onCallAccepted');
4186
4253
  }
4187
4254
 
4188
4255
  async close() {
4189
- logger$b.info('CTI close');
4256
+ logger$1.info('CTI close');
4190
4257
 
4191
4258
  return Promise.resolve();
4192
4259
  }
@@ -4195,7 +4262,7 @@ class CTIPhone extends Emitter {
4195
4262
  if (!callSession) {
4196
4263
  return;
4197
4264
  }
4198
- logger$b.info('CTI hold', { callId: callSession.getId(), number: callSession.number });
4265
+ logger$1.info('CTI hold', { callId: callSession.getId(), number: callSession.number });
4199
4266
 
4200
4267
  return CallApi.hold(callSession.callId);
4201
4268
  }
@@ -4204,7 +4271,7 @@ class CTIPhone extends Emitter {
4204
4271
  if (!callSession) {
4205
4272
  return;
4206
4273
  }
4207
- logger$b.info('CTI resume', { callId: callSession.getId(), number: callSession.number });
4274
+ logger$1.info('CTI resume', { callId: callSession.getId(), number: callSession.number });
4208
4275
 
4209
4276
  return CallApi.resume(callSession.callId);
4210
4277
  }
@@ -4213,7 +4280,7 @@ class CTIPhone extends Emitter {
4213
4280
  if (!callSession) {
4214
4281
  return;
4215
4282
  }
4216
- logger$b.info('CTI mute', { callId: callSession.getId(), number: callSession.number });
4283
+ logger$1.info('CTI mute', { callId: callSession.getId(), number: callSession.number });
4217
4284
 
4218
4285
  return CallApi.mute(callSession.callId);
4219
4286
  }
@@ -4222,7 +4289,7 @@ class CTIPhone extends Emitter {
4222
4289
  if (!callSession) {
4223
4290
  return;
4224
4291
  }
4225
- logger$b.info('CTI unmute', { callId: callSession.getId(), number: callSession.number });
4292
+ logger$1.info('CTI unmute', { callId: callSession.getId(), number: callSession.number });
4226
4293
 
4227
4294
  return CallApi.unmute(callSession.callId);
4228
4295
  }
@@ -4251,6 +4318,10 @@ class CTIPhone extends Emitter {
4251
4318
  return false;
4252
4319
  }
4253
4320
 
4321
+ hasAVideoTrack() {
4322
+ return false;
4323
+ }
4324
+
4254
4325
  getLocalStreamForCall() {
4255
4326
  return null;
4256
4327
  }
@@ -4644,6 +4715,9 @@ class ChatRoom {
4644
4715
 
4645
4716
 
4646
4717
  static parseMany(plain ) {
4718
+ if (!plain || !plain.items) {
4719
+ return [];
4720
+ }
4647
4721
  return plain.items.map(item => ChatRoom.parse(item));
4648
4722
  }
4649
4723
 
@@ -5224,7 +5298,7 @@ const AGENTD_VERSION = '1.0';
5224
5298
  const WEBHOOKD_VERSION = '1.0';
5225
5299
  const AMID_VERSION = '1.0';
5226
5300
 
5227
- const logger$a = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
5301
+ const logger$2 = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
5228
5302
 
5229
5303
  class ApiClient {
5230
5304
 
@@ -5276,12 +5350,12 @@ class ApiClient {
5276
5350
  }
5277
5351
 
5278
5352
  async forceRefreshToken() {
5279
- logger$a.info('forcing refresh token, calling callback');
5353
+ logger$2.info('forcing refresh token, calling callback');
5280
5354
  return this.refreshTokenCallback();
5281
5355
  }
5282
5356
 
5283
5357
  async refreshTokenCallback() {
5284
- logger$a.info('refresh token callback called', {
5358
+ logger$2.info('refresh token callback called', {
5285
5359
  refreshToken: this.refreshToken,
5286
5360
  refreshBackend: this.refreshBackend,
5287
5361
  refreshExpiration: this.refreshExpiration,
@@ -5299,7 +5373,7 @@ class ApiClient {
5299
5373
  this.isMobile,
5300
5374
  );
5301
5375
 
5302
- logger$a.info('token refreshed', { token: session.token });
5376
+ logger$2.info('token refreshed', { token: session.token });
5303
5377
 
5304
5378
  if (this.onRefreshToken) {
5305
5379
  this.onRefreshToken(session.token, session);
@@ -5440,7 +5514,7 @@ var getApiClient = (forServer ) => {
5440
5514
  class InvalidSubscription extends Error {}
5441
5515
  class InvalidAuthorization extends Error {}
5442
5516
 
5443
- const logger$9 = IssueReporter$1.loggerFor('simple-auth');
5517
+ const logger$3 = IssueReporter$1.loggerFor('simple-auth');
5444
5518
 
5445
5519
  class Auth {
5446
5520
 
@@ -5475,7 +5549,7 @@ class Auth {
5475
5549
  setApiClientId(this.clientId);
5476
5550
  setRefreshExpiration(this.expiration);
5477
5551
  setOnRefreshToken((token , session ) => {
5478
- logger$9.info('on refresh token done', { token });
5552
+ logger$3.info('on refresh token done', { token });
5479
5553
  setApiToken(token);
5480
5554
  Wazo.Websocket.updateToken(token);
5481
5555
 
@@ -5520,7 +5594,7 @@ class Auth {
5520
5594
  const rawSession = await getApiClient().auth.authenticate(token);
5521
5595
  return this._onAuthenticated(rawSession);
5522
5596
  } catch (e) {
5523
- logger$9.error('on validate token error', e);
5597
+ logger$3.error('on validate token error', e);
5524
5598
  console.warn(e);
5525
5599
  return false;
5526
5600
  }
@@ -5876,7 +5950,7 @@ class AdHocAPIConference {
5876
5950
 
5877
5951
  /* */
5878
5952
 
5879
- const parseCandidate$1 = (candidate ) => {
5953
+ const parseCandidate = (candidate ) => {
5880
5954
  if (!candidate) {
5881
5955
  return null;
5882
5956
  }
@@ -5889,10 +5963,6 @@ const getSrflxOrRelay = (candidates ) =>
5889
5963
  candidates
5890
5964
  .filter(candidate => candidate && (candidate.type === 'srflx' || candidate.type === 'relay'));
5891
5965
 
5892
- const areCandidateValid = (candidates ) =>
5893
- getSrflxOrRelay(candidates)
5894
- .length > 0;
5895
-
5896
5966
  const getVideoDirection = (sdp ) => {
5897
5967
  const parsedSdp = sdpParser.parse(sdp);
5898
5968
  const videoMedia = parsedSdp.media.find(media => media.type === 'video');
@@ -5945,8 +6015,6 @@ const fixSdp = (sdp , candidates , forcePort = true)
5945
6015
  /* global RTCSessionDescriptionInit, navigator */
5946
6016
 
5947
6017
  const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
5948
- const MAX_WAIT_FOR_ICE_TRIES = 20;
5949
- const WAIT_FOR_ICE_TIMEOUT = 500;
5950
6018
 
5951
6019
  // Customized mediaStreamFactory allowing to send screensharing stream directory when upgrading
5952
6020
  const wazoMediaStreamFactory = (constraints ) => {
@@ -6036,7 +6104,7 @@ class WazoSessionDescriptionHandler extends SessionDescriptionHandler {
6036
6104
  this.peerConnectionDelegate.onicecandidate = event => {
6037
6105
  wazoLogger.trace('onicecandidate', event.candidate ? event.candidate.candidate : { done: true });
6038
6106
  if (event.candidate) {
6039
- this.gatheredCandidates.push(parseCandidate$1(event.candidate.candidate));
6107
+ this.gatheredCandidates.push(parseCandidate(event.candidate.candidate));
6040
6108
  }
6041
6109
  };
6042
6110
 
@@ -6136,38 +6204,6 @@ class WazoSessionDescriptionHandler extends SessionDescriptionHandler {
6136
6204
  this._peerConnection = undefined;
6137
6205
  }
6138
6206
 
6139
- async _waitForValidGatheredIce() {
6140
- let tries = 0;
6141
-
6142
- while (!areCandidateValid(this.gatheredCandidates) && tries < MAX_WAIT_FOR_ICE_TRIES) {
6143
- wazoLogger.trace('SessionDescriptionHandler._waitForValidGatheredIce, waiting for ice', {
6144
- tries,
6145
- max: MAX_WAIT_FOR_ICE_TRIES,
6146
- });
6147
-
6148
- tries++;
6149
-
6150
- // eslint-disable-next-line no-await-in-loop
6151
- await new Promise(resolve => setTimeout(resolve, WAIT_FOR_ICE_TIMEOUT));
6152
- }
6153
-
6154
- if (tries >= MAX_WAIT_FOR_ICE_TRIES) {
6155
- const errorMsg = 'No valid candidates found, can\'t answer the call';
6156
- const error = new Error(errorMsg);
6157
- wazoLogger.error(errorMsg, { tries, max: MAX_WAIT_FOR_ICE_TRIES });
6158
-
6159
- // Emit an error, because sip.js catches the exception and switch to status Terminated.
6160
- this.eventEmitter.emit('error', error);
6161
-
6162
- wazoLogger.error('No valid candidates found', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
6163
- }
6164
-
6165
- // eslint-disable-next-line
6166
- wazoLogger.trace('Found valid candidates', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
6167
-
6168
- return this.getLocalSessionDescription();
6169
- }
6170
-
6171
6207
  // Overridden to send `inactive` in conference
6172
6208
  updateDirection(options , isConference = false,
6173
6209
  audioOnly = false) {
@@ -6532,7 +6568,7 @@ const DEFAULT_ICE_TIMEOUT = 3000;
6532
6568
  const SEND_STATS_DELAY = 5000;
6533
6569
 
6534
6570
  const states = ['STATUS_NULL', 'STATUS_NEW', 'STATUS_CONNECTING', 'STATUS_CONNECTED', 'STATUS_COMPLETED'];
6535
- const logger$8 = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-client') : console;
6571
+ const logger$4 = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-client') : console;
6536
6572
  const statsLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-stats') : console;
6537
6573
 
6538
6574
  // events
@@ -6546,14 +6582,14 @@ const TRANSPORT_ERROR = 'transportError';
6546
6582
  const MESSAGE = 'message';
6547
6583
  const ACCEPTED = 'accepted';
6548
6584
  const REJECTED = 'rejected';
6549
- const ON_TRACK$1 = 'onTrack';
6550
- const ON_REINVITE$1 = 'reinvite';
6585
+ const ON_TRACK = 'onTrack';
6586
+ const ON_REINVITE = 'reinvite';
6551
6587
  const ON_ERROR = 'onError';
6552
6588
  const ON_SCREEN_SHARING_REINVITE = 'onScreenSharingReinvite';
6553
- const ON_NETWORK_STATS$1 = 'onNetworkStats';
6554
- const ON_DISCONNECTED$1 = 'onDisconnected';
6589
+ const ON_NETWORK_STATS = 'onNetworkStats';
6590
+ const ON_DISCONNECTED = 'onDisconnected';
6555
6591
 
6556
- const events$1 = [REGISTERED, UNREGISTERED, REGISTRATION_FAILED, INVITE];
6592
+ const events = [REGISTERED, UNREGISTERED, REGISTRATION_FAILED, INVITE];
6557
6593
  const transportEvents = [CONNECTED, DISCONNECTED, TRANSPORT_ERROR, MESSAGE];
6558
6594
  class CanceledCallError extends Error {}
6559
6595
 
@@ -6689,12 +6725,12 @@ class WebRTCClient extends Emitter {
6689
6725
  this.MESSAGE = MESSAGE;
6690
6726
  this.ACCEPTED = ACCEPTED;
6691
6727
  this.REJECTED = REJECTED;
6692
- this.ON_TRACK = ON_TRACK$1;
6693
- this.ON_REINVITE = ON_REINVITE$1;
6728
+ this.ON_TRACK = ON_TRACK;
6729
+ this.ON_REINVITE = ON_REINVITE;
6694
6730
  this.ON_ERROR = ON_ERROR;
6695
6731
  this.ON_SCREEN_SHARING_REINVITE = ON_SCREEN_SHARING_REINVITE;
6696
- this.ON_NETWORK_STATS = ON_NETWORK_STATS$1;
6697
- this.ON_DISCONNECTED = ON_DISCONNECTED$1;
6732
+ this.ON_NETWORK_STATS = ON_NETWORK_STATS;
6733
+ this.ON_DISCONNECTED = ON_DISCONNECTED;
6698
6734
  }
6699
6735
 
6700
6736
  configureMedia(media ) {
@@ -6711,13 +6747,13 @@ class WebRTCClient extends Emitter {
6711
6747
 
6712
6748
  createUserAgent(configOverrides ) {
6713
6749
  const webRTCConfiguration = this._createWebRTCConfiguration(configOverrides);
6714
- logger$8.info('sdk webrtc, creating UA', { webRTCConfiguration });
6750
+ logger$4.info('sdk webrtc, creating UA', { webRTCConfiguration });
6715
6751
 
6716
6752
  webRTCConfiguration.delegate = {
6717
6753
  onConnect: this.onConnect.bind(this),
6718
6754
  onDisconnect: this.onDisconnect.bind(this),
6719
6755
  onInvite: (invitation ) => {
6720
- logger$8.info('sdk webrtc on invite', {
6756
+ logger$4.info('sdk webrtc on invite', {
6721
6757
  method: 'delegate.onInvite',
6722
6758
  id: invitation.id,
6723
6759
  remoteURI: invitation.remoteURI,
@@ -6760,7 +6796,7 @@ class WebRTCClient extends Emitter {
6760
6796
  }
6761
6797
 
6762
6798
  onConnect() {
6763
- logger$8.info('sdk webrtc connected', { method: 'delegate.onConnect' });
6799
+ logger$4.info('sdk webrtc connected', { method: 'delegate.onConnect' });
6764
6800
  this.eventEmitter.emit(CONNECTED);
6765
6801
  if (!this.isRegistered() && this.registerer && this.registerer.waiting) {
6766
6802
  this.registerer.waitingToggle(false);
@@ -6769,7 +6805,7 @@ class WebRTCClient extends Emitter {
6769
6805
  }
6770
6806
 
6771
6807
  async onDisconnect(error ) {
6772
- logger$8.info('sdk webrtc disconnected', { method: 'delegate.onConnect', error });
6808
+ logger$4.info('sdk webrtc disconnected', { method: 'delegate.onConnect', error });
6773
6809
  this.connectionPromise = null;
6774
6810
  // The UA will attempt to reconnect automatically when an error occurred
6775
6811
  this.eventEmitter.emit(DISCONNECTED, error);
@@ -6794,37 +6830,37 @@ class WebRTCClient extends Emitter {
6794
6830
  };
6795
6831
 
6796
6832
  if (this.skipRegister) {
6797
- logger$8.info('sdk webrtc skip register...', logInfo);
6833
+ logger$4.info('sdk webrtc skip register...', logInfo);
6798
6834
  return Promise.resolve();
6799
6835
  }
6800
6836
 
6801
- logger$8.info('sdk webrtc registering...', logInfo);
6837
+ logger$4.info('sdk webrtc registering...', logInfo);
6802
6838
 
6803
6839
  if (!this.userAgent) {
6804
- logger$8.info('sdk webrtc recreating User Agent');
6840
+ logger$4.info('sdk webrtc recreating User Agent');
6805
6841
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
6806
6842
  }
6807
6843
  if (!this.userAgent || this.isRegistered()) {
6808
- logger$8.info('sdk webrtc registering aborted, already registered or no UA can be created');
6844
+ logger$4.info('sdk webrtc registering aborted, already registered or no UA can be created');
6809
6845
  return Promise.resolve();
6810
6846
  }
6811
6847
 
6812
6848
  if (this.connectionPromise || (this.registerer && this.registerer.waiting)) {
6813
- logger$8.info('sdk webrtc registering aborted due to a registration in progress.');
6849
+ logger$4.info('sdk webrtc registering aborted due to a registration in progress.');
6814
6850
  return Promise.resolve();
6815
6851
  }
6816
6852
 
6817
6853
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
6818
6854
 
6819
6855
  const onRegisterFailed = () => {
6820
- logger$8.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6856
+ logger$4.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6821
6857
  this.connectionPromise = null;
6822
6858
  if (this.registerer && this.registerer.waiting) {
6823
6859
  this.registerer.waitingToggle(false);
6824
6860
  }
6825
6861
 
6826
6862
  if (tries <= MAX_REGISTER_TRIES) {
6827
- logger$8.info('sdk webrtc registering, retrying...', { tries });
6863
+ logger$4.info('sdk webrtc registering, retrying...', { tries });
6828
6864
  setTimeout(() => this.register(tries + 1), 300);
6829
6865
  }
6830
6866
  };
@@ -6833,18 +6869,18 @@ class WebRTCClient extends Emitter {
6833
6869
  // Avoid race condition with the close method called just before register and setting userAgent to null
6834
6870
  // during the resolution of the primise.
6835
6871
  if (!this.userAgent) {
6836
- logger$8.info('sdk webrtc recreating User Agent after connection');
6872
+ logger$4.info('sdk webrtc recreating User Agent after connection');
6837
6873
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
6838
6874
  }
6839
6875
 
6840
- logger$8.info('sdk webrtc registering, transport connected', { registerOptions, ua: !!this.userAgent });
6876
+ logger$4.info('sdk webrtc registering, transport connected', { registerOptions, ua: !!this.userAgent });
6841
6877
  this.registerer = new Registerer(this.userAgent, registerOptions);
6842
6878
  this.connectionPromise = null;
6843
6879
  this._monkeyPatchRegisterer(this.registerer);
6844
6880
 
6845
6881
  // Bind registerer events
6846
6882
  this.registerer.stateChange.addListener(newState => {
6847
- logger$8.info('sdk webrtc registering, state changed', { newState });
6883
+ logger$4.info('sdk webrtc registering, state changed', { newState });
6848
6884
 
6849
6885
  if (newState === RegistererState.Registered && this.registerer
6850
6886
  && this.registerer.state === RegistererState.Registered) {
@@ -6857,7 +6893,7 @@ class WebRTCClient extends Emitter {
6857
6893
  const options = {
6858
6894
  requestDelegate: {
6859
6895
  onReject: response => {
6860
- logger$8.error('sdk webrtc registering, rejected', { response });
6896
+ logger$4.error('sdk webrtc registering, rejected', { response });
6861
6897
 
6862
6898
  onRegisterFailed();
6863
6899
  },
@@ -6865,13 +6901,13 @@ class WebRTCClient extends Emitter {
6865
6901
  };
6866
6902
 
6867
6903
  return this.registerer.register(options).catch((e) => {
6868
- logger$8.error('sdk webrtc registering, error', e);
6904
+ logger$4.error('sdk webrtc registering, error', e);
6869
6905
 
6870
6906
  this.eventEmitter.emit(REGISTRATION_FAILED);
6871
6907
  return e;
6872
6908
  });
6873
6909
  }).catch(error => {
6874
- logger$8.error('sdk webrtc registering, transport error', error);
6910
+ logger$4.error('sdk webrtc registering, transport error', error);
6875
6911
  onRegisterFailed();
6876
6912
  });
6877
6913
  }
@@ -6900,21 +6936,21 @@ class WebRTCClient extends Emitter {
6900
6936
  }
6901
6937
 
6902
6938
  unregister() {
6903
- logger$8.info('sdk webrtc unregistering..', { userAgent: !!this.userAgent, registerer: !!this.registerer });
6939
+ logger$4.info('sdk webrtc unregistering..', { userAgent: !!this.userAgent, registerer: !!this.registerer });
6904
6940
  if (!this.registerer) {
6905
6941
  return Promise.resolve();
6906
6942
  }
6907
6943
 
6908
6944
  try {
6909
6945
  return this.registerer.unregister().then(() => {
6910
- logger$8.info('sdk webrtc unregistered');
6946
+ logger$4.info('sdk webrtc unregistered');
6911
6947
  this._cleanupRegister();
6912
6948
  }).catch(e => {
6913
- logger$8.error('sdk webrtc unregistering, promise error', e);
6949
+ logger$4.error('sdk webrtc unregistering, promise error', e);
6914
6950
  this._cleanupRegister();
6915
6951
  });
6916
6952
  } catch (e) {
6917
- logger$8.error('sdk webrtc unregistering, error', e);
6953
+ logger$4.error('sdk webrtc unregistering, error', e);
6918
6954
  // Avoid issue with `undefined is not an object (evaluating 'new.target.prototype')` when triggering a new
6919
6955
  // error when the registerer is in a bad state
6920
6956
  this._cleanupRegister();
@@ -6922,7 +6958,7 @@ class WebRTCClient extends Emitter {
6922
6958
  }
6923
6959
 
6924
6960
  stop() {
6925
- logger$8.info('sdk webrtc stop', { userAgent: !!this.userAgent });
6961
+ logger$4.info('sdk webrtc stop', { userAgent: !!this.userAgent });
6926
6962
  if (!this.userAgent) {
6927
6963
  return Promise.resolve();
6928
6964
  }
@@ -6930,12 +6966,12 @@ class WebRTCClient extends Emitter {
6930
6966
  return this.userAgent.stop().then(() => {
6931
6967
  return this._cleanupRegister();
6932
6968
  }).catch(e => {
6933
- logger$8.warn('sdk webrtc stop, error', { message: e.message, stack: e.stack });
6969
+ logger$4.warn('sdk webrtc stop, error', { message: e.message, stack: e.stack });
6934
6970
  });
6935
6971
  }
6936
6972
 
6937
6973
  call(number , enableVideo , audioOnly = false, conference = false) {
6938
- logger$8.info('sdk webrtc creating call', { number, enableVideo, audioOnly });
6974
+ logger$4.info('sdk webrtc creating call', { number, enableVideo, audioOnly });
6939
6975
  const inviterOptions = {
6940
6976
  sessionDescriptionHandlerOptionsReInvite: {
6941
6977
  conference,
@@ -6960,11 +6996,13 @@ class WebRTCClient extends Emitter {
6960
6996
  const inviteOptions = {
6961
6997
  requestDelegate: {
6962
6998
  onAccept: (response ) => {
6963
- session.sessionDescriptionHandler.peerConnection.sfu = conference;
6999
+ if (session.sessionDescriptionHandler.peerConnection) {
7000
+ session.sessionDescriptionHandler.peerConnection.sfu = conference;
7001
+ }
6964
7002
  this._onAccepted(session, response.session, true);
6965
7003
  },
6966
7004
  onReject: (response ) => {
6967
- logger$8.info('on call rejected', { id: session.id, fromTag: session.fromTag });
7005
+ logger$4.info('on call rejected', { id: session.id, fromTag: session.fromTag });
6968
7006
  this._stopSendingStats(session);
6969
7007
  this.stopNetworkMonitoring(session);
6970
7008
 
@@ -6987,11 +7025,11 @@ class WebRTCClient extends Emitter {
6987
7025
  }
6988
7026
 
6989
7027
  answer(session , enableVideo ) {
6990
- logger$8.info('sdk webrtc answer call', { id: session.id, enableVideo });
7028
+ logger$4.info('sdk webrtc answer call', { id: session.id, enableVideo });
6991
7029
 
6992
7030
  if (!session || !session.accept) {
6993
7031
  const error = 'No session to answer, or not an invitation';
6994
- logger$8.warn(error);
7032
+ logger$4.warn(error);
6995
7033
  return Promise.reject(new Error(error));
6996
7034
  }
6997
7035
  const options = {
@@ -7001,15 +7039,15 @@ class WebRTCClient extends Emitter {
7001
7039
  return session.accept(options).then(() => {
7002
7040
  if (session.isCanceled) {
7003
7041
  const message = 'accepted a canceled session (or was canceled during the accept phase).';
7004
- logger$8.error(message, { id: session.id });
7042
+ logger$4.error(message, { id: session.id });
7005
7043
  this.onCallEnded(session);
7006
7044
 
7007
7045
  throw new CanceledCallError(message);
7008
7046
  }
7009
- logger$8.info('sdk webrtc answer, accepted.');
7047
+ logger$4.info('sdk webrtc answer, accepted.');
7010
7048
  this._onAccepted(session);
7011
7049
  }).catch(e => {
7012
- logger$8.error(`answer call error for ${session ? session.id : 'n/a'}`, e);
7050
+ logger$4.error(`answer call error for ${session ? session.id : 'n/a'}`, e);
7013
7051
 
7014
7052
  throw e;
7015
7053
  });
@@ -7017,7 +7055,7 @@ class WebRTCClient extends Emitter {
7017
7055
 
7018
7056
  hangup(session ) {
7019
7057
  const { state, id } = session;
7020
- logger$8.info('sdk webrtc hangup call', { id, state });
7058
+ logger$4.info('sdk webrtc hangup call', { id, state });
7021
7059
 
7022
7060
  try {
7023
7061
  this._stopSendingStats(session);
@@ -7046,7 +7084,7 @@ class WebRTCClient extends Emitter {
7046
7084
 
7047
7085
  return bye();
7048
7086
  } catch (error) {
7049
- logger$8.warn('sdk webrtc hangup, error', error);
7087
+ logger$4.warn('sdk webrtc hangup, error', error);
7050
7088
  }
7051
7089
 
7052
7090
  return null;
@@ -7064,7 +7102,7 @@ class WebRTCClient extends Emitter {
7064
7102
  // Fetch and emit an event at `interval` with session network stats
7065
7103
  startNetworkMonitoring(session , interval = 1000) {
7066
7104
  const sessionId = this.getSipSessionId(session);
7067
- logger$8.info('starting network inspection', { id: sessionId });
7105
+ logger$4.info('starting network inspection', { id: sessionId });
7068
7106
 
7069
7107
  this.sessionNetworkStats[sessionId] = [];
7070
7108
 
@@ -7074,7 +7112,7 @@ class WebRTCClient extends Emitter {
7074
7112
  stopNetworkMonitoring(session ) {
7075
7113
  const sessionId = this.getSipSessionId(session);
7076
7114
  const exists = sessionId in this.networkMonitoringInterval;
7077
- logger$8.info('stopping network inspection', { id: sessionId, exists });
7115
+ logger$4.info('stopping network inspection', { id: sessionId, exists });
7078
7116
 
7079
7117
  if (exists) {
7080
7118
  clearInterval(this.networkMonitoringInterval[sessionId]);
@@ -7084,17 +7122,17 @@ class WebRTCClient extends Emitter {
7084
7122
  }
7085
7123
 
7086
7124
  reject(session ) {
7087
- logger$8.info('sdk webrtc reject call', { id: session.id });
7125
+ logger$4.info('sdk webrtc reject call', { id: session.id });
7088
7126
 
7089
7127
  try {
7090
7128
  return session.reject ? session.reject() : session.cancel();
7091
7129
  } catch (e) {
7092
- logger$8.warn('Error when rejecting call', e.message, e.stack);
7130
+ logger$4.warn('Error when rejecting call', e.message, e.stack);
7093
7131
  }
7094
7132
  }
7095
7133
 
7096
7134
  async close() {
7097
- logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
7135
+ logger$4.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
7098
7136
  this._cleanupMedia();
7099
7137
  this.connectionPromise = null;
7100
7138
 
@@ -7125,7 +7163,7 @@ class WebRTCClient extends Emitter {
7125
7163
  // eg: "INVITE not rejectable in state Completed"
7126
7164
  }
7127
7165
  this.userAgent = null;
7128
- logger$8.info('sdk webrtc client closed');
7166
+ logger$4.info('sdk webrtc client closed');
7129
7167
  }
7130
7168
 
7131
7169
  getNumber(session ) {
@@ -7138,13 +7176,13 @@ class WebRTCClient extends Emitter {
7138
7176
  }
7139
7177
 
7140
7178
  mute(session ) {
7141
- logger$8.info('sdk webrtc mute', { id: session.id });
7179
+ logger$4.info('sdk webrtc mute', { id: session.id });
7142
7180
 
7143
7181
  this._toggleAudio(session, true);
7144
7182
  }
7145
7183
 
7146
7184
  unmute(session ) {
7147
- logger$8.info('sdk webrtc unmute', { id: session.id });
7185
+ logger$4.info('sdk webrtc unmute', { id: session.id });
7148
7186
 
7149
7187
  this._toggleAudio(session, false);
7150
7188
  }
@@ -7184,13 +7222,13 @@ class WebRTCClient extends Emitter {
7184
7222
  }
7185
7223
 
7186
7224
  toggleCameraOn(session ) {
7187
- logger$8.info('sdk webrtc toggle camera on', { id: session.id });
7225
+ logger$4.info('sdk webrtc toggle camera on', { id: session.id });
7188
7226
 
7189
7227
  this._toggleVideo(session, false);
7190
7228
  }
7191
7229
 
7192
7230
  toggleCameraOff(session ) {
7193
- logger$8.info('sdk webrtc toggle camera off', { id: session.id });
7231
+ logger$4.info('sdk webrtc toggle camera off', { id: session.id });
7194
7232
 
7195
7233
  this._toggleVideo(session, true);
7196
7234
  }
@@ -7199,7 +7237,7 @@ class WebRTCClient extends Emitter {
7199
7237
  const sessionId = this.getSipSessionId(session);
7200
7238
  const hasVideo = hadVideo || this.hasLocalVideo(sessionId);
7201
7239
 
7202
- logger$8.info('sdk webrtc hold', {
7240
+ logger$4.info('sdk webrtc hold', {
7203
7241
  sessionId,
7204
7242
  keys: Object.keys(this.heldSessions),
7205
7243
  pendingReinvite: !!session.pendingReinvite,
@@ -7248,7 +7286,7 @@ class WebRTCClient extends Emitter {
7248
7286
  const sessionId = this.getSipSessionId(session);
7249
7287
  const hasVideo = sessionId in this.heldSessions && this.heldSessions[sessionId].hasVideo;
7250
7288
 
7251
- logger$8.info('sdk webrtc unhold', {
7289
+ logger$4.info('sdk webrtc unhold', {
7252
7290
  sessionId,
7253
7291
  keys: Object.keys(this.heldSessions),
7254
7292
  pendingReinvite: !!session.pendingReinvite,
@@ -7396,7 +7434,7 @@ class WebRTCClient extends Emitter {
7396
7434
  if (!session.sessionDescriptionHandler) {
7397
7435
  return;
7398
7436
  }
7399
- logger$8.info('Sending DTMF', {
7437
+ logger$4.info('Sending DTMF', {
7400
7438
  id: this.getSipSessionId(session),
7401
7439
  tone,
7402
7440
  });
@@ -7412,7 +7450,7 @@ class WebRTCClient extends Emitter {
7412
7450
  transfer(session , target ) {
7413
7451
  this.hold(session);
7414
7452
 
7415
- logger$8.info('Transfering a session', {
7453
+ logger$4.info('Transfering a session', {
7416
7454
  id: this.getSipSessionId(session),
7417
7455
  target,
7418
7456
  });
@@ -7434,17 +7472,17 @@ class WebRTCClient extends Emitter {
7434
7472
  atxfer(session ) {
7435
7473
  this.hold(session);
7436
7474
 
7437
- logger$8.info('webrtc transfer started', { id: this.getSipSessionId(session) });
7475
+ logger$4.info('webrtc transfer started', { id: this.getSipSessionId(session) });
7438
7476
 
7439
7477
  const result = {
7440
7478
  newSession: null,
7441
7479
  init: async (target ) => {
7442
- logger$8.info('webrtc transfer initialized', { id: this.getSipSessionId(session), target });
7480
+ logger$4.info('webrtc transfer initialized', { id: this.getSipSessionId(session), target });
7443
7481
 
7444
7482
  result.newSession = await this.call(target);
7445
7483
  },
7446
7484
  complete: () => {
7447
- logger$8.info('webrtc transfer completed', {
7485
+ logger$4.info('webrtc transfer completed', {
7448
7486
  id: this.getSipSessionId(session),
7449
7487
  referId: this.getSipSessionId(result.newSession),
7450
7488
  });
@@ -7465,7 +7503,7 @@ class WebRTCClient extends Emitter {
7465
7503
  return;
7466
7504
  }
7467
7505
 
7468
- logger$8.info('send WebRTC message', { sipId: sipSession.id, contentType });
7506
+ logger$4.info('send WebRTC message', { sipId: sipSession.id, contentType });
7469
7507
 
7470
7508
  try {
7471
7509
  sipSession.message({
@@ -7507,7 +7545,7 @@ class WebRTCClient extends Emitter {
7507
7545
  }
7508
7546
 
7509
7547
  changeAudioOutputVolume(volume ) {
7510
- logger$8.info('Changing audio output volume', { volume });
7548
+ logger$4.info('Changing audio output volume', { volume });
7511
7549
 
7512
7550
  Object.values(this.audioElements).forEach(audioElement => {
7513
7551
  if (audioElement instanceof HTMLAudioElement) {
@@ -7519,7 +7557,7 @@ class WebRTCClient extends Emitter {
7519
7557
  }
7520
7558
 
7521
7559
  changeAudioOutputDevice(id ) {
7522
- logger$8.info('Changing audio output device', { id });
7560
+ logger$4.info('Changing audio output device', { id });
7523
7561
 
7524
7562
  Object.values(this.audioElements).forEach(audioElement => {
7525
7563
  // `setSinkId` method is not included in any flow type definitions for HTMLAudioElements but is a valid method
@@ -7536,7 +7574,7 @@ class WebRTCClient extends Emitter {
7536
7574
 
7537
7575
  changeAudioInputDevice(id , session ) {
7538
7576
  const currentId = this.getAudioDeviceId();
7539
- logger$8.info('setting audio input device', { id, currentId, session: !!session });
7577
+ logger$4.info('setting audio input device', { id, currentId, session: !!session });
7540
7578
 
7541
7579
  if (id === currentId) {
7542
7580
  return null;
@@ -7582,7 +7620,7 @@ class WebRTCClient extends Emitter {
7582
7620
 
7583
7621
  setVideoInputDevice(id ) {
7584
7622
  const currentId = this.getVideoDeviceId();
7585
- logger$8.info('setting video input device', { id, currentId });
7623
+ logger$4.info('setting video input device', { id, currentId });
7586
7624
 
7587
7625
  if (id === currentId) {
7588
7626
  return null;
@@ -7607,7 +7645,7 @@ class WebRTCClient extends Emitter {
7607
7645
  const sessionId = this.getSipSessionId(session);
7608
7646
  const localStream = this.getLocalStream(sessionId);
7609
7647
 
7610
- logger$8.info('changing video input device', { id, sessionId });
7648
+ logger$4.info('changing video input device', { id, sessionId });
7611
7649
 
7612
7650
  // Release old video stream
7613
7651
  if (localStream) {
@@ -7675,7 +7713,7 @@ class WebRTCClient extends Emitter {
7675
7713
  const shouldDoScreenSharing = newConstraints && newConstraints.screen;
7676
7714
  const desktop = newConstraints && newConstraints.desktop;
7677
7715
 
7678
- logger$8.info('Sending reinvite', {
7716
+ logger$4.info('Sending reinvite', {
7679
7717
  id: this.getSipSessionId(sipSession),
7680
7718
  newConstraints,
7681
7719
  conference,
@@ -7713,7 +7751,7 @@ class WebRTCClient extends Emitter {
7713
7751
  sipSession.incomingInviteRequest.message.body = response.message.body;
7714
7752
  }
7715
7753
 
7716
- logger$8.info('on re-INVITE accepted', {
7754
+ logger$4.info('on re-INVITE accepted', {
7717
7755
  id: this.getSipSessionId(sipSession),
7718
7756
  wasMuted,
7719
7757
  shouldDoScreenSharing,
@@ -7731,7 +7769,7 @@ class WebRTCClient extends Emitter {
7731
7769
  this.eventEmitter.emit(ON_SCREEN_SHARING_REINVITE, sipSession, response, desktop);
7732
7770
  }
7733
7771
 
7734
- return this.eventEmitter.emit(ON_REINVITE$1, sipSession, response);
7772
+ return this.eventEmitter.emit(ON_REINVITE, sipSession, response);
7735
7773
  },
7736
7774
  },
7737
7775
  sessionDescriptionHandlerModifiers: [replaceLocalIpModifier],
@@ -7832,6 +7870,16 @@ class WebRTCClient extends Emitter {
7832
7870
  return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
7833
7871
  }
7834
7872
 
7873
+ // Useful in a react-native environment when remoteMediaStream is not updated
7874
+ getRemoteVideoStreamFromPc(sessionId ) {
7875
+ const pc = this.getPeerConnection(sessionId);
7876
+ if (!pc) {
7877
+ return null;
7878
+ }
7879
+
7880
+ return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
7881
+ }
7882
+
7835
7883
  hasVideo(sessionId ) {
7836
7884
  return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
7837
7885
  }
@@ -7878,7 +7926,7 @@ class WebRTCClient extends Emitter {
7878
7926
  }
7879
7927
 
7880
7928
  startHeartbeat() {
7881
- logger$8.info('sdk webrtc start heartbeat', { userAgent: !!this.userAgent });
7929
+ logger$4.info('sdk webrtc start heartbeat', { userAgent: !!this.userAgent });
7882
7930
  if (!this.userAgent) {
7883
7931
  this.heartbeat.stop();
7884
7932
  return;
@@ -7891,7 +7939,7 @@ class WebRTCClient extends Emitter {
7891
7939
  }
7892
7940
 
7893
7941
  stopHeartbeat() {
7894
- logger$8.info('sdk webrtc stop heartbeat');
7942
+ logger$4.info('sdk webrtc stop heartbeat');
7895
7943
  this.heartbeat.stop();
7896
7944
  }
7897
7945
 
@@ -7912,7 +7960,7 @@ class WebRTCClient extends Emitter {
7912
7960
  }
7913
7961
 
7914
7962
  attemptReconnection() {
7915
- logger$8.info('attempt reconnection', { userAgent: !!this.userAgent });
7963
+ logger$4.info('attempt reconnection', { userAgent: !!this.userAgent });
7916
7964
  if (!this.userAgent) {
7917
7965
  return;
7918
7966
  }
@@ -7937,7 +7985,7 @@ class WebRTCClient extends Emitter {
7937
7985
  return;
7938
7986
  }
7939
7987
 
7940
- logger$8.info('setting local media stream', {
7988
+ logger$4.info('setting local media stream', {
7941
7989
  sipSessionId,
7942
7990
  tracks: newStream ? newStream.getTracks() : null,
7943
7991
  });
@@ -7954,7 +8002,7 @@ class WebRTCClient extends Emitter {
7954
8002
 
7955
8003
  const oldStream = this.getLocalStream(sipSessionId);
7956
8004
 
7957
- logger$8.info('updating local stream', {
8005
+ logger$4.info('updating local stream', {
7958
8006
  sipSessionId,
7959
8007
  oldStream: !!oldStream,
7960
8008
  tracks: newStream.getTracks(),
@@ -7974,7 +8022,7 @@ class WebRTCClient extends Emitter {
7974
8022
  const remoteStream = this.getRemoteStream(sessionId);
7975
8023
  const pc = this.getPeerConnection(sessionId);
7976
8024
 
7977
- logger$8.info('Updating remote stream', {
8025
+ logger$4.info('Updating remote stream', {
7978
8026
  sessionId,
7979
8027
  tracks: remoteStream ? remoteStream.getTracks() : null,
7980
8028
  receiverTracks: pc && pc.getReceivers ? pc.getReceivers().map(receiver => receiver.track) : null,
@@ -8000,7 +8048,7 @@ class WebRTCClient extends Emitter {
8000
8048
  const isDesktop = constraints && 'desktop' in constraints ? constraints.desktop : false;
8001
8049
  const withAudio = constraints && 'audio' in constraints ? constraints.audio : true;
8002
8050
 
8003
- logger$8.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
8051
+ logger$4.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
8004
8052
 
8005
8053
  return {
8006
8054
  constraints: {
@@ -8049,7 +8097,7 @@ class WebRTCClient extends Emitter {
8049
8097
  }
8050
8098
 
8051
8099
  _onTransportError() {
8052
- logger$8.error('on transport error');
8100
+ logger$4.error('on transport error');
8053
8101
  this.eventEmitter.emit(TRANSPORT_ERROR);
8054
8102
  this.attemptReconnection();
8055
8103
  }
@@ -8058,7 +8106,7 @@ class WebRTCClient extends Emitter {
8058
8106
  const body = message && typeof message === 'object' ? message.data : message;
8059
8107
  if (body && body.indexOf('200 OK') !== -1) {
8060
8108
  if (this.hasHeartbeat()) {
8061
- logger$8.info('on heartbeat received from Asterisk', { hasHeartbeat: this.hasHeartbeat() });
8109
+ logger$4.info('on heartbeat received from Asterisk', { hasHeartbeat: this.hasHeartbeat() });
8062
8110
 
8063
8111
  this.heartbeat.onHeartbeat();
8064
8112
  if (this.heartbeatCb) {
@@ -8069,7 +8117,7 @@ class WebRTCClient extends Emitter {
8069
8117
  }
8070
8118
 
8071
8119
  async _onHeartbeatTimeout() {
8072
- logger$8.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
8120
+ logger$4.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
8073
8121
 
8074
8122
  if (this.heartbeatTimeoutCb) {
8075
8123
  this.heartbeatTimeoutCb();
@@ -8081,7 +8129,7 @@ class WebRTCClient extends Emitter {
8081
8129
  try {
8082
8130
  await this.userAgent.transport.disconnect();
8083
8131
  } catch (e) {
8084
- logger$8.error('Transport disconnection after heartbeat timeout, error', e);
8132
+ logger$4.error('Transport disconnection after heartbeat timeout, error', e);
8085
8133
  }
8086
8134
  }
8087
8135
 
@@ -8114,31 +8162,31 @@ class WebRTCClient extends Emitter {
8114
8162
  }
8115
8163
 
8116
8164
  _connectIfNeeded() {
8117
- logger$8.info('connect if needed, checking', { connected: this.isConnected() });
8165
+ logger$4.info('connect if needed, checking', { connected: this.isConnected() });
8118
8166
  if (!this.userAgent) {
8119
- logger$8.info('need to recreate User Agent');
8167
+ logger$4.info('need to recreate User Agent');
8120
8168
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
8121
8169
  }
8122
8170
 
8123
8171
  if (this.isConnected()) {
8124
- logger$8.info('webrtc sdk, already connected');
8172
+ logger$4.info('webrtc sdk, already connected');
8125
8173
  return Promise.resolve();
8126
8174
  }
8127
8175
 
8128
8176
  if (this.isConnecting()) {
8129
- logger$8.info('webrtc sdk, already connecting...');
8177
+ logger$4.info('webrtc sdk, already connecting...');
8130
8178
 
8131
8179
  this.connectionPromise = this.userAgent.transport.connectPromise;
8132
8180
  return this.connectionPromise;
8133
8181
  }
8134
8182
 
8135
8183
  if (this.connectionPromise) {
8136
- logger$8.info('webrtc sdk, connection promise connecting...');
8184
+ logger$4.info('webrtc sdk, connection promise connecting...');
8137
8185
  // $FlowFixMe
8138
8186
  return this.connectionPromise;
8139
8187
  }
8140
8188
 
8141
- logger$8.info('WebRTC UA needs to connect');
8189
+ logger$4.info('WebRTC UA needs to connect');
8142
8190
 
8143
8191
  // Force UA to reconnect
8144
8192
  if (this.userAgent && this.userAgent.state !== UserAgentState.Stopped) {
@@ -8263,7 +8311,7 @@ class WebRTCClient extends Emitter {
8263
8311
 
8264
8312
  sdh.peerConnectionDelegate = {
8265
8313
  onicecandidateerror: (error ) => {
8266
- logger$8.error('on icecandidate error', {
8314
+ logger$4.error('on icecandidate error', {
8267
8315
  address: error.address,
8268
8316
  port: error.port,
8269
8317
  errorCode: error.errorCode,
@@ -8292,7 +8340,7 @@ class WebRTCClient extends Emitter {
8292
8340
  updatedNumber = session.assertedIdentity.uri.normal.user;
8293
8341
  updatedCalleeName = session.assertedIdentity.displayName || updatedNumber;
8294
8342
  }
8295
- logger$8.info('re-invite received', { updatedCalleeName, updatedNumber, hadRemoteVideo });
8343
+ logger$4.info('re-invite received', { updatedCalleeName, updatedNumber, hadRemoteVideo });
8296
8344
 
8297
8345
  // Useful to know if it's a video upgrade or an unhold from a remote peer with a video stream
8298
8346
 
@@ -8308,12 +8356,12 @@ class WebRTCClient extends Emitter {
8308
8356
 
8309
8357
  this._setupMedias(session);
8310
8358
 
8311
- return this.eventEmitter.emit(ON_REINVITE$1, session, request, updatedCalleeName, updatedNumber, hadRemoteVideo);
8359
+ return this.eventEmitter.emit(ON_REINVITE, session, request, updatedCalleeName, updatedNumber, hadRemoteVideo);
8312
8360
  };
8313
8361
  }
8314
8362
 
8315
8363
  _onAccepted(session , sessionDialog , withEvent = true) {
8316
- logger$8.info('on call accepted', { id: session.id, remoteTag: session.remoteTag });
8364
+ logger$4.info('on call accepted', { id: session.id, remoteTag: session.remoteTag });
8317
8365
 
8318
8366
  this.storeSipSession(session);
8319
8367
 
@@ -8325,14 +8373,14 @@ class WebRTCClient extends Emitter {
8325
8373
  const onTrack = (event ) => {
8326
8374
  const isAudioOnly = this._isAudioOnly(session);
8327
8375
  const { kind, label, readyState, id, muted } = event.track;
8328
- logger$8.info('on track event', { isAudioOnly, kind, label, readyState, id, muted });
8376
+ logger$4.info('on track event', { isAudioOnly, kind, label, readyState, id, muted });
8329
8377
 
8330
8378
  // Stop video track in audio only mode
8331
8379
  if (isAudioOnly && kind === 'video') {
8332
8380
  event.track.stop();
8333
8381
  }
8334
8382
 
8335
- this.eventEmitter.emit(ON_TRACK$1, session, event);
8383
+ this.eventEmitter.emit(ON_TRACK, session, event);
8336
8384
  };
8337
8385
 
8338
8386
  if (session.sessionDescriptionHandler.peerConnection) {
@@ -8342,8 +8390,9 @@ class WebRTCClient extends Emitter {
8342
8390
  session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
8343
8391
 
8344
8392
  pc.oniceconnectionstatechange = () => {
8393
+ logger$4.info('on ice connection state changed', { state: pc.iceConnectionState });
8345
8394
  if (pc.iceConnectionState === 'disconnected') {
8346
- this.eventEmitter.emit(ON_DISCONNECTED$1);
8395
+ this.eventEmitter.emit(ON_DISCONNECTED);
8347
8396
  }
8348
8397
  };
8349
8398
 
@@ -8514,10 +8563,10 @@ class WebRTCClient extends Emitter {
8514
8563
 
8515
8564
  _stopSendingStats(session ) {
8516
8565
  const sessionId = this.getSipSessionId(session);
8517
- logger$8.trace('Check for stopping stats', { sessionId, ids: Object.keys(this.statsIntervals) });
8566
+ logger$4.trace('Check for stopping stats', { sessionId, ids: Object.keys(this.statsIntervals) });
8518
8567
 
8519
8568
  if (sessionId in this.statsIntervals) {
8520
- logger$8.trace('Stop sending stats for call', { sessionId });
8569
+ logger$4.trace('Stop sending stats for call', { sessionId });
8521
8570
  this.statsIntervals[sessionId]();
8522
8571
  delete this.statsIntervals[sessionId];
8523
8572
  }
@@ -8533,7 +8582,7 @@ class WebRTCClient extends Emitter {
8533
8582
  try {
8534
8583
  await this.userAgent.transport.disconnect();
8535
8584
  } catch (e) {
8536
- logger$8.error('WebRTC transport disconnect, error', e);
8585
+ logger$4.error('WebRTC transport disconnect, error', e);
8537
8586
  }
8538
8587
  }
8539
8588
  }
@@ -8570,25 +8619,25 @@ class WebRTCClient extends Emitter {
8570
8619
 
8571
8620
  stats.forEach(report => {
8572
8621
  if (report.type === 'outbound-rtp' && report.kind === 'audio') {
8573
- audioBytesSent += report.bytesSent + report.headerBytesSent;
8622
+ audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
8574
8623
  }
8575
8624
  if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
8576
- audioBytesSent += report.bytesSent;
8625
+ audioBytesSent += Number(report.bytesSent);
8577
8626
  }
8578
8627
  if (report.type === 'outbound-rtp' && report.kind === 'video') {
8579
- videoBytesSent += report.bytesSent + report.headerBytesSent;
8628
+ videoBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
8580
8629
  }
8581
8630
  if (report.type === 'inbound-rtp' && report.kind === 'audio') {
8582
- packetsLost += report.packetsLost;
8583
- networkStats.packetsReceived = report.packetsReceived;
8584
- audioBytesReceived += report.bytesReceived + report.headerBytesReceived;
8631
+ packetsLost += Number(report.packetsLost);
8632
+ networkStats.packetsReceived = Number(report.packetsReceived);
8633
+ audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
8585
8634
  }
8586
8635
  if (report.type === 'inbound-rtp' && report.kind === 'video') {
8587
- videoBytesReceived += report.bytesReceived + report.headerBytesReceived;
8636
+ videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
8588
8637
  }
8589
8638
  if (report.type === 'outbound-rtp' && report.kind === 'video') {
8590
8639
  if ('framesPerSecond' in report) {
8591
- networkStats.framesPerSecond = report.framesPerSecond;
8640
+ networkStats.framesPerSecond = Number(report.framesPerSecond);
8592
8641
  }
8593
8642
  if ('framerateMean' in report) {
8594
8643
  // framerateMean is only available in FF
@@ -8596,34 +8645,38 @@ class WebRTCClient extends Emitter {
8596
8645
  }
8597
8646
  }
8598
8647
  if (report.type === 'remote-inbound-rtp' && report.kind === 'audio') {
8599
- packetsLost += report.packetsLost;
8600
- networkStats.roundTripTime = report.roundTripTime;
8601
- networkStats.jitter = report.jitter;
8648
+ packetsLost += Number(report.packetsLost);
8649
+ networkStats.roundTripTime = Number(report.roundTripTime);
8650
+ networkStats.jitter = Number(report.jitter);
8602
8651
  }
8603
8652
  if (report.type === 'remote-inbound-rtp' && report.kind === 'video') {
8604
- packetsLost += report.packetsLost;
8653
+ packetsLost += Number(report.packetsLost);
8605
8654
  }
8606
8655
  if (report.type === 'transport') {
8607
- transportSent += report.bytesSent;
8608
- transportReceived += report.bytesReceived;
8656
+ transportSent += Number(report.bytesSent);
8657
+ transportReceived += Number(report.bytesReceived);
8609
8658
  }
8610
8659
  });
8611
8660
 
8612
8661
  networkStats.packetsLost = packetsLost;
8613
- networkStats.audioBytesSent = audioBytesSent;
8662
+ networkStats.totalAudioBytesSent = audioBytesSent;
8663
+ networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
8664
+ networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
8614
8665
  networkStats.audioBytesReceived = audioBytesReceived;
8615
- networkStats.videoBytesSent = videoBytesSent;
8616
- networkStats.videoBytesReceived = videoBytesReceived;
8666
+ networkStats.totalVideoBytesSent = videoBytesSent;
8667
+ networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
8668
+ networkStats.totalVideoBytesReceived = videoBytesReceived;
8669
+ networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
8670
+ networkStats.totalTransportSent = transportSent - lastTransportSent;
8617
8671
  networkStats.transportSent = transportSent;
8618
- networkStats.transportReceived = transportReceived;
8619
-
8620
- const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
8621
- + (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
8622
- + (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
8672
+ networkStats.totalTransportReceived = transportReceived;
8673
+ networkStats.transportReceived = transportReceived - lastTransportReceived;
8623
8674
 
8624
- networkStats.bandwidth = bandwidth;
8675
+ networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
8676
+ + networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
8677
+ + networkStats.transportSent;
8625
8678
 
8626
- this.eventEmitter.emit(ON_NETWORK_STATS$1, session, networkStats, this.sessionNetworkStats[sessionId]);
8679
+ this.eventEmitter.emit(ON_NETWORK_STATS, session, networkStats, this.sessionNetworkStats[sessionId]);
8627
8680
  this.sessionNetworkStats[sessionId].push(networkStats);
8628
8681
  }
8629
8682
 
@@ -8651,8 +8704,8 @@ const ON_CALL_FAILED = 'onCallFailed';
8651
8704
  const ON_CALL_ENDED = 'onCallEnded';
8652
8705
  const ON_CALL_ENDING = 'onCallEnding';
8653
8706
  const ON_MESSAGE = 'onMessage';
8654
- const ON_REINVITE = 'reinvite';
8655
- const ON_TRACK = 'onTrack';
8707
+ const ON_REINVITE$1 = 'reinvite';
8708
+ const ON_TRACK$1 = 'onTrack';
8656
8709
  const ON_AUDIO_STREAM = 'onAudioStream';
8657
8710
  const ON_VIDEO_STREAM = 'onVideoStream';
8658
8711
  const ON_REMOVE_STREAM = 'onRemoveStream';
@@ -8667,15 +8720,15 @@ const ON_PLAY_PROGRESS_SOUND = 'playProgressSound';
8667
8720
  const ON_VIDEO_INPUT_CHANGE = 'videoInputChange';
8668
8721
  const ON_CALL_ERROR = 'onCallError';
8669
8722
  const ON_MESSAGE_TRACK_UPDATED = 'onTrackUpdated';
8670
- const ON_NETWORK_STATS = 'onNetworkStats';
8723
+ const ON_NETWORK_STATS$1 = 'onNetworkStats';
8671
8724
  const ON_CHAT = 'phone/ON_CHAT';
8672
8725
  const ON_SIGNAL = 'phone/ON_SIGNAL';
8673
- const ON_DISCONNECTED = 'onDisconnected';
8726
+ const ON_DISCONNECTED$1 = 'onDisconnected';
8674
8727
 
8675
8728
  const MESSAGE_TYPE_CHAT = 'message/TYPE_CHAT';
8676
8729
  const MESSAGE_TYPE_SIGNAL = 'message/TYPE_SIGNAL';
8677
8730
 
8678
- const events = [
8731
+ const events$1 = [
8679
8732
  ON_USER_AGENT,
8680
8733
  ON_REGISTERED,
8681
8734
  ON_UNREGISTERED,
@@ -8693,8 +8746,8 @@ const events = [
8693
8746
  ON_CALL_FAILED,
8694
8747
  ON_CALL_ENDED,
8695
8748
  ON_MESSAGE,
8696
- ON_REINVITE,
8697
- ON_TRACK,
8749
+ ON_REINVITE$1,
8750
+ ON_TRACK$1,
8698
8751
  ON_AUDIO_STREAM,
8699
8752
  ON_VIDEO_STREAM,
8700
8753
  ON_REMOVE_STREAM,
@@ -8709,11 +8762,11 @@ const events = [
8709
8762
  ON_CALL_ERROR,
8710
8763
  ON_CHAT,
8711
8764
  ON_SIGNAL,
8712
- ON_NETWORK_STATS,
8713
- ON_DISCONNECTED,
8765
+ ON_NETWORK_STATS$1,
8766
+ ON_DISCONNECTED$1,
8714
8767
  ];
8715
8768
 
8716
- const logger$7 = IssueReporter$1.loggerFor('webrtc-phone');
8769
+ const logger$5 = IssueReporter$1.loggerFor('webrtc-phone');
8717
8770
 
8718
8771
  class WebRTCPhone extends Emitter {
8719
8772
 
@@ -8786,7 +8839,7 @@ class WebRTCPhone extends Emitter {
8786
8839
  }).catch(error => {
8787
8840
  // Avoid exception on `t.server.scheme` in sip transport when losing the webrtc socket connection
8788
8841
  console.error('register error', error, error.message, error.stack);
8789
- logger$7.error('WebRTC register error', { message: error.message, stack: error.stack });
8842
+ logger$5.error('WebRTC register error', { message: error.message, stack: error.stack });
8790
8843
  });
8791
8844
  }
8792
8845
 
@@ -8801,7 +8854,7 @@ class WebRTCPhone extends Emitter {
8801
8854
  if (!this.client) {
8802
8855
  return;
8803
8856
  }
8804
- logger$7.info('WebRTC phone stop');
8857
+ logger$5.info('WebRTC phone stop');
8805
8858
  this.client.stop();
8806
8859
  }
8807
8860
 
@@ -8816,7 +8869,7 @@ class WebRTCPhone extends Emitter {
8816
8869
  async sendReinvite(callSession , constraints = null, conference = false,
8817
8870
  audioOnly = false, iceRestart = false) {
8818
8871
  const sipSession = this.findSipSession(callSession);
8819
- logger$7.info('WebRTC phone - send reinvite', {
8872
+ logger$5.info('WebRTC phone - send reinvite', {
8820
8873
  sessionId: sipSession ? sipSession.id : null,
8821
8874
  constraints,
8822
8875
  audioOnly,
@@ -8853,7 +8906,7 @@ class WebRTCPhone extends Emitter {
8853
8906
  }
8854
8907
 
8855
8908
  startHeartbeat() {
8856
- logger$7.info('WebRTC phone - start heartbeat', { client: !!this.client, hasHeartbeat: this.client.hasHeartbeat() });
8909
+ logger$5.info('WebRTC phone - start heartbeat', { client: !!this.client, hasHeartbeat: this.client.hasHeartbeat() });
8857
8910
  if (!this.client || this.client.hasHeartbeat()) {
8858
8911
  return;
8859
8912
  }
@@ -8862,7 +8915,7 @@ class WebRTCPhone extends Emitter {
8862
8915
  }
8863
8916
 
8864
8917
  stopHeartbeat() {
8865
- logger$7.info('WebRTC phone - stopHeartbeat', { client: !!this.client });
8918
+ logger$5.info('WebRTC phone - stopHeartbeat', { client: !!this.client });
8866
8919
  if (!this.client) {
8867
8920
  return;
8868
8921
  }
@@ -8879,7 +8932,7 @@ class WebRTCPhone extends Emitter {
8879
8932
  }
8880
8933
 
8881
8934
  reconnect() {
8882
- logger$7.info('WebRTC phone - reconnect', { client: !!this.client });
8935
+ logger$5.info('WebRTC phone - reconnect', { client: !!this.client });
8883
8936
  if (!this.client) {
8884
8937
  return;
8885
8938
  }
@@ -8920,10 +8973,15 @@ class WebRTCPhone extends Emitter {
8920
8973
  return false;
8921
8974
  }
8922
8975
 
8923
- logger$7.info('Downgrade to video', { id: callSession ? callSession.getId() : null, withMessage });
8976
+ logger$5.info('Downgrade to video', { id: callSession ? callSession.getId() : null, withMessage });
8924
8977
 
8925
8978
  this.client.downgradeToAudio(sipSession);
8926
8979
 
8980
+ if (callSession) {
8981
+ callSession.cameraEnabled = false;
8982
+ this._updateCallSession(callSession);
8983
+ }
8984
+
8927
8985
  if (withMessage) {
8928
8986
  this._sendReinviteMessage(callSession, false);
8929
8987
  }
@@ -8938,7 +8996,7 @@ class WebRTCPhone extends Emitter {
8938
8996
  return Promise.resolve(false);
8939
8997
  }
8940
8998
 
8941
- logger$7.info('Upgrade to video', {
8999
+ logger$5.info('Upgrade to video', {
8942
9000
  id: callSession ? callSession.getId() : null,
8943
9001
  constraints,
8944
9002
  isConference,
@@ -8951,6 +9009,11 @@ class WebRTCPhone extends Emitter {
8951
9009
 
8952
9010
  const newStream = await this.client.upgradeToVideo(sipSession, constraints, isConference);
8953
9011
 
9012
+ if (callSession) {
9013
+ callSession.cameraEnabled = true;
9014
+ this._updateCallSession(callSession);
9015
+ }
9016
+
8954
9017
  // If no stream is returned, it means we have to reinvite
8955
9018
  if (!newStream) {
8956
9019
  return true;
@@ -8973,7 +9036,7 @@ class WebRTCPhone extends Emitter {
8973
9036
 
8974
9037
  _sendReinviteMessage(callSession , isUpgrade ) {
8975
9038
  const sipSession = this.findSipSession(callSession);
8976
- logger$7.info('Sending reinvite message', {
9039
+ logger$5.info('Sending reinvite message', {
8977
9040
  id: callSession ? callSession.getId() : null,
8978
9041
  isUpgrade,
8979
9042
  });
@@ -8999,11 +9062,14 @@ class WebRTCPhone extends Emitter {
8999
9062
  // Monkey patch to know when canceled with the CANCEL message
9000
9063
  const onCancel = sipSession._onCancel.bind(sipSession);
9001
9064
  sipSession._onCancel = (message ) => {
9002
- logger$7.trace('on sip session canceled', { callId: message.callId });
9065
+ logger$5.trace('on sip session canceled', { callId: message.callId });
9003
9066
 
9004
9067
  onCancel(message);
9005
9068
  const elsewhere = message.data.indexOf('cause=26') !== -1 && message.data.indexOf('completed elsewhere') !== -1;
9006
- this.eventEmitter.emit(ON_CALL_CANCELED, this._createCallSession(sipSession), elsewhere);
9069
+ const callSession = this._createCallSession(sipSession);
9070
+ delete this.callSessions[callSession.getId()];
9071
+
9072
+ this.eventEmitter.emit(ON_CALL_CANCELED, callSession, elsewhere);
9007
9073
  };
9008
9074
  } else if (sipSession instanceof Invitation) {
9009
9075
  console.warn('sipSession._onCancel not found, please update the wazo SDK accordingly');
@@ -9024,17 +9090,19 @@ class WebRTCPhone extends Emitter {
9024
9090
  this.audioOutputVolume,
9025
9091
  );
9026
9092
  case SessionState.Terminating:
9027
- logger$7.info('WebRTC phone - call terminating', { sipId: sipSession.id });
9093
+ logger$5.info('WebRTC phone - call terminating', { sipId: sipSession.id });
9028
9094
 
9029
9095
  this.eventEmitter.emit(ON_CALL_ENDING, this._createCallSession(sipSession));
9030
9096
 
9031
9097
  break;
9032
9098
  case SessionState.Terminated: {
9033
- logger$7.info('WebRTC phone - call terminated', { sipId: sipSession.id });
9099
+ logger$5.info('WebRTC phone - call terminated', { sipId: sipSession.id });
9034
9100
 
9101
+ // Should be called before `_onCallTerminated` or the callCount will not decrement...
9102
+ const callSession = this._createCallSession(sipSession);
9035
9103
  const wasCurrentSession = this._onCallTerminated(sipSession);
9036
9104
 
9037
- return this.eventEmitter.emit(ON_CALL_ENDED, this._createCallSession(sipSession), wasCurrentSession);
9105
+ return this.eventEmitter.emit(ON_CALL_ENDED, callSession, wasCurrentSession);
9038
9106
  }
9039
9107
  }
9040
9108
  });
@@ -9050,7 +9118,7 @@ class WebRTCPhone extends Emitter {
9050
9118
  const [stream] = event.streams;
9051
9119
  const kind = event && event.track && event.track.kind;
9052
9120
 
9053
- logger$7.info('on track stream called on the peer connection', {
9121
+ logger$5.info('on track stream called on the peer connection', {
9054
9122
  callId: this.getSipSessionId(sipSession),
9055
9123
  streamId: stream ? stream.id : null,
9056
9124
  tracks: stream ? stream.getTracks() : null,
@@ -9070,7 +9138,7 @@ class WebRTCPhone extends Emitter {
9070
9138
  };
9071
9139
 
9072
9140
  peerConnection.onremovestream = event => {
9073
- logger$7.info('on remove stream called on the peer connection', {
9141
+ logger$5.info('on remove stream called on the peer connection', {
9074
9142
  id: event.stream.id,
9075
9143
  tracks: event.stream.getTracks(),
9076
9144
  });
@@ -9080,7 +9148,7 @@ class WebRTCPhone extends Emitter {
9080
9148
  }
9081
9149
 
9082
9150
  async startScreenSharing(constraints , callSession ) {
9083
- logger$7.info('WebRTC - start screen sharing', { constraints, id: callSession ? callSession.getId() : null });
9151
+ logger$5.info('WebRTC - start screen sharing', { constraints, id: callSession ? callSession.getId() : null });
9084
9152
 
9085
9153
  const screenShareStream = await this.client.getStreamFromConstraints(constraints);
9086
9154
  if (!screenShareStream) {
@@ -9120,7 +9188,7 @@ class WebRTCPhone extends Emitter {
9120
9188
  return;
9121
9189
  }
9122
9190
 
9123
- logger$7.info('WebRTC phone - stop screen sharing', {
9191
+ logger$5.info('WebRTC phone - stop screen sharing', {
9124
9192
  restoreLocalStream,
9125
9193
  });
9126
9194
 
@@ -9176,24 +9244,26 @@ class WebRTCPhone extends Emitter {
9176
9244
  const pc = this.client.getPeerConnection(sipSessionId);
9177
9245
  const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9178
9246
 
9179
- logger$7.info('WebRTC phone - on screensharing', {
9247
+ logger$5.info('WebRTC phone - on screensharing', {
9180
9248
  hadVideo,
9181
9249
  id: this.getSipSessionId(sipSession),
9182
9250
  screenTrack,
9183
9251
  });
9184
9252
 
9185
- screenTrack.onended = () => {
9186
- logger$7.info('WebRTC phone - on screenshare ended', {
9187
- hadVideo,
9188
- id: this.getSipSessionId(sipSession),
9189
- screenTrack,
9190
- });
9253
+ if (screenTrack) {
9254
+ screenTrack.onended = () => {
9255
+ logger$5.info('WebRTC phone - on screenshare ended', {
9256
+ hadVideo,
9257
+ id: this.getSipSessionId(sipSession),
9258
+ screenTrack,
9259
+ });
9191
9260
 
9192
- this.eventEmitter.emit(
9193
- ON_SHARE_SCREEN_ENDING,
9194
- this._createCallSession(sipSession, callSession),
9195
- );
9196
- };
9261
+ this.eventEmitter.emit(
9262
+ ON_SHARE_SCREEN_ENDING,
9263
+ this._createCallSession(sipSession, callSession),
9264
+ );
9265
+ };
9266
+ }
9197
9267
 
9198
9268
  this.currentScreenShare = {
9199
9269
  stream: screenStream,
@@ -9213,7 +9283,7 @@ class WebRTCPhone extends Emitter {
9213
9283
  }
9214
9284
 
9215
9285
  _onCallAccepted(sipSession , cameraEnabled ) {
9216
- logger$7.info('WebRTC phone - on call accepted', { sipId: sipSession.id, cameraEnabled });
9286
+ logger$5.info('WebRTC phone - on call accepted', { sipId: sipSession.id, cameraEnabled });
9217
9287
 
9218
9288
  const callSession = this._createAcceptedCallSession(sipSession, cameraEnabled);
9219
9289
  this.currentSipSession = sipSession;
@@ -9231,7 +9301,7 @@ class WebRTCPhone extends Emitter {
9231
9301
  }
9232
9302
 
9233
9303
  changeAudioDevice(id ) {
9234
- logger$7.info('WebRTC phone - change audio device', { deviceId: id });
9304
+ logger$5.info('WebRTC phone - change audio device', { deviceId: id });
9235
9305
  this.audioOutputDeviceId = id;
9236
9306
  this.client.changeAudioOutputDevice(id);
9237
9307
  }
@@ -9241,14 +9311,14 @@ class WebRTCPhone extends Emitter {
9241
9311
  }
9242
9312
 
9243
9313
  changeRingDevice(id ) {
9244
- logger$7.info('WebRTC phone - changing ring device', { id });
9314
+ logger$5.info('WebRTC phone - changing ring device', { id });
9245
9315
 
9246
9316
  this.audioRingDeviceId = id;
9247
9317
  }
9248
9318
 
9249
9319
  // volume is a value between 0 and 1
9250
9320
  changeAudioVolume(volume ) {
9251
- logger$7.info('WebRTC phone - changing audio volume', { volume });
9321
+ logger$5.info('WebRTC phone - changing audio volume', { volume });
9252
9322
 
9253
9323
  this.audioOutputVolume = volume;
9254
9324
  this.client.changeAudioOutputVolume(volume);
@@ -9256,31 +9326,31 @@ class WebRTCPhone extends Emitter {
9256
9326
 
9257
9327
  // volume is a value between 0 and 1
9258
9328
  changeRingVolume(volume ) {
9259
- logger$7.info('WebRTC phone - changing ring volume', { volume });
9329
+ logger$5.info('WebRTC phone - changing ring volume', { volume });
9260
9330
 
9261
9331
  this.audioRingVolume = volume;
9262
9332
  }
9263
9333
 
9264
9334
  changeAudioInputDevice(id ) {
9265
- logger$7.info('WebRTC phone - changeAudio input device', { deviceId: id });
9335
+ logger$5.info('WebRTC phone - changeAudio input device', { deviceId: id });
9266
9336
 
9267
9337
  return this.client.changeAudioInputDevice(id, this.currentSipSession);
9268
9338
  }
9269
9339
 
9270
9340
  changeVideoInputDevice(id ) {
9271
- logger$7.info('WebRTC phone - change video input device', { deviceId: id });
9341
+ logger$5.info('WebRTC phone - change video input device', { deviceId: id });
9272
9342
 
9273
9343
  return this.client.changeVideoInputDevice(id, this.currentSipSession);
9274
9344
  }
9275
9345
 
9276
9346
  changeSessionVideoInputDevice(id ) {
9277
- logger$7.info('WebRTC phone - change session video input device', { deviceId: id });
9347
+ logger$5.info('WebRTC phone - change session video input device', { deviceId: id });
9278
9348
 
9279
9349
  return this.client.changeSessionVideoInputDevice(id, this.currentSipSession);
9280
9350
  }
9281
9351
 
9282
9352
  _onCallTerminated(sipSession ) {
9283
- logger$7.info('WebRTC phone - on call terminated', { sipId: sipSession.id });
9353
+ logger$5.info('WebRTC phone - on call terminated', { sipId: sipSession.id });
9284
9354
 
9285
9355
  const callSession = this._createCallSession(sipSession);
9286
9356
  const isCurrentSession = this.isCurrentCallSipSession(callSession);
@@ -9314,7 +9384,7 @@ class WebRTCPhone extends Emitter {
9314
9384
  const hasIncomingCallSession = this.hasIncomingCallSession();
9315
9385
 
9316
9386
  // Re-trigger incoming call event for remaining incoming calls
9317
- logger$7.info('WebRTC phone - check to re-trigger incoming call', {
9387
+ logger$5.info('WebRTC phone - check to re-trigger incoming call', {
9318
9388
  sipId: sipSession.id,
9319
9389
  shouldRetrigger,
9320
9390
  hasIncomingCallSession,
@@ -9405,37 +9475,37 @@ class WebRTCPhone extends Emitter {
9405
9475
 
9406
9476
  // Deprecated
9407
9477
  getLocalStreamForCall(callSession ) {
9408
- logger$7.warn('WebRTCPhone.getLocalStreamForCall is deprecated, use WebRTCPhone.getLocalStream instead');
9478
+ logger$5.warn('WebRTCPhone.getLocalStreamForCall is deprecated, use WebRTCPhone.getLocalStream instead');
9409
9479
 
9410
9480
  return this.getLocalStream(callSession);
9411
9481
  }
9412
9482
 
9413
9483
  // Deprecated
9414
9484
  getRemoteStreamForCall(callSession ) {
9415
- logger$7.warn('WebRTCPhone.getRemoteStreamForCall is deprecated, use WebRTCPhone.getRemoteStream instead');
9485
+ logger$5.warn('WebRTCPhone.getRemoteStreamForCall is deprecated, use WebRTCPhone.getRemoteStream instead');
9416
9486
 
9417
9487
  return this.getRemoteVideoStream(callSession);
9418
9488
  }
9419
9489
 
9420
9490
  getRemoteStreamsForCall(callSession ) {
9421
- logger$7.warn('WebRTCPhone.getRemoteStreamsForCall is deprecated, use WebRTCPhone.getRemoteStreams instead');
9491
+ logger$5.warn('WebRTCPhone.getRemoteStreamsForCall is deprecated, use WebRTCPhone.getRemoteStreams instead');
9422
9492
 
9423
9493
  return this.getRemoteStream(callSession);
9424
9494
  }
9425
9495
 
9426
9496
  accept(callSession , cameraEnabled ) {
9427
- logger$7.info('WebRTC phone - accept call', { id: callSession ? callSession.getId() : 'n/a', cameraEnabled });
9497
+ logger$5.info('WebRTC phone - accept call', { id: callSession ? callSession.getId() : 'n/a', cameraEnabled });
9428
9498
  if (this.currentSipSession) {
9429
9499
  this.holdSipSession(this.currentSipSession, this.currentCallSession, true);
9430
9500
  }
9431
9501
 
9432
9502
  if (!callSession) {
9433
- logger$7.warn('no CallSession to accept.');
9503
+ logger$5.warn('no CallSession to accept.');
9434
9504
  return Promise.resolve(null);
9435
9505
  }
9436
9506
 
9437
9507
  if (callSession.getId() in this.acceptedSessions) {
9438
- logger$7.warn('CallSession already accepted.', { id: callSession ? callSession.getId() : 'n/a' });
9508
+ logger$5.warn('CallSession already accepted.', { id: callSession ? callSession.getId() : 'n/a' });
9439
9509
  return Promise.resolve(callSession.sipCallId);
9440
9510
  }
9441
9511
 
@@ -9447,24 +9517,24 @@ class WebRTCPhone extends Emitter {
9447
9517
  const sipSession = this.client.getSipSession(callSession.getId());
9448
9518
  if (sipSession) {
9449
9519
  if (sipSession.state === SessionState.Terminated || sipSession.state === SessionState.Terminating) {
9450
- logger$7.warn('Trying to answer a terminated sipSession.');
9520
+ logger$5.warn('Trying to answer a terminated sipSession.');
9451
9521
 
9452
9522
  return Promise.resolve(null);
9453
9523
  }
9454
9524
 
9455
- logger$7.info('accept call, session found', { sipId: sipSession.id });
9525
+ logger$5.info('accept call, session found', { sipId: sipSession.id });
9456
9526
 
9457
9527
  // $FlowFixMe
9458
9528
  return this.client.answer(sipSession, this.allowVideo ? cameraEnabled : false).then(() => {
9459
9529
  return callSession.sipCallId;
9460
9530
  }).catch(e => {
9461
- logger$7.error(e);
9531
+ logger$5.error(e);
9462
9532
  this.endCurrentCall(callSession);
9463
9533
  throw e;
9464
9534
  });
9465
9535
  }
9466
9536
 
9467
- logger$7.warn('no CallSession found to accept.', { id: callSession ? callSession.getId() : 'n/a' });
9537
+ logger$5.warn('no CallSession found to accept.', { id: callSession ? callSession.getId() : 'n/a' });
9468
9538
 
9469
9539
  return Promise.resolve(null);
9470
9540
  }
@@ -9474,7 +9544,7 @@ class WebRTCPhone extends Emitter {
9474
9544
  }
9475
9545
 
9476
9546
  async reject(callSession ) {
9477
- logger$7.info('reject WebRTC called', { id: callSession.getId() });
9547
+ logger$5.info('reject WebRTC called', { id: callSession.getId() });
9478
9548
 
9479
9549
  this.eventEmitter.emit(ON_TERMINATE_SOUND, callSession, 'call rejected locally');
9480
9550
  if (!callSession || callSession.getId() in this.rejectedSessions) {
@@ -9486,14 +9556,14 @@ class WebRTCPhone extends Emitter {
9486
9556
 
9487
9557
  const sipSession = this.findSipSession(callSession);
9488
9558
  if (sipSession) {
9489
- logger$7.info('WebRTC rejecting', { sipId: sipSession.id });
9559
+ logger$5.info('WebRTC rejecting', { sipId: sipSession.id });
9490
9560
 
9491
9561
  this.client.hangup(sipSession);
9492
9562
  }
9493
9563
  }
9494
9564
 
9495
9565
  async ignore(callSession ) {
9496
- logger$7.info('WebRTC ignore', { id: callSession.getId() });
9566
+ logger$5.info('WebRTC ignore', { id: callSession.getId() });
9497
9567
 
9498
9568
  // kill the ring
9499
9569
  this.eventEmitter.emit(ON_TERMINATE_SOUND, callSession, 'ignoring call');
@@ -9505,14 +9575,14 @@ class WebRTCPhone extends Emitter {
9505
9575
  const sipSession = this.findSipSession(callSession);
9506
9576
 
9507
9577
  if (sipSession) {
9508
- logger$7.info('WebRTC atxfer', { sipId: sipSession.id });
9578
+ logger$5.info('WebRTC atxfer', { sipId: sipSession.id });
9509
9579
 
9510
9580
  return this.client.atxfer(sipSession);
9511
9581
  }
9512
9582
  }
9513
9583
 
9514
9584
  hold(callSession , withEvent = true, isConference = false) {
9515
- logger$7.info('WebRTC hold', { id: callSession.getId() });
9585
+ logger$5.info('WebRTC hold', { id: callSession.getId() });
9516
9586
 
9517
9587
  const sipSession = this.findSipSession(callSession);
9518
9588
 
@@ -9527,18 +9597,18 @@ class WebRTCPhone extends Emitter {
9527
9597
  }
9528
9598
 
9529
9599
  resume(callSession , isConference = false, withEvent = true) {
9530
- logger$7.info('WebRTC resume called', { id: callSession ? callSession.getId() : null });
9600
+ logger$5.info('WebRTC resume called', { id: callSession ? callSession.getId() : null });
9531
9601
 
9532
9602
  const sipSession = this.findSipSession(callSession);
9533
9603
  if (!sipSession) {
9534
9604
  return new Promise((resolve, reject) => reject(new Error('No session to resume')));
9535
9605
  }
9536
9606
 
9537
- logger$7.info('WebRTC resuming', { sipId: sipSession.id });
9607
+ logger$5.info('WebRTC resuming', { sipId: sipSession.id });
9538
9608
 
9539
9609
  // Hold current session if different from the current one (we don't want 2 sessions active at the same time).
9540
9610
  if (this.currentSipSession && this.currentSipSession.id !== sipSession.id) {
9541
- logger$7.info('WebRTC hold call after resume', { id: this.currentSipSession.id });
9611
+ logger$5.info('WebRTC hold call after resume', { id: this.currentSipSession.id });
9542
9612
  this.holdSipSession(this.currentSipSession, callSession);
9543
9613
  }
9544
9614
 
@@ -9563,7 +9633,7 @@ class WebRTCPhone extends Emitter {
9563
9633
  const sessionId = this.getSipSessionId(sipSession);
9564
9634
  const hasVideo = this.client.hasLocalVideo(sessionId);
9565
9635
 
9566
- logger$7.info('WebRTC hold sip session', { sipId: sipSession.id, hasVideo });
9636
+ logger$5.info('WebRTC hold sip session', { sipId: sipSession.id, hasVideo });
9567
9637
 
9568
9638
  // Stop screenshre if needed
9569
9639
  if (this.currentScreenShare && this.currentScreenShare.sipSessionId === sessionId) {
@@ -9594,7 +9664,7 @@ class WebRTCPhone extends Emitter {
9594
9664
  return new Promise((resolve, reject) => reject(new Error('No session to unhold')));
9595
9665
  }
9596
9666
  const sessionId = this.getSipSessionId(sipSession);
9597
- logger$7.info('WebRTC unhold sip session', { sessionId, isConference });
9667
+ logger$5.info('WebRTC unhold sip session', { sessionId, isConference });
9598
9668
 
9599
9669
  const { hasVideo } = this.client.getHeldSession(sessionId) || {};
9600
9670
  const wasScreensharing = this.lastScreenShare && this.lastScreenShare.sipSessionId === sessionId;
@@ -9638,14 +9708,14 @@ class WebRTCPhone extends Emitter {
9638
9708
  }
9639
9709
 
9640
9710
  mute(callSession , withEvent = true) {
9641
- logger$7.info('WebRTC mute called', { id: callSession ? callSession.getId() : null });
9711
+ logger$5.info('WebRTC mute called', { id: callSession ? callSession.getId() : null });
9642
9712
 
9643
9713
  const sipSession = this.findSipSession(callSession);
9644
9714
  if (!sipSession) {
9645
9715
  return;
9646
9716
  }
9647
9717
 
9648
- logger$7.info('WebRTC muting', { sipId: sipSession.id });
9718
+ logger$5.info('WebRTC muting', { sipId: sipSession.id });
9649
9719
  this.client.mute(sipSession);
9650
9720
  const newCallSession = this._createCallSession(sipSession, callSession, { muted: true });
9651
9721
 
@@ -9659,14 +9729,14 @@ class WebRTCPhone extends Emitter {
9659
9729
  }
9660
9730
 
9661
9731
  unmute(callSession , withEvent = true) {
9662
- logger$7.info('WebRTC unmute called', { id: callSession ? callSession.getId() : null });
9732
+ logger$5.info('WebRTC unmute called', { id: callSession ? callSession.getId() : null });
9663
9733
 
9664
9734
  const sipSession = this.findSipSession(callSession);
9665
9735
  if (!sipSession) {
9666
9736
  return;
9667
9737
  }
9668
9738
 
9669
- logger$7.info('WebRTC unmuting', { sipId: sipSession.id });
9739
+ logger$5.info('WebRTC unmuting', { sipId: sipSession.id });
9670
9740
  this.client.unmute(sipSession);
9671
9741
  const newCallSession = this._createCallSession(sipSession, callSession, { muted: false });
9672
9742
 
@@ -9693,7 +9763,7 @@ class WebRTCPhone extends Emitter {
9693
9763
  if (!sipSession) {
9694
9764
  return;
9695
9765
  }
9696
- logger$7.info('WebRTC turn camera on', { sipId: sipSession.id });
9766
+ logger$5.info('WebRTC turn camera on', { sipId: sipSession.id });
9697
9767
 
9698
9768
  this.client.toggleCameraOn(sipSession);
9699
9769
 
@@ -9705,7 +9775,7 @@ class WebRTCPhone extends Emitter {
9705
9775
  if (!sipSession) {
9706
9776
  return;
9707
9777
  }
9708
- logger$7.info('WebRTC turn camera off', { sipId: sipSession.id });
9778
+ logger$5.info('WebRTC turn camera off', { sipId: sipSession.id });
9709
9779
 
9710
9780
  this.client.toggleCameraOff(sipSession);
9711
9781
  this.eventEmitter.emit(ON_CAMERA_DISABLED, this._createCameraDisabledCallSession(sipSession, callSession));
@@ -9717,7 +9787,7 @@ class WebRTCPhone extends Emitter {
9717
9787
  return;
9718
9788
  }
9719
9789
 
9720
- logger$7.info('WebRTC send key', { sipId: sipSession.id, tone });
9790
+ logger$5.info('WebRTC send key', { sipId: sipSession.id, tone });
9721
9791
  this.client.sendDTMF(sipSession, tone);
9722
9792
  }
9723
9793
 
@@ -9725,7 +9795,7 @@ class WebRTCPhone extends Emitter {
9725
9795
  // @TODO: line is not used here
9726
9796
  async makeCall(number , line , cameraEnabled ,
9727
9797
  audioOnly = false, conference = false) {
9728
- logger$7.info('make WebRTC call', { number, lineId: line ? line.id : null, cameraEnabled });
9798
+ logger$5.info('make WebRTC call', { number, lineId: line ? line.id : null, cameraEnabled });
9729
9799
  if (!number) {
9730
9800
  return Promise.resolve(null);
9731
9801
  }
@@ -9735,7 +9805,7 @@ class WebRTCPhone extends Emitter {
9735
9805
  }
9736
9806
  if (this.currentSipSession) {
9737
9807
  this.holdSipSession(this.currentSipSession, this.currentCallSession, true).catch(e => {
9738
- logger$7.warn('Unable to hold current session when making another call', e);
9808
+ logger$5.warn('Unable to hold current session when making another call', e);
9739
9809
  });
9740
9810
  }
9741
9811
 
@@ -9745,7 +9815,7 @@ class WebRTCPhone extends Emitter {
9745
9815
  this._bindEvents(sipSession);
9746
9816
  } catch (error) {
9747
9817
  console.warn(error);
9748
- logger$7.warn('make WebRTC call, error', { message: error.message, stack: error.stack });
9818
+ logger$5.warn('make WebRTC call, error', { message: error.message, stack: error.stack });
9749
9819
  return Promise.resolve(null);
9750
9820
  }
9751
9821
  const callSession = this._createOutgoingCallSession(sipSession, cameraEnabled || false);
@@ -9773,7 +9843,7 @@ class WebRTCPhone extends Emitter {
9773
9843
  return;
9774
9844
  }
9775
9845
 
9776
- logger$7.info('WebRTC transfer', { sipId: sipSession.id, target });
9846
+ logger$5.info('WebRTC transfer', { sipId: sipSession.id, target });
9777
9847
 
9778
9848
  this.client.transfer(sipSession, target);
9779
9849
  }
@@ -9782,7 +9852,7 @@ class WebRTCPhone extends Emitter {
9782
9852
  const sipSession = this.client.getSipSession(source.sipCallId);
9783
9853
  const sipSessionTarget = this.client.getSipSession(destination.sipCallId);
9784
9854
 
9785
- logger$7.info('WebRTC indirect transfer', {
9855
+ logger$5.info('WebRTC indirect transfer', {
9786
9856
  sipId: sipSession ? sipSession.id : null,
9787
9857
  target: sipSessionTarget ? sipSessionTarget.id : null,
9788
9858
  });
@@ -9821,7 +9891,7 @@ class WebRTCPhone extends Emitter {
9821
9891
  return false;
9822
9892
  }
9823
9893
 
9824
- logger$7.info('WebRTC hangup', { sipId: sipSession.id });
9894
+ logger$5.info('WebRTC hangup', { sipId: sipSession.id });
9825
9895
 
9826
9896
  const sipSessionId = this.getSipSessionId(sipSession);
9827
9897
 
@@ -9867,7 +9937,7 @@ class WebRTCPhone extends Emitter {
9867
9937
  endCurrentCall(callSession ) {
9868
9938
  const isCurrent = this.isCurrentCallSipSession(callSession);
9869
9939
 
9870
- logger$7.info('Ending current call', {
9940
+ logger$5.info('Ending current call', {
9871
9941
  id: callSession ? callSession.getId() : null,
9872
9942
  isCurrent,
9873
9943
  });
@@ -9891,7 +9961,7 @@ class WebRTCPhone extends Emitter {
9891
9961
  }
9892
9962
 
9893
9963
  async close() {
9894
- logger$7.info('WebRTC close');
9964
+ logger$5.info('WebRTC close');
9895
9965
 
9896
9966
  try {
9897
9967
  await Promise.race([
@@ -9899,7 +9969,7 @@ class WebRTCPhone extends Emitter {
9899
9969
  new Promise((resolve, reject) => setTimeout(() => reject(new Error('Unregister, timed out')), 3000)),
9900
9970
  ]);
9901
9971
  } catch (e) {
9902
- logger$7.error('WebRTC close, unregister error', e);
9972
+ logger$5.error('WebRTC close, unregister error', e);
9903
9973
  }
9904
9974
 
9905
9975
  this.client.close();
@@ -9917,12 +9987,12 @@ class WebRTCPhone extends Emitter {
9917
9987
  }
9918
9988
 
9919
9989
  enableRinging() {
9920
- logger$7.info('WebRTC enable ringing');
9990
+ logger$5.info('WebRTC enable ringing');
9921
9991
  this.ringingEnabled = true;
9922
9992
  }
9923
9993
 
9924
9994
  disableRinging() {
9925
- logger$7.info('WebRTC disable ringing');
9995
+ logger$5.info('WebRTC disable ringing');
9926
9996
  this.ringingEnabled = false;
9927
9997
  }
9928
9998
 
@@ -9962,7 +10032,7 @@ class WebRTCPhone extends Emitter {
9962
10032
 
9963
10033
  // Deprecated
9964
10034
  getLocalMediaStream(callSession ) {
9965
- logger$7.warn('WebRTCPhone.getLocalMediaStream is deprecated, use WebRTCPhone.getLocalStream instead');
10035
+ logger$5.warn('WebRTCPhone.getLocalMediaStream is deprecated, use WebRTCPhone.getLocalStream instead');
9966
10036
  return this.getLocalStream(callSession);
9967
10037
  }
9968
10038
 
@@ -9982,6 +10052,10 @@ class WebRTCPhone extends Emitter {
9982
10052
  return callSession ? this.client.getRemoteVideoStream(callSession.sipCallId) : null;
9983
10053
  }
9984
10054
 
10055
+ getRemoteVideoStreamFromPc(callSession ) {
10056
+ return callSession ? this.client.getRemoteVideoStreamFromPc(callSession.sipCallId) : null;
10057
+ }
10058
+
9985
10059
  hasRemoteVideo(callSession ) {
9986
10060
  return callSession ? this.client.hasRemoteVideo(callSession.sipCallId) : false;
9987
10061
  }
@@ -10000,7 +10074,7 @@ class WebRTCPhone extends Emitter {
10000
10074
  this.client.on(this.client.INVITE, (sipSession , wantsToDoVideo ) => {
10001
10075
  const autoAnswer = sipSession.request.getHeader('Answer-Mode') === 'Auto';
10002
10076
  const withVideo = this.allowVideo ? wantsToDoVideo : false;
10003
- logger$7.info('WebRTC invite received', { sipId: sipSession.id, withVideo, autoAnswer });
10077
+ logger$5.info('WebRTC invite received', { sipId: sipSession.id, withVideo, autoAnswer });
10004
10078
 
10005
10079
  const callSession = this._createIncomingCallSession(sipSession, withVideo, null, autoAnswer);
10006
10080
  this.incomingSessions.push(callSession.getId());
@@ -10023,7 +10097,7 @@ class WebRTCPhone extends Emitter {
10023
10097
  });
10024
10098
 
10025
10099
  this.client.on(this.client.ON_REINVITE, (...args) => {
10026
- logger$7.info('WebRTC on reinvite', {
10100
+ logger$5.info('WebRTC on reinvite', {
10027
10101
  sessionId: args[0].id,
10028
10102
  inviteId: args[1].id,
10029
10103
  updatedCalleeName: args[2],
@@ -10043,7 +10117,7 @@ class WebRTCPhone extends Emitter {
10043
10117
  });
10044
10118
 
10045
10119
  this.client.on(this.client.ACCEPTED, (sipSession ) => {
10046
- logger$7.info('WebRTC call accepted', { sipId: sipSession.id });
10120
+ logger$5.info('WebRTC call accepted', { sipId: sipSession.id });
10047
10121
 
10048
10122
  this._onCallAccepted(sipSession, this.client.hasVideo(this.getSipSessionId(sipSession)));
10049
10123
 
@@ -10054,22 +10128,22 @@ class WebRTCPhone extends Emitter {
10054
10128
  this.client.on('ended', () => {});
10055
10129
 
10056
10130
  this.client.on(this.client.ON_ERROR, e => {
10057
- logger$7.error('WebRTC error', e);
10131
+ logger$5.error('WebRTC error', e);
10058
10132
  this.eventEmitter.emit(ON_CALL_ERROR, e);
10059
10133
  });
10060
10134
 
10061
10135
  this.client.on(this.client.UNREGISTERED, () => {
10062
- logger$7.info('WebRTC unregistered');
10136
+ logger$5.info('WebRTC unregistered');
10063
10137
  this.eventEmitter.emit(ON_UNREGISTERED);
10064
10138
  });
10065
10139
 
10066
10140
  this.client.on(this.client.ON_DISCONNECTED, () => {
10067
- logger$7.info('WebRTC disconnected');
10068
- this.eventEmitter.emit(ON_DISCONNECTED);
10141
+ logger$5.info('WebRTC disconnected');
10142
+ this.eventEmitter.emit(ON_DISCONNECTED$1);
10069
10143
  });
10070
10144
 
10071
10145
  this.client.on(this.client.REGISTERED, () => {
10072
- logger$7.info('WebRTC registered', {
10146
+ logger$5.info('WebRTC registered', {
10073
10147
  shouldSendReinvite: this.shouldSendReinvite,
10074
10148
  state: this.currentSipSession ? this.currentSipSession.state : null,
10075
10149
  currentSipSession: !!this.currentSipSession,
@@ -10082,23 +10156,27 @@ class WebRTCPhone extends Emitter {
10082
10156
  if (this.shouldSendReinvite && this.currentSipSession
10083
10157
  && this.currentSipSession.state === SessionState.Established) {
10084
10158
  this.shouldSendReinvite = false;
10159
+ const pc = this.currentSipSession.sessionDescriptionHandler.peerConnection;
10160
+ const isConference = pc ? pc.sfu : false;
10161
+ const hasVideo = this.currentCallSession && this.currentCallSession.cameraEnabled;
10162
+
10085
10163
  try {
10086
10164
  // Send reinvite with iceRestart
10087
- this.sendReinvite(this.currentCallSession, null, false, false, true);
10165
+ this.sendReinvite(this.currentCallSession, null, isConference, !hasVideo, true);
10088
10166
  } catch (e) {
10089
- logger$7.error('WebRTC reinvite after register, error', { message: e.message, stack: e.stack });
10167
+ logger$5.error('WebRTC reinvite after register, error', { message: e.message, stack: e.stack });
10090
10168
  }
10091
10169
  }
10092
10170
  });
10093
10171
 
10094
10172
  this.client.on(this.client.CONNECTED, () => {
10095
- logger$7.info('WebRTC client connected');
10173
+ logger$5.info('WebRTC client connected');
10096
10174
 
10097
10175
  this.stopHeartbeat();
10098
10176
  });
10099
10177
 
10100
10178
  this.client.on(this.client.DISCONNECTED, () => {
10101
- logger$7.info('WebRTC client disconnected');
10179
+ logger$5.info('WebRTC client disconnected');
10102
10180
 
10103
10181
  this.eventEmitter.emit(ON_UNREGISTERED);
10104
10182
 
@@ -10112,7 +10190,7 @@ class WebRTCPhone extends Emitter {
10112
10190
  });
10113
10191
 
10114
10192
  this.client.on(this.client.ON_TRACK, (session, event) => {
10115
- this.eventEmitter.emit(ON_TRACK, session, event);
10193
+ this.eventEmitter.emit(ON_TRACK$1, session, event);
10116
10194
  });
10117
10195
 
10118
10196
  this.client.on('onVideoInputChange', stream => {
@@ -10127,7 +10205,7 @@ class WebRTCPhone extends Emitter {
10127
10205
  this.client.on(this.client.ON_NETWORK_STATS, (session, stats, previousStats) => {
10128
10206
  const callSession = this.getCallSession(this.getSipSessionId(session));
10129
10207
 
10130
- this.eventEmitter.emit(ON_NETWORK_STATS, callSession, stats, previousStats);
10208
+ this.eventEmitter.emit(ON_NETWORK_STATS$1, callSession, stats, previousStats);
10131
10209
  });
10132
10210
 
10133
10211
  // Used when upgrading directly in screenshare mode
@@ -10136,7 +10214,7 @@ class WebRTCPhone extends Emitter {
10136
10214
  const localStream = this.client.getLocalStream(sipSessionId);
10137
10215
  const callSession = this.callSessions[sipSessionId];
10138
10216
 
10139
- logger$7.info('Updrading directly in screensharing mode', {
10217
+ logger$5.info('Updrading directly in screensharing mode', {
10140
10218
  sipSessionId,
10141
10219
  tracks: localStream ? localStream.getTracks() : null,
10142
10220
  });
@@ -10168,6 +10246,15 @@ class WebRTCPhone extends Emitter {
10168
10246
  return this.client.getSipSessionId(sipSession);
10169
10247
  }
10170
10248
 
10249
+ _updateCallSession(callSession ) {
10250
+ const sipSession = this.findSipSession(callSession);
10251
+ const sipSessionId = sipSession ? this.getSipSessionId(sipSession) : null;
10252
+
10253
+ if (sipSessionId) {
10254
+ this.callSessions[sipSessionId] = callSession;
10255
+ }
10256
+ }
10257
+
10171
10258
  _onMessage(message ) {
10172
10259
  if (!message || message.method !== 'MESSAGE') {
10173
10260
  return;
@@ -10305,8 +10392,8 @@ var PHONE_EVENTS = /*#__PURE__*/Object.freeze({
10305
10392
  ON_CALL_ENDED: ON_CALL_ENDED,
10306
10393
  ON_CALL_ENDING: ON_CALL_ENDING,
10307
10394
  ON_MESSAGE: ON_MESSAGE,
10308
- ON_REINVITE: ON_REINVITE,
10309
- ON_TRACK: ON_TRACK,
10395
+ ON_REINVITE: ON_REINVITE$1,
10396
+ ON_TRACK: ON_TRACK$1,
10310
10397
  ON_AUDIO_STREAM: ON_AUDIO_STREAM,
10311
10398
  ON_VIDEO_STREAM: ON_VIDEO_STREAM,
10312
10399
  ON_REMOVE_STREAM: ON_REMOVE_STREAM,
@@ -10321,13 +10408,13 @@ var PHONE_EVENTS = /*#__PURE__*/Object.freeze({
10321
10408
  ON_VIDEO_INPUT_CHANGE: ON_VIDEO_INPUT_CHANGE,
10322
10409
  ON_CALL_ERROR: ON_CALL_ERROR,
10323
10410
  ON_MESSAGE_TRACK_UPDATED: ON_MESSAGE_TRACK_UPDATED,
10324
- ON_NETWORK_STATS: ON_NETWORK_STATS,
10411
+ ON_NETWORK_STATS: ON_NETWORK_STATS$1,
10325
10412
  ON_CHAT: ON_CHAT,
10326
10413
  ON_SIGNAL: ON_SIGNAL,
10327
- ON_DISCONNECTED: ON_DISCONNECTED,
10414
+ ON_DISCONNECTED: ON_DISCONNECTED$1,
10328
10415
  MESSAGE_TYPE_CHAT: MESSAGE_TYPE_CHAT,
10329
10416
  MESSAGE_TYPE_SIGNAL: MESSAGE_TYPE_SIGNAL,
10330
- events: events,
10417
+ events: events$1,
10331
10418
  'default': WebRTCPhone
10332
10419
  });
10333
10420
 
@@ -10665,6 +10752,11 @@ class Phone extends Emitter {
10665
10752
  return this.getRemoteVideoStream(callSession);
10666
10753
  }
10667
10754
 
10755
+ // Useful in a react-native environment when remoteMediaStream is not updated
10756
+ getRemoteVideoStreamFromPc(callSession ) {
10757
+ return this.phone ? this.phone.getRemoteVideoStreamFromPc(callSession) : false;
10758
+ }
10759
+
10668
10760
  hasVideo(callSession ) {
10669
10761
  return this.phone ? this.phone.hasVideo(callSession) : false;
10670
10762
  }
@@ -10716,7 +10808,7 @@ class Phone extends Emitter {
10716
10808
 
10717
10809
  _transferEvents() {
10718
10810
  this.unbind();
10719
- [...events$1, ...transportEvents].forEach(event => {
10811
+ [...events, ...transportEvents].forEach(event => {
10720
10812
  this.client.on(event, (...args) =>
10721
10813
  this.eventEmitter.emit.apply(this.eventEmitter.emit, [`client-${event}`, ...args]));
10722
10814
  });
@@ -10738,7 +10830,7 @@ var Phone$1 = global.wazoTelephonyInstance;
10738
10830
 
10739
10831
  //
10740
10832
 
10741
- const SOCKET_EVENTS$1 = {
10833
+ const SOCKET_EVENTS = {
10742
10834
  ON_OPEN: 'onopen',
10743
10835
  ON_MESSAGE: 'onmessage',
10744
10836
  ON_ERROR: 'onerror',
@@ -10824,6 +10916,7 @@ const AGENT_PAUSED = 'agent_paused';
10824
10916
  const AGENT_UNPAUSED = 'agent_unpaused';
10825
10917
  const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
10826
10918
  const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
10919
+ const MEETING_USER_PROGRESS = 'meeting_user_progress';
10827
10920
 
10828
10921
  const BLACKLIST_EVENTS = [
10829
10922
  CHAT_MESSAGE_SENT,
@@ -10833,7 +10926,7 @@ const BLACKLIST_EVENTS = [
10833
10926
  ];
10834
10927
 
10835
10928
  const HEARTBEAT_ENGINE_VERSION = '20.09';
10836
- const logger$5 = IssueReporter$1.loggerFor('wazo-ws');
10929
+ const logger$7 = IssueReporter$1.loggerFor('wazo-ws');
10837
10930
  const messageLogger = IssueReporter$1.loggerFor('wazo-ws-message');
10838
10931
 
10839
10932
  class WebSocketClient extends Emitter {
@@ -10882,24 +10975,24 @@ class WebSocketClient extends Emitter {
10882
10975
  }
10883
10976
 
10884
10977
  connect() {
10885
- logger$5.info('connect method started', { host: this.host, token: this.token });
10978
+ logger$7.info('connect method started', { host: this.host, token: this.token });
10886
10979
  this.socket = new ReconnectingWebSocket(this._getUrl.bind(this), [], this.options);
10887
10980
  if (this.options.binaryType) {
10888
10981
  this.socket.binaryType = this.options.binaryType;
10889
10982
  }
10890
10983
 
10891
10984
  this.socket.onopen = () => {
10892
- logger$5.info('on Wazo WS open', { method: 'connect', host: this.host });
10893
- this.eventEmitter.emit(SOCKET_EVENTS$1.ON_OPEN);
10985
+ logger$7.info('on Wazo WS open', { method: 'connect', host: this.host });
10986
+ this.eventEmitter.emit(SOCKET_EVENTS.ON_OPEN);
10894
10987
  };
10895
10988
 
10896
10989
  this.socket.onerror = event => {
10897
- logger$5.error('on Wazo WS error', event.target);
10898
- this.eventEmitter.emit(SOCKET_EVENTS$1.ON_ERROR, event);
10990
+ logger$7.error('on Wazo WS error', event.target);
10991
+ this.eventEmitter.emit(SOCKET_EVENTS.ON_ERROR, event);
10899
10992
  };
10900
10993
 
10901
10994
  this.socket.onmessage = (event ) => {
10902
- this.eventEmitter.emit(SOCKET_EVENTS$1.ON_MESSAGE, event.data);
10995
+ this.eventEmitter.emit(SOCKET_EVENTS.ON_MESSAGE, event.data);
10903
10996
 
10904
10997
  const message = JSON.parse(typeof event.data === 'string' ? event.data : '{}');
10905
10998
  let { name } = message;
@@ -10924,7 +11017,7 @@ class WebSocketClient extends Emitter {
10924
11017
 
10925
11018
  this.socket.onclose = event => {
10926
11019
  // Can't be converted to JSON (circular structure)
10927
- logger$5.info('on Wazo WS close', {
11020
+ logger$7.info('on Wazo WS close', {
10928
11021
  reason: event.reason,
10929
11022
  code: event.code,
10930
11023
  readyState: event.target.readyState,
@@ -10932,22 +11025,22 @@ class WebSocketClient extends Emitter {
10932
11025
  token: this.token,
10933
11026
  });
10934
11027
  this.initialized = false;
10935
- this.eventEmitter.emit(SOCKET_EVENTS$1.ON_CLOSE, event);
11028
+ this.eventEmitter.emit(SOCKET_EVENTS.ON_CLOSE, event);
10936
11029
 
10937
11030
  switch (event.code) {
10938
11031
  case 4002:
10939
- this.eventEmitter.emit(SOCKET_EVENTS$1.ON_AUTH_FAILED);
11032
+ this.eventEmitter.emit(SOCKET_EVENTS.ON_AUTH_FAILED);
10940
11033
  break;
10941
11034
  }
10942
11035
  };
10943
11036
 
10944
11037
  this.socket.onerror = event => {
10945
- logger$5.info('Wazo WS error', { message: event.message, code: event.code, readyState: event.target.readyState });
11038
+ logger$7.info('Wazo WS error', { message: event.message, code: event.code, readyState: event.target.readyState });
10946
11039
  };
10947
11040
  }
10948
11041
 
10949
11042
  close(force = false) {
10950
- logger$5.info('Wazo WS close', { socket: !!this.socket, host: this.host, token: this.token });
11043
+ logger$7.info('Wazo WS close', { socket: !!this.socket, host: this.host, token: this.token });
10951
11044
 
10952
11045
  if (!this.socket) {
10953
11046
  return;
@@ -10965,7 +11058,7 @@ class WebSocketClient extends Emitter {
10965
11058
 
10966
11059
  updateToken(token ) {
10967
11060
  this.token = token;
10968
- logger$5.info('Wazo WS updating token', { url: this._getUrl(), token, socket: !!this.socket });
11061
+ logger$7.info('Wazo WS updating token', { url: this._getUrl(), token, socket: !!this.socket });
10969
11062
 
10970
11063
  if (this.socket) {
10971
11064
  // If still connected, send the token to the WS
@@ -10983,7 +11076,7 @@ class WebSocketClient extends Emitter {
10983
11076
  }
10984
11077
 
10985
11078
  startHeartbeat() {
10986
- logger$5.info('Wazo WS start heartbeat', { host: this.host, token: this.token });
11079
+ logger$7.info('Wazo WS start heartbeat', { host: this.host, token: this.token });
10987
11080
 
10988
11081
  if (!this.socket) {
10989
11082
  this.heartbeat.stop();
@@ -10997,7 +11090,7 @@ class WebSocketClient extends Emitter {
10997
11090
  }
10998
11091
 
10999
11092
  stopHeartbeat() {
11000
- logger$5.info('Wazo WS stop heartbeat', { host: this.host, token: this.token });
11093
+ logger$7.info('Wazo WS stop heartbeat', { host: this.host, token: this.token });
11001
11094
 
11002
11095
  this.heartbeat.stop();
11003
11096
  }
@@ -11027,7 +11120,7 @@ class WebSocketClient extends Emitter {
11027
11120
  }
11028
11121
 
11029
11122
  reconnect(reason ) {
11030
- logger$5.info('Wazo WS reconnect', { reason, socket: !!this.socket, host: this.host, token: this.token });
11123
+ logger$7.info('Wazo WS reconnect', { reason, socket: !!this.socket, host: this.host, token: this.token });
11031
11124
  if (!this.socket) {
11032
11125
  return;
11033
11126
  }
@@ -11052,7 +11145,7 @@ class WebSocketClient extends Emitter {
11052
11145
  break;
11053
11146
  case 'start':
11054
11147
  this.initialized = true;
11055
- this.eventEmitter.emit(SOCKET_EVENTS$1.INITIALIZED);
11148
+ this.eventEmitter.emit(SOCKET_EVENTS.INITIALIZED);
11056
11149
  break;
11057
11150
  default:
11058
11151
  this.eventEmitter.emit('message', message);
@@ -11083,7 +11176,7 @@ class WebSocketClient extends Emitter {
11083
11176
  this.close();
11084
11177
  }
11085
11178
  const url = `wss://${this.host || ''}/api/websocketd/?token=${this.token || ''}&version=${this.version}`;
11086
- logger$5.log('Wazo WS url computed to reconnect', { url });
11179
+ logger$7.log('Wazo WS url computed to reconnect', { url });
11087
11180
 
11088
11181
  return url;
11089
11182
  }
@@ -11091,15 +11184,15 @@ class WebSocketClient extends Emitter {
11091
11184
  _onHeartbeat(message ) {
11092
11185
  if (message.payload === 'pong') {
11093
11186
  this.heartbeat.onHeartbeat();
11094
- logger$5.log('on heartbeat received from Wazo WS');
11187
+ logger$7.log('on heartbeat received from Wazo WS');
11095
11188
  }
11096
11189
  }
11097
11190
 
11098
11191
  async _onHeartbeatTimeout() {
11099
- logger$5.log('heartbeat timed out', { host: this.host, token: this.token });
11192
+ logger$7.log('heartbeat timed out', { host: this.host, token: this.token });
11100
11193
 
11101
11194
  this.close();
11102
- this.eventEmitter.emit(SOCKET_EVENTS$1.ON_CLOSE, new Error('Websocket ping failure.'));
11195
+ this.eventEmitter.emit(SOCKET_EVENTS.ON_CLOSE, new Error('Websocket ping failure.'));
11103
11196
 
11104
11197
  if (this.onHeartBeatTimeout) {
11105
11198
  this.onHeartBeatTimeout();
@@ -11174,11 +11267,12 @@ WebSocketClient.eventLists = [
11174
11267
  AGENT_UNPAUSED,
11175
11268
  CONFERENCE_ADHOC_PARTICIPANT_LEFT,
11176
11269
  CONFERENCE_ADHOC_DELETED,
11270
+ MEETING_USER_PROGRESS,
11177
11271
  ];
11178
11272
 
11179
11273
  var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
11180
11274
  __proto__: null,
11181
- SOCKET_EVENTS: SOCKET_EVENTS$1,
11275
+ SOCKET_EVENTS: SOCKET_EVENTS,
11182
11276
  AUTH_SESSION_EXPIRE_SOON: AUTH_SESSION_EXPIRE_SOON,
11183
11277
  FAVORITE_ADDED: FAVORITE_ADDED,
11184
11278
  FAVORITE_DELETED: FAVORITE_DELETED,
@@ -11244,16 +11338,17 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
11244
11338
  AGENT_UNPAUSED: AGENT_UNPAUSED,
11245
11339
  CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
11246
11340
  CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
11341
+ MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
11247
11342
  HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
11248
11343
  'default': WebSocketClient
11249
11344
  });
11250
11345
 
11251
11346
  //
11252
11347
 
11253
- const { SOCKET_EVENTS, ...OTHER_EVENTS } = WebSocketClient$1;
11254
- const ALL_EVENTS = [...Object.values(SOCKET_EVENTS), ...Object.values(OTHER_EVENTS)];
11348
+ const { SOCKET_EVENTS: SOCKET_EVENTS$1, ...OTHER_EVENTS } = WebSocketClient$1;
11349
+ const ALL_EVENTS = [...Object.values(SOCKET_EVENTS$1), ...Object.values(OTHER_EVENTS)];
11255
11350
 
11256
- const logger$4 = IssueReporter$1.loggerFor('simple-ws-client');
11351
+ const logger$8 = IssueReporter$1.loggerFor('simple-ws-client');
11257
11352
 
11258
11353
  class Websocket extends Emitter {
11259
11354
 
@@ -11267,9 +11362,9 @@ class Websocket extends Emitter {
11267
11362
  // $FlowFixMe
11268
11363
  this[key] = OTHER_EVENTS[key];
11269
11364
  });
11270
- Object.keys(SOCKET_EVENTS).forEach(key => {
11365
+ Object.keys(SOCKET_EVENTS$1).forEach(key => {
11271
11366
  // $FlowFixMe
11272
- this[key] = SOCKET_EVENTS[key];
11367
+ this[key] = SOCKET_EVENTS$1[key];
11273
11368
  });
11274
11369
  this.eventLists = WebSocketClient.eventLists;
11275
11370
 
@@ -11277,7 +11372,7 @@ class Websocket extends Emitter {
11277
11372
  }
11278
11373
 
11279
11374
  open(host , session ) {
11280
- logger$4.info('open simple WebSocket', { host, token: session.token });
11375
+ logger$8.info('open simple WebSocket', { host, token: session.token });
11281
11376
  this.ws = new WebSocketClient(
11282
11377
  {
11283
11378
  host,
@@ -11305,7 +11400,7 @@ class Websocket extends Emitter {
11305
11400
  }
11306
11401
 
11307
11402
  updateToken(token ) {
11308
- logger$4.info('update token via simple Websocket', { token, ws: !!this.ws });
11403
+ logger$8.info('update token via simple Websocket', { token, ws: !!this.ws });
11309
11404
 
11310
11405
  if (!this.ws) {
11311
11406
  return;
@@ -11333,7 +11428,7 @@ var Websocket$1 = global.wazoWebsocketInstance;
11333
11428
 
11334
11429
  //
11335
11430
 
11336
- const logger$3 = IssueReporter$1.loggerFor('room');
11431
+ const logger$9 = IssueReporter$1.loggerFor('room');
11337
11432
 
11338
11433
  class Participant extends Emitter {
11339
11434
 
@@ -11455,7 +11550,7 @@ class Participant extends Emitter {
11455
11550
  }
11456
11551
 
11457
11552
  onTalking(isTalking ) {
11458
- logger$3.info('on participant talking', { name: this.name, isTalking, callId: this.callId });
11553
+ logger$9.info('on participant talking', { name: this.name, isTalking, callId: this.callId });
11459
11554
  this.isTalking = isTalking;
11460
11555
  // you may notice we're not broadcasting: since all participants are getting this info
11461
11556
  // directly from asterisk, there's no need to do so
@@ -11558,7 +11653,7 @@ class Participant extends Emitter {
11558
11653
  }
11559
11654
 
11560
11655
  updateStatus(status , broadcast = true) {
11561
- logger$3.info('updating participant status', { name: this.name, status });
11656
+ logger$9.info('updating participant status', { name: this.name, status });
11562
11657
 
11563
11658
  if (typeof status.audioMuted !== 'undefined' && status.audioMuted !== this.audioMuted) {
11564
11659
  if (status.audioMuted) {
@@ -11606,7 +11701,7 @@ class Participant extends Emitter {
11606
11701
 
11607
11702
  broadcastStatus(inboundStatus = null) {
11608
11703
  const status = inboundStatus || this.getStatus();
11609
- logger$3.info('broadcasting participant status', { callId: this.callId, status });
11704
+ logger$9.info('broadcasting participant status', { callId: this.callId, status });
11610
11705
 
11611
11706
  this.room.sendSignal({
11612
11707
  type: SIGNAL_TYPE_PARTICIPANT_UPDATE,
@@ -11642,9 +11737,9 @@ class LocalParticipant extends Participant {
11642
11737
  const SIGNAL_TYPE_PARTICIPANT_UPDATE = 'signal/PARTICIPANT_UPDATE';
11643
11738
  const SIGNAL_TYPE_PARTICIPANT_REQUEST = 'signal/PARTICIPANT_REQUEST';
11644
11739
 
11645
- const logger$2 = IssueReporter$1.loggerFor('sdk-room');
11740
+ const logger$a = IssueReporter$1.loggerFor('sdk-room');
11646
11741
 
11647
- class Room$1 extends Emitter {
11742
+ class Room extends Emitter {
11648
11743
 
11649
11744
 
11650
11745
 
@@ -11702,7 +11797,7 @@ class Room$1 extends Emitter {
11702
11797
  extra = {},
11703
11798
  ) {
11704
11799
  super();
11705
- logger$2.info('room initialized', { callId, extension, sourceId, meetingUuid });
11800
+ logger$a.info('room initialized', { callId, extension, sourceId, meetingUuid });
11706
11801
 
11707
11802
  // Represents the room callSession
11708
11803
  this.callSession = callSession;
@@ -11768,7 +11863,7 @@ class Room$1 extends Emitter {
11768
11863
  * @returns {Promise<Room>}
11769
11864
  */
11770
11865
  static async connect({ extension, constraints, audioOnly = false, extra, room, meeting } ) {
11771
- logger$2.info('connecting to room', { extension, audioOnly, room: !!room });
11866
+ logger$a.info('connecting to room', { extension, audioOnly, room: !!room });
11772
11867
 
11773
11868
  if (!room) {
11774
11869
  await Wazo.Phone.connect();
@@ -11781,7 +11876,7 @@ class Room$1 extends Emitter {
11781
11876
 
11782
11877
  // Call_created is triggered before call_accepted, so we have to listen for it here.
11783
11878
  Wazo.Websocket.once(Wazo.Websocket.CALL_CREATED, ({ data }) => {
11784
- logger$2.info('room call received via WS', { callId: data.call_id });
11879
+ logger$a.info('room call received via WS', { callId: data.call_id });
11785
11880
  if (room) {
11786
11881
  room.setCallId(data.call_id);
11787
11882
  }
@@ -11789,7 +11884,7 @@ class Room$1 extends Emitter {
11789
11884
 
11790
11885
  const callSession = await Wazo.Phone.call(extension, withCamera, null, audioOnly, true);
11791
11886
  // eslint-disable-next-line no-param-reassign
11792
- room = new Room$1(callSession, extension, null, null, extra);
11887
+ room = new Room(callSession, extension, null, null, extra);
11793
11888
 
11794
11889
  // Wait for the call to be accepted
11795
11890
  await new Promise((resolve, reject) => {
@@ -11810,7 +11905,7 @@ class Room$1 extends Emitter {
11810
11905
  // Retrieve conference
11811
11906
  const conference = contacts.find(contact => contact.numbers.find(number => number.number === extension));
11812
11907
 
11813
- logger$2.info('connected to room', {
11908
+ logger$a.info('connected to room', {
11814
11909
  sourceId: conference ? conference.sourceId : null,
11815
11910
  name: conference ? conference.name : null,
11816
11911
  });
@@ -11820,7 +11915,7 @@ class Room$1 extends Emitter {
11820
11915
  room.setName(conference.name);
11821
11916
  }
11822
11917
  } else if (meeting) {
11823
- logger$2.info('Already connected to meeting', {
11918
+ logger$a.info('Already connected to meeting', {
11824
11919
  uuid: meeting.uuid,
11825
11920
  name: meeting.name,
11826
11921
  });
@@ -11833,13 +11928,13 @@ class Room$1 extends Emitter {
11833
11928
  }
11834
11929
 
11835
11930
  static disconnect() {
11836
- logger$2.info('static disconnection to room');
11931
+ logger$a.info('static disconnection to room');
11837
11932
 
11838
11933
  Wazo.Phone.disconnect();
11839
11934
  }
11840
11935
 
11841
11936
  async disconnect() {
11842
- logger$2.info('disconnection to room called');
11937
+ logger$a.info('disconnection to room called');
11843
11938
 
11844
11939
  await Wazo.Phone.hangup(this.callSession);
11845
11940
  this.callSession = null;
@@ -11859,19 +11954,19 @@ class Room$1 extends Emitter {
11859
11954
  }
11860
11955
 
11861
11956
  setSourceId(sourceId ) {
11862
- logger$2.info('set room source id', { sourceId });
11957
+ logger$a.info('set room source id', { sourceId });
11863
11958
 
11864
11959
  this.sourceId = sourceId;
11865
11960
  }
11866
11961
 
11867
11962
  setMeetingUuid(meetingUuid ) {
11868
- logger$2.info('set meeting uuid', { meetingUuid });
11963
+ logger$a.info('set meeting uuid', { meetingUuid });
11869
11964
 
11870
11965
  this.meetingUuid = meetingUuid;
11871
11966
  }
11872
11967
 
11873
11968
  setCallId(callId ) {
11874
- logger$2.info('set room call id', { callId });
11969
+ logger$a.info('set room call id', { callId });
11875
11970
 
11876
11971
  if (callId) {
11877
11972
  this.callId = callId;
@@ -11879,7 +11974,7 @@ class Room$1 extends Emitter {
11879
11974
  }
11880
11975
 
11881
11976
  setName(name ) {
11882
- logger$2.info('set room name', { name });
11977
+ logger$a.info('set room name', { name });
11883
11978
 
11884
11979
  this.name = name;
11885
11980
  }
@@ -11898,7 +11993,7 @@ class Room$1 extends Emitter {
11898
11993
  }
11899
11994
 
11900
11995
  async startScreenSharing(constraints ) {
11901
- logger$2.info('start room screen sharing', { constraints });
11996
+ logger$a.info('start room screen sharing', { constraints });
11902
11997
 
11903
11998
  const screensharingStream = await Wazo.Phone.startScreenSharing(constraints, this.callSession);
11904
11999
  if (!screensharingStream) {
@@ -11912,7 +12007,7 @@ class Room$1 extends Emitter {
11912
12007
  }
11913
12008
 
11914
12009
  async stopScreenSharing(restoreLocalStream = true) {
11915
- logger$2.info('stop room screen sharing');
12010
+ logger$a.info('stop room screen sharing');
11916
12011
 
11917
12012
  await Wazo.Phone.stopScreenSharing(this.callSession, restoreLocalStream);
11918
12013
 
@@ -11924,7 +12019,7 @@ class Room$1 extends Emitter {
11924
12019
  }
11925
12020
 
11926
12021
  turnCameraOff() {
11927
- logger$2.info('turn room camera off');
12022
+ logger$a.info('turn room camera off');
11928
12023
 
11929
12024
  Wazo.Phone.turnCameraOff(this.callSession);
11930
12025
 
@@ -11934,7 +12029,7 @@ class Room$1 extends Emitter {
11934
12029
  }
11935
12030
 
11936
12031
  turnCameraOn() {
11937
- logger$2.info('turn room camera on');
12032
+ logger$a.info('turn room camera on');
11938
12033
 
11939
12034
  Wazo.Phone.turnCameraOn(this.callSession);
11940
12035
 
@@ -11944,7 +12039,7 @@ class Room$1 extends Emitter {
11944
12039
  }
11945
12040
 
11946
12041
  mute() {
11947
- logger$2.info('mute room');
12042
+ logger$a.info('mute room');
11948
12043
 
11949
12044
  Wazo.Phone.mute(this.callSession);
11950
12045
 
@@ -11952,7 +12047,7 @@ class Room$1 extends Emitter {
11952
12047
  }
11953
12048
 
11954
12049
  unmute() {
11955
- logger$2.info('unmute room');
12050
+ logger$a.info('unmute room');
11956
12051
 
11957
12052
  Wazo.Phone.unmute(this.callSession);
11958
12053
 
@@ -11972,7 +12067,7 @@ class Room$1 extends Emitter {
11972
12067
  }
11973
12068
 
11974
12069
  hold() {
11975
- logger$2.info('hold room');
12070
+ logger$a.info('hold room');
11976
12071
 
11977
12072
  Wazo.Phone.hold(this.callSession, true);
11978
12073
 
@@ -11982,7 +12077,7 @@ class Room$1 extends Emitter {
11982
12077
  }
11983
12078
 
11984
12079
  async resume() {
11985
- logger$2.info('resume room');
12080
+ logger$a.info('resume room');
11986
12081
 
11987
12082
  const newStream = await Wazo.Phone.resume(this.callSession, true);
11988
12083
 
@@ -12010,13 +12105,13 @@ class Room$1 extends Emitter {
12010
12105
  }
12011
12106
 
12012
12107
  sendDTMF(tone ) {
12013
- logger$2.info('send room DTMF', { tone });
12108
+ logger$a.info('send room DTMF', { tone });
12014
12109
 
12015
12110
  Wazo.Phone.sendDTMF(tone, this.callSession);
12016
12111
  }
12017
12112
 
12018
12113
  async sendReinvite(newConstraints = null) {
12019
- logger$2.info('send room reinvite', { callId: this.callSession ? this.callSession.getId() : null, newConstraints });
12114
+ logger$a.info('send room reinvite', { callId: this.callSession ? this.callSession.getId() : null, newConstraints });
12020
12115
  const wasScreensharing = this.localParticipant && this.localParticipant.screensharing;
12021
12116
 
12022
12117
  Wazo.Phone.on(Wazo.Phone.ON_SHARE_SCREEN_STARTED, () => {
@@ -12075,7 +12170,7 @@ class Room$1 extends Emitter {
12075
12170
  Wazo.Phone.phone.on(Wazo.Phone.phone.client.ON_REINVITE, this._boundOnReinvite);
12076
12171
 
12077
12172
  this.on(this.ON_AUDIO_STREAM, stream => {
12078
- logger$2.info('on room audio stream');
12173
+ logger$a.info('on room audio stream');
12079
12174
 
12080
12175
  this.audioStream = stream;
12081
12176
  if (!this.roomAudioElement) {
@@ -12088,7 +12183,7 @@ class Room$1 extends Emitter {
12088
12183
  });
12089
12184
 
12090
12185
  this.on(this.ON_VIDEO_STREAM, (stream, streamId, event, sipSession) => {
12091
- logger$2.info('on room video stream', { streamId });
12186
+ logger$a.info('on room video stream', { streamId });
12092
12187
 
12093
12188
  this._mapMsid(sipSession.body.body);
12094
12189
 
@@ -12103,7 +12198,7 @@ class Room$1 extends Emitter {
12103
12198
  });
12104
12199
 
12105
12200
  this.on(this.ON_REMOVE_STREAM, stream => {
12106
- logger$2.info('on room remove stream');
12201
+ logger$a.info('on room remove stream');
12107
12202
 
12108
12203
  const participant = this.participants.find(someParticipant =>
12109
12204
  someParticipant.streams.find(someStream => someStream && someStream.id === stream.id));
@@ -12235,7 +12330,7 @@ class Room$1 extends Emitter {
12235
12330
  const requester = this._getParticipantFromCallId(origin.callId);
12236
12331
  if (requester) {
12237
12332
  // @FIXME?: when need to trigger an update on join-in; this is a bit of a hack
12238
- logger$2.info('trigger room requester status', { origin });
12333
+ logger$a.info('trigger room requester status', { origin });
12239
12334
  requester.triggerUpdate('REQUESTER_UPDATE');
12240
12335
  }
12241
12336
  break;
@@ -12266,24 +12361,24 @@ class Room$1 extends Emitter {
12266
12361
 
12267
12362
  // When we join the room, we can call `getConferenceParticipantsAsUser`, not before.
12268
12363
  if (participant.user_uuid === session.uuid) {
12269
- logger$2.info('room current user joined');
12364
+ logger$a.info('room current user joined');
12270
12365
 
12271
12366
  // Retrieve participants via an API calls
12272
12367
  const conferenceId = this.sourceId || payload.data.conference_id;
12273
12368
  let response;
12274
12369
  try {
12275
12370
  if (this.meetingUuid) {
12276
- logger$2.info('fetching meeting participants', { meetingUuid: this.meetingUuid });
12371
+ logger$a.info('fetching meeting participants', { meetingUuid: this.meetingUuid });
12277
12372
  response = await getApiClient().calld.getMeetingParticipantsAsUser(this.meetingUuid);
12278
12373
  } else {
12279
- logger$2.info('fetching conference participants', { conferenceId });
12374
+ logger$a.info('fetching conference participants', { conferenceId });
12280
12375
  response = await getApiClient().calld.getConferenceParticipantsAsUser(conferenceId);
12281
12376
  }
12282
12377
  } catch (e) {
12283
- logger$2.error('room participants fetching, error', e);
12378
+ logger$a.error('room participants fetching, error', e);
12284
12379
  }
12285
12380
  if (response) {
12286
- logger$2.info('conference participants fetched', { nb: response.items.length });
12381
+ logger$a.info('conference participants fetched', { nb: response.items.length });
12287
12382
  participants = response.items.map(item => {
12288
12383
  const isMe = item.call_id === this.callId;
12289
12384
 
@@ -12310,7 +12405,7 @@ class Room$1 extends Emitter {
12310
12405
  ? new Wazo.RemoteParticipant(this, participant)
12311
12406
  : null;
12312
12407
 
12313
- logger$2.info('other room user joined', { callId: participant.call_id, remoteParticipant: !!remoteParticipant });
12408
+ logger$a.info('other room user joined', { callId: participant.call_id, remoteParticipant: !!remoteParticipant });
12314
12409
 
12315
12410
  if (remoteParticipant) {
12316
12411
  this.participants.push(remoteParticipant);
@@ -12657,7 +12752,7 @@ class NotificationOptions {
12657
12752
 
12658
12753
 
12659
12754
  // Represents a conference room, like `9000`.
12660
- class Room {
12755
+ class Room$1 {
12661
12756
 
12662
12757
 
12663
12758
 
@@ -12678,7 +12773,7 @@ class Room {
12678
12773
  }
12679
12774
 
12680
12775
  connect(callSession ) {
12681
- return new Room({ ...this, connectedCallSession: callSession });
12776
+ return new Room$1({ ...this, connectedCallSession: callSession });
12682
12777
  }
12683
12778
 
12684
12779
  has(callSession ) {
@@ -12687,7 +12782,7 @@ class Room {
12687
12782
 
12688
12783
  addParticipant(uuid , extension , talking = null) {
12689
12784
  if (!this.participants.some(participant => participant.uuid === uuid || participant.extension === extension)) {
12690
- return new Room({ ...this, participants: [...this.participants, { uuid, extension, talking }] });
12785
+ return new Room$1({ ...this, participants: [...this.participants, { uuid, extension, talking }] });
12691
12786
  }
12692
12787
 
12693
12788
  return this;
@@ -12706,7 +12801,7 @@ class Room {
12706
12801
  updatedParticipants.push(participant);
12707
12802
  }
12708
12803
 
12709
- return new Room({ ...this, participants: updatedParticipants });
12804
+ return new Room$1({ ...this, participants: updatedParticipants });
12710
12805
  }
12711
12806
 
12712
12807
  updateParticipantByExtension(extension , participant , shouldAdd = false) {
@@ -12722,7 +12817,7 @@ class Room {
12722
12817
  updatedParticipants.push(participant);
12723
12818
  }
12724
12819
 
12725
- return new Room({ ...this, participants: updatedParticipants });
12820
+ return new Room$1({ ...this, participants: updatedParticipants });
12726
12821
  }
12727
12822
 
12728
12823
  hasCallWithId(id ) {
@@ -12730,18 +12825,18 @@ class Room {
12730
12825
  }
12731
12826
 
12732
12827
  disconnect() {
12733
- return new Room({ ...this, connectedCallSession: null });
12828
+ return new Room$1({ ...this, connectedCallSession: null });
12734
12829
  }
12735
12830
 
12736
12831
  removeParticipantWithUUID(uuid ) {
12737
- return new Room({
12832
+ return new Room$1({
12738
12833
  ...this,
12739
12834
  participants: this.participants.filter(participant => participant.uuid !== uuid),
12740
12835
  });
12741
12836
  }
12742
12837
 
12743
12838
  removeParticipantWithExtension(extension ) {
12744
- return new Room({
12839
+ return new Room$1({
12745
12840
  ...this,
12746
12841
  participants: this.participants.filter(participant => participant.extension !== extension),
12747
12842
  });
@@ -12752,7 +12847,7 @@ class Room {
12752
12847
  }
12753
12848
 
12754
12849
  static newFrom(room ) {
12755
- return newFrom(room, Room);
12850
+ return newFrom(room, Room$1);
12756
12851
  }
12757
12852
  }
12758
12853
 
@@ -13059,11 +13154,11 @@ var wazoWebsocket = {
13059
13154
  resolve();
13060
13155
  };
13061
13156
 
13062
- client.on(SOCKET_EVENTS$1.ON_ERROR, error => {
13157
+ client.on(SOCKET_EVENTS.ON_ERROR, error => {
13063
13158
  handleError(`Connection error : ${error}`);
13064
13159
  });
13065
13160
 
13066
- client.on(SOCKET_EVENTS$1.ON_OPEN, () => {
13161
+ client.on(SOCKET_EVENTS.ON_OPEN, () => {
13067
13162
  if (session.hasEngineVersionGte(HEARTBEAT_ENGINE_VERSION)) {
13068
13163
  client.setOnHeartbeatTimeout(() => {
13069
13164
  handleError('No response to heartbeat');
@@ -13164,7 +13259,7 @@ var webrtc = {
13164
13259
  }),
13165
13260
  };
13166
13261
 
13167
- const parseCandidate = line => {
13262
+ const parseCandidate$1 = line => {
13168
13263
  let parts;
13169
13264
  // Parse both variants.
13170
13265
  if (line.indexOf('a=candidate:') === 0) {
@@ -13255,7 +13350,7 @@ var SymmetricNat = {
13255
13350
  }
13256
13351
 
13257
13352
  if (e.candidate && e.candidate.candidate.indexOf('srflx') !== -1) {
13258
- const cand = parseCandidate(e.candidate.candidate);
13353
+ const cand = parseCandidate$1(e.candidate.candidate);
13259
13354
  if (!candidates[cand.relatedPort]) candidates[cand.relatedPort] = [];
13260
13355
  candidates[cand.relatedPort].push(cand.port);
13261
13356
  } else if (!e.candidate) {
@@ -13323,7 +13418,7 @@ var iceIpv4 = {
13323
13418
  const rawCandidate = e.candidate.candidate;
13324
13419
  if (rawCandidate.indexOf('srflx') !== -1 || rawCandidate.indexOf('relay') !== -1) {
13325
13420
  hasSrflxOrRelay = true;
13326
- const candidate = parseCandidate(e.candidate.candidate);
13421
+ const candidate = parseCandidate$1(e.candidate.candidate);
13327
13422
  ips.push(candidate.ip);
13328
13423
  }
13329
13424
  } else if (!e.candidate) {
@@ -13360,7 +13455,7 @@ var checks = [
13360
13455
 
13361
13456
  //
13362
13457
 
13363
- const logger$1 = IssueReporter$1.loggerFor('engine-check');
13458
+ const logger$b = IssueReporter$1.loggerFor('engine-check');
13364
13459
 
13365
13460
  class Checker {
13366
13461
 
@@ -13378,28 +13473,28 @@ class Checker {
13378
13473
  async check(onCheckBegin = () => {}, onCheckResult = () => {}) {
13379
13474
  await this._addEngineVersion();
13380
13475
 
13381
- logger$1.info('Engine check starting');
13476
+ logger$b.info('Engine check starting');
13382
13477
 
13383
13478
  for (let i = 0; i < this.checks.length; i++) {
13384
13479
  const { name, check } = this.checks[i];
13385
13480
 
13386
- logger$1.info(`Checking ${name} ...`);
13481
+ logger$b.info(`Checking ${name} ...`);
13387
13482
 
13388
13483
  onCheckBegin(name);
13389
13484
  try {
13390
13485
  // eslint-disable-next-line no-await-in-loop
13391
13486
  const result = await check(this.server, this.session, this.externalAppConfig);
13392
- logger$1.info(`Checking ${name} success.`, { result });
13487
+ logger$b.info(`Checking ${name} success.`, { result });
13393
13488
 
13394
13489
  onCheckResult(name, result);
13395
13490
  } catch (e) {
13396
- logger$1.info(`Checking ${name} failure`, { message: e.message });
13491
+ logger$b.info(`Checking ${name} failure`, { message: e.message });
13397
13492
 
13398
13493
  onCheckResult(name, e);
13399
13494
  }
13400
13495
  }
13401
13496
 
13402
- logger$1.info('Engine check done.');
13497
+ logger$b.info('Engine check done.');
13403
13498
  }
13404
13499
 
13405
13500
  addCheck(check ) {
@@ -13423,7 +13518,7 @@ const Wazo = {
13423
13518
  Auth: Auth$1,
13424
13519
  Phone: Phone$1,
13425
13520
  Websocket: Websocket$1,
13426
- Room: Room$1,
13521
+ Room,
13427
13522
  SipRoom,
13428
13523
  RemoteParticipant,
13429
13524
  LocalParticipant,
@@ -13456,7 +13551,7 @@ const Wazo = {
13456
13551
  Session,
13457
13552
  Voicemail,
13458
13553
  Relocation,
13459
- ConferenceRoom: Room,
13554
+ ConferenceRoom: Room$1,
13460
13555
  CallSession,
13461
13556
  IndirectTransfer,
13462
13557
  SwitchboardCall,
@@ -13492,12 +13587,12 @@ if (global) {
13492
13587
 
13493
13588
  //
13494
13589
 
13495
- const logger = IssueReporter$1.loggerFor('sdk-sip-room');
13590
+ const logger$c = IssueReporter$1.loggerFor('sdk-sip-room');
13496
13591
 
13497
- class SipRoom extends Room$1 {
13592
+ class SipRoom extends Room {
13498
13593
 
13499
13594
  static async connect({ extension, constraints, audioOnly = false, extra, room } ) {
13500
- logger.info('connecting to sip room', { extension, audioOnly, room: !!room });
13595
+ logger$c.info('connecting to sip room', { extension, audioOnly, room: !!room });
13501
13596
 
13502
13597
  if (!room) {
13503
13598
  await Wazo.Phone.connect();
@@ -13513,7 +13608,7 @@ class SipRoom extends Room$1 {
13513
13608
  room.setCallId(room.callSession.call.id);
13514
13609
  }
13515
13610
 
13516
- logger.info('connected to room', {
13611
+ logger$c.info('connected to room', {
13517
13612
  extension: room.extension,
13518
13613
  });
13519
13614
 
@@ -13521,7 +13616,7 @@ class SipRoom extends Room$1 {
13521
13616
  }
13522
13617
 
13523
13618
  mute() {
13524
- logger.info('mute sip room');
13619
+ logger$c.info('mute sip room');
13525
13620
 
13526
13621
  Wazo.Phone.mute(this.callSession, false);
13527
13622
 
@@ -13529,7 +13624,7 @@ class SipRoom extends Room$1 {
13529
13624
  }
13530
13625
 
13531
13626
  unmute() {
13532
- logger.info('unmute sip room');
13627
+ logger$c.info('unmute sip room');
13533
13628
 
13534
13629
  Wazo.Phone.unmute(this.callSession, false);
13535
13630