@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.40

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 (498) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +137 -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 +546 -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 +48 -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 +109 -49
  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 +15 -0
  68. package/dist/controls-options-manager/enums.js.map +1 -0
  69. package/dist/controls-options-manager/index.js +203 -0
  70. package/dist/controls-options-manager/index.js.map +1 -0
  71. package/dist/controls-options-manager/util.js +28 -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 +12 -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 +186 -192
  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 +34 -91
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.js +66 -153
  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 +13 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2141 -2210
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +59 -82
  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 +45 -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 +5 -20
  128. package/dist/meetings/collection.js.map +1 -1
  129. package/dist/meetings/index.js +490 -560
  130. package/dist/meetings/index.js.map +1 -1
  131. package/dist/meetings/request.js +24 -41
  132. package/dist/meetings/request.js.map +1 -1
  133. package/dist/meetings/util.js +116 -155
  134. package/dist/meetings/util.js.map +1 -1
  135. package/dist/member/index.js +78 -86
  136. package/dist/member/index.js.map +1 -1
  137. package/dist/member/util.js +31 -68
  138. package/dist/member/util.js.map +1 -1
  139. package/dist/members/collection.js +3 -12
  140. package/dist/members/collection.js.map +1 -1
  141. package/dist/members/index.js +95 -200
  142. package/dist/members/index.js.map +1 -1
  143. package/dist/members/request.js +16 -39
  144. package/dist/members/request.js.map +1 -1
  145. package/dist/members/util.js +9 -38
  146. package/dist/members/util.js.map +1 -1
  147. package/dist/metrics/config.js +1 -13
  148. package/dist/metrics/config.js.map +1 -1
  149. package/dist/metrics/constants.js +1 -6
  150. package/dist/metrics/constants.js.map +1 -1
  151. package/dist/metrics/index.js +54 -156
  152. package/dist/metrics/index.js.map +1 -1
  153. package/dist/multistream/mediaRequestManager.js +74 -52
  154. package/dist/multistream/mediaRequestManager.js.map +1 -1
  155. package/dist/multistream/receiveSlot.js +48 -65
  156. package/dist/multistream/receiveSlot.js.map +1 -1
  157. package/dist/multistream/receiveSlotManager.js +60 -82
  158. package/dist/multistream/receiveSlotManager.js.map +1 -1
  159. package/dist/multistream/remoteMedia.js +60 -76
  160. package/dist/multistream/remoteMedia.js.map +1 -1
  161. package/dist/multistream/remoteMediaGroup.js +6 -40
  162. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  163. package/dist/multistream/remoteMediaManager.js +360 -413
  164. package/dist/multistream/remoteMediaManager.js.map +1 -1
  165. package/dist/networkQualityMonitor/index.js +40 -59
  166. package/dist/networkQualityMonitor/index.js.map +1 -1
  167. package/dist/personal-meeting-room/index.js +21 -45
  168. package/dist/personal-meeting-room/index.js.map +1 -1
  169. package/dist/personal-meeting-room/request.js +1 -31
  170. package/dist/personal-meeting-room/request.js.map +1 -1
  171. package/dist/personal-meeting-room/util.js +0 -13
  172. package/dist/personal-meeting-room/util.js.map +1 -1
  173. package/dist/reachability/index.js +147 -183
  174. package/dist/reachability/index.js.map +1 -1
  175. package/dist/reachability/request.js +15 -23
  176. package/dist/reachability/request.js.map +1 -1
  177. package/dist/reactions/constants.js +13 -0
  178. package/dist/reactions/constants.js.map +1 -0
  179. package/dist/reactions/reactions.js +109 -0
  180. package/dist/reactions/reactions.js.map +1 -0
  181. package/dist/reactions/reactions.type.js +36 -0
  182. package/dist/reactions/reactions.type.js.map +1 -0
  183. package/dist/reconnection-manager/index.js +322 -456
  184. package/dist/reconnection-manager/index.js.map +1 -1
  185. package/dist/recording-controller/enums.js +17 -0
  186. package/dist/recording-controller/enums.js.map +1 -0
  187. package/dist/recording-controller/index.js +343 -0
  188. package/dist/recording-controller/index.js.map +1 -0
  189. package/dist/recording-controller/util.js +63 -0
  190. package/dist/recording-controller/util.js.map +1 -0
  191. package/dist/roap/index.js +48 -70
  192. package/dist/roap/index.js.map +1 -1
  193. package/dist/roap/request.js +143 -131
  194. package/dist/roap/request.js.map +1 -1
  195. package/dist/roap/turnDiscovery.js +91 -98
  196. package/dist/roap/turnDiscovery.js.map +1 -1
  197. package/dist/statsAnalyzer/global.js +1 -95
  198. package/dist/statsAnalyzer/global.js.map +1 -1
  199. package/dist/statsAnalyzer/index.js +361 -449
  200. package/dist/statsAnalyzer/index.js.map +1 -1
  201. package/dist/statsAnalyzer/mqaUtil.js +137 -81
  202. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  203. package/dist/transcription/index.js +22 -47
  204. package/dist/transcription/index.js.map +1 -1
  205. package/dist/types/breakouts/breakout.d.ts +8 -0
  206. package/dist/types/breakouts/collection.d.ts +5 -0
  207. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  208. package/dist/types/breakouts/index.d.ts +5 -0
  209. package/dist/types/breakouts/request.d.ts +22 -0
  210. package/dist/types/breakouts/utils.d.ts +8 -0
  211. package/dist/types/common/browser-detection.d.ts +9 -0
  212. package/dist/types/common/collection.d.ts +48 -0
  213. package/dist/types/common/config.d.ts +2 -0
  214. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  215. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  216. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  217. package/dist/types/common/errors/media.d.ts +15 -0
  218. package/dist/types/common/errors/parameter.d.ts +15 -0
  219. package/dist/types/common/errors/password-error.d.ts +15 -0
  220. package/dist/types/common/errors/permission.d.ts +14 -0
  221. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  222. package/dist/types/common/errors/reconnection.d.ts +15 -0
  223. package/dist/types/common/errors/stats.d.ts +15 -0
  224. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  225. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  226. package/dist/types/common/events/events-scope.d.ts +17 -0
  227. package/dist/types/common/events/events.d.ts +12 -0
  228. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  229. package/dist/types/common/events/util.d.ts +2 -0
  230. package/dist/types/common/logs/logger-config.d.ts +2 -0
  231. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  232. package/dist/types/common/logs/request.d.ts +34 -0
  233. package/dist/types/common/queue.d.ts +32 -0
  234. package/dist/types/config.d.ts +77 -0
  235. package/dist/types/constants.d.ts +916 -0
  236. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  237. package/dist/types/controls-options-manager/enums.d.ts +5 -0
  238. package/dist/types/controls-options-manager/index.d.ts +120 -0
  239. package/dist/types/controls-options-manager/util.d.ts +7 -0
  240. package/dist/types/index.d.ts +6 -0
  241. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  242. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  243. package/dist/types/locus-info/fullState.d.ts +2 -0
  244. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  245. package/dist/types/locus-info/index.d.ts +269 -0
  246. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  247. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  248. package/dist/types/locus-info/parser.d.ts +212 -0
  249. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  250. package/dist/types/media/index.d.ts +32 -0
  251. package/dist/types/media/properties.d.ts +108 -0
  252. package/dist/types/media/util.d.ts +2 -0
  253. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  254. package/dist/types/meeting/in-meeting-actions.d.ts +83 -0
  255. package/dist/types/meeting/index.d.ts +1699 -0
  256. package/dist/types/meeting/muteState.d.ts +116 -0
  257. package/dist/types/meeting/request.d.ts +271 -0
  258. package/dist/types/meeting/request.type.d.ts +11 -0
  259. package/dist/types/meeting/state.d.ts +9 -0
  260. package/dist/types/meeting/util.d.ts +2 -0
  261. package/dist/types/meeting-info/collection.d.ts +20 -0
  262. package/dist/types/meeting-info/index.d.ts +57 -0
  263. package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
  264. package/dist/types/meeting-info/request.d.ts +22 -0
  265. package/dist/types/meeting-info/util.d.ts +2 -0
  266. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  267. package/dist/types/meetings/collection.d.ts +23 -0
  268. package/dist/types/meetings/index.d.ts +297 -0
  269. package/dist/types/meetings/request.d.ts +27 -0
  270. package/dist/types/meetings/util.d.ts +18 -0
  271. package/dist/types/member/index.d.ts +146 -0
  272. package/dist/types/member/util.d.ts +2 -0
  273. package/dist/types/members/collection.d.ts +24 -0
  274. package/dist/types/members/index.d.ts +320 -0
  275. package/dist/types/members/request.d.ts +50 -0
  276. package/dist/types/members/util.d.ts +2 -0
  277. package/dist/types/metrics/config.d.ts +169 -0
  278. package/dist/types/metrics/constants.d.ts +53 -0
  279. package/dist/types/metrics/index.d.ts +152 -0
  280. package/dist/types/multistream/mediaRequestManager.d.ts +51 -0
  281. package/dist/types/multistream/receiveSlot.d.ts +64 -0
  282. package/dist/types/multistream/receiveSlotManager.d.ts +46 -0
  283. package/dist/types/multistream/remoteMedia.d.ts +100 -0
  284. package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
  285. package/dist/types/multistream/remoteMediaManager.d.ts +241 -0
  286. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  287. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  288. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  289. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  290. package/dist/types/reachability/index.d.ts +140 -0
  291. package/dist/types/reachability/request.d.ts +37 -0
  292. package/dist/types/reactions/constants.d.ts +3 -0
  293. package/dist/types/reactions/reactions.d.ts +4 -0
  294. package/dist/types/reactions/reactions.type.d.ts +52 -0
  295. package/dist/types/reconnection-manager/index.d.ts +117 -0
  296. package/dist/types/recording-controller/enums.d.ts +7 -0
  297. package/dist/types/recording-controller/index.d.ts +193 -0
  298. package/dist/types/recording-controller/util.d.ts +13 -0
  299. package/dist/types/roap/index.d.ts +77 -0
  300. package/dist/types/roap/request.d.ts +38 -0
  301. package/dist/types/roap/turnDiscovery.d.ts +74 -0
  302. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  303. package/dist/types/statsAnalyzer/index.d.ts +195 -0
  304. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  305. package/dist/types/transcription/index.d.ts +64 -0
  306. package/internal-README.md +7 -6
  307. package/package.json +27 -21
  308. package/src/breakouts/README.md +199 -0
  309. package/src/breakouts/breakout.ts +130 -0
  310. package/src/breakouts/collection.ts +19 -0
  311. package/src/breakouts/edit-lock-error.ts +25 -0
  312. package/src/breakouts/index.ts +504 -0
  313. package/src/breakouts/request.ts +55 -0
  314. package/src/breakouts/utils.ts +39 -0
  315. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  316. package/src/common/collection.ts +9 -7
  317. package/src/common/{config.js → config.ts} +1 -1
  318. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  319. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  320. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  321. package/src/common/errors/{media.js → media.ts} +11 -7
  322. package/src/common/errors/parameter.ts +11 -7
  323. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  324. package/src/common/errors/{permission.js → permission.ts} +10 -6
  325. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  326. package/src/common/errors/{stats.js → stats.ts} +11 -7
  327. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  328. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  329. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  330. package/src/common/events/{events.js → events.ts} +5 -1
  331. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  332. package/src/common/events/{util.js → util.ts} +2 -3
  333. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  334. package/src/common/logs/logger-proxy.ts +44 -0
  335. package/src/common/logs/{request.js → request.ts} +22 -9
  336. package/src/common/queue.ts +1 -2
  337. package/src/{config.js → config.ts} +17 -12
  338. package/src/constants.ts +62 -5
  339. package/src/controls-options-manager/constants.ts +5 -0
  340. package/src/controls-options-manager/enums.ts +6 -0
  341. package/src/controls-options-manager/index.ts +183 -0
  342. package/src/controls-options-manager/util.ts +20 -0
  343. package/src/index.js +4 -1
  344. package/src/locus-info/controlsUtils.ts +114 -0
  345. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  346. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  347. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  348. package/src/locus-info/{index.js → index.ts} +150 -66
  349. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  350. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  351. package/src/locus-info/{parser.js → parser.ts} +67 -79
  352. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  353. package/src/media/{index.js → index.ts} +182 -173
  354. package/src/media/{properties.js → properties.ts} +60 -37
  355. package/src/media/{util.js → util.ts} +2 -2
  356. package/src/mediaQualityMetrics/config.ts +384 -0
  357. package/src/meeting/in-meeting-actions.ts +31 -3
  358. package/src/meeting/{index.js → index.ts} +2512 -1579
  359. package/src/meeting/{muteState.js → muteState.ts} +95 -49
  360. package/src/meeting/{request.js → request.ts} +326 -142
  361. package/src/meeting/request.type.ts +13 -0
  362. package/src/meeting/{state.js → state.ts} +50 -35
  363. package/src/meeting/{util.js → util.ts} +117 -119
  364. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  365. package/src/meeting-info/{index.js → index.ts} +42 -36
  366. package/src/meeting-info/meeting-info-v2.ts +273 -0
  367. package/src/meeting-info/{request.js → request.ts} +14 -4
  368. package/src/meeting-info/{util.js → util.ts} +60 -51
  369. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  370. package/src/meetings/{collection.js → collection.ts} +6 -3
  371. package/src/meetings/index.ts +1159 -0
  372. package/src/meetings/{request.js → request.ts} +32 -25
  373. package/src/meetings/{util.js → util.ts} +58 -32
  374. package/src/member/{index.js → index.ts} +102 -56
  375. package/src/member/{util.js → util.ts} +52 -25
  376. package/src/members/{collection.js → collection.ts} +2 -2
  377. package/src/members/{index.js → index.ts} +221 -142
  378. package/src/members/{request.js → request.ts} +60 -16
  379. package/src/members/{util.js → util.ts} +50 -48
  380. package/src/metrics/{config.js → config.ts} +253 -92
  381. package/src/metrics/{constants.js → constants.ts} +0 -6
  382. package/src/metrics/{index.js → index.ts} +105 -94
  383. package/src/multistream/mediaRequestManager.ts +101 -39
  384. package/src/multistream/receiveSlot.ts +62 -26
  385. package/src/multistream/receiveSlotManager.ts +35 -21
  386. package/src/multistream/remoteMedia.ts +38 -5
  387. package/src/multistream/remoteMediaGroup.ts +4 -3
  388. package/src/multistream/remoteMediaManager.ts +152 -36
  389. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  390. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  391. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  392. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  393. package/src/reachability/{index.js → index.ts} +109 -85
  394. package/src/reachability/request.ts +46 -35
  395. package/src/reactions/constants.ts +4 -0
  396. package/src/reactions/reactions.ts +104 -0
  397. package/src/reactions/reactions.type.ts +62 -0
  398. package/src/reconnection-manager/{index.js → index.ts} +196 -103
  399. package/src/recording-controller/enums.ts +8 -0
  400. package/src/recording-controller/index.ts +315 -0
  401. package/src/recording-controller/util.ts +58 -0
  402. package/src/roap/{index.js → index.ts} +77 -60
  403. package/src/roap/request.ts +172 -0
  404. package/src/roap/turnDiscovery.ts +81 -41
  405. package/src/statsAnalyzer/global.ts +37 -0
  406. package/src/statsAnalyzer/index.ts +1234 -0
  407. package/src/statsAnalyzer/mqaUtil.ts +293 -0
  408. package/src/transcription/{index.js → index.ts} +46 -39
  409. package/test/integration/spec/converged-space-meetings.js +176 -0
  410. package/test/integration/spec/journey.js +665 -464
  411. package/test/integration/spec/space-meeting.js +320 -206
  412. package/test/integration/spec/transcription.js +7 -8
  413. package/test/unit/spec/breakouts/breakout.ts +147 -0
  414. package/test/unit/spec/breakouts/collection.ts +15 -0
  415. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  416. package/test/unit/spec/breakouts/index.ts +707 -0
  417. package/test/unit/spec/breakouts/request.ts +104 -0
  418. package/test/unit/spec/breakouts/utils.js +47 -0
  419. package/test/unit/spec/common/browser-detection.js +9 -28
  420. package/test/unit/spec/controls-options-manager/index.js +124 -0
  421. package/test/unit/spec/controls-options-manager/util.js +66 -0
  422. package/test/unit/spec/fixture/locus.js +92 -90
  423. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  424. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  425. package/test/unit/spec/locus-info/index.js +104 -2
  426. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  427. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  428. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  429. package/test/unit/spec/locus-info/parser.js +3 -9
  430. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  431. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  432. package/test/unit/spec/media/index.ts +39 -53
  433. package/test/unit/spec/media/properties.ts +9 -9
  434. package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
  435. package/test/unit/spec/meeting/index.js +2253 -811
  436. package/test/unit/spec/meeting/muteState.js +74 -55
  437. package/test/unit/spec/meeting/request.js +141 -43
  438. package/test/unit/spec/meeting/utils.js +106 -171
  439. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  440. package/test/unit/spec/meeting-info/request.js +7 -9
  441. package/test/unit/spec/meeting-info/util.js +11 -12
  442. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  443. package/test/unit/spec/meetings/collection.js +1 -1
  444. package/test/unit/spec/meetings/index.js +439 -257
  445. package/test/unit/spec/meetings/utils.js +14 -12
  446. package/test/unit/spec/member/index.js +0 -1
  447. package/test/unit/spec/member/util.js +31 -7
  448. package/test/unit/spec/members/index.js +104 -54
  449. package/test/unit/spec/members/request.js +29 -20
  450. package/test/unit/spec/members/utils.js +8 -5
  451. package/test/unit/spec/metrics/index.js +16 -21
  452. package/test/unit/spec/multistream/mediaRequestManager.ts +318 -64
  453. package/test/unit/spec/multistream/receiveSlot.ts +68 -17
  454. package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
  455. package/test/unit/spec/multistream/remoteMedia.ts +38 -2
  456. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  457. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  458. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  459. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  460. package/test/unit/spec/reachability/index.ts +70 -27
  461. package/test/unit/spec/reachability/request.js +66 -0
  462. package/test/unit/spec/reconnection-manager/index.js +58 -30
  463. package/test/unit/spec/recording-controller/index.js +231 -0
  464. package/test/unit/spec/recording-controller/util.js +102 -0
  465. package/test/unit/spec/roap/index.ts +12 -8
  466. package/test/unit/spec/roap/request.ts +217 -0
  467. package/test/unit/spec/roap/turnDiscovery.ts +72 -49
  468. package/test/unit/spec/stats-analyzer/index.js +86 -57
  469. package/test/utils/cmr.js +44 -42
  470. package/test/utils/constants.js +9 -0
  471. package/test/utils/testUtils.js +98 -77
  472. package/test/utils/webex-config.js +22 -18
  473. package/test/utils/webex-test-users.js +57 -50
  474. package/tsconfig.json +6 -0
  475. package/dist/media/internal-media-core-wrapper.js +0 -22
  476. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  477. package/dist/meeting/effectsState.js +0 -327
  478. package/dist/meeting/effectsState.js.map +0 -1
  479. package/dist/multistream/multistreamMedia.js +0 -116
  480. package/dist/multistream/multistreamMedia.js.map +0 -1
  481. package/dist/peer-connection-manager/util.js +0 -124
  482. package/dist/peer-connection-manager/util.js.map +0 -1
  483. package/src/common/logs/logger-proxy.js +0 -33
  484. package/src/locus-info/controlsUtils.js +0 -102
  485. package/src/media/internal-media-core-wrapper.ts +0 -9
  486. package/src/mediaQualityMetrics/config.js +0 -382
  487. package/src/meeting/effectsState.js +0 -205
  488. package/src/meeting-info/meeting-info-v2.js +0 -255
  489. package/src/meetings/index.js +0 -1015
  490. package/src/multistream/multistreamMedia.ts +0 -92
  491. package/src/peer-connection-manager/util.ts +0 -117
  492. package/src/roap/request.js +0 -127
  493. package/src/statsAnalyzer/global.js +0 -133
  494. package/src/statsAnalyzer/index.js +0 -1006
  495. package/src/statsAnalyzer/mqaUtil.js +0 -173
  496. package/test/unit/spec/meeting/effectsState.js +0 -291
  497. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  498. /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);
238
-
245
+ currentMediaStatus &&
246
+ (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
239
247
 
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,34 @@ 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);
348
-
349
- MeetingUtil.canUserLock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
349
+ MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) =>
350
+ locusInfo?.parsedLocus?.info?.userDisplayHints || [];
350
351
 
351
- MeetingUtil.canUserUnlock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
352
+ MeetingUtil.canInviteNewParticipants = (displayHints) =>
353
+ displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
352
354
 
353
- MeetingUtil.canUserRecord = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);
355
+ MeetingUtil.canAdmitParticipant = (displayHints) =>
356
+ displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
354
357
 
355
- MeetingUtil.canUserPause = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);
358
+ MeetingUtil.canUserLock = (displayHints) =>
359
+ displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&
360
+ displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
356
361
 
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
- }
387
-
388
- return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));
389
- };
390
-
391
- MeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {
392
- const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
393
-
394
- if (MeetingUtil.canUserStop(displayHints)) {
395
- return request.recordMeeting({locusUrl, recording: false, paused: false});
396
- }
397
-
398
- return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));
399
- };
362
+ MeetingUtil.canUserUnlock = (displayHints) =>
363
+ displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&
364
+ displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
400
365
 
401
366
  MeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);
402
367
 
403
- MeetingUtil.canUserLowerAllHands = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
368
+ MeetingUtil.canUserLowerAllHands = (displayHints) =>
369
+ displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
404
370
 
405
- MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
371
+ MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
372
+ displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
406
373
 
407
- MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) => displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) || displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
374
+ MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
375
+ displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||
376
+ displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
408
377
 
409
378
  MeetingUtil.lockMeeting = (actions, request, locusUrl) => {
410
379
  if (actions && actions.canLock) {
@@ -422,11 +391,11 @@ MeetingUtil.unlockMeeting = (actions, request, locusUrl) => {
422
391
  return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));
423
392
  };
424
393
 
425
- MeetingUtil.handleAudioLogging = (audioTrack) => {
394
+ MeetingUtil.handleAudioLogging = (audioTrack: LocalMicrophoneTrack | null) => {
426
395
  const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';
427
396
 
428
397
  if (audioTrack) {
429
- const settings = audioTrack.getSettings();
398
+ const settings = audioTrack.underlyingTrack.getSettings();
430
399
  const {deviceId} = settings;
431
400
 
432
401
  LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);
@@ -434,11 +403,11 @@ MeetingUtil.handleAudioLogging = (audioTrack) => {
434
403
  }
435
404
  };
436
405
 
437
- MeetingUtil.handleVideoLogging = (videoTrack) => {
406
+ MeetingUtil.handleVideoLogging = (videoTrack: LocalCameraTrack | null) => {
438
407
  const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';
439
408
 
440
409
  if (videoTrack) {
441
- const settings = videoTrack.getSettings();
410
+ const settings = videoTrack.underlyingTrack.getSettings();
442
411
  const {deviceId} = settings;
443
412
 
444
413
  LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);
@@ -476,31 +445,60 @@ MeetingUtil.endMeetingForAll = (meeting) => {
476
445
  .then(() => MeetingUtil.cleanUp(meeting))
477
446
  .catch((err) => {
478
447
  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}`
448
+ `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`
482
449
  );
483
450
 
484
451
  return Promise.reject(err);
485
452
  });
486
453
  };
487
454
 
488
- MeetingUtil.canEnableClosedCaption = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START);
455
+ MeetingUtil.canEnableClosedCaption = (displayHints) =>
456
+ displayHints.includes(DISPLAY_HINTS.CAPTION_START);
457
+
458
+ MeetingUtil.canStartTranscribing = (displayHints) =>
459
+ displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
460
+
461
+ MeetingUtil.canStopTranscribing = (displayHints) =>
462
+ displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
463
+
464
+ MeetingUtil.isClosedCaptionActive = (displayHints) =>
465
+ displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
466
+
467
+ MeetingUtil.isWebexAssistantActive = (displayHints) =>
468
+ displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
489
469
 
490
- MeetingUtil.canStartTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
470
+ MeetingUtil.canViewCaptionPanel = (displayHints) =>
471
+ displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
491
472
 
492
- MeetingUtil.canStopTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
473
+ MeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>
474
+ displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
493
475
 
494
- MeetingUtil.isClosedCaptionActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
476
+ MeetingUtil.canSelectSpokenLanguages = (displayHints) =>
477
+ displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
495
478
 
496
- MeetingUtil.isWebexAssistantActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
479
+ MeetingUtil.waitingForOthersToJoin = (displayHints) =>
480
+ displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
497
481
 
498
- MeetingUtil.canViewCaptionPanel = (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
482
+ MeetingUtil.canEnableReactions = (originalValue, displayHints) => {
483
+ if (displayHints.includes(DISPLAY_HINTS.ENABLE_REACTIONS)) {
484
+ return true;
485
+ }
486
+ if (displayHints.includes(DISPLAY_HINTS.DISABLE_REACTIONS)) {
487
+ return false;
488
+ }
499
489
 
500
- MeetingUtil.isRealTimeTranslationEnabled = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
490
+ return originalValue;
491
+ };
501
492
 
502
- MeetingUtil.canSelectSpokenLanguages = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
493
+ MeetingUtil.canSendReactions = (originalValue, displayHints) => {
494
+ if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {
495
+ return true;
496
+ }
497
+ if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {
498
+ return false;
499
+ }
503
500
 
504
- MeetingUtil.waitingForOthersToJoin = (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
501
+ return originalValue;
502
+ };
505
503
 
506
504
  export default MeetingUtil;
@@ -24,14 +24,18 @@ export default class MeetingInfoCollection extends Collection {
24
24
  * @public
25
25
  * @memberof MeetingInfoCollection
26
26
  */
27
- get(id) {
27
+ public get(id: string) {
28
+ // @ts-ignore
28
29
  if (this.meetingInfos[id]) {
30
+ // @ts-ignore
29
31
  return this.meetingInfos[id];
30
32
  }
31
33
 
32
34
  return find(
35
+ // @ts-ignore
33
36
  this.meetingInfos,
34
- (info) => info.sipUrl === id || info.locusId === id || info.userId === id || info.meetingLink === id
37
+ (info) =>
38
+ info.sipUrl === id || info.locusId === id || info.userId === id || info.meetingLink === id
35
39
  );
36
40
  }
37
41
  }