@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
@@ -6368,7 +6368,7 @@ class WebRTCClient extends Emitter {
6368
6368
 
6369
6369
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
6370
6370
  } else {
6371
- videoSender = pc.getSenders().find(sender => sender.track === null);
6371
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
6372
6372
  }
6373
6373
 
6374
6374
  if (!videoSender) {
@@ -6409,9 +6409,11 @@ class WebRTCClient extends Emitter {
6409
6409
  const videoTracks = localStream.getVideoTracks();
6410
6410
 
6411
6411
  // Remove video senders
6412
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
6413
- videoSender.replaceTrack(null);
6414
- });
6412
+ if (pc.getSenders) {
6413
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
6414
+ videoSender.replaceTrack(null);
6415
+ });
6416
+ }
6415
6417
 
6416
6418
  videoTracks.forEach(videoTrack => {
6417
6419
  videoTrack.enabled = false;
@@ -6644,7 +6646,8 @@ class WebRTCClient extends Emitter {
6644
6646
  const constraints = { audio: { deviceId: { exact: deviceId } } };
6645
6647
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
6646
6648
  const audioTrack = stream.getAudioTracks()[0];
6647
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
6649
+ const sender = pc && pc.getSenders
6650
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
6648
6651
 
6649
6652
  if (sender) {
6650
6653
  if (sender.track) {
@@ -6707,10 +6710,11 @@ class WebRTCClient extends Emitter {
6707
6710
  // $FlowFixMe
6708
6711
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
6709
6712
  const videoTrack = stream.getVideoTracks()[0];
6710
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
6713
+ let sender = pc && pc.getSenders
6714
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
6711
6715
  let wasTrackEnabled = false;
6712
6716
  if (!sender) {
6713
- sender = pc && pc.getSenders().find(s => !s.track);
6717
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
6714
6718
  }
6715
6719
 
6716
6720
  if (sender) {
@@ -6955,7 +6955,7 @@ class WebRTCClient extends Emitter {
6955
6955
 
6956
6956
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
6957
6957
  } else {
6958
- videoSender = pc.getSenders().find(sender => sender.track === null);
6958
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
6959
6959
  }
6960
6960
 
6961
6961
  if (!videoSender) {
@@ -6996,9 +6996,11 @@ class WebRTCClient extends Emitter {
6996
6996
  const videoTracks = localStream.getVideoTracks();
6997
6997
 
6998
6998
  // Remove video senders
6999
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7000
- videoSender.replaceTrack(null);
7001
- });
6999
+ if (pc.getSenders) {
7000
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7001
+ videoSender.replaceTrack(null);
7002
+ });
7003
+ }
7002
7004
 
7003
7005
  videoTracks.forEach(videoTrack => {
7004
7006
  videoTrack.enabled = false;
@@ -7231,7 +7233,8 @@ class WebRTCClient extends Emitter {
7231
7233
  const constraints = { audio: { deviceId: { exact: deviceId } } };
7232
7234
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
7233
7235
  const audioTrack = stream.getAudioTracks()[0];
7234
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7236
+ const sender = pc && pc.getSenders
7237
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7235
7238
 
7236
7239
  if (sender) {
7237
7240
  if (sender.track) {
@@ -7294,10 +7297,11 @@ class WebRTCClient extends Emitter {
7294
7297
  // $FlowFixMe
7295
7298
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
7296
7299
  const videoTrack = stream.getVideoTracks()[0];
7297
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7300
+ let sender = pc && pc.getSenders
7301
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7298
7302
  let wasTrackEnabled = false;
7299
7303
  if (!sender) {
7300
- sender = pc && pc.getSenders().find(s => !s.track);
7304
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
7301
7305
  }
7302
7306
 
7303
7307
  if (sender) {
@@ -6955,7 +6955,7 @@ class WebRTCClient extends Emitter {
6955
6955
 
6956
6956
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
6957
6957
  } else {
6958
- videoSender = pc.getSenders().find(sender => sender.track === null);
6958
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
6959
6959
  }
6960
6960
 
6961
6961
  if (!videoSender) {
@@ -6996,9 +6996,11 @@ class WebRTCClient extends Emitter {
6996
6996
  const videoTracks = localStream.getVideoTracks();
6997
6997
 
6998
6998
  // Remove video senders
6999
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7000
- videoSender.replaceTrack(null);
7001
- });
6999
+ if (pc.getSenders) {
7000
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7001
+ videoSender.replaceTrack(null);
7002
+ });
7003
+ }
7002
7004
 
7003
7005
  videoTracks.forEach(videoTrack => {
7004
7006
  videoTrack.enabled = false;
@@ -7231,7 +7233,8 @@ class WebRTCClient extends Emitter {
7231
7233
  const constraints = { audio: { deviceId: { exact: deviceId } } };
7232
7234
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
7233
7235
  const audioTrack = stream.getAudioTracks()[0];
7234
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7236
+ const sender = pc && pc.getSenders
7237
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7235
7238
 
7236
7239
  if (sender) {
7237
7240
  if (sender.track) {
@@ -7294,10 +7297,11 @@ class WebRTCClient extends Emitter {
7294
7297
  // $FlowFixMe
7295
7298
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
7296
7299
  const videoTrack = stream.getVideoTracks()[0];
7297
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7300
+ let sender = pc && pc.getSenders
7301
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7298
7302
  let wasTrackEnabled = false;
7299
7303
  if (!sender) {
7300
- sender = pc && pc.getSenders().find(s => !s.track);
7304
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
7301
7305
  }
7302
7306
 
7303
7307
  if (sender) {
@@ -6368,7 +6368,7 @@ class WebRTCClient extends Emitter {
6368
6368
 
6369
6369
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
6370
6370
  } else {
6371
- videoSender = pc.getSenders().find(sender => sender.track === null);
6371
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
6372
6372
  }
6373
6373
 
6374
6374
  if (!videoSender) {
@@ -6409,9 +6409,11 @@ class WebRTCClient extends Emitter {
6409
6409
  const videoTracks = localStream.getVideoTracks();
6410
6410
 
6411
6411
  // Remove video senders
6412
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
6413
- videoSender.replaceTrack(null);
6414
- });
6412
+ if (pc.getSenders) {
6413
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
6414
+ videoSender.replaceTrack(null);
6415
+ });
6416
+ }
6415
6417
 
6416
6418
  videoTracks.forEach(videoTrack => {
6417
6419
  videoTrack.enabled = false;
@@ -6644,7 +6646,8 @@ class WebRTCClient extends Emitter {
6644
6646
  const constraints = { audio: { deviceId: { exact: deviceId } } };
6645
6647
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
6646
6648
  const audioTrack = stream.getAudioTracks()[0];
6647
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
6649
+ const sender = pc && pc.getSenders
6650
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
6648
6651
 
6649
6652
  if (sender) {
6650
6653
  if (sender.track) {
@@ -6707,10 +6710,11 @@ class WebRTCClient extends Emitter {
6707
6710
  // $FlowFixMe
6708
6711
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
6709
6712
  const videoTrack = stream.getVideoTracks()[0];
6710
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
6713
+ let sender = pc && pc.getSenders
6714
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
6711
6715
  let wasTrackEnabled = false;
6712
6716
  if (!sender) {
6713
- sender = pc && pc.getSenders().find(s => !s.track);
6717
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
6714
6718
  }
6715
6719
 
6716
6720
  if (sender) {
@@ -6368,7 +6368,7 @@ class WebRTCClient extends Emitter {
6368
6368
 
6369
6369
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
6370
6370
  } else {
6371
- videoSender = pc.getSenders().find(sender => sender.track === null);
6371
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
6372
6372
  }
6373
6373
 
6374
6374
  if (!videoSender) {
@@ -6409,9 +6409,11 @@ class WebRTCClient extends Emitter {
6409
6409
  const videoTracks = localStream.getVideoTracks();
6410
6410
 
6411
6411
  // Remove video senders
6412
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
6413
- videoSender.replaceTrack(null);
6414
- });
6412
+ if (pc.getSenders) {
6413
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
6414
+ videoSender.replaceTrack(null);
6415
+ });
6416
+ }
6415
6417
 
6416
6418
  videoTracks.forEach(videoTrack => {
6417
6419
  videoTrack.enabled = false;
@@ -6644,7 +6646,8 @@ class WebRTCClient extends Emitter {
6644
6646
  const constraints = { audio: { deviceId: { exact: deviceId } } };
6645
6647
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
6646
6648
  const audioTrack = stream.getAudioTracks()[0];
6647
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
6649
+ const sender = pc && pc.getSenders
6650
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
6648
6651
 
6649
6652
  if (sender) {
6650
6653
  if (sender.track) {
@@ -6707,10 +6710,11 @@ class WebRTCClient extends Emitter {
6707
6710
  // $FlowFixMe
6708
6711
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
6709
6712
  const videoTrack = stream.getVideoTracks()[0];
6710
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
6713
+ let sender = pc && pc.getSenders
6714
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
6711
6715
  let wasTrackEnabled = false;
6712
6716
  if (!sender) {
6713
- sender = pc && pc.getSenders().find(s => !s.track);
6717
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
6714
6718
  }
6715
6719
 
6716
6720
  if (sender) {
@@ -4943,7 +4943,7 @@ var getApiClient = (forServer = null) => {
4943
4943
 
4944
4944
  //
4945
4945
 
4946
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
4946
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
4947
4947
 
4948
4948
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
4949
4949
 
@@ -4957,6 +4957,7 @@ class Features {
4957
4957
 
4958
4958
 
4959
4959
 
4960
+
4960
4961
 
4961
4962
  constructor() {
4962
4963
  this._hasChat = true;
@@ -4965,6 +4966,7 @@ class Features {
4965
4966
  this._hasFax = true;
4966
4967
  this._hasMobileDoubleCall = true;
4967
4968
  this._hasMobileGsm = true;
4969
+ this._hasMeeting = true;
4968
4970
  }
4969
4971
 
4970
4972
  async fetchAccess() {
@@ -4985,6 +4987,7 @@ class Features {
4985
4987
  this._hasFax = this._hasFeatures(scopes, 'fax');
4986
4988
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
4987
4989
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
4990
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
4988
4991
  }
4989
4992
 
4990
4993
  hasChat() { return this._hasChat; }
@@ -4993,6 +4996,7 @@ class Features {
4993
4996
  hasFax() { return this._hasFax; }
4994
4997
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
4995
4998
  hasMobileGsm() { return this._hasMobileGsm; }
4999
+ hasMeeting() { return this._hasMeeting; }
4996
5000
 
4997
5001
  _hasFeatures(scopes , featureName ) {
4998
5002
  const scopeName = getScopeName(featureName);
@@ -1396,7 +1396,7 @@ class WebRTCPhone extends Emitter {
1396
1396
  const screenTrack = screenShareStream.getVideoTracks()[0];
1397
1397
  const sipSession = this.currentSipSession;
1398
1398
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
1399
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
1399
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
1400
1400
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
1401
1401
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
1402
1402
  const hadVideo = !!videoTrack;
@@ -1478,7 +1478,7 @@ class WebRTCPhone extends Emitter {
1478
1478
  const screenTrack = screenStream.getVideoTracks()[0];
1479
1479
  const sipSessionId = this.getSipSessionId(sipSession);
1480
1480
  const pc = this.client.getPeerConnection(sipSessionId);
1481
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
1481
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
1482
1482
 
1483
1483
  logger.info('WebRTC phone - on screensharing', {
1484
1484
  hadVideo,
package/esm/index.js CHANGED
@@ -7272,7 +7272,7 @@ class WebRTCClient extends Emitter {
7272
7272
 
7273
7273
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7274
7274
  } else {
7275
- videoSender = pc.getSenders().find(sender => sender.track === null);
7275
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7276
7276
  }
7277
7277
 
7278
7278
  if (!videoSender) {
@@ -7313,9 +7313,11 @@ class WebRTCClient extends Emitter {
7313
7313
  const videoTracks = localStream.getVideoTracks();
7314
7314
 
7315
7315
  // Remove video senders
7316
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7317
- videoSender.replaceTrack(null);
7318
- });
7316
+ if (pc.getSenders) {
7317
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7318
+ videoSender.replaceTrack(null);
7319
+ });
7320
+ }
7319
7321
 
7320
7322
  videoTracks.forEach(videoTrack => {
7321
7323
  videoTrack.enabled = false;
@@ -7548,7 +7550,8 @@ class WebRTCClient extends Emitter {
7548
7550
  const constraints = { audio: { deviceId: { exact: deviceId } } };
7549
7551
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
7550
7552
  const audioTrack = stream.getAudioTracks()[0];
7551
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7553
+ const sender = pc && pc.getSenders
7554
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7552
7555
 
7553
7556
  if (sender) {
7554
7557
  if (sender.track) {
@@ -7611,10 +7614,11 @@ class WebRTCClient extends Emitter {
7611
7614
  // $FlowFixMe
7612
7615
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
7613
7616
  const videoTrack = stream.getVideoTracks()[0];
7614
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7617
+ let sender = pc && pc.getSenders
7618
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7615
7619
  let wasTrackEnabled = false;
7616
7620
  if (!sender) {
7617
- sender = pc && pc.getSenders().find(s => !s.track);
7621
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
7618
7622
  }
7619
7623
 
7620
7624
  if (sender) {
@@ -9215,7 +9219,7 @@ var COUNTRIES = {
9215
9219
 
9216
9220
  //
9217
9221
 
9218
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
9222
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
9219
9223
 
9220
9224
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
9221
9225
 
@@ -9229,6 +9233,7 @@ class Features {
9229
9233
 
9230
9234
 
9231
9235
 
9236
+
9232
9237
 
9233
9238
  constructor() {
9234
9239
  this._hasChat = true;
@@ -9237,6 +9242,7 @@ class Features {
9237
9242
  this._hasFax = true;
9238
9243
  this._hasMobileDoubleCall = true;
9239
9244
  this._hasMobileGsm = true;
9245
+ this._hasMeeting = true;
9240
9246
  }
9241
9247
 
9242
9248
  async fetchAccess() {
@@ -9257,6 +9263,7 @@ class Features {
9257
9263
  this._hasFax = this._hasFeatures(scopes, 'fax');
9258
9264
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
9259
9265
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
9266
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
9260
9267
  }
9261
9268
 
9262
9269
  hasChat() { return this._hasChat; }
@@ -9265,6 +9272,7 @@ class Features {
9265
9272
  hasFax() { return this._hasFax; }
9266
9273
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
9267
9274
  hasMobileGsm() { return this._hasMobileGsm; }
9275
+ hasMeeting() { return this._hasMeeting; }
9268
9276
 
9269
9277
  _hasFeatures(scopes , featureName ) {
9270
9278
  const scopeName = getScopeName(featureName);
@@ -10052,7 +10060,7 @@ class WebRTCPhone extends Emitter {
10052
10060
  const screenTrack = screenShareStream.getVideoTracks()[0];
10053
10061
  const sipSession = this.currentSipSession;
10054
10062
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
10055
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
10063
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
10056
10064
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
10057
10065
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
10058
10066
  const hadVideo = !!videoTrack;
@@ -10134,7 +10142,7 @@ class WebRTCPhone extends Emitter {
10134
10142
  const screenTrack = screenStream.getVideoTracks()[0];
10135
10143
  const sipSessionId = this.getSipSessionId(sipSession);
10136
10144
  const pc = this.client.getPeerConnection(sipSessionId);
10137
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
10145
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
10138
10146
 
10139
10147
  logger$7.info('WebRTC phone - on screensharing', {
10140
10148
  hadVideo,
@@ -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,
@@ -13389,7 +13393,7 @@ SwitchboardCall.STATE = {
13389
13393
 
13390
13394
  //
13391
13395
 
13392
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13396
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13393
13397
 
13394
13398
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13395
13399
 
@@ -13403,6 +13407,7 @@ class Features {
13403
13407
 
13404
13408
 
13405
13409
 
13410
+
13406
13411
 
13407
13412
  constructor() {
13408
13413
  this._hasChat = true;
@@ -13411,6 +13416,7 @@ class Features {
13411
13416
  this._hasFax = true;
13412
13417
  this._hasMobileDoubleCall = true;
13413
13418
  this._hasMobileGsm = true;
13419
+ this._hasMeeting = true;
13414
13420
  }
13415
13421
 
13416
13422
  async fetchAccess() {
@@ -13431,6 +13437,7 @@ class Features {
13431
13437
  this._hasFax = this._hasFeatures(scopes, 'fax');
13432
13438
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13433
13439
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13440
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13434
13441
  }
13435
13442
 
13436
13443
  hasChat() { return this._hasChat; }
@@ -13439,6 +13446,7 @@ class Features {
13439
13446
  hasFax() { return this._hasFax; }
13440
13447
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13441
13448
  hasMobileGsm() { return this._hasMobileGsm; }
13449
+ hasMeeting() { return this._hasMeeting; }
13442
13450
 
13443
13451
  _hasFeatures(scopes , featureName ) {
13444
13452
  const scopeName = getScopeName(featureName);
@@ -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,
@@ -13372,7 +13376,7 @@ SwitchboardCall.STATE = {
13372
13376
 
13373
13377
  //
13374
13378
 
13375
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13379
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13376
13380
 
13377
13381
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13378
13382
 
@@ -13386,6 +13390,7 @@ class Features {
13386
13390
 
13387
13391
 
13388
13392
 
13393
+
13389
13394
 
13390
13395
  constructor() {
13391
13396
  this._hasChat = true;
@@ -13394,6 +13399,7 @@ class Features {
13394
13399
  this._hasFax = true;
13395
13400
  this._hasMobileDoubleCall = true;
13396
13401
  this._hasMobileGsm = true;
13402
+ this._hasMeeting = true;
13397
13403
  }
13398
13404
 
13399
13405
  async fetchAccess() {
@@ -13414,6 +13420,7 @@ class Features {
13414
13420
  this._hasFax = this._hasFeatures(scopes, 'fax');
13415
13421
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13416
13422
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13423
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13417
13424
  }
13418
13425
 
13419
13426
  hasChat() { return this._hasChat; }
@@ -13422,6 +13429,7 @@ class Features {
13422
13429
  hasFax() { return this._hasFax; }
13423
13430
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13424
13431
  hasMobileGsm() { return this._hasMobileGsm; }
13432
+ hasMeeting() { return this._hasMeeting; }
13425
13433
 
13426
13434
  _hasFeatures(scopes , featureName ) {
13427
13435
  const scopeName = getScopeName(featureName);