@webex/plugin-meetings 3.0.0-beta.39 → 3.0.0-beta.391

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 (393) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +671 -81
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +45 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/no-meeting-info.js +51 -0
  17. package/dist/common/errors/no-meeting-info.js.map +1 -0
  18. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  19. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +48 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/logs/request.js +5 -1
  25. package/dist/common/logs/request.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +5 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +242 -33
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +110 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/interceptors/index.js +15 -0
  43. package/dist/interceptors/index.js.map +1 -0
  44. package/dist/interceptors/locusRetry.js +93 -0
  45. package/dist/interceptors/locusRetry.js.map +1 -0
  46. package/dist/interpretation/collection.js +23 -0
  47. package/dist/interpretation/collection.js.map +1 -0
  48. package/dist/interpretation/index.js +380 -0
  49. package/dist/interpretation/index.js.map +1 -0
  50. package/dist/interpretation/siLanguage.js +25 -0
  51. package/dist/interpretation/siLanguage.js.map +1 -0
  52. package/dist/locus-info/controlsUtils.js +91 -2
  53. package/dist/locus-info/controlsUtils.js.map +1 -1
  54. package/dist/locus-info/index.js +386 -62
  55. package/dist/locus-info/index.js.map +1 -1
  56. package/dist/locus-info/infoUtils.js +7 -1
  57. package/dist/locus-info/infoUtils.js.map +1 -1
  58. package/dist/locus-info/mediaSharesUtils.js +71 -1
  59. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  60. package/dist/locus-info/parser.js +249 -72
  61. package/dist/locus-info/parser.js.map +1 -1
  62. package/dist/locus-info/selfUtils.js +89 -14
  63. package/dist/locus-info/selfUtils.js.map +1 -1
  64. package/dist/media/index.js +65 -102
  65. package/dist/media/index.js.map +1 -1
  66. package/dist/media/properties.js +73 -124
  67. package/dist/media/properties.js.map +1 -1
  68. package/dist/mediaQualityMetrics/config.js +135 -330
  69. package/dist/mediaQualityMetrics/config.js.map +1 -1
  70. package/dist/meeting/in-meeting-actions.js +86 -2
  71. package/dist/meeting/in-meeting-actions.js.map +1 -1
  72. package/dist/meeting/index.js +4075 -2827
  73. package/dist/meeting/index.js.map +1 -1
  74. package/dist/meeting/locusMediaRequest.js +292 -0
  75. package/dist/meeting/locusMediaRequest.js.map +1 -0
  76. package/dist/meeting/muteState.js +224 -136
  77. package/dist/meeting/muteState.js.map +1 -1
  78. package/dist/meeting/request.js +177 -152
  79. package/dist/meeting/request.js.map +1 -1
  80. package/dist/meeting/util.js +672 -417
  81. package/dist/meeting/util.js.map +1 -1
  82. package/dist/meeting-info/index.js +73 -7
  83. package/dist/meeting-info/index.js.map +1 -1
  84. package/dist/meeting-info/meeting-info-v2.js +192 -51
  85. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  86. package/dist/meeting-info/util.js +1 -1
  87. package/dist/meeting-info/util.js.map +1 -1
  88. package/dist/meeting-info/utilv2.js +36 -36
  89. package/dist/meeting-info/utilv2.js.map +1 -1
  90. package/dist/meetings/collection.js +39 -0
  91. package/dist/meetings/collection.js.map +1 -1
  92. package/dist/meetings/index.js +484 -119
  93. package/dist/meetings/index.js.map +1 -1
  94. package/dist/meetings/meetings.types.js +7 -0
  95. package/dist/meetings/meetings.types.js.map +1 -0
  96. package/dist/meetings/request.js +2 -0
  97. package/dist/meetings/request.js.map +1 -1
  98. package/dist/meetings/util.js +73 -7
  99. package/dist/meetings/util.js.map +1 -1
  100. package/dist/member/index.js +58 -0
  101. package/dist/member/index.js.map +1 -1
  102. package/dist/member/types.js +25 -0
  103. package/dist/member/types.js.map +1 -0
  104. package/dist/member/util.js +132 -25
  105. package/dist/member/util.js.map +1 -1
  106. package/dist/members/collection.js +10 -0
  107. package/dist/members/collection.js.map +1 -1
  108. package/dist/members/index.js +102 -6
  109. package/dist/members/index.js.map +1 -1
  110. package/dist/members/request.js +106 -38
  111. package/dist/members/request.js.map +1 -1
  112. package/dist/members/types.js +15 -0
  113. package/dist/members/types.js.map +1 -0
  114. package/dist/members/util.js +326 -232
  115. package/dist/members/util.js.map +1 -1
  116. package/dist/metrics/constants.js +18 -1
  117. package/dist/metrics/constants.js.map +1 -1
  118. package/dist/metrics/index.js +1 -446
  119. package/dist/metrics/index.js.map +1 -1
  120. package/dist/multistream/mediaRequestManager.js +223 -32
  121. package/dist/multistream/mediaRequestManager.js.map +1 -1
  122. package/dist/multistream/receiveSlot.js +10 -0
  123. package/dist/multistream/receiveSlot.js.map +1 -1
  124. package/dist/multistream/receiveSlotManager.js +39 -36
  125. package/dist/multistream/receiveSlotManager.js.map +1 -1
  126. package/dist/multistream/remoteMedia.js +3 -1
  127. package/dist/multistream/remoteMedia.js.map +1 -1
  128. package/dist/multistream/remoteMediaGroup.js +76 -5
  129. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  130. package/dist/multistream/remoteMediaManager.js +366 -104
  131. package/dist/multistream/remoteMediaManager.js.map +1 -1
  132. package/dist/multistream/sendSlotManager.js +255 -0
  133. package/dist/multistream/sendSlotManager.js.map +1 -0
  134. package/dist/reachability/clusterReachability.js +356 -0
  135. package/dist/reachability/clusterReachability.js.map +1 -0
  136. package/dist/reachability/index.js +263 -390
  137. package/dist/reachability/index.js.map +1 -1
  138. package/dist/reachability/request.js +6 -4
  139. package/dist/reachability/request.js.map +1 -1
  140. package/dist/reachability/util.js +29 -0
  141. package/dist/reachability/util.js.map +1 -0
  142. package/dist/reconnection-manager/index.js +266 -202
  143. package/dist/reconnection-manager/index.js.map +1 -1
  144. package/dist/recording-controller/index.js +21 -2
  145. package/dist/recording-controller/index.js.map +1 -1
  146. package/dist/recording-controller/util.js +9 -8
  147. package/dist/recording-controller/util.js.map +1 -1
  148. package/dist/roap/index.js +51 -28
  149. package/dist/roap/index.js.map +1 -1
  150. package/dist/roap/request.js +48 -64
  151. package/dist/roap/request.js.map +1 -1
  152. package/dist/roap/turnDiscovery.js +220 -70
  153. package/dist/roap/turnDiscovery.js.map +1 -1
  154. package/dist/rtcMetrics/constants.js +12 -0
  155. package/dist/rtcMetrics/constants.js.map +1 -0
  156. package/dist/rtcMetrics/index.js +179 -0
  157. package/dist/rtcMetrics/index.js.map +1 -0
  158. package/dist/statsAnalyzer/index.js +357 -295
  159. package/dist/statsAnalyzer/index.js.map +1 -1
  160. package/dist/statsAnalyzer/mqaUtil.js +296 -156
  161. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  162. package/dist/types/annotation/annotation.types.d.ts +42 -0
  163. package/dist/types/annotation/constants.d.ts +31 -0
  164. package/dist/types/annotation/index.d.ts +117 -0
  165. package/dist/types/breakouts/events.d.ts +8 -0
  166. package/dist/types/breakouts/utils.d.ts +14 -0
  167. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  168. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  169. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  170. package/dist/types/common/logs/request.d.ts +2 -0
  171. package/dist/types/common/queue.d.ts +9 -7
  172. package/dist/types/config.d.ts +2 -7
  173. package/dist/types/constants.d.ts +203 -31
  174. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  175. package/dist/types/controls-options-manager/index.d.ts +17 -1
  176. package/dist/types/controls-options-manager/types.d.ts +43 -0
  177. package/dist/types/controls-options-manager/util.d.ts +1 -7
  178. package/dist/types/index.d.ts +6 -5
  179. package/dist/types/interceptors/index.d.ts +2 -0
  180. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  181. package/dist/types/interpretation/collection.d.ts +5 -0
  182. package/dist/types/interpretation/index.d.ts +5 -0
  183. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  184. package/dist/types/locus-info/index.d.ts +57 -4
  185. package/dist/types/locus-info/parser.d.ts +66 -6
  186. package/dist/types/media/index.d.ts +2 -0
  187. package/dist/types/media/properties.d.ts +34 -49
  188. package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
  189. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  190. package/dist/types/meeting/index.d.ts +567 -496
  191. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  192. package/dist/types/meeting/muteState.d.ts +93 -25
  193. package/dist/types/meeting/request.d.ts +64 -43
  194. package/dist/types/meeting/util.d.ts +117 -1
  195. package/dist/types/meeting-info/index.d.ts +13 -1
  196. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  197. package/dist/types/meetings/collection.d.ts +17 -0
  198. package/dist/types/meetings/index.d.ts +113 -21
  199. package/dist/types/meetings/meetings.types.d.ts +4 -0
  200. package/dist/types/member/index.d.ts +14 -0
  201. package/dist/types/member/types.d.ts +32 -0
  202. package/dist/types/members/collection.d.ts +5 -0
  203. package/dist/types/members/index.d.ts +35 -2
  204. package/dist/types/members/request.d.ts +73 -9
  205. package/dist/types/members/types.d.ts +25 -0
  206. package/dist/types/members/util.d.ts +214 -1
  207. package/dist/types/metrics/constants.d.ts +17 -0
  208. package/dist/types/metrics/index.d.ts +4 -111
  209. package/dist/types/multistream/mediaRequestManager.d.ts +72 -3
  210. package/dist/types/multistream/receiveSlot.d.ts +7 -3
  211. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  212. package/dist/types/multistream/remoteMedia.d.ts +3 -31
  213. package/dist/types/multistream/remoteMediaGroup.d.ts +2 -9
  214. package/dist/types/multistream/remoteMediaManager.d.ts +62 -2
  215. package/dist/types/multistream/sendSlotManager.d.ts +70 -0
  216. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  217. package/dist/types/reachability/index.d.ts +60 -95
  218. package/dist/types/reachability/request.d.ts +3 -1
  219. package/dist/types/reachability/util.d.ts +8 -0
  220. package/dist/types/reconnection-manager/index.d.ts +19 -0
  221. package/dist/types/recording-controller/index.d.ts +15 -1
  222. package/dist/types/recording-controller/util.d.ts +5 -4
  223. package/dist/types/roap/index.d.ts +2 -1
  224. package/dist/types/roap/request.d.ts +9 -8
  225. package/dist/types/roap/turnDiscovery.d.ts +39 -5
  226. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  227. package/dist/types/rtcMetrics/index.d.ts +61 -0
  228. package/dist/types/statsAnalyzer/index.d.ts +34 -12
  229. package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
  230. package/dist/types/webinar/collection.d.ts +16 -0
  231. package/dist/types/webinar/index.d.ts +5 -0
  232. package/dist/webinar/collection.js +44 -0
  233. package/dist/webinar/collection.js.map +1 -0
  234. package/dist/webinar/index.js +69 -0
  235. package/dist/webinar/index.js.map +1 -0
  236. package/package.json +22 -19
  237. package/src/annotation/annotation.types.ts +50 -0
  238. package/src/annotation/constants.ts +36 -0
  239. package/src/annotation/index.ts +328 -0
  240. package/src/breakouts/README.md +35 -11
  241. package/src/breakouts/breakout.ts +67 -9
  242. package/src/breakouts/events.ts +56 -0
  243. package/src/breakouts/index.ts +558 -59
  244. package/src/breakouts/utils.ts +42 -0
  245. package/src/common/errors/no-meeting-info.ts +24 -0
  246. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  247. package/src/common/errors/webex-errors.ts +44 -2
  248. package/src/common/logs/logger-proxy.ts +1 -1
  249. package/src/common/logs/request.ts +5 -1
  250. package/src/common/queue.ts +22 -8
  251. package/src/config.ts +4 -9
  252. package/src/constants.ts +229 -21
  253. package/src/controls-options-manager/enums.ts +12 -0
  254. package/src/controls-options-manager/index.ts +116 -21
  255. package/src/controls-options-manager/types.ts +59 -0
  256. package/src/controls-options-manager/util.ts +294 -14
  257. package/src/index.ts +44 -0
  258. package/src/interceptors/index.ts +3 -0
  259. package/src/interceptors/locusRetry.ts +67 -0
  260. package/src/interpretation/README.md +60 -0
  261. package/src/interpretation/collection.ts +19 -0
  262. package/src/interpretation/index.ts +349 -0
  263. package/src/interpretation/siLanguage.ts +18 -0
  264. package/src/locus-info/controlsUtils.ts +108 -0
  265. package/src/locus-info/index.ts +417 -59
  266. package/src/locus-info/infoUtils.ts +10 -2
  267. package/src/locus-info/mediaSharesUtils.ts +80 -0
  268. package/src/locus-info/parser.ts +258 -47
  269. package/src/locus-info/selfUtils.ts +81 -5
  270. package/src/media/index.ts +100 -108
  271. package/src/media/properties.ts +88 -117
  272. package/src/mediaQualityMetrics/config.ts +103 -238
  273. package/src/meeting/in-meeting-actions.ts +171 -3
  274. package/src/meeting/index.ts +3411 -2435
  275. package/src/meeting/locusMediaRequest.ts +313 -0
  276. package/src/meeting/muteState.ts +223 -136
  277. package/src/meeting/request.ts +155 -120
  278. package/src/meeting/util.ts +685 -395
  279. package/src/meeting-info/index.ts +81 -8
  280. package/src/meeting-info/meeting-info-v2.ts +170 -14
  281. package/src/meeting-info/util.ts +1 -1
  282. package/src/meeting-info/utilv2.ts +23 -23
  283. package/src/meetings/collection.ts +33 -0
  284. package/src/meetings/index.ts +507 -127
  285. package/src/meetings/meetings.types.ts +12 -0
  286. package/src/meetings/request.ts +2 -0
  287. package/src/meetings/util.ts +81 -12
  288. package/src/member/index.ts +58 -0
  289. package/src/member/types.ts +38 -0
  290. package/src/member/util.ts +141 -25
  291. package/src/members/collection.ts +8 -0
  292. package/src/members/index.ts +134 -8
  293. package/src/members/request.ts +97 -17
  294. package/src/members/types.ts +29 -0
  295. package/src/members/util.ts +333 -240
  296. package/src/metrics/constants.ts +17 -0
  297. package/src/metrics/index.ts +1 -469
  298. package/src/multistream/mediaRequestManager.ts +271 -56
  299. package/src/multistream/receiveSlot.ts +11 -4
  300. package/src/multistream/receiveSlotManager.ts +34 -24
  301. package/src/multistream/remoteMedia.ts +5 -3
  302. package/src/multistream/remoteMediaGroup.ts +78 -0
  303. package/src/multistream/remoteMediaManager.ts +248 -44
  304. package/src/multistream/sendSlotManager.ts +199 -0
  305. package/src/reachability/clusterReachability.ts +320 -0
  306. package/src/reachability/index.ts +229 -346
  307. package/src/reachability/request.ts +8 -4
  308. package/src/reachability/util.ts +24 -0
  309. package/src/reconnection-manager/index.ts +128 -97
  310. package/src/recording-controller/index.ts +20 -3
  311. package/src/recording-controller/util.ts +26 -9
  312. package/src/roap/index.ts +52 -23
  313. package/src/roap/request.ts +48 -67
  314. package/src/roap/turnDiscovery.ts +147 -49
  315. package/src/rtcMetrics/constants.ts +3 -0
  316. package/src/rtcMetrics/index.ts +166 -0
  317. package/src/statsAnalyzer/index.ts +457 -416
  318. package/src/statsAnalyzer/mqaUtil.ts +317 -170
  319. package/src/webinar/collection.ts +31 -0
  320. package/src/webinar/index.ts +62 -0
  321. package/test/integration/spec/converged-space-meetings.js +60 -3
  322. package/test/integration/spec/journey.js +320 -261
  323. package/test/integration/spec/space-meeting.js +76 -3
  324. package/test/unit/spec/annotation/index.ts +418 -0
  325. package/test/unit/spec/breakouts/breakout.ts +118 -28
  326. package/test/unit/spec/breakouts/events.ts +89 -0
  327. package/test/unit/spec/breakouts/index.ts +1349 -114
  328. package/test/unit/spec/breakouts/utils.js +52 -1
  329. package/test/unit/spec/common/queue.js +31 -2
  330. package/test/unit/spec/controls-options-manager/index.js +163 -0
  331. package/test/unit/spec/controls-options-manager/util.js +576 -60
  332. package/test/unit/spec/fixture/locus.js +1 -0
  333. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  334. package/test/unit/spec/interpretation/collection.ts +15 -0
  335. package/test/unit/spec/interpretation/index.ts +625 -0
  336. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  337. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  338. package/test/unit/spec/locus-info/index.js +1363 -37
  339. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  340. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  341. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  342. package/test/unit/spec/locus-info/parser.js +116 -35
  343. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  344. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  345. package/test/unit/spec/media/index.ts +173 -81
  346. package/test/unit/spec/media/properties.ts +2 -2
  347. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  348. package/test/unit/spec/meeting/index.js +6821 -2172
  349. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  350. package/test/unit/spec/meeting/muteState.js +402 -212
  351. package/test/unit/spec/meeting/request.js +473 -54
  352. package/test/unit/spec/meeting/utils.js +773 -67
  353. package/test/unit/spec/meeting-info/index.js +300 -0
  354. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  355. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  356. package/test/unit/spec/meetings/collection.js +26 -0
  357. package/test/unit/spec/meetings/index.js +1415 -213
  358. package/test/unit/spec/meetings/utils.js +229 -2
  359. package/test/unit/spec/member/index.js +61 -6
  360. package/test/unit/spec/member/util.js +510 -34
  361. package/test/unit/spec/members/index.js +432 -1
  362. package/test/unit/spec/members/request.js +206 -27
  363. package/test/unit/spec/members/utils.js +210 -0
  364. package/test/unit/spec/metrics/index.js +1 -50
  365. package/test/unit/spec/multistream/mediaRequestManager.ts +781 -114
  366. package/test/unit/spec/multistream/receiveSlot.ts +9 -1
  367. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  368. package/test/unit/spec/multistream/remoteMedia.ts +2 -0
  369. package/test/unit/spec/multistream/remoteMediaGroup.ts +345 -0
  370. package/test/unit/spec/multistream/remoteMediaManager.ts +525 -0
  371. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  372. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  373. package/test/unit/spec/reachability/index.ts +551 -14
  374. package/test/unit/spec/reachability/request.js +3 -1
  375. package/test/unit/spec/reachability/util.ts +40 -0
  376. package/test/unit/spec/reconnection-manager/index.js +171 -11
  377. package/test/unit/spec/recording-controller/index.js +294 -218
  378. package/test/unit/spec/recording-controller/util.js +223 -96
  379. package/test/unit/spec/roap/index.ts +180 -83
  380. package/test/unit/spec/roap/request.ts +100 -62
  381. package/test/unit/spec/roap/turnDiscovery.ts +388 -96
  382. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  383. package/test/unit/spec/stats-analyzer/index.js +1252 -12
  384. package/test/unit/spec/webinar/collection.ts +13 -0
  385. package/test/unit/spec/webinar/index.ts +60 -0
  386. package/test/utils/integrationTestUtils.js +46 -0
  387. package/test/utils/testUtils.js +0 -57
  388. package/test/utils/webex-test-users.js +12 -4
  389. package/dist/metrics/config.js +0 -289
  390. package/dist/metrics/config.js.map +0 -1
  391. package/dist/types/metrics/config.d.ts +0 -169
  392. package/src/index.js +0 -18
  393. package/src/metrics/config.ts +0 -485
@@ -15,12 +15,13 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/
15
15
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
16
16
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
17
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
18
+ var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
19
+ var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
20
+ var _assignWith2 = _interopRequireDefault(require("lodash/assignWith"));
18
21
  var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
19
22
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
20
23
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
21
24
  var _constants = require("../constants");
22
- var _metrics = _interopRequireDefault(require("../metrics"));
23
- var _config = require("../metrics/config");
24
25
  var _infoUtils = _interopRequireDefault(require("./infoUtils"));
25
26
  var _fullState = _interopRequireDefault(require("./fullState"));
26
27
  var _selfUtils = _interopRequireDefault(require("./selfUtils"));
@@ -29,6 +30,8 @@ var _controlsUtils = _interopRequireDefault(require("./controlsUtils"));
29
30
  var _embeddedAppsUtils = _interopRequireDefault(require("./embeddedAppsUtils"));
30
31
  var _mediaSharesUtils = _interopRequireDefault(require("./mediaSharesUtils"));
31
32
  var _parser = _interopRequireDefault(require("./parser"));
33
+ var _metrics = _interopRequireDefault(require("../metrics"));
34
+ var _constants2 = _interopRequireDefault(require("../metrics/constants"));
32
35
  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); }; }
33
36
  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; } }
34
37
  /**
@@ -40,6 +43,13 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
40
43
  var LocusInfo = /*#__PURE__*/function (_EventsScope) {
41
44
  (0, _inherits2.default)(LocusInfo, _EventsScope);
42
45
  var _super = _createSuper(LocusInfo);
46
+ /**
47
+ * Constructor
48
+ * @param {function} updateMeeting callback to update the meeting object from an object
49
+ * @param {object} webex
50
+ * @param {string} meetingId
51
+ * @returns {undefined}
52
+ */
43
53
  function LocusInfo(updateMeeting, webex, meetingId) {
44
54
  var _this;
45
55
  (0, _classCallCheck2.default)(this, LocusInfo);
@@ -68,10 +78,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
68
78
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fullState", void 0);
69
79
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "host", void 0);
70
80
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "info", void 0);
81
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roles", void 0);
71
82
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaShares", void 0);
72
83
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "replace", void 0);
73
84
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "url", void 0);
74
85
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "services", void 0);
86
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mainSessionLocusCache", void 0);
75
87
  _this.parsedLocus = {
76
88
  states: []
77
89
  };
@@ -85,38 +97,95 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
85
97
  }
86
98
 
87
99
  /**
88
- * Apply locus delta data to meeting
89
- * @param {string} action Locus delta action
90
- * @param {Locus} locus
100
+ * 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.
101
+ *
91
102
  * @param {Meeting} meeting
92
103
  * @returns {undefined}
93
104
  */
94
105
  (0, _createClass2.default)(LocusInfo, [{
106
+ key: "doLocusSync",
107
+ value: function doLocusSync(meeting) {
108
+ var _this2 = this;
109
+ var isDelta;
110
+ var url;
111
+ if (this.locusParser.workingCopy.syncUrl) {
112
+ url = this.locusParser.workingCopy.syncUrl;
113
+ isDelta = true;
114
+ } else {
115
+ url = meeting.locusUrl;
116
+ isDelta = false;
117
+ }
118
+ _loggerProxy.default.logger.info("Locus-info:index#doLocusSync --> doing Locus sync (getting ".concat(isDelta ? 'delta' : 'full', " DTO)"));
119
+
120
+ // return value ignored on purpose
121
+ meeting.meetingRequest.getLocusDTO({
122
+ url: url
123
+ }).catch(function (e) {
124
+ if (isDelta) {
125
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync');
126
+ _metrics.default.sendBehavioralMetric(_constants2.default.LOCUS_DELTA_SYNC_FAILED, {
127
+ correlationId: meeting.correlationId,
128
+ url: url,
129
+ reason: e.message,
130
+ errorName: e.name,
131
+ stack: e.stack,
132
+ code: e.code
133
+ });
134
+ isDelta = false;
135
+ return meeting.meetingRequest.getLocusDTO({
136
+ url: meeting.locusUrl
137
+ }).catch(function (err) {
138
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting');
139
+ _this2.webex.meetings.destroy(meeting, _constants.MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
140
+ throw err;
141
+ });
142
+ }
143
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting');
144
+ _this2.webex.meetings.destroy(meeting, _constants.MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
145
+ throw e;
146
+ }).then(function (res) {
147
+ if (isDelta) {
148
+ if (!(0, _isEmpty2.default)(res.body)) {
149
+ meeting.locusInfo.handleLocusDelta(res.body, meeting);
150
+ } else {
151
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO');
152
+ }
153
+ } else {
154
+ meeting.locusInfo.onFullLocus(res.body);
155
+ }
156
+ // Notify parser to resume processing delta events.
157
+ // Any deltas in the queue that have now been superseded by this sync will simply be ignored
158
+ _this2.locusParser.resume();
159
+ });
160
+ }
161
+
162
+ /**
163
+ * Apply locus delta data to meeting
164
+ * @param {string} action Locus delta action
165
+ * @param {Locus} locus
166
+ * @param {Meeting} meeting
167
+ * @returns {undefined}
168
+ */
169
+ }, {
95
170
  key: "applyLocusDeltaData",
96
171
  value: function applyLocusDeltaData(action, locus, meeting) {
97
- var _this2 = this;
98
172
  var _LocusDeltaParser$loc = _parser.default.loci,
99
173
  DESYNC = _LocusDeltaParser$loc.DESYNC,
100
174
  USE_CURRENT = _LocusDeltaParser$loc.USE_CURRENT,
101
- USE_INCOMING = _LocusDeltaParser$loc.USE_INCOMING;
175
+ USE_INCOMING = _LocusDeltaParser$loc.USE_INCOMING,
176
+ WAIT = _LocusDeltaParser$loc.WAIT,
177
+ LOCUS_URL_CHANGED = _LocusDeltaParser$loc.LOCUS_URL_CHANGED;
102
178
  switch (action) {
103
179
  case USE_INCOMING:
104
180
  meeting.locusInfo.onDeltaLocus(locus);
105
181
  break;
106
182
  case USE_CURRENT:
107
- meeting.locusDesync = false;
108
- meeting.needToGetFullLocus = false;
183
+ case WAIT:
184
+ // do nothing
109
185
  break;
110
186
  case DESYNC:
111
- meeting.meetingRequest.getFullLocus({
112
- desync: true,
113
- locusUrl: meeting.locusUrl
114
- }).then(function (res) {
115
- meeting.locusInfo.onFullLocus(res.body);
116
- // Notify parser to resume processing delta events
117
- // now that we have full locus from DESYNC.
118
- _this2.locusParser.resume();
119
- });
187
+ case LOCUS_URL_CHANGED:
188
+ this.doLocusSync(meeting);
120
189
  break;
121
190
  default:
122
191
  _loggerProxy.default.logger.info("Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ".concat(action));
@@ -186,13 +255,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
186
255
  * @member LocusInfo
187
256
  */
188
257
  this.deltaParticipants = [];
189
-
258
+ this.updateLocusCache(locus);
190
259
  // above section only updates the locusInfo object
191
260
  // The below section makes sure it updates the locusInfo as well as updates the meeting object
192
261
  this.updateParticipants(locus.participants);
193
262
  // For 1:1 space meeting the conversation Url does not exist in locus.conversation
194
263
  this.updateConversationUrl(locus.conversationUrl, locus.info);
195
- this.updateControls(locus.controls);
264
+ this.updateControls(locus.controls, locus.self);
196
265
  this.updateLocusUrl(locus.url);
197
266
  this.updateFullState(locus.fullState);
198
267
  this.updateMeetingInfo(locus.info);
@@ -212,6 +281,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
212
281
  }, {
213
282
  key: "initialSetup",
214
283
  value: function initialSetup(locus) {
284
+ this.updateLocusCache(locus);
215
285
  this.onFullLocus(locus);
216
286
 
217
287
  // Change it to true after it receives it first locus object
@@ -229,6 +299,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
229
299
  value: function parse(meeting, data) {
230
300
  // eslint-disable-next-line @typescript-eslint/no-shadow
231
301
  var eventType = data.eventType;
302
+ var locus = this.getTheLocusToUpdate(data.locus);
232
303
  _loggerProxy.default.logger.info("Locus-info:index#parse --> received locus data: ".concat(eventType));
233
304
  switch (eventType) {
234
305
  case _constants.LOCUSEVENT.PARTICIPANT_JOIN:
@@ -245,15 +316,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
245
316
  case _constants.LOCUSEVENT.PARTICIPANT_DECLINED:
246
317
  case _constants.LOCUSEVENT.FLOOR_GRANTED:
247
318
  case _constants.LOCUSEVENT.FLOOR_RELEASED:
248
- this.onFullLocus(data.locus, eventType);
319
+ this.onFullLocus(locus, eventType);
249
320
  break;
250
321
  case _constants.LOCUSEVENT.DIFFERENCE:
251
- this.handleLocusDelta(data.locus, meeting);
322
+ this.handleLocusDelta(locus, meeting);
252
323
  break;
253
324
  default:
254
325
  // Why will there be a event with no eventType ????
255
326
  // we may not need this, we can get full locus
256
- this.handleLocusDelta(data.locus, meeting);
327
+ this.handleLocusDelta(locus, meeting);
257
328
  }
258
329
  }
259
330
 
@@ -277,18 +348,22 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
277
348
  * @returns {object} null
278
349
  * @memberof LocusInfo
279
350
  */
280
- // eslint-disable-next-line @typescript-eslint/no-shadow
281
351
  }, {
282
352
  key: "onFullLocus",
283
353
  value: function onFullLocus(locus, eventType) {
284
354
  if (!locus) {
285
355
  _loggerProxy.default.logger.error('Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.');
286
356
  }
357
+ if (!this.locusParser.isNewFullLocus(locus)) {
358
+ _loggerProxy.default.logger.info("Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=".concat(eventType));
359
+ return;
360
+ }
287
361
  this.updateParticipantDeltas(locus.participants);
288
362
  this.scheduledMeeting = locus.meeting || null;
289
363
  this.participants = locus.participants;
364
+ var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
290
365
  this.updateLocusInfo(locus);
291
- this.updateParticipants(locus.participants);
366
+ this.updateParticipants(locus.participants, isReplaceMembers);
292
367
  this.isMeetingActive();
293
368
  this.handleOneOnOneEvent(eventType);
294
369
  this.updateEmbeddedApps(locus.embeddedApps);
@@ -340,8 +415,9 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
340
415
  }, {
341
416
  key: "onDeltaLocus",
342
417
  value: function onDeltaLocus(locus) {
418
+ var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
343
419
  this.updateLocusInfo(locus);
344
- this.updateParticipants(locus.participants);
420
+ this.updateParticipants(locus.participants, isReplaceMembers);
345
421
  this.isMeetingActive();
346
422
  }
347
423
 
@@ -360,7 +436,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
360
436
  // as it gets interpreted as if we have left the call
361
437
  return;
362
438
  }
363
- this.updateControls(locus.controls);
439
+ this.updateControls(locus.controls, locus.self);
364
440
  this.updateConversationUrl(locus.conversationUrl, locus.info);
365
441
  this.updateCreated(locus.created);
366
442
  this.updateFullState(locus.fullState);
@@ -426,9 +502,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
426
502
  if (this.fullState && this.fullState.state === _constants.LOCUS.STATE.INACTIVE) {
427
503
  // TODO: update the meeting state
428
504
  _loggerProxy.default.logger.warn('Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.');
429
- _metrics.default.postEvent({
430
- event: _config.eventType.REMOTE_ENDED,
431
- meetingId: this.meetingId
505
+
506
+ // @ts-ignore
507
+ this.webex.internal.newMetrics.submitClientEvent({
508
+ name: 'client.call.remote-ended',
509
+ options: {
510
+ meetingId: this.meetingId
511
+ }
432
512
  });
433
513
  this.emitScoped({
434
514
  file: 'locus-info',
@@ -438,9 +518,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
438
518
  shouldLeave: false
439
519
  });
440
520
  } else if (partner.state === _constants.MEETING_STATE.STATES.LEFT && this.parsedLocus.self && (this.parsedLocus.self.state === _constants.MEETING_STATE.STATES.DECLINED || this.parsedLocus.self.state === _constants.MEETING_STATE.STATES.NOTIFIED || this.parsedLocus.self.state === _constants.MEETING_STATE.STATES.JOINED)) {
441
- _metrics.default.postEvent({
442
- event: _config.eventType.REMOTE_ENDED,
443
- meetingId: this.meetingId
521
+ // @ts-ignore
522
+ this.webex.internal.newMetrics.submitClientEvent({
523
+ name: 'client.call.remote-ended',
524
+ options: {
525
+ meetingId: this.meetingId
526
+ }
444
527
  });
445
528
  this.emitScoped({
446
529
  file: 'locus-info',
@@ -451,9 +534,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
451
534
  });
452
535
  } else if (this.parsedLocus.self && this.parsedLocus.self.state === _constants.MEETING_STATE.STATES.LEFT && (partner.state === _constants.MEETING_STATE.STATES.LEFT || partner.state === _constants.MEETING_STATE.STATES.DECLINED || partner.state === _constants.MEETING_STATE.STATES.NOTIFIED || partner.state === _constants.MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media
453
536
  ) {
454
- _metrics.default.postEvent({
455
- event: _config.eventType.REMOTE_ENDED,
456
- meetingId: this.meetingId
537
+ // @ts-ignore
538
+ this.webex.internal.newMetrics.submitClientEvent({
539
+ name: 'client.call.remote-ended',
540
+ options: {
541
+ meetingId: this.meetingId
542
+ }
457
543
  });
458
544
  this.emitScoped({
459
545
  file: 'locus-info',
@@ -468,9 +554,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
468
554
  // @ts-ignore
469
555
  this.fullState.state === _constants.LOCUS.STATE.TERMINATING)) {
470
556
  _loggerProxy.default.logger.warn('Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating');
471
- _metrics.default.postEvent({
472
- event: _config.eventType.REMOTE_ENDED,
473
- meetingId: this.meetingId
557
+
558
+ // @ts-ignore
559
+ this.webex.internal.newMetrics.submitClientEvent({
560
+ name: 'client.call.remote-ended',
561
+ options: {
562
+ meetingId: this.meetingId
563
+ }
474
564
  });
475
565
  this.emitScoped({
476
566
  file: 'locus-info',
@@ -481,9 +571,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
481
571
  });
482
572
  } else if (this.fullState && this.fullState.removed) {
483
573
  // user has been dropped from a meeting
484
- _metrics.default.postEvent({
485
- event: _config.eventType.REMOTE_ENDED,
486
- meetingId: this.meetingId
574
+
575
+ // @ts-ignore
576
+ this.webex.internal.newMetrics.submitClientEvent({
577
+ name: 'client.call.remote-ended',
578
+ options: {
579
+ meetingId: this.meetingId
580
+ }
487
581
  });
488
582
  this.emitScoped({
489
583
  file: 'locus-info',
@@ -606,15 +700,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
606
700
  }
607
701
 
608
702
  /**
609
- *
703
+ * update meeting's members
610
704
  * @param {Object} participants new participants object
611
- * @param {boolen} deltaParticpantFlag delta event
705
+ * @param {Boolean} isReplace is replace the whole members
612
706
  * @returns {Array} updatedParticipants
613
707
  * @memberof LocusInfo
614
708
  */
615
709
  }, {
616
710
  key: "updateParticipants",
617
- value: function updateParticipants(participants) {
711
+ value: function updateParticipants(participants, isReplace) {
618
712
  var _this$parsedLocus$con;
619
713
  this.emitScoped({
620
714
  file: 'locus-info',
@@ -624,18 +718,20 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
624
718
  recordingId: this.parsedLocus.controls && ((_this$parsedLocus$con = this.parsedLocus.controls.record) === null || _this$parsedLocus$con === void 0 ? void 0 : _this$parsedLocus$con.modifiedBy),
625
719
  selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
626
720
  selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
627
- hostId: this.parsedLocus.host && this.parsedLocus.host.hostId
721
+ hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
722
+ isReplace: isReplace
628
723
  });
629
724
  }
630
725
 
631
726
  /**
632
727
  * @param {Object} controls
728
+ * @param {Object} self
633
729
  * @returns {undefined}
634
730
  * @memberof LocusInfo
635
731
  */
636
732
  }, {
637
733
  key: "updateControls",
638
- value: function updateControls(controls) {
734
+ value: function updateControls(controls, self) {
639
735
  if (controls && !(0, _isEqual2.default)(this.controls, controls)) {
640
736
  this.parsedLocus.controls = _controlsUtils.default.parse(controls);
641
737
  var _ControlsUtils$getCon = _controlsUtils.default.getControls(this.controls, controls),
@@ -646,7 +742,73 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
646
742
  hasTranscribeChanged = _ControlsUtils$getCon2.hasTranscribeChanged,
647
743
  hasEntryExitToneChanged = _ControlsUtils$getCon2.hasEntryExitToneChanged,
648
744
  hasBreakoutChanged = _ControlsUtils$getCon2.hasBreakoutChanged,
745
+ hasVideoEnabledChanged = _ControlsUtils$getCon2.hasVideoEnabledChanged,
746
+ hasMuteOnEntryChanged = _ControlsUtils$getCon2.hasMuteOnEntryChanged,
747
+ hasShareControlChanged = _ControlsUtils$getCon2.hasShareControlChanged,
748
+ hasDisallowUnmuteChanged = _ControlsUtils$getCon2.hasDisallowUnmuteChanged,
749
+ hasReactionsChanged = _ControlsUtils$getCon2.hasReactionsChanged,
750
+ hasReactionDisplayNamesChanged = _ControlsUtils$getCon2.hasReactionDisplayNamesChanged,
751
+ hasViewTheParticipantListChanged = _ControlsUtils$getCon2.hasViewTheParticipantListChanged,
752
+ hasRaiseHandChanged = _ControlsUtils$getCon2.hasRaiseHandChanged,
753
+ hasVideoChanged = _ControlsUtils$getCon2.hasVideoChanged,
754
+ hasInterpretationChanged = _ControlsUtils$getCon2.hasInterpretationChanged,
649
755
  current = _ControlsUtils$getCon.current;
756
+ if (hasMuteOnEntryChanged) {
757
+ this.emitScoped({
758
+ file: 'locus-info',
759
+ function: 'updateControls'
760
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, {
761
+ state: current.muteOnEntry
762
+ });
763
+ }
764
+ if (hasShareControlChanged) {
765
+ this.emitScoped({
766
+ file: 'locus-info',
767
+ function: 'updateControls'
768
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, {
769
+ state: current.shareControl
770
+ });
771
+ }
772
+ if (hasDisallowUnmuteChanged) {
773
+ this.emitScoped({
774
+ file: 'locus-info',
775
+ function: 'updateControls'
776
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, {
777
+ state: current.disallowUnmute
778
+ });
779
+ }
780
+ if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
781
+ this.emitScoped({
782
+ file: 'locus-info',
783
+ function: 'updateControls'
784
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, {
785
+ state: current.reactions
786
+ });
787
+ }
788
+ if (hasViewTheParticipantListChanged) {
789
+ this.emitScoped({
790
+ file: 'locus-info',
791
+ function: 'updateControls'
792
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, {
793
+ state: current.viewTheParticipantList
794
+ });
795
+ }
796
+ if (hasRaiseHandChanged) {
797
+ this.emitScoped({
798
+ file: 'locus-info',
799
+ function: 'updateControls'
800
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, {
801
+ state: current.raiseHand
802
+ });
803
+ }
804
+ if (hasVideoChanged) {
805
+ this.emitScoped({
806
+ file: 'locus-info',
807
+ function: 'updateControls'
808
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, {
809
+ state: current.video
810
+ });
811
+ }
650
812
  if (hasRecordingChanged || hasRecordingPausedChanged) {
651
813
  var state = null;
652
814
  if (hasRecordingPausedChanged) {
@@ -691,6 +853,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
691
853
  }
692
854
  if (hasBreakoutChanged) {
693
855
  var breakout = current.breakout;
856
+ breakout.breakoutMoveId = _selfUtils.default.getReplacedBreakoutMoveId(self, this.webex.internal.device.url);
694
857
  this.emitScoped({
695
858
  file: 'locus-info',
696
859
  function: 'updateControls'
@@ -698,16 +861,41 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
698
861
  breakout: breakout
699
862
  });
700
863
  }
864
+ if (hasInterpretationChanged) {
865
+ var interpretation = current.interpretation;
866
+ this.emitScoped({
867
+ file: 'locus-info',
868
+ function: 'updateControls'
869
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, {
870
+ interpretation: interpretation
871
+ });
872
+ }
701
873
  if (hasEntryExitToneChanged) {
702
874
  var entryExitTone = current.entryExitTone;
875
+ this.updateMeeting({
876
+ entryExitTone: entryExitTone
877
+ });
703
878
  this.emitScoped({
704
879
  file: 'locus-info',
705
880
  function: 'updateControls'
706
881
  }, _constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, {
707
882
  entryExitTone: entryExitTone
708
883
  });
884
+ }
885
+
886
+ // videoEnabled is handled differently than other controls,
887
+ // to fit with audio mute status logic
888
+ if (hasVideoEnabledChanged) {
889
+ var videoEnabled = current.videoEnabled;
709
890
  this.updateMeeting({
710
- entryExitTone: entryExitTone
891
+ unmuteVideoAllowed: videoEnabled
892
+ });
893
+ this.emitScoped({
894
+ file: 'locus-info',
895
+ function: 'updateControls'
896
+ }, _constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, {
897
+ // muted: not part of locus.controls
898
+ unmuteAllowed: videoEnabled
711
899
  });
712
900
  }
713
901
  this.controls = controls;
@@ -840,18 +1028,11 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
840
1028
  }, {
841
1029
  key: "updateMeetingInfo",
842
1030
  value: function updateMeetingInfo(info, self) {
843
- if (info && !(0, _isEqual2.default)(this.info, info)) {
844
- var _this$parsedLocus$sel;
845
- 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) || [];
1031
+ var _this$parsedLocus$sel;
1032
+ 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) || [];
1033
+ if (info && !(0, _isEqual2.default)(this.info, info) || roles.length && !(0, _isEqual2.default)(this.roles, roles) && info) {
846
1034
  var isJoined = _selfUtils.default.isJoined(self || this.parsedLocus.self);
847
1035
  var parsedInfo = _infoUtils.default.getInfos(this.parsedLocus.info, info, roles, isJoined);
848
- this.emitScoped({
849
- file: 'locus-info',
850
- function: 'updateMeetingInfo'
851
- }, _constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, {
852
- info: parsedInfo.current,
853
- self: self
854
- });
855
1036
  if (parsedInfo.updates.isLocked) {
856
1037
  this.emitScoped({
857
1038
  file: 'locus-info',
@@ -868,7 +1049,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
868
1049
  this.parsedLocus.info = parsedInfo.current;
869
1050
  // Parses the info and adds necessary values
870
1051
  this.updateMeeting(parsedInfo.current);
1052
+ this.emitScoped({
1053
+ file: 'locus-info',
1054
+ function: 'updateMeetingInfo'
1055
+ }, _constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, {
1056
+ isInitializing: !self // if self is undefined, then the update is caused by locus init
1057
+ });
871
1058
  }
1059
+
1060
+ this.roles = roles;
872
1061
  }
873
1062
 
874
1063
  /**
@@ -994,6 +1183,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
994
1183
  breakoutSessions: parsedSelves.current.breakoutSessions
995
1184
  });
996
1185
  }
1186
+ if (parsedSelves.updates.interpretationChanged) {
1187
+ this.emitScoped({
1188
+ file: 'locus-info',
1189
+ function: 'updateSelf'
1190
+ }, _constants.LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED, {
1191
+ interpretation: parsedSelves.current.interpretation,
1192
+ selfParticipantId: parsedSelves.current.selfId
1193
+ });
1194
+ }
997
1195
  if (parsedSelves.updates.isMediaInactiveOrReleased) {
998
1196
  this.emitScoped({
999
1197
  file: 'locus-info',
@@ -1008,6 +1206,26 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1008
1206
  function: 'updateSelf'
1009
1207
  }, _constants.LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED, self);
1010
1208
  }
1209
+ if (parsedSelves.updates.isRolesChanged) {
1210
+ var _parsedSelves$previou, _parsedSelves$current;
1211
+ this.emitScoped({
1212
+ file: 'locus-info',
1213
+ function: 'updateSelf'
1214
+ }, _constants.LOCUSINFO.EVENTS.SELF_ROLES_CHANGED, {
1215
+ oldRoles: (_parsedSelves$previou = parsedSelves.previous) === null || _parsedSelves$previou === void 0 ? void 0 : _parsedSelves$previou.roles,
1216
+ newRoles: (_parsedSelves$current = parsedSelves.current) === null || _parsedSelves$current === void 0 ? void 0 : _parsedSelves$current.roles
1217
+ });
1218
+ }
1219
+ if (parsedSelves.updates.isVideoMutedByOthersChanged) {
1220
+ this.emitScoped({
1221
+ file: 'locus-info',
1222
+ function: 'updateSelf'
1223
+ }, _constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, {
1224
+ muted: parsedSelves.current.remoteVideoMuted
1225
+ // unmuteAllowed: not part of .self
1226
+ });
1227
+ }
1228
+
1011
1229
  if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
1012
1230
  this.emitScoped({
1013
1231
  file: 'locus-info',
@@ -1053,14 +1271,14 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1053
1271
  _constants.LOCUSINFO.EVENTS.MEDIA_INACTIVITY, _selfUtils.default.getMediaStatus(self.mediaSessions));
1054
1272
  }
1055
1273
  if (parsedSelves.updates.audioStateChange || parsedSelves.updates.videoStateChange || parsedSelves.updates.shareStateChange) {
1056
- var _parsedSelves$current, _parsedSelves$current2, _parsedSelves$current3;
1274
+ var _parsedSelves$current2, _parsedSelves$current3, _parsedSelves$current4;
1057
1275
  this.emitScoped({
1058
1276
  file: 'locus-info',
1059
1277
  function: 'updateSelf'
1060
1278
  }, _constants.LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE, {
1061
- audioStatus: (_parsedSelves$current = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current === void 0 ? void 0 : _parsedSelves$current.audio,
1062
- videoStatus: (_parsedSelves$current2 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current2 === void 0 ? void 0 : _parsedSelves$current2.video,
1063
- shareStatus: (_parsedSelves$current3 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current3 === void 0 ? void 0 : _parsedSelves$current3.share
1279
+ audioStatus: (_parsedSelves$current2 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current2 === void 0 ? void 0 : _parsedSelves$current2.audio,
1280
+ videoStatus: (_parsedSelves$current3 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current3 === void 0 ? void 0 : _parsedSelves$current3.video,
1281
+ shareStatus: (_parsedSelves$current4 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current4 === void 0 ? void 0 : _parsedSelves$current4.share
1064
1282
  });
1065
1283
  }
1066
1284
  if (parsedSelves.updates.isUserObserving) {
@@ -1185,6 +1403,112 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1185
1403
  this.identities = identities;
1186
1404
  }
1187
1405
  }
1406
+
1407
+ /**
1408
+ * check the locus is main session's one or not, if is main session's, update main session cache
1409
+ * @param {Object} locus
1410
+ * @returns {undefined}
1411
+ * @memberof LocusInfo
1412
+ */
1413
+ }, {
1414
+ key: "updateLocusCache",
1415
+ value: function updateLocusCache(locus) {
1416
+ var isMainSessionDTO = _controlsUtils.default.isMainSessionDTO(locus);
1417
+ if (isMainSessionDTO) {
1418
+ this.updateMainSessionLocusCache(locus);
1419
+ }
1420
+ }
1421
+
1422
+ /**
1423
+ * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
1424
+ * if join breakout from main session, main session is not active for the attendee and remove main session locus cache
1425
+ * @param {Object} newLocus
1426
+ * @returns {Object}
1427
+ * @memberof LocusInfo
1428
+ */
1429
+ }, {
1430
+ key: "getTheLocusToUpdate",
1431
+ value: function getTheLocusToUpdate(newLocus) {
1432
+ var switchStatus = _controlsUtils.default.getSessionSwitchStatus(this.controls, newLocus === null || newLocus === void 0 ? void 0 : newLocus.controls);
1433
+ if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
1434
+ return (0, _cloneDeep2.default)(this.mainSessionLocusCache);
1435
+ }
1436
+ var isMainSessionDTO = this.mainSessionLocusCache && _controlsUtils.default.isMainSessionDTO(this.mainSessionLocusCache);
1437
+ if (isMainSessionDTO) {
1438
+ var _this$fullState, _this$mainSessionLocu, _this$mainSessionLocu2;
1439
+ var isActive = [_constants.LOCUS.STATE.ACTIVE, _constants.LOCUS.STATE.INITIALIZING, _constants.LOCUS.STATE.TERMINATING].includes((_this$fullState = this.fullState) === null || _this$fullState === void 0 ? void 0 : _this$fullState.state) && !((_this$mainSessionLocu = this.mainSessionLocusCache) !== null && _this$mainSessionLocu !== void 0 && (_this$mainSessionLocu2 = _this$mainSessionLocu.self) !== null && _this$mainSessionLocu2 !== void 0 && _this$mainSessionLocu2.removed);
1440
+ if (!isActive) {
1441
+ this.clearMainSessionLocusCache();
1442
+ }
1443
+ }
1444
+ return newLocus;
1445
+ }
1446
+
1447
+ /**
1448
+ * merge participants by participant id
1449
+ * @param {Array} participants
1450
+ * @param {Array} sourceParticipants
1451
+ * @returns {Array} merged participants
1452
+ * @memberof LocusInfo
1453
+ */
1454
+ // eslint-disable-next-line class-methods-use-this
1455
+ }, {
1456
+ key: "mergeParticipants",
1457
+ value: function mergeParticipants(participants, sourceParticipants) {
1458
+ if (!sourceParticipants || !sourceParticipants.length) return participants;
1459
+ if (!participants || !participants.length) {
1460
+ return sourceParticipants;
1461
+ }
1462
+ sourceParticipants.forEach(function (participant) {
1463
+ var existIndex = participants.findIndex(function (p) {
1464
+ return p.id === participant.id;
1465
+ });
1466
+ if (existIndex > -1) {
1467
+ participants.splice(existIndex, 1, participant);
1468
+ } else {
1469
+ participants.push(participant);
1470
+ }
1471
+ });
1472
+ return participants;
1473
+ }
1474
+
1475
+ /**
1476
+ * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
1477
+ * @param {Object} mainLocus
1478
+ * @returns {undefined}
1479
+ * @memberof LocusInfo
1480
+ */
1481
+ }, {
1482
+ key: "updateMainSessionLocusCache",
1483
+ value: function updateMainSessionLocusCache(mainLocus) {
1484
+ var _this5 = this;
1485
+ if (!mainLocus) {
1486
+ return;
1487
+ }
1488
+ var locusClone = (0, _cloneDeep2.default)(mainLocus);
1489
+ if (this.mainSessionLocusCache) {
1490
+ // shallow merge and do special merge for participants
1491
+ (0, _assignWith2.default)(this.mainSessionLocusCache, locusClone, function (objValue, srcValue, key) {
1492
+ if (key === 'participants') {
1493
+ return _this5.mergeParticipants(objValue, srcValue);
1494
+ }
1495
+ return srcValue || objValue;
1496
+ });
1497
+ } else {
1498
+ this.mainSessionLocusCache = locusClone;
1499
+ }
1500
+ }
1501
+
1502
+ /**
1503
+ * clear main session cache
1504
+ * @returns {undefined}
1505
+ * @memberof LocusInfo
1506
+ */
1507
+ }, {
1508
+ key: "clearMainSessionLocusCache",
1509
+ value: function clearMainSessionLocusCache() {
1510
+ this.mainSessionLocusCache = null;
1511
+ }
1188
1512
  }]);
1189
1513
  return LocusInfo;
1190
1514
  }(_eventsScope.default);