@webex/plugin-meetings 1.160.0 → 2.1.0

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.
@@ -34,10 +34,10 @@ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/
34
34
 
35
35
  var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
36
36
 
37
- var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
38
-
39
37
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
40
38
 
39
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
40
+
41
41
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
42
42
 
43
43
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
@@ -622,6 +622,25 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
622
622
  }
623
623
  }
624
624
  });
625
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "clearMeetingData", function () {
626
+ _this.audio = null;
627
+ _this.video = null;
628
+ _this.isSharing = false;
629
+
630
+ if (_this.shareStatus === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE) {
631
+ _this.shareStatus = _constants.SHARE_STATUS.NO_SHARE;
632
+ }
633
+
634
+ _this.queuedMediaUpdates = [];
635
+
636
+ if (_this.transcription) {
637
+ _this.transcription.closeSocket();
638
+
639
+ _this.triggerStopReceivingTranscriptionEvent();
640
+
641
+ _this.transcription = undefined;
642
+ }
643
+ });
625
644
  _this.attrs = attrs;
626
645
  /**
627
646
  * @instance
@@ -892,6 +911,17 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
892
911
  */
893
912
 
894
913
  _this.mediaConnections = null;
914
+ /**
915
+ * Fetching meeting info can be done randomly 2-5 mins before meeting start
916
+ * In case it is done before the timer expires, this timeout id is reset to cancel the timer.
917
+ * @instance
918
+ * @type {Number}
919
+ * @readonly
920
+ * @private
921
+ * @memberof Meeting
922
+ */
923
+
924
+ _this.fetchMeetingInfoTimeoutId = null;
895
925
  /**
896
926
  * Update the MediaConnections property with new information
897
927
  * @param {array} mediaConnections
@@ -1182,9 +1212,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1182
1212
  /**
1183
1213
  * Fetches meeting information.
1184
1214
  * @param {Object} options
1185
- * @param {String} options.destination
1186
- * @param {String} options.type
1187
- * @private
1215
+ * @param {String} [options.password] optional
1216
+ * @param {String} [options.captchaCode] optional
1217
+ * @public
1188
1218
  * @memberof Meeting
1189
1219
  * @returns {Promise}
1190
1220
  */
@@ -1202,33 +1232,39 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1202
1232
  case 0:
1203
1233
  _ref4$password = _ref4.password, password = _ref4$password === void 0 ? null : _ref4$password, _ref4$captchaCode = _ref4.captchaCode, captchaCode = _ref4$captchaCode === void 0 ? null : _ref4$captchaCode;
1204
1234
 
1235
+ // when fetch meeting info is called directly by the client, we want to clear out the random timer for sdk to do it
1236
+ if (this.fetchMeetingInfoTimeoutId) {
1237
+ clearTimeout(this.fetchMeetingInfoTimeoutId);
1238
+ this.fetchMeetingInfoTimeoutId = undefined;
1239
+ }
1240
+
1205
1241
  if (!(captchaCode && !this.requiredCaptcha)) {
1206
- _context.next = 3;
1242
+ _context.next = 4;
1207
1243
  break;
1208
1244
  }
1209
1245
 
1210
1246
  return _context.abrupt("return", _promise.default.reject(new Error('fetchMeetingInfo() called with captchaCode when captcha was not required')));
1211
1247
 
1212
- case 3:
1248
+ case 4:
1213
1249
  if (!(password && this.passwordStatus !== _constants.PASSWORD_STATUS.REQUIRED && this.passwordStatus !== _constants.PASSWORD_STATUS.UNKNOWN)) {
1214
- _context.next = 5;
1250
+ _context.next = 6;
1215
1251
  break;
1216
1252
  }
1217
1253
 
1218
1254
  return _context.abrupt("return", _promise.default.reject(new Error('fetchMeetingInfo() called with password when password was not required')));
1219
1255
 
1220
- case 5:
1221
- _context.prev = 5;
1256
+ case 6:
1257
+ _context.prev = 6;
1222
1258
  captchaInfo = captchaCode ? {
1223
1259
  code: captchaCode,
1224
1260
  id: this.requiredCaptcha.captchaId
1225
1261
  } : null;
1226
- _context.next = 9;
1262
+ _context.next = 10;
1227
1263
  return this.attrs.meetingInfoProvider.fetchMeetingInfo(this.destination, this.destinationType, password, captchaInfo);
1228
1264
 
1229
- case 9:
1265
+ case 10:
1230
1266
  info = _context.sent;
1231
- this.parseMeetingInfo(info);
1267
+ this.parseMeetingInfo(info, this.destination);
1232
1268
  this.meetingInfo = info ? info.body : null;
1233
1269
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.NONE;
1234
1270
  this.requiredCaptcha = null;
@@ -1239,14 +1275,19 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1239
1275
  this.passwordStatus = _constants.PASSWORD_STATUS.NOT_REQUIRED;
1240
1276
  }
1241
1277
 
1278
+ _triggerProxy.default.trigger(this, {
1279
+ file: 'meetings',
1280
+ function: 'fetchMeetingInfo'
1281
+ }, _constants.EVENT_TRIGGERS.MEETING_INFO_AVAILABLE);
1282
+
1242
1283
  return _context.abrupt("return", _promise.default.resolve());
1243
1284
 
1244
- case 18:
1245
- _context.prev = 18;
1246
- _context.t0 = _context["catch"](5);
1285
+ case 20:
1286
+ _context.prev = 20;
1287
+ _context.t0 = _context["catch"](6);
1247
1288
 
1248
1289
  if (!(_context.t0 instanceof _meetingInfoV.MeetingInfoV2PasswordError)) {
1249
- _context.next = 31;
1290
+ _context.next = 33;
1250
1291
  break;
1251
1292
  }
1252
1293
 
@@ -1262,19 +1303,19 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1262
1303
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;
1263
1304
 
1264
1305
  if (!this.requiredCaptcha) {
1265
- _context.next = 28;
1306
+ _context.next = 30;
1266
1307
  break;
1267
1308
  }
1268
1309
 
1269
- _context.next = 28;
1310
+ _context.next = 30;
1270
1311
  return this.refreshCaptcha();
1271
1312
 
1272
- case 28:
1313
+ case 30:
1273
1314
  throw new _passwordError.default();
1274
1315
 
1275
- case 31:
1316
+ case 33:
1276
1317
  if (!(_context.t0 instanceof _meetingInfoV.MeetingInfoV2CaptchaError)) {
1277
- _context.next = 39;
1318
+ _context.next = 41;
1278
1319
  break;
1279
1320
  }
1280
1321
 
@@ -1289,16 +1330,16 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1289
1330
  this.requiredCaptcha = _context.t0.captchaInfo;
1290
1331
  throw new _captchaError.default();
1291
1332
 
1292
- case 39:
1333
+ case 41:
1293
1334
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.OTHER;
1294
1335
  throw _context.t0;
1295
1336
 
1296
- case 41:
1337
+ case 43:
1297
1338
  case "end":
1298
1339
  return _context.stop();
1299
1340
  }
1300
1341
  }
1301
- }, _callee, this, [[5, 18]]);
1342
+ }, _callee, this, [[6, 20]]);
1302
1343
  }));
1303
1344
 
1304
1345
  function fetchMeetingInfo(_x) {
@@ -1818,6 +1859,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1818
1859
  * meeting:recording:stopped
1819
1860
  * meeting:recording:paused
1820
1861
  * meeting:recording:resumed
1862
+ *
1863
+ * Set up the locus info meeeting container listener
1864
+ * update meetingContainerUrl value for the meeting
1865
+ * notifies consumer with:
1866
+ * meeting:meetingContainer:update
1867
+ *
1821
1868
  * @returns {undefined}
1822
1869
  * @private
1823
1870
  * @memberof Meeting
@@ -1868,6 +1915,16 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1868
1915
  function: 'setupLocusControlsListener'
1869
1916
  }, event, _this11.recording);
1870
1917
  });
1918
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED, function (_ref6) {
1919
+ var meetingContainerUrl = _ref6.meetingContainerUrl;
1920
+
1921
+ _triggerProxy.default.trigger(_this11, {
1922
+ file: 'meeting/index',
1923
+ function: 'setupLocusControlsListener'
1924
+ }, _constants.EVENT_TRIGGERS.MEETING_MEETING_CONTAINER_UPDATE, {
1925
+ meetingContainerUrl: meetingContainerUrl
1926
+ });
1927
+ });
1871
1928
  }
1872
1929
  /**
1873
1930
  * Set up the locus info media shares listener
@@ -2688,6 +2745,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2688
2745
  * @param {String} meetingInfo.body.locusUrl
2689
2746
  * @param {String} meetingInfo.body.sipUri
2690
2747
  * @param {Object} meetingInfo.body.owner
2748
+ * @param {Object | String} destination locus object with meeting data or destination string (sip url, meeting link, etc)
2691
2749
  * @returns {undefined}
2692
2750
  * @private
2693
2751
  * @memberof Meeting
@@ -2696,20 +2754,32 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2696
2754
  }, {
2697
2755
  key: "parseMeetingInfo",
2698
2756
  value: function parseMeetingInfo(meetingInfo) {
2699
- var webexMeetingInfo = meetingInfo === null || meetingInfo === void 0 ? void 0 : meetingInfo.body; // MeetingInfo will be undefined for 1:1 calls
2757
+ var destination = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
2758
+ var webexMeetingInfo = meetingInfo === null || meetingInfo === void 0 ? void 0 : meetingInfo.body; // We try to use as much info from Locus meeting object, stored in destination
2700
2759
 
2701
- if (webexMeetingInfo && !(meetingInfo.errors && meetingInfo.errors.length > 0)) {
2702
- this.conversationUrl = webexMeetingInfo.conversationUrl || this.conversationUrl;
2703
- this.locusUrl = webexMeetingInfo.locusUrl || this.locusUrl;
2704
- this.setSipUri(this.config.experimental.enableUnifiedMeetings ? webexMeetingInfo.sipUrl : webexMeetingInfo.sipMeetingUri || this.sipUri);
2760
+ var locusMeetingObject;
2761
+
2762
+ if (destination) {
2763
+ locusMeetingObject = (0, _typeof2.default)(destination) === 'object' ? destination : undefined;
2764
+ } // MeetingInfo will be undefined for 1:1 calls
2765
+
2766
+
2767
+ if (locusMeetingObject || webexMeetingInfo && !(meetingInfo !== null && meetingInfo !== void 0 && meetingInfo.errors && (meetingInfo === null || meetingInfo === void 0 ? void 0 : meetingInfo.errors.length) > 0)) {
2768
+ var _locusMeetingObject, _locusMeetingObject2, _locusMeetingObject3, _locusMeetingObject4, _locusMeetingObject6;
2769
+
2770
+ this.conversationUrl = ((_locusMeetingObject = locusMeetingObject) === null || _locusMeetingObject === void 0 ? void 0 : _locusMeetingObject.conversationUrl) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.conversationUrl) || this.conversationUrl;
2771
+ this.locusUrl = ((_locusMeetingObject2 = locusMeetingObject) === null || _locusMeetingObject2 === void 0 ? void 0 : _locusMeetingObject2.url) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.locusUrl) || this.locusUrl;
2772
+ this.setSipUri(this.config.experimental.enableUnifiedMeetings ? ((_locusMeetingObject3 = locusMeetingObject) === null || _locusMeetingObject3 === void 0 ? void 0 : _locusMeetingObject3.info.sipUri) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.sipUrl) : ((_locusMeetingObject4 = locusMeetingObject) === null || _locusMeetingObject4 === void 0 ? void 0 : _locusMeetingObject4.info.sipUri) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.sipMeetingUri) || this.sipUri);
2705
2773
 
2706
2774
  if (this.config.experimental.enableUnifiedMeetings) {
2707
- this.meetingNumber = webexMeetingInfo.meetingNumber;
2708
- this.meetingJoinUrl = webexMeetingInfo.meetingJoinUrl;
2775
+ var _locusMeetingObject5;
2776
+
2777
+ this.meetingNumber = ((_locusMeetingObject5 = locusMeetingObject) === null || _locusMeetingObject5 === void 0 ? void 0 : _locusMeetingObject5.info.webExMeetingId) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.meetingNumber);
2778
+ this.meetingJoinUrl = webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.meetingJoinUrl;
2709
2779
  }
2710
2780
 
2711
- this.owner = webexMeetingInfo.owner || webexMeetingInfo.hostId || this.owner;
2712
- this.permissionToken = webexMeetingInfo.permissionToken;
2781
+ this.owner = ((_locusMeetingObject6 = locusMeetingObject) === null || _locusMeetingObject6 === void 0 ? void 0 : _locusMeetingObject6.info.owner) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.owner) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.hostId) || this.owner;
2782
+ this.permissionToken = webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.permissionToken;
2713
2783
  }
2714
2784
  }
2715
2785
  /**
@@ -3600,10 +3670,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3600
3670
  joinOptions = options.joinOptions,
3601
3671
  audioVideoOptions = options.audioVideoOptions;
3602
3672
  return this.join(joinOptions).then(function (joinResponse) {
3603
- return _this30.getMediaStreams(mediaSettings, audioVideoOptions).then(function (_ref6) {
3604
- var _ref7 = (0, _slicedToArray2.default)(_ref6, 2),
3605
- localStream = _ref7[0],
3606
- localShare = _ref7[1];
3673
+ return _this30.getMediaStreams(mediaSettings, audioVideoOptions).then(function (_ref7) {
3674
+ var _ref8 = (0, _slicedToArray2.default)(_ref7, 2),
3675
+ localStream = _ref8[0],
3676
+ localShare = _ref8[1];
3607
3677
 
3608
3678
  return _this30.addMedia({
3609
3679
  mediaSettings: mediaSettings,
@@ -3996,7 +4066,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3996
4066
 
3997
4067
  return join;
3998
4068
  }).then( /*#__PURE__*/function () {
3999
- var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(join) {
4069
+ var _ref9 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(join) {
4000
4070
  return _regenerator.default.wrap(function _callee3$(_context3) {
4001
4071
  while (1) {
4002
4072
  switch (_context3.prev = _context3.next) {
@@ -4041,7 +4111,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4041
4111
  }));
4042
4112
 
4043
4113
  return function (_x2) {
4044
- return _ref8.apply(this, arguments);
4114
+ return _ref9.apply(this, arguments);
4045
4115
  };
4046
4116
  }()).catch(function (error) {
4047
4117
  var _error$error;
@@ -4323,10 +4393,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4323
4393
  sendAudio: true,
4324
4394
  sendVideo: true,
4325
4395
  sendShare: false
4326
- }).then(function (_ref9) {
4327
- var _ref10 = (0, _slicedToArray2.default)(_ref9, 2),
4328
- localStream = _ref10[0],
4329
- localShare = _ref10[1];
4396
+ }).then(function (_ref10) {
4397
+ var _ref11 = (0, _slicedToArray2.default)(_ref10, 2),
4398
+ localStream = _ref11[0],
4399
+ localShare = _ref11[1];
4330
4400
 
4331
4401
  return _this38.updateMedia({
4332
4402
  mediaSettings: {
@@ -5103,23 +5173,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5103
5173
  return _util.default.leaveMeeting(this, options).then(function (leave) {
5104
5174
  _this47.meetingFiniteStateMachine.leave();
5105
5175
 
5106
- _this47.audio = null;
5107
- _this47.video = null;
5108
- _this47.isSharing = false;
5109
-
5110
- if (_this47.shareStatus === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE) {
5111
- _this47.shareStatus = _constants.SHARE_STATUS.NO_SHARE;
5112
- }
5113
-
5114
- _this47.queuedMediaUpdates = [];
5115
-
5116
- if (_this47.transcription) {
5117
- _this47.transcription.closeSocket();
5118
-
5119
- _this47.triggerStopReceivingTranscriptionEvent();
5120
-
5121
- _this47.transcription = undefined;
5122
- } // upload logs on leave irrespective of meeting delete
5176
+ _this47.clearMeetingData(); // upload logs on leave irrespective of meeting delete
5123
5177
 
5124
5178
 
5125
5179
  _triggerProxy.default.trigger(_this47, {
@@ -5628,9 +5682,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5628
5682
  sendVideo: this.mediaProperties.mediaDirection.sendVideo,
5629
5683
  sendShare: this.mediaProperties.mediaDirection.sendShare
5630
5684
  };
5631
- return this.getMediaStreams(mediaDirection, _constants.VIDEO_RESOLUTIONS[level]).then(function (_ref11) {
5632
- var _ref12 = (0, _slicedToArray2.default)(_ref11, 1),
5633
- localStream = _ref12[0];
5685
+ return this.getMediaStreams(mediaDirection, _constants.VIDEO_RESOLUTIONS[level]).then(function (_ref12) {
5686
+ var _ref13 = (0, _slicedToArray2.default)(_ref12, 1),
5687
+ localStream = _ref13[0];
5634
5688
 
5635
5689
  return _this53.updateVideo({
5636
5690
  sendVideo: true,
@@ -5846,9 +5900,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5846
5900
 
5847
5901
  }, {
5848
5902
  key: "handleMediaLogging",
5849
- value: function handleMediaLogging(_ref13) {
5850
- var audioTrack = _ref13.audioTrack,
5851
- videoTrack = _ref13.videoTrack;
5903
+ value: function handleMediaLogging(_ref14) {
5904
+ var audioTrack = _ref14.audioTrack,
5905
+ videoTrack = _ref14.videoTrack;
5852
5906
 
5853
5907
  _util.default.handleVideoLogging(videoTrack);
5854
5908
 
@@ -6053,6 +6107,75 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6053
6107
  var end = this.endJoinReqResp;
6054
6108
  return start && end ? end - start : undefined;
6055
6109
  }
6110
+ /**
6111
+ * End the current meeting for all
6112
+ * @returns {Promise}
6113
+ * @public
6114
+ * @memberof Meeting
6115
+ */
6116
+
6117
+ }, {
6118
+ key: "endMeetingForAll",
6119
+ value: function endMeetingForAll() {
6120
+ var _this56 = this;
6121
+
6122
+ _metrics.default.postEvent({
6123
+ event: _config.eventType.LEAVE,
6124
+ meeting: this,
6125
+ data: {
6126
+ trigger: _config.trigger.USER_INTERACTION,
6127
+ canProceed: false
6128
+ }
6129
+ });
6130
+
6131
+ _loggerProxy.default.logger.log('Meeting:index#endMeetingForAll --> End meeting for All');
6132
+
6133
+ _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_INITIATED, {
6134
+ correlation_id: this.correlationId,
6135
+ locus_id: this.locusId
6136
+ });
6137
+
6138
+ return _util.default.endMeetingForAll(this).then(function (end) {
6139
+ _this56.meetingFiniteStateMachine.end();
6140
+
6141
+ _this56.clearMeetingData(); // upload logs on leave irrespective of meeting delete
6142
+
6143
+
6144
+ _triggerProxy.default.trigger(_this56, {
6145
+ file: 'meeting/index',
6146
+ function: 'endMeetingForAll'
6147
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this56);
6148
+
6149
+ return end;
6150
+ }).catch(function (error) {
6151
+ _this56.meetingFiniteStateMachine.fail(error);
6152
+
6153
+ _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error); // upload logs on leave irrespective of meeting delete
6154
+
6155
+
6156
+ _triggerProxy.default.trigger(_this56, {
6157
+ file: 'meeting/index',
6158
+ function: 'endMeetingForAll'
6159
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this56);
6160
+
6161
+ _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
6162
+ correlation_id: _this56.correlationId,
6163
+ locus_id: _this56.locusUrl.split('/').pop(),
6164
+ reason: error.message,
6165
+ stack: error.stack,
6166
+ code: error.code
6167
+ });
6168
+
6169
+ return _promise.default.reject(error);
6170
+ });
6171
+ }
6172
+ /**
6173
+ * clear the meeting data
6174
+ * @returns {undefined}
6175
+ * @public
6176
+ * @memberof Meeting
6177
+ */
6178
+
6056
6179
  }]);
6057
6180
  return Meeting;
6058
6181
  }(_webexCore.StatelessWebexPlugin);