@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.131

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 +994 -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 +203 -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 +294 -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 +406 -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 +88 -123
  101. package/dist/locus-info/parser.js.map +1 -1
  102. package/dist/locus-info/selfUtils.js +105 -91
  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 +2603 -2462
  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 +315 -336
  121. package/dist/meeting/request.js.map +1 -1
  122. package/dist/meeting/request.type.js +7 -0
  123. package/dist/meeting/request.type.js.map +1 -0
  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 +167 -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 +6 -40
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +466 -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 -461
  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 +993 -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 +101 -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 +47 -0
  310. package/dist/types/multistream/remoteMediaManager.d.ts +263 -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 +860 -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 +21 -10
  362. package/src/common/logs/request.ts +11 -8
  363. package/src/config.ts +16 -12
  364. package/src/constants.ts +153 -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 +281 -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 +346 -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 +46 -68
  378. package/src/locus-info/selfUtils.ts +195 -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 +2803 -1584
  385. package/src/meeting/locusMediaRequest.ts +309 -0
  386. package/src/meeting/muteState.ts +290 -72
  387. package/src/meeting/request.ts +247 -178
  388. package/src/meeting/request.type.ts +13 -0
  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 +772 -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 +203 -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 +4 -3
  417. package/src/multistream/remoteMediaManager.ts +230 -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 -111
  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 -64
  433. package/src/roap/turnDiscovery.ts +101 -48
  434. package/src/statsAnalyzer/global.ts +8 -104
  435. package/src/statsAnalyzer/index.ts +624 -376
  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 +1609 -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 +504 -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 +636 -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 +252 -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 +3112 -921
  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 +421 -79
  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 +650 -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 +5 -5
  490. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -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,8 @@ import {
10
13
  MEDIA_STATE,
11
14
  AUDIO,
12
15
  VIDEO,
13
- MediaContent
16
+ MediaContent,
17
+ SELF_ROLES,
14
18
  } from '../constants';
15
19
  import ParameterError from '../common/errors/parameter';
16
20
 
@@ -29,6 +33,7 @@ SelfUtils.parse = (self: any, deviceId: string) => {
29
33
  const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);
30
34
 
31
35
  return {
36
+ remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),
32
37
  remoteMuted: SelfUtils.getRemoteMuted(self),
33
38
  unmuteAllowed: SelfUtils.getUnmuteAllowed(self),
34
39
  localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),
@@ -47,9 +52,7 @@ SelfUtils.parse = (self: any, deviceId: string) => {
47
52
  joinedWith,
48
53
  pstnDevices,
49
54
  // current media stats is for the current device who has joined
50
- currentMediaStatus: SelfUtils.getMediaStatus(
51
- joinedWith?.mediaSessions
52
- ),
55
+ currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),
53
56
  creator: self.isCreator, // check if its used,
54
57
  selfId: self.id,
55
58
  selfIdentity: SelfUtils.getSelfIdentity(self),
@@ -59,22 +62,29 @@ SelfUtils.parse = (self: any, deviceId: string) => {
59
62
  isUserUnadmitted: self.state === _IDLE_ && joinedWith?.intent?.type === _WAIT_,
60
63
  layout: SelfUtils.getLayout(self),
61
64
  canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),
62
- isSharingBlocked: SelfUtils.isSharingBlocked(self)
65
+ isSharingBlocked: SelfUtils.isSharingBlocked(self),
66
+ breakoutSessions: SelfUtils.getBreakoutSessions(self),
67
+ breakout: SelfUtils.getBreakout(self),
63
68
  };
64
69
  }
65
70
 
66
71
  return null;
67
72
  };
68
73
 
69
- SelfUtils.getLayout = (self) => (Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined);
74
+ SelfUtils.getBreakoutSessions = (self) => self?.controls?.breakout?.sessions;
75
+ SelfUtils.getBreakout = (self) => self?.controls?.breakout;
70
76
 
71
- SelfUtils.getRoles = (self) => (self?.controls?.role?.roles || []).reduce((roles, role) => {
72
- if (role.hasRole) {
73
- roles.push(role.type);
74
- }
77
+ SelfUtils.getLayout = (self) =>
78
+ Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined;
79
+
80
+ SelfUtils.getRoles = (self) =>
81
+ (self?.controls?.role?.roles || []).reduce((roles, role) => {
82
+ if (role.hasRole) {
83
+ roles.push(role.type);
84
+ }
75
85
 
76
- return roles;
77
- }, []);
86
+ return roles;
87
+ }, []);
78
88
 
79
89
  SelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;
80
90
 
@@ -87,26 +97,40 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
87
97
 
88
98
  updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);
89
99
  updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
100
+ updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);
90
101
  updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
91
- updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);
92
- updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);
102
+ updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(
103
+ previous,
104
+ current
105
+ );
106
+ updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(
107
+ previous,
108
+ current
109
+ );
93
110
  updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);
111
+ updates.isRolesChanged = SelfUtils.isRolesChanged(previous, current);
112
+ updates.isUpgradeToModeratorOrCohost = SelfUtils.isUpgradeToModeratorOrCohost(previous, current);
94
113
  updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);
95
114
  updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);
96
115
  updates.layoutChanged = SelfUtils.layoutChanged(previous, current);
97
116
 
98
117
  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;
118
+ updates.audioStateChange =
119
+ previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;
120
+ updates.videoStateChange =
121
+ previous?.currentMediaStatus.video !== current.currentMediaStatus.video;
122
+ updates.shareStateChange =
123
+ previous?.currentMediaStatus.share !== current.currentMediaStatus.share;
124
+
125
+ updates.canNotViewTheParticipantListChanged =
126
+ previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;
104
127
  updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;
128
+ updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);
105
129
 
106
130
  return {
107
131
  previous,
108
132
  current,
109
- updates
133
+ updates,
110
134
  };
111
135
  };
112
136
 
@@ -114,7 +138,7 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
114
138
  * Checks if user has joined the meeting
115
139
  * @param {Object} self
116
140
  * @returns {boolean} isJoined
117
- */
141
+ */
118
142
  SelfUtils.isJoined = (self: any) => self?.state === _JOINED_;
119
143
 
120
144
  /**
@@ -122,9 +146,13 @@ SelfUtils.isJoined = (self: any) => self?.state === _JOINED_;
122
146
  *
123
147
  * @param {Self} previous - Previous self state
124
148
  * @param {Self} current - Current self state [per event]
125
- * @returns {boolean} - If the MEeting Layout Controls Layout has changed.
149
+ * @returns {boolean} - If the Meeting Layout Controls Layout has changed.
126
150
  */
127
- SelfUtils.layoutChanged = (previous: any, current: any) => current?.layout && previous?.layout !== current?.layout;
151
+ SelfUtils.layoutChanged = (previous: any, current: any) =>
152
+ current?.layout && previous?.layout !== current?.layout;
153
+
154
+ SelfUtils.breakoutsChanged = (previous, current) =>
155
+ !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout;
128
156
 
129
157
  SelfUtils.isMediaInactive = (previous, current) => {
130
158
  if (
@@ -135,15 +163,12 @@ SelfUtils.isMediaInactive = (previous, current) => {
135
163
  current.joinedWith &&
136
164
  current.joinedWith.mediaSessions
137
165
  ) {
138
- const previousMediaStatus = SelfUtils.getMediaStatus(
139
- previous.joinedWith.mediaSessions
140
- );
141
- const currentMediaStatus = SelfUtils.getMediaStatus(
142
- current.joinedWith.mediaSessions
143
- );
166
+ const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);
167
+ const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);
144
168
 
145
169
  if (
146
- previousMediaStatus.audio && currentMediaStatus.audio &&
170
+ previousMediaStatus.audio &&
171
+ currentMediaStatus.audio &&
147
172
  previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&
148
173
  currentMediaStatus.audio.state === MEDIA_STATE.inactive &&
149
174
  currentMediaStatus.audio.direction !== MEDIA_STATE.inactive
@@ -152,7 +177,8 @@ SelfUtils.isMediaInactive = (previous, current) => {
152
177
  }
153
178
 
154
179
  if (
155
- previousMediaStatus.video && currentMediaStatus.video &&
180
+ previousMediaStatus.video &&
181
+ currentMediaStatus.video &&
156
182
  previousMediaStatus.video.state !== MEDIA_STATE.inactive &&
157
183
  currentMediaStatus.video.state === MEDIA_STATE.inactive &&
158
184
  currentMediaStatus.video.direction !== MEDIA_STATE.inactive
@@ -161,7 +187,8 @@ SelfUtils.isMediaInactive = (previous, current) => {
161
187
  }
162
188
 
163
189
  if (
164
- previousMediaStatus.share && currentMediaStatus.share &&
190
+ previousMediaStatus.share &&
191
+ currentMediaStatus.share &&
165
192
  previousMediaStatus.share.state !== MEDIA_STATE.inactive &&
166
193
  currentMediaStatus.share.state === MEDIA_STATE.inactive &&
167
194
  currentMediaStatus.share.direction !== MEDIA_STATE.inactive
@@ -176,7 +203,13 @@ SelfUtils.isMediaInactive = (previous, current) => {
176
203
  };
177
204
 
178
205
  SelfUtils.getLastModified = (self) => {
179
- if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.lastModified) {
206
+ if (
207
+ !self ||
208
+ !self.controls ||
209
+ !self.controls.audio ||
210
+ !self.controls.audio.meta ||
211
+ !self.controls.audio.meta.lastModified
212
+ ) {
180
213
  return null;
181
214
  }
182
215
 
@@ -184,7 +217,13 @@ SelfUtils.getLastModified = (self) => {
184
217
  };
185
218
 
186
219
  SelfUtils.getModifiedBy = (self) => {
187
- if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.modifiedBy) {
220
+ if (
221
+ !self ||
222
+ !self.controls ||
223
+ !self.controls.audio ||
224
+ !self.controls.audio.meta ||
225
+ !self.controls.audio.meta.modifiedBy
226
+ ) {
188
227
  return null;
189
228
  }
190
229
 
@@ -204,6 +243,19 @@ SelfUtils.getSelfIdentity = (self: any) => {
204
243
  return self.person.id;
205
244
  };
206
245
 
246
+ /**
247
+ * get the "remote video mute" property from the self object
248
+ * @param {Object} self
249
+ * @returns {Boolean}
250
+ */
251
+ SelfUtils.getRemoteVideoMuted = (self: any) => {
252
+ if (!self || !self.controls || !self.controls.video) {
253
+ return null;
254
+ }
255
+
256
+ return self.controls.video.muted;
257
+ };
258
+
207
259
  /**
208
260
  * get the "remote mute" property from the self object
209
261
  * @param {Object} self
@@ -227,36 +279,40 @@ SelfUtils.getUnmuteAllowed = (self) => {
227
279
  return !self.controls.audio.disallowUnmute;
228
280
  };
229
281
 
230
-
231
282
  SelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;
232
283
 
233
284
  SelfUtils.getStatus = (status) => ({
234
285
  audio: status.audioStatus,
235
286
  video: status.videoStatus,
236
- slides: status.videoSlidesStatus
287
+ slides: status.videoSlidesStatus,
237
288
  });
238
289
 
239
-
240
290
  /**
241
291
  * @param {Object} oldSelf
242
292
  * @param {Object} changedSelf
243
293
  * @returns {Boolean}
244
294
  */
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
-
295
+ SelfUtils.wasMediaInactiveOrReleased = (oldSelf: any = {}, changedSelf: any) =>
296
+ oldSelf.joinedWith &&
297
+ oldSelf.joinedWith.state === _JOINED_ &&
298
+ changedSelf.joinedWith &&
299
+ changedSelf.joinedWith.state === _LEFT_ &&
300
+ (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||
301
+ changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);
248
302
 
249
303
  /**
250
304
  * @param {Object} check
251
305
  * @returns {Boolean}
252
306
  */
253
- SelfUtils.isLocusUserUnadmitted = (check: any) => check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;
307
+ SelfUtils.isLocusUserUnadmitted = (check: any) =>
308
+ check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;
254
309
 
255
310
  /**
256
311
  * @param {Object} check
257
312
  * @returns {Boolean}
258
313
  */
259
- SelfUtils.isLocusUserAdmitted = (check: any) => check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;
314
+ SelfUtils.isLocusUserAdmitted = (check: any) =>
315
+ check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;
260
316
 
261
317
  /**
262
318
  * @param {Object} self
@@ -276,12 +332,45 @@ SelfUtils.moderatorChanged = (oldSelf, changedSelf) => {
276
332
  return true;
277
333
  }
278
334
  if (!changedSelf) {
279
- throw new ParameterError('New self must be defined to determine if self transitioned moderator status.');
335
+ throw new ParameterError(
336
+ 'New self must be defined to determine if self transitioned moderator status.'
337
+ );
280
338
  }
281
339
 
282
340
  return oldSelf.moderator !== changedSelf.moderator;
283
341
  };
284
342
 
343
+ SelfUtils.isRolesChanged = (oldSelf, changedSelf) => {
344
+ if (!oldSelf || !changedSelf) {
345
+ return false;
346
+ }
347
+
348
+ return !isEqual(oldSelf.roles, changedSelf.roles);
349
+ };
350
+ /**
351
+ * @param {Object} oldSelf
352
+ * @param {Object} changedSelf
353
+ * @returns {Boolean}
354
+ * @throws {Error} if changed self was undefined
355
+ */
356
+ SelfUtils.isUpgradeToModeratorOrCohost = (oldSelf, changedSelf) => {
357
+ if (!oldSelf) {
358
+ return false;
359
+ }
360
+ if (!changedSelf) {
361
+ throw new ParameterError(
362
+ 'New self must be defined to determine if self transitioned moderator or cohost status.'
363
+ );
364
+ }
365
+ const isAttendeeOnly =
366
+ oldSelf.roles.includes(SELF_ROLES.ATTENDEE) &&
367
+ !oldSelf.roles.includes(SELF_ROLES.COHOST) &&
368
+ !oldSelf.roles.includes(SELF_ROLES.MODERATOR);
369
+ const isCohost = changedSelf.roles.includes(SELF_ROLES.COHOST);
370
+ const isModerator = changedSelf.roles.includes(SELF_ROLES.MODERATOR);
371
+
372
+ return isAttendeeOnly && (isCohost || isModerator);
373
+ };
285
374
 
286
375
  /**
287
376
  * @param {Object} oldSelf
@@ -289,7 +378,11 @@ SelfUtils.moderatorChanged = (oldSelf, changedSelf) => {
289
378
  * @returns {Boolean}
290
379
  * @throws {Error} if changed self was undefined
291
380
  */
292
- SelfUtils.isDeviceObserving = (oldSelf: any, changedSelf: any) => oldSelf && oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ && changedSelf && changedSelf.joinedWith?.intent?.type === _OBSERVE_;
381
+ SelfUtils.isDeviceObserving = (oldSelf: any, changedSelf: any) =>
382
+ oldSelf &&
383
+ oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&
384
+ changedSelf &&
385
+ changedSelf.joinedWith?.intent?.type === _OBSERVE_;
293
386
 
294
387
  /**
295
388
  * @param {Object} oldSelf
@@ -303,18 +396,39 @@ SelfUtils.isUserAdmitted = (oldSelf: object, changedSelf: object) => {
303
396
  return false;
304
397
  }
305
398
  if (!changedSelf) {
306
- throw new ParameterError('New self must be defined to determine if self transitioned to admitted as guest.');
399
+ throw new ParameterError(
400
+ 'New self must be defined to determine if self transitioned to admitted as guest.'
401
+ );
307
402
  }
308
403
 
309
404
  return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
310
405
  };
311
406
 
407
+ SelfUtils.videoMutedByOthersChanged = (oldSelf, changedSelf) => {
408
+ if (!changedSelf) {
409
+ throw new ParameterError(
410
+ 'New self must be defined to determine if self was video muted by others.'
411
+ );
412
+ }
413
+
414
+ if (!oldSelf || oldSelf.remoteVideoMuted === null) {
415
+ if (changedSelf.remoteVideoMuted) {
416
+ return true; // this happens when host disables "Allow start video"
417
+ }
418
+
419
+ // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join
420
+ return false;
421
+ }
422
+
423
+ return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;
424
+ };
425
+
312
426
  SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
313
427
  if (!changedSelf) {
314
428
  throw new ParameterError('New self must be defined to determine if self was muted by others.');
315
429
  }
316
430
 
317
- if (!oldSelf || (oldSelf.remoteMuted === null)) {
431
+ if (!oldSelf || oldSelf.remoteMuted === null) {
318
432
  if (changedSelf.remoteMuted) {
319
433
  return true; // this happens when mute on-entry is enabled
320
434
  }
@@ -323,25 +437,35 @@ SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
323
437
  return false;
324
438
  }
325
439
 
326
- return (changedSelf.remoteMuted !== null) &&
327
- ((oldSelf.remoteMuted !== changedSelf.remoteMuted) || (changedSelf.remoteMuted && (oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed)));
440
+ return (
441
+ changedSelf.remoteMuted !== null &&
442
+ (oldSelf.remoteMuted !== changedSelf.remoteMuted ||
443
+ (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))
444
+ );
328
445
  };
329
446
 
330
447
  SelfUtils.localAudioUnmuteRequestedByServer = (oldSelf: any = {}, changedSelf: any) => {
331
448
  if (!changedSelf) {
332
- throw new ParameterError('New self must be defined to determine if self received request to unmute.');
449
+ throw new ParameterError(
450
+ 'New self must be defined to determine if self received request to unmute.'
451
+ );
333
452
  }
334
453
 
335
454
  return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;
336
455
  };
337
456
 
338
-
339
457
  SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf: any = {}, changedSelf: any) => {
340
458
  if (!changedSelf) {
341
- throw new ParameterError('New self must be defined to determine if localAudioUnmuteRequired changed.');
459
+ throw new ParameterError(
460
+ 'New self must be defined to determine if localAudioUnmuteRequired changed.'
461
+ );
342
462
  }
343
463
 
344
- return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && (oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired);
464
+ return (
465
+ !changedSelf.remoteMuted &&
466
+ changedSelf.localAudioUnmuteRequired &&
467
+ oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired
468
+ );
345
469
  };
346
470
 
347
471
  /**
@@ -364,15 +488,30 @@ SelfUtils.getMediaStatus = (mediaSessions = []) => {
364
488
  const mediaStatus = {
365
489
  audio: {},
366
490
  video: {},
367
- share: {}
491
+ share: {},
368
492
  };
369
493
 
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);
494
+ mediaStatus.audio = mediaSessions.find(
495
+ (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main
496
+ );
497
+ mediaStatus.video = mediaSessions.find(
498
+ (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main
499
+ );
500
+ mediaStatus.share = mediaSessions.find(
501
+ (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides
502
+ );
373
503
 
374
504
  return mediaStatus;
375
505
  };
376
506
 
507
+ SelfUtils.getReplacedBreakoutMoveId = (self: any, deviceId: string) => {
508
+ if (self && Array.isArray(self.devices)) {
509
+ const joinedDevice = self.devices.find((device) => deviceId === device.url);
510
+ if (Array.isArray(joinedDevice?.replaces)) {
511
+ return joinedDevice.replaces[0]?.breakoutMoveId;
512
+ }
513
+ }
377
514
 
515
+ return null;
516
+ };
378
517
  export default SelfUtils;