@webex/plugin-meetings 3.0.0-beta.17 → 3.0.0-beta.171

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 (427) hide show
  1. package/README.md +45 -7
  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 +359 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +216 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +23 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +52 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +45 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1048 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +78 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +67 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +3 -2
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/config.js +6 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +194 -28
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  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 +300 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +107 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +214 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +92 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +350 -41
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/mediaSharesUtils.js +43 -1
  53. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  54. package/dist/locus-info/parser.js +2 -1
  55. package/dist/locus-info/parser.js.map +1 -1
  56. package/dist/locus-info/selfUtils.js +97 -14
  57. package/dist/locus-info/selfUtils.js.map +1 -1
  58. package/dist/media/index.js +41 -136
  59. package/dist/media/index.js.map +1 -1
  60. package/dist/media/properties.js +33 -94
  61. package/dist/media/properties.js.map +1 -1
  62. package/dist/mediaQualityMetrics/config.js +505 -493
  63. package/dist/mediaQualityMetrics/config.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +76 -2
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +2757 -2439
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +291 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +229 -124
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +191 -167
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/request.type.js.map +1 -1
  75. package/dist/meeting/util.js +477 -466
  76. package/dist/meeting/util.js.map +1 -1
  77. package/dist/meeting-info/index.js +48 -7
  78. package/dist/meeting-info/index.js.map +1 -1
  79. package/dist/meeting-info/meeting-info-v2.js +172 -50
  80. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  81. package/dist/meeting-info/utilv2.js +20 -5
  82. package/dist/meeting-info/utilv2.js.map +1 -1
  83. package/dist/meetings/collection.js +22 -0
  84. package/dist/meetings/collection.js.map +1 -1
  85. package/dist/meetings/index.js +377 -82
  86. package/dist/meetings/index.js.map +1 -1
  87. package/dist/meetings/meetings.types.js +7 -0
  88. package/dist/meetings/meetings.types.js.map +1 -0
  89. package/dist/meetings/request.js +16 -12
  90. package/dist/meetings/request.js.map +1 -1
  91. package/dist/meetings/util.js +88 -1
  92. package/dist/meetings/util.js.map +1 -1
  93. package/dist/member/index.js +43 -0
  94. package/dist/member/index.js.map +1 -1
  95. package/dist/member/types.js +15 -0
  96. package/dist/member/types.js.map +1 -0
  97. package/dist/member/util.js +97 -3
  98. package/dist/member/util.js.map +1 -1
  99. package/dist/members/collection.js +10 -0
  100. package/dist/members/collection.js.map +1 -1
  101. package/dist/members/index.js +94 -11
  102. package/dist/members/index.js.map +1 -1
  103. package/dist/members/request.js +109 -39
  104. package/dist/members/request.js.map +1 -1
  105. package/dist/members/types.js +15 -0
  106. package/dist/members/types.js.map +1 -0
  107. package/dist/members/util.js +316 -233
  108. package/dist/members/util.js.map +1 -1
  109. package/dist/metrics/constants.js +3 -5
  110. package/dist/metrics/constants.js.map +1 -1
  111. package/dist/metrics/index.js +1 -468
  112. package/dist/metrics/index.js.map +1 -1
  113. package/dist/multistream/mediaRequestManager.js +265 -36
  114. package/dist/multistream/mediaRequestManager.js.map +1 -1
  115. package/dist/multistream/receiveSlot.js +52 -19
  116. package/dist/multistream/receiveSlot.js.map +1 -1
  117. package/dist/multistream/receiveSlotManager.js +53 -33
  118. package/dist/multistream/receiveSlotManager.js.map +1 -1
  119. package/dist/multistream/remoteMedia.js +44 -18
  120. package/dist/multistream/remoteMedia.js.map +1 -1
  121. package/dist/multistream/remoteMediaGroup.js +60 -3
  122. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  123. package/dist/multistream/remoteMediaManager.js +322 -103
  124. package/dist/multistream/remoteMediaManager.js.map +1 -1
  125. package/dist/networkQualityMonitor/index.js +4 -2
  126. package/dist/networkQualityMonitor/index.js.map +1 -1
  127. package/dist/reachability/index.js +117 -60
  128. package/dist/reachability/index.js.map +1 -1
  129. package/dist/reachability/request.js +12 -5
  130. package/dist/reachability/request.js.map +1 -1
  131. package/dist/reactions/constants.js +13 -0
  132. package/dist/reactions/constants.js.map +1 -0
  133. package/dist/reactions/reactions.js +2 -2
  134. package/dist/reactions/reactions.js.map +1 -1
  135. package/dist/reactions/reactions.type.js +18 -18
  136. package/dist/reactions/reactions.type.js.map +1 -1
  137. package/dist/reconnection-manager/index.js +216 -162
  138. package/dist/reconnection-manager/index.js.map +1 -1
  139. package/dist/recording-controller/enums.js +17 -0
  140. package/dist/recording-controller/enums.js.map +1 -0
  141. package/dist/recording-controller/index.js +363 -0
  142. package/dist/recording-controller/index.js.map +1 -0
  143. package/dist/recording-controller/util.js +64 -0
  144. package/dist/recording-controller/util.js.map +1 -0
  145. package/dist/roap/index.js +21 -29
  146. package/dist/roap/index.js.map +1 -1
  147. package/dist/roap/request.js +135 -94
  148. package/dist/roap/request.js.map +1 -1
  149. package/dist/roap/turnDiscovery.js +135 -53
  150. package/dist/roap/turnDiscovery.js.map +1 -1
  151. package/dist/statsAnalyzer/global.js +1 -93
  152. package/dist/statsAnalyzer/global.js.map +1 -1
  153. package/dist/statsAnalyzer/index.js +329 -314
  154. package/dist/statsAnalyzer/index.js.map +1 -1
  155. package/dist/statsAnalyzer/mqaUtil.js +103 -54
  156. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  157. package/dist/types/annotation/annotation.types.d.ts +43 -0
  158. package/dist/types/annotation/constants.d.ts +31 -0
  159. package/dist/types/annotation/index.d.ts +124 -0
  160. package/dist/types/breakouts/breakout.d.ts +8 -0
  161. package/dist/types/breakouts/collection.d.ts +5 -0
  162. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  163. package/dist/types/breakouts/events.d.ts +8 -0
  164. package/dist/types/breakouts/index.d.ts +5 -0
  165. package/dist/types/breakouts/request.d.ts +22 -0
  166. package/dist/types/breakouts/utils.d.ts +15 -0
  167. package/dist/types/common/browser-detection.d.ts +9 -0
  168. package/dist/types/common/collection.d.ts +48 -0
  169. package/dist/types/common/config.d.ts +2 -0
  170. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  171. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  172. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  173. package/dist/types/common/errors/media.d.ts +15 -0
  174. package/dist/types/common/errors/parameter.d.ts +15 -0
  175. package/dist/types/common/errors/password-error.d.ts +15 -0
  176. package/dist/types/common/errors/permission.d.ts +14 -0
  177. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  178. package/dist/types/common/errors/reconnection.d.ts +15 -0
  179. package/dist/types/common/errors/stats.d.ts +15 -0
  180. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  181. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  182. package/dist/types/common/events/events-scope.d.ts +17 -0
  183. package/dist/types/common/events/events.d.ts +12 -0
  184. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  185. package/dist/types/common/events/util.d.ts +2 -0
  186. package/dist/types/common/logs/logger-config.d.ts +2 -0
  187. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  188. package/dist/types/common/logs/request.d.ts +34 -0
  189. package/dist/types/common/queue.d.ts +32 -0
  190. package/dist/types/config.d.ts +72 -0
  191. package/dist/types/constants.d.ts +1007 -0
  192. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  193. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  194. package/dist/types/controls-options-manager/index.d.ts +136 -0
  195. package/dist/types/controls-options-manager/types.d.ts +43 -0
  196. package/dist/types/controls-options-manager/util.d.ts +1 -0
  197. package/dist/types/index.d.ts +7 -0
  198. package/dist/types/interpretation/collection.d.ts +5 -0
  199. package/dist/types/interpretation/index.d.ts +5 -0
  200. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  201. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  202. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  203. package/dist/types/locus-info/fullState.d.ts +2 -0
  204. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  205. package/dist/types/locus-info/index.d.ts +315 -0
  206. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  207. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  208. package/dist/types/locus-info/parser.d.ts +212 -0
  209. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  210. package/dist/types/media/index.d.ts +34 -0
  211. package/dist/types/media/properties.d.ts +93 -0
  212. package/dist/types/media/util.d.ts +2 -0
  213. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  214. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  215. package/dist/types/meeting/index.d.ts +1462 -0
  216. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  217. package/dist/types/meeting/muteState.d.ts +184 -0
  218. package/dist/types/meeting/request.d.ts +270 -0
  219. package/dist/types/meeting/request.type.d.ts +11 -0
  220. package/dist/types/meeting/state.d.ts +9 -0
  221. package/dist/types/meeting/util.d.ts +77 -0
  222. package/dist/types/meeting-info/collection.d.ts +20 -0
  223. package/dist/types/meeting-info/index.d.ts +62 -0
  224. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  225. package/dist/types/meeting-info/request.d.ts +22 -0
  226. package/dist/types/meeting-info/util.d.ts +2 -0
  227. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  228. package/dist/types/meetings/collection.d.ts +31 -0
  229. package/dist/types/meetings/index.d.ts +365 -0
  230. package/dist/types/meetings/meetings.types.d.ts +4 -0
  231. package/dist/types/meetings/request.d.ts +27 -0
  232. package/dist/types/meetings/util.d.ts +18 -0
  233. package/dist/types/member/index.d.ts +158 -0
  234. package/dist/types/member/types.d.ts +21 -0
  235. package/dist/types/member/util.d.ts +2 -0
  236. package/dist/types/members/collection.d.ts +29 -0
  237. package/dist/types/members/index.d.ts +353 -0
  238. package/dist/types/members/request.d.ts +114 -0
  239. package/dist/types/members/types.d.ts +24 -0
  240. package/dist/types/members/util.d.ts +210 -0
  241. package/dist/types/metrics/constants.d.ts +55 -0
  242. package/dist/types/metrics/index.d.ts +45 -0
  243. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  244. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  245. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  246. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  247. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  248. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  249. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  250. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  251. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  252. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  253. package/dist/types/reachability/index.d.ts +152 -0
  254. package/dist/types/reachability/request.d.ts +37 -0
  255. package/dist/types/reactions/constants.d.ts +3 -0
  256. package/dist/types/reactions/reactions.d.ts +4 -0
  257. package/dist/types/reactions/reactions.type.d.ts +52 -0
  258. package/dist/types/reconnection-manager/index.d.ts +126 -0
  259. package/dist/types/recording-controller/enums.d.ts +7 -0
  260. package/dist/types/recording-controller/index.d.ts +208 -0
  261. package/dist/types/recording-controller/util.d.ts +14 -0
  262. package/dist/types/roap/index.d.ts +77 -0
  263. package/dist/types/roap/request.d.ts +36 -0
  264. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  265. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  266. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  267. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  268. package/dist/types/transcription/index.d.ts +64 -0
  269. package/package.json +29 -21
  270. package/src/annotation/annotation.types.ts +52 -0
  271. package/src/annotation/constants.ts +36 -0
  272. package/src/annotation/index.ts +343 -0
  273. package/src/breakouts/README.md +220 -0
  274. package/src/breakouts/breakout.ts +188 -0
  275. package/src/breakouts/collection.ts +19 -0
  276. package/src/breakouts/edit-lock-error.ts +25 -0
  277. package/src/breakouts/events.ts +56 -0
  278. package/src/breakouts/index.ts +925 -0
  279. package/src/breakouts/request.ts +55 -0
  280. package/src/breakouts/utils.ts +57 -0
  281. package/src/common/errors/webex-errors.ts +6 -2
  282. package/src/common/logs/logger-proxy.ts +1 -1
  283. package/src/config.ts +5 -7
  284. package/src/constants.ts +183 -22
  285. package/src/controls-options-manager/constants.ts +5 -0
  286. package/src/controls-options-manager/enums.ts +18 -0
  287. package/src/controls-options-manager/index.ts +278 -0
  288. package/src/controls-options-manager/types.ts +59 -0
  289. package/src/controls-options-manager/util.ts +286 -0
  290. package/src/index.ts +39 -0
  291. package/src/interpretation/README.md +51 -0
  292. package/src/interpretation/collection.ts +19 -0
  293. package/src/interpretation/index.ts +182 -0
  294. package/src/interpretation/siLanguage.ts +18 -0
  295. package/src/locus-info/controlsUtils.ts +110 -0
  296. package/src/locus-info/index.ts +374 -38
  297. package/src/locus-info/mediaSharesUtils.ts +48 -0
  298. package/src/locus-info/parser.ts +2 -1
  299. package/src/locus-info/selfUtils.ts +86 -2
  300. package/src/media/index.ts +78 -144
  301. package/src/media/properties.ts +55 -99
  302. package/src/mediaQualityMetrics/config.ts +379 -377
  303. package/src/meeting/in-meeting-actions.ts +151 -3
  304. package/src/meeting/index.ts +2181 -2052
  305. package/src/meeting/locusMediaRequest.ts +309 -0
  306. package/src/meeting/muteState.ts +228 -132
  307. package/src/meeting/request.ts +100 -91
  308. package/src/meeting/request.type.ts +2 -0
  309. package/src/meeting/util.ts +450 -439
  310. package/src/meeting-info/index.ts +54 -8
  311. package/src/meeting-info/meeting-info-v2.ts +150 -14
  312. package/src/meeting-info/utilv2.ts +13 -3
  313. package/src/meetings/collection.ts +20 -0
  314. package/src/meetings/index.ts +396 -89
  315. package/src/meetings/meetings.types.ts +12 -0
  316. package/src/meetings/request.ts +3 -1
  317. package/src/meetings/util.ts +103 -4
  318. package/src/member/index.ts +42 -0
  319. package/src/member/types.ts +24 -0
  320. package/src/member/util.ts +95 -1
  321. package/src/members/collection.ts +8 -0
  322. package/src/members/index.ts +108 -6
  323. package/src/members/request.ts +98 -17
  324. package/src/members/types.ts +28 -0
  325. package/src/members/util.ts +319 -240
  326. package/src/metrics/constants.ts +2 -4
  327. package/src/metrics/index.ts +1 -490
  328. package/src/multistream/mediaRequestManager.ts +337 -63
  329. package/src/multistream/receiveSlot.ts +68 -26
  330. package/src/multistream/receiveSlotManager.ts +61 -38
  331. package/src/multistream/remoteMedia.ts +29 -3
  332. package/src/multistream/remoteMediaGroup.ts +61 -2
  333. package/src/multistream/remoteMediaManager.ts +260 -66
  334. package/src/networkQualityMonitor/index.ts +6 -6
  335. package/src/reachability/index.ts +75 -25
  336. package/src/reachability/request.ts +10 -5
  337. package/src/reactions/constants.ts +4 -0
  338. package/src/reactions/reactions.ts +4 -4
  339. package/src/reactions/reactions.type.ts +28 -3
  340. package/src/reconnection-manager/index.ts +83 -49
  341. package/src/recording-controller/enums.ts +8 -0
  342. package/src/recording-controller/index.ts +333 -0
  343. package/src/recording-controller/util.ts +75 -0
  344. package/src/roap/index.ts +21 -30
  345. package/src/roap/request.ts +72 -61
  346. package/src/roap/turnDiscovery.ts +51 -27
  347. package/src/statsAnalyzer/global.ts +1 -94
  348. package/src/statsAnalyzer/index.ts +380 -390
  349. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  350. package/test/integration/spec/converged-space-meetings.js +233 -0
  351. package/test/integration/spec/journey.js +336 -259
  352. package/test/integration/spec/space-meeting.js +77 -4
  353. package/test/unit/spec/annotation/index.ts +436 -0
  354. package/test/unit/spec/breakouts/breakout.ts +237 -0
  355. package/test/unit/spec/breakouts/collection.ts +15 -0
  356. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  357. package/test/unit/spec/breakouts/events.ts +89 -0
  358. package/test/unit/spec/breakouts/index.ts +1790 -0
  359. package/test/unit/spec/breakouts/request.ts +104 -0
  360. package/test/unit/spec/breakouts/utils.js +72 -0
  361. package/test/unit/spec/controls-options-manager/index.js +287 -0
  362. package/test/unit/spec/controls-options-manager/util.js +518 -0
  363. package/test/unit/spec/fixture/locus.js +1 -0
  364. package/test/unit/spec/interpretation/collection.ts +15 -0
  365. package/test/unit/spec/interpretation/index.ts +329 -0
  366. package/test/unit/spec/interpretation/siLanguage.ts +26 -0
  367. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  368. package/test/unit/spec/locus-info/index.js +792 -4
  369. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  370. package/test/unit/spec/locus-info/selfConstant.js +48 -0
  371. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  372. package/test/unit/spec/media/index.ts +130 -24
  373. package/test/unit/spec/media/properties.ts +9 -9
  374. package/test/unit/spec/meeting/in-meeting-actions.ts +75 -3
  375. package/test/unit/spec/meeting/index.js +2834 -1442
  376. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  377. package/test/unit/spec/meeting/muteState.js +370 -208
  378. package/test/unit/spec/meeting/request.js +354 -42
  379. package/test/unit/spec/meeting/utils.js +384 -170
  380. package/test/unit/spec/meeting-info/index.js +181 -0
  381. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  382. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  383. package/test/unit/spec/meetings/collection.js +14 -0
  384. package/test/unit/spec/meetings/index.js +847 -121
  385. package/test/unit/spec/meetings/utils.js +206 -2
  386. package/test/unit/spec/member/index.js +31 -0
  387. package/test/unit/spec/member/util.js +408 -32
  388. package/test/unit/spec/members/index.js +320 -1
  389. package/test/unit/spec/members/request.js +206 -27
  390. package/test/unit/spec/members/utils.js +184 -0
  391. package/test/unit/spec/metrics/index.js +1 -50
  392. package/test/unit/spec/multistream/mediaRequestManager.ts +1012 -109
  393. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  394. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  395. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  396. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  397. package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
  398. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  399. package/test/unit/spec/reachability/index.ts +176 -25
  400. package/test/unit/spec/reachability/request.js +66 -0
  401. package/test/unit/spec/reconnection-manager/index.js +95 -13
  402. package/test/unit/spec/recording-controller/index.js +307 -0
  403. package/test/unit/spec/recording-controller/util.js +229 -0
  404. package/test/unit/spec/roap/index.ts +28 -52
  405. package/test/unit/spec/roap/request.ts +225 -0
  406. package/test/unit/spec/roap/turnDiscovery.ts +73 -34
  407. package/test/unit/spec/stats-analyzer/index.js +94 -43
  408. package/test/utils/constants.js +9 -0
  409. package/test/utils/integrationTestUtils.js +46 -0
  410. package/test/utils/testUtils.js +0 -45
  411. package/test/utils/webex-config.js +4 -0
  412. package/test/utils/webex-test-users.js +7 -3
  413. package/tsconfig.json +6 -0
  414. package/dist/media/internal-media-core-wrapper.js +0 -18
  415. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  416. package/dist/meeting/effectsState.js +0 -262
  417. package/dist/meeting/effectsState.js.map +0 -1
  418. package/dist/metrics/config.js +0 -299
  419. package/dist/metrics/config.js.map +0 -1
  420. package/dist/multistream/multistreamMedia.js +0 -106
  421. package/dist/multistream/multistreamMedia.js.map +0 -1
  422. package/src/index.js +0 -15
  423. package/src/media/internal-media-core-wrapper.ts +0 -9
  424. package/src/meeting/effectsState.ts +0 -211
  425. package/src/metrics/config.ts +0 -495
  426. package/src/multistream/multistreamMedia.ts +0 -93
  427. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -15,12 +15,12 @@ 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 _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
19
+ var _assignWith2 = _interopRequireDefault(require("lodash/assignWith"));
18
20
  var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
19
21
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
20
22
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
21
23
  var _constants = require("../constants");
22
- var _metrics = _interopRequireDefault(require("../metrics"));
23
- var _config = require("../metrics/config");
24
24
  var _infoUtils = _interopRequireDefault(require("./infoUtils"));
25
25
  var _fullState = _interopRequireDefault(require("./fullState"));
26
26
  var _selfUtils = _interopRequireDefault(require("./selfUtils"));
@@ -40,6 +40,13 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
40
40
  var LocusInfo = /*#__PURE__*/function (_EventsScope) {
41
41
  (0, _inherits2.default)(LocusInfo, _EventsScope);
42
42
  var _super = _createSuper(LocusInfo);
43
+ /**
44
+ * Constructor
45
+ * @param {boolean} updateMeeting true if the meeting should be updated
46
+ * @param {object} webex
47
+ * @param {string} meetingId
48
+ * @returns {undefined}
49
+ */
43
50
  function LocusInfo(updateMeeting, webex, meetingId) {
44
51
  var _this;
45
52
  (0, _classCallCheck2.default)(this, LocusInfo);
@@ -68,9 +75,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
68
75
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fullState", void 0);
69
76
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "host", void 0);
70
77
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "info", void 0);
78
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roles", void 0);
71
79
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaShares", void 0);
72
80
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "replace", void 0);
73
81
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "url", void 0);
82
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "services", void 0);
83
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mainSessionLocusCache", void 0);
74
84
  _this.parsedLocus = {
75
85
  states: []
76
86
  };
@@ -109,7 +119,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
109
119
  case DESYNC:
110
120
  meeting.meetingRequest.getFullLocus({
111
121
  desync: true,
112
- locusUrl: meeting.locusUrl
122
+ locusUrl: locus.url ? locus.url : meeting.locusUrl
113
123
  }).then(function (res) {
114
124
  meeting.locusInfo.onFullLocus(res.body);
115
125
  // Notify parser to resume processing delta events
@@ -154,6 +164,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
154
164
  }, {
155
165
  key: "init",
156
166
  value: function init() {
167
+ var _locus$links;
157
168
  var locus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
158
169
  this.created = locus.created || null;
159
170
  this.scheduledMeeting = locus.meeting || null;
@@ -184,13 +195,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
184
195
  * @member LocusInfo
185
196
  */
186
197
  this.deltaParticipants = [];
187
-
198
+ this.updateLocusCache(locus);
188
199
  // above section only updates the locusInfo object
189
200
  // The below section makes sure it updates the locusInfo as well as updates the meeting object
190
201
  this.updateParticipants(locus.participants);
191
202
  // For 1:1 space meeting the conversation Url does not exist in locus.conversation
192
203
  this.updateConversationUrl(locus.conversationUrl, locus.info);
193
- this.updateControls(locus.controls);
204
+ this.updateControls(locus.controls, locus.self);
194
205
  this.updateLocusUrl(locus.url);
195
206
  this.updateFullState(locus.fullState);
196
207
  this.updateMeetingInfo(locus.info);
@@ -199,6 +210,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
199
210
  this.updateSelf(locus.self, locus.participants);
200
211
  this.updateHostInfo(locus.host);
201
212
  this.updateMediaShares(locus.mediaShares);
213
+ this.updateServices((_locus$links = locus.links) === null || _locus$links === void 0 ? void 0 : _locus$links.services);
202
214
  }
203
215
 
204
216
  /**
@@ -209,6 +221,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
209
221
  }, {
210
222
  key: "initialSetup",
211
223
  value: function initialSetup(locus) {
224
+ this.updateLocusCache(locus);
212
225
  this.onFullLocus(locus);
213
226
 
214
227
  // Change it to true after it receives it first locus object
@@ -226,6 +239,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
226
239
  value: function parse(meeting, data) {
227
240
  // eslint-disable-next-line @typescript-eslint/no-shadow
228
241
  var eventType = data.eventType;
242
+ var locus = this.getTheLocusToUpdate(data.locus);
229
243
  _loggerProxy.default.logger.info("Locus-info:index#parse --> received locus data: ".concat(eventType));
230
244
  switch (eventType) {
231
245
  case _constants.LOCUSEVENT.PARTICIPANT_JOIN:
@@ -242,15 +256,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
242
256
  case _constants.LOCUSEVENT.PARTICIPANT_DECLINED:
243
257
  case _constants.LOCUSEVENT.FLOOR_GRANTED:
244
258
  case _constants.LOCUSEVENT.FLOOR_RELEASED:
245
- this.onFullLocus(data.locus, eventType);
259
+ this.onFullLocus(locus, eventType);
246
260
  break;
247
261
  case _constants.LOCUSEVENT.DIFFERENCE:
248
- this.handleLocusDelta(data.locus, meeting);
262
+ this.handleLocusDelta(locus, meeting);
249
263
  break;
250
264
  default:
251
265
  // Why will there be a event with no eventType ????
252
266
  // we may not need this, we can get full locus
253
- this.handleLocusDelta(data.locus, meeting);
267
+ this.handleLocusDelta(locus, meeting);
254
268
  }
255
269
  }
256
270
 
@@ -284,8 +298,9 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
284
298
  this.updateParticipantDeltas(locus.participants);
285
299
  this.scheduledMeeting = locus.meeting || null;
286
300
  this.participants = locus.participants;
301
+ var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
287
302
  this.updateLocusInfo(locus);
288
- this.updateParticipants(locus.participants);
303
+ this.updateParticipants(locus.participants, isReplaceMembers);
289
304
  this.isMeetingActive();
290
305
  this.handleOneOnOneEvent(eventType);
291
306
  this.updateEmbeddedApps(locus.embeddedApps);
@@ -337,8 +352,9 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
337
352
  }, {
338
353
  key: "onDeltaLocus",
339
354
  value: function onDeltaLocus(locus) {
355
+ var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
340
356
  this.updateLocusInfo(locus);
341
- this.updateParticipants(locus.participants);
357
+ this.updateParticipants(locus.participants, isReplaceMembers);
342
358
  this.isMeetingActive();
343
359
  }
344
360
 
@@ -350,7 +366,14 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
350
366
  }, {
351
367
  key: "updateLocusInfo",
352
368
  value: function updateLocusInfo(locus) {
353
- this.updateControls(locus.controls);
369
+ var _locus$self, _locus$self2, _locus$links2;
370
+ if (((_locus$self = locus.self) === null || _locus$self === void 0 ? void 0 : _locus$self.reason) === 'MOVED' && ((_locus$self2 = locus.self) === null || _locus$self2 === void 0 ? void 0 : _locus$self2.state) === 'LEFT') {
371
+ // When moved to a breakout session locus sends a message for the previous locus
372
+ // indicating that we have been moved. It isn't helpful to continue parsing this
373
+ // as it gets interpreted as if we have left the call
374
+ return;
375
+ }
376
+ this.updateControls(locus.controls, locus.self);
354
377
  this.updateConversationUrl(locus.conversationUrl, locus.info);
355
378
  this.updateCreated(locus.created);
356
379
  this.updateFullState(locus.fullState);
@@ -367,6 +390,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
367
390
  this.updateMemberShip(locus.membership);
368
391
  this.updateIdentifiers(locus.identities);
369
392
  this.updateEmbeddedApps(locus.embeddedApps);
393
+ this.updateServices((_locus$links2 = locus.links) === null || _locus$links2 === void 0 ? void 0 : _locus$links2.services);
370
394
  this.compareAndUpdate();
371
395
  // update which required to compare different objects from locus
372
396
  }
@@ -415,9 +439,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
415
439
  if (this.fullState && this.fullState.state === _constants.LOCUS.STATE.INACTIVE) {
416
440
  // TODO: update the meeting state
417
441
  _loggerProxy.default.logger.warn('Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.');
418
- _metrics.default.postEvent({
419
- event: _config.eventType.REMOTE_ENDED,
420
- meetingId: this.meetingId
442
+
443
+ // @ts-ignore
444
+ this.webex.internal.newMetrics.submitClientEvent({
445
+ name: 'client.call.remote-ended',
446
+ options: {
447
+ meetingId: this.meetingId
448
+ }
421
449
  });
422
450
  this.emitScoped({
423
451
  file: 'locus-info',
@@ -427,9 +455,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
427
455
  shouldLeave: false
428
456
  });
429
457
  } 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)) {
430
- _metrics.default.postEvent({
431
- event: _config.eventType.REMOTE_ENDED,
432
- meetingId: this.meetingId
458
+ // @ts-ignore
459
+ this.webex.internal.newMetrics.submitClientEvent({
460
+ name: 'client.call.remote-ended',
461
+ options: {
462
+ meetingId: this.meetingId
463
+ }
433
464
  });
434
465
  this.emitScoped({
435
466
  file: 'locus-info',
@@ -440,9 +471,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
440
471
  });
441
472
  } 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
442
473
  ) {
443
- _metrics.default.postEvent({
444
- event: _config.eventType.REMOTE_ENDED,
445
- meetingId: this.meetingId
474
+ // @ts-ignore
475
+ this.webex.internal.newMetrics.submitClientEvent({
476
+ name: 'client.call.remote-ended',
477
+ options: {
478
+ meetingId: this.meetingId
479
+ }
446
480
  });
447
481
  this.emitScoped({
448
482
  file: 'locus-info',
@@ -457,9 +491,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
457
491
  // @ts-ignore
458
492
  this.fullState.state === _constants.LOCUS.STATE.TERMINATING)) {
459
493
  _loggerProxy.default.logger.warn('Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating');
460
- _metrics.default.postEvent({
461
- event: _config.eventType.REMOTE_ENDED,
462
- meetingId: this.meetingId
494
+
495
+ // @ts-ignore
496
+ this.webex.internal.newMetrics.submitClientEvent({
497
+ name: 'client.call.remote-ended',
498
+ options: {
499
+ meetingId: this.meetingId
500
+ }
463
501
  });
464
502
  this.emitScoped({
465
503
  file: 'locus-info',
@@ -470,9 +508,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
470
508
  });
471
509
  } else if (this.fullState && this.fullState.removed) {
472
510
  // user has been dropped from a meeting
473
- _metrics.default.postEvent({
474
- event: _config.eventType.REMOTE_ENDED,
475
- meetingId: this.meetingId
511
+
512
+ // @ts-ignore
513
+ this.webex.internal.newMetrics.submitClientEvent({
514
+ name: 'client.call.remote-ended',
515
+ options: {
516
+ meetingId: this.meetingId
517
+ }
476
518
  });
477
519
  this.emitScoped({
478
520
  file: 'locus-info',
@@ -595,15 +637,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
595
637
  }
596
638
 
597
639
  /**
598
- *
640
+ * update meeting's members
599
641
  * @param {Object} participants new participants object
600
- * @param {boolen} deltaParticpantFlag delta event
642
+ * @param {Boolean} isReplace is replace the whole members
601
643
  * @returns {Array} updatedParticipants
602
644
  * @memberof LocusInfo
603
645
  */
604
646
  }, {
605
647
  key: "updateParticipants",
606
- value: function updateParticipants(participants) {
648
+ value: function updateParticipants(participants, isReplace) {
607
649
  var _this$parsedLocus$con;
608
650
  this.emitScoped({
609
651
  file: 'locus-info',
@@ -613,18 +655,20 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
613
655
  recordingId: this.parsedLocus.controls && ((_this$parsedLocus$con = this.parsedLocus.controls.record) === null || _this$parsedLocus$con === void 0 ? void 0 : _this$parsedLocus$con.modifiedBy),
614
656
  selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
615
657
  selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
616
- hostId: this.parsedLocus.host && this.parsedLocus.host.hostId
658
+ hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
659
+ isReplace: isReplace
617
660
  });
618
661
  }
619
662
 
620
663
  /**
621
664
  * @param {Object} controls
665
+ * @param {Object} self
622
666
  * @returns {undefined}
623
667
  * @memberof LocusInfo
624
668
  */
625
669
  }, {
626
670
  key: "updateControls",
627
- value: function updateControls(controls) {
671
+ value: function updateControls(controls, self) {
628
672
  if (controls && !(0, _isEqual2.default)(this.controls, controls)) {
629
673
  this.parsedLocus.controls = _controlsUtils.default.parse(controls);
630
674
  var _ControlsUtils$getCon = _controlsUtils.default.getControls(this.controls, controls),
@@ -634,7 +678,74 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
634
678
  hasMeetingContainerChanged = _ControlsUtils$getCon2.hasMeetingContainerChanged,
635
679
  hasTranscribeChanged = _ControlsUtils$getCon2.hasTranscribeChanged,
636
680
  hasEntryExitToneChanged = _ControlsUtils$getCon2.hasEntryExitToneChanged,
681
+ hasBreakoutChanged = _ControlsUtils$getCon2.hasBreakoutChanged,
682
+ hasVideoEnabledChanged = _ControlsUtils$getCon2.hasVideoEnabledChanged,
683
+ hasMuteOnEntryChanged = _ControlsUtils$getCon2.hasMuteOnEntryChanged,
684
+ hasShareControlChanged = _ControlsUtils$getCon2.hasShareControlChanged,
685
+ hasDisallowUnmuteChanged = _ControlsUtils$getCon2.hasDisallowUnmuteChanged,
686
+ hasReactionsChanged = _ControlsUtils$getCon2.hasReactionsChanged,
687
+ hasReactionDisplayNamesChanged = _ControlsUtils$getCon2.hasReactionDisplayNamesChanged,
688
+ hasViewTheParticipantListChanged = _ControlsUtils$getCon2.hasViewTheParticipantListChanged,
689
+ hasRaiseHandChanged = _ControlsUtils$getCon2.hasRaiseHandChanged,
690
+ hasVideoChanged = _ControlsUtils$getCon2.hasVideoChanged,
691
+ hasInterpretationChanged = _ControlsUtils$getCon2.hasInterpretationChanged,
637
692
  current = _ControlsUtils$getCon.current;
693
+ if (hasMuteOnEntryChanged) {
694
+ this.emitScoped({
695
+ file: 'locus-info',
696
+ function: 'updateControls'
697
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, {
698
+ state: current.muteOnEntry
699
+ });
700
+ }
701
+ if (hasShareControlChanged) {
702
+ this.emitScoped({
703
+ file: 'locus-info',
704
+ function: 'updateControls'
705
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, {
706
+ state: current.shareControl
707
+ });
708
+ }
709
+ if (hasDisallowUnmuteChanged) {
710
+ this.emitScoped({
711
+ file: 'locus-info',
712
+ function: 'updateControls'
713
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, {
714
+ state: current.disallowUnmute
715
+ });
716
+ }
717
+ if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
718
+ this.emitScoped({
719
+ file: 'locus-info',
720
+ function: 'updateControls'
721
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, {
722
+ state: current.reactions
723
+ });
724
+ }
725
+ if (hasViewTheParticipantListChanged) {
726
+ this.emitScoped({
727
+ file: 'locus-info',
728
+ function: 'updateControls'
729
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, {
730
+ state: current.viewTheParticipantList
731
+ });
732
+ }
733
+ if (hasRaiseHandChanged) {
734
+ this.emitScoped({
735
+ file: 'locus-info',
736
+ function: 'updateControls'
737
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, {
738
+ state: current.raiseHand
739
+ });
740
+ }
741
+ if (hasVideoChanged) {
742
+ this.emitScoped({
743
+ file: 'locus-info',
744
+ function: 'updateControls'
745
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, {
746
+ state: current.video
747
+ });
748
+ }
638
749
  if (hasRecordingChanged || hasRecordingPausedChanged) {
639
750
  var state = null;
640
751
  if (hasRecordingPausedChanged) {
@@ -677,16 +788,51 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
677
788
  caption: caption
678
789
  });
679
790
  }
791
+ if (hasBreakoutChanged) {
792
+ var breakout = current.breakout;
793
+ breakout.breakoutMoveId = _selfUtils.default.getReplacedBreakoutMoveId(self, this.webex.internal.device.url);
794
+ this.emitScoped({
795
+ file: 'locus-info',
796
+ function: 'updateControls'
797
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, {
798
+ breakout: breakout
799
+ });
800
+ }
801
+ if (hasInterpretationChanged) {
802
+ var interpretation = current.interpretation;
803
+ this.emitScoped({
804
+ file: 'locus-info',
805
+ function: 'updateControls'
806
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, {
807
+ interpretation: interpretation
808
+ });
809
+ }
680
810
  if (hasEntryExitToneChanged) {
681
811
  var entryExitTone = current.entryExitTone;
812
+ this.updateMeeting({
813
+ entryExitTone: entryExitTone
814
+ });
682
815
  this.emitScoped({
683
816
  file: 'locus-info',
684
817
  function: 'updateControls'
685
818
  }, _constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, {
686
819
  entryExitTone: entryExitTone
687
820
  });
821
+ }
822
+
823
+ // videoEnabled is handled differently than other controls,
824
+ // to fit with audio mute status logic
825
+ if (hasVideoEnabledChanged) {
826
+ var videoEnabled = current.videoEnabled;
688
827
  this.updateMeeting({
689
- entryExitTone: entryExitTone
828
+ unmuteVideoAllowed: videoEnabled
829
+ });
830
+ this.emitScoped({
831
+ file: 'locus-info',
832
+ function: 'updateControls'
833
+ }, _constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, {
834
+ // muted: not part of locus.controls
835
+ unmuteAllowed: videoEnabled
690
836
  });
691
837
  }
692
838
  this.controls = controls;
@@ -728,6 +874,25 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
728
874
  }
729
875
  }
730
876
 
877
+ /**
878
+ * @param {Object} services
879
+ * @returns {undefined}
880
+ * @memberof LocusInfo
881
+ */
882
+ }, {
883
+ key: "updateServices",
884
+ value: function updateServices(services) {
885
+ if (services && !(0, _isEqual2.default)(this.services, services)) {
886
+ this.services = services;
887
+ this.emitScoped({
888
+ file: 'locus-info',
889
+ function: 'updateServices'
890
+ }, _constants.LOCUSINFO.EVENTS.LINKS_SERVICES, {
891
+ services: services
892
+ });
893
+ }
894
+ }
895
+
731
896
  /**
732
897
  * @param {Object} fullState
733
898
  * @returns {undefined}
@@ -800,9 +965,9 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
800
965
  }, {
801
966
  key: "updateMeetingInfo",
802
967
  value: function updateMeetingInfo(info, self) {
803
- if (info && !(0, _isEqual2.default)(this.info, info)) {
804
- var _this$parsedLocus$sel;
805
- 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) || [];
968
+ var _this$parsedLocus$sel;
969
+ 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) || [];
970
+ if (info && !(0, _isEqual2.default)(this.info, info) || roles.length && !(0, _isEqual2.default)(this.roles, roles) && info) {
806
971
  var isJoined = _selfUtils.default.isJoined(self || this.parsedLocus.self);
807
972
  var parsedInfo = _infoUtils.default.getInfos(this.parsedLocus.info, info, roles, isJoined);
808
973
  this.emitScoped({
@@ -829,6 +994,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
829
994
  // Parses the info and adds necessary values
830
995
  this.updateMeeting(parsedInfo.current);
831
996
  }
997
+ this.roles = roles;
832
998
  }
833
999
 
834
1000
  /**
@@ -867,6 +1033,8 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
867
1033
  if (mediaShares && !(0, _isEqual2.default)(this.mediaShares, mediaShares)) {
868
1034
  var parsedMediaShares = _mediaSharesUtils.default.getMediaShares(this.mediaShares, mediaShares);
869
1035
  this.updateMeeting(parsedMediaShares.current);
1036
+ this.parsedLocus.mediaShares = parsedMediaShares.current;
1037
+ this.mediaShares = mediaShares;
870
1038
  this.emitScoped({
871
1039
  file: 'locus-info',
872
1040
  function: 'updateMediaShares'
@@ -874,8 +1042,6 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
874
1042
  current: parsedMediaShares.current,
875
1043
  previous: parsedMediaShares.previous
876
1044
  });
877
- this.parsedLocus.mediaShares = parsedMediaShares.current;
878
- this.mediaShares = mediaShares;
879
1045
  }
880
1046
  }
881
1047
 
@@ -946,6 +1112,23 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
946
1112
  layout: parsedSelves.current.layout
947
1113
  });
948
1114
  }
1115
+ if (parsedSelves.updates.breakoutsChanged) {
1116
+ this.emitScoped({
1117
+ file: 'locus-info',
1118
+ function: 'updateSelf'
1119
+ }, _constants.LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED, {
1120
+ breakoutSessions: parsedSelves.current.breakoutSessions
1121
+ });
1122
+ }
1123
+ if (parsedSelves.updates.interpretationChanged) {
1124
+ this.emitScoped({
1125
+ file: 'locus-info',
1126
+ function: 'updateSelf'
1127
+ }, _constants.LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED, {
1128
+ interpretation: parsedSelves.current.interpretation,
1129
+ selfParticipantId: parsedSelves.current.selfId
1130
+ });
1131
+ }
949
1132
  if (parsedSelves.updates.isMediaInactiveOrReleased) {
950
1133
  this.emitScoped({
951
1134
  file: 'locus-info',
@@ -960,6 +1143,26 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
960
1143
  function: 'updateSelf'
961
1144
  }, _constants.LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED, self);
962
1145
  }
1146
+ if (parsedSelves.updates.isRolesChanged) {
1147
+ var _parsedSelves$previou, _parsedSelves$current;
1148
+ this.emitScoped({
1149
+ file: 'locus-info',
1150
+ function: 'updateSelf'
1151
+ }, _constants.LOCUSINFO.EVENTS.SELF_ROLES_CHANGED, {
1152
+ oldRoles: (_parsedSelves$previou = parsedSelves.previous) === null || _parsedSelves$previou === void 0 ? void 0 : _parsedSelves$previou.roles,
1153
+ newRoles: (_parsedSelves$current = parsedSelves.current) === null || _parsedSelves$current === void 0 ? void 0 : _parsedSelves$current.roles
1154
+ });
1155
+ }
1156
+ if (parsedSelves.updates.isVideoMutedByOthersChanged) {
1157
+ this.emitScoped({
1158
+ file: 'locus-info',
1159
+ function: 'updateSelf'
1160
+ }, _constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, {
1161
+ muted: parsedSelves.current.remoteVideoMuted
1162
+ // unmuteAllowed: not part of .self
1163
+ });
1164
+ }
1165
+
963
1166
  if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
964
1167
  this.emitScoped({
965
1168
  file: 'locus-info',
@@ -1005,14 +1208,14 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1005
1208
  _constants.LOCUSINFO.EVENTS.MEDIA_INACTIVITY, _selfUtils.default.getMediaStatus(self.mediaSessions));
1006
1209
  }
1007
1210
  if (parsedSelves.updates.audioStateChange || parsedSelves.updates.videoStateChange || parsedSelves.updates.shareStateChange) {
1008
- var _parsedSelves$current, _parsedSelves$current2, _parsedSelves$current3;
1211
+ var _parsedSelves$current2, _parsedSelves$current3, _parsedSelves$current4;
1009
1212
  this.emitScoped({
1010
1213
  file: 'locus-info',
1011
1214
  function: 'updateSelf'
1012
1215
  }, _constants.LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE, {
1013
- audioStatus: (_parsedSelves$current = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current === void 0 ? void 0 : _parsedSelves$current.audio,
1014
- videoStatus: (_parsedSelves$current2 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current2 === void 0 ? void 0 : _parsedSelves$current2.video,
1015
- shareStatus: (_parsedSelves$current3 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current3 === void 0 ? void 0 : _parsedSelves$current3.share
1216
+ audioStatus: (_parsedSelves$current2 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current2 === void 0 ? void 0 : _parsedSelves$current2.audio,
1217
+ videoStatus: (_parsedSelves$current3 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current3 === void 0 ? void 0 : _parsedSelves$current3.video,
1218
+ shareStatus: (_parsedSelves$current4 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current4 === void 0 ? void 0 : _parsedSelves$current4.share
1016
1219
  });
1017
1220
  }
1018
1221
  if (parsedSelves.updates.isUserObserving) {
@@ -1137,6 +1340,112 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1137
1340
  this.identities = identities;
1138
1341
  }
1139
1342
  }
1343
+
1344
+ /**
1345
+ * check the locus is main session's one or not, if is main session's, update main session cache
1346
+ * @param {Object} locus
1347
+ * @returns {undefined}
1348
+ * @memberof LocusInfo
1349
+ */
1350
+ }, {
1351
+ key: "updateLocusCache",
1352
+ value: function updateLocusCache(locus) {
1353
+ var isMainSessionDTO = _controlsUtils.default.isMainSessionDTO(locus);
1354
+ if (isMainSessionDTO) {
1355
+ this.updateMainSessionLocusCache(locus);
1356
+ }
1357
+ }
1358
+
1359
+ /**
1360
+ * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
1361
+ * if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
1362
+ * @param {Object} newLocus
1363
+ * @returns {Object}
1364
+ * @memberof LocusInfo
1365
+ */
1366
+ }, {
1367
+ key: "getTheLocusToUpdate",
1368
+ value: function getTheLocusToUpdate(newLocus) {
1369
+ var switchStatus = _controlsUtils.default.getSessionSwitchStatus(this.controls, newLocus === null || newLocus === void 0 ? void 0 : newLocus.controls);
1370
+ if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
1371
+ return (0, _cloneDeep2.default)(this.mainSessionLocusCache);
1372
+ }
1373
+ if (switchStatus.isJoinToBreakout) {
1374
+ this.emitScoped({
1375
+ file: 'locus-info',
1376
+ function: 'updateControls'
1377
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN, {
1378
+ mainLocusUrl: this.url
1379
+ });
1380
+ }
1381
+ return newLocus;
1382
+ }
1383
+
1384
+ /**
1385
+ * merge participants by participant id
1386
+ * @param {Array} participants
1387
+ * @param {Array} sourceParticipants
1388
+ * @returns {Array} merged participants
1389
+ * @memberof LocusInfo
1390
+ */
1391
+ // eslint-disable-next-line class-methods-use-this
1392
+ }, {
1393
+ key: "mergeParticipants",
1394
+ value: function mergeParticipants(participants, sourceParticipants) {
1395
+ if (!sourceParticipants || !sourceParticipants.length) return participants;
1396
+ if (!participants || !participants.length) {
1397
+ return sourceParticipants;
1398
+ }
1399
+ sourceParticipants.forEach(function (participant) {
1400
+ var existIndex = participants.findIndex(function (p) {
1401
+ return p.id === participant.id;
1402
+ });
1403
+ if (existIndex > -1) {
1404
+ participants.splice(existIndex, 1, participant);
1405
+ } else {
1406
+ participants.push(participant);
1407
+ }
1408
+ });
1409
+ return participants;
1410
+ }
1411
+
1412
+ /**
1413
+ * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
1414
+ * @param {Object} mainLocus
1415
+ * @returns {undefined}
1416
+ * @memberof LocusInfo
1417
+ */
1418
+ }, {
1419
+ key: "updateMainSessionLocusCache",
1420
+ value: function updateMainSessionLocusCache(mainLocus) {
1421
+ var _this5 = this;
1422
+ if (!mainLocus) {
1423
+ return;
1424
+ }
1425
+ var locusClone = (0, _cloneDeep2.default)(mainLocus);
1426
+ if (this.mainSessionLocusCache) {
1427
+ // shallow merge and do special merge for participants
1428
+ (0, _assignWith2.default)(this.mainSessionLocusCache, locusClone, function (objValue, srcValue, key) {
1429
+ if (key === 'participants') {
1430
+ return _this5.mergeParticipants(objValue, srcValue);
1431
+ }
1432
+ return srcValue || objValue;
1433
+ });
1434
+ } else {
1435
+ this.mainSessionLocusCache = locusClone;
1436
+ }
1437
+ }
1438
+
1439
+ /**
1440
+ * clear main session cache
1441
+ * @returns {undefined}
1442
+ * @memberof LocusInfo
1443
+ */
1444
+ }, {
1445
+ key: "clearMainSessionLocusCache",
1446
+ value: function clearMainSessionLocusCache() {
1447
+ this.mainSessionLocusCache = null;
1448
+ }
1140
1449
  }]);
1141
1450
  return LocusInfo;
1142
1451
  }(_eventsScope.default);