@webex/plugin-meetings 3.0.0-beta.7 → 3.0.0-beta.71

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 (506) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +178 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/edit-lock-error.js +52 -0
  8. package/dist/breakouts/edit-lock-error.js.map +1 -0
  9. package/dist/breakouts/index.js +843 -0
  10. package/dist/breakouts/index.js.map +1 -0
  11. package/dist/breakouts/request.js +78 -0
  12. package/dist/breakouts/request.js.map +1 -0
  13. package/dist/breakouts/utils.js +56 -0
  14. package/dist/breakouts/utils.js.map +1 -0
  15. package/dist/common/browser-detection.js +1 -20
  16. package/dist/common/browser-detection.js.map +1 -1
  17. package/dist/common/collection.js +5 -20
  18. package/dist/common/collection.js.map +1 -1
  19. package/dist/common/config.js +0 -7
  20. package/dist/common/config.js.map +1 -1
  21. package/dist/common/errors/captcha-error.js +10 -24
  22. package/dist/common/errors/captcha-error.js.map +1 -1
  23. package/dist/common/errors/intent-to-join.js +11 -24
  24. package/dist/common/errors/intent-to-join.js.map +1 -1
  25. package/dist/common/errors/join-meeting.js +12 -25
  26. package/dist/common/errors/join-meeting.js.map +1 -1
  27. package/dist/common/errors/media.js +10 -24
  28. package/dist/common/errors/media.js.map +1 -1
  29. package/dist/common/errors/parameter.js +5 -33
  30. package/dist/common/errors/parameter.js.map +1 -1
  31. package/dist/common/errors/password-error.js +10 -24
  32. package/dist/common/errors/password-error.js.map +1 -1
  33. package/dist/common/errors/permission.js +9 -23
  34. package/dist/common/errors/permission.js.map +1 -1
  35. package/dist/common/errors/reconnection-in-progress.js +0 -17
  36. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  37. package/dist/common/errors/reconnection.js +10 -24
  38. package/dist/common/errors/reconnection.js.map +1 -1
  39. package/dist/common/errors/stats.js +10 -24
  40. package/dist/common/errors/stats.js.map +1 -1
  41. package/dist/common/errors/webex-errors.js +6 -41
  42. package/dist/common/errors/webex-errors.js.map +1 -1
  43. package/dist/common/errors/webex-meetings-error.js +5 -25
  44. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  45. package/dist/common/events/events-scope.js +0 -22
  46. package/dist/common/events/events-scope.js.map +1 -1
  47. package/dist/common/events/events.js +0 -23
  48. package/dist/common/events/events.js.map +1 -1
  49. package/dist/common/events/trigger-proxy.js +0 -12
  50. package/dist/common/events/trigger-proxy.js.map +1 -1
  51. package/dist/common/events/util.js +0 -15
  52. package/dist/common/events/util.js.map +1 -1
  53. package/dist/common/logs/logger-config.js +0 -4
  54. package/dist/common/logs/logger-config.js.map +1 -1
  55. package/dist/common/logs/logger-proxy.js +1 -8
  56. package/dist/common/logs/logger-proxy.js.map +1 -1
  57. package/dist/common/logs/request.js +37 -60
  58. package/dist/common/logs/request.js.map +1 -1
  59. package/dist/common/queue.js +4 -14
  60. package/dist/common/queue.js.map +1 -1
  61. package/dist/config.js +6 -6
  62. package/dist/config.js.map +1 -1
  63. package/dist/constants.js +143 -52
  64. package/dist/constants.js.map +1 -1
  65. package/dist/controls-options-manager/constants.js +14 -0
  66. package/dist/controls-options-manager/constants.js.map +1 -0
  67. package/dist/controls-options-manager/enums.js +16 -0
  68. package/dist/controls-options-manager/enums.js.map +1 -0
  69. package/dist/controls-options-manager/index.js +261 -0
  70. package/dist/controls-options-manager/index.js.map +1 -0
  71. package/dist/controls-options-manager/util.js +39 -0
  72. package/dist/controls-options-manager/util.js.map +1 -0
  73. package/dist/index.js +11 -18
  74. package/dist/index.js.map +1 -1
  75. package/dist/locus-info/controlsUtils.js +31 -29
  76. package/dist/locus-info/controlsUtils.js.map +1 -1
  77. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  78. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  79. package/dist/locus-info/fullState.js +0 -15
  80. package/dist/locus-info/fullState.js.map +1 -1
  81. package/dist/locus-info/hostUtils.js +4 -12
  82. package/dist/locus-info/hostUtils.js.map +1 -1
  83. package/dist/locus-info/index.js +237 -198
  84. package/dist/locus-info/index.js.map +1 -1
  85. package/dist/locus-info/infoUtils.js +3 -37
  86. package/dist/locus-info/infoUtils.js.map +1 -1
  87. package/dist/locus-info/mediaSharesUtils.js +12 -38
  88. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  89. package/dist/locus-info/parser.js +92 -118
  90. package/dist/locus-info/parser.js.map +1 -1
  91. package/dist/locus-info/selfUtils.js +80 -89
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.js +56 -146
  94. package/dist/media/index.js.map +1 -1
  95. package/dist/media/properties.js +83 -117
  96. package/dist/media/properties.js.map +1 -1
  97. package/dist/media/util.js +2 -9
  98. package/dist/media/util.js.map +1 -1
  99. package/dist/mediaQualityMetrics/config.js +505 -495
  100. package/dist/mediaQualityMetrics/config.js.map +1 -1
  101. package/dist/meeting/in-meeting-actions.js +31 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2225 -2244
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +102 -100
  106. package/dist/meeting/muteState.js.map +1 -1
  107. package/dist/meeting/request.js +308 -264
  108. package/dist/meeting/request.js.map +1 -1
  109. package/dist/meeting/request.type.js +7 -0
  110. package/dist/meeting/request.type.js.map +1 -0
  111. package/dist/meeting/state.js +21 -31
  112. package/dist/meeting/state.js.map +1 -1
  113. package/dist/meeting/util.js +63 -217
  114. package/dist/meeting/util.js.map +1 -1
  115. package/dist/meeting-info/collection.js +6 -25
  116. package/dist/meeting-info/collection.js.map +1 -1
  117. package/dist/meeting-info/index.js +14 -32
  118. package/dist/meeting-info/index.js.map +1 -1
  119. package/dist/meeting-info/meeting-info-v2.js +193 -268
  120. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  121. package/dist/meeting-info/request.js +3 -15
  122. package/dist/meeting-info/request.js.map +1 -1
  123. package/dist/meeting-info/util.js +98 -183
  124. package/dist/meeting-info/util.js.map +1 -1
  125. package/dist/meeting-info/utilv2.js +137 -228
  126. package/dist/meeting-info/utilv2.js.map +1 -1
  127. package/dist/meetings/collection.js +26 -19
  128. package/dist/meetings/collection.js.map +1 -1
  129. package/dist/meetings/index.js +565 -552
  130. package/dist/meetings/index.js.map +1 -1
  131. package/dist/meetings/request.js +26 -41
  132. package/dist/meetings/request.js.map +1 -1
  133. package/dist/meetings/util.js +151 -155
  134. package/dist/meetings/util.js.map +1 -1
  135. package/dist/member/index.js +100 -85
  136. package/dist/member/index.js.map +1 -1
  137. package/dist/member/types.js +15 -0
  138. package/dist/member/types.js.map +1 -0
  139. package/dist/member/util.js +90 -68
  140. package/dist/member/util.js.map +1 -1
  141. package/dist/members/collection.js +13 -12
  142. package/dist/members/collection.js.map +1 -1
  143. package/dist/members/index.js +152 -204
  144. package/dist/members/index.js.map +1 -1
  145. package/dist/members/request.js +35 -39
  146. package/dist/members/request.js.map +1 -1
  147. package/dist/members/types.js +15 -0
  148. package/dist/members/types.js.map +1 -0
  149. package/dist/members/util.js +76 -46
  150. package/dist/members/util.js.map +1 -1
  151. package/dist/metrics/config.js +4 -14
  152. package/dist/metrics/config.js.map +1 -1
  153. package/dist/metrics/constants.js +1 -6
  154. package/dist/metrics/constants.js.map +1 -1
  155. package/dist/metrics/index.js +59 -156
  156. package/dist/metrics/index.js.map +1 -1
  157. package/dist/multistream/mediaRequestManager.js +116 -52
  158. package/dist/multistream/mediaRequestManager.js.map +1 -1
  159. package/dist/multistream/receiveSlot.js +58 -65
  160. package/dist/multistream/receiveSlot.js.map +1 -1
  161. package/dist/multistream/receiveSlotManager.js +58 -93
  162. package/dist/multistream/receiveSlotManager.js.map +1 -1
  163. package/dist/multistream/remoteMedia.js +55 -74
  164. package/dist/multistream/remoteMedia.js.map +1 -1
  165. package/dist/multistream/remoteMediaGroup.js +6 -40
  166. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  167. package/dist/multistream/remoteMediaManager.js +466 -442
  168. package/dist/multistream/remoteMediaManager.js.map +1 -1
  169. package/dist/networkQualityMonitor/index.js +40 -59
  170. package/dist/networkQualityMonitor/index.js.map +1 -1
  171. package/dist/personal-meeting-room/index.js +21 -45
  172. package/dist/personal-meeting-room/index.js.map +1 -1
  173. package/dist/personal-meeting-room/request.js +1 -31
  174. package/dist/personal-meeting-room/request.js.map +1 -1
  175. package/dist/personal-meeting-room/util.js +0 -13
  176. package/dist/personal-meeting-room/util.js.map +1 -1
  177. package/dist/reachability/index.js +192 -191
  178. package/dist/reachability/index.js.map +1 -1
  179. package/dist/reachability/request.js +15 -23
  180. package/dist/reachability/request.js.map +1 -1
  181. package/dist/reactions/constants.js +13 -0
  182. package/dist/reactions/constants.js.map +1 -0
  183. package/dist/reactions/reactions.js +109 -0
  184. package/dist/reactions/reactions.js.map +1 -0
  185. package/dist/reactions/reactions.type.js +36 -0
  186. package/dist/reactions/reactions.type.js.map +1 -0
  187. package/dist/reconnection-manager/index.js +342 -460
  188. package/dist/reconnection-manager/index.js.map +1 -1
  189. package/dist/recording-controller/enums.js +17 -0
  190. package/dist/recording-controller/enums.js.map +1 -0
  191. package/dist/recording-controller/index.js +343 -0
  192. package/dist/recording-controller/index.js.map +1 -0
  193. package/dist/recording-controller/util.js +63 -0
  194. package/dist/recording-controller/util.js.map +1 -0
  195. package/dist/roap/index.js +48 -70
  196. package/dist/roap/index.js.map +1 -1
  197. package/dist/roap/request.js +143 -131
  198. package/dist/roap/request.js.map +1 -1
  199. package/dist/roap/turnDiscovery.js +91 -98
  200. package/dist/roap/turnDiscovery.js.map +1 -1
  201. package/dist/statsAnalyzer/global.js +1 -95
  202. package/dist/statsAnalyzer/global.js.map +1 -1
  203. package/dist/statsAnalyzer/index.js +372 -455
  204. package/dist/statsAnalyzer/index.js.map +1 -1
  205. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  206. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  207. package/dist/transcription/index.js +22 -47
  208. package/dist/transcription/index.js.map +1 -1
  209. package/dist/types/breakouts/breakout.d.ts +8 -0
  210. package/dist/types/breakouts/collection.d.ts +5 -0
  211. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  212. package/dist/types/breakouts/index.d.ts +5 -0
  213. package/dist/types/breakouts/request.d.ts +22 -0
  214. package/dist/types/breakouts/utils.d.ts +8 -0
  215. package/dist/types/common/browser-detection.d.ts +9 -0
  216. package/dist/types/common/collection.d.ts +48 -0
  217. package/dist/types/common/config.d.ts +2 -0
  218. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  219. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  220. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  221. package/dist/types/common/errors/media.d.ts +15 -0
  222. package/dist/types/common/errors/parameter.d.ts +15 -0
  223. package/dist/types/common/errors/password-error.d.ts +15 -0
  224. package/dist/types/common/errors/permission.d.ts +14 -0
  225. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  226. package/dist/types/common/errors/reconnection.d.ts +15 -0
  227. package/dist/types/common/errors/stats.d.ts +15 -0
  228. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  229. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  230. package/dist/types/common/events/events-scope.d.ts +17 -0
  231. package/dist/types/common/events/events.d.ts +12 -0
  232. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  233. package/dist/types/common/events/util.d.ts +2 -0
  234. package/dist/types/common/logs/logger-config.d.ts +2 -0
  235. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  236. package/dist/types/common/logs/request.d.ts +34 -0
  237. package/dist/types/common/queue.d.ts +32 -0
  238. package/dist/types/config.d.ts +77 -0
  239. package/dist/types/constants.d.ts +944 -0
  240. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  241. package/dist/types/controls-options-manager/enums.d.ts +6 -0
  242. package/dist/types/controls-options-manager/index.d.ts +128 -0
  243. package/dist/types/controls-options-manager/util.d.ts +9 -0
  244. package/dist/types/index.d.ts +6 -0
  245. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  246. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  247. package/dist/types/locus-info/fullState.d.ts +2 -0
  248. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  249. package/dist/types/locus-info/index.d.ts +276 -0
  250. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  251. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  252. package/dist/types/locus-info/parser.d.ts +212 -0
  253. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  254. package/dist/types/media/index.d.ts +32 -0
  255. package/dist/types/media/properties.d.ts +108 -0
  256. package/dist/types/media/util.d.ts +2 -0
  257. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  258. package/dist/types/meeting/in-meeting-actions.d.ts +101 -0
  259. package/dist/types/meeting/index.d.ts +1720 -0
  260. package/dist/types/meeting/muteState.d.ts +132 -0
  261. package/dist/types/meeting/request.d.ts +271 -0
  262. package/dist/types/meeting/request.type.d.ts +11 -0
  263. package/dist/types/meeting/state.d.ts +9 -0
  264. package/dist/types/meeting/util.d.ts +2 -0
  265. package/dist/types/meeting-info/collection.d.ts +20 -0
  266. package/dist/types/meeting-info/index.d.ts +57 -0
  267. package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
  268. package/dist/types/meeting-info/request.d.ts +22 -0
  269. package/dist/types/meeting-info/util.d.ts +2 -0
  270. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  271. package/dist/types/meetings/collection.d.ts +31 -0
  272. package/dist/types/meetings/index.d.ts +315 -0
  273. package/dist/types/meetings/request.d.ts +27 -0
  274. package/dist/types/meetings/util.d.ts +18 -0
  275. package/dist/types/member/index.d.ts +156 -0
  276. package/dist/types/member/types.d.ts +21 -0
  277. package/dist/types/member/util.d.ts +2 -0
  278. package/dist/types/members/collection.d.ts +29 -0
  279. package/dist/types/members/index.d.ts +343 -0
  280. package/dist/types/members/request.d.ts +58 -0
  281. package/dist/types/members/types.d.ts +24 -0
  282. package/dist/types/members/util.d.ts +2 -0
  283. package/dist/types/metrics/config.d.ts +171 -0
  284. package/dist/types/metrics/constants.d.ts +53 -0
  285. package/dist/types/metrics/index.d.ts +152 -0
  286. package/dist/types/multistream/mediaRequestManager.d.ts +68 -0
  287. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  288. package/dist/types/multistream/receiveSlotManager.d.ts +49 -0
  289. package/dist/types/multistream/remoteMedia.d.ts +100 -0
  290. package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
  291. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  292. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  293. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  294. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  295. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  296. package/dist/types/reachability/index.d.ts +152 -0
  297. package/dist/types/reachability/request.d.ts +37 -0
  298. package/dist/types/reactions/constants.d.ts +3 -0
  299. package/dist/types/reactions/reactions.d.ts +4 -0
  300. package/dist/types/reactions/reactions.type.d.ts +52 -0
  301. package/dist/types/reconnection-manager/index.d.ts +126 -0
  302. package/dist/types/recording-controller/enums.d.ts +7 -0
  303. package/dist/types/recording-controller/index.d.ts +193 -0
  304. package/dist/types/recording-controller/util.d.ts +13 -0
  305. package/dist/types/roap/index.d.ts +77 -0
  306. package/dist/types/roap/request.d.ts +38 -0
  307. package/dist/types/roap/turnDiscovery.d.ts +74 -0
  308. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  309. package/dist/types/statsAnalyzer/index.d.ts +195 -0
  310. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  311. package/dist/types/transcription/index.d.ts +64 -0
  312. package/internal-README.md +7 -6
  313. package/package.json +27 -21
  314. package/src/breakouts/README.md +219 -0
  315. package/src/breakouts/breakout.ts +153 -0
  316. package/src/breakouts/collection.ts +19 -0
  317. package/src/breakouts/edit-lock-error.ts +25 -0
  318. package/src/breakouts/index.ts +745 -0
  319. package/src/breakouts/request.ts +55 -0
  320. package/src/breakouts/utils.ts +44 -0
  321. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  322. package/src/common/collection.ts +9 -7
  323. package/src/common/{config.js → config.ts} +1 -1
  324. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  325. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  326. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  327. package/src/common/errors/{media.js → media.ts} +11 -7
  328. package/src/common/errors/parameter.ts +11 -7
  329. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  330. package/src/common/errors/{permission.js → permission.ts} +10 -6
  331. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  332. package/src/common/errors/{stats.js → stats.ts} +11 -7
  333. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  334. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  335. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  336. package/src/common/events/{events.js → events.ts} +5 -1
  337. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  338. package/src/common/events/{util.js → util.ts} +2 -3
  339. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  340. package/src/common/logs/logger-proxy.ts +44 -0
  341. package/src/common/logs/{request.js → request.ts} +22 -9
  342. package/src/common/queue.ts +1 -2
  343. package/src/{config.js → config.ts} +17 -12
  344. package/src/constants.ts +92 -5
  345. package/src/controls-options-manager/constants.ts +5 -0
  346. package/src/controls-options-manager/enums.ts +7 -0
  347. package/src/controls-options-manager/index.ts +240 -0
  348. package/src/controls-options-manager/util.ts +30 -0
  349. package/src/index.js +4 -1
  350. package/src/locus-info/controlsUtils.ts +141 -0
  351. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  352. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  353. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  354. package/src/locus-info/{index.js → index.ts} +211 -71
  355. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  356. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  357. package/src/locus-info/{parser.js → parser.ts} +67 -79
  358. package/src/locus-info/{selfUtils.js → selfUtils.ts} +183 -67
  359. package/src/media/{index.js → index.ts} +179 -176
  360. package/src/media/{properties.js → properties.ts} +60 -37
  361. package/src/media/{util.js → util.ts} +2 -2
  362. package/src/mediaQualityMetrics/config.ts +384 -0
  363. package/src/meeting/in-meeting-actions.ts +67 -3
  364. package/src/meeting/{index.js → index.ts} +2605 -1605
  365. package/src/meeting/{muteState.js → muteState.ts} +138 -73
  366. package/src/meeting/{request.js → request.ts} +326 -142
  367. package/src/meeting/request.type.ts +13 -0
  368. package/src/meeting/{state.js → state.ts} +50 -35
  369. package/src/meeting/{util.js → util.ts} +131 -115
  370. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  371. package/src/meeting-info/{index.js → index.ts} +42 -36
  372. package/src/meeting-info/meeting-info-v2.ts +273 -0
  373. package/src/meeting-info/{request.js → request.ts} +14 -4
  374. package/src/meeting-info/{util.js → util.ts} +60 -51
  375. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  376. package/src/meetings/{collection.js → collection.ts} +26 -3
  377. package/src/meetings/index.ts +1275 -0
  378. package/src/meetings/{request.js → request.ts} +34 -25
  379. package/src/meetings/{util.js → util.ts} +99 -33
  380. package/src/member/{index.js → index.ts} +124 -56
  381. package/src/member/types.ts +24 -0
  382. package/src/member/{util.js → util.ts} +105 -25
  383. package/src/members/{collection.js → collection.ts} +10 -2
  384. package/src/members/{index.js → index.ts} +281 -144
  385. package/src/members/{request.js → request.ts} +80 -16
  386. package/src/members/types.ts +28 -0
  387. package/src/members/{util.js → util.ts} +108 -55
  388. package/src/metrics/{config.js → config.ts} +255 -92
  389. package/src/metrics/{constants.js → constants.ts} +0 -6
  390. package/src/metrics/{index.js → index.ts} +110 -94
  391. package/src/multistream/mediaRequestManager.ts +144 -40
  392. package/src/multistream/receiveSlot.ts +69 -26
  393. package/src/multistream/receiveSlotManager.ts +50 -38
  394. package/src/multistream/remoteMedia.ts +30 -4
  395. package/src/multistream/remoteMediaGroup.ts +4 -3
  396. package/src/multistream/remoteMediaManager.ts +230 -66
  397. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  398. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  399. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  400. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  401. package/src/reachability/{index.js → index.ts} +157 -94
  402. package/src/reachability/request.ts +46 -35
  403. package/src/reactions/constants.ts +4 -0
  404. package/src/reactions/reactions.ts +104 -0
  405. package/src/reactions/reactions.type.ts +62 -0
  406. package/src/reconnection-manager/{index.js → index.ts} +228 -120
  407. package/src/recording-controller/enums.ts +8 -0
  408. package/src/recording-controller/index.ts +315 -0
  409. package/src/recording-controller/util.ts +58 -0
  410. package/src/roap/{index.js → index.ts} +77 -60
  411. package/src/roap/request.ts +172 -0
  412. package/src/roap/turnDiscovery.ts +81 -41
  413. package/src/statsAnalyzer/global.ts +37 -0
  414. package/src/statsAnalyzer/index.ts +1242 -0
  415. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  416. package/src/transcription/{index.js → index.ts} +46 -39
  417. package/test/integration/spec/converged-space-meetings.js +176 -0
  418. package/test/integration/spec/journey.js +665 -464
  419. package/test/integration/spec/space-meeting.js +320 -206
  420. package/test/integration/spec/transcription.js +7 -8
  421. package/test/unit/spec/breakouts/breakout.ts +178 -0
  422. package/test/unit/spec/breakouts/collection.ts +15 -0
  423. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  424. package/test/unit/spec/breakouts/index.ts +1252 -0
  425. package/test/unit/spec/breakouts/request.ts +104 -0
  426. package/test/unit/spec/breakouts/utils.js +54 -0
  427. package/test/unit/spec/common/browser-detection.js +9 -28
  428. package/test/unit/spec/controls-options-manager/index.js +204 -0
  429. package/test/unit/spec/controls-options-manager/util.js +86 -0
  430. package/test/unit/spec/fixture/locus.js +92 -90
  431. package/test/unit/spec/locus-info/controlsUtils.js +133 -34
  432. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  433. package/test/unit/spec/locus-info/index.js +303 -2
  434. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  435. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  436. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  437. package/test/unit/spec/locus-info/parser.js +3 -9
  438. package/test/unit/spec/locus-info/selfConstant.js +101 -103
  439. package/test/unit/spec/locus-info/selfUtils.js +165 -12
  440. package/test/unit/spec/media/index.ts +72 -8
  441. package/test/unit/spec/media/properties.ts +9 -9
  442. package/test/unit/spec/meeting/in-meeting-actions.ts +29 -2
  443. package/test/unit/spec/meeting/index.js +2503 -802
  444. package/test/unit/spec/meeting/muteState.js +146 -61
  445. package/test/unit/spec/meeting/request.js +141 -43
  446. package/test/unit/spec/meeting/utils.js +135 -164
  447. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  448. package/test/unit/spec/meeting-info/request.js +7 -9
  449. package/test/unit/spec/meeting-info/util.js +11 -12
  450. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  451. package/test/unit/spec/meetings/collection.js +15 -1
  452. package/test/unit/spec/meetings/index.js +622 -263
  453. package/test/unit/spec/meetings/utils.js +65 -14
  454. package/test/unit/spec/member/index.js +24 -1
  455. package/test/unit/spec/member/util.js +359 -32
  456. package/test/unit/spec/members/index.js +294 -54
  457. package/test/unit/spec/members/request.js +50 -20
  458. package/test/unit/spec/members/utils.js +147 -4
  459. package/test/unit/spec/metrics/index.js +16 -21
  460. package/test/unit/spec/multistream/mediaRequestManager.ts +369 -68
  461. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  462. package/test/unit/spec/multistream/receiveSlotManager.ts +60 -38
  463. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  464. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  465. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  466. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  467. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  468. package/test/unit/spec/reachability/index.ts +176 -27
  469. package/test/unit/spec/reachability/request.js +66 -0
  470. package/test/unit/spec/reconnection-manager/index.js +58 -30
  471. package/test/unit/spec/recording-controller/index.js +231 -0
  472. package/test/unit/spec/recording-controller/util.js +102 -0
  473. package/test/unit/spec/roap/index.ts +12 -8
  474. package/test/unit/spec/roap/request.ts +217 -0
  475. package/test/unit/spec/roap/turnDiscovery.ts +72 -49
  476. package/test/unit/spec/stats-analyzer/index.js +108 -57
  477. package/test/utils/cmr.js +44 -42
  478. package/test/utils/constants.js +9 -0
  479. package/test/utils/testUtils.js +98 -77
  480. package/test/utils/webex-config.js +22 -18
  481. package/test/utils/webex-test-users.js +57 -50
  482. package/tsconfig.json +6 -0
  483. package/dist/media/internal-media-core-wrapper.js +0 -22
  484. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  485. package/dist/meeting/effectsState.js +0 -327
  486. package/dist/meeting/effectsState.js.map +0 -1
  487. package/dist/multistream/multistreamMedia.js +0 -116
  488. package/dist/multistream/multistreamMedia.js.map +0 -1
  489. package/dist/peer-connection-manager/util.js +0 -124
  490. package/dist/peer-connection-manager/util.js.map +0 -1
  491. package/src/common/logs/logger-proxy.js +0 -33
  492. package/src/locus-info/controlsUtils.js +0 -102
  493. package/src/media/internal-media-core-wrapper.ts +0 -9
  494. package/src/mediaQualityMetrics/config.js +0 -382
  495. package/src/meeting/effectsState.js +0 -205
  496. package/src/meeting-info/meeting-info-v2.js +0 -255
  497. package/src/meetings/index.js +0 -1015
  498. package/src/multistream/multistreamMedia.ts +0 -92
  499. package/src/peer-connection-manager/util.ts +0 -117
  500. package/src/roap/request.js +0 -127
  501. package/src/statsAnalyzer/global.js +0 -133
  502. package/src/statsAnalyzer/index.js +0 -1006
  503. package/src/statsAnalyzer/mqaUtil.js +0 -173
  504. package/test/unit/spec/meeting/effectsState.js +0 -291
  505. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  506. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -19,14 +19,14 @@ import {
19
19
  } from '../constants';
20
20
  import Metrics from '../metrics';
21
21
  import {eventType} from '../metrics/config';
22
- import InfoUtils from '../locus-info/infoUtils';
23
- import FullState from '../locus-info/fullState';
24
- import SelfUtils from '../locus-info/selfUtils';
25
- import HostUtils from '../locus-info/hostUtils';
26
- import ControlsUtils from '../locus-info/controlsUtils';
27
- import EmbeddedAppsUtils from '../locus-info/embeddedAppsUtils';
28
- import MediaSharesUtils from '../locus-info/mediaSharesUtils';
29
- import LocusDeltaParser from '../locus-info/parser';
22
+ import InfoUtils from './infoUtils';
23
+ import FullState from './fullState';
24
+ import SelfUtils from './selfUtils';
25
+ import HostUtils from './hostUtils';
26
+ import ControlsUtils from './controlsUtils';
27
+ import EmbeddedAppsUtils from './embeddedAppsUtils';
28
+ import MediaSharesUtils from './mediaSharesUtils';
29
+ import LocusDeltaParser from './parser';
30
30
 
31
31
  /**
32
32
  * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object
@@ -35,6 +35,42 @@ import LocusDeltaParser from '../locus-info/parser';
35
35
  * @class LocusInfo
36
36
  */
37
37
  export default class LocusInfo extends EventsScope {
38
+ compareAndUpdateFlags: any;
39
+ emitChange: any;
40
+ locusParser: any;
41
+ meetingId: any;
42
+ parsedLocus: any;
43
+ updateMeeting: any;
44
+ webex: any;
45
+ aclUrl: any;
46
+ baseSequence: any;
47
+ created: any;
48
+ deltaParticipants: any;
49
+ identities: any;
50
+ membership: any;
51
+ participants: any;
52
+ participantsUrl: any;
53
+ replaces: any;
54
+ scheduledMeeting: any;
55
+ sequence: any;
56
+ controls: any;
57
+ conversationUrl: any;
58
+ embeddedApps: any;
59
+ fullState: any;
60
+ host: any;
61
+ info: any;
62
+ mediaShares: any;
63
+ replace: any;
64
+ url: any;
65
+ services: any;
66
+
67
+ /**
68
+ * Constructor
69
+ * @param {boolean} updateMeeting true if the meeting should be updated
70
+ * @param {object} webex
71
+ * @param {string} meetingId
72
+ * @returns {undefined}
73
+ */
38
74
  constructor(updateMeeting, webex, meetingId) {
39
75
  super();
40
76
  this.parsedLocus = {
@@ -55,7 +91,7 @@ export default class LocusInfo extends EventsScope {
55
91
  * @param {Meeting} meeting
56
92
  * @returns {undefined}
57
93
  */
58
- applyLocusDeltaData(action, locus, meeting) {
94
+ applyLocusDeltaData(action: string, locus: any, meeting: any) {
59
95
  const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;
60
96
 
61
97
  switch (action) {
@@ -94,7 +130,7 @@ export default class LocusInfo extends EventsScope {
94
130
  * @param {Meeting} meeting
95
131
  * @returns {undefined}
96
132
  */
97
- handleLocusDelta(locus, meeting) {
133
+ handleLocusDelta(locus: any, meeting: any) {
98
134
  // register a function to process delta actions
99
135
  if (!this.locusParser.onDeltaAction) {
100
136
  // delta action, along with associated loci
@@ -112,7 +148,7 @@ export default class LocusInfo extends EventsScope {
112
148
  * @returns {undefined}
113
149
  * @memberof LocusInfo
114
150
  */
115
- init(locus = {}) {
151
+ init(locus: any = {}) {
116
152
  this.created = locus.created || null;
117
153
  this.scheduledMeeting = locus.meeting || null;
118
154
  this.participantsUrl = locus.participantsUrl || null;
@@ -157,6 +193,7 @@ export default class LocusInfo extends EventsScope {
157
193
  this.updateSelf(locus.self, locus.participants);
158
194
  this.updateHostInfo(locus.host);
159
195
  this.updateMediaShares(locus.mediaShares);
196
+ this.updateServices(locus.links?.services);
160
197
  }
161
198
 
162
199
  /**
@@ -164,7 +201,7 @@ export default class LocusInfo extends EventsScope {
164
201
  * @returns {undefined}
165
202
  * @memberof LocusInfo
166
203
  */
167
- initialSetup(locus) {
204
+ initialSetup(locus: object) {
168
205
  this.onFullLocus(locus);
169
206
 
170
207
  // Change it to true after it receives it first locus object
@@ -177,7 +214,8 @@ export default class LocusInfo extends EventsScope {
177
214
  * @returns {undefined}
178
215
  * @memberof LocusInfo
179
216
  */
180
- parse(meeting, data) {
217
+ parse(meeting: any, data: any) {
218
+ // eslint-disable-next-line @typescript-eslint/no-shadow
181
219
  const {eventType} = data;
182
220
 
183
221
  LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);
@@ -217,18 +255,19 @@ export default class LocusInfo extends EventsScope {
217
255
  * @returns {undefined}
218
256
  * @memberof LocusInfo
219
257
  */
220
- emitScoped(scope, eventName, args) {
258
+ emitScoped(scope?: any, eventName?: string, args?: any) {
221
259
  return this.emit(scope, eventName, args);
222
260
  }
223
261
 
224
262
  /**
225
263
  * updates the locus with full locus object
226
264
  * @param {object} locus locus object
227
- * @param {sting} eventType particulat locus event
265
+ * @param {string} eventType particulat locus event
228
266
  * @returns {object} null
229
267
  * @memberof LocusInfo
230
268
  */
231
- onFullLocus(locus, eventType) {
269
+ // eslint-disable-next-line @typescript-eslint/no-shadow
270
+ onFullLocus(locus: any, eventType?: string) {
232
271
  if (!locus) {
233
272
  LoggerProxy.logger.error(
234
273
  'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'
@@ -237,8 +276,9 @@ export default class LocusInfo extends EventsScope {
237
276
  this.updateParticipantDeltas(locus.participants);
238
277
  this.scheduledMeeting = locus.meeting || null;
239
278
  this.participants = locus.participants;
279
+ const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
240
280
  this.updateLocusInfo(locus);
241
- this.updateParticipants(locus.participants);
281
+ this.updateParticipants(locus.participants, isReplaceMembers);
242
282
  this.isMeetingActive();
243
283
  this.handleOneOnOneEvent(eventType);
244
284
  this.updateEmbeddedApps(locus.embeddedApps);
@@ -252,7 +292,8 @@ export default class LocusInfo extends EventsScope {
252
292
  * @returns {undefined}
253
293
  * @memberof LocusInfo
254
294
  */
255
- handleOneOnOneEvent(eventType) {
295
+ // eslint-disable-next-line @typescript-eslint/no-shadow
296
+ handleOneOnOneEvent(eventType: string) {
256
297
  if (
257
298
  this.parsedLocus.fullState.type === _CALL_ ||
258
299
  this.parsedLocus.fullState.type === _SIP_BRIDGE_
@@ -295,9 +336,10 @@ export default class LocusInfo extends EventsScope {
295
336
  * @returns {undefined}
296
337
  * @memberof LocusInfo
297
338
  */
298
- onDeltaLocus(locus) {
339
+ onDeltaLocus(locus: any) {
340
+ const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
299
341
  this.updateLocusInfo(locus);
300
- this.updateParticipants(locus.participants);
342
+ this.updateParticipants(locus.participants, isReplaceMembers);
301
343
  this.isMeetingActive();
302
344
  }
303
345
 
@@ -307,6 +349,13 @@ export default class LocusInfo extends EventsScope {
307
349
  * @memberof LocusInfo
308
350
  */
309
351
  updateLocusInfo(locus) {
352
+ if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {
353
+ // When moved to a breakout session locus sends a message for the previous locus
354
+ // indicating that we have been moved. It isn't helpful to continue parsing this
355
+ // as it gets interpreted as if we have left the call
356
+ return;
357
+ }
358
+
310
359
  this.updateControls(locus.controls);
311
360
  this.updateConversationUrl(locus.conversationUrl, locus.info);
312
361
  this.updateCreated(locus.created);
@@ -324,6 +373,7 @@ export default class LocusInfo extends EventsScope {
324
373
  this.updateMemberShip(locus.membership);
325
374
  this.updateIdentifiers(locus.identities);
326
375
  this.updateEmbeddedApps(locus.embeddedApps);
376
+ this.updateServices(locus.links?.services);
327
377
  this.compareAndUpdate();
328
378
  // update which required to compare different objects from locus
329
379
  }
@@ -334,7 +384,7 @@ export default class LocusInfo extends EventsScope {
334
384
  * @returns {Array}
335
385
  * @memberof LocusInfo
336
386
  */
337
- getLocusPartner(participants, self) {
387
+ getLocusPartner(participants: Array<any>, self: any) {
338
388
  if (!participants || participants.length === 0) {
339
389
  return null;
340
390
  }
@@ -345,6 +395,7 @@ export default class LocusInfo extends EventsScope {
345
395
  self &&
346
396
  participant.identity !== self.identity &&
347
397
  (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))
398
+ // @ts-ignore
348
399
  ) || this.partner
349
400
  );
350
401
  }
@@ -359,6 +410,7 @@ export default class LocusInfo extends EventsScope {
359
410
  this.parsedLocus.fullState.type === _CALL_ ||
360
411
  this.parsedLocus.fullState.type === _SIP_BRIDGE_
361
412
  ) {
413
+ // @ts-ignore
362
414
  const partner = this.getLocusPartner(this.participants, this.self);
363
415
 
364
416
  this.updateMeeting({partner});
@@ -390,8 +442,7 @@ export default class LocusInfo extends EventsScope {
390
442
  shouldLeave: false,
391
443
  }
392
444
  );
393
- }
394
- else if (
445
+ } else if (
395
446
  partner.state === MEETING_STATE.STATES.LEFT &&
396
447
  this.parsedLocus.self &&
397
448
  (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||
@@ -414,8 +465,7 @@ export default class LocusInfo extends EventsScope {
414
465
  this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,
415
466
  }
416
467
  );
417
- }
418
- else if (
468
+ } else if (
419
469
  this.parsedLocus.self &&
420
470
  this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&
421
471
  (partner.state === MEETING_STATE.STATES.LEFT ||
@@ -439,11 +489,11 @@ export default class LocusInfo extends EventsScope {
439
489
  }
440
490
  );
441
491
  }
442
- }
443
- else if (this.parsedLocus.fullState.type === _MEETING_) {
492
+ } else if (this.parsedLocus.fullState.type === _MEETING_) {
444
493
  if (
445
494
  this.fullState &&
446
495
  (this.fullState.state === LOCUS.STATE.INACTIVE ||
496
+ // @ts-ignore
447
497
  this.fullState.state === LOCUS.STATE.TERMINATING)
448
498
  ) {
449
499
  LoggerProxy.logger.warn(
@@ -464,8 +514,7 @@ export default class LocusInfo extends EventsScope {
464
514
  shouldLeave: false,
465
515
  }
466
516
  );
467
- }
468
- else if (this.fullState && this.fullState.removed) {
517
+ } else if (this.fullState && this.fullState.removed) {
469
518
  // user has been dropped from a meeting
470
519
  Metrics.postEvent({
471
520
  event: eventType.REMOTE_ENDED,
@@ -499,8 +548,7 @@ export default class LocusInfo extends EventsScope {
499
548
  }
500
549
  );
501
550
  }
502
- }
503
- else {
551
+ } else {
504
552
  LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');
505
553
  }
506
554
  }
@@ -543,8 +591,7 @@ export default class LocusInfo extends EventsScope {
543
591
  canAssignHost: true,
544
592
  }
545
593
  );
546
- }
547
- else {
594
+ } else {
548
595
  this.emitScoped(
549
596
  {
550
597
  file: 'locus-info',
@@ -565,13 +612,13 @@ export default class LocusInfo extends EventsScope {
565
612
  * @param {Array} [participants] - The participants to update against.
566
613
  * @returns {void}
567
614
  */
568
- updateParticipantDeltas(participants = []) {
615
+ updateParticipantDeltas(participants: Array<any> = []) {
569
616
  // Used to find a participant within a participants collection.
570
617
  const findParticipant = (participant, collection) =>
571
618
  collection.find((item) => item.person.id === participant.person.id);
572
619
 
573
620
  // Generates an object that indicates which state properties have changed.
574
- const generateDelta = (prevState = {}, newState = {}) => {
621
+ const generateDelta = (prevState: any = {}, newState: any = {}) => {
575
622
  // Setup deltas.
576
623
  const deltas = {
577
624
  audioStatus: prevState.audioStatus !== newState.audioStatus,
@@ -608,13 +655,13 @@ export default class LocusInfo extends EventsScope {
608
655
  }
609
656
 
610
657
  /**
611
- *
658
+ * update meeting's members
612
659
  * @param {Object} participants new participants object
613
- * @param {boolen} deltaParticpantFlag delta event
660
+ * @param {Boolean} isReplace is replace the whole members
614
661
  * @returns {Array} updatedParticipants
615
662
  * @memberof LocusInfo
616
663
  */
617
- updateParticipants(participants) {
664
+ updateParticipants(participants: object, isReplace?: boolean) {
618
665
  this.emitScoped(
619
666
  {
620
667
  file: 'locus-info',
@@ -627,6 +674,7 @@ export default class LocusInfo extends EventsScope {
627
674
  selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
628
675
  selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
629
676
  hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
677
+ isReplace,
630
678
  }
631
679
  );
632
680
  }
@@ -636,7 +684,7 @@ export default class LocusInfo extends EventsScope {
636
684
  * @returns {undefined}
637
685
  * @memberof LocusInfo
638
686
  */
639
- updateControls(controls) {
687
+ updateControls(controls: object) {
640
688
  if (controls && !isEqual(this.controls, controls)) {
641
689
  this.parsedLocus.controls = ControlsUtils.parse(controls);
642
690
  const {
@@ -646,6 +694,8 @@ export default class LocusInfo extends EventsScope {
646
694
  hasMeetingContainerChanged,
647
695
  hasTranscribeChanged,
648
696
  hasEntryExitToneChanged,
697
+ hasBreakoutChanged,
698
+ hasVideoEnabledChanged,
649
699
  },
650
700
  current,
651
701
  } = ControlsUtils.getControls(this.controls, controls);
@@ -656,13 +706,11 @@ export default class LocusInfo extends EventsScope {
656
706
  if (hasRecordingPausedChanged) {
657
707
  if (current.record.paused) {
658
708
  state = RECORDING_STATE.PAUSED;
659
- }
660
- else {
709
+ } else {
661
710
  // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.
662
711
  state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;
663
712
  }
664
- }
665
- else if (hasRecordingChanged) {
713
+ } else if (hasRecordingChanged) {
666
714
  state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;
667
715
  }
668
716
 
@@ -711,9 +759,26 @@ export default class LocusInfo extends EventsScope {
711
759
  );
712
760
  }
713
761
 
762
+ if (hasBreakoutChanged) {
763
+ const {breakout} = current;
764
+
765
+ this.emitScoped(
766
+ {
767
+ file: 'locus-info',
768
+ function: 'updateControls',
769
+ },
770
+ LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,
771
+ {
772
+ breakout,
773
+ }
774
+ );
775
+ }
776
+
714
777
  if (hasEntryExitToneChanged) {
715
778
  const {entryExitTone} = current;
716
779
 
780
+ this.updateMeeting({entryExitTone});
781
+
717
782
  this.emitScoped(
718
783
  {
719
784
  file: 'locus-info',
@@ -721,11 +786,29 @@ export default class LocusInfo extends EventsScope {
721
786
  },
722
787
  LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,
723
788
  {
724
- entryExitTone
789
+ entryExitTone,
725
790
  }
726
791
  );
792
+ }
727
793
 
728
- this.updateMeeting({entryExitTone});
794
+ // videoEnabled is handled differently than other controls,
795
+ // to fit with audio mute status logic
796
+ if (hasVideoEnabledChanged) {
797
+ const {videoEnabled} = current;
798
+
799
+ this.updateMeeting({unmuteVideoAllowed: videoEnabled});
800
+
801
+ this.emitScoped(
802
+ {
803
+ file: 'locus-info',
804
+ function: 'updateControls',
805
+ },
806
+ LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
807
+ {
808
+ // muted: not part of locus.controls
809
+ unmuteAllowed: videoEnabled,
810
+ }
811
+ );
729
812
  }
730
813
 
731
814
  this.controls = controls;
@@ -738,12 +821,11 @@ export default class LocusInfo extends EventsScope {
738
821
  * @returns {undefined}
739
822
  * @memberof LocusInfo
740
823
  */
741
- updateConversationUrl(conversationUrl, info) {
824
+ updateConversationUrl(conversationUrl: string, info: any) {
742
825
  if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {
743
826
  this.conversationUrl = conversationUrl;
744
827
  this.updateMeeting({conversationUrl});
745
- }
746
- else if (
828
+ } else if (
747
829
  info &&
748
830
  info.conversationUrl &&
749
831
  !isEqual(this.conversationUrl, info.conversationUrl)
@@ -758,18 +840,39 @@ export default class LocusInfo extends EventsScope {
758
840
  * @returns {undefined}
759
841
  * @memberof LocusInfo
760
842
  */
761
- updateCreated(created) {
843
+ updateCreated(created: object) {
762
844
  if (created && !isEqual(this.created, created)) {
763
845
  this.created = created;
764
846
  }
765
847
  }
766
848
 
849
+ /**
850
+ * @param {Object} services
851
+ * @returns {undefined}
852
+ * @memberof LocusInfo
853
+ */
854
+ updateServices(services: Record<'breakout' | 'record', {url: string}>) {
855
+ if (services && !isEqual(this.services, services)) {
856
+ this.services = services;
857
+ this.emitScoped(
858
+ {
859
+ file: 'locus-info',
860
+ function: 'updateServices',
861
+ },
862
+ LOCUSINFO.EVENTS.LINKS_SERVICES,
863
+ {
864
+ services,
865
+ }
866
+ );
867
+ }
868
+ }
869
+
767
870
  /**
768
871
  * @param {Object} fullState
769
872
  * @returns {undefined}
770
873
  * @memberof LocusInfo
771
874
  */
772
- updateFullState(fullState) {
875
+ updateFullState(fullState: object) {
773
876
  if (fullState && !isEqual(this.fullState, fullState)) {
774
877
  const result = FullState.getFullState(this.fullState, fullState);
775
878
 
@@ -813,7 +916,7 @@ export default class LocusInfo extends EventsScope {
813
916
  * @memberof LocusInfo
814
917
  * emits internal event locus_info_update_host
815
918
  */
816
- updateHostInfo(host) {
919
+ updateHostInfo(host: object) {
817
920
  if (host && !isEqual(this.host, host)) {
818
921
  const parsedHosts = HostUtils.getHosts(this.host, host);
819
922
 
@@ -834,8 +937,7 @@ export default class LocusInfo extends EventsScope {
834
937
  );
835
938
  }
836
939
  this.host = host;
837
- }
838
- else {
940
+ } else {
839
941
  this.compareAndUpdateFlags.compareSelfAndHost = false;
840
942
  }
841
943
  }
@@ -846,7 +948,7 @@ export default class LocusInfo extends EventsScope {
846
948
  * @returns {undefined}
847
949
  * @memberof LocusInfo
848
950
  */
849
- updateMeetingInfo(info, self) {
951
+ updateMeetingInfo(info: object, self?: object) {
850
952
  if (info && !isEqual(this.info, info)) {
851
953
  const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
852
954
  const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
@@ -894,7 +996,7 @@ export default class LocusInfo extends EventsScope {
894
996
  * @returns {undefined}
895
997
  * @memberof LocusInfo
896
998
  */
897
- updateEmbeddedApps(embeddedApps) {
999
+ updateEmbeddedApps(embeddedApps: object) {
898
1000
  // don't do anything if the arrays of apps haven't changed significantly
899
1001
  if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {
900
1002
  return;
@@ -922,11 +1024,13 @@ export default class LocusInfo extends EventsScope {
922
1024
  * @memberof LocusInfo
923
1025
  * emits internal event locus_info_update_media_shares
924
1026
  */
925
- updateMediaShares(mediaShares) {
1027
+ updateMediaShares(mediaShares: object) {
926
1028
  if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {
927
1029
  const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);
928
1030
 
929
1031
  this.updateMeeting(parsedMediaShares.current);
1032
+ this.parsedLocus.mediaShares = parsedMediaShares.current;
1033
+ this.mediaShares = mediaShares;
930
1034
  this.emitScoped(
931
1035
  {
932
1036
  file: 'locus-info',
@@ -938,8 +1042,6 @@ export default class LocusInfo extends EventsScope {
938
1042
  previous: parsedMediaShares.previous,
939
1043
  }
940
1044
  );
941
- this.parsedLocus.mediaShares = parsedMediaShares.current;
942
- this.mediaShares = mediaShares;
943
1045
  }
944
1046
  }
945
1047
 
@@ -948,7 +1050,7 @@ export default class LocusInfo extends EventsScope {
948
1050
  * @returns {undefined}
949
1051
  * @memberof LocusInfo
950
1052
  */
951
- updateParticipantsUrl(participantsUrl) {
1053
+ updateParticipantsUrl(participantsUrl: string) {
952
1054
  if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {
953
1055
  this.participantsUrl = participantsUrl;
954
1056
  }
@@ -959,7 +1061,7 @@ export default class LocusInfo extends EventsScope {
959
1061
  * @returns {undefined}
960
1062
  * @memberof LocusInfo
961
1063
  */
962
- updateReplace(replace) {
1064
+ updateReplace(replace: object) {
963
1065
  if (replace && !isEqual(this.replace, replace)) {
964
1066
  this.replace = replace;
965
1067
  }
@@ -973,8 +1075,10 @@ export default class LocusInfo extends EventsScope {
973
1075
  * @memberof LocusInfo
974
1076
  * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self
975
1077
  */
976
- updateSelf(self, participants) {
1078
+ updateSelf(self: any, participants: Array<any>) {
1079
+ // @ts-ignore - check where this.self come from
977
1080
  if (self && !isEqual(this.self, self)) {
1081
+ // @ts-ignore
978
1082
  const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);
979
1083
 
980
1084
  this.updateMeeting(parsedSelves.current);
@@ -1000,8 +1104,7 @@ export default class LocusInfo extends EventsScope {
1000
1104
 
1001
1105
  if (parsedSelves.updates.moderatorChanged) {
1002
1106
  this.compareAndUpdateFlags.compareHostAndSelf = true;
1003
- }
1004
- else {
1107
+ } else {
1005
1108
  this.compareAndUpdateFlags.compareHostAndSelf = false;
1006
1109
  }
1007
1110
 
@@ -1016,6 +1119,17 @@ export default class LocusInfo extends EventsScope {
1016
1119
  );
1017
1120
  }
1018
1121
 
1122
+ if (parsedSelves.updates.breakoutsChanged) {
1123
+ this.emitScoped(
1124
+ {
1125
+ file: 'locus-info',
1126
+ function: 'updateSelf',
1127
+ },
1128
+ LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,
1129
+ {breakoutSessions: parsedSelves.current.breakoutSessions}
1130
+ );
1131
+ }
1132
+
1019
1133
  if (parsedSelves.updates.isMediaInactiveOrReleased) {
1020
1134
  this.emitScoped(
1021
1135
  {
@@ -1037,6 +1151,31 @@ export default class LocusInfo extends EventsScope {
1037
1151
  self
1038
1152
  );
1039
1153
  }
1154
+ // When the user upgrades to moderator or cohost
1155
+ if (parsedSelves.updates.isUpgradeToModeratorOrCohost) {
1156
+ this.emitScoped(
1157
+ {
1158
+ file: 'locus-info',
1159
+ function: 'updateSelf',
1160
+ },
1161
+ LOCUSINFO.EVENTS.SELF_MODERATOR_OR_COHOST_UPGRADE,
1162
+ self
1163
+ );
1164
+ }
1165
+ //
1166
+ if (parsedSelves.updates.isVideoMutedByOthersChanged) {
1167
+ this.emitScoped(
1168
+ {
1169
+ file: 'locus-info',
1170
+ function: 'updateSelf',
1171
+ },
1172
+ LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
1173
+ {
1174
+ muted: parsedSelves.current.remoteVideoMuted,
1175
+ // unmuteAllowed: not part of .self
1176
+ }
1177
+ );
1178
+ }
1040
1179
  if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
1041
1180
  this.emitScoped(
1042
1181
  {
@@ -1100,6 +1239,7 @@ export default class LocusInfo extends EventsScope {
1100
1239
  file: 'locus-info',
1101
1240
  function: 'updateSelf',
1102
1241
  },
1242
+ // @ts-ignore
1103
1243
  LOCUSINFO.EVENTS.MEDIA_INACTIVITY,
1104
1244
  SelfUtils.getMediaStatus(self.mediaSessions)
1105
1245
  );
@@ -1168,9 +1308,9 @@ export default class LocusInfo extends EventsScope {
1168
1308
  }
1169
1309
  );
1170
1310
  this.parsedLocus.self = parsedSelves.current;
1311
+ // @ts-ignore
1171
1312
  this.self = self;
1172
- }
1173
- else {
1313
+ } else {
1174
1314
  this.compareAndUpdateFlags.compareHostAndSelf = false;
1175
1315
  }
1176
1316
  }
@@ -1181,7 +1321,7 @@ export default class LocusInfo extends EventsScope {
1181
1321
  * @returns {undefined}
1182
1322
  * emits internal event locus_info_update_url
1183
1323
  */
1184
- updateLocusUrl(url) {
1324
+ updateLocusUrl(url: string) {
1185
1325
  if (url && this.url !== url) {
1186
1326
  this.url = url;
1187
1327
  this.updateMeeting({locusUrl: url});
@@ -1201,7 +1341,7 @@ export default class LocusInfo extends EventsScope {
1201
1341
  * @returns {undefined}
1202
1342
  * @memberof LocusInfo
1203
1343
  */
1204
- updateAclUrl(aclUrl) {
1344
+ updateAclUrl(aclUrl: string) {
1205
1345
  if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {
1206
1346
  this.aclUrl = aclUrl;
1207
1347
  }
@@ -1212,7 +1352,7 @@ export default class LocusInfo extends EventsScope {
1212
1352
  * @returns {undefined}
1213
1353
  * @memberof LocusInfo
1214
1354
  */
1215
- updateBasequence(baseSequence) {
1355
+ updateBasequence(baseSequence: number) {
1216
1356
  if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {
1217
1357
  this.baseSequence = baseSequence;
1218
1358
  }
@@ -1223,7 +1363,7 @@ export default class LocusInfo extends EventsScope {
1223
1363
  * @returns {undefined}
1224
1364
  * @memberof LocusInfo
1225
1365
  */
1226
- updateSequence(sequence) {
1366
+ updateSequence(sequence: number) {
1227
1367
  if (sequence && !isEqual(this.sequence, sequence)) {
1228
1368
  this.sequence = sequence;
1229
1369
  }
@@ -1234,7 +1374,7 @@ export default class LocusInfo extends EventsScope {
1234
1374
  * @returns {undefined}
1235
1375
  * @memberof LocusInfo
1236
1376
  */
1237
- updateMemberShip(membership) {
1377
+ updateMemberShip(membership: object) {
1238
1378
  if (membership && !isEqual(this.membership, membership)) {
1239
1379
  this.membership = membership;
1240
1380
  }
@@ -1245,7 +1385,7 @@ export default class LocusInfo extends EventsScope {
1245
1385
  * @returns {undefined}
1246
1386
  * @memberof LocusInfo
1247
1387
  */
1248
- updateIdentifiers(identities) {
1388
+ updateIdentifiers(identities: Array<any>) {
1249
1389
  if (identities && !isEqual(this.identities, identities)) {
1250
1390
  this.identities = identities;
1251
1391
  }