@webex/plugin-meetings 3.0.0-beta.14 → 3.0.0-beta.141

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 (519) hide show
  1. package/README.md +45 -1
  2. package/UPGRADING.md +9 -9
  3. package/browsers.js +19 -24
  4. package/dist/annotation/annotation.types.js +7 -0
  5. package/dist/annotation/annotation.types.js.map +1 -0
  6. package/dist/annotation/constants.js +48 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +355 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +193 -0
  11. package/dist/breakouts/breakout.js.map +1 -0
  12. package/dist/breakouts/collection.js +23 -0
  13. package/dist/breakouts/collection.js.map +1 -0
  14. package/dist/breakouts/edit-lock-error.js +52 -0
  15. package/dist/breakouts/edit-lock-error.js.map +1 -0
  16. package/dist/breakouts/events.js +43 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +1012 -0
  19. package/dist/breakouts/index.js.map +1 -0
  20. package/dist/breakouts/request.js +78 -0
  21. package/dist/breakouts/request.js.map +1 -0
  22. package/dist/breakouts/utils.js +67 -0
  23. package/dist/breakouts/utils.js.map +1 -0
  24. package/dist/common/browser-detection.js +1 -20
  25. package/dist/common/browser-detection.js.map +1 -1
  26. package/dist/common/collection.js +5 -20
  27. package/dist/common/collection.js.map +1 -1
  28. package/dist/common/config.js +0 -7
  29. package/dist/common/config.js.map +1 -1
  30. package/dist/common/errors/captcha-error.js +5 -26
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +5 -26
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +6 -27
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +5 -26
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/parameter.js +5 -33
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +5 -26
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +4 -25
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reconnection-in-progress.js +0 -17
  45. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  46. package/dist/common/errors/reconnection.js +5 -26
  47. package/dist/common/errors/reconnection.js.map +1 -1
  48. package/dist/common/errors/stats.js +5 -26
  49. package/dist/common/errors/stats.js.map +1 -1
  50. package/dist/common/errors/webex-errors.js +6 -41
  51. package/dist/common/errors/webex-errors.js.map +1 -1
  52. package/dist/common/errors/webex-meetings-error.js +1 -24
  53. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  54. package/dist/common/events/events-scope.js +0 -22
  55. package/dist/common/events/events-scope.js.map +1 -1
  56. package/dist/common/events/events.js +0 -23
  57. package/dist/common/events/events.js.map +1 -1
  58. package/dist/common/events/trigger-proxy.js +0 -12
  59. package/dist/common/events/trigger-proxy.js.map +1 -1
  60. package/dist/common/events/util.js +0 -15
  61. package/dist/common/events/util.js.map +1 -1
  62. package/dist/common/logs/logger-config.js +0 -4
  63. package/dist/common/logs/logger-config.js.map +1 -1
  64. package/dist/common/logs/logger-proxy.js +1 -8
  65. package/dist/common/logs/logger-proxy.js.map +1 -1
  66. package/dist/common/logs/request.js +35 -61
  67. package/dist/common/logs/request.js.map +1 -1
  68. package/dist/common/queue.js +4 -14
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.js +6 -6
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.js +204 -53
  73. package/dist/constants.js.map +1 -1
  74. package/dist/controls-options-manager/constants.js +14 -0
  75. package/dist/controls-options-manager/constants.js.map +1 -0
  76. package/dist/controls-options-manager/enums.js +27 -0
  77. package/dist/controls-options-manager/enums.js.map +1 -0
  78. package/dist/controls-options-manager/index.js +297 -0
  79. package/dist/controls-options-manager/index.js.map +1 -0
  80. package/dist/controls-options-manager/types.js +7 -0
  81. package/dist/controls-options-manager/types.js.map +1 -0
  82. package/dist/controls-options-manager/util.js +300 -0
  83. package/dist/controls-options-manager/util.js.map +1 -0
  84. package/dist/index.js +72 -17
  85. package/dist/index.js.map +1 -1
  86. package/dist/locus-info/controlsUtils.js +100 -29
  87. package/dist/locus-info/controlsUtils.js.map +1 -1
  88. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  89. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  90. package/dist/locus-info/fullState.js +0 -15
  91. package/dist/locus-info/fullState.js.map +1 -1
  92. package/dist/locus-info/hostUtils.js +4 -12
  93. package/dist/locus-info/hostUtils.js.map +1 -1
  94. package/dist/locus-info/index.js +398 -216
  95. package/dist/locus-info/index.js.map +1 -1
  96. package/dist/locus-info/infoUtils.js +0 -38
  97. package/dist/locus-info/infoUtils.js.map +1 -1
  98. package/dist/locus-info/mediaSharesUtils.js +54 -38
  99. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  100. package/dist/locus-info/parser.js +89 -124
  101. package/dist/locus-info/parser.js.map +1 -1
  102. package/dist/locus-info/selfUtils.js +94 -92
  103. package/dist/locus-info/selfUtils.js.map +1 -1
  104. package/dist/media/index.js +55 -165
  105. package/dist/media/index.js.map +1 -1
  106. package/dist/media/properties.js +71 -117
  107. package/dist/media/properties.js.map +1 -1
  108. package/dist/media/util.js +2 -9
  109. package/dist/media/util.js.map +1 -1
  110. package/dist/mediaQualityMetrics/config.js +505 -495
  111. package/dist/mediaQualityMetrics/config.js.map +1 -1
  112. package/dist/meeting/in-meeting-actions.js +77 -14
  113. package/dist/meeting/in-meeting-actions.js.map +1 -1
  114. package/dist/meeting/index.js +2576 -2455
  115. package/dist/meeting/index.js.map +1 -1
  116. package/dist/meeting/locusMediaRequest.js +291 -0
  117. package/dist/meeting/locusMediaRequest.js.map +1 -0
  118. package/dist/meeting/muteState.js +292 -138
  119. package/dist/meeting/muteState.js.map +1 -1
  120. package/dist/meeting/request.js +296 -342
  121. package/dist/meeting/request.js.map +1 -1
  122. package/dist/meeting/request.type.js +0 -1
  123. package/dist/meeting/request.type.js.map +1 -1
  124. package/dist/meeting/state.js +21 -31
  125. package/dist/meeting/state.js.map +1 -1
  126. package/dist/meeting/util.js +463 -583
  127. package/dist/meeting/util.js.map +1 -1
  128. package/dist/meeting-info/collection.js +3 -25
  129. package/dist/meeting-info/collection.js.map +1 -1
  130. package/dist/meeting-info/index.js +10 -33
  131. package/dist/meeting-info/index.js.map +1 -1
  132. package/dist/meeting-info/meeting-info-v2.js +305 -286
  133. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  134. package/dist/meeting-info/request.js +1 -16
  135. package/dist/meeting-info/request.js.map +1 -1
  136. package/dist/meeting-info/util.js +98 -183
  137. package/dist/meeting-info/util.js.map +1 -1
  138. package/dist/meeting-info/utilv2.js +156 -232
  139. package/dist/meeting-info/utilv2.js.map +1 -1
  140. package/dist/meetings/collection.js +24 -20
  141. package/dist/meetings/collection.js.map +1 -1
  142. package/dist/meetings/index.js +692 -593
  143. package/dist/meetings/index.js.map +1 -1
  144. package/dist/meetings/request.js +23 -42
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +186 -155
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.js +89 -88
  149. package/dist/member/index.js.map +1 -1
  150. package/dist/member/types.js +15 -0
  151. package/dist/member/types.js.map +1 -0
  152. package/dist/member/util.js +101 -69
  153. package/dist/member/util.js.map +1 -1
  154. package/dist/members/collection.js +12 -12
  155. package/dist/members/collection.js.map +1 -1
  156. package/dist/members/index.js +166 -205
  157. package/dist/members/index.js.map +1 -1
  158. package/dist/members/request.js +120 -85
  159. package/dist/members/request.js.map +1 -1
  160. package/dist/members/types.js +15 -0
  161. package/dist/members/types.js.map +1 -0
  162. package/dist/members/util.js +314 -260
  163. package/dist/members/util.js.map +1 -1
  164. package/dist/metrics/config.js +50 -16
  165. package/dist/metrics/config.js.map +1 -1
  166. package/dist/metrics/constants.js +4 -7
  167. package/dist/metrics/constants.js.map +1 -1
  168. package/dist/metrics/index.js +93 -162
  169. package/dist/metrics/index.js.map +1 -1
  170. package/dist/multistream/mediaRequestManager.js +170 -50
  171. package/dist/multistream/mediaRequestManager.js.map +1 -1
  172. package/dist/multistream/receiveSlot.js +58 -65
  173. package/dist/multistream/receiveSlot.js.map +1 -1
  174. package/dist/multistream/receiveSlotManager.js +74 -93
  175. package/dist/multistream/receiveSlotManager.js.map +1 -1
  176. package/dist/multistream/remoteMedia.js +55 -74
  177. package/dist/multistream/remoteMedia.js.map +1 -1
  178. package/dist/multistream/remoteMediaGroup.js +14 -40
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +481 -442
  181. package/dist/multistream/remoteMediaManager.js.map +1 -1
  182. package/dist/networkQualityMonitor/index.js +32 -59
  183. package/dist/networkQualityMonitor/index.js.map +1 -1
  184. package/dist/personal-meeting-room/index.js +10 -45
  185. package/dist/personal-meeting-room/index.js.map +1 -1
  186. package/dist/personal-meeting-room/request.js +2 -33
  187. package/dist/personal-meeting-room/request.js.map +1 -1
  188. package/dist/personal-meeting-room/util.js +0 -13
  189. package/dist/personal-meeting-room/util.js.map +1 -1
  190. package/dist/reachability/index.js +190 -199
  191. package/dist/reachability/index.js.map +1 -1
  192. package/dist/reachability/request.js +14 -23
  193. package/dist/reachability/request.js.map +1 -1
  194. package/dist/reactions/constants.js +13 -0
  195. package/dist/reactions/constants.js.map +1 -0
  196. package/dist/reactions/reactions.js +2 -4
  197. package/dist/reactions/reactions.js.map +1 -1
  198. package/dist/reactions/reactions.type.js +19 -23
  199. package/dist/reactions/reactions.type.js.map +1 -1
  200. package/dist/reconnection-manager/index.js +326 -465
  201. package/dist/reconnection-manager/index.js.map +1 -1
  202. package/dist/recording-controller/enums.js +17 -0
  203. package/dist/recording-controller/enums.js.map +1 -0
  204. package/dist/recording-controller/index.js +343 -0
  205. package/dist/recording-controller/index.js.map +1 -0
  206. package/dist/recording-controller/util.js +63 -0
  207. package/dist/recording-controller/util.js.map +1 -0
  208. package/dist/roap/index.js +31 -75
  209. package/dist/roap/index.js.map +1 -1
  210. package/dist/roap/request.js +129 -136
  211. package/dist/roap/request.js.map +1 -1
  212. package/dist/roap/turnDiscovery.js +143 -103
  213. package/dist/roap/turnDiscovery.js.map +1 -1
  214. package/dist/statsAnalyzer/global.js +1 -95
  215. package/dist/statsAnalyzer/global.js.map +1 -1
  216. package/dist/statsAnalyzer/index.js +369 -462
  217. package/dist/statsAnalyzer/index.js.map +1 -1
  218. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  219. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  220. package/dist/transcription/index.js +13 -45
  221. package/dist/transcription/index.js.map +1 -1
  222. package/dist/types/annotation/annotation.types.d.ts +35 -0
  223. package/dist/types/annotation/constants.d.ts +31 -0
  224. package/dist/types/annotation/index.d.ts +124 -0
  225. package/dist/types/breakouts/breakout.d.ts +8 -0
  226. package/dist/types/breakouts/collection.d.ts +5 -0
  227. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  228. package/dist/types/breakouts/events.d.ts +2 -0
  229. package/dist/types/breakouts/index.d.ts +5 -0
  230. package/dist/types/breakouts/request.d.ts +22 -0
  231. package/dist/types/breakouts/utils.d.ts +15 -0
  232. package/dist/types/common/browser-detection.d.ts +9 -0
  233. package/dist/types/common/collection.d.ts +48 -0
  234. package/dist/types/common/config.d.ts +2 -0
  235. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  236. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  237. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  238. package/dist/types/common/errors/media.d.ts +15 -0
  239. package/dist/types/common/errors/parameter.d.ts +15 -0
  240. package/dist/types/common/errors/password-error.d.ts +15 -0
  241. package/dist/types/common/errors/permission.d.ts +14 -0
  242. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  243. package/dist/types/common/errors/reconnection.d.ts +15 -0
  244. package/dist/types/common/errors/stats.d.ts +15 -0
  245. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  246. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  247. package/dist/types/common/events/events-scope.d.ts +17 -0
  248. package/dist/types/common/events/events.d.ts +12 -0
  249. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  250. package/dist/types/common/events/util.d.ts +2 -0
  251. package/dist/types/common/logs/logger-config.d.ts +2 -0
  252. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  253. package/dist/types/common/logs/request.d.ts +34 -0
  254. package/dist/types/common/queue.d.ts +32 -0
  255. package/dist/types/config.d.ts +78 -0
  256. package/dist/types/constants.d.ts +994 -0
  257. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  258. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  259. package/dist/types/controls-options-manager/index.d.ts +136 -0
  260. package/dist/types/controls-options-manager/types.d.ts +43 -0
  261. package/dist/types/controls-options-manager/util.d.ts +1 -0
  262. package/dist/types/index.d.ts +7 -0
  263. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  264. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  265. package/dist/types/locus-info/fullState.d.ts +2 -0
  266. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  267. package/dist/types/locus-info/index.d.ts +315 -0
  268. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  269. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  270. package/dist/types/locus-info/parser.d.ts +212 -0
  271. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  272. package/dist/types/media/index.d.ts +34 -0
  273. package/dist/types/media/properties.d.ts +108 -0
  274. package/dist/types/media/util.d.ts +2 -0
  275. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  276. package/dist/types/meeting/in-meeting-actions.d.ts +147 -0
  277. package/dist/types/meeting/index.d.ts +1762 -0
  278. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  279. package/dist/types/meeting/muteState.d.ts +186 -0
  280. package/dist/types/meeting/request.d.ts +269 -0
  281. package/dist/types/meeting/request.type.d.ts +11 -0
  282. package/dist/types/meeting/state.d.ts +9 -0
  283. package/dist/types/meeting/util.d.ts +76 -0
  284. package/dist/types/meeting-info/collection.d.ts +20 -0
  285. package/dist/types/meeting-info/index.d.ts +57 -0
  286. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  287. package/dist/types/meeting-info/request.d.ts +22 -0
  288. package/dist/types/meeting-info/util.d.ts +2 -0
  289. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  290. package/dist/types/meetings/collection.d.ts +31 -0
  291. package/dist/types/meetings/index.d.ts +345 -0
  292. package/dist/types/meetings/request.d.ts +27 -0
  293. package/dist/types/meetings/util.d.ts +18 -0
  294. package/dist/types/member/index.d.ts +157 -0
  295. package/dist/types/member/types.d.ts +21 -0
  296. package/dist/types/member/util.d.ts +2 -0
  297. package/dist/types/members/collection.d.ts +29 -0
  298. package/dist/types/members/index.d.ts +353 -0
  299. package/dist/types/members/request.d.ts +114 -0
  300. package/dist/types/members/types.d.ts +24 -0
  301. package/dist/types/members/util.d.ts +210 -0
  302. package/dist/types/metrics/config.d.ts +195 -0
  303. package/dist/types/metrics/constants.d.ts +55 -0
  304. package/dist/types/metrics/index.d.ts +169 -0
  305. package/dist/types/multistream/mediaRequestManager.d.ts +104 -0
  306. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  307. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  308. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  309. package/dist/types/multistream/remoteMediaGroup.d.ts +48 -0
  310. package/dist/types/multistream/remoteMediaManager.d.ts +267 -0
  311. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  312. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  313. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  314. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  315. package/dist/types/reachability/index.d.ts +152 -0
  316. package/dist/types/reachability/request.d.ts +37 -0
  317. package/dist/types/reactions/constants.d.ts +3 -0
  318. package/dist/types/reactions/reactions.d.ts +4 -0
  319. package/dist/types/reactions/reactions.type.d.ts +52 -0
  320. package/dist/types/reconnection-manager/index.d.ts +126 -0
  321. package/dist/types/recording-controller/enums.d.ts +7 -0
  322. package/dist/types/recording-controller/index.d.ts +193 -0
  323. package/dist/types/recording-controller/util.d.ts +13 -0
  324. package/dist/types/roap/index.d.ts +77 -0
  325. package/dist/types/roap/request.d.ts +36 -0
  326. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  327. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  328. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  329. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  330. package/dist/types/transcription/index.d.ts +64 -0
  331. package/internal-README.md +7 -6
  332. package/package.json +28 -21
  333. package/src/annotation/annotation.types.ts +42 -0
  334. package/src/annotation/constants.ts +36 -0
  335. package/src/annotation/index.ts +339 -0
  336. package/src/breakouts/README.md +220 -0
  337. package/src/breakouts/breakout.ts +163 -0
  338. package/src/breakouts/collection.ts +19 -0
  339. package/src/breakouts/edit-lock-error.ts +25 -0
  340. package/src/breakouts/events.ts +37 -0
  341. package/src/breakouts/index.ts +888 -0
  342. package/src/breakouts/request.ts +55 -0
  343. package/src/breakouts/utils.ts +57 -0
  344. package/src/common/browser-detection.ts +9 -6
  345. package/src/common/collection.ts +3 -1
  346. package/src/common/errors/captcha-error.ts +6 -6
  347. package/src/common/errors/intent-to-join.ts +6 -6
  348. package/src/common/errors/join-meeting.ts +12 -8
  349. package/src/common/errors/media.ts +6 -6
  350. package/src/common/errors/parameter.ts +9 -6
  351. package/src/common/errors/password-error.ts +6 -6
  352. package/src/common/errors/permission.ts +5 -5
  353. package/src/common/errors/reconnection.ts +6 -6
  354. package/src/common/errors/stats.ts +6 -6
  355. package/src/common/errors/webex-errors.ts +7 -5
  356. package/src/common/errors/webex-meetings-error.ts +1 -1
  357. package/src/common/events/events-scope.ts +5 -1
  358. package/src/common/events/events.ts +5 -1
  359. package/src/common/events/trigger-proxy.ts +8 -3
  360. package/src/common/events/util.ts +1 -2
  361. package/src/common/logs/logger-proxy.ts +22 -11
  362. package/src/common/logs/request.ts +11 -8
  363. package/src/config.ts +16 -12
  364. package/src/constants.ts +154 -7
  365. package/src/controls-options-manager/constants.ts +5 -0
  366. package/src/controls-options-manager/enums.ts +18 -0
  367. package/src/controls-options-manager/index.ts +278 -0
  368. package/src/controls-options-manager/types.ts +59 -0
  369. package/src/controls-options-manager/util.ts +286 -0
  370. package/src/index.ts +33 -0
  371. package/src/locus-info/controlsUtils.ts +142 -24
  372. package/src/locus-info/fullState.ts +15 -11
  373. package/src/locus-info/hostUtils.ts +4 -3
  374. package/src/locus-info/index.ts +335 -55
  375. package/src/locus-info/infoUtils.ts +12 -4
  376. package/src/locus-info/mediaSharesUtils.ts +52 -4
  377. package/src/locus-info/parser.ts +47 -69
  378. package/src/locus-info/selfUtils.ts +175 -56
  379. package/src/media/index.ts +139 -196
  380. package/src/media/properties.ts +43 -36
  381. package/src/media/util.ts +1 -1
  382. package/src/mediaQualityMetrics/config.ts +380 -378
  383. package/src/meeting/in-meeting-actions.ts +159 -3
  384. package/src/meeting/index.ts +2809 -1589
  385. package/src/meeting/locusMediaRequest.ts +309 -0
  386. package/src/meeting/muteState.ts +290 -72
  387. package/src/meeting/request.ts +229 -182
  388. package/src/meeting/request.type.ts +10 -8
  389. package/src/meeting/state.ts +45 -30
  390. package/src/meeting/util.ts +445 -395
  391. package/src/meeting-info/collection.ts +2 -1
  392. package/src/meeting-info/index.ts +32 -30
  393. package/src/meeting-info/meeting-info-v2.ts +235 -116
  394. package/src/meeting-info/request.ts +9 -3
  395. package/src/meeting-info/util.ts +54 -46
  396. package/src/meeting-info/utilv2.ts +71 -55
  397. package/src/meetings/collection.ts +21 -1
  398. package/src/meetings/index.ts +771 -437
  399. package/src/meetings/request.ts +29 -25
  400. package/src/meetings/util.ts +132 -33
  401. package/src/member/index.ts +95 -49
  402. package/src/member/types.ts +24 -0
  403. package/src/member/util.ts +106 -13
  404. package/src/members/collection.ts +8 -1
  405. package/src/members/index.ts +288 -130
  406. package/src/members/request.ts +144 -31
  407. package/src/members/types.ts +28 -0
  408. package/src/members/util.ts +316 -235
  409. package/src/metrics/config.ts +302 -90
  410. package/src/metrics/constants.ts +2 -6
  411. package/src/metrics/index.ts +124 -95
  412. package/src/multistream/mediaRequestManager.ts +210 -45
  413. package/src/multistream/receiveSlot.ts +69 -26
  414. package/src/multistream/receiveSlotManager.ts +62 -38
  415. package/src/multistream/remoteMedia.ts +30 -4
  416. package/src/multistream/remoteMediaGroup.ts +11 -3
  417. package/src/multistream/remoteMediaManager.ts +245 -66
  418. package/src/networkQualityMonitor/index.ts +24 -27
  419. package/src/personal-meeting-room/index.ts +12 -16
  420. package/src/personal-meeting-room/request.ts +10 -3
  421. package/src/personal-meeting-room/util.ts +3 -3
  422. package/src/reachability/index.ts +131 -79
  423. package/src/reachability/request.ts +43 -34
  424. package/src/reactions/constants.ts +4 -0
  425. package/src/reactions/reactions.ts +8 -8
  426. package/src/reactions/reactions.type.ts +31 -5
  427. package/src/reconnection-manager/index.ts +193 -112
  428. package/src/recording-controller/enums.ts +8 -0
  429. package/src/recording-controller/index.ts +315 -0
  430. package/src/recording-controller/util.ts +58 -0
  431. package/src/roap/index.ts +53 -53
  432. package/src/roap/request.ts +77 -65
  433. package/src/roap/turnDiscovery.ts +101 -48
  434. package/src/statsAnalyzer/global.ts +8 -104
  435. package/src/statsAnalyzer/index.ts +624 -377
  436. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  437. package/src/transcription/index.ts +34 -32
  438. package/test/integration/spec/converged-space-meetings.js +177 -0
  439. package/test/integration/spec/journey.js +670 -466
  440. package/test/integration/spec/space-meeting.js +320 -204
  441. package/test/integration/spec/transcription.js +7 -8
  442. package/test/unit/spec/annotation/index.ts +433 -0
  443. package/test/unit/spec/breakouts/breakout.ts +203 -0
  444. package/test/unit/spec/breakouts/collection.ts +15 -0
  445. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  446. package/test/unit/spec/breakouts/events.ts +77 -0
  447. package/test/unit/spec/breakouts/index.ts +1685 -0
  448. package/test/unit/spec/breakouts/request.ts +104 -0
  449. package/test/unit/spec/breakouts/utils.js +72 -0
  450. package/test/unit/spec/common/browser-detection.js +9 -28
  451. package/test/unit/spec/controls-options-manager/index.js +287 -0
  452. package/test/unit/spec/controls-options-manager/util.js +518 -0
  453. package/test/unit/spec/fixture/locus.js +93 -90
  454. package/test/unit/spec/locus-info/controlsUtils.js +305 -32
  455. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  456. package/test/unit/spec/locus-info/index.js +615 -5
  457. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  458. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  459. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  460. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  461. package/test/unit/spec/locus-info/parser.js +3 -9
  462. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  463. package/test/unit/spec/locus-info/selfUtils.js +221 -12
  464. package/test/unit/spec/media/index.ts +104 -8
  465. package/test/unit/spec/media/properties.ts +9 -9
  466. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -3
  467. package/test/unit/spec/meeting/index.js +3077 -923
  468. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  469. package/test/unit/spec/meeting/muteState.js +421 -94
  470. package/test/unit/spec/meeting/request.js +408 -85
  471. package/test/unit/spec/meeting/utils.js +326 -189
  472. package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
  473. package/test/unit/spec/meeting-info/request.js +7 -9
  474. package/test/unit/spec/meeting-info/util.js +11 -12
  475. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  476. package/test/unit/spec/meetings/collection.js +15 -1
  477. package/test/unit/spec/meetings/index.js +1126 -328
  478. package/test/unit/spec/meetings/utils.js +220 -14
  479. package/test/unit/spec/member/index.js +24 -1
  480. package/test/unit/spec/member/util.js +383 -32
  481. package/test/unit/spec/members/index.js +424 -55
  482. package/test/unit/spec/members/request.js +228 -40
  483. package/test/unit/spec/members/utils.js +191 -4
  484. package/test/unit/spec/metrics/index.js +113 -20
  485. package/test/unit/spec/multistream/mediaRequestManager.ts +676 -105
  486. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  487. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  488. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  489. package/test/unit/spec/multistream/remoteMediaGroup.ts +52 -5
  490. package/test/unit/spec/multistream/remoteMediaManager.ts +585 -65
  491. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  492. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  493. package/test/unit/spec/reachability/index.ts +176 -27
  494. package/test/unit/spec/reachability/request.js +66 -0
  495. package/test/unit/spec/reconnection-manager/index.js +62 -31
  496. package/test/unit/spec/recording-controller/index.js +231 -0
  497. package/test/unit/spec/recording-controller/util.js +102 -0
  498. package/test/unit/spec/roap/index.ts +19 -49
  499. package/test/unit/spec/roap/request.ts +187 -0
  500. package/test/unit/spec/roap/turnDiscovery.ts +92 -50
  501. package/test/unit/spec/stats-analyzer/index.js +116 -60
  502. package/test/utils/cmr.js +44 -42
  503. package/test/utils/constants.js +9 -0
  504. package/test/utils/integrationTestUtils.js +64 -0
  505. package/test/utils/testUtils.js +63 -99
  506. package/test/utils/webex-config.js +22 -18
  507. package/test/utils/webex-test-users.js +57 -50
  508. package/tsconfig.json +6 -0
  509. package/dist/media/internal-media-core-wrapper.js +0 -22
  510. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  511. package/dist/meeting/effectsState.js +0 -334
  512. package/dist/meeting/effectsState.js.map +0 -1
  513. package/dist/multistream/multistreamMedia.js +0 -116
  514. package/dist/multistream/multistreamMedia.js.map +0 -1
  515. package/src/index.js +0 -15
  516. package/src/media/internal-media-core-wrapper.ts +0 -9
  517. package/src/meeting/effectsState.ts +0 -211
  518. package/src/multistream/multistreamMedia.ts +0 -92
  519. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -1,3 +1,6 @@
1
+ /* eslint-disable default-param-last */
2
+
3
+ import {isEqual} from 'lodash';
1
4
  import {
2
5
  _IDLE_,
3
6
  _JOINED_,
@@ -10,7 +13,7 @@ import {
10
13
  MEDIA_STATE,
11
14
  AUDIO,
12
15
  VIDEO,
13
- MediaContent
16
+ MediaContent,
14
17
  } from '../constants';
15
18
  import ParameterError from '../common/errors/parameter';
16
19
 
@@ -29,6 +32,7 @@ SelfUtils.parse = (self: any, deviceId: string) => {
29
32
  const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);
30
33
 
31
34
  return {
35
+ remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),
32
36
  remoteMuted: SelfUtils.getRemoteMuted(self),
33
37
  unmuteAllowed: SelfUtils.getUnmuteAllowed(self),
34
38
  localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),
@@ -47,9 +51,7 @@ SelfUtils.parse = (self: any, deviceId: string) => {
47
51
  joinedWith,
48
52
  pstnDevices,
49
53
  // current media stats is for the current device who has joined
50
- currentMediaStatus: SelfUtils.getMediaStatus(
51
- joinedWith?.mediaSessions
52
- ),
54
+ currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),
53
55
  creator: self.isCreator, // check if its used,
54
56
  selfId: self.id,
55
57
  selfIdentity: SelfUtils.getSelfIdentity(self),
@@ -59,22 +61,29 @@ SelfUtils.parse = (self: any, deviceId: string) => {
59
61
  isUserUnadmitted: self.state === _IDLE_ && joinedWith?.intent?.type === _WAIT_,
60
62
  layout: SelfUtils.getLayout(self),
61
63
  canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),
62
- isSharingBlocked: SelfUtils.isSharingBlocked(self)
64
+ isSharingBlocked: SelfUtils.isSharingBlocked(self),
65
+ breakoutSessions: SelfUtils.getBreakoutSessions(self),
66
+ breakout: SelfUtils.getBreakout(self),
63
67
  };
64
68
  }
65
69
 
66
70
  return null;
67
71
  };
68
72
 
69
- SelfUtils.getLayout = (self) => (Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined);
73
+ SelfUtils.getBreakoutSessions = (self) => self?.controls?.breakout?.sessions;
74
+ SelfUtils.getBreakout = (self) => self?.controls?.breakout;
70
75
 
71
- SelfUtils.getRoles = (self) => (self?.controls?.role?.roles || []).reduce((roles, role) => {
72
- if (role.hasRole) {
73
- roles.push(role.type);
74
- }
76
+ SelfUtils.getLayout = (self) =>
77
+ Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined;
78
+
79
+ SelfUtils.getRoles = (self) =>
80
+ (self?.controls?.role?.roles || []).reduce((roles, role) => {
81
+ if (role.hasRole) {
82
+ roles.push(role.type);
83
+ }
75
84
 
76
- return roles;
77
- }, []);
85
+ return roles;
86
+ }, []);
78
87
 
79
88
  SelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;
80
89
 
@@ -87,26 +96,39 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
87
96
 
88
97
  updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);
89
98
  updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
99
+ updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);
90
100
  updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
91
- updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);
92
- updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);
101
+ updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(
102
+ previous,
103
+ current
104
+ );
105
+ updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(
106
+ previous,
107
+ current
108
+ );
93
109
  updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);
110
+ updates.isRolesChanged = SelfUtils.isRolesChanged(previous, current);
94
111
  updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);
95
112
  updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);
96
113
  updates.layoutChanged = SelfUtils.layoutChanged(previous, current);
97
114
 
98
115
  updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);
99
- updates.audioStateChange = previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;
100
- updates.videoStateChange = previous?.currentMediaStatus.video !== current.currentMediaStatus.video;
101
- updates.shareStateChange = previous?.currentMediaStatus.share !== current.currentMediaStatus.share;
102
-
103
- updates.canNotViewTheParticipantListChanged = previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;
116
+ updates.audioStateChange =
117
+ previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;
118
+ updates.videoStateChange =
119
+ previous?.currentMediaStatus.video !== current.currentMediaStatus.video;
120
+ updates.shareStateChange =
121
+ previous?.currentMediaStatus.share !== current.currentMediaStatus.share;
122
+
123
+ updates.canNotViewTheParticipantListChanged =
124
+ previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;
104
125
  updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;
126
+ updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);
105
127
 
106
128
  return {
107
129
  previous,
108
130
  current,
109
- updates
131
+ updates,
110
132
  };
111
133
  };
112
134
 
@@ -114,7 +136,7 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
114
136
  * Checks if user has joined the meeting
115
137
  * @param {Object} self
116
138
  * @returns {boolean} isJoined
117
- */
139
+ */
118
140
  SelfUtils.isJoined = (self: any) => self?.state === _JOINED_;
119
141
 
120
142
  /**
@@ -122,9 +144,13 @@ SelfUtils.isJoined = (self: any) => self?.state === _JOINED_;
122
144
  *
123
145
  * @param {Self} previous - Previous self state
124
146
  * @param {Self} current - Current self state [per event]
125
- * @returns {boolean} - If the MEeting Layout Controls Layout has changed.
147
+ * @returns {boolean} - If the Meeting Layout Controls Layout has changed.
126
148
  */
127
- SelfUtils.layoutChanged = (previous: any, current: any) => current?.layout && previous?.layout !== current?.layout;
149
+ SelfUtils.layoutChanged = (previous: any, current: any) =>
150
+ current?.layout && previous?.layout !== current?.layout;
151
+
152
+ SelfUtils.breakoutsChanged = (previous, current) =>
153
+ !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout;
128
154
 
129
155
  SelfUtils.isMediaInactive = (previous, current) => {
130
156
  if (
@@ -135,15 +161,12 @@ SelfUtils.isMediaInactive = (previous, current) => {
135
161
  current.joinedWith &&
136
162
  current.joinedWith.mediaSessions
137
163
  ) {
138
- const previousMediaStatus = SelfUtils.getMediaStatus(
139
- previous.joinedWith.mediaSessions
140
- );
141
- const currentMediaStatus = SelfUtils.getMediaStatus(
142
- current.joinedWith.mediaSessions
143
- );
164
+ const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);
165
+ const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);
144
166
 
145
167
  if (
146
- previousMediaStatus.audio && currentMediaStatus.audio &&
168
+ previousMediaStatus.audio &&
169
+ currentMediaStatus.audio &&
147
170
  previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&
148
171
  currentMediaStatus.audio.state === MEDIA_STATE.inactive &&
149
172
  currentMediaStatus.audio.direction !== MEDIA_STATE.inactive
@@ -152,7 +175,8 @@ SelfUtils.isMediaInactive = (previous, current) => {
152
175
  }
153
176
 
154
177
  if (
155
- previousMediaStatus.video && currentMediaStatus.video &&
178
+ previousMediaStatus.video &&
179
+ currentMediaStatus.video &&
156
180
  previousMediaStatus.video.state !== MEDIA_STATE.inactive &&
157
181
  currentMediaStatus.video.state === MEDIA_STATE.inactive &&
158
182
  currentMediaStatus.video.direction !== MEDIA_STATE.inactive
@@ -161,7 +185,8 @@ SelfUtils.isMediaInactive = (previous, current) => {
161
185
  }
162
186
 
163
187
  if (
164
- previousMediaStatus.share && currentMediaStatus.share &&
188
+ previousMediaStatus.share &&
189
+ currentMediaStatus.share &&
165
190
  previousMediaStatus.share.state !== MEDIA_STATE.inactive &&
166
191
  currentMediaStatus.share.state === MEDIA_STATE.inactive &&
167
192
  currentMediaStatus.share.direction !== MEDIA_STATE.inactive
@@ -176,7 +201,13 @@ SelfUtils.isMediaInactive = (previous, current) => {
176
201
  };
177
202
 
178
203
  SelfUtils.getLastModified = (self) => {
179
- if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.lastModified) {
204
+ if (
205
+ !self ||
206
+ !self.controls ||
207
+ !self.controls.audio ||
208
+ !self.controls.audio.meta ||
209
+ !self.controls.audio.meta.lastModified
210
+ ) {
180
211
  return null;
181
212
  }
182
213
 
@@ -184,7 +215,13 @@ SelfUtils.getLastModified = (self) => {
184
215
  };
185
216
 
186
217
  SelfUtils.getModifiedBy = (self) => {
187
- if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.modifiedBy) {
218
+ if (
219
+ !self ||
220
+ !self.controls ||
221
+ !self.controls.audio ||
222
+ !self.controls.audio.meta ||
223
+ !self.controls.audio.meta.modifiedBy
224
+ ) {
188
225
  return null;
189
226
  }
190
227
 
@@ -204,6 +241,19 @@ SelfUtils.getSelfIdentity = (self: any) => {
204
241
  return self.person.id;
205
242
  };
206
243
 
244
+ /**
245
+ * get the "remote video mute" property from the self object
246
+ * @param {Object} self
247
+ * @returns {Boolean}
248
+ */
249
+ SelfUtils.getRemoteVideoMuted = (self: any) => {
250
+ if (!self || !self.controls || !self.controls.video) {
251
+ return null;
252
+ }
253
+
254
+ return self.controls.video.muted;
255
+ };
256
+
207
257
  /**
208
258
  * get the "remote mute" property from the self object
209
259
  * @param {Object} self
@@ -227,36 +277,40 @@ SelfUtils.getUnmuteAllowed = (self) => {
227
277
  return !self.controls.audio.disallowUnmute;
228
278
  };
229
279
 
230
-
231
280
  SelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;
232
281
 
233
282
  SelfUtils.getStatus = (status) => ({
234
283
  audio: status.audioStatus,
235
284
  video: status.videoStatus,
236
- slides: status.videoSlidesStatus
285
+ slides: status.videoSlidesStatus,
237
286
  });
238
287
 
239
-
240
288
  /**
241
289
  * @param {Object} oldSelf
242
290
  * @param {Object} changedSelf
243
291
  * @returns {Boolean}
244
292
  */
245
- SelfUtils.wasMediaInactiveOrReleased = (oldSelf: any = {}, changedSelf: any) => oldSelf.joinedWith && oldSelf.joinedWith.state === _JOINED_ && changedSelf.joinedWith.state === _LEFT_ &&
246
- (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE || changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);
247
-
293
+ SelfUtils.wasMediaInactiveOrReleased = (oldSelf: any = {}, changedSelf: any) =>
294
+ oldSelf.joinedWith &&
295
+ oldSelf.joinedWith.state === _JOINED_ &&
296
+ changedSelf.joinedWith &&
297
+ changedSelf.joinedWith.state === _LEFT_ &&
298
+ (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||
299
+ changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);
248
300
 
249
301
  /**
250
302
  * @param {Object} check
251
303
  * @returns {Boolean}
252
304
  */
253
- SelfUtils.isLocusUserUnadmitted = (check: any) => check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;
305
+ SelfUtils.isLocusUserUnadmitted = (check: any) =>
306
+ check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;
254
307
 
255
308
  /**
256
309
  * @param {Object} check
257
310
  * @returns {Boolean}
258
311
  */
259
- SelfUtils.isLocusUserAdmitted = (check: any) => check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;
312
+ SelfUtils.isLocusUserAdmitted = (check: any) =>
313
+ check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;
260
314
 
261
315
  /**
262
316
  * @param {Object} self
@@ -276,20 +330,39 @@ SelfUtils.moderatorChanged = (oldSelf, changedSelf) => {
276
330
  return true;
277
331
  }
278
332
  if (!changedSelf) {
279
- throw new ParameterError('New self must be defined to determine if self transitioned moderator status.');
333
+ throw new ParameterError(
334
+ 'New self must be defined to determine if self transitioned moderator status.'
335
+ );
280
336
  }
281
337
 
282
338
  return oldSelf.moderator !== changedSelf.moderator;
283
339
  };
284
340
 
341
+ /**
342
+ * determine whether the roles of self is changed or not
343
+ * @param {Object} oldSelf
344
+ * @param {Object} changedSelf
345
+ * @returns {Boolean}
346
+ */
347
+ SelfUtils.isRolesChanged = (oldSelf, changedSelf) => {
348
+ if (!changedSelf) {
349
+ // no new self means no change
350
+ return false;
351
+ }
285
352
 
353
+ return !isEqual(oldSelf?.roles, changedSelf?.roles);
354
+ };
286
355
  /**
287
356
  * @param {Object} oldSelf
288
357
  * @param {Object} changedSelf
289
358
  * @returns {Boolean}
290
359
  * @throws {Error} if changed self was undefined
291
360
  */
292
- SelfUtils.isDeviceObserving = (oldSelf: any, changedSelf: any) => oldSelf && oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ && changedSelf && changedSelf.joinedWith?.intent?.type === _OBSERVE_;
361
+ SelfUtils.isDeviceObserving = (oldSelf: any, changedSelf: any) =>
362
+ oldSelf &&
363
+ oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&
364
+ changedSelf &&
365
+ changedSelf.joinedWith?.intent?.type === _OBSERVE_;
293
366
 
294
367
  /**
295
368
  * @param {Object} oldSelf
@@ -303,18 +376,39 @@ SelfUtils.isUserAdmitted = (oldSelf: object, changedSelf: object) => {
303
376
  return false;
304
377
  }
305
378
  if (!changedSelf) {
306
- throw new ParameterError('New self must be defined to determine if self transitioned to admitted as guest.');
379
+ throw new ParameterError(
380
+ 'New self must be defined to determine if self transitioned to admitted as guest.'
381
+ );
307
382
  }
308
383
 
309
384
  return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
310
385
  };
311
386
 
387
+ SelfUtils.videoMutedByOthersChanged = (oldSelf, changedSelf) => {
388
+ if (!changedSelf) {
389
+ throw new ParameterError(
390
+ 'New self must be defined to determine if self was video muted by others.'
391
+ );
392
+ }
393
+
394
+ if (!oldSelf || oldSelf.remoteVideoMuted === null) {
395
+ if (changedSelf.remoteVideoMuted) {
396
+ return true; // this happens when host disables "Allow start video"
397
+ }
398
+
399
+ // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join
400
+ return false;
401
+ }
402
+
403
+ return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;
404
+ };
405
+
312
406
  SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
313
407
  if (!changedSelf) {
314
408
  throw new ParameterError('New self must be defined to determine if self was muted by others.');
315
409
  }
316
410
 
317
- if (!oldSelf || (oldSelf.remoteMuted === null)) {
411
+ if (!oldSelf || oldSelf.remoteMuted === null) {
318
412
  if (changedSelf.remoteMuted) {
319
413
  return true; // this happens when mute on-entry is enabled
320
414
  }
@@ -323,25 +417,35 @@ SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
323
417
  return false;
324
418
  }
325
419
 
326
- return (changedSelf.remoteMuted !== null) &&
327
- ((oldSelf.remoteMuted !== changedSelf.remoteMuted) || (changedSelf.remoteMuted && (oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed)));
420
+ return (
421
+ changedSelf.remoteMuted !== null &&
422
+ (oldSelf.remoteMuted !== changedSelf.remoteMuted ||
423
+ (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))
424
+ );
328
425
  };
329
426
 
330
427
  SelfUtils.localAudioUnmuteRequestedByServer = (oldSelf: any = {}, changedSelf: any) => {
331
428
  if (!changedSelf) {
332
- throw new ParameterError('New self must be defined to determine if self received request to unmute.');
429
+ throw new ParameterError(
430
+ 'New self must be defined to determine if self received request to unmute.'
431
+ );
333
432
  }
334
433
 
335
434
  return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;
336
435
  };
337
436
 
338
-
339
437
  SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf: any = {}, changedSelf: any) => {
340
438
  if (!changedSelf) {
341
- throw new ParameterError('New self must be defined to determine if localAudioUnmuteRequired changed.');
439
+ throw new ParameterError(
440
+ 'New self must be defined to determine if localAudioUnmuteRequired changed.'
441
+ );
342
442
  }
343
443
 
344
- return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && (oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired);
444
+ return (
445
+ !changedSelf.remoteMuted &&
446
+ changedSelf.localAudioUnmuteRequired &&
447
+ oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired
448
+ );
345
449
  };
346
450
 
347
451
  /**
@@ -364,15 +468,30 @@ SelfUtils.getMediaStatus = (mediaSessions = []) => {
364
468
  const mediaStatus = {
365
469
  audio: {},
366
470
  video: {},
367
- share: {}
471
+ share: {},
368
472
  };
369
473
 
370
- mediaStatus.audio = mediaSessions.find((media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main);
371
- mediaStatus.video = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main);
372
- mediaStatus.share = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides);
474
+ mediaStatus.audio = mediaSessions.find(
475
+ (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main
476
+ );
477
+ mediaStatus.video = mediaSessions.find(
478
+ (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main
479
+ );
480
+ mediaStatus.share = mediaSessions.find(
481
+ (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides
482
+ );
373
483
 
374
484
  return mediaStatus;
375
485
  };
376
486
 
487
+ SelfUtils.getReplacedBreakoutMoveId = (self: any, deviceId: string) => {
488
+ if (self && Array.isArray(self.devices)) {
489
+ const joinedDevice = self.devices.find((device) => deviceId === device.url);
490
+ if (Array.isArray(joinedDevice?.replaces)) {
491
+ return joinedDevice.replaces[0]?.breakoutMoveId;
492
+ }
493
+ }
377
494
 
495
+ return null;
496
+ };
378
497
  export default SelfUtils;