@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
@@ -7781,7 +7781,7 @@ class WebRTCClient extends Emitter {
7781
7781
 
7782
7782
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7783
7783
  } else {
7784
- videoSender = pc.getSenders().find(sender => sender.track === null);
7784
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7785
7785
  }
7786
7786
 
7787
7787
  if (!videoSender) {
@@ -7822,9 +7822,11 @@ class WebRTCClient extends Emitter {
7822
7822
  const videoTracks = localStream.getVideoTracks();
7823
7823
 
7824
7824
  // Remove video senders
7825
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7826
- videoSender.replaceTrack(null);
7827
- });
7825
+ if (pc.getSenders) {
7826
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7827
+ videoSender.replaceTrack(null);
7828
+ });
7829
+ }
7828
7830
 
7829
7831
  videoTracks.forEach(videoTrack => {
7830
7832
  videoTrack.enabled = false;
@@ -8057,7 +8059,8 @@ class WebRTCClient extends Emitter {
8057
8059
  const constraints = { audio: { deviceId: { exact: deviceId } } };
8058
8060
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
8059
8061
  const audioTrack = stream.getAudioTracks()[0];
8060
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8062
+ const sender = pc && pc.getSenders
8063
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8061
8064
 
8062
8065
  if (sender) {
8063
8066
  if (sender.track) {
@@ -8120,10 +8123,11 @@ class WebRTCClient extends Emitter {
8120
8123
  // $FlowFixMe
8121
8124
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
8122
8125
  const videoTrack = stream.getVideoTracks()[0];
8123
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8126
+ let sender = pc && pc.getSenders
8127
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8124
8128
  let wasTrackEnabled = false;
8125
8129
  if (!sender) {
8126
- sender = pc && pc.getSenders().find(s => !s.track);
8130
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
8127
8131
  }
8128
8132
 
8129
8133
  if (sender) {
@@ -9657,7 +9661,7 @@ class WebRTCPhone extends Emitter {
9657
9661
  const screenTrack = screenShareStream.getVideoTracks()[0];
9658
9662
  const sipSession = this.currentSipSession;
9659
9663
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9660
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9664
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9661
9665
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9662
9666
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9663
9667
  const hadVideo = !!videoTrack;
@@ -9739,7 +9743,7 @@ class WebRTCPhone extends Emitter {
9739
9743
  const screenTrack = screenStream.getVideoTracks()[0];
9740
9744
  const sipSessionId = this.getSipSessionId(sipSession);
9741
9745
  const pc = this.client.getPeerConnection(sipSessionId);
9742
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9746
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9743
9747
 
9744
9748
  logger$7.info('WebRTC phone - on screensharing', {
9745
9749
  hadVideo,
@@ -13581,7 +13585,7 @@ SwitchboardCall.STATE = {
13581
13585
 
13582
13586
  //
13583
13587
 
13584
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13588
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13585
13589
 
13586
13590
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13587
13591
 
@@ -13595,6 +13599,7 @@ class Features {
13595
13599
 
13596
13600
 
13597
13601
 
13602
+
13598
13603
 
13599
13604
  constructor() {
13600
13605
  this._hasChat = true;
@@ -13603,6 +13608,7 @@ class Features {
13603
13608
  this._hasFax = true;
13604
13609
  this._hasMobileDoubleCall = true;
13605
13610
  this._hasMobileGsm = true;
13611
+ this._hasMeeting = true;
13606
13612
  }
13607
13613
 
13608
13614
  async fetchAccess() {
@@ -13623,6 +13629,7 @@ class Features {
13623
13629
  this._hasFax = this._hasFeatures(scopes, 'fax');
13624
13630
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13625
13631
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13632
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13626
13633
  }
13627
13634
 
13628
13635
  hasChat() { return this._hasChat; }
@@ -13631,6 +13638,7 @@ class Features {
13631
13638
  hasFax() { return this._hasFax; }
13632
13639
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13633
13640
  hasMobileGsm() { return this._hasMobileGsm; }
13641
+ hasMeeting() { return this._hasMeeting; }
13634
13642
 
13635
13643
  _hasFeatures(scopes , featureName ) {
13636
13644
  const scopeName = getScopeName(featureName);
@@ -7781,7 +7781,7 @@ class WebRTCClient extends Emitter {
7781
7781
 
7782
7782
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7783
7783
  } else {
7784
- videoSender = pc.getSenders().find(sender => sender.track === null);
7784
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7785
7785
  }
7786
7786
 
7787
7787
  if (!videoSender) {
@@ -7822,9 +7822,11 @@ class WebRTCClient extends Emitter {
7822
7822
  const videoTracks = localStream.getVideoTracks();
7823
7823
 
7824
7824
  // Remove video senders
7825
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7826
- videoSender.replaceTrack(null);
7827
- });
7825
+ if (pc.getSenders) {
7826
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7827
+ videoSender.replaceTrack(null);
7828
+ });
7829
+ }
7828
7830
 
7829
7831
  videoTracks.forEach(videoTrack => {
7830
7832
  videoTrack.enabled = false;
@@ -8057,7 +8059,8 @@ class WebRTCClient extends Emitter {
8057
8059
  const constraints = { audio: { deviceId: { exact: deviceId } } };
8058
8060
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
8059
8061
  const audioTrack = stream.getAudioTracks()[0];
8060
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8062
+ const sender = pc && pc.getSenders
8063
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8061
8064
 
8062
8065
  if (sender) {
8063
8066
  if (sender.track) {
@@ -8120,10 +8123,11 @@ class WebRTCClient extends Emitter {
8120
8123
  // $FlowFixMe
8121
8124
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
8122
8125
  const videoTrack = stream.getVideoTracks()[0];
8123
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8126
+ let sender = pc && pc.getSenders
8127
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8124
8128
  let wasTrackEnabled = false;
8125
8129
  if (!sender) {
8126
- sender = pc && pc.getSenders().find(s => !s.track);
8130
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
8127
8131
  }
8128
8132
 
8129
8133
  if (sender) {
@@ -9657,7 +9661,7 @@ class WebRTCPhone extends Emitter {
9657
9661
  const screenTrack = screenShareStream.getVideoTracks()[0];
9658
9662
  const sipSession = this.currentSipSession;
9659
9663
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9660
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9664
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9661
9665
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9662
9666
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9663
9667
  const hadVideo = !!videoTrack;
@@ -9739,7 +9743,7 @@ class WebRTCPhone extends Emitter {
9739
9743
  const screenTrack = screenStream.getVideoTracks()[0];
9740
9744
  const sipSessionId = this.getSipSessionId(sipSession);
9741
9745
  const pc = this.client.getPeerConnection(sipSessionId);
9742
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9746
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9743
9747
 
9744
9748
  logger$7.info('WebRTC phone - on screensharing', {
9745
9749
  hadVideo,
@@ -13662,7 +13666,7 @@ SwitchboardCall.STATE = {
13662
13666
 
13663
13667
  //
13664
13668
 
13665
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13669
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13666
13670
 
13667
13671
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13668
13672
 
@@ -13676,6 +13680,7 @@ class Features {
13676
13680
 
13677
13681
 
13678
13682
 
13683
+
13679
13684
 
13680
13685
  constructor() {
13681
13686
  this._hasChat = true;
@@ -13684,6 +13689,7 @@ class Features {
13684
13689
  this._hasFax = true;
13685
13690
  this._hasMobileDoubleCall = true;
13686
13691
  this._hasMobileGsm = true;
13692
+ this._hasMeeting = true;
13687
13693
  }
13688
13694
 
13689
13695
  async fetchAccess() {
@@ -13704,6 +13710,7 @@ class Features {
13704
13710
  this._hasFax = this._hasFeatures(scopes, 'fax');
13705
13711
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13706
13712
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13713
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13707
13714
  }
13708
13715
 
13709
13716
  hasChat() { return this._hasChat; }
@@ -13712,6 +13719,7 @@ class Features {
13712
13719
  hasFax() { return this._hasFax; }
13713
13720
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13714
13721
  hasMobileGsm() { return this._hasMobileGsm; }
13722
+ hasMeeting() { return this._hasMeeting; }
13715
13723
 
13716
13724
  _hasFeatures(scopes , featureName ) {
13717
13725
  const scopeName = getScopeName(featureName);
@@ -7781,7 +7781,7 @@ class WebRTCClient extends Emitter {
7781
7781
 
7782
7782
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7783
7783
  } else {
7784
- videoSender = pc.getSenders().find(sender => sender.track === null);
7784
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7785
7785
  }
7786
7786
 
7787
7787
  if (!videoSender) {
@@ -7822,9 +7822,11 @@ class WebRTCClient extends Emitter {
7822
7822
  const videoTracks = localStream.getVideoTracks();
7823
7823
 
7824
7824
  // Remove video senders
7825
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7826
- videoSender.replaceTrack(null);
7827
- });
7825
+ if (pc.getSenders) {
7826
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7827
+ videoSender.replaceTrack(null);
7828
+ });
7829
+ }
7828
7830
 
7829
7831
  videoTracks.forEach(videoTrack => {
7830
7832
  videoTrack.enabled = false;
@@ -8057,7 +8059,8 @@ class WebRTCClient extends Emitter {
8057
8059
  const constraints = { audio: { deviceId: { exact: deviceId } } };
8058
8060
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
8059
8061
  const audioTrack = stream.getAudioTracks()[0];
8060
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8062
+ const sender = pc && pc.getSenders
8063
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8061
8064
 
8062
8065
  if (sender) {
8063
8066
  if (sender.track) {
@@ -8120,10 +8123,11 @@ class WebRTCClient extends Emitter {
8120
8123
  // $FlowFixMe
8121
8124
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
8122
8125
  const videoTrack = stream.getVideoTracks()[0];
8123
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8126
+ let sender = pc && pc.getSenders
8127
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8124
8128
  let wasTrackEnabled = false;
8125
8129
  if (!sender) {
8126
- sender = pc && pc.getSenders().find(s => !s.track);
8130
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
8127
8131
  }
8128
8132
 
8129
8133
  if (sender) {
@@ -9657,7 +9661,7 @@ class WebRTCPhone extends Emitter {
9657
9661
  const screenTrack = screenShareStream.getVideoTracks()[0];
9658
9662
  const sipSession = this.currentSipSession;
9659
9663
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9660
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9664
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9661
9665
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9662
9666
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9663
9667
  const hadVideo = !!videoTrack;
@@ -9739,7 +9743,7 @@ class WebRTCPhone extends Emitter {
9739
9743
  const screenTrack = screenStream.getVideoTracks()[0];
9740
9744
  const sipSessionId = this.getSipSessionId(sipSession);
9741
9745
  const pc = this.client.getPeerConnection(sipSessionId);
9742
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9746
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9743
9747
 
9744
9748
  logger$7.info('WebRTC phone - on screensharing', {
9745
9749
  hadVideo,
@@ -13720,7 +13724,7 @@ SwitchboardCall.STATE = {
13720
13724
 
13721
13725
  //
13722
13726
 
13723
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13727
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13724
13728
 
13725
13729
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13726
13730
 
@@ -13734,6 +13738,7 @@ class Features {
13734
13738
 
13735
13739
 
13736
13740
 
13741
+
13737
13742
 
13738
13743
  constructor() {
13739
13744
  this._hasChat = true;
@@ -13742,6 +13747,7 @@ class Features {
13742
13747
  this._hasFax = true;
13743
13748
  this._hasMobileDoubleCall = true;
13744
13749
  this._hasMobileGsm = true;
13750
+ this._hasMeeting = true;
13745
13751
  }
13746
13752
 
13747
13753
  async fetchAccess() {
@@ -13762,6 +13768,7 @@ class Features {
13762
13768
  this._hasFax = this._hasFeatures(scopes, 'fax');
13763
13769
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13764
13770
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13771
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13765
13772
  }
13766
13773
 
13767
13774
  hasChat() { return this._hasChat; }
@@ -13770,6 +13777,7 @@ class Features {
13770
13777
  hasFax() { return this._hasFax; }
13771
13778
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13772
13779
  hasMobileGsm() { return this._hasMobileGsm; }
13780
+ hasMeeting() { return this._hasMeeting; }
13773
13781
 
13774
13782
  _hasFeatures(scopes , featureName ) {
13775
13783
  const scopeName = getScopeName(featureName);
@@ -7781,7 +7781,7 @@ class WebRTCClient extends Emitter {
7781
7781
 
7782
7782
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7783
7783
  } else {
7784
- videoSender = pc.getSenders().find(sender => sender.track === null);
7784
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7785
7785
  }
7786
7786
 
7787
7787
  if (!videoSender) {
@@ -7822,9 +7822,11 @@ class WebRTCClient extends Emitter {
7822
7822
  const videoTracks = localStream.getVideoTracks();
7823
7823
 
7824
7824
  // Remove video senders
7825
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7826
- videoSender.replaceTrack(null);
7827
- });
7825
+ if (pc.getSenders) {
7826
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7827
+ videoSender.replaceTrack(null);
7828
+ });
7829
+ }
7828
7830
 
7829
7831
  videoTracks.forEach(videoTrack => {
7830
7832
  videoTrack.enabled = false;
@@ -8057,7 +8059,8 @@ class WebRTCClient extends Emitter {
8057
8059
  const constraints = { audio: { deviceId: { exact: deviceId } } };
8058
8060
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
8059
8061
  const audioTrack = stream.getAudioTracks()[0];
8060
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8062
+ const sender = pc && pc.getSenders
8063
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8061
8064
 
8062
8065
  if (sender) {
8063
8066
  if (sender.track) {
@@ -8120,10 +8123,11 @@ class WebRTCClient extends Emitter {
8120
8123
  // $FlowFixMe
8121
8124
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
8122
8125
  const videoTrack = stream.getVideoTracks()[0];
8123
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8126
+ let sender = pc && pc.getSenders
8127
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8124
8128
  let wasTrackEnabled = false;
8125
8129
  if (!sender) {
8126
- sender = pc && pc.getSenders().find(s => !s.track);
8130
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
8127
8131
  }
8128
8132
 
8129
8133
  if (sender) {
@@ -9657,7 +9661,7 @@ class WebRTCPhone extends Emitter {
9657
9661
  const screenTrack = screenShareStream.getVideoTracks()[0];
9658
9662
  const sipSession = this.currentSipSession;
9659
9663
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9660
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9664
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9661
9665
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9662
9666
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9663
9667
  const hadVideo = !!videoTrack;
@@ -9739,7 +9743,7 @@ class WebRTCPhone extends Emitter {
9739
9743
  const screenTrack = screenStream.getVideoTracks()[0];
9740
9744
  const sipSessionId = this.getSipSessionId(sipSession);
9741
9745
  const pc = this.client.getPeerConnection(sipSessionId);
9742
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9746
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9743
9747
 
9744
9748
  logger$7.info('WebRTC phone - on screensharing', {
9745
9749
  hadVideo,
@@ -13720,7 +13724,7 @@ SwitchboardCall.STATE = {
13720
13724
 
13721
13725
  //
13722
13726
 
13723
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13727
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13724
13728
 
13725
13729
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13726
13730
 
@@ -13734,6 +13738,7 @@ class Features {
13734
13738
 
13735
13739
 
13736
13740
 
13741
+
13737
13742
 
13738
13743
  constructor() {
13739
13744
  this._hasChat = true;
@@ -13742,6 +13747,7 @@ class Features {
13742
13747
  this._hasFax = true;
13743
13748
  this._hasMobileDoubleCall = true;
13744
13749
  this._hasMobileGsm = true;
13750
+ this._hasMeeting = true;
13745
13751
  }
13746
13752
 
13747
13753
  async fetchAccess() {
@@ -13762,6 +13768,7 @@ class Features {
13762
13768
  this._hasFax = this._hasFeatures(scopes, 'fax');
13763
13769
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13764
13770
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13771
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13765
13772
  }
13766
13773
 
13767
13774
  hasChat() { return this._hasChat; }
@@ -13770,6 +13777,7 @@ class Features {
13770
13777
  hasFax() { return this._hasFax; }
13771
13778
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13772
13779
  hasMobileGsm() { return this._hasMobileGsm; }
13780
+ hasMeeting() { return this._hasMeeting; }
13773
13781
 
13774
13782
  _hasFeatures(scopes , featureName ) {
13775
13783
  const scopeName = getScopeName(featureName);
@@ -7781,7 +7781,7 @@ class WebRTCClient extends Emitter {
7781
7781
 
7782
7782
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7783
7783
  } else {
7784
- videoSender = pc.getSenders().find(sender => sender.track === null);
7784
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7785
7785
  }
7786
7786
 
7787
7787
  if (!videoSender) {
@@ -7822,9 +7822,11 @@ class WebRTCClient extends Emitter {
7822
7822
  const videoTracks = localStream.getVideoTracks();
7823
7823
 
7824
7824
  // Remove video senders
7825
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7826
- videoSender.replaceTrack(null);
7827
- });
7825
+ if (pc.getSenders) {
7826
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7827
+ videoSender.replaceTrack(null);
7828
+ });
7829
+ }
7828
7830
 
7829
7831
  videoTracks.forEach(videoTrack => {
7830
7832
  videoTrack.enabled = false;
@@ -8057,7 +8059,8 @@ class WebRTCClient extends Emitter {
8057
8059
  const constraints = { audio: { deviceId: { exact: deviceId } } };
8058
8060
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
8059
8061
  const audioTrack = stream.getAudioTracks()[0];
8060
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8062
+ const sender = pc && pc.getSenders
8063
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
8061
8064
 
8062
8065
  if (sender) {
8063
8066
  if (sender.track) {
@@ -8120,10 +8123,11 @@ class WebRTCClient extends Emitter {
8120
8123
  // $FlowFixMe
8121
8124
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
8122
8125
  const videoTrack = stream.getVideoTracks()[0];
8123
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8126
+ let sender = pc && pc.getSenders
8127
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
8124
8128
  let wasTrackEnabled = false;
8125
8129
  if (!sender) {
8126
- sender = pc && pc.getSenders().find(s => !s.track);
8130
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
8127
8131
  }
8128
8132
 
8129
8133
  if (sender) {
@@ -9657,7 +9661,7 @@ class WebRTCPhone extends Emitter {
9657
9661
  const screenTrack = screenShareStream.getVideoTracks()[0];
9658
9662
  const sipSession = this.currentSipSession;
9659
9663
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9660
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9664
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9661
9665
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9662
9666
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9663
9667
  const hadVideo = !!videoTrack;
@@ -9739,7 +9743,7 @@ class WebRTCPhone extends Emitter {
9739
9743
  const screenTrack = screenStream.getVideoTracks()[0];
9740
9744
  const sipSessionId = this.getSipSessionId(sipSession);
9741
9745
  const pc = this.client.getPeerConnection(sipSessionId);
9742
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9746
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9743
9747
 
9744
9748
  logger$7.info('WebRTC phone - on screensharing', {
9745
9749
  hadVideo,
@@ -13704,7 +13708,7 @@ SwitchboardCall.STATE = {
13704
13708
 
13705
13709
  //
13706
13710
 
13707
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13711
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13708
13712
 
13709
13713
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13710
13714
 
@@ -13718,6 +13722,7 @@ class Features {
13718
13722
 
13719
13723
 
13720
13724
 
13725
+
13721
13726
 
13722
13727
  constructor() {
13723
13728
  this._hasChat = true;
@@ -13726,6 +13731,7 @@ class Features {
13726
13731
  this._hasFax = true;
13727
13732
  this._hasMobileDoubleCall = true;
13728
13733
  this._hasMobileGsm = true;
13734
+ this._hasMeeting = true;
13729
13735
  }
13730
13736
 
13731
13737
  async fetchAccess() {
@@ -13746,6 +13752,7 @@ class Features {
13746
13752
  this._hasFax = this._hasFeatures(scopes, 'fax');
13747
13753
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13748
13754
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13755
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13749
13756
  }
13750
13757
 
13751
13758
  hasChat() { return this._hasChat; }
@@ -13754,6 +13761,7 @@ class Features {
13754
13761
  hasFax() { return this._hasFax; }
13755
13762
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13756
13763
  hasMobileGsm() { return this._hasMobileGsm; }
13764
+ hasMeeting() { return this._hasMeeting; }
13757
13765
 
13758
13766
  _hasFeatures(scopes , featureName ) {
13759
13767
  const scopeName = getScopeName(featureName);
@@ -6371,7 +6371,7 @@ class WebRTCClient extends Emitter {
6371
6371
 
6372
6372
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
6373
6373
  } else {
6374
- videoSender = pc.getSenders().find(sender => sender.track === null);
6374
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
6375
6375
  }
6376
6376
 
6377
6377
  if (!videoSender) {
@@ -6412,9 +6412,11 @@ class WebRTCClient extends Emitter {
6412
6412
  const videoTracks = localStream.getVideoTracks();
6413
6413
 
6414
6414
  // Remove video senders
6415
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
6416
- videoSender.replaceTrack(null);
6417
- });
6415
+ if (pc.getSenders) {
6416
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
6417
+ videoSender.replaceTrack(null);
6418
+ });
6419
+ }
6418
6420
 
6419
6421
  videoTracks.forEach(videoTrack => {
6420
6422
  videoTrack.enabled = false;
@@ -6647,7 +6649,8 @@ class WebRTCClient extends Emitter {
6647
6649
  const constraints = { audio: { deviceId: { exact: deviceId } } };
6648
6650
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
6649
6651
  const audioTrack = stream.getAudioTracks()[0];
6650
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
6652
+ const sender = pc && pc.getSenders
6653
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
6651
6654
 
6652
6655
  if (sender) {
6653
6656
  if (sender.track) {
@@ -6710,10 +6713,11 @@ class WebRTCClient extends Emitter {
6710
6713
  // $FlowFixMe
6711
6714
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
6712
6715
  const videoTrack = stream.getVideoTracks()[0];
6713
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
6716
+ let sender = pc && pc.getSenders
6717
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
6714
6718
  let wasTrackEnabled = false;
6715
6719
  if (!sender) {
6716
- sender = pc && pc.getSenders().find(s => !s.track);
6720
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
6717
6721
  }
6718
6722
 
6719
6723
  if (sender) {
@@ -6377,7 +6377,7 @@ class WebRTCClient extends Emitter {
6377
6377
 
6378
6378
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
6379
6379
  } else {
6380
- videoSender = pc.getSenders().find(sender => sender.track === null);
6380
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
6381
6381
  }
6382
6382
 
6383
6383
  if (!videoSender) {
@@ -6418,9 +6418,11 @@ class WebRTCClient extends Emitter {
6418
6418
  const videoTracks = localStream.getVideoTracks();
6419
6419
 
6420
6420
  // Remove video senders
6421
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
6422
- videoSender.replaceTrack(null);
6423
- });
6421
+ if (pc.getSenders) {
6422
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
6423
+ videoSender.replaceTrack(null);
6424
+ });
6425
+ }
6424
6426
 
6425
6427
  videoTracks.forEach(videoTrack => {
6426
6428
  videoTrack.enabled = false;
@@ -6653,7 +6655,8 @@ class WebRTCClient extends Emitter {
6653
6655
  const constraints = { audio: { deviceId: { exact: deviceId } } };
6654
6656
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
6655
6657
  const audioTrack = stream.getAudioTracks()[0];
6656
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
6658
+ const sender = pc && pc.getSenders
6659
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
6657
6660
 
6658
6661
  if (sender) {
6659
6662
  if (sender.track) {
@@ -6716,10 +6719,11 @@ class WebRTCClient extends Emitter {
6716
6719
  // $FlowFixMe
6717
6720
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
6718
6721
  const videoTrack = stream.getVideoTracks()[0];
6719
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
6722
+ let sender = pc && pc.getSenders
6723
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
6720
6724
  let wasTrackEnabled = false;
6721
6725
  if (!sender) {
6722
- sender = pc && pc.getSenders().find(s => !s.track);
6726
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
6723
6727
  }
6724
6728
 
6725
6729
  if (sender) {