@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.21

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 (365) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +116 -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/index.js +226 -0
  8. package/dist/breakouts/index.js.map +1 -0
  9. package/dist/common/browser-detection.js +1 -20
  10. package/dist/common/browser-detection.js.map +1 -1
  11. package/dist/common/collection.js +5 -20
  12. package/dist/common/collection.js.map +1 -1
  13. package/dist/common/config.js +0 -7
  14. package/dist/common/config.js.map +1 -1
  15. package/dist/common/errors/captcha-error.js +10 -24
  16. package/dist/common/errors/captcha-error.js.map +1 -1
  17. package/dist/common/errors/intent-to-join.js +11 -24
  18. package/dist/common/errors/intent-to-join.js.map +1 -1
  19. package/dist/common/errors/join-meeting.js +12 -25
  20. package/dist/common/errors/join-meeting.js.map +1 -1
  21. package/dist/common/errors/media.js +10 -24
  22. package/dist/common/errors/media.js.map +1 -1
  23. package/dist/common/errors/parameter.js +5 -33
  24. package/dist/common/errors/parameter.js.map +1 -1
  25. package/dist/common/errors/password-error.js +10 -24
  26. package/dist/common/errors/password-error.js.map +1 -1
  27. package/dist/common/errors/permission.js +9 -23
  28. package/dist/common/errors/permission.js.map +1 -1
  29. package/dist/common/errors/reconnection-in-progress.js +0 -17
  30. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  31. package/dist/common/errors/reconnection.js +10 -24
  32. package/dist/common/errors/reconnection.js.map +1 -1
  33. package/dist/common/errors/stats.js +10 -24
  34. package/dist/common/errors/stats.js.map +1 -1
  35. package/dist/common/errors/webex-errors.js +6 -41
  36. package/dist/common/errors/webex-errors.js.map +1 -1
  37. package/dist/common/errors/webex-meetings-error.js +5 -25
  38. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  39. package/dist/common/events/events-scope.js +0 -22
  40. package/dist/common/events/events-scope.js.map +1 -1
  41. package/dist/common/events/events.js +0 -23
  42. package/dist/common/events/events.js.map +1 -1
  43. package/dist/common/events/trigger-proxy.js +0 -12
  44. package/dist/common/events/trigger-proxy.js.map +1 -1
  45. package/dist/common/events/util.js +0 -15
  46. package/dist/common/events/util.js.map +1 -1
  47. package/dist/common/logs/logger-config.js +0 -4
  48. package/dist/common/logs/logger-config.js.map +1 -1
  49. package/dist/common/logs/logger-proxy.js +1 -8
  50. package/dist/common/logs/logger-proxy.js.map +1 -1
  51. package/dist/common/logs/request.js +37 -60
  52. package/dist/common/logs/request.js.map +1 -1
  53. package/dist/common/queue.js +4 -14
  54. package/dist/common/queue.js.map +1 -1
  55. package/dist/config.js +6 -6
  56. package/dist/config.js.map +1 -1
  57. package/dist/constants.js +88 -46
  58. package/dist/constants.js.map +1 -1
  59. package/dist/index.js +4 -18
  60. package/dist/index.js.map +1 -1
  61. package/dist/locus-info/controlsUtils.js +12 -29
  62. package/dist/locus-info/controlsUtils.js.map +1 -1
  63. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  64. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  65. package/dist/locus-info/fullState.js +0 -15
  66. package/dist/locus-info/fullState.js.map +1 -1
  67. package/dist/locus-info/hostUtils.js +4 -12
  68. package/dist/locus-info/hostUtils.js.map +1 -1
  69. package/dist/locus-info/index.js +184 -190
  70. package/dist/locus-info/index.js.map +1 -1
  71. package/dist/locus-info/infoUtils.js +3 -37
  72. package/dist/locus-info/infoUtils.js.map +1 -1
  73. package/dist/locus-info/mediaSharesUtils.js +12 -38
  74. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  75. package/dist/locus-info/parser.js +92 -118
  76. package/dist/locus-info/parser.js.map +1 -1
  77. package/dist/locus-info/selfUtils.js +34 -91
  78. package/dist/locus-info/selfUtils.js.map +1 -1
  79. package/dist/media/index.js +67 -111
  80. package/dist/media/index.js.map +1 -1
  81. package/dist/media/properties.js +80 -114
  82. package/dist/media/properties.js.map +1 -1
  83. package/dist/media/util.js +2 -9
  84. package/dist/media/util.js.map +1 -1
  85. package/dist/mediaQualityMetrics/config.js +10 -12
  86. package/dist/mediaQualityMetrics/config.js.map +1 -1
  87. package/dist/meeting/effectsState.js +125 -190
  88. package/dist/meeting/effectsState.js.map +1 -1
  89. package/dist/meeting/in-meeting-actions.js +5 -14
  90. package/dist/meeting/in-meeting-actions.js.map +1 -1
  91. package/dist/meeting/index.js +1692 -1925
  92. package/dist/meeting/index.js.map +1 -1
  93. package/dist/meeting/muteState.js +36 -77
  94. package/dist/meeting/muteState.js.map +1 -1
  95. package/dist/meeting/request.js +224 -230
  96. package/dist/meeting/request.js.map +1 -1
  97. package/dist/meeting/request.type.js +7 -0
  98. package/dist/meeting/request.type.js.map +1 -0
  99. package/dist/meeting/state.js +21 -31
  100. package/dist/meeting/state.js.map +1 -1
  101. package/dist/meeting/util.js +43 -215
  102. package/dist/meeting/util.js.map +1 -1
  103. package/dist/meeting-info/collection.js +6 -25
  104. package/dist/meeting-info/collection.js.map +1 -1
  105. package/dist/meeting-info/index.js +14 -32
  106. package/dist/meeting-info/index.js.map +1 -1
  107. package/dist/meeting-info/meeting-info-v2.js +193 -268
  108. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  109. package/dist/meeting-info/request.js +3 -15
  110. package/dist/meeting-info/request.js.map +1 -1
  111. package/dist/meeting-info/util.js +98 -183
  112. package/dist/meeting-info/util.js.map +1 -1
  113. package/dist/meeting-info/utilv2.js +137 -228
  114. package/dist/meeting-info/utilv2.js.map +1 -1
  115. package/dist/meetings/collection.js +5 -20
  116. package/dist/meetings/collection.js.map +1 -1
  117. package/dist/meetings/index.js +490 -560
  118. package/dist/meetings/index.js.map +1 -1
  119. package/dist/meetings/request.js +24 -41
  120. package/dist/meetings/request.js.map +1 -1
  121. package/dist/meetings/util.js +99 -155
  122. package/dist/meetings/util.js.map +1 -1
  123. package/dist/member/index.js +78 -86
  124. package/dist/member/index.js.map +1 -1
  125. package/dist/member/util.js +31 -68
  126. package/dist/member/util.js.map +1 -1
  127. package/dist/members/collection.js +3 -12
  128. package/dist/members/collection.js.map +1 -1
  129. package/dist/members/index.js +93 -200
  130. package/dist/members/index.js.map +1 -1
  131. package/dist/members/request.js +16 -39
  132. package/dist/members/request.js.map +1 -1
  133. package/dist/members/util.js +9 -38
  134. package/dist/members/util.js.map +1 -1
  135. package/dist/metrics/config.js +0 -2
  136. package/dist/metrics/config.js.map +1 -1
  137. package/dist/metrics/constants.js +1 -2
  138. package/dist/metrics/constants.js.map +1 -1
  139. package/dist/metrics/index.js +55 -135
  140. package/dist/metrics/index.js.map +1 -1
  141. package/dist/multistream/mediaRequestManager.js +57 -32
  142. package/dist/multistream/mediaRequestManager.js.map +1 -1
  143. package/dist/multistream/multistreamMedia.js +15 -21
  144. package/dist/multistream/multistreamMedia.js.map +1 -1
  145. package/dist/multistream/receiveSlot.js +10 -50
  146. package/dist/multistream/receiveSlot.js.map +1 -1
  147. package/dist/multistream/receiveSlotManager.js +45 -82
  148. package/dist/multistream/receiveSlotManager.js.map +1 -1
  149. package/dist/multistream/remoteMedia.js +18 -58
  150. package/dist/multistream/remoteMedia.js.map +1 -1
  151. package/dist/multistream/remoteMediaGroup.js +6 -40
  152. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  153. package/dist/multistream/remoteMediaManager.js +362 -416
  154. package/dist/multistream/remoteMediaManager.js.map +1 -1
  155. package/dist/networkQualityMonitor/index.js +36 -57
  156. package/dist/networkQualityMonitor/index.js.map +1 -1
  157. package/dist/personal-meeting-room/index.js +21 -45
  158. package/dist/personal-meeting-room/index.js.map +1 -1
  159. package/dist/personal-meeting-room/request.js +1 -31
  160. package/dist/personal-meeting-room/request.js.map +1 -1
  161. package/dist/personal-meeting-room/util.js +0 -13
  162. package/dist/personal-meeting-room/util.js.map +1 -1
  163. package/dist/reachability/index.js +138 -182
  164. package/dist/reachability/index.js.map +1 -1
  165. package/dist/reachability/request.js +3 -18
  166. package/dist/reachability/request.js.map +1 -1
  167. package/dist/reactions/constants.js +13 -0
  168. package/dist/reactions/constants.js.map +1 -0
  169. package/dist/reactions/reactions.js +109 -0
  170. package/dist/reactions/reactions.js.map +1 -0
  171. package/dist/reactions/reactions.type.js +36 -0
  172. package/dist/reactions/reactions.type.js.map +1 -0
  173. package/dist/reconnection-manager/index.js +322 -455
  174. package/dist/reconnection-manager/index.js.map +1 -1
  175. package/dist/recording-controller/enums.js +17 -0
  176. package/dist/recording-controller/enums.js.map +1 -0
  177. package/dist/recording-controller/index.js +343 -0
  178. package/dist/recording-controller/index.js.map +1 -0
  179. package/dist/recording-controller/util.js +63 -0
  180. package/dist/recording-controller/util.js.map +1 -0
  181. package/dist/roap/index.js +39 -64
  182. package/dist/roap/index.js.map +1 -1
  183. package/dist/roap/request.js +94 -113
  184. package/dist/roap/request.js.map +1 -1
  185. package/dist/roap/turnDiscovery.js +85 -94
  186. package/dist/roap/turnDiscovery.js.map +1 -1
  187. package/dist/statsAnalyzer/global.js +0 -2
  188. package/dist/statsAnalyzer/global.js.map +1 -1
  189. package/dist/statsAnalyzer/index.js +85 -175
  190. package/dist/statsAnalyzer/index.js.map +1 -1
  191. package/dist/statsAnalyzer/mqaUtil.js +72 -53
  192. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  193. package/dist/transcription/index.js +22 -47
  194. package/dist/transcription/index.js.map +1 -1
  195. package/internal-README.md +7 -6
  196. package/package.json +25 -20
  197. package/src/breakouts/README.md +190 -0
  198. package/src/breakouts/breakout.ts +110 -0
  199. package/src/breakouts/collection.ts +19 -0
  200. package/src/breakouts/index.ts +225 -0
  201. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  202. package/src/common/collection.ts +9 -7
  203. package/src/common/{config.js → config.ts} +1 -1
  204. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  205. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  206. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  207. package/src/common/errors/{media.js → media.ts} +11 -7
  208. package/src/common/errors/parameter.ts +11 -7
  209. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  210. package/src/common/errors/{permission.js → permission.ts} +10 -6
  211. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  212. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  213. package/src/common/errors/{stats.js → stats.ts} +11 -7
  214. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  215. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  216. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  217. package/src/common/events/{events.js → events.ts} +5 -1
  218. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  219. package/src/common/events/{util.js → util.ts} +2 -3
  220. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  221. package/src/common/logs/logger-proxy.ts +44 -0
  222. package/src/common/logs/{request.js → request.ts} +22 -9
  223. package/src/common/queue.ts +1 -2
  224. package/src/{config.js → config.ts} +17 -12
  225. package/src/constants.ts +40 -1
  226. package/src/index.js +2 -1
  227. package/src/locus-info/controlsUtils.ts +114 -0
  228. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  229. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  230. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  231. package/src/locus-info/{index.js → index.ts} +148 -64
  232. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  233. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  234. package/src/locus-info/{parser.js → parser.ts} +67 -79
  235. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  236. package/src/media/{index.js → index.ts} +181 -131
  237. package/src/media/{properties.js → properties.ts} +47 -28
  238. package/src/media/{util.js → util.ts} +2 -2
  239. package/src/mediaQualityMetrics/{config.js → config.ts} +46 -46
  240. package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
  241. package/src/meeting/in-meeting-actions.ts +15 -3
  242. package/src/meeting/{index.js → index.ts} +2263 -1427
  243. package/src/meeting/{muteState.js → muteState.ts} +78 -42
  244. package/src/meeting/{request.js → request.ts} +292 -142
  245. package/src/meeting/request.type.ts +13 -0
  246. package/src/meeting/{state.js → state.ts} +50 -35
  247. package/src/meeting/{util.js → util.ts} +112 -115
  248. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  249. package/src/meeting-info/{index.js → index.ts} +42 -36
  250. package/src/meeting-info/meeting-info-v2.ts +273 -0
  251. package/src/meeting-info/{request.js → request.ts} +14 -4
  252. package/src/meeting-info/{util.js → util.ts} +60 -51
  253. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  254. package/src/meetings/{collection.js → collection.ts} +6 -3
  255. package/src/meetings/index.ts +1159 -0
  256. package/src/meetings/{request.js → request.ts} +32 -25
  257. package/src/meetings/{util.js → util.ts} +34 -32
  258. package/src/member/{index.js → index.ts} +102 -56
  259. package/src/member/{util.js → util.ts} +52 -25
  260. package/src/members/{collection.js → collection.ts} +2 -2
  261. package/src/members/{index.js → index.ts} +219 -142
  262. package/src/members/{request.js → request.ts} +60 -16
  263. package/src/members/{util.js → util.ts} +50 -48
  264. package/src/metrics/{config.js → config.ts} +254 -83
  265. package/src/metrics/{constants.js → constants.ts} +0 -2
  266. package/src/metrics/{index.js → index.ts} +106 -74
  267. package/src/multistream/mediaRequestManager.ts +81 -15
  268. package/src/multistream/multistreamMedia.ts +5 -0
  269. package/src/multistream/receiveSlot.ts +18 -12
  270. package/src/multistream/receiveSlotManager.ts +23 -21
  271. package/src/multistream/remoteMedia.ts +15 -5
  272. package/src/multistream/remoteMediaGroup.ts +4 -3
  273. package/src/multistream/remoteMediaManager.ts +153 -37
  274. package/src/networkQualityMonitor/{index.js → index.ts} +37 -25
  275. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  276. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  277. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  278. package/src/reachability/{index.js → index.ts} +99 -83
  279. package/src/reachability/request.ts +39 -33
  280. package/src/reactions/constants.ts +4 -0
  281. package/src/reactions/reactions.ts +104 -0
  282. package/src/reactions/reactions.type.ts +62 -0
  283. package/src/reconnection-manager/{index.js → index.ts} +195 -102
  284. package/src/recording-controller/enums.ts +8 -0
  285. package/src/recording-controller/index.ts +315 -0
  286. package/src/recording-controller/util.ts +58 -0
  287. package/src/roap/{index.js → index.ts} +73 -56
  288. package/src/roap/request.ts +157 -0
  289. package/src/roap/turnDiscovery.ts +77 -37
  290. package/src/statsAnalyzer/{global.js → global.ts} +30 -33
  291. package/src/statsAnalyzer/{index.js → index.ts} +468 -192
  292. package/src/statsAnalyzer/mqaUtil.ts +290 -0
  293. package/src/transcription/{index.js → index.ts} +46 -39
  294. package/test/integration/spec/journey.js +664 -463
  295. package/test/integration/spec/space-meeting.js +320 -206
  296. package/test/integration/spec/transcription.js +7 -8
  297. package/test/unit/spec/breakouts/breakout.ts +119 -0
  298. package/test/unit/spec/breakouts/collection.ts +15 -0
  299. package/test/unit/spec/breakouts/index.ts +293 -0
  300. package/test/unit/spec/common/browser-detection.js +9 -28
  301. package/test/unit/spec/fixture/locus.js +92 -90
  302. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  303. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  304. package/test/unit/spec/locus-info/index.js +104 -2
  305. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  306. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  307. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  308. package/test/unit/spec/locus-info/parser.js +3 -9
  309. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  310. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  311. package/test/unit/spec/media/index.ts +31 -47
  312. package/test/unit/spec/media/properties.ts +9 -9
  313. package/test/unit/spec/meeting/effectsState.js +39 -45
  314. package/test/unit/spec/meeting/in-meeting-actions.ts +5 -2
  315. package/test/unit/spec/meeting/index.js +2017 -742
  316. package/test/unit/spec/meeting/muteState.js +42 -33
  317. package/test/unit/spec/meeting/request.js +115 -44
  318. package/test/unit/spec/meeting/utils.js +104 -171
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  320. package/test/unit/spec/meeting-info/request.js +7 -9
  321. package/test/unit/spec/meeting-info/util.js +11 -12
  322. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  323. package/test/unit/spec/meetings/collection.js +1 -1
  324. package/test/unit/spec/meetings/index.js +439 -257
  325. package/test/unit/spec/meetings/utils.js +14 -12
  326. package/test/unit/spec/member/index.js +0 -1
  327. package/test/unit/spec/member/util.js +31 -7
  328. package/test/unit/spec/members/index.js +104 -54
  329. package/test/unit/spec/members/request.js +29 -20
  330. package/test/unit/spec/members/utils.js +8 -5
  331. package/test/unit/spec/metrics/index.js +16 -21
  332. package/test/unit/spec/multistream/mediaRequestManager.ts +316 -50
  333. package/test/unit/spec/multistream/receiveSlot.ts +6 -6
  334. package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
  335. package/test/unit/spec/multistream/remoteMedia.ts +10 -2
  336. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  337. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  338. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  339. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  340. package/test/unit/spec/reachability/index.ts +58 -26
  341. package/test/unit/spec/reconnection-manager/index.js +102 -9
  342. package/test/unit/spec/recording-controller/index.js +231 -0
  343. package/test/unit/spec/recording-controller/util.js +102 -0
  344. package/test/unit/spec/roap/index.ts +2 -1
  345. package/test/unit/spec/roap/request.ts +114 -0
  346. package/test/unit/spec/roap/turnDiscovery.ts +64 -45
  347. package/test/unit/spec/stats-analyzer/index.js +27 -22
  348. package/test/utils/cmr.js +44 -42
  349. package/test/utils/testUtils.js +83 -74
  350. package/test/utils/webex-config.js +18 -18
  351. package/test/utils/webex-test-users.js +54 -50
  352. package/tsconfig.json +6 -0
  353. package/dist/media/internal-media-core-wrapper.js +0 -22
  354. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  355. package/dist/peer-connection-manager/util.js +0 -124
  356. package/dist/peer-connection-manager/util.js.map +0 -1
  357. package/src/common/logs/logger-proxy.js +0 -33
  358. package/src/locus-info/controlsUtils.js +0 -102
  359. package/src/media/internal-media-core-wrapper.ts +0 -9
  360. package/src/meeting-info/meeting-info-v2.js +0 -255
  361. package/src/meetings/index.js +0 -1015
  362. package/src/peer-connection-manager/util.ts +0 -117
  363. package/src/roap/request.js +0 -127
  364. package/src/statsAnalyzer/mqaUtil.js +0 -173
  365. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
@@ -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;
@@ -5,13 +5,15 @@ import Metrics from '../metrics';
5
5
  import {eventType, trigger} from '../metrics/config';
6
6
  import Media from '../media';
7
7
  import LoggerProxy from '../common/logs/logger-proxy';
8
- import {INTENT_TO_JOIN,
8
+ import {
9
+ INTENT_TO_JOIN,
9
10
  _LEFT_,
10
11
  _IDLE_,
11
12
  _JOINED_,
12
13
  PASSWORD_STATUS,
13
14
  DISPLAY_HINTS,
14
- FULL_STATE} from '../constants';
15
+ FULL_STATE,
16
+ } from '../constants';
15
17
  import IntentToJoinError from '../common/errors/intent-to-join';
16
18
  import JoinMeetingError from '../common/errors/join-meeting';
17
19
  import ParameterError from '../common/errors/parameter';
@@ -19,10 +21,10 @@ import PermissionError from '../common/errors/permission';
19
21
  import PasswordError from '../common/errors/password-error';
20
22
  import CaptchaError from '../common/errors/captcha-error';
21
23
 
22
- const MeetingUtil = {};
24
+ const MeetingUtil: any = {};
23
25
 
24
26
  MeetingUtil.parseLocusJoin = (response) => {
25
- const parsed = {};
27
+ const parsed: any = {};
26
28
 
27
29
  // First todo: add check for existance
28
30
  parsed.locus = response.body.locus;
@@ -48,30 +50,35 @@ MeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {
48
50
  const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);
49
51
 
50
52
  if (isEmpty(localMedias)) {
51
- return Promise.reject(new ParameterError('You need a media id on the meeting to change remote audio.'));
53
+ return Promise.reject(
54
+ new ParameterError('You need a media id on the meeting to change remote audio.')
55
+ );
52
56
  }
53
57
 
54
58
  Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});
55
59
 
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});
60
+ return meeting.meetingRequest
61
+ .remoteAudioVideoToggle({
62
+ locusUrl: meeting.locusUrl,
63
+ selfId: meeting.selfId,
64
+ localMedias,
65
+ deviceUrl: meeting.deviceUrl,
66
+ correlationId: meeting.correlationId,
67
+ preferTranscoding: !meeting.isMultistream,
68
+ })
69
+ .then((response) => {
70
+ Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});
65
71
 
66
- return response.body.locus;
67
- });
72
+ return response.body.locus;
73
+ });
68
74
  };
69
75
 
70
76
  MeetingUtil.hasOwner = (info) => info && info.owner;
71
77
 
72
78
  MeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;
73
79
 
74
- MeetingUtil.isPinOrGuest = (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);
80
+ MeetingUtil.isPinOrGuest = (err) =>
81
+ err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);
75
82
 
76
83
  MeetingUtil.joinMeeting = (meeting, options) => {
77
84
  if (!meeting) {
@@ -97,7 +104,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
97
104
  pin: options.pin,
98
105
  moveToResource: options.moveToResource,
99
106
  preferTranscoding: !meeting.isMultistream,
100
- asResourceOccupant: options.asResourceOccupant
107
+ asResourceOccupant: options.asResourceOccupant,
108
+ breakoutsSupported: options.breakoutsSupported,
101
109
  })
102
110
  .then((res) => {
103
111
  Metrics.postEvent({
@@ -107,8 +115,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
107
115
  trigger: trigger.LOCI_UPDATE,
108
116
  locus: res.body.locus,
109
117
  mediaConnections: res.body.mediaConnections,
110
- trackingId: res.headers.trackingid
111
- }
118
+ trackingId: res.headers.trackingid,
119
+ },
112
120
  });
113
121
 
114
122
  return MeetingUtil.parseLocusJoin(res);
@@ -116,8 +124,12 @@ MeetingUtil.joinMeeting = (meeting, options) => {
116
124
  };
117
125
 
118
126
  MeetingUtil.cleanUp = (meeting) => {
127
+ meeting.breakouts.cleanUp();
128
+
119
129
  // make sure we send last metrics before we close the peerconnection
120
- const stopStatsAnalyzer = (meeting.statsAnalyzer) ? meeting.statsAnalyzer.stopAnalyzer() : Promise.resolve();
130
+ const stopStatsAnalyzer = meeting.statsAnalyzer
131
+ ? meeting.statsAnalyzer.stopAnalyzer()
132
+ : Promise.resolve();
121
133
 
122
134
  return stopStatsAnalyzer
123
135
  .then(() => meeting.closeLocalStream())
@@ -131,7 +143,8 @@ MeetingUtil.cleanUp = (meeting) => {
131
143
  meeting.unsetPeerConnections();
132
144
  meeting.reconnectionManager.cleanUp();
133
145
  })
134
- .then(() => meeting.stopKeepAlive());
146
+ .then(() => meeting.stopKeepAlive())
147
+ .then(() => meeting.updateLLMConnection());
135
148
  };
136
149
 
137
150
  MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
@@ -143,7 +156,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
143
156
  locusUrl: meeting.locusUrl,
144
157
  selfId: meeting.selfId,
145
158
  correlationId: meeting.correlationId,
146
- phoneUrl
159
+ phoneUrl,
147
160
  };
148
161
 
149
162
  return meeting.meetingRequest
@@ -155,9 +168,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
155
168
  })
156
169
  .catch((err) => {
157
170
  LoggerProxy.logger.error(
158
- `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${
159
- meeting.id
160
- }, error: ${err}`
171
+ `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`
161
172
  );
162
173
 
163
174
  return Promise.reject(err);
@@ -168,7 +179,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
168
179
  // if you explicity want it not to leave on resource id, pass
169
180
  // {resourceId: null}
170
181
  // TODO: chris, you can modify this however you want
171
- MeetingUtil.leaveMeeting = (meeting, options = {}) => {
182
+ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
172
183
  if (meeting.meetingState === FULL_STATE.INACTIVE) {
173
184
  // TODO: clean up if the meeting is already inactive
174
185
  return Promise.reject(new MeetingNotActiveError());
@@ -183,7 +194,7 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
183
194
  selfId: meeting.selfId,
184
195
  correlationId: meeting.correlationId,
185
196
  resourceId: meeting.resourceId,
186
- deviceUrl: meeting.deviceUrl
197
+ deviceUrl: meeting.deviceUrl,
187
198
  };
188
199
 
189
200
  const leaveOptions = {...defaultOptions, ...options};
@@ -191,7 +202,8 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
191
202
  return meeting.meetingRequest
192
203
  .leaveMeeting(leaveOptions)
193
204
  .then((response) => {
194
- if (response && response.body && response.body.locus) { // && !options.moveMeeting) {
205
+ if (response && response.body && response.body.locus) {
206
+ // && !options.moveMeeting) {
195
207
  meeting.locusInfo.onFullLocus(response.body.locus);
196
208
  }
197
209
 
@@ -209,9 +221,7 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
209
221
  // 1) on leave clean up the meeting or simply do a sync on the meeting
210
222
  // 2) If the error says meeting is inactive then destroy the meeting object
211
223
  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}`
224
+ `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`
215
225
  );
216
226
 
217
227
  return Promise.reject(err);
@@ -221,23 +231,20 @@ MeetingUtil.declineMeeting = (meeting, reason) =>
221
231
  meeting.meetingRequest.declineMeeting({
222
232
  locusUrl: meeting.locusUrl,
223
233
  deviceUrl: meeting.deviceUrl,
224
- reason
234
+ reason,
225
235
  });
226
236
 
227
- MeetingUtil.isUserInLeftState = (locusInfo) =>
228
- locusInfo.parsedLocus?.self?.state === _LEFT_;
237
+ MeetingUtil.isUserInLeftState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_;
229
238
 
230
- MeetingUtil.isUserInIdleState = (locusInfo) =>
231
- locusInfo.parsedLocus?.self?.state === _IDLE_;
239
+ MeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;
232
240
 
233
- MeetingUtil.isUserInJoinedState = (locusInfo) =>
234
- locusInfo.parsedLocus?.self?.state === _JOINED_;
241
+ MeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;
235
242
 
236
243
  MeetingUtil.isMediaEstablished = (currentMediaStatus) =>
237
- currentMediaStatus && (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
238
-
244
+ currentMediaStatus &&
245
+ (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
239
246
 
240
- MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
247
+ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
241
248
  meeting.resourceId = meeting.resourceId || options.resourceId;
242
249
 
243
250
  if (meeting.requiredCaptcha) {
@@ -250,7 +257,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
250
257
  if (options.pin) {
251
258
  Metrics.postEvent({
252
259
  event: eventType.PIN_COLLECTED,
253
- meeting
260
+ meeting,
254
261
  });
255
262
  }
256
263
 
@@ -266,7 +273,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
266
273
  if (MeetingUtil.isPinOrGuest(err)) {
267
274
  Metrics.postEvent({
268
275
  event: eventType.PIN_PROMPT,
269
- meeting
276
+ meeting,
270
277
  });
271
278
 
272
279
  // request host pin or non host for unclaimed PMR, start of Scenario C
@@ -280,9 +287,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
280
287
  };
281
288
 
282
289
  MeetingUtil.validateOptions = (options) => {
283
- const {
284
- sendVideo, sendAudio, sendShare, localStream, localShare
285
- } = options;
290
+ const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;
286
291
 
287
292
  if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {
288
293
  return Promise.reject(new ParameterError('please pass valid video streams'));
@@ -340,71 +345,34 @@ MeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>
340
345
  locusInfo.parsedLocus.info &&
341
346
  locusInfo.parsedLocus.info.policy;
342
347
 
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);
348
+ MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) =>
349
+ locusInfo?.parsedLocus?.info?.userDisplayHints || [];
350
350
 
351
- MeetingUtil.canUserUnlock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
351
+ MeetingUtil.canInviteNewParticipants = (displayHints) =>
352
+ displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
352
353
 
353
- MeetingUtil.canUserRecord = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);
354
+ MeetingUtil.canAdmitParticipant = (displayHints) =>
355
+ displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
354
356
 
355
- MeetingUtil.canUserPause = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);
357
+ MeetingUtil.canUserLock = (displayHints) =>
358
+ displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&
359
+ displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
356
360
 
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
- };
361
+ MeetingUtil.canUserUnlock = (displayHints) =>
362
+ displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&
363
+ displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
400
364
 
401
365
  MeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);
402
366
 
403
- MeetingUtil.canUserLowerAllHands = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
367
+ MeetingUtil.canUserLowerAllHands = (displayHints) =>
368
+ displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
404
369
 
405
- MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
370
+ MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
371
+ displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
406
372
 
407
- MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) => displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) || displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
373
+ MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
374
+ displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||
375
+ displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
408
376
 
409
377
  MeetingUtil.lockMeeting = (actions, request, locusUrl) => {
410
378
  if (actions && actions.canLock) {
@@ -476,31 +444,60 @@ MeetingUtil.endMeetingForAll = (meeting) => {
476
444
  .then(() => MeetingUtil.cleanUp(meeting))
477
445
  .catch((err) => {
478
446
  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}`
447
+ `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`
482
448
  );
483
449
 
484
450
  return Promise.reject(err);
485
451
  });
486
452
  };
487
453
 
488
- MeetingUtil.canEnableClosedCaption = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START);
454
+ MeetingUtil.canEnableClosedCaption = (displayHints) =>
455
+ displayHints.includes(DISPLAY_HINTS.CAPTION_START);
456
+
457
+ MeetingUtil.canStartTranscribing = (displayHints) =>
458
+ displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
459
+
460
+ MeetingUtil.canStopTranscribing = (displayHints) =>
461
+ displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
462
+
463
+ MeetingUtil.isClosedCaptionActive = (displayHints) =>
464
+ displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
465
+
466
+ MeetingUtil.isWebexAssistantActive = (displayHints) =>
467
+ displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
489
468
 
490
- MeetingUtil.canStartTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
469
+ MeetingUtil.canViewCaptionPanel = (displayHints) =>
470
+ displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
491
471
 
492
- MeetingUtil.canStopTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
472
+ MeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>
473
+ displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
493
474
 
494
- MeetingUtil.isClosedCaptionActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
475
+ MeetingUtil.canSelectSpokenLanguages = (displayHints) =>
476
+ displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
495
477
 
496
- MeetingUtil.isWebexAssistantActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
478
+ MeetingUtil.waitingForOthersToJoin = (displayHints) =>
479
+ displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
497
480
 
498
- MeetingUtil.canViewCaptionPanel = (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
481
+ MeetingUtil.canEnableReactions = (originalValue, displayHints) => {
482
+ if (displayHints.includes(DISPLAY_HINTS.ENABLE_REACTIONS)) {
483
+ return true;
484
+ }
485
+ if (displayHints.includes(DISPLAY_HINTS.DISABLE_REACTIONS)) {
486
+ return false;
487
+ }
499
488
 
500
- MeetingUtil.isRealTimeTranslationEnabled = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
489
+ return originalValue;
490
+ };
501
491
 
502
- MeetingUtil.canSelectSpokenLanguages = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
492
+ MeetingUtil.canSendReactions = (originalValue, displayHints) => {
493
+ if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {
494
+ return true;
495
+ }
496
+ if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {
497
+ return false;
498
+ }
503
499
 
504
- MeetingUtil.waitingForOthersToJoin = (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
500
+ return originalValue;
501
+ };
505
502
 
506
503
  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
  }