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

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 (503) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +178 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/edit-lock-error.js +52 -0
  8. package/dist/breakouts/edit-lock-error.js.map +1 -0
  9. package/dist/breakouts/index.js +843 -0
  10. package/dist/breakouts/index.js.map +1 -0
  11. package/dist/breakouts/request.js +78 -0
  12. package/dist/breakouts/request.js.map +1 -0
  13. package/dist/breakouts/utils.js +56 -0
  14. package/dist/breakouts/utils.js.map +1 -0
  15. package/dist/common/browser-detection.js +1 -20
  16. package/dist/common/browser-detection.js.map +1 -1
  17. package/dist/common/collection.js +5 -20
  18. package/dist/common/collection.js.map +1 -1
  19. package/dist/common/config.js +0 -7
  20. package/dist/common/config.js.map +1 -1
  21. package/dist/common/errors/captcha-error.js +10 -24
  22. package/dist/common/errors/captcha-error.js.map +1 -1
  23. package/dist/common/errors/intent-to-join.js +11 -24
  24. package/dist/common/errors/intent-to-join.js.map +1 -1
  25. package/dist/common/errors/join-meeting.js +12 -25
  26. package/dist/common/errors/join-meeting.js.map +1 -1
  27. package/dist/common/errors/media.js +10 -24
  28. package/dist/common/errors/media.js.map +1 -1
  29. package/dist/common/errors/parameter.js +5 -33
  30. package/dist/common/errors/parameter.js.map +1 -1
  31. package/dist/common/errors/password-error.js +10 -24
  32. package/dist/common/errors/password-error.js.map +1 -1
  33. package/dist/common/errors/permission.js +9 -23
  34. package/dist/common/errors/permission.js.map +1 -1
  35. package/dist/common/errors/reconnection-in-progress.js +0 -17
  36. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  37. package/dist/common/errors/reconnection.js +10 -24
  38. package/dist/common/errors/reconnection.js.map +1 -1
  39. package/dist/common/errors/stats.js +10 -24
  40. package/dist/common/errors/stats.js.map +1 -1
  41. package/dist/common/errors/webex-errors.js +6 -41
  42. package/dist/common/errors/webex-errors.js.map +1 -1
  43. package/dist/common/errors/webex-meetings-error.js +5 -25
  44. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  45. package/dist/common/events/events-scope.js +0 -22
  46. package/dist/common/events/events-scope.js.map +1 -1
  47. package/dist/common/events/events.js +0 -23
  48. package/dist/common/events/events.js.map +1 -1
  49. package/dist/common/events/trigger-proxy.js +0 -12
  50. package/dist/common/events/trigger-proxy.js.map +1 -1
  51. package/dist/common/events/util.js +0 -15
  52. package/dist/common/events/util.js.map +1 -1
  53. package/dist/common/logs/logger-config.js +0 -4
  54. package/dist/common/logs/logger-config.js.map +1 -1
  55. package/dist/common/logs/logger-proxy.js +1 -8
  56. package/dist/common/logs/logger-proxy.js.map +1 -1
  57. package/dist/common/logs/request.js +37 -60
  58. package/dist/common/logs/request.js.map +1 -1
  59. package/dist/common/queue.js +4 -14
  60. package/dist/common/queue.js.map +1 -1
  61. package/dist/config.js +7 -6
  62. package/dist/config.js.map +1 -1
  63. package/dist/constants.js +154 -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 +242 -201
  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 +87 -91
  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 +35 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2264 -2242
  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 +69 -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 +268 -279
  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 +154 -232
  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 +566 -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 +175 -204
  144. package/dist/members/index.js.map +1 -1
  145. package/dist/members/request.js +54 -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 +107 -44
  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 +3 -7
  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 +167 -50
  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 +74 -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 +340 -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 +385 -459
  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 +78 -0
  239. package/dist/types/constants.d.ts +952 -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 +277 -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 +105 -0
  259. package/dist/types/meeting/index.d.ts +1721 -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 +111 -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 +353 -0
  280. package/dist/types/members/request.d.ts +69 -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 +54 -0
  285. package/dist/types/metrics/index.d.ts +152 -0
  286. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  287. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  288. package/dist/types/multistream/receiveSlotManager.d.ts +56 -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 +200 -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 -20
  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} +18 -12
  344. package/src/constants.ts +101 -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} +218 -73
  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} +187 -68
  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 +75 -3
  364. package/src/meeting/{index.js → index.ts} +2658 -1598
  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} +136 -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 +342 -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} +74 -61
  376. package/src/meetings/{collection.js → collection.ts} +26 -3
  377. package/src/meetings/index.ts +1280 -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} +316 -144
  385. package/src/members/request.ts +215 -0
  386. package/src/members/types.ts +28 -0
  387. package/src/members/{util.js → util.ts} +145 -54
  388. package/src/metrics/{config.js → config.ts} +255 -92
  389. package/src/metrics/{constants.js → constants.ts} +1 -6
  390. package/src/metrics/{index.js → index.ts} +110 -94
  391. package/src/multistream/mediaRequestManager.ts +201 -43
  392. package/src/multistream/receiveSlot.ts +69 -26
  393. package/src/multistream/receiveSlotManager.ts +62 -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} +231 -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 +1273 -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 +333 -3
  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 +191 -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 +34 -3
  443. package/test/unit/spec/meeting/index.js +2547 -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 +166 -163
  447. package/test/unit/spec/meeting-info/meetinginfov2.js +241 -74
  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 +682 -262
  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 +402 -54
  457. package/test/unit/spec/members/request.js +76 -20
  458. package/test/unit/spec/members/utils.js +191 -4
  459. package/test/unit/spec/metrics/index.js +16 -21
  460. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  461. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  462. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  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 +62 -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 +116 -60
  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/src/common/logs/logger-proxy.js +0 -33
  490. package/src/locus-info/controlsUtils.js +0 -102
  491. package/src/media/internal-media-core-wrapper.ts +0 -9
  492. package/src/mediaQualityMetrics/config.js +0 -382
  493. package/src/meeting/effectsState.js +0 -205
  494. package/src/meeting-info/meeting-info-v2.js +0 -255
  495. package/src/meetings/index.js +0 -1015
  496. package/src/members/request.js +0 -131
  497. package/src/multistream/multistreamMedia.ts +0 -92
  498. package/src/roap/request.js +0 -127
  499. package/src/statsAnalyzer/global.js +0 -133
  500. package/src/statsAnalyzer/index.js +0 -1006
  501. package/src/statsAnalyzer/mqaUtil.js +0 -173
  502. package/test/unit/spec/meeting/effectsState.js +0 -291
  503. /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,29 @@ 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.getBreakoutSessions(self),
67
+ breakout: SelfUtils.getBreakout(self),
64
68
  };
65
69
  }
66
70
 
67
71
  return null;
68
72
  };
69
73
 
70
- 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;
71
76
 
72
- SelfUtils.getRoles = (self) => (self?.controls?.role?.roles || []).reduce((roles, role) => {
73
- if (role.hasRole) {
74
- roles.push(role.type);
75
- }
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
+ }
76
85
 
77
- return roles;
78
- }, []);
86
+ return roles;
87
+ }, []);
79
88
 
80
89
  SelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;
81
90
 
@@ -84,30 +93,43 @@ SelfUtils.isSharingBlocked = (self) => !!self?.isSharingBlocked;
84
93
  SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
85
94
  const previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);
86
95
  const current = newSelf && SelfUtils.parse(newSelf, deviceId);
87
- const updates = {};
96
+ const updates: any = {};
88
97
 
89
98
  updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);
90
99
  updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
100
+ updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);
91
101
  updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
92
- updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);
93
- 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
+ );
94
110
  updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);
111
+ updates.isUpgradeToModeratorOrCohost = SelfUtils.isUpgradeToModeratorOrCohost(previous, current);
95
112
  updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);
96
113
  updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);
97
114
  updates.layoutChanged = SelfUtils.layoutChanged(previous, current);
98
115
 
99
116
  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;
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;
105
126
  updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;
127
+ updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);
106
128
 
107
129
  return {
108
130
  previous,
109
131
  current,
110
- updates
132
+ updates,
111
133
  };
112
134
  };
113
135
 
@@ -115,18 +137,21 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
115
137
  * Checks if user has joined the meeting
116
138
  * @param {Object} self
117
139
  * @returns {boolean} isJoined
118
- */
119
- SelfUtils.isJoined = (self) => self?.state === _JOINED_;
140
+ */
141
+ SelfUtils.isJoined = (self: any) => self?.state === _JOINED_;
120
142
 
121
143
  /**
122
144
  * Validate if the Meeting Layout Controls Layout has changed.
123
145
  *
124
146
  * @param {Self} previous - Previous self state
125
147
  * @param {Self} current - Current self state [per event]
126
- * @returns {boolean} - If the MEeting Layout Controls Layout has changed.
148
+ * @returns {boolean} - If the Meeting Layout Controls Layout has changed.
127
149
  */
128
- SelfUtils.layoutChanged = (previous, current) => current?.layout && previous?.layout !== current?.layout;
150
+ SelfUtils.layoutChanged = (previous: any, current: any) =>
151
+ current?.layout && previous?.layout !== current?.layout;
129
152
 
153
+ SelfUtils.breakoutsChanged = (previous, current) =>
154
+ !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout;
130
155
 
131
156
  SelfUtils.isMediaInactive = (previous, current) => {
132
157
  if (
@@ -137,15 +162,12 @@ SelfUtils.isMediaInactive = (previous, current) => {
137
162
  current.joinedWith &&
138
163
  current.joinedWith.mediaSessions
139
164
  ) {
140
- const previousMediaStatus = SelfUtils.getMediaStatus(
141
- previous.joinedWith.mediaSessions
142
- );
143
- const currentMediaStatus = SelfUtils.getMediaStatus(
144
- current.joinedWith.mediaSessions
145
- );
165
+ const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);
166
+ const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);
146
167
 
147
168
  if (
148
- previousMediaStatus.audio && currentMediaStatus.audio &&
169
+ previousMediaStatus.audio &&
170
+ currentMediaStatus.audio &&
149
171
  previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&
150
172
  currentMediaStatus.audio.state === MEDIA_STATE.inactive &&
151
173
  currentMediaStatus.audio.direction !== MEDIA_STATE.inactive
@@ -154,7 +176,8 @@ SelfUtils.isMediaInactive = (previous, current) => {
154
176
  }
155
177
 
156
178
  if (
157
- previousMediaStatus.video && currentMediaStatus.video &&
179
+ previousMediaStatus.video &&
180
+ currentMediaStatus.video &&
158
181
  previousMediaStatus.video.state !== MEDIA_STATE.inactive &&
159
182
  currentMediaStatus.video.state === MEDIA_STATE.inactive &&
160
183
  currentMediaStatus.video.direction !== MEDIA_STATE.inactive
@@ -163,7 +186,8 @@ SelfUtils.isMediaInactive = (previous, current) => {
163
186
  }
164
187
 
165
188
  if (
166
- previousMediaStatus.share && currentMediaStatus.share &&
189
+ previousMediaStatus.share &&
190
+ currentMediaStatus.share &&
167
191
  previousMediaStatus.share.state !== MEDIA_STATE.inactive &&
168
192
  currentMediaStatus.share.state === MEDIA_STATE.inactive &&
169
193
  currentMediaStatus.share.direction !== MEDIA_STATE.inactive
@@ -178,7 +202,13 @@ SelfUtils.isMediaInactive = (previous, current) => {
178
202
  };
179
203
 
180
204
  SelfUtils.getLastModified = (self) => {
181
- 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
+ ) {
182
212
  return null;
183
213
  }
184
214
 
@@ -186,7 +216,13 @@ SelfUtils.getLastModified = (self) => {
186
216
  };
187
217
 
188
218
  SelfUtils.getModifiedBy = (self) => {
189
- 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
+ ) {
190
226
  return null;
191
227
  }
192
228
 
@@ -198,7 +234,7 @@ SelfUtils.getModifiedBy = (self) => {
198
234
  * @param {Object} self
199
235
  * @returns {String}
200
236
  */
201
- SelfUtils.getSelfIdentity = (self) => {
237
+ SelfUtils.getSelfIdentity = (self: any) => {
202
238
  if (!self && !self.person) {
203
239
  return null;
204
240
  }
@@ -206,12 +242,25 @@ SelfUtils.getSelfIdentity = (self) => {
206
242
  return self.person.id;
207
243
  };
208
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
+
209
258
  /**
210
259
  * get the "remote mute" property from the self object
211
260
  * @param {Object} self
212
261
  * @returns {Boolean}
213
262
  */
214
- SelfUtils.getRemoteMuted = (self) => {
263
+ SelfUtils.getRemoteMuted = (self: any) => {
215
264
  if (!self || !self.controls || !self.controls.audio) {
216
265
  return null;
217
266
  }
@@ -229,43 +278,47 @@ SelfUtils.getUnmuteAllowed = (self) => {
229
278
  return !self.controls.audio.disallowUnmute;
230
279
  };
231
280
 
232
-
233
281
  SelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;
234
282
 
235
283
  SelfUtils.getStatus = (status) => ({
236
284
  audio: status.audioStatus,
237
285
  video: status.videoStatus,
238
- slides: status.videoSlidesStatus
286
+ slides: status.videoSlidesStatus,
239
287
  });
240
288
 
241
-
242
289
  /**
243
290
  * @param {Object} oldSelf
244
291
  * @param {Object} changedSelf
245
292
  * @returns {Boolean}
246
293
  */
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
-
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);
250
301
 
251
302
  /**
252
303
  * @param {Object} check
253
304
  * @returns {Boolean}
254
305
  */
255
- SelfUtils.isLocusUserUnadmitted = (check) => check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;
306
+ SelfUtils.isLocusUserUnadmitted = (check: any) =>
307
+ check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;
256
308
 
257
309
  /**
258
310
  * @param {Object} check
259
311
  * @returns {Boolean}
260
312
  */
261
- SelfUtils.isLocusUserAdmitted = (check) => check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;
313
+ SelfUtils.isLocusUserAdmitted = (check: any) =>
314
+ check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;
262
315
 
263
316
  /**
264
317
  * @param {Object} self
265
318
  * @returns {Boolean}
266
319
  * @throws {Error} when self is undefined
267
320
  */
268
- SelfUtils.isUserUnadmitted = (self) => {
321
+ SelfUtils.isUserUnadmitted = (self: object) => {
269
322
  if (!self) {
270
323
  throw new ParameterError('self must be defined to determine if self is unadmitted as guest.');
271
324
  }
@@ -278,12 +331,38 @@ SelfUtils.moderatorChanged = (oldSelf, changedSelf) => {
278
331
  return true;
279
332
  }
280
333
  if (!changedSelf) {
281
- 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
+ );
282
337
  }
283
338
 
284
339
  return oldSelf.moderator !== changedSelf.moderator;
285
340
  };
286
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
+ };
287
366
 
288
367
  /**
289
368
  * @param {Object} oldSelf
@@ -291,7 +370,11 @@ SelfUtils.moderatorChanged = (oldSelf, changedSelf) => {
291
370
  * @returns {Boolean}
292
371
  * @throws {Error} if changed self was undefined
293
372
  */
294
- SelfUtils.isDeviceObserving = (oldSelf, changedSelf) => 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_;
295
378
 
296
379
  /**
297
380
  * @param {Object} oldSelf
@@ -299,24 +382,45 @@ SelfUtils.isDeviceObserving = (oldSelf, changedSelf) => oldSelf && oldSelf.joine
299
382
  * @returns {Boolean}
300
383
  * @throws {Error} if changed self was undefined
301
384
  */
302
- SelfUtils.isUserAdmitted = (oldSelf, changedSelf) => {
385
+ SelfUtils.isUserAdmitted = (oldSelf: object, changedSelf: object) => {
303
386
  if (!oldSelf) {
304
387
  // if there was no previous locus, it couldn't have been admitted yet
305
388
  return false;
306
389
  }
307
390
  if (!changedSelf) {
308
- 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
+ );
309
394
  }
310
395
 
311
396
  return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
312
397
  };
313
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
+
314
418
  SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
315
419
  if (!changedSelf) {
316
420
  throw new ParameterError('New self must be defined to determine if self was muted by others.');
317
421
  }
318
422
 
319
- if (!oldSelf || (oldSelf.remoteMuted === null)) {
423
+ if (!oldSelf || oldSelf.remoteMuted === null) {
320
424
  if (changedSelf.remoteMuted) {
321
425
  return true; // this happens when mute on-entry is enabled
322
426
  }
@@ -325,25 +429,35 @@ SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
325
429
  return false;
326
430
  }
327
431
 
328
- return (changedSelf.remoteMuted !== null) &&
329
- ((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
+ );
330
437
  };
331
438
 
332
- SelfUtils.localAudioUnmuteRequestedByServer = (oldSelf = {}, changedSelf) => {
439
+ SelfUtils.localAudioUnmuteRequestedByServer = (oldSelf: any = {}, changedSelf: any) => {
333
440
  if (!changedSelf) {
334
- 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
+ );
335
444
  }
336
445
 
337
446
  return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;
338
447
  };
339
448
 
340
-
341
- SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf = {}, changedSelf) => {
449
+ SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf: any = {}, changedSelf: any) => {
342
450
  if (!changedSelf) {
343
- 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
+ );
344
454
  }
345
455
 
346
- return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && (oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired);
456
+ return (
457
+ !changedSelf.remoteMuted &&
458
+ changedSelf.localAudioUnmuteRequired &&
459
+ oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired
460
+ );
347
461
  };
348
462
 
349
463
  /**
@@ -353,7 +467,7 @@ SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf = {}, changedSelf) => {
353
467
  * @returns {Object}
354
468
  */
355
469
 
356
- SelfUtils.getSipUrl = (partner, type, sipUri) => {
470
+ SelfUtils.getSipUrl = (partner: any, type, sipUri) => {
357
471
  // For webex meeting the sipUrl gets updated in info parser
358
472
  if (partner && type === _CALL_) {
359
473
  return {sipUri: partner.person.sipUrl || partner.person.id};
@@ -366,15 +480,20 @@ SelfUtils.getMediaStatus = (mediaSessions = []) => {
366
480
  const mediaStatus = {
367
481
  audio: {},
368
482
  video: {},
369
- share: {}
483
+ share: {},
370
484
  };
371
485
 
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);
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
+ );
375
495
 
376
496
  return mediaStatus;
377
497
  };
378
498
 
379
-
380
499
  export default SelfUtils;