@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
@@ -6965,7 +6965,7 @@ class WebRTCClient extends Emitter {
6965
6965
 
6966
6966
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
6967
6967
  } else {
6968
- videoSender = pc.getSenders().find(sender => sender.track === null);
6968
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
6969
6969
  }
6970
6970
 
6971
6971
  if (!videoSender) {
@@ -7006,9 +7006,11 @@ class WebRTCClient extends Emitter {
7006
7006
  const videoTracks = localStream.getVideoTracks();
7007
7007
 
7008
7008
  // Remove video senders
7009
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7010
- videoSender.replaceTrack(null);
7011
- });
7009
+ if (pc.getSenders) {
7010
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7011
+ videoSender.replaceTrack(null);
7012
+ });
7013
+ }
7012
7014
 
7013
7015
  videoTracks.forEach(videoTrack => {
7014
7016
  videoTrack.enabled = false;
@@ -7241,7 +7243,8 @@ class WebRTCClient extends Emitter {
7241
7243
  const constraints = { audio: { deviceId: { exact: deviceId } } };
7242
7244
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
7243
7245
  const audioTrack = stream.getAudioTracks()[0];
7244
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7246
+ const sender = pc && pc.getSenders
7247
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7245
7248
 
7246
7249
  if (sender) {
7247
7250
  if (sender.track) {
@@ -7304,10 +7307,11 @@ class WebRTCClient extends Emitter {
7304
7307
  // $FlowFixMe
7305
7308
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
7306
7309
  const videoTrack = stream.getVideoTracks()[0];
7307
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7310
+ let sender = pc && pc.getSenders
7311
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7308
7312
  let wasTrackEnabled = false;
7309
7313
  if (!sender) {
7310
- sender = pc && pc.getSenders().find(s => !s.track);
7314
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
7311
7315
  }
7312
7316
 
7313
7317
  if (sender) {
@@ -6965,7 +6965,7 @@ class WebRTCClient extends Emitter {
6965
6965
 
6966
6966
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
6967
6967
  } else {
6968
- videoSender = pc.getSenders().find(sender => sender.track === null);
6968
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
6969
6969
  }
6970
6970
 
6971
6971
  if (!videoSender) {
@@ -7006,9 +7006,11 @@ class WebRTCClient extends Emitter {
7006
7006
  const videoTracks = localStream.getVideoTracks();
7007
7007
 
7008
7008
  // Remove video senders
7009
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7010
- videoSender.replaceTrack(null);
7011
- });
7009
+ if (pc.getSenders) {
7010
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7011
+ videoSender.replaceTrack(null);
7012
+ });
7013
+ }
7012
7014
 
7013
7015
  videoTracks.forEach(videoTrack => {
7014
7016
  videoTrack.enabled = false;
@@ -7241,7 +7243,8 @@ class WebRTCClient extends Emitter {
7241
7243
  const constraints = { audio: { deviceId: { exact: deviceId } } };
7242
7244
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
7243
7245
  const audioTrack = stream.getAudioTracks()[0];
7244
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7246
+ const sender = pc && pc.getSenders
7247
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7245
7248
 
7246
7249
  if (sender) {
7247
7250
  if (sender.track) {
@@ -7304,10 +7307,11 @@ class WebRTCClient extends Emitter {
7304
7307
  // $FlowFixMe
7305
7308
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
7306
7309
  const videoTrack = stream.getVideoTracks()[0];
7307
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7310
+ let sender = pc && pc.getSenders
7311
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7308
7312
  let wasTrackEnabled = false;
7309
7313
  if (!sender) {
7310
- sender = pc && pc.getSenders().find(s => !s.track);
7314
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
7311
7315
  }
7312
7316
 
7313
7317
  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) {
@@ -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) {
@@ -4951,7 +4951,7 @@ var getApiClient = (forServer = null) => {
4951
4951
 
4952
4952
  //
4953
4953
 
4954
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
4954
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
4955
4955
 
4956
4956
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
4957
4957
 
@@ -4965,6 +4965,7 @@ class Features {
4965
4965
 
4966
4966
 
4967
4967
 
4968
+
4968
4969
 
4969
4970
  constructor() {
4970
4971
  this._hasChat = true;
@@ -4973,6 +4974,7 @@ class Features {
4973
4974
  this._hasFax = true;
4974
4975
  this._hasMobileDoubleCall = true;
4975
4976
  this._hasMobileGsm = true;
4977
+ this._hasMeeting = true;
4976
4978
  }
4977
4979
 
4978
4980
  async fetchAccess() {
@@ -4993,6 +4995,7 @@ class Features {
4993
4995
  this._hasFax = this._hasFeatures(scopes, 'fax');
4994
4996
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
4995
4997
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
4998
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
4996
4999
  }
4997
5000
 
4998
5001
  hasChat() { return this._hasChat; }
@@ -5001,6 +5004,7 @@ class Features {
5001
5004
  hasFax() { return this._hasFax; }
5002
5005
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
5003
5006
  hasMobileGsm() { return this._hasMobileGsm; }
5007
+ hasMeeting() { return this._hasMeeting; }
5004
5008
 
5005
5009
  _hasFeatures(scopes , featureName ) {
5006
5010
  const scopeName = getScopeName(featureName);
@@ -1405,7 +1405,7 @@ class WebRTCPhone extends Emitter {
1405
1405
  const screenTrack = screenShareStream.getVideoTracks()[0];
1406
1406
  const sipSession = this.currentSipSession;
1407
1407
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
1408
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
1408
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
1409
1409
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
1410
1410
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
1411
1411
  const hadVideo = !!videoTrack;
@@ -1487,7 +1487,7 @@ class WebRTCPhone extends Emitter {
1487
1487
  const screenTrack = screenStream.getVideoTracks()[0];
1488
1488
  const sipSessionId = this.getSipSessionId(sipSession);
1489
1489
  const pc = this.client.getPeerConnection(sipSessionId);
1490
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
1490
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
1491
1491
 
1492
1492
  logger.info('WebRTC phone - on screensharing', {
1493
1493
  hadVideo,
package/lib/index.js CHANGED
@@ -7283,7 +7283,7 @@ class WebRTCClient extends Emitter {
7283
7283
 
7284
7284
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7285
7285
  } else {
7286
- videoSender = pc.getSenders().find(sender => sender.track === null);
7286
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7287
7287
  }
7288
7288
 
7289
7289
  if (!videoSender) {
@@ -7324,9 +7324,11 @@ class WebRTCClient extends Emitter {
7324
7324
  const videoTracks = localStream.getVideoTracks();
7325
7325
 
7326
7326
  // Remove video senders
7327
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7328
- videoSender.replaceTrack(null);
7329
- });
7327
+ if (pc.getSenders) {
7328
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7329
+ videoSender.replaceTrack(null);
7330
+ });
7331
+ }
7330
7332
 
7331
7333
  videoTracks.forEach(videoTrack => {
7332
7334
  videoTrack.enabled = false;
@@ -7559,7 +7561,8 @@ class WebRTCClient extends Emitter {
7559
7561
  const constraints = { audio: { deviceId: { exact: deviceId } } };
7560
7562
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
7561
7563
  const audioTrack = stream.getAudioTracks()[0];
7562
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7564
+ const sender = pc && pc.getSenders
7565
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7563
7566
 
7564
7567
  if (sender) {
7565
7568
  if (sender.track) {
@@ -7622,10 +7625,11 @@ class WebRTCClient extends Emitter {
7622
7625
  // $FlowFixMe
7623
7626
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
7624
7627
  const videoTrack = stream.getVideoTracks()[0];
7625
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7628
+ let sender = pc && pc.getSenders
7629
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7626
7630
  let wasTrackEnabled = false;
7627
7631
  if (!sender) {
7628
- sender = pc && pc.getSenders().find(s => !s.track);
7632
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
7629
7633
  }
7630
7634
 
7631
7635
  if (sender) {
@@ -9226,7 +9230,7 @@ var COUNTRIES = {
9226
9230
 
9227
9231
  //
9228
9232
 
9229
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
9233
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
9230
9234
 
9231
9235
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
9232
9236
 
@@ -9240,6 +9244,7 @@ class Features {
9240
9244
 
9241
9245
 
9242
9246
 
9247
+
9243
9248
 
9244
9249
  constructor() {
9245
9250
  this._hasChat = true;
@@ -9248,6 +9253,7 @@ class Features {
9248
9253
  this._hasFax = true;
9249
9254
  this._hasMobileDoubleCall = true;
9250
9255
  this._hasMobileGsm = true;
9256
+ this._hasMeeting = true;
9251
9257
  }
9252
9258
 
9253
9259
  async fetchAccess() {
@@ -9268,6 +9274,7 @@ class Features {
9268
9274
  this._hasFax = this._hasFeatures(scopes, 'fax');
9269
9275
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
9270
9276
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
9277
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
9271
9278
  }
9272
9279
 
9273
9280
  hasChat() { return this._hasChat; }
@@ -9276,6 +9283,7 @@ class Features {
9276
9283
  hasFax() { return this._hasFax; }
9277
9284
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
9278
9285
  hasMobileGsm() { return this._hasMobileGsm; }
9286
+ hasMeeting() { return this._hasMeeting; }
9279
9287
 
9280
9288
  _hasFeatures(scopes , featureName ) {
9281
9289
  const scopeName = getScopeName(featureName);
@@ -10063,7 +10071,7 @@ class WebRTCPhone extends Emitter {
10063
10071
  const screenTrack = screenShareStream.getVideoTracks()[0];
10064
10072
  const sipSession = this.currentSipSession;
10065
10073
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
10066
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
10074
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
10067
10075
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
10068
10076
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
10069
10077
  const hadVideo = !!videoTrack;
@@ -10145,7 +10153,7 @@ class WebRTCPhone extends Emitter {
10145
10153
  const screenTrack = screenStream.getVideoTracks()[0];
10146
10154
  const sipSessionId = this.getSipSessionId(sipSession);
10147
10155
  const pc = this.client.getPeerConnection(sipSessionId);
10148
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
10156
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
10149
10157
 
10150
10158
  logger$7.info('WebRTC phone - on screensharing', {
10151
10159
  hadVideo,
@@ -7462,7 +7462,7 @@ class WebRTCClient extends Emitter {
7462
7462
 
7463
7463
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7464
7464
  } else {
7465
- videoSender = pc.getSenders().find(sender => sender.track === null);
7465
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7466
7466
  }
7467
7467
 
7468
7468
  if (!videoSender) {
@@ -7503,9 +7503,11 @@ class WebRTCClient extends Emitter {
7503
7503
  const videoTracks = localStream.getVideoTracks();
7504
7504
 
7505
7505
  // Remove video senders
7506
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7507
- videoSender.replaceTrack(null);
7508
- });
7506
+ if (pc.getSenders) {
7507
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7508
+ videoSender.replaceTrack(null);
7509
+ });
7510
+ }
7509
7511
 
7510
7512
  videoTracks.forEach(videoTrack => {
7511
7513
  videoTrack.enabled = false;
@@ -7738,7 +7740,8 @@ class WebRTCClient extends Emitter {
7738
7740
  const constraints = { audio: { deviceId: { exact: deviceId } } };
7739
7741
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
7740
7742
  const audioTrack = stream.getAudioTracks()[0];
7741
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7743
+ const sender = pc && pc.getSenders
7744
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7742
7745
 
7743
7746
  if (sender) {
7744
7747
  if (sender.track) {
@@ -7801,10 +7804,11 @@ class WebRTCClient extends Emitter {
7801
7804
  // $FlowFixMe
7802
7805
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
7803
7806
  const videoTrack = stream.getVideoTracks()[0];
7804
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7807
+ let sender = pc && pc.getSenders
7808
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7805
7809
  let wasTrackEnabled = false;
7806
7810
  if (!sender) {
7807
- sender = pc && pc.getSenders().find(s => !s.track);
7811
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
7808
7812
  }
7809
7813
 
7810
7814
  if (sender) {
@@ -9338,7 +9342,7 @@ class WebRTCPhone extends Emitter {
9338
9342
  const screenTrack = screenShareStream.getVideoTracks()[0];
9339
9343
  const sipSession = this.currentSipSession;
9340
9344
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9341
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9345
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9342
9346
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9343
9347
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9344
9348
  const hadVideo = !!videoTrack;
@@ -9420,7 +9424,7 @@ class WebRTCPhone extends Emitter {
9420
9424
  const screenTrack = screenStream.getVideoTracks()[0];
9421
9425
  const sipSessionId = this.getSipSessionId(sipSession);
9422
9426
  const pc = this.client.getPeerConnection(sipSessionId);
9423
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9427
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9424
9428
 
9425
9429
  logger$8.info('WebRTC phone - on screensharing', {
9426
9430
  hadVideo,
@@ -13401,7 +13405,7 @@ SwitchboardCall.STATE = {
13401
13405
 
13402
13406
  //
13403
13407
 
13404
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13408
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13405
13409
 
13406
13410
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13407
13411
 
@@ -13415,6 +13419,7 @@ class Features {
13415
13419
 
13416
13420
 
13417
13421
 
13422
+
13418
13423
 
13419
13424
  constructor() {
13420
13425
  this._hasChat = true;
@@ -13423,6 +13428,7 @@ class Features {
13423
13428
  this._hasFax = true;
13424
13429
  this._hasMobileDoubleCall = true;
13425
13430
  this._hasMobileGsm = true;
13431
+ this._hasMeeting = true;
13426
13432
  }
13427
13433
 
13428
13434
  async fetchAccess() {
@@ -13443,6 +13449,7 @@ class Features {
13443
13449
  this._hasFax = this._hasFeatures(scopes, 'fax');
13444
13450
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13445
13451
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13452
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13446
13453
  }
13447
13454
 
13448
13455
  hasChat() { return this._hasChat; }
@@ -13451,6 +13458,7 @@ class Features {
13451
13458
  hasFax() { return this._hasFax; }
13452
13459
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13453
13460
  hasMobileGsm() { return this._hasMobileGsm; }
13461
+ hasMeeting() { return this._hasMeeting; }
13454
13462
 
13455
13463
  _hasFeatures(scopes , featureName ) {
13456
13464
  const scopeName = getScopeName(featureName);
@@ -7460,7 +7460,7 @@ class WebRTCClient extends Emitter {
7460
7460
 
7461
7461
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7462
7462
  } else {
7463
- videoSender = pc.getSenders().find(sender => sender.track === null);
7463
+ videoSender = pc && pc.getSenders && pc.getSenders().find(sender => sender.track === null);
7464
7464
  }
7465
7465
 
7466
7466
  if (!videoSender) {
@@ -7501,9 +7501,11 @@ class WebRTCClient extends Emitter {
7501
7501
  const videoTracks = localStream.getVideoTracks();
7502
7502
 
7503
7503
  // Remove video senders
7504
- pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7505
- videoSender.replaceTrack(null);
7506
- });
7504
+ if (pc.getSenders) {
7505
+ pc.getSenders().filter(sender => sender.track && sender.track.kind === 'video').forEach(videoSender => {
7506
+ videoSender.replaceTrack(null);
7507
+ });
7508
+ }
7507
7509
 
7508
7510
  videoTracks.forEach(videoTrack => {
7509
7511
  videoTrack.enabled = false;
@@ -7736,7 +7738,8 @@ class WebRTCClient extends Emitter {
7736
7738
  const constraints = { audio: { deviceId: { exact: deviceId } } };
7737
7739
  const stream = await navigator.mediaDevices.getUserMedia(constraints);
7738
7740
  const audioTrack = stream.getAudioTracks()[0];
7739
- const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7741
+ const sender = pc && pc.getSenders
7742
+ && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
7740
7743
 
7741
7744
  if (sender) {
7742
7745
  if (sender.track) {
@@ -7799,10 +7802,11 @@ class WebRTCClient extends Emitter {
7799
7802
  // $FlowFixMe
7800
7803
  return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
7801
7804
  const videoTrack = stream.getVideoTracks()[0];
7802
- let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7805
+ let sender = pc && pc.getSenders
7806
+ && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
7803
7807
  let wasTrackEnabled = false;
7804
7808
  if (!sender) {
7805
- sender = pc && pc.getSenders().find(s => !s.track);
7809
+ sender = pc && pc.getSenders && pc.getSenders().find(s => !s.track);
7806
7810
  }
7807
7811
 
7808
7812
  if (sender) {
@@ -9336,7 +9340,7 @@ class WebRTCPhone extends Emitter {
9336
9340
  const screenTrack = screenShareStream.getVideoTracks()[0];
9337
9341
  const sipSession = this.currentSipSession;
9338
9342
  const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
9339
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9343
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9340
9344
  const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
9341
9345
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
9342
9346
  const hadVideo = !!videoTrack;
@@ -9418,7 +9422,7 @@ class WebRTCPhone extends Emitter {
9418
9422
  const screenTrack = screenStream.getVideoTracks()[0];
9419
9423
  const sipSessionId = this.getSipSessionId(sipSession);
9420
9424
  const pc = this.client.getPeerConnection(sipSessionId);
9421
- const sender = pc && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9425
+ const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
9422
9426
 
9423
9427
  logger$8.info('WebRTC phone - on screensharing', {
9424
9428
  hadVideo,
@@ -13382,7 +13386,7 @@ SwitchboardCall.STATE = {
13382
13386
 
13383
13387
  //
13384
13388
 
13385
- const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm'];
13389
+ const FEATURES = ['chat', 'video', 'call_recording', 'fax', 'mobile_double_call', 'mobile_gsm', 'meeting'];
13386
13390
 
13387
13391
  const getScopeName = (featureName ) => `enterprise.app.${featureName}`;
13388
13392
 
@@ -13396,6 +13400,7 @@ class Features {
13396
13400
 
13397
13401
 
13398
13402
 
13403
+
13399
13404
 
13400
13405
  constructor() {
13401
13406
  this._hasChat = true;
@@ -13404,6 +13409,7 @@ class Features {
13404
13409
  this._hasFax = true;
13405
13410
  this._hasMobileDoubleCall = true;
13406
13411
  this._hasMobileGsm = true;
13412
+ this._hasMeeting = true;
13407
13413
  }
13408
13414
 
13409
13415
  async fetchAccess() {
@@ -13424,6 +13430,7 @@ class Features {
13424
13430
  this._hasFax = this._hasFeatures(scopes, 'fax');
13425
13431
  this._hasMobileDoubleCall = this._hasFeatures(scopes, 'mobile_double_call');
13426
13432
  this._hasMobileGsm = this._hasFeatures(scopes, 'mobile_gsm');
13433
+ this._hasMeeting = this._hasFeatures(scopes, 'meeting');
13427
13434
  }
13428
13435
 
13429
13436
  hasChat() { return this._hasChat; }
@@ -13432,6 +13439,7 @@ class Features {
13432
13439
  hasFax() { return this._hasFax; }
13433
13440
  hasMobileDoubleCall() { return this._hasMobileDoubleCall; }
13434
13441
  hasMobileGsm() { return this._hasMobileGsm; }
13442
+ hasMeeting() { return this._hasMeeting; }
13435
13443
 
13436
13444
  _hasFeatures(scopes , featureName ) {
13437
13445
  const scopeName = getScopeName(featureName);