@webex/plugin-meetings 3.0.0-stream-classes.4 → 3.0.0-test.1

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 (239) hide show
  1. package/README.md +12 -0
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/common/errors/no-meeting-info.js +51 -0
  5. package/dist/common/errors/no-meeting-info.js.map +1 -0
  6. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  7. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  8. package/dist/common/errors/webex-errors.js +23 -3
  9. package/dist/common/errors/webex-errors.js.map +1 -1
  10. package/dist/common/logs/request.js +5 -1
  11. package/dist/common/logs/request.js.map +1 -1
  12. package/dist/config.js +1 -1
  13. package/dist/config.js.map +1 -1
  14. package/dist/constants.js +69 -9
  15. package/dist/constants.js.map +1 -1
  16. package/dist/index.js +11 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/interceptors/index.js +15 -0
  19. package/dist/interceptors/index.js.map +1 -0
  20. package/dist/interceptors/locusRetry.js +93 -0
  21. package/dist/interceptors/locusRetry.js.map +1 -0
  22. package/dist/interpretation/index.js +16 -2
  23. package/dist/interpretation/index.js.map +1 -1
  24. package/dist/interpretation/siLanguage.js +1 -1
  25. package/dist/locus-info/index.js +40 -11
  26. package/dist/locus-info/index.js.map +1 -1
  27. package/dist/locus-info/mediaSharesUtils.js +15 -1
  28. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  29. package/dist/locus-info/parser.js +42 -21
  30. package/dist/locus-info/parser.js.map +1 -1
  31. package/dist/media/index.js +10 -6
  32. package/dist/media/index.js.map +1 -1
  33. package/dist/media/properties.js +13 -3
  34. package/dist/media/properties.js.map +1 -1
  35. package/dist/mediaQualityMetrics/config.js +135 -330
  36. package/dist/mediaQualityMetrics/config.js.map +1 -1
  37. package/dist/meeting/in-meeting-actions.js +4 -0
  38. package/dist/meeting/in-meeting-actions.js.map +1 -1
  39. package/dist/meeting/index.js +2187 -1074
  40. package/dist/meeting/index.js.map +1 -1
  41. package/dist/meeting/muteState.js +37 -25
  42. package/dist/meeting/muteState.js.map +1 -1
  43. package/dist/meeting/request.js +34 -19
  44. package/dist/meeting/request.js.map +1 -1
  45. package/dist/meeting/util.js +71 -0
  46. package/dist/meeting/util.js.map +1 -1
  47. package/dist/meeting-info/index.js +48 -23
  48. package/dist/meeting-info/index.js.map +1 -1
  49. package/dist/meeting-info/meeting-info-v2.js +25 -4
  50. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  51. package/dist/meeting-info/utilv2.js +1 -1
  52. package/dist/meeting-info/utilv2.js.map +1 -1
  53. package/dist/meetings/collection.js +17 -0
  54. package/dist/meetings/collection.js.map +1 -1
  55. package/dist/meetings/index.js +142 -57
  56. package/dist/meetings/index.js.map +1 -1
  57. package/dist/meetings/util.js +2 -6
  58. package/dist/meetings/util.js.map +1 -1
  59. package/dist/member/index.js +9 -0
  60. package/dist/member/index.js.map +1 -1
  61. package/dist/member/util.js +11 -0
  62. package/dist/member/util.js.map +1 -1
  63. package/dist/members/index.js +17 -1
  64. package/dist/members/index.js.map +1 -1
  65. package/dist/members/types.js.map +1 -1
  66. package/dist/members/util.js +15 -4
  67. package/dist/members/util.js.map +1 -1
  68. package/dist/metrics/constants.js +15 -1
  69. package/dist/metrics/constants.js.map +1 -1
  70. package/dist/multistream/mediaRequestManager.js +1 -1
  71. package/dist/multistream/mediaRequestManager.js.map +1 -1
  72. package/dist/multistream/remoteMediaGroup.js +16 -2
  73. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  74. package/dist/multistream/remoteMediaManager.js +222 -73
  75. package/dist/multistream/remoteMediaManager.js.map +1 -1
  76. package/dist/multistream/sendSlotManager.js +22 -0
  77. package/dist/multistream/sendSlotManager.js.map +1 -1
  78. package/dist/reachability/clusterReachability.js +356 -0
  79. package/dist/reachability/clusterReachability.js.map +1 -0
  80. package/dist/reachability/index.js +262 -432
  81. package/dist/reachability/index.js.map +1 -1
  82. package/dist/reachability/request.js +1 -1
  83. package/dist/reachability/request.js.map +1 -1
  84. package/dist/reachability/util.js +29 -0
  85. package/dist/reachability/util.js.map +1 -0
  86. package/dist/reconnection-manager/index.js +113 -96
  87. package/dist/reconnection-manager/index.js.map +1 -1
  88. package/dist/roap/index.js +57 -25
  89. package/dist/roap/index.js.map +1 -1
  90. package/dist/roap/request.js +5 -13
  91. package/dist/roap/request.js.map +1 -1
  92. package/dist/roap/turnDiscovery.js +173 -81
  93. package/dist/roap/turnDiscovery.js.map +1 -1
  94. package/dist/rtcMetrics/index.js +68 -6
  95. package/dist/rtcMetrics/index.js.map +1 -1
  96. package/dist/statsAnalyzer/index.js +338 -289
  97. package/dist/statsAnalyzer/index.js.map +1 -1
  98. package/dist/statsAnalyzer/mqaUtil.js +296 -156
  99. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  100. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  101. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  102. package/dist/types/common/errors/webex-errors.d.ts +13 -1
  103. package/dist/types/common/logs/request.d.ts +2 -0
  104. package/dist/types/config.d.ts +1 -1
  105. package/dist/types/constants.d.ts +66 -13
  106. package/dist/types/index.d.ts +1 -1
  107. package/dist/types/interceptors/index.d.ts +2 -0
  108. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  109. package/dist/types/locus-info/index.d.ts +1 -1
  110. package/dist/types/locus-info/parser.d.ts +3 -2
  111. package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
  112. package/dist/types/meeting/in-meeting-actions.d.ts +4 -0
  113. package/dist/types/meeting/index.d.ts +285 -34
  114. package/dist/types/meeting/locusMediaRequest.d.ts +1 -2
  115. package/dist/types/meeting/muteState.d.ts +2 -8
  116. package/dist/types/meeting/request.d.ts +4 -1
  117. package/dist/types/meeting/util.d.ts +25 -1
  118. package/dist/types/meeting-info/index.d.ts +7 -0
  119. package/dist/types/meeting-info/meeting-info-v2.d.ts +1 -0
  120. package/dist/types/meetings/collection.d.ts +9 -0
  121. package/dist/types/meetings/index.d.ts +42 -14
  122. package/dist/types/member/index.d.ts +1 -0
  123. package/dist/types/members/types.d.ts +1 -0
  124. package/dist/types/members/util.d.ts +5 -0
  125. package/dist/types/metrics/constants.d.ts +15 -0
  126. package/dist/types/multistream/mediaRequestManager.d.ts +2 -0
  127. package/dist/types/multistream/remoteMediaGroup.d.ts +2 -0
  128. package/dist/types/multistream/remoteMediaManager.d.ts +25 -1
  129. package/dist/types/multistream/sendSlotManager.d.ts +9 -0
  130. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  131. package/dist/types/reachability/index.d.ts +59 -112
  132. package/dist/types/reachability/request.d.ts +1 -1
  133. package/dist/types/reachability/util.d.ts +8 -0
  134. package/dist/types/reconnection-manager/index.d.ts +10 -0
  135. package/dist/types/roap/index.d.ts +2 -1
  136. package/dist/types/roap/request.d.ts +2 -1
  137. package/dist/types/roap/turnDiscovery.d.ts +21 -4
  138. package/dist/types/rtcMetrics/index.d.ts +15 -1
  139. package/dist/types/statsAnalyzer/index.d.ts +28 -11
  140. package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
  141. package/dist/types/webinar/collection.d.ts +16 -0
  142. package/dist/types/webinar/index.d.ts +5 -0
  143. package/dist/webinar/collection.js +44 -0
  144. package/dist/webinar/collection.js.map +1 -0
  145. package/dist/webinar/index.js +69 -0
  146. package/dist/webinar/index.js.map +1 -0
  147. package/package.json +3 -2
  148. package/src/common/errors/no-meeting-info.ts +24 -0
  149. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  150. package/src/common/errors/webex-errors.ts +19 -2
  151. package/src/common/logs/request.ts +5 -1
  152. package/src/config.ts +1 -1
  153. package/src/constants.ts +71 -6
  154. package/src/index.ts +5 -0
  155. package/src/interceptors/index.ts +3 -0
  156. package/src/interceptors/locusRetry.ts +67 -0
  157. package/src/interpretation/index.ts +18 -1
  158. package/src/locus-info/index.ts +52 -16
  159. package/src/locus-info/mediaSharesUtils.ts +16 -0
  160. package/src/locus-info/parser.ts +47 -21
  161. package/src/media/index.ts +8 -6
  162. package/src/media/properties.ts +17 -2
  163. package/src/mediaQualityMetrics/config.ts +103 -238
  164. package/src/meeting/in-meeting-actions.ts +8 -0
  165. package/src/meeting/index.ts +1510 -529
  166. package/src/meeting/muteState.ts +34 -20
  167. package/src/meeting/request.ts +19 -1
  168. package/src/meeting/util.ts +97 -0
  169. package/src/meeting-info/index.ts +47 -20
  170. package/src/meeting-info/meeting-info-v2.ts +27 -5
  171. package/src/meeting-info/utilv2.ts +1 -1
  172. package/src/meetings/collection.ts +13 -0
  173. package/src/meetings/index.ts +112 -31
  174. package/src/meetings/util.ts +2 -8
  175. package/src/member/index.ts +9 -0
  176. package/src/member/util.ts +14 -0
  177. package/src/members/index.ts +29 -2
  178. package/src/members/types.ts +1 -0
  179. package/src/members/util.ts +15 -1
  180. package/src/metrics/constants.ts +14 -0
  181. package/src/multistream/mediaRequestManager.ts +4 -1
  182. package/src/multistream/remoteMediaGroup.ts +19 -0
  183. package/src/multistream/remoteMediaManager.ts +141 -18
  184. package/src/multistream/sendSlotManager.ts +29 -0
  185. package/src/reachability/clusterReachability.ts +320 -0
  186. package/src/reachability/index.ts +221 -382
  187. package/src/reachability/request.ts +1 -1
  188. package/src/reachability/util.ts +24 -0
  189. package/src/reconnection-manager/index.ts +87 -83
  190. package/src/roap/index.ts +60 -24
  191. package/src/roap/request.ts +3 -16
  192. package/src/roap/turnDiscovery.ts +112 -39
  193. package/src/rtcMetrics/index.ts +71 -5
  194. package/src/statsAnalyzer/index.ts +430 -427
  195. package/src/statsAnalyzer/mqaUtil.ts +317 -168
  196. package/src/webinar/collection.ts +31 -0
  197. package/src/webinar/index.ts +62 -0
  198. package/test/integration/spec/converged-space-meetings.js +7 -7
  199. package/test/integration/spec/journey.js +86 -104
  200. package/test/integration/spec/space-meeting.js +9 -9
  201. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  202. package/test/unit/spec/interpretation/index.ts +36 -3
  203. package/test/unit/spec/locus-info/index.js +205 -12
  204. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  205. package/test/unit/spec/locus-info/mediaSharesUtils.ts +10 -0
  206. package/test/unit/spec/locus-info/parser.js +54 -13
  207. package/test/unit/spec/media/index.ts +20 -4
  208. package/test/unit/spec/media/properties.ts +2 -2
  209. package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
  210. package/test/unit/spec/meeting/index.js +4027 -1075
  211. package/test/unit/spec/meeting/muteState.js +219 -67
  212. package/test/unit/spec/meeting/request.js +63 -12
  213. package/test/unit/spec/meeting/utils.js +93 -0
  214. package/test/unit/spec/meeting-info/index.js +180 -61
  215. package/test/unit/spec/meeting-info/meetinginfov2.js +196 -53
  216. package/test/unit/spec/meetings/collection.js +12 -0
  217. package/test/unit/spec/meetings/index.js +619 -206
  218. package/test/unit/spec/meetings/utils.js +35 -12
  219. package/test/unit/spec/member/index.js +8 -7
  220. package/test/unit/spec/member/util.js +32 -0
  221. package/test/unit/spec/members/index.js +130 -17
  222. package/test/unit/spec/members/utils.js +26 -0
  223. package/test/unit/spec/multistream/mediaRequestManager.ts +20 -2
  224. package/test/unit/spec/multistream/remoteMediaGroup.ts +80 -1
  225. package/test/unit/spec/multistream/remoteMediaManager.ts +210 -3
  226. package/test/unit/spec/multistream/sendSlotManager.ts +50 -18
  227. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  228. package/test/unit/spec/reachability/index.ts +505 -135
  229. package/test/unit/spec/reachability/util.ts +40 -0
  230. package/test/unit/spec/reconnection-manager/index.js +74 -17
  231. package/test/unit/spec/roap/index.ts +181 -61
  232. package/test/unit/spec/roap/request.ts +27 -3
  233. package/test/unit/spec/roap/turnDiscovery.ts +362 -101
  234. package/test/unit/spec/rtcMetrics/index.ts +57 -3
  235. package/test/unit/spec/stats-analyzer/index.js +1225 -12
  236. package/test/unit/spec/webinar/collection.ts +13 -0
  237. package/test/unit/spec/webinar/index.ts +60 -0
  238. package/test/utils/integrationTestUtils.js +4 -4
  239. package/test/utils/webex-test-users.js +12 -4
@@ -57,6 +57,7 @@ var _collection = _interopRequireDefault(require("./collection"));
57
57
  var _util2 = _interopRequireDefault(require("./util"));
58
58
  var _permission = _interopRequireDefault(require("../common/errors/permission"));
59
59
  var _webexErrors = require("../common/errors/webex-errors");
60
+ var _noMeetingInfo = _interopRequireDefault(require("../common/errors/no-meeting-info"));
60
61
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
61
62
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
62
63
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -583,7 +584,9 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
583
584
 
584
585
  // @ts-ignore
585
586
  this.webex.internal.mercury.on(_constants.ONLINE, function () {
586
- _this3.syncMeetings();
587
+ _this3.syncMeetings({
588
+ keepOnlyLocusMeetings: false
589
+ });
587
590
  });
588
591
 
589
592
  // @ts-ignore
@@ -686,40 +689,43 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
686
689
  }
687
690
 
688
691
  /**
689
- * API to enable or disable TURN discovery
690
- * @param {Boolean} enable
692
+ * API to toggle starting adhoc meeting
693
+ * @param {Boolean} changeState
691
694
  * @private
692
695
  * @memberof Meetings
693
696
  * @returns {undefined}
694
697
  */
695
698
  }, {
696
- key: "_toggleTurnDiscovery",
697
- value: function _toggleTurnDiscovery(enable) {
698
- if (typeof enable !== 'boolean') {
699
+ key: "_toggleAdhocMeetings",
700
+ value: function _toggleAdhocMeetings(changeState) {
701
+ var _this$config2, _this$config2$experim;
702
+ if (typeof changeState !== 'boolean') {
699
703
  return;
700
704
  }
701
705
  // @ts-ignore
702
- this.config.experimental.enableTurnDiscovery = enable;
706
+ if (((_this$config2 = this.config) === null || _this$config2 === void 0 ? void 0 : (_this$config2$experim = _this$config2.experimental) === null || _this$config2$experim === void 0 ? void 0 : _this$config2$experim.enableAdhocMeetings) !== changeState) {
707
+ // @ts-ignore
708
+ this.config.experimental.enableAdhocMeetings = changeState;
709
+ }
703
710
  }
704
711
 
705
712
  /**
706
- * API to toggle starting adhoc meeting
707
- * @param {Boolean} changeState
713
+ * API to toggle TCP reachability, needs to be called before webex.meetings.register()
714
+ * @param {Boolean} newValue
708
715
  * @private
709
716
  * @memberof Meetings
710
717
  * @returns {undefined}
711
718
  */
712
719
  }, {
713
- key: "_toggleAdhocMeetings",
714
- value: function _toggleAdhocMeetings(changeState) {
715
- var _this$config2, _this$config2$experim;
716
- if (typeof changeState !== 'boolean') {
720
+ key: "_toggleTcpReachability",
721
+ value: function _toggleTcpReachability(newValue) {
722
+ if (typeof newValue !== 'boolean') {
717
723
  return;
718
724
  }
719
725
  // @ts-ignore
720
- if (((_this$config2 = this.config) === null || _this$config2 === void 0 ? void 0 : (_this$config2$experim = _this$config2.experimental) === null || _this$config2$experim === void 0 ? void 0 : _this$config2$experim.enableAdhocMeetings) !== changeState) {
726
+ if (this.config.experimental.enableTcpReachability !== newValue) {
721
727
  // @ts-ignore
722
- this.config.experimental.enableAdhocMeetings = changeState;
728
+ this.config.experimental.enableTcpReachability = newValue;
723
729
  }
724
730
  }
725
731
 
@@ -972,12 +978,19 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
972
978
  }
973
979
 
974
980
  /**
975
- * Create a meeting.
981
+ * Create a meeting or return an existing meeting.
982
+ *
983
+ * When meeting info passed it should be complete, e.g.: fetched after password or captcha provided
984
+ *
976
985
  * @param {string} destination - sipURL, phonenumber, or locus object}
977
986
  * @param {string} [type] - the optional specified type, such as locusId
978
987
  * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
979
988
  * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
980
- * @param {string} correlationId - the optional specified correlationId
989
+ * @param {string} correlationId - the optional specified correlationId (callStateForMetrics.correlationId can be provided instead)
990
+ * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
991
+ * @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics
992
+ * @param {Object} [meetingInfo] - Pre-fetched complete meeting info
993
+ * @param {String} [meetingLookupUrl] - meeting info prefetch url
981
994
  * @returns {Promise<Meeting>} A new Meeting.
982
995
  * @public
983
996
  * @memberof Meetings
@@ -990,12 +1003,21 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
990
1003
  var useRandomDelayForInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
991
1004
  var infoExtraParams = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
992
1005
  var correlationId = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
1006
+ var failOnMissingMeetingInfo = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
1007
+ var callStateForMetrics = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : undefined;
1008
+ var meetingInfo = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : undefined;
1009
+ var meetingLookupUrl = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : undefined;
993
1010
  // TODO: type should be from a dictionary
994
1011
 
995
1012
  // Validate meeting information based on the provided destination and
996
1013
  // type. This must be performed prior to determining if the meeting is
997
1014
  // found in the collection, as we mutate the destination for hydra person
998
1015
  // id values.
1016
+ if (correlationId) {
1017
+ callStateForMetrics = _objectSpread(_objectSpread({}, callStateForMetrics || {}), {}, {
1018
+ correlationId: correlationId
1019
+ });
1020
+ }
999
1021
  return this.meetingInfo.fetchInfoOptions(destination, type)
1000
1022
  // Catch a failure to fetch info options.
1001
1023
  .catch(function (error) {
@@ -1031,20 +1053,22 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1031
1053
  // Validate if a meeting was found.
1032
1054
  if (!meeting) {
1033
1055
  // Create a meeting based on the normalized destination and type.
1034
- return _this10.createMeeting(targetDest, type, useRandomDelayForInfo, infoExtraParams, correlationId).then(function (createdMeeting) {
1056
+ return _this10.createMeeting(targetDest, type, useRandomDelayForInfo, infoExtraParams, callStateForMetrics, failOnMissingMeetingInfo, meetingInfo, meetingLookupUrl).then(function (createdMeeting) {
1035
1057
  // If the meeting was successfully created.
1036
1058
  if (createdMeeting && createdMeeting.on) {
1037
1059
  // Create a destruction event for the meeting.
1038
1060
  createdMeeting.on(_constants.EVENTS.DESTROY_MEETING, function (payload) {
1039
1061
  // @ts-ignore
1040
1062
  if (_this10.config.autoUploadLogs) {
1041
- var _createdMeeting$locus, _createdMeeting$locus2, _createdMeeting$locus3, _createdMeeting$locus4;
1063
+ var _createdMeeting$locus, _createdMeeting$locus2, _createdMeeting$locus3, _createdMeeting$locus4, _createdMeeting$locus5, _createdMeeting$locus6;
1042
1064
  _this10.uploadLogs({
1043
1065
  callStart: (_createdMeeting$locus = createdMeeting.locusInfo) === null || _createdMeeting$locus === void 0 ? void 0 : (_createdMeeting$locus2 = _createdMeeting$locus.fullState) === null || _createdMeeting$locus2 === void 0 ? void 0 : _createdMeeting$locus2.lastActive,
1066
+ locussessionid: (_createdMeeting$locus3 = createdMeeting.locusInfo) === null || _createdMeeting$locus3 === void 0 ? void 0 : (_createdMeeting$locus4 = _createdMeeting$locus3.fullState) === null || _createdMeeting$locus4 === void 0 ? void 0 : _createdMeeting$locus4.sessionId,
1044
1067
  correlationId: createdMeeting.correlationId,
1045
1068
  feedbackId: createdMeeting.correlationId,
1046
1069
  locusId: createdMeeting.locusId,
1047
- meetingId: (_createdMeeting$locus3 = createdMeeting.locusInfo) === null || _createdMeeting$locus3 === void 0 ? void 0 : (_createdMeeting$locus4 = _createdMeeting$locus3.info) === null || _createdMeeting$locus4 === void 0 ? void 0 : _createdMeeting$locus4.webExMeetingId
1070
+ meetingId: (_createdMeeting$locus5 = createdMeeting.locusInfo) === null || _createdMeeting$locus5 === void 0 ? void 0 : (_createdMeeting$locus6 = _createdMeeting$locus5.info) === null || _createdMeeting$locus6 === void 0 ? void 0 : _createdMeeting$locus6.webExMeetingId,
1071
+ autoupload: true
1048
1072
  }).then(function () {
1049
1073
  return _this10.destroy(createdMeeting, payload.reason);
1050
1074
  });
@@ -1055,13 +1079,15 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1055
1079
  createdMeeting.on(_constants.EVENTS.REQUEST_UPLOAD_LOGS, function (meetingInstance) {
1056
1080
  // @ts-ignore
1057
1081
  if (_this10.config.autoUploadLogs) {
1058
- var _meetingInstance$locu, _meetingInstance$locu2, _meetingInstance$locu3, _meetingInstance$locu4;
1082
+ var _meetingInstance$locu, _meetingInstance$locu2, _meetingInstance$locu3, _meetingInstance$locu4, _meetingInstance$locu5, _meetingInstance$locu6;
1059
1083
  _this10.uploadLogs({
1060
1084
  callStart: meetingInstance === null || meetingInstance === void 0 ? void 0 : (_meetingInstance$locu = meetingInstance.locusInfo) === null || _meetingInstance$locu === void 0 ? void 0 : (_meetingInstance$locu2 = _meetingInstance$locu.fullState) === null || _meetingInstance$locu2 === void 0 ? void 0 : _meetingInstance$locu2.lastActive,
1085
+ locussessionid: meetingInstance === null || meetingInstance === void 0 ? void 0 : (_meetingInstance$locu3 = meetingInstance.locusInfo) === null || _meetingInstance$locu3 === void 0 ? void 0 : (_meetingInstance$locu4 = _meetingInstance$locu3.fullState) === null || _meetingInstance$locu4 === void 0 ? void 0 : _meetingInstance$locu4.sessionId,
1061
1086
  correlationId: meetingInstance.correlationId,
1062
1087
  feedbackId: meetingInstance.correlationId,
1063
1088
  locusId: meetingInstance.locusId,
1064
- meetingId: (_meetingInstance$locu3 = meetingInstance.locusInfo) === null || _meetingInstance$locu3 === void 0 ? void 0 : (_meetingInstance$locu4 = _meetingInstance$locu3.info) === null || _meetingInstance$locu4 === void 0 ? void 0 : _meetingInstance$locu4.webExMeetingId
1089
+ meetingId: (_meetingInstance$locu5 = meetingInstance.locusInfo) === null || _meetingInstance$locu5 === void 0 ? void 0 : (_meetingInstance$locu6 = _meetingInstance$locu5.info) === null || _meetingInstance$locu6 === void 0 ? void 0 : _meetingInstance$locu6.webExMeetingId,
1090
+ autoupload: true
1065
1091
  });
1066
1092
  }
1067
1093
  });
@@ -1073,6 +1099,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1073
1099
  return _promise.default.resolve(createdMeeting);
1074
1100
  });
1075
1101
  }
1102
+ meeting.setCallStateForMetrics(callStateForMetrics);
1076
1103
 
1077
1104
  // Return the existing meeting.
1078
1105
  return _promise.default.resolve(meeting);
@@ -1080,11 +1107,18 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1080
1107
  }
1081
1108
 
1082
1109
  /**
1110
+ * Create meeting
1111
+ *
1112
+ * When meeting info passed it should be complete, e.g.: fetched after password or captcha provided
1113
+ *
1083
1114
  * @param {String} destination see create()
1084
1115
  * @param {String} type see create()
1085
1116
  * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
1086
1117
  * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
1087
- * @param {String} correlationId the optional specified correlationId
1118
+ * @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics
1119
+ * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
1120
+ * @param {Object} [meetingInfo] - Pre-fetched complete meeting info
1121
+ * @param {String} [meetingLookupUrl] - meeting info prefetch url
1088
1122
  * @returns {Promise} a new meeting instance complete with meeting info and destination
1089
1123
  * @private
1090
1124
  * @memberof Meetings
@@ -1096,7 +1130,10 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1096
1130
  var type,
1097
1131
  useRandomDelayForInfo,
1098
1132
  infoExtraParams,
1099
- correlationId,
1133
+ callStateForMetrics,
1134
+ failOnMissingMeetingInfo,
1135
+ meetingInfo,
1136
+ meetingLookupUrl,
1100
1137
  meeting,
1101
1138
  _destination$fullStat,
1102
1139
  waitingTime,
@@ -1107,6 +1144,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1107
1144
  maxWaitingTime,
1108
1145
  isMeetingActive,
1109
1146
  enableUnifiedMeetings,
1147
+ meetingInfoOptions,
1110
1148
  meetingAddedType,
1111
1149
  _args3 = arguments;
1112
1150
  return _regenerator.default.wrap(function _callee3$(_context3) {
@@ -1115,7 +1153,10 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1115
1153
  type = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : null;
1116
1154
  useRandomDelayForInfo = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : false;
1117
1155
  infoExtraParams = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : {};
1118
- correlationId = _args3.length > 4 && _args3[4] !== undefined ? _args3[4] : undefined;
1156
+ callStateForMetrics = _args3.length > 4 && _args3[4] !== undefined ? _args3[4] : undefined;
1157
+ failOnMissingMeetingInfo = _args3.length > 5 && _args3[5] !== undefined ? _args3[5] : false;
1158
+ meetingInfo = _args3.length > 6 && _args3[6] !== undefined ? _args3[6] : undefined;
1159
+ meetingLookupUrl = _args3.length > 7 && _args3[7] !== undefined ? _args3[7] : undefined;
1119
1160
  meeting = new _meeting.default({
1120
1161
  // @ts-ignore
1121
1162
  userId: this.webex.internal.device.userId,
@@ -1128,13 +1169,13 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1128
1169
  meetingInfoProvider: this.meetingInfo,
1129
1170
  destination: destination,
1130
1171
  destinationType: type,
1131
- correlationId: correlationId
1172
+ callStateForMetrics: callStateForMetrics
1132
1173
  }, {
1133
1174
  // @ts-ignore
1134
1175
  parent: this.webex
1135
1176
  });
1136
1177
  this.meetingCollection.set(meeting);
1137
- _context3.prev = 6;
1178
+ _context3.prev = 9;
1138
1179
  // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,
1139
1180
  // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo
1140
1181
  // between 5 and 2 min (random between 3 minutes) before the meeting starts
@@ -1150,37 +1191,57 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1150
1191
  }
1151
1192
  isMeetingActive = !!((_destination$fullStat = destination.fullState) !== null && _destination$fullStat !== void 0 && _destination$fullStat.active); // @ts-ignore
1152
1193
  enableUnifiedMeetings = this.config.experimental.enableUnifiedMeetings;
1194
+ meetingInfoOptions = {
1195
+ extraParams: infoExtraParams,
1196
+ sendCAevents: !!(callStateForMetrics !== null && callStateForMetrics !== void 0 && callStateForMetrics.correlationId) // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user
1197
+ };
1198
+ if (!meetingInfo) {
1199
+ _context3.next = 19;
1200
+ break;
1201
+ }
1202
+ meeting.injectMeetingInfo(meetingInfo, meetingInfoOptions, meetingLookupUrl);
1203
+ _context3.next = 26;
1204
+ break;
1205
+ case 19:
1153
1206
  if (!(enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0)) {
1154
- _context3.next = 16;
1207
+ _context3.next = 24;
1155
1208
  break;
1156
1209
  }
1157
1210
  meeting.fetchMeetingInfoTimeoutId = setTimeout(function () {
1158
- return meeting.fetchMeetingInfo({
1159
- extraParams: infoExtraParams
1160
- });
1211
+ return meeting.fetchMeetingInfo(meetingInfoOptions);
1161
1212
  }, waitingTime);
1162
1213
  meeting.parseMeetingInfo(undefined, destination);
1163
- _context3.next = 18;
1214
+ _context3.next = 26;
1164
1215
  break;
1165
- case 16:
1166
- _context3.next = 18;
1167
- return meeting.fetchMeetingInfo({
1168
- extraParams: infoExtraParams
1169
- });
1170
- case 18:
1171
- _context3.next = 24;
1216
+ case 24:
1217
+ _context3.next = 26;
1218
+ return meeting.fetchMeetingInfo(meetingInfoOptions);
1219
+ case 26:
1220
+ _context3.next = 38;
1172
1221
  break;
1173
- case 20:
1174
- _context3.prev = 20;
1175
- _context3.t0 = _context3["catch"](6);
1176
- if (!(_context3.t0 instanceof _captchaError.default) && !(_context3.t0 instanceof _passwordError.default) && !(_context3.t0 instanceof _permission.default)) {
1177
- // if there is no meeting info we assume its a 1:1 call or wireless share
1178
- _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Info Unable to fetch meeting info for ".concat(destination, "."));
1179
- _loggerProxy.default.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
1222
+ case 28:
1223
+ _context3.prev = 28;
1224
+ _context3.t0 = _context3["catch"](9);
1225
+ if (!(!(_context3.t0 instanceof _captchaError.default) && !(_context3.t0 instanceof _passwordError.default) && !(_context3.t0 instanceof _permission.default))) {
1226
+ _context3.next = 37;
1227
+ break;
1228
+ }
1229
+ _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Info Unable to fetch meeting info for ".concat(destination, "."));
1230
+ if (!failOnMissingMeetingInfo) {
1231
+ _context3.next = 36;
1232
+ break;
1180
1233
  }
1234
+ _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Destroying meeting due to missing meeting info.");
1235
+ // @ts-ignore
1236
+ this.destroy(meeting, _constants.MEETING_REMOVED_REASON.MISSING_MEETING_INFO);
1237
+ throw new _noMeetingInfo.default();
1238
+ case 36:
1239
+ // if there is no meeting info and no error should be thrown then we assume its a 1:1 call or wireless share
1240
+ _loggerProxy.default.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
1241
+ case 37:
1181
1242
  _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context3.t0, " fetching /meetingInfo for creation."));
1182
- case 24:
1183
- _context3.prev = 24;
1243
+ case 38:
1244
+ _context3.prev = 38;
1184
1245
  // For type LOCUS_ID we need to parse the locus object to get the information
1185
1246
  // about the caller and callee
1186
1247
  // Meeting Added event will be created in `handleLocusEvent`
@@ -1200,14 +1261,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1200
1261
  type: meetingAddedType
1201
1262
  });
1202
1263
  }
1203
- return _context3.finish(24);
1204
- case 27:
1264
+ return _context3.finish(38);
1265
+ case 41:
1205
1266
  return _context3.abrupt("return", meeting);
1206
- case 28:
1267
+ case 42:
1207
1268
  case "end":
1208
1269
  return _context3.stop();
1209
1270
  }
1210
- }, _callee3, this, [[6, 20, 24, 27]]);
1271
+ }, _callee3, this, [[9, 28, 38, 41]]);
1211
1272
  }));
1212
1273
  function createMeeting(_x3) {
1213
1274
  return _createMeeting.apply(this, arguments);
@@ -1247,8 +1308,9 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1247
1308
  }
1248
1309
 
1249
1310
  /**
1250
- * syncs all the meeting from server
1251
- * @returns {undefined}
1311
+ * Syncs all the meetings from server. Does nothing and returns immediately if unverified guest.
1312
+ * @param {boolean} keepOnlyLocusMeetings - whether the sync should keep only locus meetings or any other meeting in meetingCollection
1313
+ * @returns {Promise<void>}
1252
1314
  * @public
1253
1315
  * @memberof Meetings
1254
1316
  */
@@ -1256,6 +1318,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1256
1318
  key: "syncMeetings",
1257
1319
  value: function syncMeetings() {
1258
1320
  var _this11 = this;
1321
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1322
+ _ref3$keepOnlyLocusMe = _ref3.keepOnlyLocusMeetings,
1323
+ keepOnlyLocusMeetings = _ref3$keepOnlyLocusMe === void 0 ? true : _ref3$keepOnlyLocusMe;
1324
+ // @ts-ignore
1325
+ if (this.webex.credentials.isUnverifiedGuest) {
1326
+ _loggerProxy.default.logger.info('Meetings:index#syncMeetings --> skipping meeting sync as unverified guest');
1327
+ return _promise.default.resolve();
1328
+ }
1259
1329
  return this.request.getActiveMeetings().then(function (locusArray) {
1260
1330
  var activeLocusUrl = [];
1261
1331
  if (locusArray !== null && locusArray !== void 0 && locusArray.loci && locusArray.loci.length > 0) {
@@ -1270,12 +1340,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1270
1340
  }
1271
1341
  var meetingsCollection = _this11.meetingCollection.getAll();
1272
1342
  if ((0, _keys.default)(meetingsCollection).length > 0) {
1273
- // Some time the mercury event is missed after mercury reconnect
1274
- // if sync returns no locus then clear all the meetings
1343
+ // Sometimes the mercury events are lost after mercury reconnect
1344
+ // Remove any Locus meetings that are not returned by Locus
1345
+ // (they had a locusUrl previously but are no longer active) in the sync
1275
1346
  for (var _i = 0, _Object$values = (0, _values.default)(meetingsCollection); _i < _Object$values.length; _i++) {
1276
1347
  var meeting = _Object$values[_i];
1277
1348
  // @ts-ignore
1278
- if (!activeLocusUrl.includes(meeting.locusUrl)) {
1349
+ var locusUrl = meeting.locusUrl;
1350
+ if ((keepOnlyLocusMeetings || locusUrl) && !activeLocusUrl.includes(locusUrl)) {
1279
1351
  // destroy function also uploads logs
1280
1352
  // @ts-ignore
1281
1353
  _this11.destroy(meeting, _constants.MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
@@ -1384,6 +1456,19 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1384
1456
  value: function getLogger() {
1385
1457
  return _loggerProxy.default.get();
1386
1458
  }
1459
+
1460
+ /**
1461
+ * Returns the first meeting it finds that has the webrtc media connection created.
1462
+ * Useful for debugging in the console.
1463
+ *
1464
+ * @private
1465
+ * @returns {Meeting} Meeting object that has a webrtc media connection, else undefined
1466
+ */
1467
+ }, {
1468
+ key: "getActiveWebrtcMeeting",
1469
+ value: function getActiveWebrtcMeeting() {
1470
+ return this.meetingCollection.getActiveWebrtcMeeting();
1471
+ }
1387
1472
  }]);
1388
1473
  return Meetings;
1389
1474
  }(_webexCore.WebexPlugin);