@webex/plugin-meetings 2.14.0 → 2.14.3

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.
@@ -1940,6 +1940,22 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1940
1940
  meetingContainerUrl: meetingContainerUrl
1941
1941
  });
1942
1942
  });
1943
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED, function (_ref7) {
1944
+ var caption = _ref7.caption,
1945
+ transcribing = _ref7.transcribing;
1946
+
1947
+ if (transcribing && _this11.transcription && _this11.config.receiveTranscription) {
1948
+ _this11.receiveTranscription();
1949
+ } else if (!transcribing && _this11.transcription) {
1950
+ _triggerProxy.default.trigger(_this11, {
1951
+ file: 'meeting/index',
1952
+ function: 'setupLocusControlsListener'
1953
+ }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_RECEIVING_TRANSCRIPTION, {
1954
+ caption: caption,
1955
+ transcribing: transcribing
1956
+ });
1957
+ }
1958
+ });
1943
1959
  }
1944
1960
  /**
1945
1961
  * Set up the locus info media shares listener
@@ -3265,9 +3281,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3265
3281
  return _media.default.stopTracks(videoTrack);
3266
3282
  }).then(function () {
3267
3283
  var audioStopped = audioTrack && audioTrack.readyState === _constants.ENDED;
3268
- var videoStopped = videoTrack && videoTrack.readyState === _constants.ENDED;
3284
+ var videoStopped = videoTrack && videoTrack.readyState === _constants.ENDED; // triggers event for audio and video stop , sometime either audio or video one of them exists
3269
3285
 
3270
- if (audioStopped && videoStopped) {
3286
+ if (audioStopped || videoStopped) {
3271
3287
  _triggerProxy.default.trigger(_this23, {
3272
3288
  file: 'meeting/index',
3273
3289
  function: 'closeLocalStream'
@@ -3275,7 +3291,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3275
3291
  type: _constants.EVENT_TYPES.LOCAL
3276
3292
  });
3277
3293
  } else if (audioTrack || videoTrack) {
3278
- _loggerProxy.default.logger.warn('Meeting:index#closeLocalStream --> Error: MediaStreamTrack.readyState is incorrect.');
3294
+ _loggerProxy.default.logger.warn('Meeting:index#closeLocalStream --> Warning: track might already been ended or unavaliable.');
3279
3295
  }
3280
3296
  });
3281
3297
  }
@@ -3666,10 +3682,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3666
3682
  joinOptions = options.joinOptions,
3667
3683
  audioVideoOptions = options.audioVideoOptions;
3668
3684
  return this.join(joinOptions).then(function (joinResponse) {
3669
- return _this30.getMediaStreams(mediaSettings, audioVideoOptions).then(function (_ref7) {
3670
- var _ref8 = (0, _slicedToArray2.default)(_ref7, 2),
3671
- localStream = _ref8[0],
3672
- localShare = _ref8[1];
3685
+ return _this30.getMediaStreams(mediaSettings, audioVideoOptions).then(function (_ref8) {
3686
+ var _ref9 = (0, _slicedToArray2.default)(_ref8, 2),
3687
+ localStream = _ref9[0],
3688
+ localShare = _ref9[1];
3673
3689
 
3674
3690
  return _this30.addMedia({
3675
3691
  mediaSettings: mediaSettings,
@@ -3785,9 +3801,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3785
3801
  }, {
3786
3802
  key: "isTranscriptionSupported",
3787
3803
  value: function isTranscriptionSupported() {
3788
- var _this$policy;
3804
+ var _this$locusInfo$contr;
3789
3805
 
3790
- if ((_this$policy = this.policy) !== null && _this$policy !== void 0 && _this$policy.WEBEX_ASSISTANT_STATUS_ACTIVE) {
3806
+ if ((_this$locusInfo$contr = this.locusInfo.controls.transcribe) !== null && _this$locusInfo$contr !== void 0 && _this$locusInfo$contr.transcribing) {
3791
3807
  return true;
3792
3808
  }
3793
3809
 
@@ -4062,7 +4078,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4062
4078
 
4063
4079
  return join;
4064
4080
  }).then( /*#__PURE__*/function () {
4065
- var _ref9 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(join) {
4081
+ var _ref10 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(join) {
4066
4082
  return _regenerator.default.wrap(function _callee3$(_context3) {
4067
4083
  while (1) {
4068
4084
  switch (_context3.prev = _context3.next) {
@@ -4107,7 +4123,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4107
4123
  }));
4108
4124
 
4109
4125
  return function (_x2) {
4110
- return _ref9.apply(this, arguments);
4126
+ return _ref10.apply(this, arguments);
4111
4127
  };
4112
4128
  }()).catch(function (error) {
4113
4129
  var _error$error;
@@ -4290,7 +4306,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4290
4306
  mediaCapabilities: {
4291
4307
  rx: {
4292
4308
  audio: false,
4293
- share: false,
4309
+ share: true,
4294
4310
  share_audio: false,
4295
4311
  video: false,
4296
4312
  whiteboard: false
@@ -4311,27 +4327,98 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4311
4327
  meeting: this
4312
4328
  });
4313
4329
 
4330
+ this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
4331
+ var mediaSettings;
4332
+ return _regenerator.default.wrap(function _callee4$(_context4) {
4333
+ while (1) {
4334
+ switch (_context4.prev = _context4.next) {
4335
+ case 0:
4336
+ _context4.prev = 0;
4337
+
4338
+ if (!_this37.isSharing) {
4339
+ _context4.next = 4;
4340
+ break;
4341
+ }
4342
+
4343
+ _context4.next = 4;
4344
+ return _this37.stopFloorRequest();
4345
+
4346
+ case 4:
4347
+ mediaSettings = {
4348
+ mediaDirection: {
4349
+ sendVideo: false,
4350
+ receiveVideo: false,
4351
+ sendAudio: false,
4352
+ receiveAudio: false,
4353
+ sendShare: false,
4354
+ receiveShare: true
4355
+ }
4356
+ }; // clean up the local tracks
4357
+
4358
+ _this37.mediaProperties.setMediaDirection(mediaSettings.mediaDirection); // close the existing local tracks
4359
+
4360
+
4361
+ _context4.next = 8;
4362
+ return _this37.closeLocalStream();
4363
+
4364
+ case 8:
4365
+ _context4.next = 10;
4366
+ return _this37.closeLocalShare();
4367
+
4368
+ case 10:
4369
+ _this37.mediaProperties.unsetMediaTracks(); // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the DX answers the meeting
4370
+ // once the DX answers we establish connection back the media server with only receiveShare enabled
4371
+
4372
+
4373
+ _context4.next = 13;
4374
+ return _this37.reconnectionManager.reconnectMedia(mediaSettings).then(function () {
4375
+ _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
4376
+ });
4377
+
4378
+ case 13:
4379
+ _context4.next = 19;
4380
+ break;
4381
+
4382
+ case 15:
4383
+ _context4.prev = 15;
4384
+ _context4.t0 = _context4["catch"](0);
4385
+
4386
+ _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context4.t0);
4387
+
4388
+ _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
4389
+ correlation_id: _this37.correlationId,
4390
+ locus_id: _this37.locusUrl.split('/').pop(),
4391
+ reason: _context4.t0.message,
4392
+ stack: _context4.t0.stack
4393
+ });
4394
+
4395
+ case 19:
4396
+ case "end":
4397
+ return _context4.stop();
4398
+ }
4399
+ }
4400
+ }, _callee4, null, [[0, 15]]);
4401
+ })));
4402
+
4403
+ _loggerProxy.default.logger.info('Meeting:index#moveTo --> Initated moved to using resourceId', resourceId);
4404
+
4314
4405
  return _util.default.joinMeetingOptions(this, {
4315
4406
  resourceId: resourceId,
4316
4407
  moveToResource: true
4317
4408
  }).then(function () {
4318
4409
  _this37.meetingFiniteStateMachine.join();
4319
-
4320
- return _this37.updateMedia({
4321
- mediaSettings: {
4322
- sendVideo: false,
4323
- receiveVideo: false,
4324
- sendAudio: false,
4325
- receiveAudio: false,
4326
- sendShare: false,
4327
- receiveShare: false
4328
- }
4329
- }).then(function () {
4330
- return _promise.default.resolve(_this37);
4331
- });
4332
4410
  }).catch(function (error) {
4333
4411
  _this37.meetingFiniteStateMachine.fail(error);
4334
4412
 
4413
+ _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
4414
+ correlation_id: _this37.correlationId,
4415
+ locus_id: _this37.locusUrl.split('/').pop(),
4416
+ reason: error.message,
4417
+ stack: error.stack
4418
+ });
4419
+
4420
+ _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
4421
+
4335
4422
  return _promise.default.reject(error);
4336
4423
  });
4337
4424
  }
@@ -4348,77 +4435,41 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4348
4435
  value: function moveFrom(resourceId) {
4349
4436
  var _this38 = this;
4350
4437
 
4438
+ // On moveFrom ask the developer to re capture it moveFrom then updateMedia
4351
4439
  if (!resourceId) {
4352
4440
  throw new _parameter.default('Cannot move call without a resourceId.');
4353
4441
  }
4354
4442
 
4355
4443
  var oldCorrelationId = this.correlationId;
4356
- this.id = _uuid.default.v4();
4357
- this.webex.meetings.meetingCollection.set(this);
4358
-
4359
- _metrics.default.postEvent({
4360
- event: _config.eventType.MEDIA_CAPABILITIES,
4361
- meeting: this,
4362
- data: {
4363
- mediaCapabilities: {
4364
- rx: {
4365
- audio: true,
4366
- share: true,
4367
- share_audio: true,
4368
- video: true,
4369
- whiteboard: true
4370
- },
4371
- tx: {
4372
- audio: true,
4373
- share: true,
4374
- share_audio: true,
4375
- video: true,
4376
- whiteboard: true
4377
- }
4378
- }
4379
- }
4380
- });
4381
4444
 
4382
4445
  _metrics.default.postEvent({
4383
4446
  event: _config.eventType.MOVE_MEDIA,
4384
4447
  meeting: this
4385
4448
  });
4386
4449
 
4387
- return _util.default.joinMeetingOptions(this).then(function (join) {
4388
- return _this38.getMediaStreams({
4389
- sendAudio: true,
4390
- sendVideo: true,
4391
- sendShare: false
4392
- }).then(function (_ref10) {
4393
- var _ref11 = (0, _slicedToArray2.default)(_ref10, 2),
4394
- localStream = _ref11[0],
4395
- localShare = _ref11[1];
4396
-
4397
- return _this38.updateMedia({
4398
- mediaSettings: {
4399
- sendAudio: true,
4400
- receiveAudio: true,
4401
- sendVideo: true,
4402
- receiveVideo: true,
4403
- sendShare: false,
4404
- receiveShare: false
4405
- },
4406
- localStream: localStream,
4407
- localShare: localShare
4408
- }).then(function () {
4409
- return _promise.default.resolve(join);
4410
- });
4450
+ return _util.default.joinMeetingOptions(this).then(function () {
4451
+ return _util.default.leaveMeeting(_this38, {
4452
+ resourceId: resourceId,
4453
+ correlationId: oldCorrelationId,
4454
+ moveMeeting: true
4411
4455
  }).then(function () {
4412
- return _util.default.leaveMeeting(_this38, {
4413
- resourceId: resourceId,
4414
- correlationId: oldCorrelationId,
4415
- moveMeeting: true
4416
- });
4456
+ _this38.resourceId = '';
4457
+
4458
+ _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
4417
4459
  });
4418
- }).then(function () {
4419
- _this38.webex.meetings.meetingCollection.delete(_this38.id);
4460
+ }).catch(function (error) {
4461
+ _this38.meetingFiniteStateMachine.fail(error);
4420
4462
 
4421
- return _promise.default.resolve();
4463
+ _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
4464
+ correlation_id: _this38.correlationId,
4465
+ locus_id: _this38.locusUrl.split('/').pop(),
4466
+ reason: error.message,
4467
+ stack: error.stack
4468
+ });
4469
+
4470
+ _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
4471
+
4472
+ return _promise.default.reject(error);
4422
4473
  });
4423
4474
  }
4424
4475
  /**
@@ -4824,20 +4875,20 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4824
4875
  }, {
4825
4876
  key: "updateAudio",
4826
4877
  value: function () {
4827
- var _updateAudio = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(options) {
4878
+ var _updateAudio = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(options) {
4828
4879
  var _this42 = this;
4829
4880
 
4830
4881
  var sendAudio, receiveAudio, stream, bnrEnabled, audioTransceiver, track;
4831
- return _regenerator.default.wrap(function _callee4$(_context4) {
4882
+ return _regenerator.default.wrap(function _callee5$(_context5) {
4832
4883
  while (1) {
4833
- switch (_context4.prev = _context4.next) {
4884
+ switch (_context5.prev = _context5.next) {
4834
4885
  case 0:
4835
4886
  if (this.canUpdateMedia()) {
4836
- _context4.next = 2;
4887
+ _context5.next = 2;
4837
4888
  break;
4838
4889
  }
4839
4890
 
4840
- return _context4.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.AUDIO, options));
4891
+ return _context5.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.AUDIO, options));
4841
4892
 
4842
4893
  case 2:
4843
4894
  sendAudio = options.sendAudio, receiveAudio = options.receiveAudio, stream = options.stream, bnrEnabled = options.bnrEnabled;
@@ -4845,30 +4896,30 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4845
4896
  track = _util.default.getTrack(stream).audioTrack;
4846
4897
 
4847
4898
  if (!(typeof sendAudio !== 'boolean' || typeof receiveAudio !== 'boolean')) {
4848
- _context4.next = 7;
4899
+ _context5.next = 7;
4849
4900
  break;
4850
4901
  }
4851
4902
 
4852
- return _context4.abrupt("return", _promise.default.reject(new _parameter.default('Pass sendAudio and receiveAudio parameter')));
4903
+ return _context5.abrupt("return", _promise.default.reject(new _parameter.default('Pass sendAudio and receiveAudio parameter')));
4853
4904
 
4854
4905
  case 7:
4855
4906
  if (!(sendAudio && !this.isAudioMuted() && (bnrEnabled === _constants.BNR_STATUS.ENABLED || bnrEnabled === _constants.BNR_STATUS.SHOULD_ENABLE))) {
4856
- _context4.next = 13;
4907
+ _context5.next = 13;
4857
4908
  break;
4858
4909
  }
4859
4910
 
4860
4911
  _loggerProxy.default.logger.info('Meeting:index#updateAudio. Calling WebRTC enable bnr method');
4861
4912
 
4862
- _context4.next = 11;
4913
+ _context5.next = 11;
4863
4914
  return this.internal_enableBNR(track);
4864
4915
 
4865
4916
  case 11:
4866
- track = _context4.sent;
4917
+ track = _context5.sent;
4867
4918
 
4868
4919
  _loggerProxy.default.logger.info('Meeting:index#updateAudio. WebRTC enable bnr request completed');
4869
4920
 
4870
4921
  case 13:
4871
- return _context4.abrupt("return", _util.default.validateOptions({
4922
+ return _context5.abrupt("return", _util.default.validateOptions({
4872
4923
  sendAudio: sendAudio,
4873
4924
  localStream: stream
4874
4925
  }).then(function () {
@@ -4908,10 +4959,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4908
4959
 
4909
4960
  case 14:
4910
4961
  case "end":
4911
- return _context4.stop();
4962
+ return _context5.stop();
4912
4963
  }
4913
4964
  }
4914
- }, _callee4, this);
4965
+ }, _callee5, this);
4915
4966
  }));
4916
4967
 
4917
4968
  function updateAudio(_x3) {
@@ -6237,40 +6288,40 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6237
6288
  }, {
6238
6289
  key: "internal_enableBNR",
6239
6290
  value: function () {
6240
- var _internal_enableBNR = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(audioTrack) {
6291
+ var _internal_enableBNR = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(audioTrack) {
6241
6292
  var bnrAudioTrack;
6242
- return _regenerator.default.wrap(function _callee5$(_context5) {
6293
+ return _regenerator.default.wrap(function _callee6$(_context6) {
6243
6294
  while (1) {
6244
- switch (_context5.prev = _context5.next) {
6295
+ switch (_context6.prev = _context6.next) {
6245
6296
  case 0:
6246
- _context5.prev = 0;
6297
+ _context6.prev = 0;
6247
6298
 
6248
6299
  _loggerProxy.default.logger.info('Meeting:index#internal_enableBNR. Internal enable BNR called');
6249
6300
 
6250
- _context5.next = 4;
6301
+ _context6.next = 4;
6251
6302
  return _internalMediaCore.Media.Effects.BNR.enableBNR(audioTrack);
6252
6303
 
6253
6304
  case 4:
6254
- bnrAudioTrack = _context5.sent;
6305
+ bnrAudioTrack = _context6.sent;
6255
6306
 
6256
6307
  _loggerProxy.default.logger.info('Meeting:index#internal_enableBNR. BNR enabled track obtained from WebRTC & returned as stream');
6257
6308
 
6258
- return _context5.abrupt("return", bnrAudioTrack);
6309
+ return _context6.abrupt("return", bnrAudioTrack);
6259
6310
 
6260
6311
  case 9:
6261
- _context5.prev = 9;
6262
- _context5.t0 = _context5["catch"](0);
6312
+ _context6.prev = 9;
6313
+ _context6.t0 = _context6["catch"](0);
6263
6314
 
6264
- _loggerProxy.default.logger.error('Meeting:index#internal_enableBNR.', _context5.t0);
6315
+ _loggerProxy.default.logger.error('Meeting:index#internal_enableBNR.', _context6.t0);
6265
6316
 
6266
- throw _context5.t0;
6317
+ throw _context6.t0;
6267
6318
 
6268
6319
  case 13:
6269
6320
  case "end":
6270
- return _context5.stop();
6321
+ return _context6.stop();
6271
6322
  }
6272
6323
  }
6273
- }, _callee5, null, [[0, 9]]);
6324
+ }, _callee6, null, [[0, 9]]);
6274
6325
  }));
6275
6326
 
6276
6327
  function internal_enableBNR(_x4) {