@webex/plugin-meetings 3.8.1 → 3.9.0-multiple-llm.2

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 (319) hide show
  1. package/README.md +26 -13
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/constants.js +34 -3
  5. package/dist/constants.js.map +1 -1
  6. package/dist/controls-options-manager/enums.js +1 -0
  7. package/dist/controls-options-manager/enums.js.map +1 -1
  8. package/dist/controls-options-manager/types.js.map +1 -1
  9. package/dist/controls-options-manager/util.js +26 -0
  10. package/dist/controls-options-manager/util.js.map +1 -1
  11. package/dist/interpretation/index.js +1 -1
  12. package/dist/interpretation/siLanguage.js +1 -1
  13. package/dist/locus-info/controlsUtils.js +11 -3
  14. package/dist/locus-info/controlsUtils.js.map +1 -1
  15. package/dist/locus-info/index.js +107 -95
  16. package/dist/locus-info/index.js.map +1 -1
  17. package/dist/locus-info/parser.js +4 -1
  18. package/dist/locus-info/parser.js.map +1 -1
  19. package/dist/media/index.js +2 -2
  20. package/dist/media/index.js.map +1 -1
  21. package/dist/media/properties.js +53 -5
  22. package/dist/media/properties.js.map +1 -1
  23. package/dist/meeting/brbState.js +17 -14
  24. package/dist/meeting/brbState.js.map +1 -1
  25. package/dist/meeting/in-meeting-actions.js +13 -1
  26. package/dist/meeting/in-meeting-actions.js.map +1 -1
  27. package/dist/meeting/index.js +555 -296
  28. package/dist/meeting/index.js.map +1 -1
  29. package/dist/meeting/muteState.js +2 -5
  30. package/dist/meeting/muteState.js.map +1 -1
  31. package/dist/meeting/request.js +44 -0
  32. package/dist/meeting/request.js.map +1 -1
  33. package/dist/meeting/request.type.js.map +1 -1
  34. package/dist/{rtcMetrics/constants.js → meeting/type.js} +1 -5
  35. package/dist/meeting/type.js.map +1 -0
  36. package/dist/meeting/util.js +98 -13
  37. package/dist/meeting/util.js.map +1 -1
  38. package/dist/meeting-info/meeting-info-v2.js +29 -21
  39. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  40. package/dist/meetings/index.js +18 -10
  41. package/dist/meetings/index.js.map +1 -1
  42. package/dist/member/types.js.map +1 -1
  43. package/dist/members/collection.js +13 -0
  44. package/dist/members/collection.js.map +1 -1
  45. package/dist/members/index.js +53 -29
  46. package/dist/members/index.js.map +1 -1
  47. package/dist/members/request.js +3 -3
  48. package/dist/members/request.js.map +1 -1
  49. package/dist/members/util.js +25 -8
  50. package/dist/members/util.js.map +1 -1
  51. package/dist/metrics/constants.js +3 -1
  52. package/dist/metrics/constants.js.map +1 -1
  53. package/dist/multistream/mediaRequestManager.js +1 -1
  54. package/dist/multistream/mediaRequestManager.js.map +1 -1
  55. package/dist/multistream/remoteMedia.js +34 -5
  56. package/dist/multistream/remoteMedia.js.map +1 -1
  57. package/dist/multistream/remoteMediaGroup.js +42 -2
  58. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  59. package/dist/multistream/sendSlotManager.js +32 -2
  60. package/dist/multistream/sendSlotManager.js.map +1 -1
  61. package/dist/reachability/index.js +8 -13
  62. package/dist/reachability/index.js.map +1 -1
  63. package/dist/types/constants.d.ts +30 -0
  64. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  65. package/dist/types/controls-options-manager/types.d.ts +4 -1
  66. package/dist/types/locus-info/index.d.ts +54 -10
  67. package/dist/types/media/properties.d.ts +21 -0
  68. package/dist/types/meeting/brbState.d.ts +0 -1
  69. package/dist/types/meeting/in-meeting-actions.d.ts +12 -0
  70. package/dist/types/meeting/index.d.ts +58 -20
  71. package/dist/types/meeting/request.d.ts +18 -1
  72. package/dist/types/meeting/request.type.d.ts +74 -0
  73. package/dist/types/meeting/type.d.ts +9 -0
  74. package/dist/types/meeting/util.d.ts +13 -3
  75. package/dist/types/meeting-info/meeting-info-v2.d.ts +6 -3
  76. package/dist/types/meetings/index.d.ts +3 -1
  77. package/dist/types/member/types.d.ts +1 -0
  78. package/dist/types/members/collection.d.ts +6 -0
  79. package/dist/types/members/index.d.ts +22 -9
  80. package/dist/types/members/request.d.ts +1 -1
  81. package/dist/types/members/util.d.ts +13 -6
  82. package/dist/types/metrics/constants.d.ts +2 -0
  83. package/dist/types/multistream/remoteMedia.d.ts +20 -1
  84. package/dist/types/multistream/remoteMediaGroup.d.ts +11 -0
  85. package/dist/types/multistream/sendSlotManager.d.ts +16 -0
  86. package/dist/types/reachability/index.d.ts +2 -2
  87. package/dist/webinar/index.js +1 -1
  88. package/package.json +25 -26
  89. package/src/constants.ts +34 -2
  90. package/src/controls-options-manager/enums.ts +1 -0
  91. package/src/controls-options-manager/types.ts +6 -1
  92. package/src/controls-options-manager/util.ts +31 -0
  93. package/src/locus-info/controlsUtils.ts +15 -0
  94. package/src/locus-info/index.ts +174 -96
  95. package/src/locus-info/parser.ts +5 -1
  96. package/src/media/index.ts +2 -2
  97. package/src/media/properties.ts +43 -0
  98. package/src/meeting/brbState.ts +13 -9
  99. package/src/meeting/in-meeting-actions.ts +25 -0
  100. package/src/meeting/index.ts +362 -75
  101. package/src/meeting/muteState.ts +2 -6
  102. package/src/meeting/request.ts +39 -0
  103. package/src/meeting/request.type.ts +64 -0
  104. package/src/meeting/type.ts +9 -0
  105. package/src/meeting/util.ts +114 -22
  106. package/src/meeting-info/meeting-info-v2.ts +24 -5
  107. package/src/meetings/index.ts +12 -5
  108. package/src/member/types.ts +1 -0
  109. package/src/members/collection.ts +11 -0
  110. package/src/members/index.ts +51 -15
  111. package/src/members/request.ts +2 -2
  112. package/src/members/util.ts +34 -6
  113. package/src/metrics/constants.ts +2 -0
  114. package/src/multistream/mediaRequestManager.ts +7 -7
  115. package/src/multistream/remoteMedia.ts +34 -4
  116. package/src/multistream/remoteMediaGroup.ts +37 -2
  117. package/src/multistream/sendSlotManager.ts +34 -2
  118. package/src/reachability/index.ts +8 -16
  119. package/test/unit/spec/common/browser-detection.js +0 -24
  120. package/test/unit/spec/controls-options-manager/util.js +58 -0
  121. package/test/unit/spec/locus-info/controlsUtils.js +52 -0
  122. package/test/unit/spec/locus-info/index.js +270 -97
  123. package/test/unit/spec/locus-info/parser.js +3 -2
  124. package/test/unit/spec/media/index.ts +107 -0
  125. package/test/unit/spec/media/properties.ts +137 -0
  126. package/test/unit/spec/meeting/brbState.ts +23 -4
  127. package/test/unit/spec/meeting/in-meeting-actions.ts +12 -0
  128. package/test/unit/spec/meeting/index.js +1194 -97
  129. package/test/unit/spec/meeting/muteState.js +32 -6
  130. package/test/unit/spec/meeting/request.js +92 -0
  131. package/test/unit/spec/meeting/utils.js +167 -17
  132. package/test/unit/spec/meeting-info/meetinginfov2.js +8 -3
  133. package/test/unit/spec/meetings/index.js +12 -5
  134. package/test/unit/spec/members/collection.js +120 -0
  135. package/test/unit/spec/members/index.js +140 -12
  136. package/test/unit/spec/members/request.js +57 -2
  137. package/test/unit/spec/members/utils.js +139 -17
  138. package/test/unit/spec/multistream/mediaRequestManager.ts +19 -6
  139. package/test/unit/spec/multistream/remoteMedia.ts +66 -2
  140. package/test/unit/spec/multistream/sendSlotManager.ts +59 -0
  141. package/test/unit/spec/reachability/index.ts +160 -9
  142. package/test/unit/spec/roap/turnDiscovery.ts +3 -3
  143. package/dist/annotation/annotation.types.d.ts +0 -42
  144. package/dist/annotation/constants.d.ts +0 -31
  145. package/dist/annotation/index.d.ts +0 -117
  146. package/dist/breakouts/breakout.d.ts +0 -8
  147. package/dist/breakouts/collection.d.ts +0 -5
  148. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  149. package/dist/breakouts/events.d.ts +0 -8
  150. package/dist/breakouts/index.d.ts +0 -5
  151. package/dist/breakouts/request.d.ts +0 -22
  152. package/dist/breakouts/utils.d.ts +0 -15
  153. package/dist/common/browser-detection.d.ts +0 -9
  154. package/dist/common/collection.d.ts +0 -48
  155. package/dist/common/config.d.ts +0 -2
  156. package/dist/common/errors/captcha-error.d.ts +0 -15
  157. package/dist/common/errors/intent-to-join.d.ts +0 -16
  158. package/dist/common/errors/join-meeting.d.ts +0 -17
  159. package/dist/common/errors/media.d.ts +0 -15
  160. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  161. package/dist/common/errors/parameter.d.ts +0 -15
  162. package/dist/common/errors/password-error.d.ts +0 -15
  163. package/dist/common/errors/permission.d.ts +0 -14
  164. package/dist/common/errors/reclaim-host-role-error.d.ts +0 -60
  165. package/dist/common/errors/reclaim-host-role-error.js +0 -158
  166. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  167. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  168. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  169. package/dist/common/errors/reconnection-in-progress.js +0 -35
  170. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  171. package/dist/common/errors/reconnection.d.ts +0 -15
  172. package/dist/common/errors/stats.d.ts +0 -15
  173. package/dist/common/errors/webex-errors.d.ts +0 -81
  174. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  175. package/dist/common/events/events-scope.d.ts +0 -17
  176. package/dist/common/events/events.d.ts +0 -12
  177. package/dist/common/events/trigger-proxy.d.ts +0 -2
  178. package/dist/common/events/util.d.ts +0 -2
  179. package/dist/common/logs/logger-config.d.ts +0 -2
  180. package/dist/common/logs/logger-proxy.d.ts +0 -2
  181. package/dist/common/logs/request.d.ts +0 -34
  182. package/dist/common/queue.d.ts +0 -32
  183. package/dist/config.d.ts +0 -73
  184. package/dist/constants.d.ts +0 -952
  185. package/dist/controls-options-manager/constants.d.ts +0 -4
  186. package/dist/controls-options-manager/enums.d.ts +0 -5
  187. package/dist/controls-options-manager/index.d.ts +0 -120
  188. package/dist/controls-options-manager/types.d.ts +0 -43
  189. package/dist/controls-options-manager/util.d.ts +0 -7
  190. package/dist/index.d.ts +0 -4
  191. package/dist/interceptors/index.d.ts +0 -2
  192. package/dist/interceptors/locusRetry.d.ts +0 -27
  193. package/dist/interpretation/collection.d.ts +0 -5
  194. package/dist/interpretation/index.d.ts +0 -5
  195. package/dist/interpretation/siLanguage.d.ts +0 -5
  196. package/dist/locus-info/controlsUtils.d.ts +0 -2
  197. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  198. package/dist/locus-info/fullState.d.ts +0 -2
  199. package/dist/locus-info/hostUtils.d.ts +0 -2
  200. package/dist/locus-info/index.d.ts +0 -269
  201. package/dist/locus-info/infoUtils.d.ts +0 -2
  202. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  203. package/dist/locus-info/parser.d.ts +0 -212
  204. package/dist/locus-info/selfUtils.d.ts +0 -2
  205. package/dist/media/index.d.ts +0 -32
  206. package/dist/media/properties.d.ts +0 -108
  207. package/dist/media/util.d.ts +0 -2
  208. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  209. package/dist/mediaQualityMetrics/config.js +0 -513
  210. package/dist/mediaQualityMetrics/config.js.map +0 -1
  211. package/dist/meeting/effectsState.d.ts +0 -42
  212. package/dist/meeting/effectsState.js +0 -260
  213. package/dist/meeting/effectsState.js.map +0 -1
  214. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  215. package/dist/meeting/index.d.ts +0 -1622
  216. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  217. package/dist/meeting/muteState.d.ts +0 -116
  218. package/dist/meeting/request.d.ts +0 -257
  219. package/dist/meeting/request.type.d.ts +0 -11
  220. package/dist/meeting/state.d.ts +0 -9
  221. package/dist/meeting/util.d.ts +0 -2
  222. package/dist/meeting/voicea-meeting.d.ts +0 -16
  223. package/dist/meeting-info/collection.d.ts +0 -20
  224. package/dist/meeting-info/index.d.ts +0 -57
  225. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  226. package/dist/meeting-info/request.d.ts +0 -22
  227. package/dist/meeting-info/util.d.ts +0 -2
  228. package/dist/meeting-info/utilv2.d.ts +0 -2
  229. package/dist/meetings/collection.d.ts +0 -23
  230. package/dist/meetings/index.d.ts +0 -296
  231. package/dist/meetings/meetings.types.d.ts +0 -4
  232. package/dist/meetings/request.d.ts +0 -27
  233. package/dist/meetings/util.d.ts +0 -18
  234. package/dist/member/index.d.ts +0 -148
  235. package/dist/member/member.types.d.ts +0 -11
  236. package/dist/member/member.types.js +0 -18
  237. package/dist/member/member.types.js.map +0 -1
  238. package/dist/member/types.d.ts +0 -32
  239. package/dist/member/util.d.ts +0 -2
  240. package/dist/members/collection.d.ts +0 -24
  241. package/dist/members/index.d.ts +0 -308
  242. package/dist/members/request.d.ts +0 -58
  243. package/dist/members/types.d.ts +0 -25
  244. package/dist/members/util.d.ts +0 -2
  245. package/dist/metrics/config.d.ts +0 -169
  246. package/dist/metrics/config.js +0 -289
  247. package/dist/metrics/config.js.map +0 -1
  248. package/dist/metrics/constants.d.ts +0 -59
  249. package/dist/metrics/index.d.ts +0 -152
  250. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  251. package/dist/multistream/receiveSlot.d.ts +0 -68
  252. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  253. package/dist/multistream/remoteMedia.d.ts +0 -72
  254. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  255. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  256. package/dist/multistream/sendSlotManager.d.ts +0 -69
  257. package/dist/networkQualityMonitor/index.d.ts +0 -70
  258. package/dist/networkQualityMonitor/index.js +0 -226
  259. package/dist/networkQualityMonitor/index.js.map +0 -1
  260. package/dist/peer-connection-manager/index.d.ts +0 -6
  261. package/dist/peer-connection-manager/index.js +0 -671
  262. package/dist/peer-connection-manager/index.js.map +0 -1
  263. package/dist/peer-connection-manager/util.d.ts +0 -6
  264. package/dist/peer-connection-manager/util.js +0 -110
  265. package/dist/peer-connection-manager/util.js.map +0 -1
  266. package/dist/personal-meeting-room/index.d.ts +0 -47
  267. package/dist/personal-meeting-room/request.d.ts +0 -14
  268. package/dist/personal-meeting-room/util.d.ts +0 -2
  269. package/dist/reachability/clusterReachability.d.ts +0 -109
  270. package/dist/reachability/index.d.ts +0 -139
  271. package/dist/reachability/request.d.ts +0 -35
  272. package/dist/reachability/util.d.ts +0 -8
  273. package/dist/reactions/constants.d.ts +0 -3
  274. package/dist/reactions/reactions.d.ts +0 -4
  275. package/dist/reactions/reactions.type.d.ts +0 -32
  276. package/dist/reconnection-manager/index.d.ts +0 -112
  277. package/dist/recording-controller/enums.d.ts +0 -7
  278. package/dist/recording-controller/index.d.ts +0 -193
  279. package/dist/recording-controller/util.d.ts +0 -13
  280. package/dist/roap/collection.d.ts +0 -10
  281. package/dist/roap/collection.js +0 -63
  282. package/dist/roap/collection.js.map +0 -1
  283. package/dist/roap/handler.d.ts +0 -47
  284. package/dist/roap/handler.js +0 -279
  285. package/dist/roap/handler.js.map +0 -1
  286. package/dist/roap/index.d.ts +0 -116
  287. package/dist/roap/request.d.ts +0 -35
  288. package/dist/roap/state.d.ts +0 -9
  289. package/dist/roap/state.js +0 -127
  290. package/dist/roap/state.js.map +0 -1
  291. package/dist/roap/turnDiscovery.d.ts +0 -81
  292. package/dist/roap/util.d.ts +0 -2
  293. package/dist/roap/util.js +0 -76
  294. package/dist/roap/util.js.map +0 -1
  295. package/dist/rtcMetrics/constants.d.ts +0 -4
  296. package/dist/rtcMetrics/constants.js.map +0 -1
  297. package/dist/rtcMetrics/index.d.ts +0 -61
  298. package/dist/rtcMetrics/index.js +0 -197
  299. package/dist/rtcMetrics/index.js.map +0 -1
  300. package/dist/statsAnalyzer/global.d.ts +0 -118
  301. package/dist/statsAnalyzer/global.js +0 -127
  302. package/dist/statsAnalyzer/global.js.map +0 -1
  303. package/dist/statsAnalyzer/index.d.ts +0 -193
  304. package/dist/statsAnalyzer/index.js +0 -1019
  305. package/dist/statsAnalyzer/index.js.map +0 -1
  306. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  307. package/dist/statsAnalyzer/mqaUtil.js +0 -181
  308. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  309. package/dist/transcription/index.d.ts +0 -64
  310. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  311. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  312. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  313. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  314. package/dist/types/rtcMetrics/index.d.ts +0 -71
  315. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  316. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  317. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  318. package/dist/webinar/collection.d.ts +0 -16
  319. package/dist/webinar/index.d.ts +0 -5
@@ -11,7 +11,6 @@ _Object$defineProperty(exports, "__esModule", {
11
11
  value: true
12
12
  });
13
13
  exports.default = void 0;
14
- var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
15
14
  var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array"));
16
15
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
17
16
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
@@ -69,7 +68,6 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
69
68
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "aclUrl", void 0);
70
69
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "baseSequence", void 0);
71
70
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "created", void 0);
72
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "deltaParticipants", void 0);
73
71
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "identities", void 0);
74
72
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "membership", void 0);
75
73
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "participants", void 0);
@@ -107,20 +105,29 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
107
105
  * Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.
108
106
  *
109
107
  * @param {Meeting} meeting
108
+ * @param {boolean} isLocusUrlChanged
109
+ * @param {Locus} locus
110
110
  * @returns {undefined}
111
111
  */
112
112
  (0, _createClass2.default)(LocusInfo, [{
113
113
  key: "doLocusSync",
114
- value: function doLocusSync(meeting) {
115
- var _this2 = this;
116
- var isDelta;
114
+ value: function doLocusSync(meeting, isLocusUrlChanged, locus) {
115
+ var _this$locusParser$wor,
116
+ _this2 = this;
117
117
  var url;
118
- if (this.locusParser.workingCopy.syncUrl) {
118
+ var isDelta = false;
119
+ var meetingDestroyed = false;
120
+ if (isLocusUrlChanged) {
121
+ // for the locus url changed case from breakout to main session, we should always do a full sync, in this case, the url from locus is always on main session,
122
+ // so use the main session locus url to get the full locus(full participants list in the response).
123
+ // for the locus url changed case from main session to breakout, we don't need to care about it here,
124
+ // because it is a USE_INCOMING case, it will not be executed here.
125
+ url = locus.url;
126
+ } else if ((_this$locusParser$wor = this.locusParser.workingCopy) !== null && _this$locusParser$wor !== void 0 && _this$locusParser$wor.syncUrl) {
119
127
  url = this.locusParser.workingCopy.syncUrl;
120
128
  isDelta = true;
121
129
  } else {
122
130
  url = meeting.locusUrl;
123
- isDelta = false;
124
131
  }
125
132
  _loggerProxy.default.logger.info("Locus-info:index#doLocusSync --> doing Locus sync (getting ".concat(isDelta ? 'delta' : 'full', " DTO)"));
126
133
 
@@ -139,30 +146,59 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
139
146
  code: e.code
140
147
  });
141
148
  isDelta = false;
142
- return meeting.meetingRequest.getLocusDTO({
143
- url: meeting.locusUrl
144
- }).catch(function (err) {
145
- _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting');
146
- _this2.webex.meetings.destroy(meeting, _constants.MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
147
- throw err;
148
- });
149
+
150
+ // Locus sometimes returns 403, for example if meeting has ended, no point trying the fallback to full sync in that case
151
+ if (e.statusCode !== 403) {
152
+ return meeting.meetingRequest.getLocusDTO({
153
+ url: meeting.locusUrl
154
+ }).catch(function (err) {
155
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting');
156
+ _this2.webex.meetings.destroy(meeting, _constants.MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
157
+ meetingDestroyed = true;
158
+ throw err;
159
+ });
160
+ }
161
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> got 403 from Locus, skipping fallback to full sync, destroying the meeting');
162
+ } else {
163
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting');
149
164
  }
150
- _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting');
151
165
  _this2.webex.meetings.destroy(meeting, _constants.MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
166
+ meetingDestroyed = true;
152
167
  throw e;
153
168
  }).then(function (res) {
169
+ if ((0, _lodash.isEmpty)(res.body)) {
170
+ if (isDelta) {
171
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO');
172
+ } else {
173
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> received empty body from full DTO sync request');
174
+ }
175
+ return;
176
+ }
154
177
  if (isDelta) {
155
- if (!(0, _lodash.isEmpty)(res.body)) {
178
+ if (res.body.baseSequence) {
156
179
  meeting.locusInfo.handleLocusDelta(res.body, meeting);
157
- } else {
158
- _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO');
180
+ return;
159
181
  }
160
- } else {
161
- meeting.locusInfo.onFullLocus(res.body);
182
+ // in some cases Locus might return us full DTO even when we asked for a delta
183
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> got full DTO when we asked for delta');
184
+ }
185
+ meeting.locusInfo.onFullLocus(res.body);
186
+ }).catch(function (e) {
187
+ _loggerProxy.default.logger.info("Locus-info:index#doLocusSync --> getLocusDTO succeeded but failed to handle result, locus parser will resume but not all data may be synced (".concat(e.toString(), ")"));
188
+ _metrics.default.sendBehavioralMetric(_constants2.default.LOCUS_SYNC_HANDLING_FAILED, {
189
+ correlationId: meeting.correlationId,
190
+ url: url,
191
+ reason: e.message,
192
+ errorName: e.name,
193
+ stack: e.stack,
194
+ code: e.code
195
+ });
196
+ }).finally(function () {
197
+ if (!meetingDestroyed) {
198
+ // Notify parser to resume processing delta events.
199
+ // Any deltas in the queue that have now been superseded by this sync will simply be ignored
200
+ _this2.locusParser.resume();
162
201
  }
163
- // Notify parser to resume processing delta events.
164
- // Any deltas in the queue that have now been superseded by this sync will simply be ignored
165
- _this2.locusParser.resume();
166
202
  });
167
203
  }
168
204
 
@@ -182,6 +218,7 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
182
218
  USE_INCOMING = _LocusDeltaParser$loc.USE_INCOMING,
183
219
  WAIT = _LocusDeltaParser$loc.WAIT,
184
220
  LOCUS_URL_CHANGED = _LocusDeltaParser$loc.LOCUS_URL_CHANGED;
221
+ var isLocusUrlChanged = action === LOCUS_URL_CHANGED;
185
222
  switch (action) {
186
223
  case USE_INCOMING:
187
224
  meeting.locusInfo.onDeltaLocus(locus);
@@ -192,7 +229,7 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
192
229
  break;
193
230
  case DESYNC:
194
231
  case LOCUS_URL_CHANGED:
195
- this.doLocusSync(meeting);
232
+ this.doLocusSync(meeting, isLocusUrlChanged, locus);
196
233
  break;
197
234
  default:
198
235
  _loggerProxy.default.logger.info("Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ".concat(action));
@@ -252,20 +289,10 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
252
289
  * @property {Object} person - Contains person data.
253
290
  */
254
291
 
255
- /**
256
- * Stored participant changes between the last event and the current event.
257
- * All previously stored events are overwritten between events.
258
- *
259
- * @instance
260
- * @type {Array<DeltaParticipant>}
261
- * @private
262
- * @member LocusInfo
263
- */
264
- this.deltaParticipants = [];
265
292
  this.updateLocusCache(locus);
266
293
  // above section only updates the locusInfo object
267
294
  // The below section makes sure it updates the locusInfo as well as updates the meeting object
268
- this.updateParticipants(locus.participants);
295
+ this.updateParticipants(locus.participants, []);
269
296
  // For 1:1 space meeting the conversation Url does not exist in locus.conversation
270
297
  this.updateConversationUrl(locus.conversationUrl, locus.info);
271
298
  this.updateControls(locus.controls, locus.self);
@@ -296,6 +323,18 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
296
323
  this.emitChange = true;
297
324
  }
298
325
 
326
+ /**
327
+ * Handles HTTP response from Locus API call.
328
+ * @param {Meeting} meeting meeting object
329
+ * @param {LocusApiResponseBody} responseBody body of the http response from Locus API call
330
+ * @returns {void}
331
+ */
332
+ }, {
333
+ key: "handleLocusAPIResponse",
334
+ value: function handleLocusAPIResponse(meeting, responseBody) {
335
+ this.handleLocusDelta(responseBody.locus, meeting);
336
+ }
337
+
299
338
  /**
300
339
  * @param {Meeting} meeting
301
340
  * @param {Object} data
@@ -309,6 +348,9 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
309
348
  var eventType = data.eventType;
310
349
  var locus = this.getTheLocusToUpdate(data.locus);
311
350
  _loggerProxy.default.logger.info("Locus-info:index#parse --> received locus data: ".concat(eventType));
351
+ locus.jsSdkMeta = {
352
+ removedParticipantIds: []
353
+ };
312
354
  switch (eventType) {
313
355
  case _constants.LOCUSEVENT.PARTICIPANT_JOIN:
314
356
  case _constants.LOCUSEVENT.PARTICIPANT_LEFT:
@@ -359,6 +401,7 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
359
401
  }, {
360
402
  key: "onFullLocus",
361
403
  value: function onFullLocus(locus, eventType) {
404
+ var _locus$jsSdkMeta;
362
405
  if (!locus) {
363
406
  _loggerProxy.default.logger.error('Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.');
364
407
  }
@@ -366,12 +409,11 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
366
409
  _loggerProxy.default.logger.info("Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=".concat(eventType));
367
410
  return;
368
411
  }
369
- this.updateParticipantDeltas(locus.participants);
370
412
  this.scheduledMeeting = locus.meeting || null;
371
413
  this.participants = locus.participants;
372
414
  var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
373
415
  this.updateLocusInfo(locus);
374
- this.updateParticipants(locus.participants, isReplaceMembers);
416
+ this.updateParticipants(locus.participants, (_locus$jsSdkMeta = locus.jsSdkMeta) === null || _locus$jsSdkMeta === void 0 ? void 0 : _locus$jsSdkMeta.removedParticipantIds, isReplaceMembers);
375
417
  this.isMeetingActive();
376
418
  this.handleOneOnOneEvent(eventType);
377
419
  this.updateEmbeddedApps(locus.embeddedApps);
@@ -423,10 +465,11 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
423
465
  }, {
424
466
  key: "onDeltaLocus",
425
467
  value: function onDeltaLocus(locus) {
468
+ var _locus$jsSdkMeta2;
426
469
  var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
427
470
  this.mergeParticipants(this.participants, locus.participants);
428
471
  this.updateLocusInfo(locus);
429
- this.updateParticipants(locus.participants, isReplaceMembers);
472
+ this.updateParticipants(locus.participants, (_locus$jsSdkMeta2 = locus.jsSdkMeta) === null || _locus$jsSdkMeta2 === void 0 ? void 0 : _locus$jsSdkMeta2.removedParticipantIds, isReplaceMembers);
430
473
  this.isMeetingActive();
431
474
  }
432
475
 
@@ -450,12 +493,12 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
450
493
  this.updateCreated(locus.created);
451
494
  this.updateFullState(locus.fullState);
452
495
  this.updateHostInfo(locus.host);
496
+ this.updateLocusUrl(locus.url);
453
497
  this.updateMeetingInfo(locus.info, locus.self);
454
498
  this.updateMediaShares(locus.mediaShares);
455
499
  this.updateParticipantsUrl(locus.participantsUrl);
456
500
  this.updateReplace(locus.replace);
457
501
  this.updateSelf(locus.self);
458
- this.updateLocusUrl(locus.url);
459
502
  this.updateAclUrl(locus.aclUrl);
460
503
  this.updateBasequence(locus.baseSequence);
461
504
  this.updateSequence(locus.sequence);
@@ -657,74 +700,24 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
657
700
  }
658
701
  }
659
702
 
660
- /**
661
- * Update the deltaParticipants property of this object based on a list of
662
- * provided participants.
663
- *
664
- * @param {Array} [participants] - The participants to update against.
665
- * @returns {void}
666
- */
667
- }, {
668
- key: "updateParticipantDeltas",
669
- value: function updateParticipantDeltas() {
670
- var _this4 = this;
671
- var participants = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
672
- // Used to find a participant within a participants collection.
673
- var findParticipant = function findParticipant(participant, collection) {
674
- return collection.find(function (item) {
675
- return item.person.id === participant.person.id;
676
- });
677
- };
678
-
679
- // Generates an object that indicates which state properties have changed.
680
- var generateDelta = function generateDelta() {
681
- var prevState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
682
- var newState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
683
- // Setup deltas.
684
- var deltas = {
685
- audioStatus: prevState.audioStatus !== newState.audioStatus,
686
- videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,
687
- videoStatus: prevState.videoStatus !== newState.videoStatus
688
- };
689
-
690
- // Clean the object
691
- (0, _keys.default)(deltas).forEach(function (key) {
692
- if (deltas[key] !== true) {
693
- delete deltas[key];
694
- }
695
- });
696
- return deltas;
697
- };
698
- this.deltaParticipants = participants.reduce(function (collection, participant) {
699
- var existingParticipant = findParticipant(participant, _this4.participants || []) || {};
700
- var delta = generateDelta(existingParticipant.status, participant.status);
701
- var changed = (0, _keys.default)(delta).length > 0;
702
- if (changed) {
703
- collection.push({
704
- person: participant.person,
705
- delta: delta
706
- });
707
- }
708
- return collection;
709
- }, []);
710
- }
711
-
712
703
  /**
713
704
  * update meeting's members
714
705
  * @param {Object} participants new participants object
706
+ * @param {Array} removedParticipantIds list of removed participants
715
707
  * @param {Boolean} isReplace is replace the whole members
716
708
  * @returns {Array} updatedParticipants
717
709
  * @memberof LocusInfo
718
710
  */
719
711
  }, {
720
712
  key: "updateParticipants",
721
- value: function updateParticipants(participants, isReplace) {
713
+ value: function updateParticipants(participants, removedParticipantIds, isReplace) {
722
714
  var _this$parsedLocus$con;
723
715
  this.emitScoped({
724
716
  file: 'locus-info',
725
717
  function: 'updateParticipants'
726
718
  }, _constants.EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS, {
727
719
  participants: participants,
720
+ removedParticipantIds: removedParticipantIds,
728
721
  recordingId: this.parsedLocus.controls && ((_this$parsedLocus$con = this.parsedLocus.controls.record) === null || _this$parsedLocus$con === void 0 ? void 0 : _this$parsedLocus$con.modifiedBy),
729
722
  selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
730
723
  selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
@@ -772,6 +765,7 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
772
765
  hasRecordingPausedChanged = _ControlsUtils$getCon2.hasRecordingPausedChanged,
773
766
  hasMeetingContainerChanged = _ControlsUtils$getCon2.hasMeetingContainerChanged,
774
767
  hasTranscribeChanged = _ControlsUtils$getCon2.hasTranscribeChanged,
768
+ hasTranscribeSpokenLanguageChanged = _ControlsUtils$getCon2.hasTranscribeSpokenLanguageChanged,
775
769
  hasManualCaptionChanged = _ControlsUtils$getCon2.hasManualCaptionChanged,
776
770
  hasEntryExitToneChanged = _ControlsUtils$getCon2.hasEntryExitToneChanged,
777
771
  hasBreakoutChanged = _ControlsUtils$getCon2.hasBreakoutChanged,
@@ -791,6 +785,7 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
791
785
  hasStageViewChanged = _ControlsUtils$getCon2.hasStageViewChanged,
792
786
  hasAnnotationControlChanged = _ControlsUtils$getCon2.hasAnnotationControlChanged,
793
787
  hasRemoteDesktopControlChanged = _ControlsUtils$getCon2.hasRemoteDesktopControlChanged,
788
+ hasPollingQAControlChanged = _ControlsUtils$getCon2.hasPollingQAControlChanged,
794
789
  current = _ControlsUtils$getCon.current;
795
790
  if (hasMuteOnEntryChanged) {
796
791
  this.emitScoped({
@@ -890,6 +885,15 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
890
885
  caption: caption
891
886
  });
892
887
  }
888
+ if (hasTranscribeSpokenLanguageChanged) {
889
+ var spokenLanguage = current.transcribe.spokenLanguage;
890
+ this.emitScoped({
891
+ file: 'locus-info',
892
+ function: 'updateControls'
893
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED, {
894
+ spokenLanguage: spokenLanguage
895
+ });
896
+ }
893
897
  if (hasManualCaptionChanged) {
894
898
  var enabled = current.manualCaptionControl.enabled;
895
899
  this.emitScoped({
@@ -994,6 +998,14 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
994
998
  state: current.rdcControl
995
999
  });
996
1000
  }
1001
+ if (hasPollingQAControlChanged) {
1002
+ this.emitScoped({
1003
+ file: 'locus-info',
1004
+ function: 'updateControls'
1005
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED, {
1006
+ state: current.pollingQAControl
1007
+ });
1008
+ }
997
1009
  this.controls = controls;
998
1010
  }
999
1011
  }
@@ -1145,7 +1157,7 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
1145
1157
  value: function updateMeetingInfo(info, self) {
1146
1158
  var _this$parsedLocus$sel;
1147
1159
  var roles = self ? _selfUtils.default.getRoles(self) : ((_this$parsedLocus$sel = this.parsedLocus.self) === null || _this$parsedLocus$sel === void 0 ? void 0 : _this$parsedLocus$sel.roles) || [];
1148
- if (info && !(0, _lodash.isEqual)(this.info, info) || roles.length && !(0, _lodash.isEqual)(this.roles, roles) && info) {
1160
+ if (info && !(0, _lodash.isEqual)(this.info, info) || !(0, _lodash.isEqual)(this.roles, roles) && info) {
1149
1161
  var isJoined = _selfUtils.default.isJoined(self || this.parsedLocus.self);
1150
1162
  var parsedInfo = _infoUtils.default.getInfos(this.parsedLocus.info, info, roles, isJoined);
1151
1163
  if (parsedInfo.updates.isLocked) {
@@ -1607,7 +1619,7 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
1607
1619
  }, {
1608
1620
  key: "updateMainSessionLocusCache",
1609
1621
  value: function updateMainSessionLocusCache(mainLocus) {
1610
- var _this5 = this;
1622
+ var _this4 = this;
1611
1623
  if (!mainLocus) {
1612
1624
  return;
1613
1625
  }
@@ -1616,7 +1628,7 @@ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
1616
1628
  // shallow merge and do special merge for participants
1617
1629
  (0, _lodash.assignWith)(this.mainSessionLocusCache, locusClone, function (objValue, srcValue, key) {
1618
1630
  if (key === 'participants') {
1619
- return _this5.mergeParticipants(objValue, srcValue);
1631
+ return _this4.mergeParticipants(objValue, srcValue);
1620
1632
  }
1621
1633
  return srcValue || objValue;
1622
1634
  });