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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +944 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +5 -26
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +5 -26
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +6 -27
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +5 -26
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +5 -26
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +4 -25
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +5 -26
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +5 -26
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +6 -41
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +1 -24
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +35 -61
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +6 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +193 -53
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +27 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +286 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +94 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +383 -212
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +0 -38
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +88 -123
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +62 -147
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +71 -117
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +2 -9
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +67 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2477 -2417
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +252 -113
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +296 -289
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +58 -217
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +3 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +10 -33
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +278 -281
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +1 -16
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +24 -20
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +675 -593
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +23 -42
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +177 -155
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +89 -88
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +101 -69
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +12 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +162 -204
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +58 -53
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +50 -16
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +93 -162
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +167 -50
  168. package/dist/multistream/mediaRequestManager.js.map +1 -1
  169. package/dist/multistream/receiveSlot.js +58 -65
  170. package/dist/multistream/receiveSlot.js.map +1 -1
  171. package/dist/multistream/receiveSlotManager.js +74 -93
  172. package/dist/multistream/receiveSlotManager.js.map +1 -1
  173. package/dist/multistream/remoteMedia.js +55 -74
  174. package/dist/multistream/remoteMedia.js.map +1 -1
  175. package/dist/multistream/remoteMediaGroup.js +6 -40
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  177. package/dist/multistream/remoteMediaManager.js +466 -442
  178. package/dist/multistream/remoteMediaManager.js.map +1 -1
  179. package/dist/networkQualityMonitor/index.js +32 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +10 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +2 -33
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +190 -199
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +14 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +2 -4
  194. package/dist/reactions/reactions.js.map +1 -1
  195. package/dist/reactions/reactions.type.js +19 -23
  196. package/dist/reactions/reactions.type.js.map +1 -1
  197. package/dist/reconnection-manager/index.js +326 -465
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +38 -67
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +143 -134
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +149 -101
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -95
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +369 -461
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +13 -45
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +984 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +43 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +137 -0
  274. package/dist/types/meeting/index.d.ts +1753 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +115 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +157 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +195 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +169 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +28 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +220 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +835 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/browser-detection.ts +9 -6
  341. package/src/common/collection.ts +3 -1
  342. package/src/common/errors/captcha-error.ts +6 -6
  343. package/src/common/errors/intent-to-join.ts +6 -6
  344. package/src/common/errors/join-meeting.ts +12 -8
  345. package/src/common/errors/media.ts +6 -6
  346. package/src/common/errors/parameter.ts +9 -6
  347. package/src/common/errors/password-error.ts +6 -6
  348. package/src/common/errors/permission.ts +5 -5
  349. package/src/common/errors/reconnection.ts +6 -6
  350. package/src/common/errors/stats.ts +6 -6
  351. package/src/common/errors/webex-errors.ts +7 -5
  352. package/src/common/errors/webex-meetings-error.ts +1 -1
  353. package/src/common/events/events-scope.ts +5 -1
  354. package/src/common/events/events.ts +5 -1
  355. package/src/common/events/trigger-proxy.ts +8 -3
  356. package/src/common/events/util.ts +1 -2
  357. package/src/common/logs/logger-proxy.ts +21 -10
  358. package/src/common/logs/request.ts +11 -8
  359. package/src/config.ts +16 -12
  360. package/src/constants.ts +141 -6
  361. package/src/controls-options-manager/constants.ts +5 -0
  362. package/src/controls-options-manager/enums.ts +18 -0
  363. package/src/controls-options-manager/index.ts +278 -0
  364. package/src/controls-options-manager/types.ts +59 -0
  365. package/src/controls-options-manager/util.ts +274 -0
  366. package/src/index.ts +33 -0
  367. package/src/locus-info/controlsUtils.ts +145 -24
  368. package/src/locus-info/fullState.ts +15 -11
  369. package/src/locus-info/hostUtils.ts +4 -3
  370. package/src/locus-info/index.ts +326 -55
  371. package/src/locus-info/infoUtils.ts +12 -4
  372. package/src/locus-info/mediaSharesUtils.ts +4 -4
  373. package/src/locus-info/parser.ts +46 -68
  374. package/src/locus-info/selfUtils.ts +187 -56
  375. package/src/media/index.ts +142 -172
  376. package/src/media/properties.ts +43 -36
  377. package/src/media/util.ts +1 -1
  378. package/src/mediaQualityMetrics/config.ts +380 -378
  379. package/src/meeting/in-meeting-actions.ts +139 -3
  380. package/src/meeting/index.ts +2674 -1543
  381. package/src/meeting/muteState.ts +271 -68
  382. package/src/meeting/request.ts +231 -135
  383. package/src/meeting/request.type.ts +13 -0
  384. package/src/meeting/state.ts +45 -30
  385. package/src/meeting/util.ts +119 -110
  386. package/src/meeting-info/collection.ts +2 -1
  387. package/src/meeting-info/index.ts +32 -30
  388. package/src/meeting-info/meeting-info-v2.ts +201 -113
  389. package/src/meeting-info/request.ts +9 -3
  390. package/src/meeting-info/util.ts +54 -46
  391. package/src/meeting-info/utilv2.ts +70 -55
  392. package/src/meetings/collection.ts +21 -1
  393. package/src/meetings/index.ts +749 -437
  394. package/src/meetings/request.ts +29 -25
  395. package/src/meetings/util.ts +122 -33
  396. package/src/member/index.ts +95 -49
  397. package/src/member/types.ts +24 -0
  398. package/src/member/util.ts +106 -13
  399. package/src/members/collection.ts +8 -1
  400. package/src/members/index.ts +281 -129
  401. package/src/members/request.ts +87 -14
  402. package/src/members/types.ts +28 -0
  403. package/src/members/util.ts +140 -49
  404. package/src/metrics/config.ts +302 -90
  405. package/src/metrics/constants.ts +1 -6
  406. package/src/metrics/index.ts +124 -95
  407. package/src/multistream/mediaRequestManager.ts +203 -45
  408. package/src/multistream/receiveSlot.ts +69 -26
  409. package/src/multistream/receiveSlotManager.ts +62 -38
  410. package/src/multistream/remoteMedia.ts +30 -4
  411. package/src/multistream/remoteMediaGroup.ts +4 -3
  412. package/src/multistream/remoteMediaManager.ts +230 -66
  413. package/src/networkQualityMonitor/index.ts +24 -27
  414. package/src/personal-meeting-room/index.ts +12 -16
  415. package/src/personal-meeting-room/request.ts +10 -3
  416. package/src/personal-meeting-room/util.ts +3 -3
  417. package/src/reachability/index.ts +131 -79
  418. package/src/reachability/request.ts +43 -34
  419. package/src/reactions/constants.ts +4 -0
  420. package/src/reactions/reactions.ts +8 -8
  421. package/src/reactions/reactions.type.ts +31 -5
  422. package/src/reconnection-manager/index.ts +193 -111
  423. package/src/recording-controller/enums.ts +8 -0
  424. package/src/recording-controller/index.ts +315 -0
  425. package/src/recording-controller/util.ts +58 -0
  426. package/src/roap/index.ts +63 -51
  427. package/src/roap/request.ts +86 -53
  428. package/src/roap/turnDiscovery.ts +105 -46
  429. package/src/statsAnalyzer/global.ts +8 -104
  430. package/src/statsAnalyzer/index.ts +624 -376
  431. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  432. package/src/transcription/index.ts +34 -32
  433. package/test/integration/spec/converged-space-meetings.js +177 -0
  434. package/test/integration/spec/journey.js +670 -466
  435. package/test/integration/spec/space-meeting.js +320 -204
  436. package/test/integration/spec/transcription.js +7 -8
  437. package/test/unit/spec/annotation/index.ts +435 -0
  438. package/test/unit/spec/breakouts/breakout.ts +184 -0
  439. package/test/unit/spec/breakouts/collection.ts +15 -0
  440. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  441. package/test/unit/spec/breakouts/events.ts +77 -0
  442. package/test/unit/spec/breakouts/index.ts +1542 -0
  443. package/test/unit/spec/breakouts/request.ts +104 -0
  444. package/test/unit/spec/breakouts/utils.js +72 -0
  445. package/test/unit/spec/common/browser-detection.js +9 -28
  446. package/test/unit/spec/controls-options-manager/index.js +287 -0
  447. package/test/unit/spec/controls-options-manager/util.js +504 -0
  448. package/test/unit/spec/fixture/locus.js +93 -90
  449. package/test/unit/spec/locus-info/controlsUtils.js +289 -32
  450. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  451. package/test/unit/spec/locus-info/index.js +585 -5
  452. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  453. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  454. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  455. package/test/unit/spec/locus-info/parser.js +3 -9
  456. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  457. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  458. package/test/unit/spec/media/index.ts +104 -8
  459. package/test/unit/spec/media/properties.ts +9 -9
  460. package/test/unit/spec/meeting/in-meeting-actions.ts +66 -3
  461. package/test/unit/spec/meeting/index.js +2934 -946
  462. package/test/unit/spec/meeting/muteState.js +368 -70
  463. package/test/unit/spec/meeting/request.js +194 -44
  464. package/test/unit/spec/meeting/utils.js +146 -165
  465. package/test/unit/spec/meeting-info/meetinginfov2.js +333 -74
  466. package/test/unit/spec/meeting-info/request.js +7 -9
  467. package/test/unit/spec/meeting-info/util.js +11 -12
  468. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  469. package/test/unit/spec/meetings/collection.js +15 -1
  470. package/test/unit/spec/meetings/index.js +1052 -329
  471. package/test/unit/spec/meetings/utils.js +163 -14
  472. package/test/unit/spec/member/index.js +24 -1
  473. package/test/unit/spec/member/util.js +383 -32
  474. package/test/unit/spec/members/index.js +402 -54
  475. package/test/unit/spec/members/request.js +76 -20
  476. package/test/unit/spec/members/utils.js +191 -4
  477. package/test/unit/spec/metrics/index.js +104 -20
  478. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  479. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  480. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  481. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  482. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  483. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  484. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  485. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  486. package/test/unit/spec/reachability/index.ts +176 -27
  487. package/test/unit/spec/reachability/request.js +66 -0
  488. package/test/unit/spec/reconnection-manager/index.js +62 -31
  489. package/test/unit/spec/recording-controller/index.js +231 -0
  490. package/test/unit/spec/recording-controller/util.js +102 -0
  491. package/test/unit/spec/roap/index.ts +21 -16
  492. package/test/unit/spec/roap/request.ts +217 -0
  493. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  494. package/test/unit/spec/stats-analyzer/index.js +116 -60
  495. package/test/utils/cmr.js +44 -42
  496. package/test/utils/constants.js +9 -0
  497. package/test/utils/integrationTestUtils.js +64 -0
  498. package/test/utils/testUtils.js +63 -99
  499. package/test/utils/webex-config.js +22 -18
  500. package/test/utils/webex-test-users.js +57 -50
  501. package/tsconfig.json +6 -0
  502. package/dist/media/internal-media-core-wrapper.js +0 -22
  503. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  504. package/dist/meeting/effectsState.js +0 -334
  505. package/dist/meeting/effectsState.js.map +0 -1
  506. package/dist/multistream/multistreamMedia.js +0 -116
  507. package/dist/multistream/multistreamMedia.js.map +0 -1
  508. package/src/index.js +0 -15
  509. package/src/media/internal-media-core-wrapper.ts +0 -9
  510. package/src/meeting/effectsState.ts +0 -211
  511. package/src/multistream/multistreamMedia.ts +0 -92
  512. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -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
+ };
@@ -15,7 +15,9 @@ const MeetingStateMachine = {
15
15
  */
16
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: { remoteAnswered: boolean; remoteDeclined: boolean }) {
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
  /**
@@ -120,12 +131,12 @@ const MeetingStateMachine = {
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
  }
@@ -142,12 +153,12 @@ const MeetingStateMachine = {
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
  }
@@ -159,7 +170,9 @@ const MeetingStateMachine = {
159
170
  * @returns {Boolean}
160
171
  */
161
172
  onEnterError(transition: any, error: 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}`);
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
@@ -167,13 +180,15 @@ const MeetingStateMachine = {
167
180
  * @returns {Boolean}
168
181
  */
169
182
  onAfterTransition(transition: any) {
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
- }
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/media-helpers';
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';
@@ -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())
@@ -144,7 +157,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
144
157
  locusUrl: meeting.locusUrl,
145
158
  selfId: meeting.selfId,
146
159
  correlationId: meeting.correlationId,
147
- phoneUrl
160
+ phoneUrl,
148
161
  };
149
162
 
150
163
  return meeting.meetingRequest
@@ -156,9 +169,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
156
169
  })
157
170
  .catch((err) => {
158
171
  LoggerProxy.logger.error(
159
- `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${
160
- meeting.id
161
- }, error: ${err}`
172
+ `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`
162
173
  );
163
174
 
164
175
  return Promise.reject(err);
@@ -184,7 +195,7 @@ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
184
195
  selfId: meeting.selfId,
185
196
  correlationId: meeting.correlationId,
186
197
  resourceId: meeting.resourceId,
187
- deviceUrl: meeting.deviceUrl
198
+ deviceUrl: meeting.deviceUrl,
188
199
  };
189
200
 
190
201
  const leaveOptions = {...defaultOptions, ...options};
@@ -192,7 +203,8 @@ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
192
203
  return meeting.meetingRequest
193
204
  .leaveMeeting(leaveOptions)
194
205
  .then((response) => {
195
- if (response && response.body && response.body.locus) { // && !options.moveMeeting) {
206
+ if (response && response.body && response.body.locus) {
207
+ // && !options.moveMeeting) {
196
208
  meeting.locusInfo.onFullLocus(response.body.locus);
197
209
  }
198
210
 
@@ -210,9 +222,7 @@ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
210
222
  // 1) on leave clean up the meeting or simply do a sync on the meeting
211
223
  // 2) If the error says meeting is inactive then destroy the meeting object
212
224
  LoggerProxy.logger.error(
213
- `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${
214
- meeting.id
215
- }, error: ${err}`
225
+ `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`
216
226
  );
217
227
 
218
228
  return Promise.reject(err);
@@ -222,21 +232,18 @@ MeetingUtil.declineMeeting = (meeting, reason) =>
222
232
  meeting.meetingRequest.declineMeeting({
223
233
  locusUrl: meeting.locusUrl,
224
234
  deviceUrl: meeting.deviceUrl,
225
- reason
235
+ reason,
226
236
  });
227
237
 
228
- MeetingUtil.isUserInLeftState = (locusInfo) =>
229
- locusInfo.parsedLocus?.self?.state === _LEFT_;
238
+ MeetingUtil.isUserInLeftState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_;
230
239
 
231
- MeetingUtil.isUserInIdleState = (locusInfo) =>
232
- locusInfo.parsedLocus?.self?.state === _IDLE_;
240
+ MeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;
233
241
 
234
- MeetingUtil.isUserInJoinedState = (locusInfo) =>
235
- locusInfo.parsedLocus?.self?.state === _JOINED_;
242
+ MeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;
236
243
 
237
244
  MeetingUtil.isMediaEstablished = (currentMediaStatus) =>
238
- currentMediaStatus && (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
239
-
245
+ currentMediaStatus &&
246
+ (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
240
247
 
241
248
  MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
242
249
  meeting.resourceId = meeting.resourceId || options.resourceId;
@@ -251,7 +258,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
251
258
  if (options.pin) {
252
259
  Metrics.postEvent({
253
260
  event: eventType.PIN_COLLECTED,
254
- meeting
261
+ meeting,
255
262
  });
256
263
  }
257
264
 
@@ -267,7 +274,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
267
274
  if (MeetingUtil.isPinOrGuest(err)) {
268
275
  Metrics.postEvent({
269
276
  event: eventType.PIN_PROMPT,
270
- meeting
277
+ meeting,
271
278
  });
272
279
 
273
280
  // request host pin or non host for unclaimed PMR, start of Scenario C
@@ -281,9 +288,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
281
288
  };
282
289
 
283
290
  MeetingUtil.validateOptions = (options) => {
284
- const {
285
- sendVideo, sendAudio, sendShare, localStream, localShare
286
- } = options;
291
+ const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;
287
292
 
288
293
  if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {
289
294
  return Promise.reject(new ParameterError('please pass valid video streams'));
@@ -341,71 +346,49 @@ MeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>
341
346
  locusInfo.parsedLocus.info &&
342
347
  locusInfo.parsedLocus.info.policy;
343
348
 
344
- MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) => locusInfo?.parsedLocus?.info?.userDisplayHints || [];
345
-
346
- MeetingUtil.canInviteNewParticipants = (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
349
+ MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) =>
350
+ locusInfo?.parsedLocus?.info?.userDisplayHints || [];
347
351
 
348
- MeetingUtil.canAdmitParticipant = (displayHints) => displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
352
+ MeetingUtil.canInviteNewParticipants = (displayHints) =>
353
+ displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
349
354
 
350
- MeetingUtil.canUserLock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
355
+ MeetingUtil.canAdmitParticipant = (displayHints) =>
356
+ displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
351
357
 
352
- MeetingUtil.canUserUnlock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
358
+ MeetingUtil.canUserLock = (displayHints) =>
359
+ displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&
360
+ displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
353
361
 
354
- MeetingUtil.canUserRecord = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);
362
+ MeetingUtil.canUserUnlock = (displayHints) =>
363
+ displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&
364
+ displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
355
365
 
356
- MeetingUtil.canUserPause = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);
357
-
358
- MeetingUtil.canUserResume = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME);
359
-
360
- MeetingUtil.canUserStop = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP);
361
-
362
- MeetingUtil.startRecording = (request, locusUrl, locusInfo) => {
363
- const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
364
-
365
- if (MeetingUtil.canUserRecord(displayHints)) {
366
- return request.recordMeeting({locusUrl, recording: true, paused: false});
367
- }
368
-
369
- return Promise.reject(new PermissionError('Start recording not allowed, due to moderator property.'));
370
- };
371
-
372
- MeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {
373
- const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
374
-
375
- if (MeetingUtil.canUserPause(displayHints)) {
376
- return request.recordMeeting({locusUrl, recording: true, paused: true});
377
- }
378
-
379
- return Promise.reject(new PermissionError('Pause recording not allowed, due to moderator property.'));
380
- };
381
-
382
- MeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {
383
- const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
384
-
385
- if (MeetingUtil.canUserResume(displayHints)) {
386
- return request.recordMeeting({locusUrl, recording: true, paused: false});
387
- }
366
+ MeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);
388
367
 
389
- return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));
390
- };
368
+ MeetingUtil.canUserLowerAllHands = (displayHints) =>
369
+ displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
391
370
 
392
- MeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {
393
- const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
371
+ MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
372
+ displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
394
373
 
395
- if (MeetingUtil.canUserStop(displayHints)) {
396
- return request.recordMeeting({locusUrl, recording: false, paused: false});
397
- }
374
+ MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
375
+ displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||
376
+ displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
398
377
 
399
- return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));
400
- };
378
+ MeetingUtil.canManageBreakout = (displayHints) =>
379
+ displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT);
401
380
 
402
- MeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);
381
+ MeetingUtil.isSuppressBreakoutSupport = (displayHints) =>
382
+ displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT);
403
383
 
404
- MeetingUtil.canUserLowerAllHands = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
384
+ MeetingUtil.canAdmitLobbyToBreakout = (displayHints) =>
385
+ !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT);
405
386
 
406
- MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
387
+ MeetingUtil.isBreakoutPreassignmentsEnabled = (displayHints) =>
388
+ !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS);
407
389
 
408
- 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);
409
392
 
410
393
  MeetingUtil.lockMeeting = (actions, request, locusUrl) => {
411
394
  if (actions && actions.canLock) {
@@ -423,11 +406,11 @@ MeetingUtil.unlockMeeting = (actions, request, locusUrl) => {
423
406
  return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));
424
407
  };
425
408
 
426
- MeetingUtil.handleAudioLogging = (audioTrack) => {
409
+ MeetingUtil.handleAudioLogging = (audioTrack: LocalMicrophoneTrack | null) => {
427
410
  const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';
428
411
 
429
412
  if (audioTrack) {
430
- const settings = audioTrack.getSettings();
413
+ const settings = audioTrack.underlyingTrack.getSettings();
431
414
  const {deviceId} = settings;
432
415
 
433
416
  LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);
@@ -435,11 +418,11 @@ MeetingUtil.handleAudioLogging = (audioTrack) => {
435
418
  }
436
419
  };
437
420
 
438
- MeetingUtil.handleVideoLogging = (videoTrack) => {
421
+ MeetingUtil.handleVideoLogging = (videoTrack: LocalCameraTrack | null) => {
439
422
  const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';
440
423
 
441
424
  if (videoTrack) {
442
- const settings = videoTrack.getSettings();
425
+ const settings = videoTrack.underlyingTrack.getSettings();
443
426
  const {deviceId} = settings;
444
427
 
445
428
  LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);
@@ -477,31 +460,57 @@ MeetingUtil.endMeetingForAll = (meeting) => {
477
460
  .then(() => MeetingUtil.cleanUp(meeting))
478
461
  .catch((err) => {
479
462
  LoggerProxy.logger.error(
480
- `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${
481
- meeting.id
482
- }, error: ${err}`
463
+ `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`
483
464
  );
484
465
 
485
466
  return Promise.reject(err);
486
467
  });
487
468
  };
488
469
 
489
- 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);
490
478
 
491
- MeetingUtil.canStartTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
479
+ MeetingUtil.canStopTranscribing = (displayHints) =>
480
+ displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
492
481
 
493
- MeetingUtil.canStopTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
482
+ MeetingUtil.isClosedCaptionActive = (displayHints) =>
483
+ displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
494
484
 
495
- MeetingUtil.isClosedCaptionActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
485
+ MeetingUtil.isWebexAssistantActive = (displayHints) =>
486
+ displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
496
487
 
497
- MeetingUtil.isWebexAssistantActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
488
+ MeetingUtil.canViewCaptionPanel = (displayHints) =>
489
+ displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
498
490
 
499
- MeetingUtil.canViewCaptionPanel = (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
491
+ MeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>
492
+ displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
500
493
 
501
- MeetingUtil.isRealTimeTranslationEnabled = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
494
+ MeetingUtil.canSelectSpokenLanguages = (displayHints) =>
495
+ displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
502
496
 
503
- MeetingUtil.canSelectSpokenLanguages = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
497
+ MeetingUtil.waitingForOthersToJoin = (displayHints) =>
498
+ displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
499
+
500
+ MeetingUtil.canSendReactions = (originalValue, displayHints) => {
501
+ if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {
502
+ return true;
503
+ }
504
+ if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {
505
+ return false;
506
+ }
507
+
508
+ return originalValue;
509
+ };
510
+ MeetingUtil.canUserRenameSelfAndObserved = (displayHints) =>
511
+ displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED);
504
512
 
505
- MeetingUtil.waitingForOthersToJoin = (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
513
+ MeetingUtil.canUserRenameOthers = (displayHints) =>
514
+ displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS);
506
515
 
507
516
  export default MeetingUtil;
@@ -34,7 +34,8 @@ export default class MeetingInfoCollection extends Collection {
34
34
  return find(
35
35
  // @ts-ignore
36
36
  this.meetingInfos,
37
- (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
38
39
  );
39
40
  }
40
41
  }