@webex/plugin-meetings 3.4.0 → 3.5.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.
Files changed (60) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/interpretation/index.js +1 -1
  4. package/dist/interpretation/siLanguage.js +1 -1
  5. package/dist/media/index.js +6 -9
  6. package/dist/media/index.js.map +1 -1
  7. package/dist/meeting/index.js +122 -49
  8. package/dist/meeting/index.js.map +1 -1
  9. package/dist/meeting/util.js +1 -0
  10. package/dist/meeting/util.js.map +1 -1
  11. package/dist/meetings/index.js +4 -2
  12. package/dist/meetings/index.js.map +1 -1
  13. package/dist/reachability/index.js +175 -103
  14. package/dist/reachability/index.js.map +1 -1
  15. package/dist/reconnection-manager/index.js +1 -1
  16. package/dist/reconnection-manager/index.js.map +1 -1
  17. package/dist/rtcMetrics/index.js +26 -6
  18. package/dist/rtcMetrics/index.js.map +1 -1
  19. package/dist/types/meeting/index.d.ts +11 -2
  20. package/dist/types/meetings/index.d.ts +2 -1
  21. package/dist/types/reachability/index.d.ts +14 -2
  22. package/dist/types/rtcMetrics/index.d.ts +11 -1
  23. package/dist/webinar/index.js +1 -1
  24. package/package.json +22 -22
  25. package/src/media/index.ts +5 -9
  26. package/src/meeting/index.ts +54 -10
  27. package/src/meeting/util.ts +2 -0
  28. package/src/meetings/index.ts +4 -3
  29. package/src/reachability/index.ts +49 -4
  30. package/src/reconnection-manager/index.ts +1 -1
  31. package/src/rtcMetrics/index.ts +25 -5
  32. package/test/integration/spec/converged-space-meetings.js +1 -1
  33. package/test/unit/spec/breakouts/index.ts +1 -0
  34. package/test/unit/spec/interceptors/locusRetry.ts +11 -10
  35. package/test/unit/spec/media/MediaConnectionAwaiter.ts +1 -0
  36. package/test/unit/spec/media/index.ts +34 -7
  37. package/test/unit/spec/media/properties.ts +1 -1
  38. package/test/unit/spec/meeting/connectionStateHandler.ts +1 -0
  39. package/test/unit/spec/meeting/index.js +77 -6
  40. package/test/unit/spec/meeting/locusMediaRequest.ts +3 -2
  41. package/test/unit/spec/meeting/request.js +1 -0
  42. package/test/unit/spec/meeting/utils.js +4 -0
  43. package/test/unit/spec/meeting-info/meetinginfov2.js +10 -11
  44. package/test/unit/spec/meeting-info/request.js +1 -1
  45. package/test/unit/spec/meetings/index.js +30 -3
  46. package/test/unit/spec/members/request.js +2 -1
  47. package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
  48. package/test/unit/spec/multistream/receiveSlot.ts +1 -0
  49. package/test/unit/spec/multistream/receiveSlotManager.ts +1 -0
  50. package/test/unit/spec/multistream/remoteMedia.ts +1 -0
  51. package/test/unit/spec/multistream/remoteMediaGroup.ts +1 -0
  52. package/test/unit/spec/multistream/remoteMediaManager.ts +1 -0
  53. package/test/unit/spec/multistream/sendSlotManager.ts +1 -0
  54. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +0 -1
  55. package/test/unit/spec/reachability/index.ts +211 -13
  56. package/test/unit/spec/reachability/request.js +1 -0
  57. package/test/unit/spec/roap/request.ts +1 -0
  58. package/test/unit/spec/rtcMetrics/index.ts +31 -0
  59. package/src/networkQualityMonitor/index.ts +0 -211
  60. package/test/unit/spec/networkQualityMonitor/index.js +0 -99
@@ -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"));
@@ -84,13 +86,16 @@ var _controlsOptionsManager = _interopRequireDefault(require("../controls-option
84
86
  var _permission = _interopRequireDefault(require("../common/errors/permission"));
85
87
  var _locusMediaRequest = require("./locusMediaRequest");
86
88
  var _connectionStateHandler = require("./connectionStateHandler");
89
+ var _rtcMetrics = _interopRequireDefault(require("../rtcMetrics"));
87
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; } } }; }
88
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); }
89
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; }
90
93
  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
94
  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
95
  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
96
+ 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; } }
97
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
98
+ 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
99
  // @ts-ignore - Types not available for @webex/common
95
100
  // default callback so we don't call an undefined function, but in practice it should never be used
96
101
  var DEFAULT_ICE_PHASE_CALLBACK = function DEFAULT_ICE_PHASE_CALLBACK() {
@@ -119,6 +124,7 @@ var ScreenShareFloorStatus = exports.ScreenShareFloorStatus = /*#__PURE__*/funct
119
124
  ScreenShareFloorStatus["RELEASED"] = "floor_released";
120
125
  return ScreenShareFloorStatus;
121
126
  }({});
127
+ var _isoLocalClientMeetingJoinTime = /*#__PURE__*/new _weakMap.default();
122
128
  /**
123
129
  * MediaDirection
124
130
  * @typedef {Object} MediaDirection
@@ -401,6 +407,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
401
407
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "id", void 0);
402
408
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "isMultistream", void 0);
403
409
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "locusUrl", void 0);
410
+ _classPrivateFieldInitSpec((0, _assertThisInitialized2.default)(_this), _isoLocalClientMeetingJoinTime, {
411
+ writable: true,
412
+ value: void 0
413
+ });
404
414
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "mediaConnections", void 0);
405
415
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "mediaId", void 0);
406
416
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "meetingFiniteStateMachine", void 0);
@@ -541,6 +551,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
541
551
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "connectionStateHandler", void 0);
542
552
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "iceCandidateErrors", void 0);
543
553
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "iceCandidatesCount", void 0);
554
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "rtcMetrics", void 0);
544
555
  /**
545
556
  * Callback called when a relay event is received from meeting LLM Connection
546
557
  * @param {RelayEvent} e Event object coming from LLM Connection
@@ -2156,6 +2167,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2156
2167
  * @memberof Meeting
2157
2168
  */
2158
2169
  _this.iceCandidatesCount = 0;
2170
+
2171
+ /**
2172
+ * Start time of meeting as an ISO string
2173
+ * based on browser time, so can only be used to compute durations client side
2174
+ * undefined if meeting has not been joined, set once on meeting join, and not updated again
2175
+ * @instance
2176
+ * @type {string}
2177
+ * @private
2178
+ * @memberof Meeting
2179
+ */
2180
+ (0, _classPrivateFieldSet2.default)((0, _assertThisInitialized2.default)(_this), _isoLocalClientMeetingJoinTime, undefined);
2159
2181
  return _this;
2160
2182
  }
2161
2183
 
@@ -2214,6 +2236,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2214
2236
  this.callStateForMetrics.correlationId = correlationId;
2215
2237
  }
2216
2238
 
2239
+ /**
2240
+ * Getter - Returns isoLocalClientMeetingJoinTime
2241
+ * This will be set once on meeting join, and not updated again
2242
+ * @returns {string | undefined}
2243
+ */
2244
+ }, {
2245
+ key: "isoLocalClientMeetingJoinTime",
2246
+ get: function get() {
2247
+ return (0, _classPrivateFieldGet2.default)(this, _isoLocalClientMeetingJoinTime);
2248
+ }
2249
+
2217
2250
  /**
2218
2251
  * Set meeting info and trigger `MEETING_INFO_AVAILABLE` event
2219
2252
  * @param {any} info
@@ -3611,6 +3644,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3611
3644
  });
3612
3645
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3613
3646
  var _ref25 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3647
+ var _this19$rtcMetrics;
3614
3648
  return _regenerator.default.wrap(function _callee9$(_context9) {
3615
3649
  while (1) switch (_context9.prev = _context9.next) {
3616
3650
  case 0:
@@ -3631,8 +3665,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3631
3665
  }
3632
3666
  });
3633
3667
  }
3668
+ (_this19$rtcMetrics = _this19.rtcMetrics) === null || _this19$rtcMetrics === void 0 ? void 0 : _this19$rtcMetrics.sendNextMetrics();
3634
3669
  _this19.updateLLMConnection();
3635
- case 3:
3670
+ case 4:
3636
3671
  case "end":
3637
3672
  return _context9.stop();
3638
3673
  }
@@ -5606,6 +5641,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5606
5641
  return _context18.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
5607
5642
  _this32.meetingFiniteStateMachine.join();
5608
5643
  _this32.setupLocusMediaRequest();
5644
+
5645
+ // @ts-ignore
5646
+ _this32.webex.internal.device.meetingStarted();
5647
+ (0, _classPrivateFieldSet2.default)(_this32, _isoLocalClientMeetingJoinTime, new Date().toISOString());
5609
5648
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
5610
5649
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
5611
5650
  correlation_id: _this32.correlationId
@@ -6069,9 +6108,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6069
6108
  return _regenerator.default.wrap(function _callee21$(_context21) {
6070
6109
  while (1) switch (_context21.prev = _context21.next) {
6071
6110
  case 0:
6072
- mc = _media.default.createMediaConnection(this.isMultistream, this.getMediaConnectionDebugId(),
6111
+ this.rtcMetrics = this.isMultistream ?
6073
6112
  // @ts-ignore
6074
- this.webex, this.id, this.correlationId, {
6113
+ new _rtcMetrics.default(this.webex, this.id, this.correlationId) : undefined;
6114
+ mc = _media.default.createMediaConnection(this.isMultistream, this.getMediaConnectionDebugId(), this.id, {
6115
+ rtcMetrics: this.rtcMetrics,
6075
6116
  mediaProperties: this.mediaProperties,
6076
6117
  remoteQualityLevel: this.mediaProperties.remoteQualityLevel,
6077
6118
  // @ts-ignore - config coming from registerPlugin
@@ -6093,36 +6134,36 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6093
6134
 
6094
6135
  // publish the streams
6095
6136
  if (!this.mediaProperties.audioStream) {
6096
- _context21.next = 8;
6137
+ _context21.next = 9;
6097
6138
  break;
6098
6139
  }
6099
6140
  this.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
6100
- _context21.next = 8;
6141
+ _context21.next = 9;
6101
6142
  return this.publishStream(_internalMediaCore.MediaType.AudioMain, this.mediaProperties.audioStream);
6102
- case 8:
6143
+ case 9:
6103
6144
  if (!this.mediaProperties.videoStream) {
6104
- _context21.next = 11;
6145
+ _context21.next = 12;
6105
6146
  break;
6106
6147
  }
6107
- _context21.next = 11;
6148
+ _context21.next = 12;
6108
6149
  return this.publishStream(_internalMediaCore.MediaType.VideoMain, this.mediaProperties.videoStream);
6109
- case 11:
6150
+ case 12:
6110
6151
  if (!this.mediaProperties.shareVideoStream) {
6111
- _context21.next = 14;
6152
+ _context21.next = 15;
6112
6153
  break;
6113
6154
  }
6114
- _context21.next = 14;
6155
+ _context21.next = 15;
6115
6156
  return this.publishStream(_internalMediaCore.MediaType.VideoSlides, this.mediaProperties.shareVideoStream);
6116
- case 14:
6157
+ case 15:
6117
6158
  if (!(this.isMultistream && this.mediaProperties.shareAudioStream)) {
6118
- _context21.next = 17;
6159
+ _context21.next = 18;
6119
6160
  break;
6120
6161
  }
6121
- _context21.next = 17;
6162
+ _context21.next = 18;
6122
6163
  return this.publishStream(_internalMediaCore.MediaType.AudioSlides, this.mediaProperties.shareAudioStream);
6123
- case 17:
6124
- return _context21.abrupt("return", mc);
6125
6164
  case 18:
6165
+ return _context21.abrupt("return", mc);
6166
+ case 19:
6126
6167
  case "end":
6127
6168
  return _context21.stop();
6128
6169
  }
@@ -6302,7 +6343,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6302
6343
  // @ts-ignore - config coming from registerPlugin
6303
6344
  if (this.config.stats.enableStatsAnalyzer) {
6304
6345
  // @ts-ignore - config coming from registerPlugin
6305
- this.networkQualityMonitor = new _networkQualityMonitor.default(this.config.stats);
6346
+ this.networkQualityMonitor = new _internalMediaCore.NetworkQualityMonitor(this.config.stats);
6306
6347
  this.statsAnalyzer = new _internalMediaCore.StatsAnalyzer({
6307
6348
  // @ts-ignore - config coming from registerPlugin
6308
6349
  config: this.config.stats,
@@ -6310,7 +6351,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6310
6351
  isMultistream: this.isMultistream
6311
6352
  });
6312
6353
  this.setupStatsAnalyzerEventHandlers();
6313
- this.networkQualityMonitor.on(_constants.EVENT_TRIGGERS.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6354
+ this.networkQualityMonitor.on(_internalMediaCore.NetworkQualityEventNames.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6314
6355
  }
6315
6356
  }
6316
6357
 
@@ -6319,6 +6360,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6319
6360
  *
6320
6361
  * @private
6321
6362
  * @static
6363
+ * @param {boolean} isAudioEnabled
6364
+ * @param {boolean} isVideoEnabled
6322
6365
  * @returns {Promise<void>}
6323
6366
  */
6324
6367
  }, {
@@ -6830,6 +6873,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6830
6873
  selectedCandidatePairChanges,
6831
6874
  numTransports,
6832
6875
  reachabilityStats,
6876
+ iceCandidateErrors,
6833
6877
  _this$mediaProperties13,
6834
6878
  _this$mediaProperties14,
6835
6879
  _this$mediaProperties15,
@@ -6855,7 +6899,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6855
6899
  _yield$this$mediaProp2,
6856
6900
  _selectedCandidatePairChanges,
6857
6901
  _numTransports,
6858
- iceCandidateErrors,
6902
+ _iceCandidateErrors,
6859
6903
  _args32 = arguments;
6860
6904
  return _regenerator.default.wrap(function _callee32$(_context32) {
6861
6905
  while (1) switch (_context32.prev = _context32.next) {
@@ -6941,7 +6985,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6941
6985
  break;
6942
6986
  }
6943
6987
  _context32.next = 28;
6944
- return Meeting.handleDeviceLogging();
6988
+ return Meeting.handleDeviceLogging(audioEnabled, videoEnabled);
6945
6989
  case 28:
6946
6990
  _context32.next = 31;
6947
6991
  break;
@@ -6966,7 +7010,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6966
7010
  return this.webex.meetings.reachability.getReachabilityMetrics();
6967
7011
  case 42:
6968
7012
  reachabilityStats = _context32.sent;
6969
- _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread({
7013
+ iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7014
+ _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
6970
7015
  correlation_id: this.correlationId,
6971
7016
  locus_id: this.locusUrl.split('/').pop(),
6972
7017
  connectionType: connectionType,
@@ -6975,7 +7020,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6975
7020
  isMultistream: this.isMultistream,
6976
7021
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
6977
7022
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry
6978
- }, reachabilityStats), {}, {
7023
+ }, reachabilityStats), iceCandidateErrors), {}, {
6979
7024
  iceCandidatesCount: this.iceCandidatesCount
6980
7025
  }));
6981
7026
  // @ts-ignore
@@ -6989,25 +7034,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6989
7034
 
6990
7035
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
6991
7036
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
6992
- _context32.next = 67;
7037
+ _context32.next = 68;
6993
7038
  break;
6994
- case 49:
6995
- _context32.prev = 49;
7039
+ case 50:
7040
+ _context32.prev = 50;
6996
7041
  _context32.t0 = _context32["catch"](18);
6997
7042
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context32.t0);
6998
7043
 
6999
7044
  // @ts-ignore
7000
- _context32.next = 54;
7045
+ _context32.next = 55;
7001
7046
  return this.webex.meetings.reachability.getReachabilityMetrics();
7002
- case 54:
7047
+ case 55:
7003
7048
  reachabilityMetrics = _context32.sent;
7004
- _context32.next = 57;
7049
+ _context32.next = 58;
7005
7050
  return this.mediaProperties.getCurrentConnectionInfo();
7006
- case 57:
7051
+ case 58:
7007
7052
  _yield$this$mediaProp2 = _context32.sent;
7008
7053
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7009
7054
  _numTransports = _yield$this$mediaProp2.numTransports;
7010
- iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7055
+ _iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7011
7056
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread(_objectSpread(_objectSpread({
7012
7057
  correlation_id: this.correlationId,
7013
7058
  locus_id: this.locusUrl.split('/').pop(),
@@ -7024,12 +7069,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7024
7069
  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
7070
  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
7071
  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), {}, {
7072
+ }, reachabilityMetrics), _iceCandidateErrors), {}, {
7028
7073
  iceCandidatesCount: this.iceCandidatesCount
7029
7074
  }));
7030
- _context32.next = 64;
7075
+ _context32.next = 65;
7031
7076
  return this.cleanUpOnAddMediaFailure();
7032
- case 64:
7077
+ case 65:
7033
7078
  // Upload logs on error while adding media
7034
7079
  _triggerProxy.default.trigger(this, {
7035
7080
  file: 'meeting/index',
@@ -7041,15 +7086,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7041
7086
  });
7042
7087
  }
7043
7088
  throw _context32.t0;
7044
- case 67:
7045
- _context32.prev = 67;
7089
+ case 68:
7090
+ _context32.prev = 68;
7046
7091
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7047
- return _context32.finish(67);
7048
- case 70:
7092
+ return _context32.finish(68);
7093
+ case 71:
7049
7094
  case "end":
7050
7095
  return _context32.stop();
7051
7096
  }
7052
- }, _callee32, this, [[18, 49, 67, 70]]);
7097
+ }, _callee32, this, [[18, 50, 68, 71]]);
7053
7098
  }));
7054
7099
  function addMediaInternal(_x32, _x33, _x34) {
7055
7100
  return _addMediaInternal.apply(this, arguments);
@@ -8543,29 +8588,57 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8543
8588
  }], [{
8544
8589
  key: "handleDeviceLogging",
8545
8590
  value: (function () {
8546
- var _handleDeviceLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39() {
8591
+ var _handleDeviceLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(isAudioEnabled, isVideoEnabled) {
8547
8592
  var devices;
8548
8593
  return _regenerator.default.wrap(function _callee39$(_context39) {
8549
8594
  while (1) switch (_context39.prev = _context39.next) {
8550
8595
  case 0:
8551
8596
  _context39.prev = 0;
8552
- _context39.next = 3;
8597
+ devices = [];
8598
+ if (!(isVideoEnabled && isAudioEnabled)) {
8599
+ _context39.next = 8;
8600
+ break;
8601
+ }
8602
+ _context39.next = 5;
8553
8603
  return (0, _mediaHelpers.getDevices)();
8554
- case 3:
8604
+ case 5:
8555
8605
  devices = _context39.sent;
8606
+ _context39.next = 18;
8607
+ break;
8608
+ case 8:
8609
+ if (!isVideoEnabled) {
8610
+ _context39.next = 14;
8611
+ break;
8612
+ }
8613
+ _context39.next = 11;
8614
+ return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.VIDEO_INPUT);
8615
+ case 11:
8616
+ devices = _context39.sent;
8617
+ _context39.next = 18;
8618
+ break;
8619
+ case 14:
8620
+ if (!isAudioEnabled) {
8621
+ _context39.next = 18;
8622
+ break;
8623
+ }
8624
+ _context39.next = 17;
8625
+ return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.AUDIO_INPUT);
8626
+ case 17:
8627
+ devices = _context39.sent;
8628
+ case 18:
8556
8629
  _util2.default.handleDeviceLogging(devices);
8557
- _context39.next = 9;
8630
+ _context39.next = 23;
8558
8631
  break;
8559
- case 7:
8560
- _context39.prev = 7;
8632
+ case 21:
8633
+ _context39.prev = 21;
8561
8634
  _context39.t0 = _context39["catch"](0);
8562
- case 9:
8635
+ case 23:
8563
8636
  case "end":
8564
8637
  return _context39.stop();
8565
8638
  }
8566
- }, _callee39, null, [[0, 7]]);
8639
+ }, _callee39, null, [[0, 21]]);
8567
8640
  }));
8568
- function handleDeviceLogging() {
8641
+ function handleDeviceLogging(_x43, _x44) {
8569
8642
  return _handleDeviceLogging.apply(this, arguments);
8570
8643
  }
8571
8644
  return handleDeviceLogging;