@webex/plugin-meetings 3.4.0 → 3.5.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 (76) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/constants.js +1 -0
  4. package/dist/constants.js.map +1 -1
  5. package/dist/interpretation/index.js +1 -1
  6. package/dist/interpretation/siLanguage.js +1 -1
  7. package/dist/media/index.js +6 -9
  8. package/dist/media/index.js.map +1 -1
  9. package/dist/meeting/in-meeting-actions.js +3 -1
  10. package/dist/meeting/in-meeting-actions.js.map +1 -1
  11. package/dist/meeting/index.js +154 -50
  12. package/dist/meeting/index.js.map +1 -1
  13. package/dist/meeting/util.js +1 -0
  14. package/dist/meeting/util.js.map +1 -1
  15. package/dist/meetings/index.js +11 -2
  16. package/dist/meetings/index.js.map +1 -1
  17. package/dist/reachability/index.js +175 -103
  18. package/dist/reachability/index.js.map +1 -1
  19. package/dist/reconnection-manager/index.js +1 -1
  20. package/dist/reconnection-manager/index.js.map +1 -1
  21. package/dist/types/constants.d.ts +2 -1
  22. package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
  23. package/dist/types/meeting/index.d.ts +22 -2
  24. package/dist/types/meetings/index.d.ts +4 -2
  25. package/dist/types/reachability/index.d.ts +14 -2
  26. package/dist/webinar/index.js +1 -1
  27. package/package.json +22 -22
  28. package/src/constants.ts +1 -0
  29. package/src/media/index.ts +6 -10
  30. package/src/meeting/in-meeting-actions.ts +3 -0
  31. package/src/meeting/index.ts +92 -10
  32. package/src/meeting/util.ts +2 -0
  33. package/src/meetings/index.ts +11 -4
  34. package/src/reachability/index.ts +49 -4
  35. package/src/reconnection-manager/index.ts +1 -1
  36. package/test/integration/spec/converged-space-meetings.js +1 -1
  37. package/test/unit/spec/breakouts/index.ts +1 -0
  38. package/test/unit/spec/interceptors/locusRetry.ts +11 -10
  39. package/test/unit/spec/media/MediaConnectionAwaiter.ts +1 -0
  40. package/test/unit/spec/media/index.ts +34 -7
  41. package/test/unit/spec/media/properties.ts +1 -1
  42. package/test/unit/spec/meeting/connectionStateHandler.ts +1 -0
  43. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
  44. package/test/unit/spec/meeting/index.js +119 -12
  45. package/test/unit/spec/meeting/locusMediaRequest.ts +3 -2
  46. package/test/unit/spec/meeting/request.js +1 -0
  47. package/test/unit/spec/meeting/utils.js +4 -0
  48. package/test/unit/spec/meeting-info/meetinginfov2.js +10 -11
  49. package/test/unit/spec/meeting-info/request.js +1 -1
  50. package/test/unit/spec/meetings/index.js +40 -5
  51. package/test/unit/spec/members/request.js +2 -1
  52. package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
  53. package/test/unit/spec/multistream/receiveSlot.ts +1 -0
  54. package/test/unit/spec/multistream/receiveSlotManager.ts +1 -0
  55. package/test/unit/spec/multistream/remoteMedia.ts +1 -0
  56. package/test/unit/spec/multistream/remoteMediaGroup.ts +1 -0
  57. package/test/unit/spec/multistream/remoteMediaManager.ts +1 -0
  58. package/test/unit/spec/multistream/sendSlotManager.ts +1 -0
  59. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +0 -1
  60. package/test/unit/spec/reachability/index.ts +211 -13
  61. package/test/unit/spec/reachability/request.js +1 -0
  62. package/test/unit/spec/roap/request.ts +1 -0
  63. package/dist/networkQualityMonitor/index.js +0 -227
  64. package/dist/networkQualityMonitor/index.js.map +0 -1
  65. package/dist/rtcMetrics/constants.js +0 -11
  66. package/dist/rtcMetrics/constants.js.map +0 -1
  67. package/dist/rtcMetrics/index.js +0 -177
  68. package/dist/rtcMetrics/index.js.map +0 -1
  69. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  70. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  71. package/dist/types/rtcMetrics/index.d.ts +0 -61
  72. package/src/networkQualityMonitor/index.ts +0 -211
  73. package/src/rtcMetrics/constants.ts +0 -3
  74. package/src/rtcMetrics/index.ts +0 -166
  75. package/test/unit/spec/networkQualityMonitor/index.js +0 -99
  76. package/test/unit/spec/rtcMetrics/index.ts +0 -123
@@ -22,6 +22,7 @@ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/pr
22
22
  var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
23
23
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
24
24
  var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
25
+ var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
25
26
  var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
26
27
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
27
28
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
@@ -31,6 +32,8 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/
31
32
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
32
33
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
33
34
  var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
35
+ var _classPrivateFieldGet2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classPrivateFieldGet"));
36
+ var _classPrivateFieldSet2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classPrivateFieldSet"));
34
37
  var _uuid = _interopRequireDefault(require("uuid"));
35
38
  var _lodash = require("lodash");
36
39
  var _jwtDecode = _interopRequireDefault(require("jwt-decode"));
@@ -42,7 +45,6 @@ var _mediaHelpers = require("@webex/media-helpers");
42
45
  var _internalPluginVoicea = require("@webex/internal-plugin-voicea");
43
46
  var _voiceaMeeting = require("./voicea-meeting");
44
47
  var _webexErrors = require("../common/errors/webex-errors");
45
- var _networkQualityMonitor = _interopRequireDefault(require("../networkQualityMonitor"));
46
48
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
47
49
  var _util = _interopRequireDefault(require("../common/events/util"));
48
50
  var _triggerProxy = _interopRequireDefault(require("../common/events/trigger-proxy"));
@@ -90,7 +92,9 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
90
92
  function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
91
93
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty3.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
92
94
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
93
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // @ts-ignore - Fix this
95
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
96
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
97
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } } // @ts-ignore - Fix this
94
98
  // @ts-ignore - Types not available for @webex/common
95
99
  // default callback so we don't call an undefined function, but in practice it should never be used
96
100
  var DEFAULT_ICE_PHASE_CALLBACK = function DEFAULT_ICE_PHASE_CALLBACK() {
@@ -119,6 +123,7 @@ var ScreenShareFloorStatus = exports.ScreenShareFloorStatus = /*#__PURE__*/funct
119
123
  ScreenShareFloorStatus["RELEASED"] = "floor_released";
120
124
  return ScreenShareFloorStatus;
121
125
  }({});
126
+ var _isoLocalClientMeetingJoinTime = /*#__PURE__*/new _weakMap.default();
122
127
  /**
123
128
  * MediaDirection
124
129
  * @typedef {Object} MediaDirection
@@ -375,7 +380,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
375
380
  * @memberof Meeting
376
381
  */
377
382
  function Meeting(attrs, _options) {
378
- var _attrs$callStateForMe, _this$locusInfo, _this$locusInfo$links, _this$locusInfo$links2, _this$locusInfo$links3, _this$locusInfo2, _this$locusInfo2$full, _this$locusInfo3, _this$locusInfo4;
383
+ 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;
379
384
  var _this;
380
385
  (0, _classCallCheck2.default)(this, Meeting);
381
386
  _this = _super.call(this, {}, _options);
@@ -401,6 +406,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
401
406
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "id", void 0);
402
407
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "isMultistream", void 0);
403
408
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "locusUrl", void 0);
409
+ _classPrivateFieldInitSpec((0, _assertThisInitialized2.default)(_this), _isoLocalClientMeetingJoinTime, {
410
+ writable: true,
411
+ value: void 0
412
+ });
404
413
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "mediaConnections", void 0);
405
414
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "mediaId", void 0);
406
415
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "meetingFiniteStateMachine", void 0);
@@ -541,6 +550,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
541
550
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "connectionStateHandler", void 0);
542
551
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "iceCandidateErrors", void 0);
543
552
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "iceCandidatesCount", void 0);
553
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "rtcMetrics", void 0);
544
554
  /**
545
555
  * Callback called when a relay event is received from meeting LLM Connection
546
556
  * @param {RelayEvent} e Event object coming from LLM Connection
@@ -1399,10 +1409,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1399
1409
  */
1400
1410
  _this.callStateForMetrics = attrs.callStateForMetrics || {};
1401
1411
  var _correlationId = attrs.correlationId || ((_attrs$callStateForMe = attrs.callStateForMetrics) === null || _attrs$callStateForMe === void 0 ? void 0 : _attrs$callStateForMe.correlationId);
1412
+ var sessionCorrelationId = attrs.sessionCorrelationId || ((_attrs$callStateForMe2 = attrs.callStateForMetrics) === null || _attrs$callStateForMe2 === void 0 ? void 0 : _attrs$callStateForMe2.sessionCorrelationId);
1413
+ if (sessionCorrelationId) {
1414
+ _loggerProxy.default.logger.log("Meetings:index#constructor --> Initializing the meeting object with session correlation id from app ".concat(_correlationId));
1415
+ _this.callStateForMetrics.sessionCorrelationId = sessionCorrelationId;
1416
+ } else {
1417
+ _loggerProxy.default.logger.log("Meetings:index#constructor --> No session correlation id supplied. None will be generated and this field will remain blank");
1418
+ // TODO: supply a session from the meetings instance
1419
+ _this.callStateForMetrics.sessionCorrelationId = '';
1420
+ }
1402
1421
  if (_correlationId) {
1403
1422
  _loggerProxy.default.logger.log("Meetings:index#constructor --> Initializing the meeting object with correlation id from app ".concat(_correlationId));
1404
1423
  _this.callStateForMetrics.correlationId = _correlationId;
1405
1424
  } else {
1425
+ _loggerProxy.default.logger.log("Meetings:index#constructor --> Initializing the meeting object with generated correlation id from sdk ".concat(_this.id));
1406
1426
  _this.callStateForMetrics.correlationId = _this.id;
1407
1427
  }
1408
1428
  /**
@@ -2156,6 +2176,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2156
2176
  * @memberof Meeting
2157
2177
  */
2158
2178
  _this.iceCandidatesCount = 0;
2179
+
2180
+ /**
2181
+ * Start time of meeting as an ISO string
2182
+ * based on browser time, so can only be used to compute durations client side
2183
+ * undefined if meeting has not been joined, set once on meeting join, and not updated again
2184
+ * @instance
2185
+ * @type {string}
2186
+ * @private
2187
+ * @memberof Meeting
2188
+ */
2189
+ (0, _classPrivateFieldSet2.default)((0, _assertThisInitialized2.default)(_this), _isoLocalClientMeetingJoinTime, undefined);
2159
2190
  return _this;
2160
2191
  }
2161
2192
 
@@ -2214,6 +2245,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2214
2245
  this.callStateForMetrics.correlationId = correlationId;
2215
2246
  }
2216
2247
 
2248
+ /**
2249
+ * Getter - Returns callStateForMetrics.sessionCorrelationId
2250
+ * @returns {string}
2251
+ */
2252
+ }, {
2253
+ key: "sessionCorrelationId",
2254
+ get: function get() {
2255
+ return this.callStateForMetrics.sessionCorrelationId;
2256
+ }
2257
+
2258
+ /**
2259
+ * Setter - sets callStateForMetrics.sessionCorrelationId
2260
+ * @param {string} sessionCorrelationId
2261
+ */,
2262
+ set: function set(sessionCorrelationId) {
2263
+ this.callStateForMetrics.sessionCorrelationId = sessionCorrelationId;
2264
+ }
2265
+
2266
+ /**
2267
+ * Getter - Returns isoLocalClientMeetingJoinTime
2268
+ * This will be set once on meeting join, and not updated again
2269
+ * @returns {string | undefined}
2270
+ */
2271
+ }, {
2272
+ key: "isoLocalClientMeetingJoinTime",
2273
+ get: function get() {
2274
+ return (0, _classPrivateFieldGet2.default)(this, _isoLocalClientMeetingJoinTime);
2275
+ }
2276
+
2217
2277
  /**
2218
2278
  * Set meeting info and trigger `MEETING_INFO_AVAILABLE` event
2219
2279
  * @param {any} info
@@ -3611,6 +3671,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3611
3671
  });
3612
3672
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3613
3673
  var _ref25 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3674
+ var _this19$rtcMetrics;
3614
3675
  return _regenerator.default.wrap(function _callee9$(_context9) {
3615
3676
  while (1) switch (_context9.prev = _context9.next) {
3616
3677
  case 0:
@@ -3631,8 +3692,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3631
3692
  }
3632
3693
  });
3633
3694
  }
3695
+ (_this19$rtcMetrics = _this19.rtcMetrics) === null || _this19$rtcMetrics === void 0 ? void 0 : _this19$rtcMetrics.sendNextMetrics();
3634
3696
  _this19.updateLLMConnection();
3635
- case 3:
3697
+ case 4:
3636
3698
  case "end":
3637
3699
  return _context9.stop();
3638
3700
  }
@@ -4188,6 +4250,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4188
4250
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_CHAT],
4189
4251
  policies: this.selfUserPolicies
4190
4252
  }),
4253
+ canPollingAndQA: _util5.default.hasPolicies({
4254
+ requiredPolicies: [_constants.SELF_POLICY.SUPPORT_POLLING_AND_QA],
4255
+ policies: this.selfUserPolicies
4256
+ }),
4191
4257
  canShareApplication: _util5.default.hasHints({
4192
4258
  requiredHints: [_constants.DISPLAY_HINTS.SHARE_APPLICATION],
4193
4259
  displayHints: this.userDisplayHints
@@ -5606,6 +5672,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5606
5672
  return _context18.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
5607
5673
  _this32.meetingFiniteStateMachine.join();
5608
5674
  _this32.setupLocusMediaRequest();
5675
+
5676
+ // @ts-ignore
5677
+ _this32.webex.internal.device.meetingStarted();
5678
+ (0, _classPrivateFieldSet2.default)(_this32, _isoLocalClientMeetingJoinTime, new Date().toISOString());
5609
5679
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
5610
5680
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
5611
5681
  correlation_id: _this32.correlationId
@@ -6069,9 +6139,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6069
6139
  return _regenerator.default.wrap(function _callee21$(_context21) {
6070
6140
  while (1) switch (_context21.prev = _context21.next) {
6071
6141
  case 0:
6072
- mc = _media.default.createMediaConnection(this.isMultistream, this.getMediaConnectionDebugId(),
6142
+ this.rtcMetrics = this.isMultistream ?
6073
6143
  // @ts-ignore
6074
- this.webex, this.id, this.correlationId, {
6144
+ new _internalPluginMetrics.RtcMetrics(this.webex, this.id, this.correlationId) : undefined;
6145
+ mc = _media.default.createMediaConnection(this.isMultistream, this.getMediaConnectionDebugId(), this.id, {
6146
+ rtcMetrics: this.rtcMetrics,
6075
6147
  mediaProperties: this.mediaProperties,
6076
6148
  remoteQualityLevel: this.mediaProperties.remoteQualityLevel,
6077
6149
  // @ts-ignore - config coming from registerPlugin
@@ -6093,36 +6165,36 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6093
6165
 
6094
6166
  // publish the streams
6095
6167
  if (!this.mediaProperties.audioStream) {
6096
- _context21.next = 8;
6168
+ _context21.next = 9;
6097
6169
  break;
6098
6170
  }
6099
6171
  this.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
6100
- _context21.next = 8;
6172
+ _context21.next = 9;
6101
6173
  return this.publishStream(_internalMediaCore.MediaType.AudioMain, this.mediaProperties.audioStream);
6102
- case 8:
6174
+ case 9:
6103
6175
  if (!this.mediaProperties.videoStream) {
6104
- _context21.next = 11;
6176
+ _context21.next = 12;
6105
6177
  break;
6106
6178
  }
6107
- _context21.next = 11;
6179
+ _context21.next = 12;
6108
6180
  return this.publishStream(_internalMediaCore.MediaType.VideoMain, this.mediaProperties.videoStream);
6109
- case 11:
6181
+ case 12:
6110
6182
  if (!this.mediaProperties.shareVideoStream) {
6111
- _context21.next = 14;
6183
+ _context21.next = 15;
6112
6184
  break;
6113
6185
  }
6114
- _context21.next = 14;
6186
+ _context21.next = 15;
6115
6187
  return this.publishStream(_internalMediaCore.MediaType.VideoSlides, this.mediaProperties.shareVideoStream);
6116
- case 14:
6188
+ case 15:
6117
6189
  if (!(this.isMultistream && this.mediaProperties.shareAudioStream)) {
6118
- _context21.next = 17;
6190
+ _context21.next = 18;
6119
6191
  break;
6120
6192
  }
6121
- _context21.next = 17;
6193
+ _context21.next = 18;
6122
6194
  return this.publishStream(_internalMediaCore.MediaType.AudioSlides, this.mediaProperties.shareAudioStream);
6123
- case 17:
6124
- return _context21.abrupt("return", mc);
6125
6195
  case 18:
6196
+ return _context21.abrupt("return", mc);
6197
+ case 19:
6126
6198
  case "end":
6127
6199
  return _context21.stop();
6128
6200
  }
@@ -6302,7 +6374,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6302
6374
  // @ts-ignore - config coming from registerPlugin
6303
6375
  if (this.config.stats.enableStatsAnalyzer) {
6304
6376
  // @ts-ignore - config coming from registerPlugin
6305
- this.networkQualityMonitor = new _networkQualityMonitor.default(this.config.stats);
6377
+ this.networkQualityMonitor = new _internalMediaCore.NetworkQualityMonitor(this.config.stats);
6306
6378
  this.statsAnalyzer = new _internalMediaCore.StatsAnalyzer({
6307
6379
  // @ts-ignore - config coming from registerPlugin
6308
6380
  config: this.config.stats,
@@ -6310,7 +6382,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6310
6382
  isMultistream: this.isMultistream
6311
6383
  });
6312
6384
  this.setupStatsAnalyzerEventHandlers();
6313
- this.networkQualityMonitor.on(_constants.EVENT_TRIGGERS.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6385
+ this.networkQualityMonitor.on(_internalMediaCore.NetworkQualityEventNames.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6314
6386
  }
6315
6387
  }
6316
6388
 
@@ -6319,6 +6391,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6319
6391
  *
6320
6392
  * @private
6321
6393
  * @static
6394
+ * @param {boolean} isAudioEnabled
6395
+ * @param {boolean} isVideoEnabled
6322
6396
  * @returns {Promise<void>}
6323
6397
  */
6324
6398
  }, {
@@ -6830,6 +6904,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6830
6904
  selectedCandidatePairChanges,
6831
6905
  numTransports,
6832
6906
  reachabilityStats,
6907
+ iceCandidateErrors,
6833
6908
  _this$mediaProperties13,
6834
6909
  _this$mediaProperties14,
6835
6910
  _this$mediaProperties15,
@@ -6855,7 +6930,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6855
6930
  _yield$this$mediaProp2,
6856
6931
  _selectedCandidatePairChanges,
6857
6932
  _numTransports,
6858
- iceCandidateErrors,
6933
+ _iceCandidateErrors,
6859
6934
  _args32 = arguments;
6860
6935
  return _regenerator.default.wrap(function _callee32$(_context32) {
6861
6936
  while (1) switch (_context32.prev = _context32.next) {
@@ -6941,7 +7016,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6941
7016
  break;
6942
7017
  }
6943
7018
  _context32.next = 28;
6944
- return Meeting.handleDeviceLogging();
7019
+ return Meeting.handleDeviceLogging(audioEnabled, videoEnabled);
6945
7020
  case 28:
6946
7021
  _context32.next = 31;
6947
7022
  break;
@@ -6966,7 +7041,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6966
7041
  return this.webex.meetings.reachability.getReachabilityMetrics();
6967
7042
  case 42:
6968
7043
  reachabilityStats = _context32.sent;
6969
- _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread({
7044
+ iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7045
+ _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
6970
7046
  correlation_id: this.correlationId,
6971
7047
  locus_id: this.locusUrl.split('/').pop(),
6972
7048
  connectionType: connectionType,
@@ -6975,7 +7051,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6975
7051
  isMultistream: this.isMultistream,
6976
7052
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
6977
7053
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry
6978
- }, reachabilityStats), {}, {
7054
+ }, reachabilityStats), iceCandidateErrors), {}, {
6979
7055
  iceCandidatesCount: this.iceCandidatesCount
6980
7056
  }));
6981
7057
  // @ts-ignore
@@ -6989,25 +7065,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6989
7065
 
6990
7066
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
6991
7067
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
6992
- _context32.next = 67;
7068
+ _context32.next = 68;
6993
7069
  break;
6994
- case 49:
6995
- _context32.prev = 49;
7070
+ case 50:
7071
+ _context32.prev = 50;
6996
7072
  _context32.t0 = _context32["catch"](18);
6997
7073
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context32.t0);
6998
7074
 
6999
7075
  // @ts-ignore
7000
- _context32.next = 54;
7076
+ _context32.next = 55;
7001
7077
  return this.webex.meetings.reachability.getReachabilityMetrics();
7002
- case 54:
7078
+ case 55:
7003
7079
  reachabilityMetrics = _context32.sent;
7004
- _context32.next = 57;
7080
+ _context32.next = 58;
7005
7081
  return this.mediaProperties.getCurrentConnectionInfo();
7006
- case 57:
7082
+ case 58:
7007
7083
  _yield$this$mediaProp2 = _context32.sent;
7008
7084
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7009
7085
  _numTransports = _yield$this$mediaProp2.numTransports;
7010
- iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7086
+ _iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7011
7087
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread(_objectSpread(_objectSpread({
7012
7088
  correlation_id: this.correlationId,
7013
7089
  locus_id: this.locusUrl.split('/').pop(),
@@ -7024,12 +7100,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7024
7100
  signalingState: ((_this$mediaProperties13 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties13 === void 0 ? void 0 : (_this$mediaProperties14 = _this$mediaProperties13.multistreamConnection) === null || _this$mediaProperties14 === void 0 ? void 0 : (_this$mediaProperties15 = _this$mediaProperties14.pc) === null || _this$mediaProperties15 === void 0 ? void 0 : (_this$mediaProperties16 = _this$mediaProperties15.pc) === null || _this$mediaProperties16 === void 0 ? void 0 : _this$mediaProperties16.signalingState) || ((_this$mediaProperties17 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties17 === void 0 ? void 0 : (_this$mediaProperties18 = _this$mediaProperties17.mediaConnection) === null || _this$mediaProperties18 === void 0 ? void 0 : (_this$mediaProperties19 = _this$mediaProperties18.pc) === null || _this$mediaProperties19 === void 0 ? void 0 : _this$mediaProperties19.signalingState) || 'unknown',
7025
7101
  connectionState: ((_this$mediaProperties20 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties20 === void 0 ? void 0 : (_this$mediaProperties21 = _this$mediaProperties20.multistreamConnection) === null || _this$mediaProperties21 === void 0 ? void 0 : (_this$mediaProperties22 = _this$mediaProperties21.pc) === null || _this$mediaProperties22 === void 0 ? void 0 : (_this$mediaProperties23 = _this$mediaProperties22.pc) === null || _this$mediaProperties23 === void 0 ? void 0 : _this$mediaProperties23.connectionState) || ((_this$mediaProperties24 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties24 === void 0 ? void 0 : (_this$mediaProperties25 = _this$mediaProperties24.mediaConnection) === null || _this$mediaProperties25 === void 0 ? void 0 : (_this$mediaProperties26 = _this$mediaProperties25.pc) === null || _this$mediaProperties26 === void 0 ? void 0 : _this$mediaProperties26.connectionState) || 'unknown',
7026
7102
  iceConnectionState: ((_this$mediaProperties27 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties27 === void 0 ? void 0 : (_this$mediaProperties28 = _this$mediaProperties27.multistreamConnection) === null || _this$mediaProperties28 === void 0 ? void 0 : (_this$mediaProperties29 = _this$mediaProperties28.pc) === null || _this$mediaProperties29 === void 0 ? void 0 : (_this$mediaProperties30 = _this$mediaProperties29.pc) === null || _this$mediaProperties30 === void 0 ? void 0 : _this$mediaProperties30.iceConnectionState) || ((_this$mediaProperties31 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties31 === void 0 ? void 0 : (_this$mediaProperties32 = _this$mediaProperties31.mediaConnection) === null || _this$mediaProperties32 === void 0 ? void 0 : (_this$mediaProperties33 = _this$mediaProperties32.pc) === null || _this$mediaProperties33 === void 0 ? void 0 : _this$mediaProperties33.iceConnectionState) || 'unknown'
7027
- }, reachabilityMetrics), iceCandidateErrors), {}, {
7103
+ }, reachabilityMetrics), _iceCandidateErrors), {}, {
7028
7104
  iceCandidatesCount: this.iceCandidatesCount
7029
7105
  }));
7030
- _context32.next = 64;
7106
+ _context32.next = 65;
7031
7107
  return this.cleanUpOnAddMediaFailure();
7032
- case 64:
7108
+ case 65:
7033
7109
  // Upload logs on error while adding media
7034
7110
  _triggerProxy.default.trigger(this, {
7035
7111
  file: 'meeting/index',
@@ -7041,15 +7117,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7041
7117
  });
7042
7118
  }
7043
7119
  throw _context32.t0;
7044
- case 67:
7045
- _context32.prev = 67;
7120
+ case 68:
7121
+ _context32.prev = 68;
7046
7122
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7047
- return _context32.finish(67);
7048
- case 70:
7123
+ return _context32.finish(68);
7124
+ case 71:
7049
7125
  case "end":
7050
7126
  return _context32.stop();
7051
7127
  }
7052
- }, _callee32, this, [[18, 49, 67, 70]]);
7128
+ }, _callee32, this, [[18, 50, 68, 71]]);
7053
7129
  }));
7054
7130
  function addMediaInternal(_x32, _x33, _x34) {
7055
7131
  return _addMediaInternal.apply(this, arguments);
@@ -8543,29 +8619,57 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8543
8619
  }], [{
8544
8620
  key: "handleDeviceLogging",
8545
8621
  value: (function () {
8546
- var _handleDeviceLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39() {
8622
+ var _handleDeviceLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(isAudioEnabled, isVideoEnabled) {
8547
8623
  var devices;
8548
8624
  return _regenerator.default.wrap(function _callee39$(_context39) {
8549
8625
  while (1) switch (_context39.prev = _context39.next) {
8550
8626
  case 0:
8551
8627
  _context39.prev = 0;
8552
- _context39.next = 3;
8628
+ devices = [];
8629
+ if (!(isVideoEnabled && isAudioEnabled)) {
8630
+ _context39.next = 8;
8631
+ break;
8632
+ }
8633
+ _context39.next = 5;
8553
8634
  return (0, _mediaHelpers.getDevices)();
8554
- case 3:
8635
+ case 5:
8555
8636
  devices = _context39.sent;
8637
+ _context39.next = 18;
8638
+ break;
8639
+ case 8:
8640
+ if (!isVideoEnabled) {
8641
+ _context39.next = 14;
8642
+ break;
8643
+ }
8644
+ _context39.next = 11;
8645
+ return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.VIDEO_INPUT);
8646
+ case 11:
8647
+ devices = _context39.sent;
8648
+ _context39.next = 18;
8649
+ break;
8650
+ case 14:
8651
+ if (!isAudioEnabled) {
8652
+ _context39.next = 18;
8653
+ break;
8654
+ }
8655
+ _context39.next = 17;
8656
+ return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.AUDIO_INPUT);
8657
+ case 17:
8658
+ devices = _context39.sent;
8659
+ case 18:
8556
8660
  _util2.default.handleDeviceLogging(devices);
8557
- _context39.next = 9;
8661
+ _context39.next = 23;
8558
8662
  break;
8559
- case 7:
8560
- _context39.prev = 7;
8663
+ case 21:
8664
+ _context39.prev = 21;
8561
8665
  _context39.t0 = _context39["catch"](0);
8562
- case 9:
8666
+ case 23:
8563
8667
  case "end":
8564
8668
  return _context39.stop();
8565
8669
  }
8566
- }, _callee39, null, [[0, 7]]);
8670
+ }, _callee39, null, [[0, 21]]);
8567
8671
  }));
8568
- function handleDeviceLogging() {
8672
+ function handleDeviceLogging(_x43, _x44) {
8569
8673
  return _handleDeviceLogging.apply(this, arguments);
8570
8674
  }
8571
8675
  return handleDeviceLogging;