@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
@@ -7450,7 +7450,7 @@ class WebRTCClient extends Emitter {
7450
7450
 
7451
7451
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7452
7452
  } else {
7453
- videoSender = pc.getSenders().find(sender => sender.track === null);
7453
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7454
7454
  }
7455
7455
 
7456
7456
  if (!videoSender) {
@@ -7491,9 +7491,11 @@ class WebRTCClient extends Emitter {
7491
7491
  const videoTracks = localStream.getVideoTracks();
7492
7492
 
7493
7493
  // Remove video senders
7494
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7495
- videoSender.replaceTrack(null);
7496
- });
7494
+ if (pc.getSenders) {
7495
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7496
+ videoSender.replaceTrack(null);
7497
+ });
7498
+ }
7497
7499
 
7498
7500
  videoTracks.forEach(videoTrack => {
7499
7501
  videoTrack.enabled = false;
@@ -7726,7 +7728,8 @@ class WebRTCClient extends Emitter {
7726
7728
  const constraints = { audio: { deviceId: { exact: deviceId } } };
7727
7729
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
7728
7730
  const audioTrack = stream.getAudioTracks()[0];
7729
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7731
+ const sender = pc && pc.getSenders
7732
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7730
7733
 
7731
7734
  if (sender) {
7732
7735
  if (sender.track) {
@@ -7789,10 +7792,11 @@ class WebRTCClient extends Emitter {
7789
7792
  // $FlowFixMe
7790
7793
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
7791
7794
  const videoTrack = stream.getVideoTracks()[0];
7792
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7795
+ let sender = pc && pc.getSenders
7796
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7793
7797
  let wasTrackEnabled = false;
7794
7798
  if (!sender) {
7795
- sender = pc && pc.getSenders().find(s => !s.track);
7799
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
7796
7800
  }
7797
7801
 
7798
7802
  if (sender) {
@@ -9326,7 +9330,7 @@ class WebRTCPhone extends Emitter {
9326
9330
  const screenTrack = screenShareStream.getVideoTracks()[0];
9327
9331
  const sipSession = this.currentSipSession;
9328
9332
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9329
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9333
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9330
9334
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9331
9335
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9332
9336
  const hadVideo = !!videoTrack;
@@ -9408,7 +9412,7 @@ class WebRTCPhone extends Emitter {
9408
9412
  const screenTrack = screenStream.getVideoTracks()[0];
9409
9413
  const sipSessionId = this.getSipSessionId(sipSession);
9410
9414
  const pc = this.client.getPeerConnection(sipSessionId);
9411
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9415
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9412
9416
 
9413
9417
  logger$8.info('WebRTC phone - on screensharing', {
9414
9418
  hadVideo,
@@ -13310,7 +13314,7 @@ SwitchboardCall.STATE = {
13310
13314
 
13311
13315
  //
13312
13316
 
13313
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13317
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13314
13318
 
13315
13319
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13316
13320
 
@@ -13324,6 +13328,7 @@ class Features {
13324
13328
 
13325
13329
 
13326
13330
 
13331
+
13327
13332
 
13328
13333
  constructor() {
13329
13334
  this._hasChat = true;
@@ -13332,6 +13337,7 @@ class Features {
13332
13337
  this._hasFax = true;
13333
13338
  this._hasMobileDoubleCall = true;
13334
13339
  this._hasMobileGsm = true;
13340
+ this._hasMeeting = true;
13335
13341
  }
13336
13342
 
13337
13343
  async fetchAccess() {
@@ -13352,6 +13358,7 @@ class Features {
13352
13358
  this._hasFax = this._hasFeatures(scopes, 'fax');
13353
13359
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13354
13360
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13361
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13355
13362
  }
13356
13363
 
13357
13364
  hasChat() { return this._hasChat; }
@@ -13360,6 +13367,7 @@ class Features {
13360
13367
  hasFax() { return this._hasFax; }
13361
13368
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13362
13369
  hasMobileGsm() { return this._hasMobileGsm; }
13370
+ hasMeeting() { return this._hasMeeting; }
13363
13371
 
13364
13372
  _hasFeatures(scopes , featureName ) {
13365
13373
  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,
@@ -12550,7 +12554,7 @@ SwitchboardCall.STATE = {
12550
12554
 
12551
12555
  //
12552
12556
 
12553
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
12557
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
12554
12558
 
12555
12559
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
12556
12560
 
@@ -12564,6 +12568,7 @@ class Features {
12564
12568
 
12565
12569
 
12566
12570
 
12571
+
12567
12572
 
12568
12573
  constructor() {
12569
12574
  this._hasChat = true;
@@ -12572,6 +12577,7 @@ class Features {
12572
12577
  this._hasFax = true;
12573
12578
  this._hasMobileDoubleCall = true;
12574
12579
  this._hasMobileGsm = true;
12580
+ this._hasMeeting = true;
12575
12581
  }
12576
12582
 
12577
12583
  async fetchAccess() {
@@ -12592,6 +12598,7 @@ class Features {
12592
12598
  this._hasFax = this._hasFeatures(scopes, 'fax');
12593
12599
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
12594
12600
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
12601
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
12595
12602
  }
12596
12603
 
12597
12604
  hasChat() { return this._hasChat; }
@@ -12600,6 +12607,7 @@ class Features {
12600
12607
  hasFax() { return this._hasFax; }
12601
12608
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
12602
12609
  hasMobileGsm() { return this._hasMobileGsm; }
12610
+ hasMeeting() { return this._hasMeeting; }
12603
12611
 
12604
12612
  _hasFeatures(scopes , featureName ) {
12605
12613
  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,
@@ -12555,7 +12559,7 @@ SwitchboardCall.STATE = {
12555
12559
 
12556
12560
  //
12557
12561
 
12558
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
12562
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
12559
12563
 
12560
12564
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
12561
12565
 
@@ -12569,6 +12573,7 @@ class Features {
12569
12573
 
12570
12574
 
12571
12575
 
12576
+
12572
12577
 
12573
12578
  constructor() {
12574
12579
  this._hasChat = true;
@@ -12577,6 +12582,7 @@ class Features {
12577
12582
  this._hasFax = true;
12578
12583
  this._hasMobileDoubleCall = true;
12579
12584
  this._hasMobileGsm = true;
12585
+ this._hasMeeting = true;
12580
12586
  }
12581
12587
 
12582
12588
  async fetchAccess() {
@@ -12597,6 +12603,7 @@ class Features {
12597
12603
  this._hasFax = this._hasFeatures(scopes, 'fax');
12598
12604
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
12599
12605
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
12606
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
12600
12607
  }
12601
12608
 
12602
12609
  hasChat() { return this._hasChat; }
@@ -12605,6 +12612,7 @@ class Features {
12605
12612
  hasFax() { return this._hasFax; }
12606
12613
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
12607
12614
  hasMobileGsm() { return this._hasMobileGsm; }
12615
+ hasMeeting() { return this._hasMeeting; }
12608
12616
 
12609
12617
  _hasFeatures(scopes , featureName ) {
12610
12618
  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,
@@ -12873,7 +12877,7 @@ SwitchboardCall.STATE = {
12873
12877
 
12874
12878
  //
12875
12879
 
12876
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
12880
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
12877
12881
 
12878
12882
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
12879
12883
 
@@ -12887,6 +12891,7 @@ class Features {
12887
12891
 
12888
12892
 
12889
12893
 
12894
+
12890
12895
 
12891
12896
  constructor() {
12892
12897
  this._hasChat = true;
@@ -12895,6 +12900,7 @@ class Features {
12895
12900
  this._hasFax = true;
12896
12901
  this._hasMobileDoubleCall = true;
12897
12902
  this._hasMobileGsm = true;
12903
+ this._hasMeeting = true;
12898
12904
  }
12899
12905
 
12900
12906
  async fetchAccess() {
@@ -12915,6 +12921,7 @@ class Features {
12915
12921
  this._hasFax = this._hasFeatures(scopes, 'fax');
12916
12922
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
12917
12923
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
12924
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
12918
12925
  }
12919
12926
 
12920
12927
  hasChat() { return this._hasChat; }
@@ -12923,6 +12930,7 @@ class Features {
12923
12930
  hasFax() { return this._hasFax; }
12924
12931
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
12925
12932
  hasMobileGsm() { return this._hasMobileGsm; }
12933
+ hasMeeting() { return this._hasMeeting; }
12926
12934
 
12927
12935
  _hasFeatures(scopes , featureName ) {
12928
12936
  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,
@@ -12884,7 +12888,7 @@ SwitchboardCall.STATE = {
12884
12888
 
12885
12889
  //
12886
12890
 
12887
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
12891
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
12888
12892
 
12889
12893
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
12890
12894
 
@@ -12898,6 +12902,7 @@ class Features {
12898
12902
 
12899
12903
 
12900
12904
 
12905
+
12901
12906
 
12902
12907
  constructor() {
12903
12908
  this._hasChat = true;
@@ -12906,6 +12911,7 @@ class Features {
12906
12911
  this._hasFax = true;
12907
12912
  this._hasMobileDoubleCall = true;
12908
12913
  this._hasMobileGsm = true;
12914
+ this._hasMeeting = true;
12909
12915
  }
12910
12916
 
12911
12917
  async fetchAccess() {
@@ -12926,6 +12932,7 @@ class Features {
12926
12932
  this._hasFax = this._hasFeatures(scopes, 'fax');
12927
12933
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
12928
12934
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
12935
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
12929
12936
  }
12930
12937
 
12931
12938
  hasChat() { return this._hasChat; }
@@ -12934,6 +12941,7 @@ class Features {
12934
12941
  hasFax() { return this._hasFax; }
12935
12942
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
12936
12943
  hasMobileGsm() { return this._hasMobileGsm; }
12944
+ hasMeeting() { return this._hasMeeting; }
12937
12945
 
12938
12946
  _hasFeatures(scopes , featureName ) {
12939
12947
  const scopeName = getScopeName(featureName);