@webex/plugin-meetings 3.0.0-beta.8 → 3.0.0-beta.81

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