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

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