@wazo/sdk 0.38.10 → 0.38.13

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 (49) hide show
  1. package/dist/wazo-sdk.js +2 -2
  2. package/esm/__tests__/web-rtc-client.test.js +11 -7
  3. package/esm/checker/Checker.js +11 -7
  4. package/esm/checker/checks/index.js +11 -7
  5. package/esm/checker/checks/webrtc-transport.js +11 -7
  6. package/esm/checker/checks/webrtc.js +11 -7
  7. package/esm/domain/Features.js +5 -1
  8. package/esm/domain/Phone/WebRTCPhone.js +2 -2
  9. package/esm/index.js +18 -10
  10. package/esm/simple/Auth.js +18 -10
  11. package/esm/simple/Configuration.js +18 -10
  12. package/esm/simple/Phone.js +18 -10
  13. package/esm/simple/index.js +18 -10
  14. package/esm/simple/room/LocalParticipant.js +18 -10
  15. package/esm/simple/room/Participant.js +18 -10
  16. package/esm/simple/room/RemoteParticipant.js +18 -10
  17. package/esm/simple/room/Room.js +18 -10
  18. package/esm/simple/room/SipRoom.js +18 -10
  19. package/esm/simple/room/Stream.js +18 -10
  20. package/esm/simple/room/__tests__/Participant.test.js +18 -10
  21. package/esm/simple/room/__tests__/RemoteParticipant.test.js +18 -10
  22. package/esm/simple/utils.js +18 -10
  23. package/esm/web-rtc-client.js +11 -7
  24. package/lib/__tests__/web-rtc-client.test.js +11 -7
  25. package/lib/checker/Checker.js +11 -7
  26. package/lib/checker/checks/index.js +11 -7
  27. package/lib/checker/checks/webrtc-transport.js +11 -7
  28. package/lib/checker/checks/webrtc.js +11 -7
  29. package/lib/domain/Features.js +5 -1
  30. package/lib/domain/Phone/WebRTCPhone.js +2 -2
  31. package/lib/index.js +18 -10
  32. package/lib/simple/Auth.js +18 -10
  33. package/lib/simple/Configuration.js +18 -10
  34. package/lib/simple/Phone.js +18 -10
  35. package/lib/simple/index.js +18 -10
  36. package/lib/simple/room/LocalParticipant.js +18 -10
  37. package/lib/simple/room/Participant.js +18 -10
  38. package/lib/simple/room/RemoteParticipant.js +18 -10
  39. package/lib/simple/room/Room.js +18 -10
  40. package/lib/simple/room/SipRoom.js +18 -10
  41. package/lib/simple/room/Stream.js +18 -10
  42. package/lib/simple/room/__tests__/Participant.test.js +18 -10
  43. package/lib/simple/room/__tests__/RemoteParticipant.test.js +18 -10
  44. package/lib/simple/utils.js +18 -10
  45. package/lib/web-rtc-client.js +11 -7
  46. package/package.json +1 -1
  47. package/src/domain/Features.js +5 -1
  48. package/src/domain/Phone/WebRTCPhone.js +2 -2
  49. package/src/web-rtc-client.js +11 -7
@@ -7460,7 +7460,7 @@ class WebRTCClient extends Emitter {
7460
7460
 
7461
7461
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7462
7462
  } else {
7463
- videoSender = pc.getSenders().find(sender => sender.track === null);
7463
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7464
7464
  }
7465
7465
 
7466
7466
  if (!videoSender) {
@@ -7501,9 +7501,11 @@ class WebRTCClient extends Emitter {
7501
7501
  const videoTracks = localStream.getVideoTracks();
7502
7502
 
7503
7503
  // Remove video senders
7504
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7505
- videoSender.replaceTrack(null);
7506
- });
7504
+ if (pc.getSenders) {
7505
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7506
+ videoSender.replaceTrack(null);
7507
+ });
7508
+ }
7507
7509
 
7508
7510
  videoTracks.forEach(videoTrack => {
7509
7511
  videoTrack.enabled = false;
@@ -7736,7 +7738,8 @@ class WebRTCClient extends Emitter {
7736
7738
  const constraints = { audio: { deviceId: { exact: deviceId } } };
7737
7739
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
7738
7740
  const audioTrack = stream.getAudioTracks()[0];
7739
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7741
+ const sender = pc && pc.getSenders
7742
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7740
7743
 
7741
7744
  if (sender) {
7742
7745
  if (sender.track) {
@@ -7799,10 +7802,11 @@ class WebRTCClient extends Emitter {
7799
7802
  // $FlowFixMe
7800
7803
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
7801
7804
  const videoTrack = stream.getVideoTracks()[0];
7802
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7805
+ let sender = pc && pc.getSenders
7806
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7803
7807
  let wasTrackEnabled = false;
7804
7808
  if (!sender) {
7805
- sender = pc && pc.getSenders().find(s => !s.track);
7809
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
7806
7810
  }
7807
7811
 
7808
7812
  if (sender) {
@@ -9336,7 +9340,7 @@ class WebRTCPhone extends Emitter {
9336
9340
  const screenTrack = screenShareStream.getVideoTracks()[0];
9337
9341
  const sipSession = this.currentSipSession;
9338
9342
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9339
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9343
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9340
9344
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9341
9345
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9342
9346
  const hadVideo = !!videoTrack;
@@ -9418,7 +9422,7 @@ class WebRTCPhone extends Emitter {
9418
9422
  const screenTrack = screenStream.getVideoTracks()[0];
9419
9423
  const sipSessionId = this.getSipSessionId(sipSession);
9420
9424
  const pc = this.client.getPeerConnection(sipSessionId);
9421
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9425
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9422
9426
 
9423
9427
  logger$8.info('WebRTC phone - on screensharing', {
9424
9428
  hadVideo,
@@ -13320,7 +13324,7 @@ SwitchboardCall.STATE = {
13320
13324
 
13321
13325
  //
13322
13326
 
13323
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13327
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13324
13328
 
13325
13329
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13326
13330
 
@@ -13334,6 +13338,7 @@ class Features {
13334
13338
 
13335
13339
 
13336
13340
 
13341
+
13337
13342
 
13338
13343
  constructor() {
13339
13344
  this._hasChat = true;
@@ -13342,6 +13347,7 @@ class Features {
13342
13347
  this._hasFax = true;
13343
13348
  this._hasMobileDoubleCall = true;
13344
13349
  this._hasMobileGsm = true;
13350
+ this._hasMeeting = true;
13345
13351
  }
13346
13352
 
13347
13353
  async fetchAccess() {
@@ -13362,6 +13368,7 @@ class Features {
13362
13368
  this._hasFax = this._hasFeatures(scopes, 'fax');
13363
13369
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13364
13370
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13371
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13365
13372
  }
13366
13373
 
13367
13374
  hasChat() { return this._hasChat; }
@@ -13370,6 +13377,7 @@ class Features {
13370
13377
  hasFax() { return this._hasFax; }
13371
13378
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13372
13379
  hasMobileGsm() { return this._hasMobileGsm; }
13380
+ hasMeeting() { return this._hasMeeting; }
13373
13381
 
13374
13382
  _hasFeatures(scopes , featureName ) {
13375
13383
  const scopeName = getScopeName(featureName);
@@ -7791,7 +7791,7 @@ class WebRTCClient extends Emitter {
7791
7791
 
7792
7792
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7793
7793
  } else {
7794
- videoSender = pc.getSenders().find(sender => sender.track === null);
7794
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7795
7795
  }
7796
7796
 
7797
7797
  if (!videoSender) {
@@ -7832,9 +7832,11 @@ class WebRTCClient extends Emitter {
7832
7832
  const videoTracks = localStream.getVideoTracks();
7833
7833
 
7834
7834
  // Remove video senders
7835
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7836
- videoSender.replaceTrack(null);
7837
- });
7835
+ if (pc.getSenders) {
7836
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7837
+ videoSender.replaceTrack(null);
7838
+ });
7839
+ }
7838
7840
 
7839
7841
  videoTracks.forEach(videoTrack => {
7840
7842
  videoTrack.enabled = false;
@@ -8067,7 +8069,8 @@ class WebRTCClient extends Emitter {
8067
8069
  const constraints = { audio: { deviceId: { exact: deviceId } } };
8068
8070
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
8069
8071
  const audioTrack = stream.getAudioTracks()[0];
8070
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8072
+ const sender = pc && pc.getSenders
8073
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8071
8074
 
8072
8075
  if (sender) {
8073
8076
  if (sender.track) {
@@ -8130,10 +8133,11 @@ class WebRTCClient extends Emitter {
8130
8133
  // $FlowFixMe
8131
8134
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
8132
8135
  const videoTrack = stream.getVideoTracks()[0];
8133
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8136
+ let sender = pc && pc.getSenders
8137
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8134
8138
  let wasTrackEnabled = false;
8135
8139
  if (!sender) {
8136
- sender = pc && pc.getSenders().find(s => !s.track);
8140
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
8137
8141
  }
8138
8142
 
8139
8143
  if (sender) {
@@ -9667,7 +9671,7 @@ class WebRTCPhone extends Emitter {
9667
9671
  const screenTrack = screenShareStream.getVideoTracks()[0];
9668
9672
  const sipSession = this.currentSipSession;
9669
9673
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9670
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9674
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9671
9675
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9672
9676
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9673
9677
  const hadVideo = !!videoTrack;
@@ -9749,7 +9753,7 @@ class WebRTCPhone extends Emitter {
9749
9753
  const screenTrack = screenStream.getVideoTracks()[0];
9750
9754
  const sipSessionId = this.getSipSessionId(sipSession);
9751
9755
  const pc = this.client.getPeerConnection(sipSessionId);
9752
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9756
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9753
9757
 
9754
9758
  logger$7.info('WebRTC phone - on screensharing', {
9755
9759
  hadVideo,
@@ -13730,7 +13734,7 @@ SwitchboardCall.STATE = {
13730
13734
 
13731
13735
  //
13732
13736
 
13733
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13737
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13734
13738
 
13735
13739
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13736
13740
 
@@ -13744,6 +13748,7 @@ class Features {
13744
13748
 
13745
13749
 
13746
13750
 
13751
+
13747
13752
 
13748
13753
  constructor() {
13749
13754
  this._hasChat = true;
@@ -13752,6 +13757,7 @@ class Features {
13752
13757
  this._hasFax = true;
13753
13758
  this._hasMobileDoubleCall = true;
13754
13759
  this._hasMobileGsm = true;
13760
+ this._hasMeeting = true;
13755
13761
  }
13756
13762
 
13757
13763
  async fetchAccess() {
@@ -13772,6 +13778,7 @@ class Features {
13772
13778
  this._hasFax = this._hasFeatures(scopes, 'fax');
13773
13779
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13774
13780
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13781
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13775
13782
  }
13776
13783
 
13777
13784
  hasChat() { return this._hasChat; }
@@ -13780,6 +13787,7 @@ class Features {
13780
13787
  hasFax() { return this._hasFax; }
13781
13788
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13782
13789
  hasMobileGsm() { return this._hasMobileGsm; }
13790
+ hasMeeting() { return this._hasMeeting; }
13783
13791
 
13784
13792
  _hasFeatures(scopes , featureName ) {
13785
13793
  const scopeName = getScopeName(featureName);
@@ -7791,7 +7791,7 @@ class WebRTCClient extends Emitter {
7791
7791
 
7792
7792
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7793
7793
  } else {
7794
- videoSender = pc.getSenders().find(sender => sender.track === null);
7794
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7795
7795
  }
7796
7796
 
7797
7797
  if (!videoSender) {
@@ -7832,9 +7832,11 @@ class WebRTCClient extends Emitter {
7832
7832
  const videoTracks = localStream.getVideoTracks();
7833
7833
 
7834
7834
  // Remove video senders
7835
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7836
- videoSender.replaceTrack(null);
7837
- });
7835
+ if (pc.getSenders) {
7836
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7837
+ videoSender.replaceTrack(null);
7838
+ });
7839
+ }
7838
7840
 
7839
7841
  videoTracks.forEach(videoTrack => {
7840
7842
  videoTrack.enabled = false;
@@ -8067,7 +8069,8 @@ class WebRTCClient extends Emitter {
8067
8069
  const constraints = { audio: { deviceId: { exact: deviceId } } };
8068
8070
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
8069
8071
  const audioTrack = stream.getAudioTracks()[0];
8070
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8072
+ const sender = pc && pc.getSenders
8073
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8071
8074
 
8072
8075
  if (sender) {
8073
8076
  if (sender.track) {
@@ -8130,10 +8133,11 @@ class WebRTCClient extends Emitter {
8130
8133
  // $FlowFixMe
8131
8134
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
8132
8135
  const videoTrack = stream.getVideoTracks()[0];
8133
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8136
+ let sender = pc && pc.getSenders
8137
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8134
8138
  let wasTrackEnabled = false;
8135
8139
  if (!sender) {
8136
- sender = pc && pc.getSenders().find(s => !s.track);
8140
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
8137
8141
  }
8138
8142
 
8139
8143
  if (sender) {
@@ -9667,7 +9671,7 @@ class WebRTCPhone extends Emitter {
9667
9671
  const screenTrack = screenShareStream.getVideoTracks()[0];
9668
9672
  const sipSession = this.currentSipSession;
9669
9673
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9670
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9674
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9671
9675
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9672
9676
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9673
9677
  const hadVideo = !!videoTrack;
@@ -9749,7 +9753,7 @@ class WebRTCPhone extends Emitter {
9749
9753
  const screenTrack = screenStream.getVideoTracks()[0];
9750
9754
  const sipSessionId = this.getSipSessionId(sipSession);
9751
9755
  const pc = this.client.getPeerConnection(sipSessionId);
9752
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9756
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9753
9757
 
9754
9758
  logger$7.info('WebRTC phone - on screensharing', {
9755
9759
  hadVideo,
@@ -12560,7 +12564,7 @@ SwitchboardCall.STATE = {
12560
12564
 
12561
12565
  //
12562
12566
 
12563
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
12567
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
12564
12568
 
12565
12569
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
12566
12570
 
@@ -12574,6 +12578,7 @@ class Features {
12574
12578
 
12575
12579
 
12576
12580
 
12581
+
12577
12582
 
12578
12583
  constructor() {
12579
12584
  this._hasChat = true;
@@ -12582,6 +12587,7 @@ class Features {
12582
12587
  this._hasFax = true;
12583
12588
  this._hasMobileDoubleCall = true;
12584
12589
  this._hasMobileGsm = true;
12590
+ this._hasMeeting = true;
12585
12591
  }
12586
12592
 
12587
12593
  async fetchAccess() {
@@ -12602,6 +12608,7 @@ class Features {
12602
12608
  this._hasFax = this._hasFeatures(scopes, 'fax');
12603
12609
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
12604
12610
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
12611
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
12605
12612
  }
12606
12613
 
12607
12614
  hasChat() { return this._hasChat; }
@@ -12610,6 +12617,7 @@ class Features {
12610
12617
  hasFax() { return this._hasFax; }
12611
12618
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
12612
12619
  hasMobileGsm() { return this._hasMobileGsm; }
12620
+ hasMeeting() { return this._hasMeeting; }
12613
12621
 
12614
12622
  _hasFeatures(scopes , featureName ) {
12615
12623
  const scopeName = getScopeName(featureName);
@@ -7791,7 +7791,7 @@ class WebRTCClient extends Emitter {
7791
7791
 
7792
7792
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7793
7793
  } else {
7794
- videoSender = pc.getSenders().find(sender => sender.track === null);
7794
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7795
7795
  }
7796
7796
 
7797
7797
  if (!videoSender) {
@@ -7832,9 +7832,11 @@ class WebRTCClient extends Emitter {
7832
7832
  const videoTracks = localStream.getVideoTracks();
7833
7833
 
7834
7834
  // Remove video senders
7835
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7836
- videoSender.replaceTrack(null);
7837
- });
7835
+ if (pc.getSenders) {
7836
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7837
+ videoSender.replaceTrack(null);
7838
+ });
7839
+ }
7838
7840
 
7839
7841
  videoTracks.forEach(videoTrack => {
7840
7842
  videoTrack.enabled = false;
@@ -8067,7 +8069,8 @@ class WebRTCClient extends Emitter {
8067
8069
  const constraints = { audio: { deviceId: { exact: deviceId } } };
8068
8070
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
8069
8071
  const audioTrack = stream.getAudioTracks()[0];
8070
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8072
+ const sender = pc && pc.getSenders
8073
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8071
8074
 
8072
8075
  if (sender) {
8073
8076
  if (sender.track) {
@@ -8130,10 +8133,11 @@ class WebRTCClient extends Emitter {
8130
8133
  // $FlowFixMe
8131
8134
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
8132
8135
  const videoTrack = stream.getVideoTracks()[0];
8133
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8136
+ let sender = pc && pc.getSenders
8137
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8134
8138
  let wasTrackEnabled = false;
8135
8139
  if (!sender) {
8136
- sender = pc && pc.getSenders().find(s => !s.track);
8140
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
8137
8141
  }
8138
8142
 
8139
8143
  if (sender) {
@@ -9667,7 +9671,7 @@ class WebRTCPhone extends Emitter {
9667
9671
  const screenTrack = screenShareStream.getVideoTracks()[0];
9668
9672
  const sipSession = this.currentSipSession;
9669
9673
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9670
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9674
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9671
9675
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9672
9676
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9673
9677
  const hadVideo = !!videoTrack;
@@ -9749,7 +9753,7 @@ class WebRTCPhone extends Emitter {
9749
9753
  const screenTrack = screenStream.getVideoTracks()[0];
9750
9754
  const sipSessionId = this.getSipSessionId(sipSession);
9751
9755
  const pc = this.client.getPeerConnection(sipSessionId);
9752
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9756
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9753
9757
 
9754
9758
  logger$7.info('WebRTC phone - on screensharing', {
9755
9759
  hadVideo,
@@ -12565,7 +12569,7 @@ SwitchboardCall.STATE = {
12565
12569
 
12566
12570
  //
12567
12571
 
12568
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
12572
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
12569
12573
 
12570
12574
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
12571
12575
 
@@ -12579,6 +12583,7 @@ class Features {
12579
12583
 
12580
12584
 
12581
12585
 
12586
+
12582
12587
 
12583
12588
  constructor() {
12584
12589
  this._hasChat = true;
@@ -12587,6 +12592,7 @@ class Features {
12587
12592
  this._hasFax = true;
12588
12593
  this._hasMobileDoubleCall = true;
12589
12594
  this._hasMobileGsm = true;
12595
+ this._hasMeeting = true;
12590
12596
  }
12591
12597
 
12592
12598
  async fetchAccess() {
@@ -12607,6 +12613,7 @@ class Features {
12607
12613
  this._hasFax = this._hasFeatures(scopes, 'fax');
12608
12614
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
12609
12615
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
12616
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
12610
12617
  }
12611
12618
 
12612
12619
  hasChat() { return this._hasChat; }
@@ -12615,6 +12622,7 @@ class Features {
12615
12622
  hasFax() { return this._hasFax; }
12616
12623
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
12617
12624
  hasMobileGsm() { return this._hasMobileGsm; }
12625
+ hasMeeting() { return this._hasMeeting; }
12618
12626
 
12619
12627
  _hasFeatures(scopes , featureName ) {
12620
12628
  const scopeName = getScopeName(featureName);
@@ -7791,7 +7791,7 @@ class WebRTCClient extends Emitter {
7791
7791
 
7792
7792
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7793
7793
  } else {
7794
- videoSender = pc.getSenders().find(sender => sender.track === null);
7794
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7795
7795
  }
7796
7796
 
7797
7797
  if (!videoSender) {
@@ -7832,9 +7832,11 @@ class WebRTCClient extends Emitter {
7832
7832
  const videoTracks = localStream.getVideoTracks();
7833
7833
 
7834
7834
  // Remove video senders
7835
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7836
- videoSender.replaceTrack(null);
7837
- });
7835
+ if (pc.getSenders) {
7836
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7837
+ videoSender.replaceTrack(null);
7838
+ });
7839
+ }
7838
7840
 
7839
7841
  videoTracks.forEach(videoTrack => {
7840
7842
  videoTrack.enabled = false;
@@ -8067,7 +8069,8 @@ class WebRTCClient extends Emitter {
8067
8069
  const constraints = { audio: { deviceId: { exact: deviceId } } };
8068
8070
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
8069
8071
  const audioTrack = stream.getAudioTracks()[0];
8070
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8072
+ const sender = pc && pc.getSenders
8073
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8071
8074
 
8072
8075
  if (sender) {
8073
8076
  if (sender.track) {
@@ -8130,10 +8133,11 @@ class WebRTCClient extends Emitter {
8130
8133
  // $FlowFixMe
8131
8134
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
8132
8135
  const videoTrack = stream.getVideoTracks()[0];
8133
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8136
+ let sender = pc && pc.getSenders
8137
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8134
8138
  let wasTrackEnabled = false;
8135
8139
  if (!sender) {
8136
- sender = pc && pc.getSenders().find(s => !s.track);
8140
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
8137
8141
  }
8138
8142
 
8139
8143
  if (sender) {
@@ -9667,7 +9671,7 @@ class WebRTCPhone extends Emitter {
9667
9671
  const screenTrack = screenShareStream.getVideoTracks()[0];
9668
9672
  const sipSession = this.currentSipSession;
9669
9673
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9670
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9674
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9671
9675
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9672
9676
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9673
9677
  const hadVideo = !!videoTrack;
@@ -9749,7 +9753,7 @@ class WebRTCPhone extends Emitter {
9749
9753
  const screenTrack = screenStream.getVideoTracks()[0];
9750
9754
  const sipSessionId = this.getSipSessionId(sipSession);
9751
9755
  const pc = this.client.getPeerConnection(sipSessionId);
9752
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9756
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9753
9757
 
9754
9758
  logger$7.info('WebRTC phone - on screensharing', {
9755
9759
  hadVideo,
@@ -12883,7 +12887,7 @@ SwitchboardCall.STATE = {
12883
12887
 
12884
12888
  //
12885
12889
 
12886
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
12890
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
12887
12891
 
12888
12892
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
12889
12893
 
@@ -12897,6 +12901,7 @@ class Features {
12897
12901
 
12898
12902
 
12899
12903
 
12904
+
12900
12905
 
12901
12906
  constructor() {
12902
12907
  this._hasChat = true;
@@ -12905,6 +12910,7 @@ class Features {
12905
12910
  this._hasFax = true;
12906
12911
  this._hasMobileDoubleCall = true;
12907
12912
  this._hasMobileGsm = true;
12913
+ this._hasMeeting = true;
12908
12914
  }
12909
12915
 
12910
12916
  async fetchAccess() {
@@ -12925,6 +12931,7 @@ class Features {
12925
12931
  this._hasFax = this._hasFeatures(scopes, 'fax');
12926
12932
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
12927
12933
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
12934
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
12928
12935
  }
12929
12936
 
12930
12937
  hasChat() { return this._hasChat; }
@@ -12933,6 +12940,7 @@ class Features {
12933
12940
  hasFax() { return this._hasFax; }
12934
12941
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
12935
12942
  hasMobileGsm() { return this._hasMobileGsm; }
12943
+ hasMeeting() { return this._hasMeeting; }
12936
12944
 
12937
12945
  _hasFeatures(scopes , featureName ) {
12938
12946
  const scopeName = getScopeName(featureName);
@@ -7793,7 +7793,7 @@ class WebRTCClient extends Emitter {
7793
7793
 
7794
7794
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7795
7795
  } else {
7796
- videoSender = pc.getSenders().find(sender => sender.track === null);
7796
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7797
7797
  }
7798
7798
 
7799
7799
  if (!videoSender) {
@@ -7834,9 +7834,11 @@ class WebRTCClient extends Emitter {
7834
7834
  const videoTracks = localStream.getVideoTracks();
7835
7835
 
7836
7836
  // Remove video senders
7837
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7838
- videoSender.replaceTrack(null);
7839
- });
7837
+ if (pc.getSenders) {
7838
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7839
+ videoSender.replaceTrack(null);
7840
+ });
7841
+ }
7840
7842
 
7841
7843
  videoTracks.forEach(videoTrack => {
7842
7844
  videoTrack.enabled = false;
@@ -8069,7 +8071,8 @@ class WebRTCClient extends Emitter {
8069
8071
  const constraints = { audio: { deviceId: { exact: deviceId } } };
8070
8072
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
8071
8073
  const audioTrack = stream.getAudioTracks()[0];
8072
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8074
+ const sender = pc && pc.getSenders
8075
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8073
8076
 
8074
8077
  if (sender) {
8075
8078
  if (sender.track) {
@@ -8132,10 +8135,11 @@ class WebRTCClient extends Emitter {
8132
8135
  // $FlowFixMe
8133
8136
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
8134
8137
  const videoTrack = stream.getVideoTracks()[0];
8135
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8138
+ let sender = pc && pc.getSenders
8139
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8136
8140
  let wasTrackEnabled = false;
8137
8141
  if (!sender) {
8138
- sender = pc && pc.getSenders().find(s => !s.track);
8142
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
8139
8143
  }
8140
8144
 
8141
8145
  if (sender) {
@@ -9669,7 +9673,7 @@ class WebRTCPhone extends Emitter {
9669
9673
  const screenTrack = screenShareStream.getVideoTracks()[0];
9670
9674
  const sipSession = this.currentSipSession;
9671
9675
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9672
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9676
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9673
9677
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9674
9678
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9675
9679
  const hadVideo = !!videoTrack;
@@ -9751,7 +9755,7 @@ class WebRTCPhone extends Emitter {
9751
9755
  const screenTrack = screenStream.getVideoTracks()[0];
9752
9756
  const sipSessionId = this.getSipSessionId(sipSession);
9753
9757
  const pc = this.client.getPeerConnection(sipSessionId);
9754
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9758
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9755
9759
 
9756
9760
  logger$7.info('WebRTC phone - on screensharing', {
9757
9761
  hadVideo,
@@ -12896,7 +12900,7 @@ SwitchboardCall.STATE = {
12896
12900
 
12897
12901
  //
12898
12902
 
12899
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
12903
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
12900
12904
 
12901
12905
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
12902
12906
 
@@ -12910,6 +12914,7 @@ class Features {
12910
12914
 
12911
12915
 
12912
12916
 
12917
+
12913
12918
 
12914
12919
  constructor() {
12915
12920
  this._hasChat = true;
@@ -12918,6 +12923,7 @@ class Features {
12918
12923
  this._hasFax = true;
12919
12924
  this._hasMobileDoubleCall = true;
12920
12925
  this._hasMobileGsm = true;
12926
+ this._hasMeeting = true;
12921
12927
  }
12922
12928
 
12923
12929
  async fetchAccess() {
@@ -12938,6 +12944,7 @@ class Features {
12938
12944
  this._hasFax = this._hasFeatures(scopes, 'fax');
12939
12945
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
12940
12946
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
12947
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
12941
12948
  }
12942
12949
 
12943
12950
  hasChat() { return this._hasChat; }
@@ -12946,6 +12953,7 @@ class Features {
12946
12953
  hasFax() { return this._hasFax; }
12947
12954
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
12948
12955
  hasMobileGsm() { return this._hasMobileGsm; }
12956
+ hasMeeting() { return this._hasMeeting; }
12949
12957
 
12950
12958
  _hasFeatures(scopes , featureName ) {
12951
12959
  const scopeName = getScopeName(featureName);