@webex/plugin-meetings 3.5.0 → 3.6.0-next.10

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 (83) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/common/errors/webinar-registration-error.js +50 -0
  4. package/dist/common/errors/webinar-registration-error.js.map +1 -0
  5. package/dist/config.js +4 -1
  6. package/dist/config.js.map +1 -1
  7. package/dist/constants.js +8 -0
  8. package/dist/constants.js.map +1 -1
  9. package/dist/index.js +7 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/interpretation/index.js +1 -1
  12. package/dist/interpretation/siLanguage.js +1 -1
  13. package/dist/locus-info/parser.js +5 -1
  14. package/dist/locus-info/parser.js.map +1 -1
  15. package/dist/media/index.js +3 -1
  16. package/dist/media/index.js.map +1 -1
  17. package/dist/meeting/in-meeting-actions.js +3 -1
  18. package/dist/meeting/in-meeting-actions.js.map +1 -1
  19. package/dist/meeting/index.js +185 -103
  20. package/dist/meeting/index.js.map +1 -1
  21. package/dist/meeting/muteState.js +5 -2
  22. package/dist/meeting/muteState.js.map +1 -1
  23. package/dist/meeting/util.js +8 -10
  24. package/dist/meeting/util.js.map +1 -1
  25. package/dist/meeting-info/meeting-info-v2.js +68 -17
  26. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  27. package/dist/meetings/index.js +102 -27
  28. package/dist/meetings/index.js.map +1 -1
  29. package/dist/metrics/constants.js +2 -1
  30. package/dist/metrics/constants.js.map +1 -1
  31. package/dist/multistream/remoteMedia.js +4 -0
  32. package/dist/multistream/remoteMedia.js.map +1 -1
  33. package/dist/roap/request.js +1 -1
  34. package/dist/roap/request.js.map +1 -1
  35. package/dist/types/common/errors/webinar-registration-error.d.ts +14 -0
  36. package/dist/types/config.d.ts +2 -0
  37. package/dist/types/constants.d.ts +8 -1
  38. package/dist/types/index.d.ts +2 -1
  39. package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
  40. package/dist/types/meeting/index.d.ts +11 -0
  41. package/dist/types/meeting/muteState.d.ts +2 -1
  42. package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
  43. package/dist/types/meetings/index.d.ts +43 -2
  44. package/dist/types/metrics/constants.d.ts +1 -0
  45. package/dist/types/multistream/remoteMedia.d.ts +1 -0
  46. package/dist/webinar/index.js +1 -1
  47. package/package.json +22 -22
  48. package/src/common/errors/webinar-registration-error.ts +27 -0
  49. package/src/config.ts +3 -0
  50. package/src/constants.ts +7 -0
  51. package/src/index.ts +2 -0
  52. package/src/locus-info/parser.ts +8 -1
  53. package/src/media/index.ts +4 -1
  54. package/src/meeting/in-meeting-actions.ts +3 -0
  55. package/src/meeting/index.ts +82 -13
  56. package/src/meeting/muteState.ts +6 -2
  57. package/src/meeting/util.ts +27 -31
  58. package/src/meeting-info/meeting-info-v2.ts +51 -0
  59. package/src/meetings/index.ts +129 -38
  60. package/src/metrics/constants.ts +1 -0
  61. package/src/multistream/remoteMedia.ts +5 -0
  62. package/src/roap/request.ts +3 -1
  63. package/test/unit/spec/locus-info/index.js +29 -0
  64. package/test/unit/spec/media/index.ts +4 -0
  65. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
  66. package/test/unit/spec/meeting/index.js +118 -18
  67. package/test/unit/spec/meeting/muteState.js +8 -4
  68. package/test/unit/spec/meeting/utils.js +50 -85
  69. package/test/unit/spec/meeting-info/meetinginfov2.js +37 -0
  70. package/test/unit/spec/meetings/index.js +128 -13
  71. package/test/unit/spec/multistream/remoteMedia.ts +16 -2
  72. package/dist/networkQualityMonitor/index.js +0 -227
  73. package/dist/networkQualityMonitor/index.js.map +0 -1
  74. package/dist/rtcMetrics/constants.js +0 -11
  75. package/dist/rtcMetrics/constants.js.map +0 -1
  76. package/dist/rtcMetrics/index.js +0 -197
  77. package/dist/rtcMetrics/index.js.map +0 -1
  78. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  79. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  80. package/dist/types/rtcMetrics/index.d.ts +0 -71
  81. package/src/rtcMetrics/constants.ts +0 -3
  82. package/src/rtcMetrics/index.ts +0 -186
  83. package/test/unit/spec/rtcMetrics/index.ts +0 -154
@@ -86,7 +86,7 @@ var _controlsOptionsManager = _interopRequireDefault(require("../controls-option
86
86
  var _permission = _interopRequireDefault(require("../common/errors/permission"));
87
87
  var _locusMediaRequest = require("./locusMediaRequest");
88
88
  var _connectionStateHandler = require("./connectionStateHandler");
89
- var _rtcMetrics = _interopRequireDefault(require("../rtcMetrics"));
89
+ var _webinarRegistrationError = _interopRequireDefault(require("../common/errors/webinar-registration-error"));
90
90
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && o[_Symbol$iterator] || o["@@iterator"]; if (!it) { if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
91
91
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
92
92
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
@@ -381,7 +381,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
381
381
  * @memberof Meeting
382
382
  */
383
383
  function Meeting(attrs, _options) {
384
- var _attrs$callStateForMe, _this$locusInfo, _this$locusInfo$links, _this$locusInfo$links2, _this$locusInfo$links3, _this$locusInfo2, _this$locusInfo2$full, _this$locusInfo3, _this$locusInfo4;
384
+ var _attrs$callStateForMe, _attrs$callStateForMe2, _this$locusInfo, _this$locusInfo$links, _this$locusInfo$links2, _this$locusInfo$links3, _this$locusInfo2, _this$locusInfo2$full, _this$locusInfo3, _this$locusInfo4;
385
385
  var _this;
386
386
  (0, _classCallCheck2.default)(this, Meeting);
387
387
  _this = _super.call(this, {}, _options);
@@ -1219,31 +1219,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1219
1219
  return _regenerator.default.wrap(function _callee2$(_context2) {
1220
1220
  while (1) switch (_context2.prev = _context2.next) {
1221
1221
  case 0:
1222
+ _loggerProxy.default.logger.info("Meeting:index#handleShareAudioStreamEnded --> audio share stream ended");
1223
+ // current share audio stream has ended, but there might be an active
1224
+ // share video stream. we only leave from wireless share if share has
1225
+ // completely ended, which means no share audio or video streams active
1222
1226
  if (!(_this.wirelessShare && !_this.mediaProperties.shareVideoStream)) {
1223
- _context2.next = 4;
1227
+ _context2.next = 5;
1224
1228
  break;
1225
1229
  }
1226
1230
  _this.leave({
1227
1231
  reason: _constants.MEETING_REMOVED_REASON.USER_ENDED_SHARE_STREAMS
1228
1232
  });
1229
- _context2.next = 12;
1233
+ _context2.next = 13;
1230
1234
  break;
1231
- case 4:
1232
- _context2.prev = 4;
1233
- _context2.next = 7;
1235
+ case 5:
1236
+ _context2.prev = 5;
1237
+ _context2.next = 8;
1234
1238
  return _this.unpublishStreams([_this.mediaProperties.shareAudioStream]);
1235
- case 7:
1236
- _context2.next = 12;
1239
+ case 8:
1240
+ _context2.next = 13;
1237
1241
  break;
1238
- case 9:
1239
- _context2.prev = 9;
1240
- _context2.t0 = _context2["catch"](4);
1242
+ case 10:
1243
+ _context2.prev = 10;
1244
+ _context2.t0 = _context2["catch"](5);
1241
1245
  _loggerProxy.default.logger.log('Meeting:index#handleShareAudioStreamEnded --> Error stopping share: ', _context2.t0);
1242
- case 12:
1246
+ case 13:
1243
1247
  case "end":
1244
1248
  return _context2.stop();
1245
1249
  }
1246
- }, _callee2, null, [[4, 9]]);
1250
+ }, _callee2, null, [[5, 10]]);
1247
1251
  })));
1248
1252
  /**
1249
1253
  * Functionality for when a share video is muted or unmuted.
@@ -1271,33 +1275,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1271
1275
  return _regenerator.default.wrap(function _callee3$(_context3) {
1272
1276
  while (1) switch (_context3.prev = _context3.next) {
1273
1277
  case 0:
1278
+ _loggerProxy.default.logger.info("Meeting:index#handleShareVideoStreamEnded --> video share stream ended");
1279
+ // current share video stream has ended, but there might be an active
1280
+ // share audio stream. we only leave from wireless share if share has
1281
+ // completely ended, which means no share audio or video streams active
1274
1282
  if (!(_this.wirelessShare && !_this.mediaProperties.shareAudioStream)) {
1275
- _context3.next = 4;
1283
+ _context3.next = 5;
1276
1284
  break;
1277
1285
  }
1278
1286
  _this.leave({
1279
1287
  reason: _constants.MEETING_REMOVED_REASON.USER_ENDED_SHARE_STREAMS
1280
1288
  });
1281
- _context3.next = 12;
1289
+ _context3.next = 13;
1282
1290
  break;
1283
- case 4:
1284
- _context3.prev = 4;
1285
- _context3.next = 7;
1291
+ case 5:
1292
+ _context3.prev = 5;
1293
+ _context3.next = 8;
1286
1294
  return _this.unpublishStreams([_this.mediaProperties.shareVideoStream]);
1287
- case 7:
1288
- _context3.next = 12;
1295
+ case 8:
1296
+ _context3.next = 13;
1289
1297
  break;
1290
- case 9:
1291
- _context3.prev = 9;
1292
- _context3.t0 = _context3["catch"](4);
1298
+ case 10:
1299
+ _context3.prev = 10;
1300
+ _context3.t0 = _context3["catch"](5);
1293
1301
  _loggerProxy.default.logger.log('Meeting:index#handleShareVideoStreamEnded --> Error stopping share: ', _context3.t0);
1294
- case 12:
1295
- _this.triggerStoppedSharing();
1296
1302
  case 13:
1303
+ _this.triggerStoppedSharing();
1304
+ case 14:
1297
1305
  case "end":
1298
1306
  return _context3.stop();
1299
1307
  }
1300
- }, _callee3, null, [[4, 9]]);
1308
+ }, _callee3, null, [[5, 10]]);
1301
1309
  })));
1302
1310
  /**
1303
1311
  * Emits meeting:stoppedSharingLocal
@@ -1410,10 +1418,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1410
1418
  */
1411
1419
  _this.callStateForMetrics = attrs.callStateForMetrics || {};
1412
1420
  var _correlationId = attrs.correlationId || ((_attrs$callStateForMe = attrs.callStateForMetrics) === null || _attrs$callStateForMe === void 0 ? void 0 : _attrs$callStateForMe.correlationId);
1421
+ var sessionCorrelationId = attrs.sessionCorrelationId || ((_attrs$callStateForMe2 = attrs.callStateForMetrics) === null || _attrs$callStateForMe2 === void 0 ? void 0 : _attrs$callStateForMe2.sessionCorrelationId);
1422
+ if (sessionCorrelationId) {
1423
+ _loggerProxy.default.logger.log("Meetings:index#constructor --> Initializing the meeting object with session correlation id from app ".concat(_correlationId));
1424
+ _this.callStateForMetrics.sessionCorrelationId = sessionCorrelationId;
1425
+ } else {
1426
+ _loggerProxy.default.logger.log("Meetings:index#constructor --> No session correlation id supplied. None will be generated and this field will remain blank");
1427
+ // TODO: supply a session from the meetings instance
1428
+ _this.callStateForMetrics.sessionCorrelationId = '';
1429
+ }
1413
1430
  if (_correlationId) {
1414
1431
  _loggerProxy.default.logger.log("Meetings:index#constructor --> Initializing the meeting object with correlation id from app ".concat(_correlationId));
1415
1432
  _this.callStateForMetrics.correlationId = _correlationId;
1416
1433
  } else {
1434
+ _loggerProxy.default.logger.log("Meetings:index#constructor --> Initializing the meeting object with generated correlation id from sdk ".concat(_this.id));
1417
1435
  _this.callStateForMetrics.correlationId = _this.id;
1418
1436
  }
1419
1437
  /**
@@ -2236,6 +2254,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2236
2254
  this.callStateForMetrics.correlationId = correlationId;
2237
2255
  }
2238
2256
 
2257
+ /**
2258
+ * Getter - Returns callStateForMetrics.sessionCorrelationId
2259
+ * @returns {string}
2260
+ */
2261
+ }, {
2262
+ key: "sessionCorrelationId",
2263
+ get: function get() {
2264
+ return this.callStateForMetrics.sessionCorrelationId;
2265
+ }
2266
+
2267
+ /**
2268
+ * Setter - sets callStateForMetrics.sessionCorrelationId
2269
+ * @param {string} sessionCorrelationId
2270
+ */,
2271
+ set: function set(sessionCorrelationId) {
2272
+ this.callStateForMetrics.sessionCorrelationId = sessionCorrelationId;
2273
+ }
2274
+
2239
2275
  /**
2240
2276
  * Getter - Returns isoLocalClientMeetingJoinTime
2241
2277
  * This will be set once on meeting join, and not updated again
@@ -2386,8 +2422,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2386
2422
  }
2387
2423
  throw new _permission.default();
2388
2424
  case 21:
2425
+ if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2WebinarRegistrationError)) {
2426
+ _context5.next = 28;
2427
+ break;
2428
+ }
2429
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WEBINAR_REGISTRATION;
2430
+ this.meetingInfoFailureCode = _context5.t0.wbxAppApiCode;
2431
+ if (_context5.t0.meetingInfo) {
2432
+ this.meetingInfo = _context5.t0.meetingInfo;
2433
+ }
2434
+ throw new _webinarRegistrationError.default();
2435
+ case 28:
2389
2436
  if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2PasswordError)) {
2390
- _context5.next = 33;
2437
+ _context5.next = 40;
2391
2438
  break;
2392
2439
  }
2393
2440
  _loggerProxy.default.logger.info( // @ts-ignore
@@ -2402,16 +2449,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2402
2449
  this.passwordStatus = _constants.PASSWORD_STATUS.REQUIRED;
2403
2450
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;
2404
2451
  if (!this.requiredCaptcha) {
2405
- _context5.next = 30;
2452
+ _context5.next = 37;
2406
2453
  break;
2407
2454
  }
2408
- _context5.next = 30;
2455
+ _context5.next = 37;
2409
2456
  return this.refreshCaptcha();
2410
- case 30:
2457
+ case 37:
2411
2458
  throw new _passwordError.default();
2412
- case 33:
2459
+ case 40:
2413
2460
  if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2CaptchaError)) {
2414
- _context5.next = 42;
2461
+ _context5.next = 49;
2415
2462
  break;
2416
2463
  }
2417
2464
  _loggerProxy.default.logger.info( // @ts-ignore
@@ -2423,10 +2470,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2423
2470
  }
2424
2471
  this.requiredCaptcha = _context5.t0.captchaInfo;
2425
2472
  throw new _captchaError.default();
2426
- case 42:
2473
+ case 49:
2427
2474
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.OTHER;
2428
2475
  throw _context5.t0;
2429
- case 44:
2476
+ case 51:
2430
2477
  case "end":
2431
2478
  return _context5.stop();
2432
2479
  }
@@ -3261,8 +3308,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3261
3308
  else if ((previousContentShare && contentShare.disposition === _constants.FLOOR_ACTION.RELEASED || contentShare.disposition === null) && (previousWhiteboardShare && whiteboardShare.disposition === _constants.FLOOR_ACTION.RELEASED || whiteboardShare.disposition === null)) {
3262
3309
  newShareStatus = _constants.SHARE_STATUS.NO_SHARE;
3263
3310
  }
3311
+ _loggerProxy.default.logger.info("Meeting:index#setUpLocusInfoMediaInactiveListener --> this.shareStatus=".concat(_this14.shareStatus, " newShareStatus=").concat(newShareStatus));
3264
3312
  if (!(newShareStatus !== _this14.shareStatus)) {
3265
- _context8.next = 45;
3313
+ _context8.next = 46;
3266
3314
  break;
3267
3315
  }
3268
3316
  oldShareStatus = _this14.shareStatus; // update our state before we send out any notifications
@@ -3270,37 +3318,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3270
3318
 
3271
3319
  // send out "stop" notifications for the old state
3272
3320
  _context8.t0 = oldShareStatus;
3273
- _context8.next = _context8.t0 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 14 : _context8.t0 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 16 : _context8.t0 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 18 : _context8.t0 === _constants.SHARE_STATUS.NO_SHARE ? 20 : 21;
3321
+ _context8.next = _context8.t0 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 15 : _context8.t0 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 17 : _context8.t0 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 19 : _context8.t0 === _constants.SHARE_STATUS.NO_SHARE ? 21 : 22;
3274
3322
  break;
3275
- case 14:
3323
+ case 15:
3276
3324
  _triggerProxy.default.trigger(_this14, {
3277
3325
  file: 'meetings/index',
3278
3326
  function: 'remoteShare'
3279
3327
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_REMOTE);
3280
- return _context8.abrupt("break", 22);
3281
- case 16:
3328
+ return _context8.abrupt("break", 23);
3329
+ case 17:
3282
3330
  _triggerProxy.default.trigger(_this14, {
3283
3331
  file: 'meeting/index',
3284
3332
  function: 'localShare'
3285
3333
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL, {
3286
3334
  reason: _constants.SHARE_STOPPED_REASON.SELF_STOPPED
3287
3335
  });
3288
- return _context8.abrupt("break", 22);
3289
- case 18:
3336
+ return _context8.abrupt("break", 23);
3337
+ case 19:
3290
3338
  _triggerProxy.default.trigger(_this14, {
3291
3339
  file: 'meeting/index',
3292
3340
  function: 'stopWhiteboardShare'
3293
3341
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_WHITEBOARD);
3294
- return _context8.abrupt("break", 22);
3295
- case 20:
3296
- return _context8.abrupt("break", 22);
3342
+ return _context8.abrupt("break", 23);
3297
3343
  case 21:
3298
- return _context8.abrupt("break", 22);
3344
+ return _context8.abrupt("break", 23);
3299
3345
  case 22:
3346
+ return _context8.abrupt("break", 23);
3347
+ case 23:
3300
3348
  _context8.t1 = newShareStatus;
3301
- _context8.next = _context8.t1 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 25 : _context8.t1 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 34 : _context8.t1 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 37 : _context8.t1 === _constants.SHARE_STATUS.NO_SHARE ? 40 : 41;
3349
+ _context8.next = _context8.t1 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 26 : _context8.t1 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 35 : _context8.t1 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 38 : _context8.t1 === _constants.SHARE_STATUS.NO_SHARE ? 41 : 42;
3302
3350
  break;
3303
- case 25:
3351
+ case 26:
3304
3352
  sendStartedSharingRemote = function sendStartedSharingRemote() {
3305
3353
  _this14.remoteShareInstanceId = contentShare.shareInstanceId;
3306
3354
  _triggerProxy.default.trigger(_this14, {
@@ -3314,20 +3362,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3314
3362
  resourceType: contentShare.resourceType
3315
3363
  });
3316
3364
  };
3317
- _context8.prev = 26;
3365
+ _context8.prev = 27;
3318
3366
  if (!((_this14$mediaProperti = _this14.mediaProperties.mediaDirection) !== null && _this14$mediaProperti !== void 0 && _this14$mediaProperti.sendShare && oldShareStatus === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE)) {
3319
- _context8.next = 30;
3367
+ _context8.next = 31;
3320
3368
  break;
3321
3369
  }
3322
- _context8.next = 30;
3370
+ _context8.next = 31;
3323
3371
  return _this14.unpublishStreams([_this14.mediaProperties.shareVideoStream, _this14.mediaProperties.shareAudioStream]);
3324
- case 30:
3325
- _context8.prev = 30;
3372
+ case 31:
3373
+ _context8.prev = 31;
3326
3374
  sendStartedSharingRemote();
3327
- return _context8.finish(30);
3328
- case 33:
3329
- return _context8.abrupt("break", 42);
3375
+ return _context8.finish(31);
3330
3376
  case 34:
3377
+ return _context8.abrupt("break", 43);
3378
+ case 35:
3331
3379
  _triggerProxy.default.trigger(_this14, {
3332
3380
  file: 'meeting/index',
3333
3381
  function: 'share'
@@ -3343,8 +3391,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3343
3391
  meetingId: _this14.id
3344
3392
  }
3345
3393
  });
3346
- return _context8.abrupt("break", 42);
3347
- case 37:
3394
+ return _context8.abrupt("break", 43);
3395
+ case 38:
3348
3396
  _triggerProxy.default.trigger(_this14, {
3349
3397
  file: 'meeting/index',
3350
3398
  function: 'startWhiteboardShare'
@@ -3362,16 +3410,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3362
3410
  meetingId: _this14.id
3363
3411
  }
3364
3412
  });
3365
- return _context8.abrupt("break", 42);
3366
- case 40:
3367
- return _context8.abrupt("break", 42);
3413
+ return _context8.abrupt("break", 43);
3368
3414
  case 41:
3369
- return _context8.abrupt("break", 42);
3415
+ return _context8.abrupt("break", 43);
3370
3416
  case 42:
3417
+ return _context8.abrupt("break", 43);
3418
+ case 43:
3371
3419
  _this14.members.locusMediaSharesUpdate(payload);
3372
- _context8.next = 46;
3420
+ _context8.next = 47;
3373
3421
  break;
3374
- case 45:
3422
+ case 46:
3375
3423
  if (newShareStatus === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE) {
3376
3424
  // if we got here, then some remote participant has stolen
3377
3425
  // the presentation from another remote participant
@@ -3409,11 +3457,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3409
3457
  });
3410
3458
  _this14.members.locusMediaSharesUpdate(payload);
3411
3459
  }
3412
- case 46:
3460
+ case 47:
3413
3461
  case "end":
3414
3462
  return _context8.stop();
3415
3463
  }
3416
- }, _callee8, null, [[26,, 30, 33]]);
3464
+ }, _callee8, null, [[27,, 31, 34]]);
3417
3465
  }));
3418
3466
  return function (_x8) {
3419
3467
  return _ref23.apply(this, arguments);
@@ -3570,7 +3618,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3570
3618
  var _this19 = this;
3571
3619
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED, function (payload) {
3572
3620
  if (_this19.audio) {
3573
- _this19.audio.handleServerLocalUnmuteRequired(_this19);
3621
+ _this19.audio.handleServerLocalUnmuteRequired(_this19, payload.unmuteAllowed);
3574
3622
  _triggerProxy.default.trigger(_this19, {
3575
3623
  file: 'meeting/index',
3576
3624
  function: 'setUpLocusInfoSelfListener'
@@ -4223,6 +4271,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4223
4271
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_CHAT],
4224
4272
  policies: this.selfUserPolicies
4225
4273
  }),
4274
+ canPollingAndQA: _util5.default.hasPolicies({
4275
+ requiredPolicies: [_constants.SELF_POLICY.SUPPORT_POLLING_AND_QA],
4276
+ policies: this.selfUserPolicies
4277
+ }),
4226
4278
  canShareApplication: _util5.default.hasHints({
4227
4279
  requiredHints: [_constants.DISPLAY_HINTS.SHARE_APPLICATION],
4228
4280
  displayHints: this.userDisplayHints
@@ -6110,7 +6162,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6110
6162
  case 0:
6111
6163
  this.rtcMetrics = this.isMultistream ?
6112
6164
  // @ts-ignore
6113
- new _rtcMetrics.default(this.webex, this.id, this.correlationId) : undefined;
6165
+ new _internalPluginMetrics.RtcMetrics(this.webex, {
6166
+ meetingId: this.id
6167
+ }, this.correlationId) : undefined;
6114
6168
  mc = _media.default.createMediaConnection(this.isMultistream, this.getMediaConnectionDebugId(), this.id, {
6115
6169
  rtcMetrics: this.rtcMetrics,
6116
6170
  mediaProperties: this.mediaProperties,
@@ -6120,7 +6174,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6120
6174
  // @ts-ignore - config coming from registerPlugin
6121
6175
  enableExtmap: this.config.enableExtmap,
6122
6176
  turnServerInfo: turnServerInfo,
6123
- bundlePolicy: bundlePolicy
6177
+ bundlePolicy: bundlePolicy,
6178
+ // @ts-ignore - config coming from registerPlugin
6179
+ iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout
6124
6180
  });
6125
6181
  this.mediaProperties.setMediaPeerConnection(mc);
6126
6182
  this.setupMediaConnectionListeners();
@@ -8363,66 +8419,91 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8363
8419
  key: "publishStreams",
8364
8420
  value: (function () {
8365
8421
  var _publishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee37(streams) {
8366
- var _streams$screenShare, _streams$screenShare2, _streams$microphone, _streams$camera, _streams$screenShare3, _streams$screenShare4, _streams$screenShare5, _streams$screenShare6, _streams$screenShare7, _streams$screenShare8;
8367
- var floorRequestNeeded, _streams$screenShare9;
8422
+ var _streams$screenShare, _streams$screenShare2, _streams$screenShare3, _streams$screenShare4, _streams$screenShare5, _streams$screenShare6;
8423
+ var streamChecks, _i, _streamChecks, _streamChecks$_i, stream, name, floorRequestNeeded, _streams$screenShare7;
8368
8424
  return _regenerator.default.wrap(function _callee37$(_context37) {
8369
8425
  while (1) switch (_context37.prev = _context37.next) {
8370
8426
  case 0:
8427
+ _loggerProxy.default.logger.info("Meeting:index#publishStreams --> called with: ".concat((0, _stringify.default)(streams)));
8371
8428
  this.checkMediaConnection();
8372
8429
  if (!(!streams.microphone && !streams.camera && !((_streams$screenShare = streams.screenShare) !== null && _streams$screenShare !== void 0 && _streams$screenShare.audio) && !((_streams$screenShare2 = streams.screenShare) !== null && _streams$screenShare2 !== void 0 && _streams$screenShare2.video))) {
8373
- _context37.next = 3;
8430
+ _context37.next = 4;
8374
8431
  break;
8375
8432
  }
8376
8433
  return _context37.abrupt("return");
8377
- case 3:
8378
- if (!((streams === null || streams === void 0 ? void 0 : (_streams$microphone = streams.microphone) === null || _streams$microphone === void 0 ? void 0 : _streams$microphone.readyState) === 'ended' || (streams === null || streams === void 0 ? void 0 : (_streams$camera = streams.camera) === null || _streams$camera === void 0 ? void 0 : _streams$camera.readyState) === 'ended' || (streams === null || streams === void 0 ? void 0 : (_streams$screenShare3 = streams.screenShare) === null || _streams$screenShare3 === void 0 ? void 0 : (_streams$screenShare4 = _streams$screenShare3.audio) === null || _streams$screenShare4 === void 0 ? void 0 : _streams$screenShare4.readyState) === 'ended' || (streams === null || streams === void 0 ? void 0 : (_streams$screenShare5 = streams.screenShare) === null || _streams$screenShare5 === void 0 ? void 0 : (_streams$screenShare6 = _streams$screenShare5.video) === null || _streams$screenShare6 === void 0 ? void 0 : _streams$screenShare6.readyState) === 'ended')) {
8379
- _context37.next = 5;
8434
+ case 4:
8435
+ streamChecks = [{
8436
+ stream: streams === null || streams === void 0 ? void 0 : streams.microphone,
8437
+ name: 'microphone'
8438
+ }, {
8439
+ stream: streams === null || streams === void 0 ? void 0 : streams.camera,
8440
+ name: 'camera'
8441
+ }, {
8442
+ stream: streams === null || streams === void 0 ? void 0 : (_streams$screenShare3 = streams.screenShare) === null || _streams$screenShare3 === void 0 ? void 0 : _streams$screenShare3.audio,
8443
+ name: 'screenShare audio'
8444
+ }, {
8445
+ stream: streams === null || streams === void 0 ? void 0 : (_streams$screenShare4 = streams.screenShare) === null || _streams$screenShare4 === void 0 ? void 0 : _streams$screenShare4.video,
8446
+ name: 'screenShare video'
8447
+ }];
8448
+ _i = 0, _streamChecks = streamChecks;
8449
+ case 6:
8450
+ if (!(_i < _streamChecks.length)) {
8451
+ _context37.next = 13;
8380
8452
  break;
8381
8453
  }
8382
- throw new Error("Attempted to publish stream with ended readyState, correlationId=".concat(this.correlationId));
8383
- case 5:
8384
- floorRequestNeeded = false; // Screenshare Audio is supported only in multi stream. So we check for screenshare audio presence only if it's a multi stream meeting
8385
- if (!(this.isMultistream && (_streams$screenShare7 = streams.screenShare) !== null && _streams$screenShare7 !== void 0 && _streams$screenShare7.audio)) {
8454
+ _streamChecks$_i = _streamChecks[_i], stream = _streamChecks$_i.stream, name = _streamChecks$_i.name;
8455
+ if (!((stream === null || stream === void 0 ? void 0 : stream.readyState) === 'ended')) {
8386
8456
  _context37.next = 10;
8387
8457
  break;
8388
8458
  }
8389
- _context37.next = 9;
8459
+ throw new Error("Attempted to publish ".concat(name, " stream with ended readyState, correlationId=").concat(this.correlationId));
8460
+ case 10:
8461
+ _i++;
8462
+ _context37.next = 6;
8463
+ break;
8464
+ case 13:
8465
+ floorRequestNeeded = false; // Screenshare Audio is supported only in multi stream. So we check for screenshare audio presence only if it's a multi stream meeting
8466
+ if (!(this.isMultistream && (_streams$screenShare5 = streams.screenShare) !== null && _streams$screenShare5 !== void 0 && _streams$screenShare5.audio)) {
8467
+ _context37.next = 18;
8468
+ break;
8469
+ }
8470
+ _context37.next = 17;
8390
8471
  return this.setLocalShareAudioStream(streams.screenShare.audio);
8391
- case 9:
8472
+ case 17:
8392
8473
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
8393
- case 10:
8394
- if (!((_streams$screenShare8 = streams.screenShare) !== null && _streams$screenShare8 !== void 0 && _streams$screenShare8.video)) {
8395
- _context37.next = 14;
8474
+ case 18:
8475
+ if (!((_streams$screenShare6 = streams.screenShare) !== null && _streams$screenShare6 !== void 0 && _streams$screenShare6.video)) {
8476
+ _context37.next = 22;
8396
8477
  break;
8397
8478
  }
8398
- _context37.next = 13;
8399
- return this.setLocalShareVideoStream((_streams$screenShare9 = streams.screenShare) === null || _streams$screenShare9 === void 0 ? void 0 : _streams$screenShare9.video);
8400
- case 13:
8479
+ _context37.next = 21;
8480
+ return this.setLocalShareVideoStream((_streams$screenShare7 = streams.screenShare) === null || _streams$screenShare7 === void 0 ? void 0 : _streams$screenShare7.video);
8481
+ case 21:
8401
8482
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
8402
- case 14:
8483
+ case 22:
8403
8484
  if (!streams.microphone) {
8404
- _context37.next = 17;
8485
+ _context37.next = 25;
8405
8486
  break;
8406
8487
  }
8407
- _context37.next = 17;
8488
+ _context37.next = 25;
8408
8489
  return this.setLocalAudioStream(streams.microphone);
8409
- case 17:
8490
+ case 25:
8410
8491
  if (!streams.camera) {
8411
- _context37.next = 20;
8492
+ _context37.next = 28;
8412
8493
  break;
8413
8494
  }
8414
- _context37.next = 20;
8495
+ _context37.next = 28;
8415
8496
  return this.setLocalVideoStream(streams.camera);
8416
- case 20:
8497
+ case 28:
8417
8498
  if (this.isMultistream) {
8418
- _context37.next = 23;
8499
+ _context37.next = 31;
8419
8500
  break;
8420
8501
  }
8421
- _context37.next = 23;
8502
+ _context37.next = 31;
8422
8503
  return this.updateTranscodedMediaConnection();
8423
- case 23:
8504
+ case 31:
8424
8505
  if (!floorRequestNeeded) {
8425
- _context37.next = 29;
8506
+ _context37.next = 37;
8426
8507
  break;
8427
8508
  }
8428
8509
  this.localShareInstanceId = _uuid.default.v4();
@@ -8446,9 +8527,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8446
8527
  // we're sending the http request to Locus to request the screen share floor
8447
8528
  // only after the SDP update, because that's how it's always been done for transcoded meetings
8448
8529
  // and also if sharing from the start, we need confluence to have been created
8449
- _context37.next = 29;
8530
+ _context37.next = 37;
8450
8531
  return this.enqueueScreenShareFloorRequest();
8451
- case 29:
8532
+ case 37:
8452
8533
  case "end":
8453
8534
  return _context37.stop();
8454
8535
  }
@@ -8474,6 +8555,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8474
8555
  return _regenerator.default.wrap(function _callee38$(_context38) {
8475
8556
  while (1) switch (_context38.prev = _context38.next) {
8476
8557
  case 0:
8558
+ _loggerProxy.default.logger.info("Meeting:index#unpublishStreams --> called with: ".concat((0, _stringify.default)(streams)));
8477
8559
  this.checkMediaConnection();
8478
8560
  promises = [];
8479
8561
  _iterator = _createForOfIteratorHelper(streams.filter(function (t) {
@@ -8503,9 +8585,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8503
8585
  if (!this.isMultistream) {
8504
8586
  promises.push(this.updateTranscodedMediaConnection());
8505
8587
  }
8506
- _context38.next = 7;
8588
+ _context38.next = 8;
8507
8589
  return _promise.default.all(promises);
8508
- case 7:
8590
+ case 8:
8509
8591
  // we're allowing for the SDK to support just audio share as well
8510
8592
  // so a share could be active with only video, only audio, or both
8511
8593
  // we're only releasing the floor if both streams have ended
@@ -8522,7 +8604,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8522
8604
  // nothing to do here, error is logged already inside releaseScreenShareFloor()
8523
8605
  }
8524
8606
  }
8525
- case 8:
8607
+ case 9:
8526
8608
  case "end":
8527
8609
  return _context38.stop();
8528
8610
  }