@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
@@ -0,0 +1,13 @@
1
+ import {Reaction} from '../reactions/reactions.type';
2
+
3
+ export type SendReactionOptions = {
4
+ reactionChannelUrl: string;
5
+ reaction: Reaction;
6
+ participantId: string;
7
+ };
8
+
9
+ export type ToggleReactionsOptions = {
10
+ enable: boolean;
11
+ locusUrl: string;
12
+ requestingParticipantId: string;
13
+ };
@@ -13,9 +13,11 @@ const MeetingStateMachine = {
13
13
  * @param {Meeting} meetingRef A reference to a meeting instance
14
14
  * @returns {StateMachine}
15
15
  */
16
- create(meetingRef) {
16
+ create(meetingRef: any) {
17
17
  if (!meetingRef) {
18
- throw new ParameterError('You must initialize the meeting state machine with a meeting reference.');
18
+ throw new ParameterError(
19
+ 'You must initialize the meeting state machine with a meeting reference.'
20
+ );
19
21
  }
20
22
 
21
23
  return new StateMachine({
@@ -24,27 +26,36 @@ const MeetingStateMachine = {
24
26
  // when ringing a meeting, it must be first IDLE, because all other states are invalid, it transitions to the RINGING state
25
27
  {
26
28
  name: MEETING_STATE_MACHINE.TRANSITIONS.RING,
27
- from: [MEETING_STATE_MACHINE.STATES.IDLE, MEETING_STATE_MACHINE.STATES.ERROR, MEETING_STATE_MACHINE.STATES.JOINED],
28
- to: MEETING_STATE_MACHINE.STATES.RINGING
29
+ from: [
30
+ MEETING_STATE_MACHINE.STATES.IDLE,
31
+ MEETING_STATE_MACHINE.STATES.ERROR,
32
+ MEETING_STATE_MACHINE.STATES.JOINED,
33
+ ],
34
+ to: MEETING_STATE_MACHINE.STATES.RINGING,
29
35
  },
30
36
  // when joining a meeting, it must be from the RINGING or IDLE state, transitions to JOINED state, 1:1 will go to RINGING,
31
37
  // others will go straight to JOINED with this transition
32
38
  {
33
39
  name: MEETING_STATE_MACHINE.TRANSITIONS.JOIN,
34
- from: [MEETING_STATE_MACHINE.STATES.JOINED, MEETING_STATE_MACHINE.STATES.IDLE, MEETING_STATE_MACHINE.STATES.RINGING, MEETING_STATE_MACHINE.STATES.ERROR],
35
- to: MEETING_STATE_MACHINE.STATES.JOINED
40
+ from: [
41
+ MEETING_STATE_MACHINE.STATES.JOINED,
42
+ MEETING_STATE_MACHINE.STATES.IDLE,
43
+ MEETING_STATE_MACHINE.STATES.RINGING,
44
+ MEETING_STATE_MACHINE.STATES.ERROR,
45
+ ],
46
+ to: MEETING_STATE_MACHINE.STATES.JOINED,
36
47
  },
37
48
  // signify that ringing has stopped and somebody else answered, move state to DECLINED, ANSWERED
38
49
  {
39
50
  name: MEETING_STATE_MACHINE.TRANSITIONS.REMOTE,
40
51
  from: [MEETING_STATE_MACHINE.STATES.JOINED, MEETING_STATE_MACHINE.STATES.ERROR],
41
52
  /**
42
- * @param {Object} remote
43
- * @param {Boolean} remote.remoteAnswered
44
- * @param {Boolean} remote.remoteDeclined
45
- * @returns {String}
46
- */
47
- to(remote) {
53
+ * @param {Object} remote
54
+ * @param {Boolean} remote.remoteAnswered
55
+ * @param {Boolean} remote.remoteDeclined
56
+ * @returns {String}
57
+ */
58
+ to(remote: {remoteAnswered: boolean; remoteDeclined: boolean}) {
48
59
  // other user answered the call
49
60
  if (remote.remoteAnswered) {
50
61
  return MEETING_STATE_MACHINE.STATES.ANSWERED;
@@ -56,7 +67,7 @@ const MeetingStateMachine = {
56
67
 
57
68
  // default
58
69
  return MEETING_STATE_MACHINE.STATES.ERROR;
59
- }
70
+ },
60
71
  },
61
72
  // when leaving a meeting it must be from either the RINGING, JOINED, or ERROR states, and transitions it to the ENDED state
62
73
  {
@@ -67,9 +78,9 @@ const MeetingStateMachine = {
67
78
  MEETING_STATE_MACHINE.STATES.JOINED,
68
79
  MEETING_STATE_MACHINE.STATES.ANSWERED,
69
80
  MEETING_STATE_MACHINE.STATES.DECLINED,
70
- MEETING_STATE_MACHINE.STATES.ERROR
81
+ MEETING_STATE_MACHINE.STATES.ERROR,
71
82
  ],
72
- to: MEETING_STATE_MACHINE.STATES.ENDED
83
+ to: MEETING_STATE_MACHINE.STATES.ENDED,
73
84
  },
74
85
  {
75
86
  name: MEETING_STATE_MACHINE.TRANSITIONS.END,
@@ -79,33 +90,33 @@ const MeetingStateMachine = {
79
90
  MEETING_STATE_MACHINE.STATES.JOINED,
80
91
  MEETING_STATE_MACHINE.STATES.ANSWERED,
81
92
  MEETING_STATE_MACHINE.STATES.DECLINED,
82
- MEETING_STATE_MACHINE.STATES.ERROR
93
+ MEETING_STATE_MACHINE.STATES.ERROR,
83
94
  ],
84
- to: MEETING_STATE_MACHINE.STATES.ENDED
95
+ to: MEETING_STATE_MACHINE.STATES.ENDED,
85
96
  },
86
97
  {
87
98
  name: MEETING_STATE_MACHINE.TRANSITIONS.DECLINE,
88
99
  from: [MEETING_STATE_MACHINE.STATES.RINGING, MEETING_STATE_MACHINE.STATES.ERROR],
89
- to: MEETING_STATE_MACHINE.STATES.ENDED
100
+ to: MEETING_STATE_MACHINE.STATES.ENDED,
90
101
  },
91
102
  // transition from ANY state to ERROR state
92
103
  {
93
104
  name: MEETING_STATE_MACHINE.TRANSITIONS.FAIL,
94
105
  from: '*',
95
- to: MEETING_STATE_MACHINE.STATES.ERROR
106
+ to: MEETING_STATE_MACHINE.STATES.ERROR,
96
107
  },
97
108
  // fail safe, transition from ANY state to IDLE state
98
109
  {
99
110
  name: MEETING_STATE_MACHINE.TRANSITIONS.RESET,
100
111
  from: '*',
101
- to: MEETING_STATE_MACHINE.STATES.IDLE
102
- }
112
+ to: MEETING_STATE_MACHINE.STATES.IDLE,
113
+ },
103
114
  ],
104
115
  data: {
105
116
  /**
106
117
  * The meeting instance to execute all state changes on
107
118
  */
108
- meeting: meetingRef
119
+ meeting: meetingRef,
109
120
  },
110
121
  methods: {
111
122
  /**
@@ -114,18 +125,18 @@ const MeetingStateMachine = {
114
125
  * @param {Object} stop -- {remoteAnswered: {Boolean}, remoteDeclined: {Boolean}}
115
126
  * @returns {Boolean}
116
127
  */
117
- onRemote(transition, stop) {
128
+ onRemote(transition: object, stop: object) {
118
129
  if (this.meeting) {
119
130
  Trigger.trigger(
120
131
  this.meeting,
121
132
  {
122
133
  file: 'meeting/state',
123
- function: 'onRemote'
134
+ function: 'onRemote',
124
135
  },
125
136
  EVENT_TRIGGERS.MEETING_RINGING_STOP,
126
137
  {
127
138
  id: this.meeting.id,
128
- type: stop
139
+ type: stop,
129
140
  }
130
141
  );
131
142
  }
@@ -136,18 +147,18 @@ const MeetingStateMachine = {
136
147
  * @param {String} type -- incoming call === INCOMING / or other meetings have a ring type of JOIN
137
148
  * @returns {Boolean}
138
149
  */
139
- onRing(transition, type) {
150
+ onRing(transition: object, type: string) {
140
151
  if (this.meeting) {
141
152
  Trigger.trigger(
142
153
  this.meeting,
143
154
  {
144
155
  file: 'meeting/state',
145
- function: 'onRing'
156
+ function: 'onRing',
146
157
  },
147
158
  EVENT_TRIGGERS.MEETING_RINGING,
148
159
  {
149
160
  type,
150
- id: this.meeting.id
161
+ id: this.meeting.id,
151
162
  }
152
163
  );
153
164
  }
@@ -158,22 +169,26 @@ const MeetingStateMachine = {
158
169
  * @param {Error} error
159
170
  * @returns {Boolean}
160
171
  */
161
- onEnterError(transition, error) {
162
- LoggerProxy.logger.error(`Meeting:state#onEnterError --> state->onEnterError#meeting.id: ${this.meeting.id} | Transition '${transition?.transition}' : ${transition?.from} -> ${transition?.to}, with error ${error}. Last states: ${this.history}`);
172
+ onEnterError(transition: any, error: Error) {
173
+ LoggerProxy.logger.error(
174
+ `Meeting:state#onEnterError --> state->onEnterError#meeting.id: ${this.meeting.id} | Transition '${transition?.transition}' : ${transition?.from} -> ${transition?.to}, with error ${error}. Last states: ${this.history}`
175
+ );
163
176
  },
164
177
  /**
165
178
  * After ANY transition occurs, we want to know what state the meeting moved to for debugging
166
179
  * @param {Object} transition
167
180
  * @returns {Boolean}
168
181
  */
169
- onAfterTransition(transition) {
170
- LoggerProxy.logger.log(`Meeting:state#onAfterTransition --> state->onAfterTransition#meeting.id: ${this.meeting.id} | Transition '${transition.transition}' : ${transition.from} -> ${transition.to} executed. Last states: ${this.history}`);
171
- }
182
+ onAfterTransition(transition: any) {
183
+ LoggerProxy.logger.log(
184
+ `Meeting:state#onAfterTransition --> state->onAfterTransition#meeting.id: ${this.meeting.id} | Transition '${transition.transition}' : ${transition.from} -> ${transition.to} executed. Last states: ${this.history}`
185
+ );
186
+ },
172
187
  },
173
188
  // track the last 25 states entered
174
- plugins: [new StateMachineHistory({max: 25})]
189
+ plugins: [new StateMachineHistory({max: 25})],
175
190
  });
176
- }
191
+ },
177
192
  };
178
193
 
179
194
  export default MeetingStateMachine;
@@ -1,17 +1,20 @@
1
1
  import {isEmpty} from 'lodash';
2
+ import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/internal-media-core';
2
3
 
3
4
  import {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';
4
5
  import Metrics from '../metrics';
5
6
  import {eventType, trigger} from '../metrics/config';
6
7
  import Media from '../media';
7
8
  import LoggerProxy from '../common/logs/logger-proxy';
8
- import {INTENT_TO_JOIN,
9
+ import {
10
+ INTENT_TO_JOIN,
9
11
  _LEFT_,
10
12
  _IDLE_,
11
13
  _JOINED_,
12
14
  PASSWORD_STATUS,
13
15
  DISPLAY_HINTS,
14
- FULL_STATE} from '../constants';
16
+ FULL_STATE,
17
+ } from '../constants';
15
18
  import IntentToJoinError from '../common/errors/intent-to-join';
16
19
  import JoinMeetingError from '../common/errors/join-meeting';
17
20
  import ParameterError from '../common/errors/parameter';
@@ -19,10 +22,10 @@ import PermissionError from '../common/errors/permission';
19
22
  import PasswordError from '../common/errors/password-error';
20
23
  import CaptchaError from '../common/errors/captcha-error';
21
24
 
22
- const MeetingUtil = {};
25
+ const MeetingUtil: any = {};
23
26
 
24
27
  MeetingUtil.parseLocusJoin = (response) => {
25
- const parsed = {};
28
+ const parsed: any = {};
26
29
 
27
30
  // First todo: add check for existance
28
31
  parsed.locus = response.body.locus;
@@ -48,30 +51,35 @@ MeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {
48
51
  const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);
49
52
 
50
53
  if (isEmpty(localMedias)) {
51
- return Promise.reject(new ParameterError('You need a media id on the meeting to change remote audio.'));
54
+ return Promise.reject(
55
+ new ParameterError('You need a media id on the meeting to change remote audio.')
56
+ );
52
57
  }
53
58
 
54
59
  Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});
55
60
 
56
- return meeting.meetingRequest.remoteAudioVideoToggle({
57
- locusUrl: meeting.locusUrl,
58
- selfId: meeting.selfId,
59
- localMedias,
60
- deviceUrl: meeting.deviceUrl,
61
- correlationId: meeting.correlationId,
62
- preferTranscoding: !meeting.isMultistream,
63
- }).then((response) => {
64
- Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});
61
+ return meeting.meetingRequest
62
+ .remoteAudioVideoToggle({
63
+ locusUrl: meeting.locusUrl,
64
+ selfId: meeting.selfId,
65
+ localMedias,
66
+ deviceUrl: meeting.deviceUrl,
67
+ correlationId: meeting.correlationId,
68
+ preferTranscoding: !meeting.isMultistream,
69
+ })
70
+ .then((response) => {
71
+ Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});
65
72
 
66
- return response.body.locus;
67
- });
73
+ return response.body.locus;
74
+ });
68
75
  };
69
76
 
70
77
  MeetingUtil.hasOwner = (info) => info && info.owner;
71
78
 
72
79
  MeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;
73
80
 
74
- MeetingUtil.isPinOrGuest = (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);
81
+ MeetingUtil.isPinOrGuest = (err) =>
82
+ err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);
75
83
 
76
84
  MeetingUtil.joinMeeting = (meeting, options) => {
77
85
  if (!meeting) {
@@ -97,7 +105,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
97
105
  pin: options.pin,
98
106
  moveToResource: options.moveToResource,
99
107
  preferTranscoding: !meeting.isMultistream,
100
- asResourceOccupant: options.asResourceOccupant
108
+ asResourceOccupant: options.asResourceOccupant,
109
+ breakoutsSupported: options.breakoutsSupported,
101
110
  })
102
111
  .then((res) => {
103
112
  Metrics.postEvent({
@@ -107,8 +116,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
107
116
  trigger: trigger.LOCI_UPDATE,
108
117
  locus: res.body.locus,
109
118
  mediaConnections: res.body.mediaConnections,
110
- trackingId: res.headers.trackingid
111
- }
119
+ trackingId: res.headers.trackingid,
120
+ },
112
121
  });
113
122
 
114
123
  return MeetingUtil.parseLocusJoin(res);
@@ -116,8 +125,12 @@ MeetingUtil.joinMeeting = (meeting, options) => {
116
125
  };
117
126
 
118
127
  MeetingUtil.cleanUp = (meeting) => {
128
+ meeting.breakouts.cleanUp();
129
+
119
130
  // make sure we send last metrics before we close the peerconnection
120
- const stopStatsAnalyzer = (meeting.statsAnalyzer) ? meeting.statsAnalyzer.stopAnalyzer() : Promise.resolve();
131
+ const stopStatsAnalyzer = meeting.statsAnalyzer
132
+ ? meeting.statsAnalyzer.stopAnalyzer()
133
+ : Promise.resolve();
121
134
 
122
135
  return stopStatsAnalyzer
123
136
  .then(() => meeting.closeLocalStream())
@@ -131,7 +144,8 @@ MeetingUtil.cleanUp = (meeting) => {
131
144
  meeting.unsetPeerConnections();
132
145
  meeting.reconnectionManager.cleanUp();
133
146
  })
134
- .then(() => meeting.stopKeepAlive());
147
+ .then(() => meeting.stopKeepAlive())
148
+ .then(() => meeting.updateLLMConnection());
135
149
  };
136
150
 
137
151
  MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
@@ -143,7 +157,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
143
157
  locusUrl: meeting.locusUrl,
144
158
  selfId: meeting.selfId,
145
159
  correlationId: meeting.correlationId,
146
- phoneUrl
160
+ phoneUrl,
147
161
  };
148
162
 
149
163
  return meeting.meetingRequest
@@ -155,9 +169,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
155
169
  })
156
170
  .catch((err) => {
157
171
  LoggerProxy.logger.error(
158
- `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${
159
- meeting.id
160
- }, error: ${err}`
172
+ `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`
161
173
  );
162
174
 
163
175
  return Promise.reject(err);
@@ -168,7 +180,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
168
180
  // if you explicity want it not to leave on resource id, pass
169
181
  // {resourceId: null}
170
182
  // TODO: chris, you can modify this however you want
171
- MeetingUtil.leaveMeeting = (meeting, options = {}) => {
183
+ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
172
184
  if (meeting.meetingState === FULL_STATE.INACTIVE) {
173
185
  // TODO: clean up if the meeting is already inactive
174
186
  return Promise.reject(new MeetingNotActiveError());
@@ -183,7 +195,7 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
183
195
  selfId: meeting.selfId,
184
196
  correlationId: meeting.correlationId,
185
197
  resourceId: meeting.resourceId,
186
- deviceUrl: meeting.deviceUrl
198
+ deviceUrl: meeting.deviceUrl,
187
199
  };
188
200
 
189
201
  const leaveOptions = {...defaultOptions, ...options};
@@ -191,7 +203,8 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
191
203
  return meeting.meetingRequest
192
204
  .leaveMeeting(leaveOptions)
193
205
  .then((response) => {
194
- if (response && response.body && response.body.locus) { // && !options.moveMeeting) {
206
+ if (response && response.body && response.body.locus) {
207
+ // && !options.moveMeeting) {
195
208
  meeting.locusInfo.onFullLocus(response.body.locus);
196
209
  }
197
210
 
@@ -209,9 +222,7 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
209
222
  // 1) on leave clean up the meeting or simply do a sync on the meeting
210
223
  // 2) If the error says meeting is inactive then destroy the meeting object
211
224
  LoggerProxy.logger.error(
212
- `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${
213
- meeting.id
214
- }, error: ${err}`
225
+ `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`
215
226
  );
216
227
 
217
228
  return Promise.reject(err);
@@ -221,23 +232,20 @@ MeetingUtil.declineMeeting = (meeting, reason) =>
221
232
  meeting.meetingRequest.declineMeeting({
222
233
  locusUrl: meeting.locusUrl,
223
234
  deviceUrl: meeting.deviceUrl,
224
- reason
235
+ reason,
225
236
  });
226
237
 
227
- MeetingUtil.isUserInLeftState = (locusInfo) =>
228
- locusInfo.parsedLocus?.self?.state === _LEFT_;
238
+ MeetingUtil.isUserInLeftState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_;
229
239
 
230
- MeetingUtil.isUserInIdleState = (locusInfo) =>
231
- locusInfo.parsedLocus?.self?.state === _IDLE_;
240
+ MeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;
232
241
 
233
- MeetingUtil.isUserInJoinedState = (locusInfo) =>
234
- locusInfo.parsedLocus?.self?.state === _JOINED_;
242
+ MeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;
235
243
 
236
244
  MeetingUtil.isMediaEstablished = (currentMediaStatus) =>
237
- currentMediaStatus && (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
245
+ currentMediaStatus &&
246
+ (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
238
247
 
239
-
240
- MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
248
+ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
241
249
  meeting.resourceId = meeting.resourceId || options.resourceId;
242
250
 
243
251
  if (meeting.requiredCaptcha) {
@@ -250,7 +258,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
250
258
  if (options.pin) {
251
259
  Metrics.postEvent({
252
260
  event: eventType.PIN_COLLECTED,
253
- meeting
261
+ meeting,
254
262
  });
255
263
  }
256
264
 
@@ -266,7 +274,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
266
274
  if (MeetingUtil.isPinOrGuest(err)) {
267
275
  Metrics.postEvent({
268
276
  event: eventType.PIN_PROMPT,
269
- meeting
277
+ meeting,
270
278
  });
271
279
 
272
280
  // request host pin or non host for unclaimed PMR, start of Scenario C
@@ -280,9 +288,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
280
288
  };
281
289
 
282
290
  MeetingUtil.validateOptions = (options) => {
283
- const {
284
- sendVideo, sendAudio, sendShare, localStream, localShare
285
- } = options;
291
+ const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;
286
292
 
287
293
  if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {
288
294
  return Promise.reject(new ParameterError('please pass valid video streams'));
@@ -340,71 +346,49 @@ MeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>
340
346
  locusInfo.parsedLocus.info &&
341
347
  locusInfo.parsedLocus.info.policy;
342
348
 
343
- MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) => locusInfo?.parsedLocus?.info?.userDisplayHints || [];
344
-
345
- MeetingUtil.canInviteNewParticipants = (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
346
-
347
- MeetingUtil.canAdmitParticipant = (displayHints) => displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
349
+ MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) =>
350
+ locusInfo?.parsedLocus?.info?.userDisplayHints || [];
348
351
 
349
- MeetingUtil.canUserLock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
352
+ MeetingUtil.canInviteNewParticipants = (displayHints) =>
353
+ displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
350
354
 
351
- MeetingUtil.canUserUnlock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
355
+ MeetingUtil.canAdmitParticipant = (displayHints) =>
356
+ displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
352
357
 
353
- MeetingUtil.canUserRecord = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);
358
+ MeetingUtil.canUserLock = (displayHints) =>
359
+ displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&
360
+ displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
354
361
 
355
- MeetingUtil.canUserPause = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);
362
+ MeetingUtil.canUserUnlock = (displayHints) =>
363
+ displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&
364
+ displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
356
365
 
357
- MeetingUtil.canUserResume = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME);
358
-
359
- MeetingUtil.canUserStop = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP);
360
-
361
- MeetingUtil.startRecording = (request, locusUrl, locusInfo) => {
362
- const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
363
-
364
- if (MeetingUtil.canUserRecord(displayHints)) {
365
- return request.recordMeeting({locusUrl, recording: true, paused: false});
366
- }
367
-
368
- return Promise.reject(new PermissionError('Start recording not allowed, due to moderator property.'));
369
- };
370
-
371
- MeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {
372
- const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
373
-
374
- if (MeetingUtil.canUserPause(displayHints)) {
375
- return request.recordMeeting({locusUrl, recording: true, paused: true});
376
- }
377
-
378
- return Promise.reject(new PermissionError('Pause recording not allowed, due to moderator property.'));
379
- };
380
-
381
- MeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {
382
- const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
383
-
384
- if (MeetingUtil.canUserResume(displayHints)) {
385
- return request.recordMeeting({locusUrl, recording: true, paused: false});
386
- }
366
+ MeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);
387
367
 
388
- return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));
389
- };
368
+ MeetingUtil.canUserLowerAllHands = (displayHints) =>
369
+ displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
390
370
 
391
- MeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {
392
- const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
371
+ MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
372
+ displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
393
373
 
394
- if (MeetingUtil.canUserStop(displayHints)) {
395
- return request.recordMeeting({locusUrl, recording: false, paused: false});
396
- }
374
+ MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
375
+ displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||
376
+ displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
397
377
 
398
- return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));
399
- };
378
+ MeetingUtil.canManageBreakout = (displayHints) =>
379
+ displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT);
400
380
 
401
- MeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);
381
+ MeetingUtil.isSuppressBreakoutSupport = (displayHints) =>
382
+ displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT);
402
383
 
403
- MeetingUtil.canUserLowerAllHands = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
384
+ MeetingUtil.canAdmitLobbyToBreakout = (displayHints) =>
385
+ !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT);
404
386
 
405
- MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
387
+ MeetingUtil.isBreakoutPreassignmentsEnabled = (displayHints) =>
388
+ !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS);
406
389
 
407
- MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) => displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) || displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
390
+ MeetingUtil.canUserAskForHelp = (displayHints) =>
391
+ !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP);
408
392
 
409
393
  MeetingUtil.lockMeeting = (actions, request, locusUrl) => {
410
394
  if (actions && actions.canLock) {
@@ -422,11 +406,11 @@ MeetingUtil.unlockMeeting = (actions, request, locusUrl) => {
422
406
  return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));
423
407
  };
424
408
 
425
- MeetingUtil.handleAudioLogging = (audioTrack) => {
409
+ MeetingUtil.handleAudioLogging = (audioTrack: LocalMicrophoneTrack | null) => {
426
410
  const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';
427
411
 
428
412
  if (audioTrack) {
429
- const settings = audioTrack.getSettings();
413
+ const settings = audioTrack.underlyingTrack.getSettings();
430
414
  const {deviceId} = settings;
431
415
 
432
416
  LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);
@@ -434,11 +418,11 @@ MeetingUtil.handleAudioLogging = (audioTrack) => {
434
418
  }
435
419
  };
436
420
 
437
- MeetingUtil.handleVideoLogging = (videoTrack) => {
421
+ MeetingUtil.handleVideoLogging = (videoTrack: LocalCameraTrack | null) => {
438
422
  const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';
439
423
 
440
424
  if (videoTrack) {
441
- const settings = videoTrack.getSettings();
425
+ const settings = videoTrack.underlyingTrack.getSettings();
442
426
  const {deviceId} = settings;
443
427
 
444
428
  LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);
@@ -476,31 +460,63 @@ MeetingUtil.endMeetingForAll = (meeting) => {
476
460
  .then(() => MeetingUtil.cleanUp(meeting))
477
461
  .catch((err) => {
478
462
  LoggerProxy.logger.error(
479
- `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${
480
- meeting.id
481
- }, error: ${err}`
463
+ `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`
482
464
  );
483
465
 
484
466
  return Promise.reject(err);
485
467
  });
486
468
  };
487
469
 
488
- MeetingUtil.canEnableClosedCaption = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START);
470
+ MeetingUtil.canEnableClosedCaption = (displayHints) =>
471
+ displayHints.includes(DISPLAY_HINTS.CAPTION_START);
472
+
473
+ MeetingUtil.isSaveTranscriptsEnabled = (displayHints) =>
474
+ displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED);
475
+
476
+ MeetingUtil.canStartTranscribing = (displayHints) =>
477
+ displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
478
+
479
+ MeetingUtil.canStopTranscribing = (displayHints) =>
480
+ displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
481
+
482
+ MeetingUtil.isClosedCaptionActive = (displayHints) =>
483
+ displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
484
+
485
+ MeetingUtil.isWebexAssistantActive = (displayHints) =>
486
+ displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
489
487
 
490
- MeetingUtil.canStartTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
488
+ MeetingUtil.canViewCaptionPanel = (displayHints) =>
489
+ displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
491
490
 
492
- MeetingUtil.canStopTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
491
+ MeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>
492
+ displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
493
493
 
494
- MeetingUtil.isClosedCaptionActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
494
+ MeetingUtil.canSelectSpokenLanguages = (displayHints) =>
495
+ displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
495
496
 
496
- MeetingUtil.isWebexAssistantActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
497
+ MeetingUtil.waitingForOthersToJoin = (displayHints) =>
498
+ displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
497
499
 
498
- MeetingUtil.canViewCaptionPanel = (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
500
+ MeetingUtil.canEnableReactions = (originalValue, displayHints) => {
501
+ if (displayHints.includes(DISPLAY_HINTS.ENABLE_REACTIONS)) {
502
+ return true;
503
+ }
504
+ if (displayHints.includes(DISPLAY_HINTS.DISABLE_REACTIONS)) {
505
+ return false;
506
+ }
499
507
 
500
- MeetingUtil.isRealTimeTranslationEnabled = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
508
+ return originalValue;
509
+ };
501
510
 
502
- MeetingUtil.canSelectSpokenLanguages = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
511
+ MeetingUtil.canSendReactions = (originalValue, displayHints) => {
512
+ if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {
513
+ return true;
514
+ }
515
+ if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {
516
+ return false;
517
+ }
503
518
 
504
- MeetingUtil.waitingForOthersToJoin = (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
519
+ return originalValue;
520
+ };
505
521
 
506
522
  export default MeetingUtil;