@webex/plugin-meetings 3.0.0-beta.3 → 3.0.0-beta.300

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 (601) hide show
  1. package/README.md +46 -8
  2. package/UPGRADING.md +9 -9
  3. package/browsers.js +19 -24
  4. package/dist/annotation/annotation.types.js +7 -0
  5. package/dist/annotation/annotation.types.js.map +1 -0
  6. package/dist/annotation/constants.js +49 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +342 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +216 -0
  11. package/dist/breakouts/breakout.js.map +1 -0
  12. package/dist/breakouts/collection.js +23 -0
  13. package/dist/breakouts/collection.js.map +1 -0
  14. package/dist/breakouts/edit-lock-error.js +52 -0
  15. package/dist/breakouts/edit-lock-error.js.map +1 -0
  16. package/dist/breakouts/events.js +45 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +1048 -0
  19. package/dist/breakouts/index.js.map +1 -0
  20. package/dist/breakouts/request.js +78 -0
  21. package/dist/breakouts/request.js.map +1 -0
  22. package/dist/breakouts/utils.js +67 -0
  23. package/dist/breakouts/utils.js.map +1 -0
  24. package/dist/common/browser-detection.js +1 -20
  25. package/dist/common/browser-detection.js.map +1 -1
  26. package/dist/common/collection.js +5 -20
  27. package/dist/common/collection.js.map +1 -1
  28. package/dist/common/config.js +0 -7
  29. package/dist/common/config.js.map +1 -1
  30. package/dist/common/errors/captcha-error.js +10 -24
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +11 -24
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +12 -25
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +10 -24
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/no-meeting-info.js +51 -0
  39. package/dist/common/errors/no-meeting-info.js.map +1 -0
  40. package/dist/common/errors/parameter.js +5 -33
  41. package/dist/common/errors/parameter.js.map +1 -1
  42. package/dist/common/errors/password-error.js +10 -24
  43. package/dist/common/errors/password-error.js.map +1 -1
  44. package/dist/common/errors/permission.js +9 -23
  45. package/dist/common/errors/permission.js.map +1 -1
  46. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  47. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  48. package/dist/common/errors/reconnection-in-progress.js +0 -17
  49. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  50. package/dist/common/errors/reconnection.js +10 -24
  51. package/dist/common/errors/reconnection.js.map +1 -1
  52. package/dist/common/errors/stats.js +10 -24
  53. package/dist/common/errors/stats.js.map +1 -1
  54. package/dist/common/errors/webex-errors.js +54 -48
  55. package/dist/common/errors/webex-errors.js.map +1 -1
  56. package/dist/common/errors/webex-meetings-error.js +5 -25
  57. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  58. package/dist/common/events/events-scope.js +0 -22
  59. package/dist/common/events/events-scope.js.map +1 -1
  60. package/dist/common/events/events.js +0 -23
  61. package/dist/common/events/events.js.map +1 -1
  62. package/dist/common/events/trigger-proxy.js +0 -12
  63. package/dist/common/events/trigger-proxy.js.map +1 -1
  64. package/dist/common/events/util.js +0 -15
  65. package/dist/common/events/util.js.map +1 -1
  66. package/dist/common/logs/logger-config.js +0 -4
  67. package/dist/common/logs/logger-config.js.map +1 -1
  68. package/dist/common/logs/logger-proxy.js +1 -8
  69. package/dist/common/logs/logger-proxy.js.map +1 -1
  70. package/dist/common/logs/request.js +41 -60
  71. package/dist/common/logs/request.js.map +1 -1
  72. package/dist/common/queue.js +28 -23
  73. package/dist/common/queue.js.map +1 -1
  74. package/dist/config.js +9 -15
  75. package/dist/config.js.map +1 -1
  76. package/dist/constants.js +315 -68
  77. package/dist/constants.js.map +1 -1
  78. package/dist/controls-options-manager/constants.js +14 -0
  79. package/dist/controls-options-manager/constants.js.map +1 -0
  80. package/dist/controls-options-manager/enums.js +27 -0
  81. package/dist/controls-options-manager/enums.js.map +1 -0
  82. package/dist/controls-options-manager/index.js +297 -0
  83. package/dist/controls-options-manager/index.js.map +1 -0
  84. package/dist/controls-options-manager/types.js +7 -0
  85. package/dist/controls-options-manager/types.js.map +1 -0
  86. package/dist/controls-options-manager/util.js +319 -0
  87. package/dist/controls-options-manager/util.js.map +1 -0
  88. package/dist/index.js +114 -17
  89. package/dist/index.js.map +1 -1
  90. package/dist/interpretation/collection.js +23 -0
  91. package/dist/interpretation/collection.js.map +1 -0
  92. package/dist/interpretation/index.js +366 -0
  93. package/dist/interpretation/index.js.map +1 -0
  94. package/dist/interpretation/siLanguage.js +25 -0
  95. package/dist/interpretation/siLanguage.js.map +1 -0
  96. package/dist/locus-info/controlsUtils.js +101 -29
  97. package/dist/locus-info/controlsUtils.js.map +1 -1
  98. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  99. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  100. package/dist/locus-info/fullState.js +0 -15
  101. package/dist/locus-info/fullState.js.map +1 -1
  102. package/dist/locus-info/hostUtils.js +4 -12
  103. package/dist/locus-info/hostUtils.js.map +1 -1
  104. package/dist/locus-info/index.js +561 -246
  105. package/dist/locus-info/index.js.map +1 -1
  106. package/dist/locus-info/infoUtils.js +10 -38
  107. package/dist/locus-info/infoUtils.js.map +1 -1
  108. package/dist/locus-info/mediaSharesUtils.js +68 -38
  109. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  110. package/dist/locus-info/parser.js +314 -163
  111. package/dist/locus-info/parser.js.map +1 -1
  112. package/dist/locus-info/selfUtils.js +110 -92
  113. package/dist/locus-info/selfUtils.js.map +1 -1
  114. package/dist/media/index.js +103 -231
  115. package/dist/media/index.js.map +1 -1
  116. package/dist/media/properties.js +137 -222
  117. package/dist/media/properties.js.map +1 -1
  118. package/dist/media/util.js +2 -9
  119. package/dist/media/util.js.map +1 -1
  120. package/dist/mediaQualityMetrics/config.js +505 -495
  121. package/dist/mediaQualityMetrics/config.js.map +1 -1
  122. package/dist/meeting/in-meeting-actions.js +93 -14
  123. package/dist/meeting/in-meeting-actions.js.map +1 -1
  124. package/dist/meeting/index.js +4624 -3740
  125. package/dist/meeting/index.js.map +1 -1
  126. package/dist/meeting/locusMediaRequest.js +292 -0
  127. package/dist/meeting/locusMediaRequest.js.map +1 -0
  128. package/dist/meeting/muteState.js +249 -184
  129. package/dist/meeting/muteState.js.map +1 -1
  130. package/dist/meeting/request.js +400 -346
  131. package/dist/meeting/request.js.map +1 -1
  132. package/dist/meeting/request.type.js +7 -0
  133. package/dist/meeting/request.type.js.map +1 -0
  134. package/dist/meeting/state.js +21 -31
  135. package/dist/meeting/state.js.map +1 -1
  136. package/dist/meeting/util.js +598 -586
  137. package/dist/meeting/util.js.map +1 -1
  138. package/dist/meeting-info/collection.js +6 -25
  139. package/dist/meeting-info/collection.js.map +1 -1
  140. package/dist/meeting-info/index.js +87 -39
  141. package/dist/meeting-info/index.js.map +1 -1
  142. package/dist/meeting-info/meeting-info-v2.js +349 -283
  143. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  144. package/dist/meeting-info/request.js +3 -15
  145. package/dist/meeting-info/request.js.map +1 -1
  146. package/dist/meeting-info/util.js +98 -183
  147. package/dist/meeting-info/util.js.map +1 -1
  148. package/dist/meeting-info/utilv2.js +143 -234
  149. package/dist/meeting-info/utilv2.js.map +1 -1
  150. package/dist/meetings/collection.js +26 -19
  151. package/dist/meetings/collection.js.map +1 -1
  152. package/dist/meetings/index.js +813 -596
  153. package/dist/meetings/index.js.map +1 -1
  154. package/dist/meetings/meetings.types.js +7 -0
  155. package/dist/meetings/meetings.types.js.map +1 -0
  156. package/dist/meetings/request.js +26 -41
  157. package/dist/meetings/request.js.map +1 -1
  158. package/dist/meetings/util.js +183 -156
  159. package/dist/meetings/util.js.map +1 -1
  160. package/dist/member/index.js +135 -85
  161. package/dist/member/index.js.map +1 -1
  162. package/dist/member/types.js +25 -0
  163. package/dist/member/types.js.map +1 -0
  164. package/dist/member/util.js +158 -88
  165. package/dist/member/util.js.map +1 -1
  166. package/dist/members/collection.js +13 -12
  167. package/dist/members/collection.js.map +1 -1
  168. package/dist/members/index.js +194 -204
  169. package/dist/members/index.js.map +1 -1
  170. package/dist/members/request.js +113 -68
  171. package/dist/members/request.js.map +1 -1
  172. package/dist/members/types.js +15 -0
  173. package/dist/members/types.js.map +1 -0
  174. package/dist/members/util.js +324 -259
  175. package/dist/members/util.js.map +1 -1
  176. package/dist/metrics/constants.js +14 -7
  177. package/dist/metrics/constants.js.map +1 -1
  178. package/dist/metrics/index.js +11 -558
  179. package/dist/metrics/index.js.map +1 -1
  180. package/dist/multistream/mediaRequestManager.js +263 -50
  181. package/dist/multistream/mediaRequestManager.js.map +1 -1
  182. package/dist/multistream/receiveSlot.js +58 -65
  183. package/dist/multistream/receiveSlot.js.map +1 -1
  184. package/dist/multistream/receiveSlotManager.js +76 -95
  185. package/dist/multistream/receiveSlotManager.js.map +1 -1
  186. package/dist/multistream/remoteMedia.js +62 -76
  187. package/dist/multistream/remoteMedia.js.map +1 -1
  188. package/dist/multistream/remoteMediaGroup.js +66 -43
  189. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  190. package/dist/multistream/remoteMediaManager.js +536 -439
  191. package/dist/multistream/remoteMediaManager.js.map +1 -1
  192. package/dist/multistream/sendSlotManager.js +233 -0
  193. package/dist/multistream/sendSlotManager.js.map +1 -0
  194. package/dist/networkQualityMonitor/index.js +40 -59
  195. package/dist/networkQualityMonitor/index.js.map +1 -1
  196. package/dist/personal-meeting-room/index.js +21 -45
  197. package/dist/personal-meeting-room/index.js.map +1 -1
  198. package/dist/personal-meeting-room/request.js +1 -31
  199. package/dist/personal-meeting-room/request.js.map +1 -1
  200. package/dist/personal-meeting-room/util.js +0 -13
  201. package/dist/personal-meeting-room/util.js.map +1 -1
  202. package/dist/reachability/index.js +322 -200
  203. package/dist/reachability/index.js.map +1 -1
  204. package/dist/reachability/request.js +20 -26
  205. package/dist/reachability/request.js.map +1 -1
  206. package/dist/reactions/constants.js +13 -0
  207. package/dist/reactions/constants.js.map +1 -0
  208. package/dist/reactions/reactions.js +109 -0
  209. package/dist/reactions/reactions.js.map +1 -0
  210. package/dist/reactions/reactions.type.js +36 -0
  211. package/dist/reactions/reactions.type.js.map +1 -0
  212. package/dist/reconnection-manager/index.js +388 -476
  213. package/dist/reconnection-manager/index.js.map +1 -1
  214. package/dist/recording-controller/enums.js +17 -0
  215. package/dist/recording-controller/enums.js.map +1 -0
  216. package/dist/recording-controller/index.js +362 -0
  217. package/dist/recording-controller/index.js.map +1 -0
  218. package/dist/recording-controller/util.js +64 -0
  219. package/dist/recording-controller/util.js.map +1 -0
  220. package/dist/roap/index.js +99 -94
  221. package/dist/roap/index.js.map +1 -1
  222. package/dist/roap/request.js +131 -135
  223. package/dist/roap/request.js.map +1 -1
  224. package/dist/roap/turnDiscovery.js +151 -101
  225. package/dist/roap/turnDiscovery.js.map +1 -1
  226. package/dist/rtcMetrics/constants.js +12 -0
  227. package/dist/rtcMetrics/constants.js.map +1 -0
  228. package/dist/rtcMetrics/index.js +117 -0
  229. package/dist/rtcMetrics/index.js.map +1 -0
  230. package/dist/statsAnalyzer/global.js +1 -95
  231. package/dist/statsAnalyzer/global.js.map +1 -1
  232. package/dist/statsAnalyzer/index.js +416 -497
  233. package/dist/statsAnalyzer/index.js.map +1 -1
  234. package/dist/statsAnalyzer/mqaUtil.js +145 -88
  235. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  236. package/dist/transcription/index.js +22 -47
  237. package/dist/transcription/index.js.map +1 -1
  238. package/dist/types/annotation/annotation.types.d.ts +42 -0
  239. package/dist/types/annotation/constants.d.ts +31 -0
  240. package/dist/types/annotation/index.d.ts +117 -0
  241. package/dist/types/breakouts/breakout.d.ts +8 -0
  242. package/dist/types/breakouts/collection.d.ts +5 -0
  243. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  244. package/dist/types/breakouts/events.d.ts +8 -0
  245. package/dist/types/breakouts/index.d.ts +5 -0
  246. package/dist/types/breakouts/request.d.ts +22 -0
  247. package/dist/types/breakouts/utils.d.ts +15 -0
  248. package/dist/types/common/browser-detection.d.ts +9 -0
  249. package/dist/types/common/collection.d.ts +48 -0
  250. package/dist/types/common/config.d.ts +2 -0
  251. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  252. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  253. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  254. package/dist/types/common/errors/media.d.ts +15 -0
  255. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  256. package/dist/types/common/errors/parameter.d.ts +15 -0
  257. package/dist/types/common/errors/password-error.d.ts +15 -0
  258. package/dist/types/common/errors/permission.d.ts +14 -0
  259. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  260. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  261. package/dist/types/common/errors/reconnection.d.ts +15 -0
  262. package/dist/types/common/errors/stats.d.ts +15 -0
  263. package/dist/types/common/errors/webex-errors.d.ts +93 -0
  264. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  265. package/dist/types/common/events/events-scope.d.ts +17 -0
  266. package/dist/types/common/events/events.d.ts +12 -0
  267. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  268. package/dist/types/common/events/util.d.ts +2 -0
  269. package/dist/types/common/logs/logger-config.d.ts +2 -0
  270. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  271. package/dist/types/common/logs/request.d.ts +36 -0
  272. package/dist/types/common/queue.d.ts +34 -0
  273. package/dist/types/config.d.ts +71 -0
  274. package/dist/types/constants.d.ts +1066 -0
  275. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  276. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  277. package/dist/types/controls-options-manager/index.d.ts +136 -0
  278. package/dist/types/controls-options-manager/types.d.ts +43 -0
  279. package/dist/types/controls-options-manager/util.d.ts +1 -0
  280. package/dist/types/index.d.ts +7 -0
  281. package/dist/types/interpretation/collection.d.ts +5 -0
  282. package/dist/types/interpretation/index.d.ts +5 -0
  283. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  284. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  285. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  286. package/dist/types/locus-info/fullState.d.ts +2 -0
  287. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  288. package/dist/types/locus-info/index.d.ts +322 -0
  289. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  290. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  291. package/dist/types/locus-info/parser.d.ts +273 -0
  292. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  293. package/dist/types/media/index.d.ts +34 -0
  294. package/dist/types/media/properties.d.ts +93 -0
  295. package/dist/types/media/util.d.ts +2 -0
  296. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  297. package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
  298. package/dist/types/meeting/index.d.ts +1676 -0
  299. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  300. package/dist/types/meeting/muteState.d.ts +184 -0
  301. package/dist/types/meeting/request.d.ts +290 -0
  302. package/dist/types/meeting/request.type.d.ts +11 -0
  303. package/dist/types/meeting/state.d.ts +9 -0
  304. package/dist/types/meeting/util.d.ts +102 -0
  305. package/dist/types/meeting-info/collection.d.ts +20 -0
  306. package/dist/types/meeting-info/index.d.ts +69 -0
  307. package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -0
  308. package/dist/types/meeting-info/request.d.ts +22 -0
  309. package/dist/types/meeting-info/util.d.ts +2 -0
  310. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  311. package/dist/types/meetings/collection.d.ts +31 -0
  312. package/dist/types/meetings/index.d.ts +367 -0
  313. package/dist/types/meetings/meetings.types.d.ts +4 -0
  314. package/dist/types/meetings/request.d.ts +27 -0
  315. package/dist/types/meetings/util.d.ts +18 -0
  316. package/dist/types/member/index.d.ts +160 -0
  317. package/dist/types/member/types.d.ts +32 -0
  318. package/dist/types/member/util.d.ts +2 -0
  319. package/dist/types/members/collection.d.ts +29 -0
  320. package/dist/types/members/index.d.ts +353 -0
  321. package/dist/types/members/request.d.ts +114 -0
  322. package/dist/types/members/types.d.ts +25 -0
  323. package/dist/types/members/util.d.ts +215 -0
  324. package/dist/types/metrics/constants.d.ts +65 -0
  325. package/dist/types/metrics/index.d.ts +45 -0
  326. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  327. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  328. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  329. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  330. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  331. package/dist/types/multistream/remoteMediaManager.d.ts +285 -0
  332. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  333. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  334. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  335. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  336. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  337. package/dist/types/reachability/index.d.ts +194 -0
  338. package/dist/types/reachability/request.d.ts +39 -0
  339. package/dist/types/reactions/constants.d.ts +3 -0
  340. package/dist/types/reactions/reactions.d.ts +4 -0
  341. package/dist/types/reactions/reactions.type.d.ts +52 -0
  342. package/dist/types/reconnection-manager/index.d.ts +126 -0
  343. package/dist/types/recording-controller/enums.d.ts +7 -0
  344. package/dist/types/recording-controller/index.d.ts +207 -0
  345. package/dist/types/recording-controller/util.d.ts +14 -0
  346. package/dist/types/roap/index.d.ts +78 -0
  347. package/dist/types/roap/request.d.ts +39 -0
  348. package/dist/types/roap/turnDiscovery.d.ts +92 -0
  349. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  350. package/dist/types/rtcMetrics/index.d.ts +47 -0
  351. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  352. package/dist/types/statsAnalyzer/index.d.ts +201 -0
  353. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  354. package/dist/types/transcription/index.d.ts +64 -0
  355. package/dist/types/webinar/collection.d.ts +16 -0
  356. package/dist/types/webinar/index.d.ts +5 -0
  357. package/dist/webinar/collection.js +44 -0
  358. package/dist/webinar/collection.js.map +1 -0
  359. package/dist/webinar/index.js +69 -0
  360. package/dist/webinar/index.js.map +1 -0
  361. package/internal-README.md +7 -6
  362. package/package.json +29 -21
  363. package/src/annotation/annotation.types.ts +50 -0
  364. package/src/annotation/constants.ts +36 -0
  365. package/src/annotation/index.ts +328 -0
  366. package/src/breakouts/README.md +220 -0
  367. package/src/breakouts/breakout.ts +188 -0
  368. package/src/breakouts/collection.ts +19 -0
  369. package/src/breakouts/edit-lock-error.ts +25 -0
  370. package/src/breakouts/events.ts +56 -0
  371. package/src/breakouts/index.ts +925 -0
  372. package/src/breakouts/request.ts +55 -0
  373. package/src/breakouts/utils.ts +57 -0
  374. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  375. package/src/common/collection.ts +9 -7
  376. package/src/common/{config.js → config.ts} +1 -1
  377. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  378. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  379. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  380. package/src/common/errors/{media.js → media.ts} +11 -7
  381. package/src/common/errors/no-meeting-info.ts +24 -0
  382. package/src/common/errors/parameter.ts +11 -7
  383. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  384. package/src/common/errors/{permission.js → permission.ts} +10 -6
  385. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  386. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  387. package/src/common/errors/{stats.js → stats.ts} +11 -7
  388. package/src/common/errors/{webex-errors.js → webex-errors.ts} +51 -8
  389. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  390. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  391. package/src/common/events/{events.js → events.ts} +5 -1
  392. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  393. package/src/common/events/{util.js → util.ts} +2 -3
  394. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  395. package/src/common/logs/logger-proxy.ts +44 -0
  396. package/src/common/logs/{request.js → request.ts} +26 -9
  397. package/src/common/queue.ts +22 -9
  398. package/src/{config.js → config.ts} +18 -19
  399. package/src/constants.ts +260 -22
  400. package/src/controls-options-manager/constants.ts +5 -0
  401. package/src/controls-options-manager/enums.ts +18 -0
  402. package/src/controls-options-manager/index.ts +278 -0
  403. package/src/controls-options-manager/types.ts +59 -0
  404. package/src/controls-options-manager/util.ts +300 -0
  405. package/src/index.ts +40 -0
  406. package/src/interpretation/README.md +60 -0
  407. package/src/interpretation/collection.ts +19 -0
  408. package/src/interpretation/index.ts +332 -0
  409. package/src/interpretation/siLanguage.ts +18 -0
  410. package/src/locus-info/controlsUtils.ts +222 -0
  411. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  412. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  413. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  414. package/src/locus-info/{index.js → index.ts} +557 -119
  415. package/src/locus-info/{infoUtils.js → infoUtils.ts} +29 -10
  416. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +81 -17
  417. package/src/locus-info/{parser.js → parser.ts} +303 -104
  418. package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
  419. package/src/media/index.ts +458 -0
  420. package/src/media/properties.ts +283 -0
  421. package/src/media/{util.js → util.ts} +2 -2
  422. package/src/mediaQualityMetrics/config.ts +384 -0
  423. package/src/meeting/in-meeting-actions.ts +191 -3
  424. package/src/meeting/index.ts +7882 -0
  425. package/src/meeting/locusMediaRequest.ts +313 -0
  426. package/src/meeting/muteState.ts +451 -0
  427. package/src/meeting/{request.js → request.ts} +421 -220
  428. package/src/meeting/request.type.ts +13 -0
  429. package/src/meeting/{state.js → state.ts} +50 -35
  430. package/src/meeting/util.ts +697 -0
  431. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  432. package/src/meeting-info/index.ts +210 -0
  433. package/src/meeting-info/meeting-info-v2.ts +429 -0
  434. package/src/meeting-info/{request.js → request.ts} +14 -4
  435. package/src/meeting-info/{util.js → util.ts} +60 -51
  436. package/src/meeting-info/{utilv2.js → utilv2.ts} +78 -71
  437. package/src/meetings/{collection.js → collection.ts} +26 -3
  438. package/src/meetings/index.ts +1470 -0
  439. package/src/meetings/meetings.types.ts +12 -0
  440. package/src/meetings/{request.js → request.ts} +34 -25
  441. package/src/meetings/{util.js → util.ts} +132 -37
  442. package/src/member/{index.js → index.ts} +160 -56
  443. package/src/member/types.ts +38 -0
  444. package/src/member/util.ts +397 -0
  445. package/src/members/{collection.js → collection.ts} +10 -2
  446. package/src/members/{index.js → index.ts} +351 -146
  447. package/src/members/request.ts +255 -0
  448. package/src/members/types.ts +29 -0
  449. package/src/members/util.ts +353 -0
  450. package/src/metrics/{constants.js → constants.ts} +12 -6
  451. package/src/metrics/index.ts +73 -0
  452. package/src/multistream/mediaRequestManager.ts +337 -63
  453. package/src/multistream/receiveSlot.ts +69 -26
  454. package/src/multistream/receiveSlotManager.ts +66 -42
  455. package/src/multistream/remoteMedia.ts +40 -5
  456. package/src/multistream/remoteMediaGroup.ts +63 -3
  457. package/src/multistream/remoteMediaManager.ts +300 -66
  458. package/src/multistream/sendSlotManager.ts +170 -0
  459. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  460. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  461. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  462. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  463. package/src/reachability/index.ts +671 -0
  464. package/src/reachability/request.ts +50 -35
  465. package/src/reactions/constants.ts +4 -0
  466. package/src/reactions/reactions.ts +104 -0
  467. package/src/reactions/reactions.type.ts +62 -0
  468. package/src/reconnection-manager/{index.js → index.ts} +258 -138
  469. package/src/recording-controller/enums.ts +8 -0
  470. package/src/recording-controller/index.ts +332 -0
  471. package/src/recording-controller/util.ts +75 -0
  472. package/src/roap/{index.js → index.ts} +127 -79
  473. package/src/roap/request.ts +153 -0
  474. package/src/roap/turnDiscovery.ts +109 -47
  475. package/src/rtcMetrics/constants.ts +3 -0
  476. package/src/rtcMetrics/index.ts +100 -0
  477. package/src/statsAnalyzer/global.ts +37 -0
  478. package/src/statsAnalyzer/index.ts +1250 -0
  479. package/src/statsAnalyzer/mqaUtil.ts +292 -0
  480. package/src/transcription/{index.js → index.ts} +46 -39
  481. package/src/webinar/collection.ts +31 -0
  482. package/src/webinar/index.ts +62 -0
  483. package/test/integration/spec/converged-space-meetings.js +233 -0
  484. package/test/integration/spec/journey.js +790 -530
  485. package/test/integration/spec/space-meeting.js +391 -204
  486. package/test/integration/spec/transcription.js +7 -8
  487. package/test/unit/spec/annotation/index.ts +418 -0
  488. package/test/unit/spec/breakouts/breakout.ts +237 -0
  489. package/test/unit/spec/breakouts/collection.ts +15 -0
  490. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  491. package/test/unit/spec/breakouts/events.ts +89 -0
  492. package/test/unit/spec/breakouts/index.ts +1790 -0
  493. package/test/unit/spec/breakouts/request.ts +104 -0
  494. package/test/unit/spec/breakouts/utils.js +72 -0
  495. package/test/unit/spec/common/browser-detection.js +9 -28
  496. package/test/unit/spec/common/queue.js +31 -2
  497. package/test/unit/spec/controls-options-manager/index.js +287 -0
  498. package/test/unit/spec/controls-options-manager/util.js +582 -0
  499. package/test/unit/spec/fixture/locus.js +93 -90
  500. package/test/unit/spec/interpretation/collection.ts +15 -0
  501. package/test/unit/spec/interpretation/index.ts +589 -0
  502. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  503. package/test/unit/spec/locus-info/controlsUtils.js +325 -32
  504. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  505. package/test/unit/spec/locus-info/index.js +1390 -17
  506. package/test/unit/spec/locus-info/infoUtils.js +71 -40
  507. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  508. package/test/unit/spec/locus-info/lib/SeqCmp.json +529 -685
  509. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  510. package/test/unit/spec/locus-info/parser.js +119 -44
  511. package/test/unit/spec/locus-info/selfConstant.js +120 -103
  512. package/test/unit/spec/locus-info/selfUtils.js +296 -12
  513. package/test/unit/spec/media/index.ts +128 -77
  514. package/test/unit/spec/media/properties.ts +11 -11
  515. package/test/unit/spec/meeting/in-meeting-actions.ts +92 -3
  516. package/test/unit/spec/meeting/index.js +7433 -2752
  517. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  518. package/test/unit/spec/meeting/muteState.js +420 -211
  519. package/test/unit/spec/meeting/request.js +545 -79
  520. package/test/unit/spec/meeting/utils.js +722 -174
  521. package/test/unit/spec/meeting-info/index.js +300 -0
  522. package/test/unit/spec/meeting-info/meetinginfov2.js +624 -76
  523. package/test/unit/spec/meeting-info/request.js +7 -9
  524. package/test/unit/spec/meeting-info/util.js +11 -12
  525. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  526. package/test/unit/spec/meetings/collection.js +15 -1
  527. package/test/unit/spec/meetings/index.js +1365 -377
  528. package/test/unit/spec/meetings/utils.js +216 -14
  529. package/test/unit/spec/member/index.js +61 -7
  530. package/test/unit/spec/member/util.js +526 -26
  531. package/test/unit/spec/members/index.js +536 -55
  532. package/test/unit/spec/members/request.js +228 -40
  533. package/test/unit/spec/members/utils.js +217 -4
  534. package/test/unit/spec/metrics/index.js +12 -66
  535. package/test/unit/spec/multistream/mediaRequestManager.ts +1012 -109
  536. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  537. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  538. package/test/unit/spec/multistream/remoteMedia.ts +40 -2
  539. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  540. package/test/unit/spec/multistream/remoteMediaManager.ts +738 -65
  541. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  542. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  543. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  544. package/test/unit/spec/reachability/index.ts +598 -26
  545. package/test/unit/spec/reachability/request.js +68 -0
  546. package/test/unit/spec/reconnection-manager/index.js +181 -12
  547. package/test/unit/spec/recording-controller/index.js +307 -0
  548. package/test/unit/spec/recording-controller/util.js +229 -0
  549. package/test/unit/spec/roap/index.ts +179 -64
  550. package/test/unit/spec/roap/request.ts +232 -0
  551. package/test/unit/spec/roap/turnDiscovery.ts +123 -58
  552. package/test/unit/spec/rtcMetrics/index.ts +73 -0
  553. package/test/unit/spec/stats-analyzer/index.js +199 -60
  554. package/test/unit/spec/webinar/collection.ts +13 -0
  555. package/test/unit/spec/webinar/index.ts +60 -0
  556. package/test/utils/cmr.js +44 -42
  557. package/test/utils/constants.js +9 -0
  558. package/test/utils/integrationTestUtils.js +46 -0
  559. package/test/utils/testUtils.js +63 -99
  560. package/test/utils/webex-config.js +22 -18
  561. package/test/utils/webex-test-users.js +57 -50
  562. package/tsconfig.json +6 -0
  563. package/dist/media/internal-media-core-wrapper.js +0 -22
  564. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  565. package/dist/meeting/effectsState.js +0 -327
  566. package/dist/meeting/effectsState.js.map +0 -1
  567. package/dist/metrics/config.js +0 -301
  568. package/dist/metrics/config.js.map +0 -1
  569. package/dist/multistream/multistreamMedia.js +0 -116
  570. package/dist/multistream/multistreamMedia.js.map +0 -1
  571. package/dist/peer-connection-manager/util.js +0 -124
  572. package/dist/peer-connection-manager/util.js.map +0 -1
  573. package/src/common/logs/logger-proxy.js +0 -33
  574. package/src/index.js +0 -15
  575. package/src/locus-info/controlsUtils.js +0 -102
  576. package/src/media/index.js +0 -459
  577. package/src/media/internal-media-core-wrapper.ts +0 -9
  578. package/src/media/properties.js +0 -289
  579. package/src/mediaQualityMetrics/config.js +0 -382
  580. package/src/meeting/effectsState.js +0 -205
  581. package/src/meeting/index.js +0 -6284
  582. package/src/meeting/muteState.js +0 -318
  583. package/src/meeting/util.js +0 -506
  584. package/src/meeting-info/index.js +0 -131
  585. package/src/meeting-info/meeting-info-v2.js +0 -255
  586. package/src/meetings/index.js +0 -1015
  587. package/src/member/util.js +0 -254
  588. package/src/members/request.js +0 -131
  589. package/src/members/util.js +0 -258
  590. package/src/metrics/config.js +0 -324
  591. package/src/metrics/index.js +0 -530
  592. package/src/multistream/multistreamMedia.ts +0 -92
  593. package/src/peer-connection-manager/util.ts +0 -117
  594. package/src/reachability/index.js +0 -464
  595. package/src/roap/request.js +0 -127
  596. package/src/statsAnalyzer/global.js +0 -133
  597. package/src/statsAnalyzer/index.js +0 -1006
  598. package/src/statsAnalyzer/mqaUtil.js +0 -173
  599. package/test/unit/spec/meeting/effectsState.js +0 -291
  600. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  601. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -0,0 +1,60 @@
1
+ # Simultaneous Interpretation
2
+
3
+ Simultaneous Interpretation (SI) feature provides support for interpretation of in-meeting audio. The host will specify the target languages at schedule time and assign language pairs to the desired interpreters. Each interpreter will use their client to indicate the language spoken at any point in time. For example, Alice might be translating between English and French. When an English speaker is talking in the meeting, Alice will use her client to indicate she is speaking French. When a French speaker is talking, Alice will indicate that she is speaking English. The host’s client will display the status of each interpreter including the current interpretation direction.
4
+
5
+ ### Structure
6
+ SI languages are available in the siLanguages collection. List the languages which current meeting support to do simultaneous interpretation. Can subscribe the language's voice channel which you want to listen from the list.
7
+
8
+ ```javascript
9
+ interpretation.siLanguages;
10
+ ```
11
+ ### Attendee functionality
12
+ ```javascript
13
+ //subscribe this si language's voice channel
14
+ siLanguage.subscribe();
15
+
16
+ //unsubscribe this si language's voice channel
17
+ siLanguage.unsubscribe();
18
+ ```
19
+ ### Host functionality
20
+ The following are methods available to the host of a meeting.
21
+
22
+ ```javascript
23
+ //get the support list of interpretation languages. only host is allowed to call it
24
+ interpretation.getSupportLanguages();
25
+
26
+ //get the interpreters list of the meeting
27
+ interpretation.getInterpreters();
28
+
29
+ //update the interpreters list, input parameter is an array of interpreters
30
+ interpretation.updateInterpreters([{
31
+ sourceLanguage : 'fr-FR',
32
+ targetLanguage : 'zh-ZH',
33
+ usingResource : {
34
+ id : 'a96747e2-1fc6-41d3-9ac7-512dd9478b6e'
35
+ },
36
+ order : 0
37
+ },]);
38
+ ```
39
+
40
+ ### Interpreter functionality
41
+
42
+ The following are methods available to the interpreters of a meeting.
43
+
44
+ ```javascript
45
+ //Change direction of interpretation for an interpreter participant
46
+ interpretation.changeDirection();
47
+
48
+ //Handoff between interpreters, input paramerter participantId is the target to handoff
49
+ interpretation.handoffInterpreter(participantId);
50
+
51
+ //in-active interpreter request to handoff to self
52
+ interpretation.requestHandoff();
53
+
54
+ //accept the request of handoff, input paramter url is from last approval event which generate by server side
55
+ interpretation.acceptRequest(url);
56
+
57
+ //decline the request of handoff, input paramter url is from last approval event which generate by server side
58
+ interpretation.declineRequest(url);
59
+
60
+ ```
@@ -0,0 +1,19 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import AmpCollection from 'ampersand-collection';
6
+
7
+ import {MEETINGS} from '../constants';
8
+
9
+ import SILanguage from './siLanguage';
10
+
11
+ const SILanguageCollection = AmpCollection.extend({
12
+ model: SILanguage,
13
+
14
+ namespace: MEETINGS,
15
+
16
+ mainIndex: 'languageName',
17
+ });
18
+
19
+ export default SILanguageCollection;
@@ -0,0 +1,332 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+ import {WebexPlugin} from '@webex/webex-core';
5
+ import LoggerProxy from '../common/logs/logger-proxy';
6
+ import {HTTP_VERBS, INTERPRETATION, MEETINGS} from '../constants';
7
+
8
+ import SILanguageCollection from './collection';
9
+
10
+ /**
11
+ * @class SimultaneousInterpretation
12
+ */
13
+ const SimultaneousInterpretation = WebexPlugin.extend({
14
+ namespace: MEETINGS,
15
+ collections: {
16
+ siLanguages: SILanguageCollection,
17
+ },
18
+
19
+ props: {
20
+ locusUrl: 'string', // appears current meeting's locus url
21
+ approvalUrl: 'string', // appears current meeting's approval url for handoff between interpreters
22
+ originalLanguage: 'string', // appears current meeting's original language
23
+ sourceLanguage: 'string', // appears self interpreter's source language
24
+ targetLanguage: 'string', // appears self interpreter's target language
25
+ receiveLanguage: 'string', // appears self's receive language
26
+ order: 'number', // appears the order of self as interpreter
27
+ isActive: 'boolean', // appears self is interpreter and is active
28
+ selfParticipantId: 'string', // appears the self participant id
29
+ canManageInterpreters: 'boolean', // appears the ability to manage interpreters
30
+ supportLanguages: 'array', // appears the support languages
31
+ meetingSIEnabled: 'boolean', // appears the meeting support SI feature
32
+ hostSIEnabled: 'boolean', // appears the meeting host/interpreter feature of SI enabled
33
+ selfIsInterpreter: 'boolean', // current user is interpreter or not
34
+ },
35
+ derived: {
36
+ shouldQuerySupportLanguages: {
37
+ cache: false,
38
+ deps: ['canManageInterpreters', 'hostSIEnabled'],
39
+ /**
40
+ * Returns should query support languages or not
41
+ * @returns {boolean}
42
+ */
43
+ fn() {
44
+ return !!(this.canManageInterpreters && this.hostSIEnabled);
45
+ },
46
+ },
47
+ },
48
+ /**
49
+ * initialize for interpretation
50
+ * @returns {void}
51
+ */
52
+ initialize() {
53
+ this.listenTo(this, 'change:shouldQuerySupportLanguages', () => {
54
+ if (this.canManageInterpreters && !this.supportLanguages) {
55
+ this.querySupportLanguages();
56
+ }
57
+ });
58
+ this.listenToHandoffRequests();
59
+ },
60
+
61
+ /**
62
+ * Calls this to clean up listeners
63
+ * @returns {void}
64
+ */
65
+ cleanUp() {
66
+ this.stopListening();
67
+ },
68
+ /**
69
+ * Update the current locus url of the meeting
70
+ * @param {string} locusUrl // locus url
71
+ * @returns {void}
72
+ */
73
+ locusUrlUpdate(locusUrl) {
74
+ this.set('locusUrl', locusUrl);
75
+ },
76
+ /**
77
+ * Update the approval url for handoff
78
+ * @param {string} approvalUrl // approval url
79
+ * @returns {void}
80
+ */
81
+ approvalUrlUpdate(approvalUrl) {
82
+ this.set('approvalUrl', approvalUrl);
83
+ },
84
+ /**
85
+ * Update whether self has capability to manage interpreters (only host can manage it)
86
+ * @param {boolean} canManageInterpreters
87
+ * @returns {void}
88
+ */
89
+ updateCanManageInterpreters(canManageInterpreters) {
90
+ this.set('canManageInterpreters', canManageInterpreters);
91
+ },
92
+ /**
93
+ * Update whether the meeting's host si is enabled or not
94
+ * @param {boolean} hostSIEnabled
95
+ * @returns {void}
96
+ */
97
+ updateHostSIEnabled(hostSIEnabled) {
98
+ this.set('hostSIEnabled', hostSIEnabled);
99
+ },
100
+
101
+ /**
102
+ * Update whether the meeting support SI feature or not from meeting info
103
+ * @param {boolean} meetingSIEnabled
104
+ * @param {boolean} selfIsInterpreter
105
+ * @returns {void}
106
+ */
107
+ updateMeetingSIEnabled(meetingSIEnabled: boolean, selfIsInterpreter): void {
108
+ this.set('meetingSIEnabled', meetingSIEnabled);
109
+ this.set('selfIsInterpreter', selfIsInterpreter);
110
+ },
111
+
112
+ /**
113
+ * Update the interpretation languages channels which user can choose to subscribe
114
+ * @param {Object} interpretation
115
+ * @returns {void}
116
+ */
117
+ updateInterpretation(interpretation) {
118
+ this.siLanguages.set(interpretation?.siLanguages || []);
119
+ },
120
+ /**
121
+ * Update self's interpretation information (self is interpreter)
122
+ * @param {Object} interpretation
123
+ * @param {String} selfParticipantId
124
+ * @returns {void}
125
+ */
126
+ updateSelfInterpretation({interpretation, selfParticipantId}) {
127
+ const {originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage} =
128
+ interpretation || {};
129
+ this.set({originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage});
130
+ this.set('selfParticipantId', selfParticipantId);
131
+ },
132
+ /**
133
+ * query interpretation languages
134
+ * @returns {Promise}
135
+ */
136
+ querySupportLanguages() {
137
+ return this.request({
138
+ method: HTTP_VERBS.GET,
139
+ uri: `${this.locusUrl}/languages/interpretation`,
140
+ })
141
+ .then((result) => {
142
+ this.set('supportLanguages', result.body?.siLanguages);
143
+ this.trigger(INTERPRETATION.EVENTS.SUPPORT_LANGUAGES_UPDATE);
144
+ })
145
+ .catch((error) => {
146
+ LoggerProxy.logger.error('Meeting:interpretation#querySupportLanguages failed', error);
147
+ throw error;
148
+ });
149
+ },
150
+ /**
151
+ * get interpreters of the meeting
152
+ * @returns {Promise}
153
+ */
154
+ getInterpreters() {
155
+ return this.request({
156
+ method: HTTP_VERBS.GET,
157
+ uri: `${this.locusUrl}/interpretation/interpreters`,
158
+ }).catch((error) => {
159
+ LoggerProxy.logger.error('Meeting:interpretation#getInterpreters failed', error);
160
+ throw error;
161
+ });
162
+ },
163
+ /**
164
+ * update interpreters of the meeting
165
+ * @param {Array} interpreters
166
+ * @returns {Promise}
167
+ */
168
+ updateInterpreters(interpreters) {
169
+ return this.request({
170
+ method: HTTP_VERBS.PATCH,
171
+ uri: `${this.locusUrl}/controls`,
172
+ body: {
173
+ interpretation: {
174
+ interpreters,
175
+ },
176
+ },
177
+ }).catch((error) => {
178
+ LoggerProxy.logger.error('Meeting:interpretation#updateInterpreters failed', error);
179
+ throw error;
180
+ });
181
+ },
182
+ /**
183
+ * Change direction of interpretation for an interpreter participant
184
+ * @returns {Promise}
185
+ */
186
+ changeDirection() {
187
+ if (!this.sourceLanguage || !this.targetLanguage) {
188
+ return Promise.reject(new Error('Missing sourceLanguage or targetLanguage'));
189
+ }
190
+
191
+ if (!this.selfParticipantId) {
192
+ return Promise.reject(new Error('Missing self participant id'));
193
+ }
194
+
195
+ return this.request({
196
+ method: HTTP_VERBS.PATCH,
197
+ uri: `${this.locusUrl}/participant/${this.selfParticipantId}/controls`,
198
+ body: {
199
+ interpretation: {
200
+ sourceLanguage: this.targetLanguage,
201
+ targetLanguage: this.sourceLanguage,
202
+ isActive: this.isActive,
203
+ order: this.order,
204
+ },
205
+ },
206
+ }).catch((error) => {
207
+ LoggerProxy.logger.error('Meeting:interpretation#changeDirection failed', error);
208
+ throw error;
209
+ });
210
+ },
211
+ /**
212
+ * Sets up a listener for handoff requests from mercury
213
+ * @returns {void}
214
+ */
215
+ listenToHandoffRequests() {
216
+ this.listenTo(this.webex.internal.mercury, 'event:locus.approval_request', (event) => {
217
+ if (event?.data?.approval?.resourceType === INTERPRETATION.RESOURCE_TYPE) {
218
+ const {receivers, initiator, actionType, url} = event.data.approval;
219
+ const receiverId = receivers?.[0]?.participantId;
220
+ const isReceiver = !!receiverId && receiverId === this.selfParticipantId;
221
+ const senderId = initiator?.participantId;
222
+ const isSender = !!senderId && senderId === this.selfParticipantId;
223
+ if (!isReceiver && !isSender) {
224
+ return;
225
+ }
226
+ this.trigger(INTERPRETATION.EVENTS.HANDOFF_REQUESTS_ARRIVED, {
227
+ actionType,
228
+ isReceiver,
229
+ isSender,
230
+ senderId,
231
+ receiverId,
232
+ url,
233
+ });
234
+ }
235
+ });
236
+ },
237
+ /**
238
+ * handoff the active interpreter role to another interpreter in same group, only the interpreter is allowed to call this api
239
+ * @param {string} participantId the participant id you want to hand off
240
+ * @returns {Promise}
241
+ */
242
+ handoffInterpreter(participantId) {
243
+ if (!participantId) {
244
+ return Promise.reject(new Error('Missing target participant id'));
245
+ }
246
+ if (!this.approvalUrl) {
247
+ return Promise.reject(new Error('Missing approval url'));
248
+ }
249
+
250
+ return this.request({
251
+ method: HTTP_VERBS.POST,
252
+ uri: this.approvalUrl,
253
+ body: {
254
+ actionType: INTERPRETATION.ACTION_TYPE.OFFERED,
255
+ resourceType: INTERPRETATION.RESOURCE_TYPE,
256
+ receivers: [
257
+ {
258
+ participantId,
259
+ },
260
+ ],
261
+ },
262
+ }).catch((error) => {
263
+ LoggerProxy.logger.error('Meeting:interpretation#handoffInterpreter failed', error);
264
+ throw error;
265
+ });
266
+ },
267
+ /**
268
+ * the in-active interpreter request to hand off the active role to self
269
+ * @returns {Promise}
270
+ */
271
+ requestHandoff() {
272
+ if (!this.approvalUrl) {
273
+ return Promise.reject(new Error('Missing approval url'));
274
+ }
275
+
276
+ return this.request({
277
+ method: HTTP_VERBS.POST,
278
+ uri: this.approvalUrl,
279
+ body: {
280
+ actionType: INTERPRETATION.ACTION_TYPE.REQUESTED,
281
+ resourceType: INTERPRETATION.RESOURCE_TYPE,
282
+ },
283
+ }).catch((error) => {
284
+ LoggerProxy.logger.error('Meeting:interpretation#requestHandoff failed', error);
285
+ throw error;
286
+ });
287
+ },
288
+ /**
289
+ * accept the request of handoff
290
+ * @param {String} url the url get from last approval event
291
+ * @returns {Promise}
292
+ */
293
+ acceptRequest(url) {
294
+ if (!url) {
295
+ return Promise.reject(new Error('Missing the url to accept'));
296
+ }
297
+
298
+ return this.request({
299
+ method: HTTP_VERBS.PUT,
300
+ uri: url,
301
+ body: {
302
+ actionType: INTERPRETATION.ACTION_TYPE.ACCEPTED,
303
+ },
304
+ }).catch((error) => {
305
+ LoggerProxy.logger.error('Meeting:interpretation#acceptRequest failed', error);
306
+ throw error;
307
+ });
308
+ },
309
+ /**
310
+ * decline the request of handoff
311
+ * @param {String} url the url get from last approval event
312
+ * @returns {Promise}
313
+ */
314
+ declineRequest(url) {
315
+ if (!url) {
316
+ return Promise.reject(new Error('Missing the url to decline'));
317
+ }
318
+
319
+ return this.request({
320
+ method: HTTP_VERBS.PUT,
321
+ uri: url,
322
+ body: {
323
+ actionType: INTERPRETATION.ACTION_TYPE.DECLINED,
324
+ },
325
+ }).catch((error) => {
326
+ LoggerProxy.logger.error('Meeting:interpretation#declineRequest failed', error);
327
+ throw error;
328
+ });
329
+ },
330
+ });
331
+
332
+ export default SimultaneousInterpretation;
@@ -0,0 +1,18 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {WebexPlugin} from '@webex/webex-core';
6
+ import {MEETINGS} from '../constants';
7
+
8
+ const SILanguage = WebexPlugin.extend({
9
+ idAttribute: 'languageName',
10
+
11
+ namespace: MEETINGS,
12
+ props: {
13
+ languageCode: 'number',
14
+ languageName: 'string',
15
+ },
16
+ });
17
+
18
+ export default SILanguage;
@@ -0,0 +1,222 @@
1
+ import {isEqual} from 'lodash';
2
+ import {BREAKOUTS} from '../constants';
3
+
4
+ const ControlsUtils: any = {};
5
+
6
+ /**
7
+ * Controls
8
+ * @typedef {Object} LocusControls
9
+ * @property {Object} record
10
+ * @property {Boolean} record.recording
11
+ * @property {Object} record.meta
12
+ * @property {String} record.meta.modifiedBy
13
+ */
14
+
15
+ /**
16
+ * parse the relevant host values that we care about: id
17
+ * @param {LocusControls} controls
18
+ * @returns {Object} parsedObject - parsed host or null if host was undefined
19
+ * @returns {String} parsedObject.recordingId
20
+ */
21
+ ControlsUtils.parse = (controls: any) => {
22
+ const parsedControls = {...controls};
23
+
24
+ if (controls && controls.record) {
25
+ parsedControls.record = {
26
+ modifiedBy: ControlsUtils.getId(controls),
27
+ paused: controls.record.paused ? controls.record.paused : false,
28
+ recording: controls.record.recording,
29
+ lastModified: controls.record.meta.lastModified,
30
+ };
31
+ }
32
+
33
+ if (controls && controls.meetingContainer) {
34
+ parsedControls.meetingContainer = {
35
+ meetingContainerUrl: controls.meetingContainer.meetingContainerUrl,
36
+ };
37
+ }
38
+
39
+ if (controls && controls.transcribe) {
40
+ parsedControls.transcribe = {
41
+ transcribing: controls.transcribe.transcribing,
42
+ caption: controls.transcribe.caption,
43
+ };
44
+ }
45
+
46
+ if (controls && controls.entryExitTone) {
47
+ parsedControls.entryExitTone = controls.entryExitTone.enabled
48
+ ? controls.entryExitTone.mode
49
+ : null;
50
+ }
51
+
52
+ if (controls && controls.video) {
53
+ parsedControls.videoEnabled = controls.video.enabled;
54
+ }
55
+
56
+ if (controls?.muteOnEntry) {
57
+ parsedControls.muteOnEntry = {enabled: controls.muteOnEntry.enabled};
58
+ }
59
+
60
+ if (controls?.shareControl) {
61
+ parsedControls.shareControl = {control: controls.shareControl.control};
62
+ }
63
+
64
+ if (controls?.disallowUnmute) {
65
+ parsedControls.disallowUnmute = {enabled: controls.disallowUnmute.enabled};
66
+ }
67
+
68
+ if (controls?.reactions) {
69
+ parsedControls.reactions = {
70
+ enabled: controls.reactions.enabled,
71
+ showDisplayNameWithReactions: controls.reactions.showDisplayNameWithReactions,
72
+ };
73
+ }
74
+
75
+ if (controls?.viewTheParticipantList) {
76
+ parsedControls.viewTheParticipantList = {enabled: controls.viewTheParticipantList.enabled};
77
+ }
78
+
79
+ if (controls?.raiseHand) {
80
+ parsedControls.raiseHand = {enabled: controls.raiseHand.enabled};
81
+ }
82
+
83
+ if (controls?.video) {
84
+ parsedControls.video = {enabled: controls.video.enabled};
85
+ }
86
+
87
+ return parsedControls;
88
+ };
89
+
90
+ /**
91
+ * parses and returns previous state vs current state and triggers the changes.
92
+ * @param {LocusControls} oldControls previous state
93
+ * @param {LocusControls} newControls current state
94
+ * @returns {Object} combination of state plus the changes
95
+ */
96
+ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
97
+ const previous = ControlsUtils.parse(oldControls);
98
+ const current = ControlsUtils.parse(newControls);
99
+
100
+ return {
101
+ previous,
102
+ current,
103
+ updates: {
104
+ hasMuteOnEntryChanged: current?.muteOnEntry?.enabled !== previous?.muteOnEntry?.enabled,
105
+
106
+ hasShareControlChanged: current?.shareControl?.control !== previous?.shareControl?.control,
107
+
108
+ hasDisallowUnmuteChanged:
109
+ current?.disallowUnmute?.enabled !== previous?.disallowUnmute?.enabled,
110
+
111
+ hasReactionsChanged: current?.reactions?.enabled !== previous?.reactions?.enabled,
112
+
113
+ hasReactionDisplayNamesChanged:
114
+ current?.reactions?.showDisplayNameWithReactions !==
115
+ previous?.reactions?.showDisplayNameWithReactions,
116
+
117
+ hasViewTheParticipantListChanged:
118
+ current?.viewTheParticipantList?.enabled !== previous?.viewTheParticipantList?.enabled,
119
+
120
+ hasRaiseHandChanged: current?.raiseHand?.enabled !== previous?.raiseHand?.enabled,
121
+
122
+ hasVideoChanged: current?.video?.enabled !== previous?.video?.enabled,
123
+
124
+ hasRecordingPausedChanged:
125
+ current?.record &&
126
+ !isEqual(previous?.record?.paused, current.record.paused) &&
127
+ (previous?.record?.recording || current?.record?.recording), // see comments directly below
128
+
129
+ hasRecordingChanged:
130
+ current?.record &&
131
+ !isEqual(previous?.record?.recording, current?.record?.recording) && // upon first join, previous?.record?.recording = undefined; thus, never going to be equal and will always return true
132
+ (previous?.record?.recording || current?.record?.recording), // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting
133
+
134
+ hasMeetingContainerChanged:
135
+ current?.meetingContainer &&
136
+ !isEqual(
137
+ previous?.meetingContainer?.meetingContainerUrl,
138
+ current?.meetingContainer?.meetingContainerUrl
139
+ ),
140
+
141
+ hasTranscribeChanged:
142
+ current?.transcribe &&
143
+ !isEqual(previous?.transcribe?.transcribing, current?.transcribe?.transcribing) && // upon first join, previous?.record?.recording = undefined; thus, never going to be equal and will always return true
144
+ (previous?.transcribe?.transcribing || current?.transcribe?.transcribing), // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting
145
+
146
+ hasEntryExitToneChanged: !!(
147
+ newControls.entryExitTone &&
148
+ !isEqual(previous?.entryExitTone, current?.entryExitTone) &&
149
+ (previous?.entryExitTone || current?.entryExitTone)
150
+ ),
151
+
152
+ hasBreakoutChanged: !isEqual(previous?.breakout, current?.breakout),
153
+
154
+ hasInterpretationChanged: !isEqual(previous?.interpretation, current?.interpretation),
155
+
156
+ hasVideoEnabledChanged:
157
+ newControls.video?.enabled !== undefined &&
158
+ !isEqual(previous?.videoEnabled, current?.videoEnabled),
159
+ },
160
+ };
161
+ };
162
+
163
+ /**
164
+ * Extract the id from the record controls object
165
+ * @param {LocusControls} controls
166
+ * @returns {String|null}
167
+ */
168
+ ControlsUtils.getId = (controls: any) => {
169
+ if (controls.record.meta) {
170
+ return controls.record.meta.modifiedBy;
171
+ }
172
+
173
+ return null;
174
+ };
175
+
176
+ /**
177
+ * check whether to replace the meeting's members or not.
178
+ * For case joined breakout session, need replace meeting's members
179
+ * @param {LocusControls} oldControls
180
+ * @param {LocusControls} controls
181
+ * @returns {Boolean}
182
+ */
183
+ ControlsUtils.isNeedReplaceMembers = (oldControls: any, controls: any) => {
184
+ // no breakout case
185
+ if (!oldControls?.breakout || !controls?.breakout) {
186
+ return false;
187
+ }
188
+
189
+ return (
190
+ oldControls.breakout.groupId !== controls.breakout.groupId ||
191
+ oldControls.breakout.sessionId !== controls.breakout.sessionId
192
+ );
193
+ };
194
+
195
+ /**
196
+ * determine the switch status between breakout session and main session.
197
+ * @param {LocusControls} oldControls
198
+ * @param {LocusControls} controls
199
+ * @returns {Object}
200
+ */
201
+ ControlsUtils.getSessionSwitchStatus = (oldControls: any, controls: any) => {
202
+ const status = {isReturnToMain: false, isJoinToBreakout: false};
203
+ // no breakout case
204
+ if (!oldControls?.breakout || !controls?.breakout) {
205
+ return status;
206
+ }
207
+
208
+ status.isReturnToMain =
209
+ oldControls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT &&
210
+ controls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;
211
+ status.isJoinToBreakout =
212
+ oldControls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.MAIN &&
213
+ controls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;
214
+
215
+ return status;
216
+ };
217
+
218
+ ControlsUtils.isMainSessionDTO = (locus: any) => {
219
+ return locus?.controls?.breakout?.sessionType !== BREAKOUTS.SESSION_TYPES.BREAKOUT;
220
+ };
221
+
222
+ export default ControlsUtils;
@@ -1,7 +1,6 @@
1
1
  import {EMBEDDED_APP_TYPES} from '../constants';
2
2
 
3
- const EmbeddedAppsUtils = {};
4
-
3
+ const EmbeddedAppsUtils: any = {};
5
4
  const SLIDO_REGEX = /.sli.do\//;
6
5
 
7
6
  /**
@@ -9,8 +8,8 @@ const SLIDO_REGEX = /.sli.do\//;
9
8
  * @param {Object} embeddedApp - raw embedded app object
10
9
  * @returns {Object} parsedObject - parsed embedded app object
11
10
  */
12
- EmbeddedAppsUtils.parseApp = (embeddedApp) => {
13
- const parsedApp = {...embeddedApp};
11
+ EmbeddedAppsUtils.parseApp = (embeddedApp: object) => {
12
+ const parsedApp: any = {...embeddedApp};
14
13
 
15
14
  parsedApp.type = EMBEDDED_APP_TYPES.OTHER;
16
15
  const url = parsedApp.instanceInfo?.appInstanceUrl;
@@ -29,7 +28,7 @@ EmbeddedAppsUtils.parseApp = (embeddedApp) => {
29
28
  * @param {any[]} apps2 - an array of apps
30
29
  * @returns {boolean} true if the arrays are different
31
30
  */
32
- EmbeddedAppsUtils.areSimilar = (apps1, apps2) => {
31
+ EmbeddedAppsUtils.areSimilar = (apps1: any[], apps2: any[]) => {
33
32
  if (!apps1 || !apps2) {
34
33
  return apps1 === apps2;
35
34
  }
@@ -52,7 +51,7 @@ EmbeddedAppsUtils.areSimilar = (apps1, apps2) => {
52
51
  * @param {array} embeddedApps
53
52
  * @returns {array} result - new array of parsed embedded app objects
54
53
  */
55
- EmbeddedAppsUtils.parse = (embeddedApps) =>
54
+ EmbeddedAppsUtils.parse = (embeddedApps: Array<any>) =>
56
55
  embeddedApps && embeddedApps.map(EmbeddedAppsUtils.parseApp);
57
56
 
58
57
  export default EmbeddedAppsUtils;