@webex/plugin-meetings 3.0.0-beta.12 → 3.0.0-beta.121

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 (519) hide show
  1. package/README.md +45 -1
  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 +48 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +357 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +193 -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 +43 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +995 -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 +5 -26
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +5 -26
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +6 -27
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +5 -26
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/parameter.js +5 -33
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +5 -26
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +4 -25
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reconnection-in-progress.js +0 -17
  45. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  46. package/dist/common/errors/reconnection.js +5 -26
  47. package/dist/common/errors/reconnection.js.map +1 -1
  48. package/dist/common/errors/stats.js +5 -26
  49. package/dist/common/errors/stats.js.map +1 -1
  50. package/dist/common/errors/webex-errors.js +6 -41
  51. package/dist/common/errors/webex-errors.js.map +1 -1
  52. package/dist/common/errors/webex-meetings-error.js +1 -24
  53. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  54. package/dist/common/events/events-scope.js +0 -22
  55. package/dist/common/events/events-scope.js.map +1 -1
  56. package/dist/common/events/events.js +0 -23
  57. package/dist/common/events/events.js.map +1 -1
  58. package/dist/common/events/trigger-proxy.js +0 -12
  59. package/dist/common/events/trigger-proxy.js.map +1 -1
  60. package/dist/common/events/util.js +0 -15
  61. package/dist/common/events/util.js.map +1 -1
  62. package/dist/common/logs/logger-config.js +0 -4
  63. package/dist/common/logs/logger-config.js.map +1 -1
  64. package/dist/common/logs/logger-proxy.js +1 -8
  65. package/dist/common/logs/logger-proxy.js.map +1 -1
  66. package/dist/common/logs/request.js +35 -61
  67. package/dist/common/logs/request.js.map +1 -1
  68. package/dist/common/queue.js +4 -14
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.js +6 -6
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.js +196 -53
  73. package/dist/constants.js.map +1 -1
  74. package/dist/controls-options-manager/constants.js +14 -0
  75. package/dist/controls-options-manager/constants.js.map +1 -0
  76. package/dist/controls-options-manager/enums.js +27 -0
  77. package/dist/controls-options-manager/enums.js.map +1 -0
  78. package/dist/controls-options-manager/index.js +297 -0
  79. package/dist/controls-options-manager/index.js.map +1 -0
  80. package/dist/controls-options-manager/types.js +7 -0
  81. package/dist/controls-options-manager/types.js.map +1 -0
  82. package/dist/controls-options-manager/util.js +294 -0
  83. package/dist/controls-options-manager/util.js.map +1 -0
  84. package/dist/index.js +72 -17
  85. package/dist/index.js.map +1 -1
  86. package/dist/locus-info/controlsUtils.js +95 -29
  87. package/dist/locus-info/controlsUtils.js.map +1 -1
  88. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  89. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  90. package/dist/locus-info/fullState.js +0 -15
  91. package/dist/locus-info/fullState.js.map +1 -1
  92. package/dist/locus-info/hostUtils.js +4 -12
  93. package/dist/locus-info/hostUtils.js.map +1 -1
  94. package/dist/locus-info/index.js +392 -212
  95. package/dist/locus-info/index.js.map +1 -1
  96. package/dist/locus-info/infoUtils.js +0 -38
  97. package/dist/locus-info/infoUtils.js.map +1 -1
  98. package/dist/locus-info/mediaSharesUtils.js +54 -38
  99. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  100. package/dist/locus-info/parser.js +88 -123
  101. package/dist/locus-info/parser.js.map +1 -1
  102. package/dist/locus-info/selfUtils.js +99 -91
  103. package/dist/locus-info/selfUtils.js.map +1 -1
  104. package/dist/media/index.js +55 -165
  105. package/dist/media/index.js.map +1 -1
  106. package/dist/media/properties.js +71 -117
  107. package/dist/media/properties.js.map +1 -1
  108. package/dist/media/util.js +2 -9
  109. package/dist/media/util.js.map +1 -1
  110. package/dist/mediaQualityMetrics/config.js +505 -495
  111. package/dist/mediaQualityMetrics/config.js.map +1 -1
  112. package/dist/meeting/in-meeting-actions.js +67 -14
  113. package/dist/meeting/in-meeting-actions.js.map +1 -1
  114. package/dist/meeting/index.js +2506 -2444
  115. package/dist/meeting/index.js.map +1 -1
  116. package/dist/meeting/locusMediaRequest.js +291 -0
  117. package/dist/meeting/locusMediaRequest.js.map +1 -0
  118. package/dist/meeting/muteState.js +292 -138
  119. package/dist/meeting/muteState.js.map +1 -1
  120. package/dist/meeting/request.js +315 -336
  121. package/dist/meeting/request.js.map +1 -1
  122. package/dist/meeting/request.type.js +7 -0
  123. package/dist/meeting/request.type.js.map +1 -0
  124. package/dist/meeting/state.js +21 -31
  125. package/dist/meeting/state.js.map +1 -1
  126. package/dist/meeting/util.js +462 -583
  127. package/dist/meeting/util.js.map +1 -1
  128. package/dist/meeting-info/collection.js +3 -25
  129. package/dist/meeting-info/collection.js.map +1 -1
  130. package/dist/meeting-info/index.js +10 -33
  131. package/dist/meeting-info/index.js.map +1 -1
  132. package/dist/meeting-info/meeting-info-v2.js +305 -286
  133. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  134. package/dist/meeting-info/request.js +1 -16
  135. package/dist/meeting-info/request.js.map +1 -1
  136. package/dist/meeting-info/util.js +98 -183
  137. package/dist/meeting-info/util.js.map +1 -1
  138. package/dist/meeting-info/utilv2.js +156 -232
  139. package/dist/meeting-info/utilv2.js.map +1 -1
  140. package/dist/meetings/collection.js +24 -20
  141. package/dist/meetings/collection.js.map +1 -1
  142. package/dist/meetings/index.js +675 -593
  143. package/dist/meetings/index.js.map +1 -1
  144. package/dist/meetings/request.js +23 -42
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +177 -155
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.js +89 -88
  149. package/dist/member/index.js.map +1 -1
  150. package/dist/member/types.js +15 -0
  151. package/dist/member/types.js.map +1 -0
  152. package/dist/member/util.js +101 -69
  153. package/dist/member/util.js.map +1 -1
  154. package/dist/members/collection.js +12 -12
  155. package/dist/members/collection.js.map +1 -1
  156. package/dist/members/index.js +166 -205
  157. package/dist/members/index.js.map +1 -1
  158. package/dist/members/request.js +120 -85
  159. package/dist/members/request.js.map +1 -1
  160. package/dist/members/types.js +15 -0
  161. package/dist/members/types.js.map +1 -0
  162. package/dist/members/util.js +314 -260
  163. package/dist/members/util.js.map +1 -1
  164. package/dist/metrics/config.js +50 -16
  165. package/dist/metrics/config.js.map +1 -1
  166. package/dist/metrics/constants.js +3 -7
  167. package/dist/metrics/constants.js.map +1 -1
  168. package/dist/metrics/index.js +93 -162
  169. package/dist/metrics/index.js.map +1 -1
  170. package/dist/multistream/mediaRequestManager.js +167 -50
  171. package/dist/multistream/mediaRequestManager.js.map +1 -1
  172. package/dist/multistream/receiveSlot.js +58 -65
  173. package/dist/multistream/receiveSlot.js.map +1 -1
  174. package/dist/multistream/receiveSlotManager.js +74 -93
  175. package/dist/multistream/receiveSlotManager.js.map +1 -1
  176. package/dist/multistream/remoteMedia.js +55 -74
  177. package/dist/multistream/remoteMedia.js.map +1 -1
  178. package/dist/multistream/remoteMediaGroup.js +6 -40
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +466 -442
  181. package/dist/multistream/remoteMediaManager.js.map +1 -1
  182. package/dist/networkQualityMonitor/index.js +32 -59
  183. package/dist/networkQualityMonitor/index.js.map +1 -1
  184. package/dist/personal-meeting-room/index.js +10 -45
  185. package/dist/personal-meeting-room/index.js.map +1 -1
  186. package/dist/personal-meeting-room/request.js +2 -33
  187. package/dist/personal-meeting-room/request.js.map +1 -1
  188. package/dist/personal-meeting-room/util.js +0 -13
  189. package/dist/personal-meeting-room/util.js.map +1 -1
  190. package/dist/reachability/index.js +190 -199
  191. package/dist/reachability/index.js.map +1 -1
  192. package/dist/reachability/request.js +14 -23
  193. package/dist/reachability/request.js.map +1 -1
  194. package/dist/reactions/constants.js +13 -0
  195. package/dist/reactions/constants.js.map +1 -0
  196. package/dist/reactions/reactions.js +2 -4
  197. package/dist/reactions/reactions.js.map +1 -1
  198. package/dist/reactions/reactions.type.js +19 -23
  199. package/dist/reactions/reactions.type.js.map +1 -1
  200. package/dist/reconnection-manager/index.js +326 -465
  201. package/dist/reconnection-manager/index.js.map +1 -1
  202. package/dist/recording-controller/enums.js +17 -0
  203. package/dist/recording-controller/enums.js.map +1 -0
  204. package/dist/recording-controller/index.js +343 -0
  205. package/dist/recording-controller/index.js.map +1 -0
  206. package/dist/recording-controller/util.js +63 -0
  207. package/dist/recording-controller/util.js.map +1 -0
  208. package/dist/roap/index.js +31 -75
  209. package/dist/roap/index.js.map +1 -1
  210. package/dist/roap/request.js +129 -136
  211. package/dist/roap/request.js.map +1 -1
  212. package/dist/roap/turnDiscovery.js +143 -103
  213. package/dist/roap/turnDiscovery.js.map +1 -1
  214. package/dist/statsAnalyzer/global.js +1 -95
  215. package/dist/statsAnalyzer/global.js.map +1 -1
  216. package/dist/statsAnalyzer/index.js +369 -461
  217. package/dist/statsAnalyzer/index.js.map +1 -1
  218. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  219. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  220. package/dist/transcription/index.js +13 -45
  221. package/dist/transcription/index.js.map +1 -1
  222. package/dist/types/annotation/annotation.types.d.ts +35 -0
  223. package/dist/types/annotation/constants.d.ts +31 -0
  224. package/dist/types/annotation/index.d.ts +124 -0
  225. package/dist/types/breakouts/breakout.d.ts +8 -0
  226. package/dist/types/breakouts/collection.d.ts +5 -0
  227. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  228. package/dist/types/breakouts/events.d.ts +2 -0
  229. package/dist/types/breakouts/index.d.ts +5 -0
  230. package/dist/types/breakouts/request.d.ts +22 -0
  231. package/dist/types/breakouts/utils.d.ts +15 -0
  232. package/dist/types/common/browser-detection.d.ts +9 -0
  233. package/dist/types/common/collection.d.ts +48 -0
  234. package/dist/types/common/config.d.ts +2 -0
  235. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  236. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  237. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  238. package/dist/types/common/errors/media.d.ts +15 -0
  239. package/dist/types/common/errors/parameter.d.ts +15 -0
  240. package/dist/types/common/errors/password-error.d.ts +15 -0
  241. package/dist/types/common/errors/permission.d.ts +14 -0
  242. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  243. package/dist/types/common/errors/reconnection.d.ts +15 -0
  244. package/dist/types/common/errors/stats.d.ts +15 -0
  245. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  246. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  247. package/dist/types/common/events/events-scope.d.ts +17 -0
  248. package/dist/types/common/events/events.d.ts +12 -0
  249. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  250. package/dist/types/common/events/util.d.ts +2 -0
  251. package/dist/types/common/logs/logger-config.d.ts +2 -0
  252. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  253. package/dist/types/common/logs/request.d.ts +34 -0
  254. package/dist/types/common/queue.d.ts +32 -0
  255. package/dist/types/config.d.ts +78 -0
  256. package/dist/types/constants.d.ts +987 -0
  257. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  258. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  259. package/dist/types/controls-options-manager/index.d.ts +136 -0
  260. package/dist/types/controls-options-manager/types.d.ts +43 -0
  261. package/dist/types/controls-options-manager/util.d.ts +1 -0
  262. package/dist/types/index.d.ts +7 -0
  263. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  264. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  265. package/dist/types/locus-info/fullState.d.ts +2 -0
  266. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  267. package/dist/types/locus-info/index.d.ts +315 -0
  268. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  269. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  270. package/dist/types/locus-info/parser.d.ts +212 -0
  271. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  272. package/dist/types/media/index.d.ts +34 -0
  273. package/dist/types/media/properties.d.ts +108 -0
  274. package/dist/types/media/util.d.ts +2 -0
  275. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  276. package/dist/types/meeting/in-meeting-actions.d.ts +137 -0
  277. package/dist/types/meeting/index.d.ts +1755 -0
  278. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  279. package/dist/types/meeting/muteState.d.ts +186 -0
  280. package/dist/types/meeting/request.d.ts +269 -0
  281. package/dist/types/meeting/request.type.d.ts +11 -0
  282. package/dist/types/meeting/state.d.ts +9 -0
  283. package/dist/types/meeting/util.d.ts +76 -0
  284. package/dist/types/meeting-info/collection.d.ts +20 -0
  285. package/dist/types/meeting-info/index.d.ts +57 -0
  286. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  287. package/dist/types/meeting-info/request.d.ts +22 -0
  288. package/dist/types/meeting-info/util.d.ts +2 -0
  289. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  290. package/dist/types/meetings/collection.d.ts +31 -0
  291. package/dist/types/meetings/index.d.ts +345 -0
  292. package/dist/types/meetings/request.d.ts +27 -0
  293. package/dist/types/meetings/util.d.ts +18 -0
  294. package/dist/types/member/index.d.ts +157 -0
  295. package/dist/types/member/types.d.ts +21 -0
  296. package/dist/types/member/util.d.ts +2 -0
  297. package/dist/types/members/collection.d.ts +29 -0
  298. package/dist/types/members/index.d.ts +353 -0
  299. package/dist/types/members/request.d.ts +114 -0
  300. package/dist/types/members/types.d.ts +24 -0
  301. package/dist/types/members/util.d.ts +210 -0
  302. package/dist/types/metrics/config.d.ts +195 -0
  303. package/dist/types/metrics/constants.d.ts +54 -0
  304. package/dist/types/metrics/index.d.ts +169 -0
  305. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  306. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  307. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  308. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  309. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  310. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  311. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  312. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  313. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  314. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  315. package/dist/types/reachability/index.d.ts +152 -0
  316. package/dist/types/reachability/request.d.ts +37 -0
  317. package/dist/types/reactions/constants.d.ts +3 -0
  318. package/dist/types/reactions/reactions.d.ts +4 -0
  319. package/dist/types/reactions/reactions.type.d.ts +52 -0
  320. package/dist/types/reconnection-manager/index.d.ts +126 -0
  321. package/dist/types/recording-controller/enums.d.ts +7 -0
  322. package/dist/types/recording-controller/index.d.ts +193 -0
  323. package/dist/types/recording-controller/util.d.ts +13 -0
  324. package/dist/types/roap/index.d.ts +77 -0
  325. package/dist/types/roap/request.d.ts +36 -0
  326. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  327. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  328. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  329. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  330. package/dist/types/transcription/index.d.ts +64 -0
  331. package/internal-README.md +7 -6
  332. package/package.json +28 -21
  333. package/src/annotation/annotation.types.ts +42 -0
  334. package/src/annotation/constants.ts +36 -0
  335. package/src/annotation/index.ts +339 -0
  336. package/src/breakouts/README.md +220 -0
  337. package/src/breakouts/breakout.ts +163 -0
  338. package/src/breakouts/collection.ts +19 -0
  339. package/src/breakouts/edit-lock-error.ts +25 -0
  340. package/src/breakouts/events.ts +37 -0
  341. package/src/breakouts/index.ts +861 -0
  342. package/src/breakouts/request.ts +55 -0
  343. package/src/breakouts/utils.ts +57 -0
  344. package/src/common/browser-detection.ts +9 -6
  345. package/src/common/collection.ts +3 -1
  346. package/src/common/errors/captcha-error.ts +6 -6
  347. package/src/common/errors/intent-to-join.ts +6 -6
  348. package/src/common/errors/join-meeting.ts +12 -8
  349. package/src/common/errors/media.ts +6 -6
  350. package/src/common/errors/parameter.ts +9 -6
  351. package/src/common/errors/password-error.ts +6 -6
  352. package/src/common/errors/permission.ts +5 -5
  353. package/src/common/errors/reconnection.ts +6 -6
  354. package/src/common/errors/stats.ts +6 -6
  355. package/src/common/errors/webex-errors.ts +7 -5
  356. package/src/common/errors/webex-meetings-error.ts +1 -1
  357. package/src/common/events/events-scope.ts +5 -1
  358. package/src/common/events/events.ts +5 -1
  359. package/src/common/events/trigger-proxy.ts +8 -3
  360. package/src/common/events/util.ts +1 -2
  361. package/src/common/logs/logger-proxy.ts +21 -10
  362. package/src/common/logs/request.ts +11 -8
  363. package/src/config.ts +16 -12
  364. package/src/constants.ts +144 -6
  365. package/src/controls-options-manager/constants.ts +5 -0
  366. package/src/controls-options-manager/enums.ts +18 -0
  367. package/src/controls-options-manager/index.ts +278 -0
  368. package/src/controls-options-manager/types.ts +59 -0
  369. package/src/controls-options-manager/util.ts +281 -0
  370. package/src/index.ts +33 -0
  371. package/src/locus-info/controlsUtils.ts +148 -24
  372. package/src/locus-info/fullState.ts +15 -11
  373. package/src/locus-info/hostUtils.ts +4 -3
  374. package/src/locus-info/index.ts +335 -55
  375. package/src/locus-info/infoUtils.ts +12 -4
  376. package/src/locus-info/mediaSharesUtils.ts +52 -4
  377. package/src/locus-info/parser.ts +46 -68
  378. package/src/locus-info/selfUtils.ts +187 -56
  379. package/src/media/index.ts +139 -196
  380. package/src/media/properties.ts +43 -36
  381. package/src/media/util.ts +1 -1
  382. package/src/mediaQualityMetrics/config.ts +380 -378
  383. package/src/meeting/in-meeting-actions.ts +139 -3
  384. package/src/meeting/index.ts +2733 -1589
  385. package/src/meeting/locusMediaRequest.ts +309 -0
  386. package/src/meeting/muteState.ts +290 -72
  387. package/src/meeting/request.ts +247 -178
  388. package/src/meeting/request.type.ts +13 -0
  389. package/src/meeting/state.ts +45 -30
  390. package/src/meeting/util.ts +444 -395
  391. package/src/meeting-info/collection.ts +2 -1
  392. package/src/meeting-info/index.ts +32 -30
  393. package/src/meeting-info/meeting-info-v2.ts +235 -116
  394. package/src/meeting-info/request.ts +9 -3
  395. package/src/meeting-info/util.ts +54 -46
  396. package/src/meeting-info/utilv2.ts +71 -55
  397. package/src/meetings/collection.ts +21 -1
  398. package/src/meetings/index.ts +749 -437
  399. package/src/meetings/request.ts +29 -25
  400. package/src/meetings/util.ts +122 -33
  401. package/src/member/index.ts +95 -49
  402. package/src/member/types.ts +24 -0
  403. package/src/member/util.ts +106 -13
  404. package/src/members/collection.ts +8 -1
  405. package/src/members/index.ts +288 -130
  406. package/src/members/request.ts +144 -31
  407. package/src/members/types.ts +28 -0
  408. package/src/members/util.ts +316 -235
  409. package/src/metrics/config.ts +302 -90
  410. package/src/metrics/constants.ts +1 -6
  411. package/src/metrics/index.ts +124 -95
  412. package/src/multistream/mediaRequestManager.ts +203 -45
  413. package/src/multistream/receiveSlot.ts +69 -26
  414. package/src/multistream/receiveSlotManager.ts +62 -38
  415. package/src/multistream/remoteMedia.ts +30 -4
  416. package/src/multistream/remoteMediaGroup.ts +4 -3
  417. package/src/multistream/remoteMediaManager.ts +230 -66
  418. package/src/networkQualityMonitor/index.ts +24 -27
  419. package/src/personal-meeting-room/index.ts +12 -16
  420. package/src/personal-meeting-room/request.ts +10 -3
  421. package/src/personal-meeting-room/util.ts +3 -3
  422. package/src/reachability/index.ts +131 -79
  423. package/src/reachability/request.ts +43 -34
  424. package/src/reactions/constants.ts +4 -0
  425. package/src/reactions/reactions.ts +8 -8
  426. package/src/reactions/reactions.type.ts +31 -5
  427. package/src/reconnection-manager/index.ts +193 -111
  428. package/src/recording-controller/enums.ts +8 -0
  429. package/src/recording-controller/index.ts +315 -0
  430. package/src/recording-controller/util.ts +58 -0
  431. package/src/roap/index.ts +53 -53
  432. package/src/roap/request.ts +77 -64
  433. package/src/roap/turnDiscovery.ts +101 -48
  434. package/src/statsAnalyzer/global.ts +8 -104
  435. package/src/statsAnalyzer/index.ts +624 -376
  436. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  437. package/src/transcription/index.ts +34 -32
  438. package/test/integration/spec/converged-space-meetings.js +177 -0
  439. package/test/integration/spec/journey.js +670 -466
  440. package/test/integration/spec/space-meeting.js +320 -204
  441. package/test/integration/spec/transcription.js +7 -8
  442. package/test/unit/spec/annotation/index.ts +436 -0
  443. package/test/unit/spec/breakouts/breakout.ts +203 -0
  444. package/test/unit/spec/breakouts/collection.ts +15 -0
  445. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  446. package/test/unit/spec/breakouts/events.ts +77 -0
  447. package/test/unit/spec/breakouts/index.ts +1611 -0
  448. package/test/unit/spec/breakouts/request.ts +104 -0
  449. package/test/unit/spec/breakouts/utils.js +72 -0
  450. package/test/unit/spec/common/browser-detection.js +9 -28
  451. package/test/unit/spec/controls-options-manager/index.js +287 -0
  452. package/test/unit/spec/controls-options-manager/util.js +504 -0
  453. package/test/unit/spec/fixture/locus.js +93 -90
  454. package/test/unit/spec/locus-info/controlsUtils.js +297 -32
  455. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  456. package/test/unit/spec/locus-info/index.js +598 -5
  457. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  458. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  459. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  460. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  461. package/test/unit/spec/locus-info/parser.js +3 -9
  462. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  463. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  464. package/test/unit/spec/media/index.ts +104 -8
  465. package/test/unit/spec/media/properties.ts +9 -9
  466. package/test/unit/spec/meeting/in-meeting-actions.ts +66 -3
  467. package/test/unit/spec/meeting/index.js +2908 -887
  468. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  469. package/test/unit/spec/meeting/muteState.js +421 -94
  470. package/test/unit/spec/meeting/request.js +421 -79
  471. package/test/unit/spec/meeting/utils.js +308 -189
  472. package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
  473. package/test/unit/spec/meeting-info/request.js +7 -9
  474. package/test/unit/spec/meeting-info/util.js +11 -12
  475. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  476. package/test/unit/spec/meetings/collection.js +15 -1
  477. package/test/unit/spec/meetings/index.js +1052 -329
  478. package/test/unit/spec/meetings/utils.js +163 -14
  479. package/test/unit/spec/member/index.js +24 -1
  480. package/test/unit/spec/member/util.js +383 -32
  481. package/test/unit/spec/members/index.js +424 -55
  482. package/test/unit/spec/members/request.js +228 -40
  483. package/test/unit/spec/members/utils.js +191 -4
  484. package/test/unit/spec/metrics/index.js +113 -20
  485. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  486. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  487. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  488. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  489. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  490. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  491. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  492. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  493. package/test/unit/spec/reachability/index.ts +176 -27
  494. package/test/unit/spec/reachability/request.js +66 -0
  495. package/test/unit/spec/reconnection-manager/index.js +62 -31
  496. package/test/unit/spec/recording-controller/index.js +231 -0
  497. package/test/unit/spec/recording-controller/util.js +102 -0
  498. package/test/unit/spec/roap/index.ts +19 -49
  499. package/test/unit/spec/roap/request.ts +187 -0
  500. package/test/unit/spec/roap/turnDiscovery.ts +92 -50
  501. package/test/unit/spec/stats-analyzer/index.js +116 -60
  502. package/test/utils/cmr.js +44 -42
  503. package/test/utils/constants.js +9 -0
  504. package/test/utils/integrationTestUtils.js +64 -0
  505. package/test/utils/testUtils.js +63 -99
  506. package/test/utils/webex-config.js +22 -18
  507. package/test/utils/webex-test-users.js +57 -50
  508. package/tsconfig.json +6 -0
  509. package/dist/media/internal-media-core-wrapper.js +0 -22
  510. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  511. package/dist/meeting/effectsState.js +0 -334
  512. package/dist/meeting/effectsState.js.map +0 -1
  513. package/dist/multistream/multistreamMedia.js +0 -116
  514. package/dist/multistream/multistreamMedia.js.map +0 -1
  515. package/src/index.js +0 -15
  516. package/src/media/internal-media-core-wrapper.ts +0 -9
  517. package/src/meeting/effectsState.ts +0 -211
  518. package/src/multistream/multistreamMedia.ts +0 -92
  519. package/test/unit/spec/meeting/effectsState.js +0 -291
package/src/config.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  // @ts-ignore
3
- deviceType
3
+ deviceType,
4
4
  } from '@webex/common';
5
5
 
6
6
  export default {
@@ -16,7 +16,7 @@ export default {
16
16
  receiveVideo: true,
17
17
  pstn: false,
18
18
  sendShare: false,
19
- receiveShare: false
19
+ receiveShare: false,
20
20
  },
21
21
  reconnection: {
22
22
  enabled: false,
@@ -25,7 +25,7 @@ export default {
25
25
  // Timeout duration to wait for ICE to reconnect if a disconnect is received.
26
26
  iceReconnectionTimeout: 10000,
27
27
  // Amount of times attempting to rejoin a meeting during reconnect
28
- maxRejoinAttempts: 3
28
+ maxRejoinAttempts: 3,
29
29
  },
30
30
  stats: {
31
31
  // Enable the webrtc stats analyzer that emits quality degradation events
@@ -41,7 +41,7 @@ export default {
41
41
  // Once packet loss hits this ratio, the video will downgrade
42
42
  videoPacketLossRatioThreshold: 9, // comparison of packets lost / packets received
43
43
  rttThreshold: 500, // 500 ms noticeable quality lag begins based on bandwidth of user
44
- jitterThreshold: 500 // 500 ms noticeable quality lag begins based on bandwidth of user
44
+ jitterThreshold: 500, // 500 ms noticeable quality lag begins based on bandwidth of user
45
45
  },
46
46
  metrics: {
47
47
  // change to your client name else data will be muddled
@@ -55,30 +55,30 @@ export default {
55
55
  mqaMetricsInterval: 60000,
56
56
  // send to cisco internal MQA data automatically
57
57
  // we already send CA
58
- autoSendMQA: true
58
+ autoSendMQA: true,
59
59
  },
60
60
  logging: {
61
61
  enable: true,
62
- verboseEvents: true
62
+ verboseEvents: true,
63
63
  },
64
64
  resolution: {
65
65
  maxWidth: 1280,
66
66
  maxHeight: 720,
67
67
  idealWidth: 1280,
68
- idealHeight: 720
68
+ idealHeight: 720,
69
69
  },
70
70
  screenResolution: {
71
71
  maxWidth: 1920,
72
72
  maxHeight: 1080,
73
73
  idealWidth: 1920,
74
- idealHeight: 1080
74
+ idealHeight: 1080,
75
75
  },
76
76
  bandwidth: {
77
77
  // please note, these are the maximum bandwidth values
78
78
  // the server supports, minimums have to be tested
79
79
  audio: 64000,
80
80
  video: 4000000,
81
- startBitrate: 2000
81
+ startBitrate: 2000,
82
82
  },
83
83
  screenFrameRate: 10,
84
84
  videoShareFrameRate: 30,
@@ -89,11 +89,15 @@ export default {
89
89
  receiveTranscription: false,
90
90
  enableExtmap: false,
91
91
  enableAutomaticLLM: false,
92
+ installedOrgID: undefined,
92
93
  experimental: {
93
94
  enableMediaNegotiatedEvent: false,
94
95
  enableUnifiedMeetings: false,
95
96
  enableAdhocMeetings: false,
96
- enableTurnDiscovery: false,
97
- }
98
- }
97
+ enableTurnDiscovery: true,
98
+ },
99
+ degradationPreferences: {
100
+ maxMacroblocksLimit: 8192,
101
+ },
102
+ },
99
103
  };
package/src/constants.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  // @ts-ignore
2
- import { hydraTypes } from '@webex/common';
2
+ import {hydraTypes} from '@webex/common';
3
3
 
4
4
  // *********** LOWERCASE / CAMELCASE STRINGS ************
5
5
 
@@ -7,10 +7,12 @@ export const AUDIO = 'audio';
7
7
  export const AUDIO_INPUT = 'audioinput';
8
8
  export const AUDIO_STATUS = 'audioStatus';
9
9
  export const ALERT = 'alert';
10
+ export const ALIAS = 'alias';
10
11
  export const ANSWER = 'answer';
11
12
 
12
13
  export const CALL = 'call';
13
14
  export const CORRELATION_ID = 'correlationId';
15
+ export const MEETINGNUMBER = 'meetingNumber';
14
16
  export const CONVERSATION_URL = 'conversationUrl';
15
17
  export const CALENDAR = 'calendar';
16
18
  export const CALENDAR_EVENTS_API = 'calendarEvents';
@@ -93,6 +95,7 @@ export const _JOINED_ = 'JOINED';
93
95
 
94
96
  export const _LOCUS_ID_ = 'LOCUS_ID';
95
97
  export const _LEFT_ = 'LEFT';
98
+ export const _MOVED_ = 'MOVED';
96
99
 
97
100
  export const _MEETING_LINK_ = 'MEETING_LINK';
98
101
  export const _MEETING_UUID_ = 'MEETING_UUID';
@@ -280,6 +283,7 @@ export const EVENT_TRIGGERS = {
280
283
  MEETING_STOPPED_SHARING_LOCAL: 'meeting:stoppedSharingLocal',
281
284
  MEETING_STARTED_SHARING_REMOTE: 'meeting:startedSharingRemote',
282
285
  MEETING_STOPPED_SHARING_REMOTE: 'meeting:stoppedSharingRemote',
286
+ MEETING_UPDATE_ANNOTATION_INFO: 'meeting:updateAnnotationInfo',
283
287
  MEETING_STARTED_SHARING_WHITEBOARD: 'meeting:startedSharingWhiteboard',
284
288
  MEETING_STOPPED_SHARING_WHITEBOARD: 'meeting:stoppedSharingWhiteboard',
285
289
  MEETING_MEDIA_LOCAL_STARTED: 'meeting:media:local:start',
@@ -288,6 +292,7 @@ export const EVENT_TRIGGERS = {
288
292
  MEETING_STOPPED_RECORDING: 'meeting:recording:stopped',
289
293
  MEETING_STARTED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:started',
290
294
  MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
295
+ MEETING_RECEIVE_REACTIONS: 'meeting:receiveReactions',
291
296
  MEETING_PAUSED_RECORDING: 'meeting:recording:paused',
292
297
  MEETING_RESUMED_RECORDING: 'meeting:recording:resumed',
293
298
  MEETING_ADDED: 'meeting:added',
@@ -296,6 +301,8 @@ export const EVENT_TRIGGERS = {
296
301
  MEETING_RINGING_STOP: 'meeting:ringingStop',
297
302
  MEETING_SELF_LOBBY_WAITING: 'meeting:self:lobbyWaiting',
298
303
  MEETING_SELF_GUEST_ADMITTED: 'meeting:self:guestAdmitted',
304
+ MEETING_SELF_VIDEO_MUTED_BY_OTHERS: 'meeting:self:videoMutedByOthers',
305
+ MEETING_SELF_VIDEO_UNMUTED_BY_OTHERS: 'meeting:self:videoUnmutedByOthers',
299
306
  MEETING_SELF_MUTED_BY_OTHERS: 'meeting:self:mutedByOthers',
300
307
  MEETING_SELF_UNMUTED_BY_OTHERS: 'meeting:self:unmutedByOthers',
301
308
  MEETING_SELF_REQUESTED_TO_UNMUTE: 'meeting:self:requestedToUnmute',
@@ -304,7 +311,14 @@ export const EVENT_TRIGGERS = {
304
311
  MEETING_SELF_IS_SHARING_BLOCKED: 'meeting:self:isSharingBlocked',
305
312
  MEETING_CONTROLS_LAYOUT_UPDATE: 'meeting:layout:update',
306
313
  MEETING_ENTRY_EXIT_TONE_UPDATE: 'meeting:entryExitTone:update',
314
+ MEETING_BREAKOUTS_UPDATE: 'meeting:breakouts:update',
315
+ MEETING_BREAKOUTS_CLOSING: 'meeting:breakouts:closing',
316
+ MEETING_BREAKOUTS_MESSAGE: 'meeting:breakouts:message',
317
+ MEETING_BREAKOUTS_ASK_RETURN_TO_MAIN: 'meeting:breakouts:askReturnToMain',
318
+ MEETING_BREAKOUTS_LEAVE: 'meeting:breakouts:leave',
319
+ MEETING_BREAKOUTS_ASK_FOR_HELP: 'meeting:breakouts:askForHelp',
307
320
  MEMBERS_UPDATE: 'members:update',
321
+ MEMBERS_CLEAR: 'members:clear',
308
322
  MEMBERS_CONTENT_UPDATE: 'members:content:update',
309
323
  MEMBERS_HOST_UPDATE: 'members:host:update',
310
324
  MEMBERS_SELF_UPDATE: 'members:self:update',
@@ -331,8 +345,17 @@ export const EVENT_TRIGGERS = {
331
345
  REMOTE_VIDEO_SOURCE_COUNT_CHANGED: 'media:remoteVideoSourceCountChanged',
332
346
  REMOTE_AUDIO_SOURCE_COUNT_CHANGED: 'media:remoteAudioSourceCountChanged',
333
347
  REMOTE_MEDIA_AUDIO_CREATED: 'media:remoteAudio:created',
334
- REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED: 'media:remoteScrenShareAudio:created',
348
+ REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED: 'media:remoteScreenShareAudio:created',
335
349
  REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED: 'media:remoteVideo:layoutChanged',
350
+ // Controls
351
+ MEETING_CONTROLS_MUTE_ON_ENTRY_UPDATED: 'meeting:controls:mute-on-entry:updated',
352
+ MEETING_CONTROLS_SHARE_CONTROL_UPDATED: 'meeting:controls:share-control:updated',
353
+ MEETING_CONTROLS_DISALLOW_UNMUTE_UPDATED: 'meeting:controls:disallow-unmute:updated',
354
+ MEETING_CONTROLS_REACTIONS_UPDATED: 'meeting:controls:reactions:updated',
355
+ MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED:
356
+ 'meeting:controls:view-the-participants-list:updated',
357
+ MEETING_CONTROLS_RAISE_HAND_UPDATED: 'meeting:controls:raise-hand:updated',
358
+ MEETING_CONTROLS_VIDEO_UPDATED: 'meeting:controls:video:updated',
336
359
  };
337
360
 
338
361
  export const EVENT_TYPES = {
@@ -356,6 +379,7 @@ export const MEETING_REMOVED_REASON = {
356
379
  FULLSTATE_REMOVED: 'FULLSTATE_REMOVED', // meeting got dropped ? not sure
357
380
  MEETING_INACTIVE_TERMINATING: 'MEETING_INACTIVE_TERMINATING', // Meeting got ended or everyone left the meeting
358
381
  CLIENT_LEAVE_REQUEST: 'CLIENT_LEAVE_REQUEST', // You triggered leave meeting
382
+ CLIENT_LEAVE_REQUEST_TAB_CLOSED: 'CLIENT_LEAVE_REQUEST_TAB_CLOSED', // You triggered leave meeting, such as closing the browser tab directly
359
383
  USER_ENDED_SHARE_STREAMS: 'USER_ENDED_SHARE_STREAMS', // user triggered stop share
360
384
  NO_MEETINGS_TO_SYNC: 'NO_MEETINGS_TO_SYNC', // After the syncMeeting no meeting exists
361
385
  MEETING_CONNECTION_FAILED: 'MEETING_CONNECTION_FAILED', // meeting failed to connect due to ice failures or firewall issue
@@ -373,6 +397,7 @@ export const CALL_REMOVED_REASON = {
373
397
  export const SHARE_STOPPED_REASON = {
374
398
  SELF_STOPPED: 'SELF_STOPPED',
375
399
  MEETING_REJOIN: 'MEETING_REJOIN',
400
+ MEDIA_RECONNECTION: 'MEDIA_RECONNECTION',
376
401
  };
377
402
 
378
403
  export const EVENTS = {
@@ -448,6 +473,11 @@ export const ERROR_DICTIONARY = {
448
473
  MESSAGE: 'Captcha is required.',
449
474
  CODE: 8,
450
475
  },
476
+ BREAKOUT_EDIT: {
477
+ NAME: 'BreakoutEditLockedError',
478
+ MESSAGE: 'Edit lock token mismatch',
479
+ CODE: 9,
480
+ },
451
481
  };
452
482
 
453
483
  export const FLOOR_ACTION = {
@@ -469,6 +499,7 @@ export const HTTP_VERBS = {
469
499
  POST: 'POST',
470
500
  GET: 'GET',
471
501
  PATCH: 'PATCH',
502
+ DELETE: 'DELETE',
472
503
  };
473
504
 
474
505
  // https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/iceGatheringState
@@ -514,15 +545,73 @@ export const LOCUS = {
514
545
  SYNCDEBUG: 'sync_debug',
515
546
  };
516
547
 
548
+ export const ANNOTATION = {
549
+ ANNOTATION_ON_SHARE_SUPPORTED: 'ANNOTATION_ON_SHARE_SUPPORTED',
550
+ };
551
+ export const BREAKOUTS = {
552
+ STATUS: {
553
+ CLOSING: 'CLOSING',
554
+ CLOSED: 'CLOSED',
555
+ PENDING: 'PENDING',
556
+ OPEN: 'OPEN',
557
+ },
558
+ EVENTS: {
559
+ BREAKOUTS_CLOSING: 'BREAKOUTS_CLOSING',
560
+ MESSAGE: 'MESSAGE',
561
+ MEMBERS_UPDATE: 'MEMBERS_UPDATE',
562
+ ASK_RETURN_TO_MAIN: 'ASK_RETURN_TO_MAIN',
563
+ LEAVE_BREAKOUT: 'LEAVE_BREAKOUT',
564
+ ASK_FOR_HELP: 'ASK_FOR_HELP',
565
+ },
566
+ SESSION_TYPES: {
567
+ MAIN: 'MAIN',
568
+ BREAKOUT: 'BREAKOUT',
569
+ },
570
+ SESSION_STATES: {
571
+ ACTIVE: 'active',
572
+ ASSIGNED: 'assigned',
573
+ ALLOWED: 'allowed',
574
+ ASSIGNED_CURRENT: 'assignedCurrent',
575
+ REQUESTED: 'requested',
576
+ },
577
+ BREAKOUTS_SUPPORTED: 'BREAKOUTS_SUPPORTED',
578
+ ACTION: {
579
+ START: 'START',
580
+ CLOSE: 'CLOSE',
581
+ DELETE: 'DELETE',
582
+ },
583
+ ERROR_CODE: {
584
+ EDIT_LOCK_TOKEN_MISMATCH: 201409024,
585
+ EDIT_NOT_AUTHORIZED: 201403007,
586
+ },
587
+ DEFAULT_DURATION: 60000,
588
+ EDIT_LOCK_STATUS: {
589
+ LOCKED: 'LOCKED',
590
+ NOT_LOCKED: 'NOT_LOCKED',
591
+ UNKNOWN: 'UNKNOWN',
592
+ },
593
+ DEFAULT_TTL: 30,
594
+ };
595
+
517
596
  export const LOCUSINFO = {
518
597
  EVENTS: {
519
598
  CONTROLS_MEETING_LAYOUT_UPDATED: 'CONTROLS_MEETING_LAYOUT_UPDATED',
520
599
  CONTROLS_RECORDING_UPDATED: 'CONTROLS_RECORDING_UPDATED',
521
600
  CONTROLS_MEETING_TRANSCRIBE_UPDATED: 'CONTROLS_MEETING_TRANSCRIBE_UPDATED',
601
+ CONTROLS_MEETING_BREAKOUT_UPDATED: 'CONTROLS_MEETING_BREAKOUT_UPDATED',
522
602
  CONTROLS_MEETING_CONTAINER_UPDATED: 'CONTROLS_MEETING_CONTAINER_UPDATED',
523
603
  CONTROLS_ENTRY_EXIT_TONE_UPDATED: 'CONTROLS_ENTRY_EXIT_TONE_UPDATED',
604
+ CONTROLS_JOIN_BREAKOUT_FROM_MAIN: 'CONTROLS_JOIN_BREAKOUT_FROM_MAIN',
605
+ CONTROLS_MUTE_ON_ENTRY_CHANGED: 'CONTROLS_MUTE_ON_ENTRY_CHANGED',
606
+ CONTROLS_SHARE_CONTROL_CHANGED: 'CONTROLS_SHARE_CONTROL_CHANGED',
607
+ CONTROLS_DISALLOW_UNMUTE_CHANGED: 'CONTROLS_DISALLOW_UNMUTE_CHANGED',
608
+ CONTROLS_REACTIONS_CHANGED: 'CONTROLS_REACTIONS_CHANGED',
609
+ CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED: 'CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED',
610
+ CONTROLS_RAISE_HAND_CHANGED: 'CONTROLS_RAISE_HAND_CHANGED',
611
+ CONTROLS_VIDEO_CHANGED: 'CONTROLS_VIDEO_CHANGED',
524
612
  SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',
525
613
  SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',
614
+ SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: 'SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED',
526
615
  SELF_REMOTE_MUTE_STATUS_UPDATED: 'SELF_REMOTE_MUTE_STATUS_UPDATED',
527
616
  LOCAL_UNMUTE_REQUESTED: 'LOCAL_UNMUTE_REQUESTED',
528
617
  LOCAL_UNMUTE_REQUIRED: 'LOCAL_UNMUTE_REQUIRED',
@@ -540,6 +629,10 @@ export const LOCUSINFO = {
540
629
  EMBEDDED_APPS_UPDATED: 'EMBEDDED_APPS_UPDATED',
541
630
  SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE: 'SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE',
542
631
  SELF_IS_SHARING_BLOCKED_CHANGE: 'SELF_IS_SHARING_BLOCKED_CHANGE',
632
+ SELF_MEETING_BREAKOUTS_CHANGED: 'SELF_MEETING_BREAKOUTS_CHANGED',
633
+ MEDIA_INACTIVITY: 'MEDIA_INACTIVITY',
634
+ LINKS_SERVICES: 'LINKS_SERVICES',
635
+ SELF_MODERATOR_OR_COHOST_UPGRADE: 'SELF_MODERATOR_OR_COHOST_UPGRADE',
543
636
  },
544
637
  };
545
638
 
@@ -552,6 +645,9 @@ export const LOCUSEVENT = {
552
645
  // delta events
553
646
  DIFFERENCE: 'locus.difference',
554
647
 
648
+ // Breakout sessions
649
+ BREAKOUT_ROSTER: 'breakout.roster',
650
+
555
651
  // screen sharing
556
652
  FLOOR_GRANTED: 'locus.floor_granted',
557
653
  FLOOR_RELEASED: 'locus.floor_released',
@@ -722,13 +818,50 @@ export const DISPLAY_HINTS = {
722
818
  DISPLAY_NON_ENGLISH_ASR: 'DISPLAY_NON_ENGLISH_ASR',
723
819
  TRANSCRIPTION_CONTROL_START: 'TRANSCRIPTION_CONTROL_START',
724
820
  TRANSCRIPTION_CONTROL_STOP: 'TRANSCRIPTION_CONTROL_STOP',
821
+ SAVE_TRANSCRIPTS_ENABLED: 'SAVE_TRANSCRIPTS_ENABLED',
725
822
  WEBEX_ASSISTANT_STATUS_ACTIVE: 'WEBEX_ASSISTANT_STATUS_ACTIVE',
726
823
  WAITING_FOR_OTHERS: 'WAITING_FOR_OTHERS',
824
+ ENABLE_REACTIONS: 'ENABLE_REACTIONS',
825
+ DISABLE_REACTIONS: 'DISABLE_REACTIONS',
826
+ REACTIONS_ACTIVE: 'REACTIONS_ACTIVE',
827
+ REACTIONS_INACTIVE: 'REACTIONS_INACTIVE',
828
+ SHARE_CONTROL: 'SHARE_CONTROL',
829
+ ENABLE_MUTE_ON_ENTRY: 'ENABLE_MUTE_ON_ENTRY',
830
+ ENABLE_SHOW_DISPLAY_NAME: 'ENABLE_SHOW_DISPLAY_NAME',
831
+ DISABLE_SHOW_DISPLAY_NAME: 'DISABLE_SHOW_DISPLAY_NAME',
832
+ DISABLE_MUTE_ON_ENTRY: 'DISABLE_MUTE_ON_ENTRY',
833
+ ENABLE_HARD_MUTE: 'ENABLE_HARD_MUTE',
834
+ DISABLE_HARD_MUTE: 'DISABLE_HARD_MUTE',
835
+ MUTE_ALL: 'MUTE_ALL',
836
+ UNMUTE_ALL: 'UNMUTE_ALL',
837
+ PRESENTER_CONTROL: 'PRESENTER_CONTROL',
838
+ CAN_RENAME_SELF_AND_OBSERVED: 'CAN_RENAME_SELF_AND_OBSERVED',
839
+ CAN_RENAME_OTHERS: 'CAN_RENAME_OTHERS',
840
+
841
+ // breakout session
842
+ BREAKOUT_MANAGEMENT: 'BREAKOUT_MANAGEMENT',
843
+ UCF_SUPPRESS_BREAKOUTS_SUPPORT: 'UCF_SUPPRESS_BREAKOUTS_SUPPORT',
844
+ DISABLE_ASK_FOR_HELP: 'DISABLE_ASK_FOR_HELP',
845
+ DISABLE_BREAKOUT_PREASSIGNMENTS: 'DISABLE_BREAKOUT_PREASSIGNMENTS',
846
+ DISABLE_LOBBY_TO_BREAKOUT: 'DISABLE_LOBBY_TO_BREAKOUT',
847
+
848
+ // participants list
849
+ DISABLE_VIEW_THE_PARTICIPANT_LIST: 'DISABLE_VIEW_THE_PARTICIPANT_LIST',
850
+ ENABLE_VIEW_THE_PARTICIPANT_LIST: 'ENABLE_VIEW_THE_PARTICIPANT_LIST',
851
+
852
+ // raise hand
853
+ DISABLE_RAISE_HAND: 'DISABLE_RAISE_HAND',
854
+ ENABLE_RAISE_HAND: 'ENABLE_RAISE_HAND',
855
+
856
+ // video
857
+ DISABLE_VIDEO: 'DISABLE_VIDEO',
858
+ ENABLE_VIDEO: 'ENABLE_VIDEO',
727
859
  };
728
860
 
729
861
  export const SELF_ROLES = {
730
862
  COHOST: 'COHOST',
731
863
  MODERATOR: 'MODERATOR',
864
+ ATTENDEE: 'ATTENDEE',
732
865
  };
733
866
 
734
867
  export const MEETING_STATE = {
@@ -813,7 +946,9 @@ export const RESOURCE = {
813
946
  };
814
947
 
815
948
  export const REACHABILITY = {
816
- localStorage: 'reachability.result',
949
+ localStorageResult: 'reachability.result',
950
+ localStorageJoinCookie: 'reachability.joinCookie',
951
+ namespace: 'Reachability',
817
952
  };
818
953
 
819
954
  export const ROAP = {
@@ -848,9 +983,6 @@ export const NETWORK_TYPE = {
848
983
  };
849
984
 
850
985
  export const STATS = {
851
- AUDIO_CORRELATE: 'audio',
852
- VIDEO_CORRELATE: 'video',
853
- SHARE_CORRELATE: 'share',
854
986
  SEND_DIRECTION: 'send',
855
987
  RECEIVE_DIRECTION: 'recv',
856
988
  REMOTE: 'remote',
@@ -1040,6 +1172,7 @@ export const MEETING_INFO_FAILURE_REASON = {
1040
1172
  NONE: 'NONE', // meeting info was retrieved succesfully
1041
1173
  WRONG_PASSWORD: 'WRONG_PASSWORD', // meeting requires password and no password or wrong one was provided
1042
1174
  WRONG_CAPTCHA: 'WRONG_CAPTCHA', // wbxappapi requires a captcha code or a wrong captcha code was provided
1175
+ POLICY: 'POLICY', // meeting info request violates some meeting policy
1043
1176
  OTHER: 'OTHER', // any other error (network, etc)
1044
1177
  };
1045
1178
 
@@ -1054,3 +1187,8 @@ export const EMBEDDED_APP_TYPES = {
1054
1187
  SLIDO: 'SLIDO',
1055
1188
  OTHER: 'OTHER',
1056
1189
  };
1190
+
1191
+ export const DEFAULT_MEETING_INFO_REQUEST_BODY = {
1192
+ supportHostKey: true,
1193
+ supportCountryList: true,
1194
+ };
@@ -0,0 +1,5 @@
1
+ const ENABLED = 'enabled';
2
+ const CAN_SET = 'canSet';
3
+ const CAN_UNSET = 'canUnset';
4
+
5
+ export {ENABLED, CAN_SET, CAN_UNSET};
@@ -0,0 +1,18 @@
1
+ enum Setting {
2
+ disallowUnmute = 'DisallowUnmute',
3
+ muteOnEntry = 'MuteOnEntry',
4
+ muted = 'Muted',
5
+ }
6
+
7
+ enum Control {
8
+ audio = 'audio',
9
+ raiseHand = 'raiseHand',
10
+ reactions = 'reactions',
11
+ shareControl = 'shareControl',
12
+ video = 'video',
13
+ viewTheParticipantList = 'viewTheParticipantList',
14
+ }
15
+
16
+ export {Control, Setting};
17
+
18
+ export default Setting;
@@ -0,0 +1,278 @@
1
+ import {camelCase} from 'lodash';
2
+ import PermissionError from '../common/errors/permission';
3
+ import {CONTROLS, HTTP_VERBS} from '../constants';
4
+ import MeetingRequest from '../meeting/request';
5
+ import LoggerProxy from '../common/logs/logger-proxy';
6
+ import {Control, Setting} from './enums';
7
+ import {ControlConfig} from './types';
8
+ import Util from './util';
9
+ import {CAN_SET, CAN_UNSET, ENABLED} from './constants';
10
+
11
+ /**
12
+ * docs
13
+ * https://sqbu-github.cisco.com/pages/WebExSquared/locus/guides/mute.html
14
+ * https://confluence-eng-gpk2.cisco.com/conf/display/LOCUS/Hard+Mute+and+Audio+Privacy#HardMuteandAudioPrivacy-SelfMuteonEntry
15
+ * https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?spaceKey=UC&title=WEBEX-124454%3A+UCF%3A+Hard+mute+support+for+Teams+joining+Webex+meeting
16
+ * https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-180867
17
+ * https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-393351
18
+ */
19
+
20
+ /**
21
+ * @description ControlsOptionsManager is responsible for handling the behavior of participant controls when somebody joins a meeting
22
+ * @export
23
+ * @private
24
+ * @class Recording
25
+ */
26
+ export default class ControlsOptionsManager {
27
+ /**
28
+ * @instance
29
+ * @type {MeetingRequest}
30
+ * @private
31
+ * @memberof ControlsOptionsManager
32
+ */
33
+ private request: MeetingRequest;
34
+
35
+ /**
36
+ * @instance
37
+ * @type {Array}
38
+ * @private
39
+ * @memberof ControlsOptionsManager
40
+ */
41
+ private displayHints: Array<string> = [];
42
+
43
+ /**
44
+ * @instance
45
+ * @type {string}
46
+ * @private
47
+ * @memberof ControlsOptionsManager
48
+ */
49
+ private locusUrl: string;
50
+
51
+ /**
52
+ * @param {MeetingRequest} request
53
+ * @param {Object} options
54
+ * @constructor
55
+ * @memberof ControlsOptionsManager
56
+ */
57
+ constructor(
58
+ request: MeetingRequest,
59
+ options?: {
60
+ locusUrl: string;
61
+ displayHints?: Array<string>;
62
+ }
63
+ ) {
64
+ this.initialize(request);
65
+ this.set(options);
66
+ }
67
+
68
+ /**
69
+ * @param {MeetingRequest} request
70
+ * @returns {void}
71
+ * @private
72
+ * @memberof ControlsOptionsManager
73
+ */
74
+ private initialize(request: MeetingRequest) {
75
+ this.request = request;
76
+ }
77
+
78
+ /**
79
+ * @param {Object} options
80
+ * @returns {void}
81
+ * @public
82
+ * @memberof ControlsOptionsManager
83
+ */
84
+ public set(options?: {locusUrl: string; displayHints?: Array<string>}) {
85
+ this.extract(options);
86
+ }
87
+
88
+ /**
89
+ * @param {string} url
90
+ * @returns {void}
91
+ * @public
92
+ * @memberof ControlsOptionsManager
93
+ */
94
+ public setLocusUrl(url: string) {
95
+ this.locusUrl = url;
96
+ }
97
+
98
+ /**
99
+ * @param {Array} hints
100
+ * @returns {void}
101
+ * @public
102
+ * @memberof ControlsOptionsManager
103
+ */
104
+ public setDisplayHints(hints: Array<string>) {
105
+ this.displayHints = hints;
106
+ }
107
+
108
+ /**
109
+ * @returns {string}
110
+ * @public
111
+ * @memberof ControlsOptionsManager
112
+ */
113
+ public getLocusUrl() {
114
+ return this.locusUrl;
115
+ }
116
+
117
+ /**
118
+ * @returns {Array}
119
+ * @public
120
+ * @memberof ControlsOptionsManager
121
+ */
122
+ public getDisplayHints() {
123
+ return this.displayHints;
124
+ }
125
+
126
+ /**
127
+ * @param {Object} options
128
+ * @returns {void}
129
+ * @private
130
+ * @memberof ControlsOptionsManager
131
+ */
132
+ private extract(options?: {locusUrl: string; displayHints?: Array<string>}) {
133
+ this.setDisplayHints(options?.displayHints);
134
+ this.setLocusUrl(options?.locusUrl);
135
+ }
136
+
137
+ /**
138
+ * Set controls for this meeting.
139
+ *
140
+ * @param {Array<ControlConfig>} controls - Spread Array of ControlConfigs
141
+ * @returns {Promise<Array<any>>}- Promise resolving if the request was successful.
142
+ */
143
+ public update(...controls: Array<ControlConfig>) {
144
+ const payloads = controls.map((control) => {
145
+ if (!Object.keys(Control).includes(control.scope)) {
146
+ throw new Error(
147
+ `updating meeting control scope "${control.scope}" is not a supported scope`
148
+ );
149
+ }
150
+
151
+ if (!Util.canUpdate(control, this.displayHints)) {
152
+ throw new PermissionError(
153
+ `updating meeting control scope "${control.scope}" not allowed, due to moderator property.`
154
+ );
155
+ }
156
+
157
+ return {
158
+ [control.scope]: control.properties,
159
+ };
160
+ });
161
+
162
+ return payloads.reduce((previous, payload) => {
163
+ return previous.then(() =>
164
+ // @ts-ignore
165
+ this.request.request({
166
+ uri: `${this.locusUrl}/${CONTROLS}`,
167
+ body: payload,
168
+ method: HTTP_VERBS.PATCH,
169
+ })
170
+ );
171
+ }, Promise.resolve());
172
+ }
173
+
174
+ /**
175
+ * @param {Setting} setting
176
+ * @private
177
+ * @memberof ControlsOptionsManager
178
+ * @returns {Promise}
179
+ */
180
+ private setControls(setting: {[key in Setting]?: boolean}): Promise<any> {
181
+ LoggerProxy.logger.log(
182
+ `ControlsOptionsManager:index#setControls --> ${JSON.stringify(setting)}`
183
+ );
184
+
185
+ const body: Record<string, any> = {};
186
+ let error: PermissionError;
187
+
188
+ let shouldSkipCheckToMergeBody = false;
189
+
190
+ Object.entries(setting).forEach(([key, value]) => {
191
+ if (
192
+ !shouldSkipCheckToMergeBody &&
193
+ !Util?.[`${value ? CAN_SET : CAN_UNSET}${key}`](this.displayHints)
194
+ ) {
195
+ error = new PermissionError(`${key} [${value}] not allowed, due to moderator property.`);
196
+ }
197
+
198
+ if (error) {
199
+ return;
200
+ }
201
+
202
+ switch (key) {
203
+ case Setting.muted:
204
+ shouldSkipCheckToMergeBody = true;
205
+ body.audio = body.audio
206
+ ? {...body.audio, [camelCase(key)]: value}
207
+ : {[camelCase(key)]: value};
208
+ break;
209
+
210
+ case Setting.disallowUnmute:
211
+ case Setting.muteOnEntry:
212
+ if (Object.keys(setting).includes(Setting.muted)) {
213
+ body.audio = body.audio
214
+ ? {...body.audio, [camelCase(key)]: value}
215
+ : {[camelCase(key)]: value};
216
+ body.audio[camelCase(key)] = value;
217
+ } else {
218
+ body[camelCase(key)] = {[ENABLED]: value};
219
+ }
220
+ break;
221
+
222
+ default:
223
+ error = new PermissionError(`${key} [${value}] not allowed, due to moderator property.`);
224
+ }
225
+ });
226
+
227
+ if (error) {
228
+ return Promise.reject(error);
229
+ }
230
+
231
+ // @ts-ignore
232
+ return this.request.request({
233
+ uri: `${this.locusUrl}/${CONTROLS}`,
234
+ body,
235
+ method: HTTP_VERBS.PATCH,
236
+ });
237
+ }
238
+
239
+ /**
240
+ * @public
241
+ * @param {boolean} enabled
242
+ * @memberof ControlsOptionsManager
243
+ * @returns {Promise}
244
+ */
245
+ public setMuteOnEntry(enabled: boolean): Promise<any> {
246
+ return this.setControls({[Setting.muteOnEntry]: enabled});
247
+ }
248
+
249
+ /**
250
+ * @public
251
+ * @param {boolean} enabled
252
+ * @memberof ControlsOptionsManager
253
+ * @returns {Promise}
254
+ */
255
+ public setDisallowUnmute(enabled: boolean): Promise<any> {
256
+ return this.setControls({[Setting.disallowUnmute]: enabled});
257
+ }
258
+
259
+ /**
260
+ * @public
261
+ * @param {boolean} mutedEnabled
262
+ * @param {boolean} disallowUnmuteEnabled
263
+ * @param {boolean} muteOnEntryEnabled
264
+ * @memberof ControlsOptionsManager
265
+ * @returns {Promise}
266
+ */
267
+ public setMuteAll(
268
+ mutedEnabled: boolean,
269
+ disallowUnmuteEnabled: boolean,
270
+ muteOnEntryEnabled: boolean
271
+ ): Promise<any> {
272
+ return this.setControls({
273
+ [Setting.muted]: mutedEnabled,
274
+ [Setting.disallowUnmute]: disallowUnmuteEnabled,
275
+ [Setting.muteOnEntry]: muteOnEntryEnabled,
276
+ });
277
+ }
278
+ }