@webex/plugin-meetings 3.0.0-beta.11 → 3.0.0-beta.111

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