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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (498) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +137 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/edit-lock-error.js +52 -0
  8. package/dist/breakouts/edit-lock-error.js.map +1 -0
  9. package/dist/breakouts/index.js +546 -0
  10. package/dist/breakouts/index.js.map +1 -0
  11. package/dist/breakouts/request.js +78 -0
  12. package/dist/breakouts/request.js.map +1 -0
  13. package/dist/breakouts/utils.js +48 -0
  14. package/dist/breakouts/utils.js.map +1 -0
  15. package/dist/common/browser-detection.js +1 -20
  16. package/dist/common/browser-detection.js.map +1 -1
  17. package/dist/common/collection.js +5 -20
  18. package/dist/common/collection.js.map +1 -1
  19. package/dist/common/config.js +0 -7
  20. package/dist/common/config.js.map +1 -1
  21. package/dist/common/errors/captcha-error.js +10 -24
  22. package/dist/common/errors/captcha-error.js.map +1 -1
  23. package/dist/common/errors/intent-to-join.js +11 -24
  24. package/dist/common/errors/intent-to-join.js.map +1 -1
  25. package/dist/common/errors/join-meeting.js +12 -25
  26. package/dist/common/errors/join-meeting.js.map +1 -1
  27. package/dist/common/errors/media.js +10 -24
  28. package/dist/common/errors/media.js.map +1 -1
  29. package/dist/common/errors/parameter.js +5 -33
  30. package/dist/common/errors/parameter.js.map +1 -1
  31. package/dist/common/errors/password-error.js +10 -24
  32. package/dist/common/errors/password-error.js.map +1 -1
  33. package/dist/common/errors/permission.js +9 -23
  34. package/dist/common/errors/permission.js.map +1 -1
  35. package/dist/common/errors/reconnection-in-progress.js +0 -17
  36. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  37. package/dist/common/errors/reconnection.js +10 -24
  38. package/dist/common/errors/reconnection.js.map +1 -1
  39. package/dist/common/errors/stats.js +10 -24
  40. package/dist/common/errors/stats.js.map +1 -1
  41. package/dist/common/errors/webex-errors.js +6 -41
  42. package/dist/common/errors/webex-errors.js.map +1 -1
  43. package/dist/common/errors/webex-meetings-error.js +5 -25
  44. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  45. package/dist/common/events/events-scope.js +0 -22
  46. package/dist/common/events/events-scope.js.map +1 -1
  47. package/dist/common/events/events.js +0 -23
  48. package/dist/common/events/events.js.map +1 -1
  49. package/dist/common/events/trigger-proxy.js +0 -12
  50. package/dist/common/events/trigger-proxy.js.map +1 -1
  51. package/dist/common/events/util.js +0 -15
  52. package/dist/common/events/util.js.map +1 -1
  53. package/dist/common/logs/logger-config.js +0 -4
  54. package/dist/common/logs/logger-config.js.map +1 -1
  55. package/dist/common/logs/logger-proxy.js +1 -8
  56. package/dist/common/logs/logger-proxy.js.map +1 -1
  57. package/dist/common/logs/request.js +37 -60
  58. package/dist/common/logs/request.js.map +1 -1
  59. package/dist/common/queue.js +4 -14
  60. package/dist/common/queue.js.map +1 -1
  61. package/dist/config.js +6 -6
  62. package/dist/config.js.map +1 -1
  63. package/dist/constants.js +109 -49
  64. package/dist/constants.js.map +1 -1
  65. package/dist/controls-options-manager/constants.js +14 -0
  66. package/dist/controls-options-manager/constants.js.map +1 -0
  67. package/dist/controls-options-manager/enums.js +15 -0
  68. package/dist/controls-options-manager/enums.js.map +1 -0
  69. package/dist/controls-options-manager/index.js +203 -0
  70. package/dist/controls-options-manager/index.js.map +1 -0
  71. package/dist/controls-options-manager/util.js +28 -0
  72. package/dist/controls-options-manager/util.js.map +1 -0
  73. package/dist/index.js +11 -18
  74. package/dist/index.js.map +1 -1
  75. package/dist/locus-info/controlsUtils.js +12 -29
  76. package/dist/locus-info/controlsUtils.js.map +1 -1
  77. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  78. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  79. package/dist/locus-info/fullState.js +0 -15
  80. package/dist/locus-info/fullState.js.map +1 -1
  81. package/dist/locus-info/hostUtils.js +4 -12
  82. package/dist/locus-info/hostUtils.js.map +1 -1
  83. package/dist/locus-info/index.js +186 -192
  84. package/dist/locus-info/index.js.map +1 -1
  85. package/dist/locus-info/infoUtils.js +3 -37
  86. package/dist/locus-info/infoUtils.js.map +1 -1
  87. package/dist/locus-info/mediaSharesUtils.js +12 -38
  88. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  89. package/dist/locus-info/parser.js +92 -118
  90. package/dist/locus-info/parser.js.map +1 -1
  91. package/dist/locus-info/selfUtils.js +34 -91
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.js +66 -153
  94. package/dist/media/index.js.map +1 -1
  95. package/dist/media/properties.js +83 -117
  96. package/dist/media/properties.js.map +1 -1
  97. package/dist/media/util.js +2 -9
  98. package/dist/media/util.js.map +1 -1
  99. package/dist/mediaQualityMetrics/config.js +505 -495
  100. package/dist/mediaQualityMetrics/config.js.map +1 -1
  101. package/dist/meeting/in-meeting-actions.js +13 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2141 -2210
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +59 -82
  106. package/dist/meeting/muteState.js.map +1 -1
  107. package/dist/meeting/request.js +308 -264
  108. package/dist/meeting/request.js.map +1 -1
  109. package/dist/meeting/request.type.js +7 -0
  110. package/dist/meeting/request.type.js.map +1 -0
  111. package/dist/meeting/state.js +21 -31
  112. package/dist/meeting/state.js.map +1 -1
  113. package/dist/meeting/util.js +45 -217
  114. package/dist/meeting/util.js.map +1 -1
  115. package/dist/meeting-info/collection.js +6 -25
  116. package/dist/meeting-info/collection.js.map +1 -1
  117. package/dist/meeting-info/index.js +14 -32
  118. package/dist/meeting-info/index.js.map +1 -1
  119. package/dist/meeting-info/meeting-info-v2.js +193 -268
  120. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  121. package/dist/meeting-info/request.js +3 -15
  122. package/dist/meeting-info/request.js.map +1 -1
  123. package/dist/meeting-info/util.js +98 -183
  124. package/dist/meeting-info/util.js.map +1 -1
  125. package/dist/meeting-info/utilv2.js +137 -228
  126. package/dist/meeting-info/utilv2.js.map +1 -1
  127. package/dist/meetings/collection.js +5 -20
  128. package/dist/meetings/collection.js.map +1 -1
  129. package/dist/meetings/index.js +490 -560
  130. package/dist/meetings/index.js.map +1 -1
  131. package/dist/meetings/request.js +24 -41
  132. package/dist/meetings/request.js.map +1 -1
  133. package/dist/meetings/util.js +116 -155
  134. package/dist/meetings/util.js.map +1 -1
  135. package/dist/member/index.js +78 -86
  136. package/dist/member/index.js.map +1 -1
  137. package/dist/member/util.js +31 -68
  138. package/dist/member/util.js.map +1 -1
  139. package/dist/members/collection.js +3 -12
  140. package/dist/members/collection.js.map +1 -1
  141. package/dist/members/index.js +95 -200
  142. package/dist/members/index.js.map +1 -1
  143. package/dist/members/request.js +16 -39
  144. package/dist/members/request.js.map +1 -1
  145. package/dist/members/util.js +9 -38
  146. package/dist/members/util.js.map +1 -1
  147. package/dist/metrics/config.js +1 -13
  148. package/dist/metrics/config.js.map +1 -1
  149. package/dist/metrics/constants.js +1 -6
  150. package/dist/metrics/constants.js.map +1 -1
  151. package/dist/metrics/index.js +54 -156
  152. package/dist/metrics/index.js.map +1 -1
  153. package/dist/multistream/mediaRequestManager.js +74 -52
  154. package/dist/multistream/mediaRequestManager.js.map +1 -1
  155. package/dist/multistream/receiveSlot.js +48 -65
  156. package/dist/multistream/receiveSlot.js.map +1 -1
  157. package/dist/multistream/receiveSlotManager.js +60 -82
  158. package/dist/multistream/receiveSlotManager.js.map +1 -1
  159. package/dist/multistream/remoteMedia.js +60 -76
  160. package/dist/multistream/remoteMedia.js.map +1 -1
  161. package/dist/multistream/remoteMediaGroup.js +6 -40
  162. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  163. package/dist/multistream/remoteMediaManager.js +360 -413
  164. package/dist/multistream/remoteMediaManager.js.map +1 -1
  165. package/dist/networkQualityMonitor/index.js +40 -59
  166. package/dist/networkQualityMonitor/index.js.map +1 -1
  167. package/dist/personal-meeting-room/index.js +21 -45
  168. package/dist/personal-meeting-room/index.js.map +1 -1
  169. package/dist/personal-meeting-room/request.js +1 -31
  170. package/dist/personal-meeting-room/request.js.map +1 -1
  171. package/dist/personal-meeting-room/util.js +0 -13
  172. package/dist/personal-meeting-room/util.js.map +1 -1
  173. package/dist/reachability/index.js +147 -183
  174. package/dist/reachability/index.js.map +1 -1
  175. package/dist/reachability/request.js +15 -23
  176. package/dist/reachability/request.js.map +1 -1
  177. package/dist/reactions/constants.js +13 -0
  178. package/dist/reactions/constants.js.map +1 -0
  179. package/dist/reactions/reactions.js +109 -0
  180. package/dist/reactions/reactions.js.map +1 -0
  181. package/dist/reactions/reactions.type.js +36 -0
  182. package/dist/reactions/reactions.type.js.map +1 -0
  183. package/dist/reconnection-manager/index.js +322 -456
  184. package/dist/reconnection-manager/index.js.map +1 -1
  185. package/dist/recording-controller/enums.js +17 -0
  186. package/dist/recording-controller/enums.js.map +1 -0
  187. package/dist/recording-controller/index.js +343 -0
  188. package/dist/recording-controller/index.js.map +1 -0
  189. package/dist/recording-controller/util.js +63 -0
  190. package/dist/recording-controller/util.js.map +1 -0
  191. package/dist/roap/index.js +48 -70
  192. package/dist/roap/index.js.map +1 -1
  193. package/dist/roap/request.js +143 -131
  194. package/dist/roap/request.js.map +1 -1
  195. package/dist/roap/turnDiscovery.js +91 -98
  196. package/dist/roap/turnDiscovery.js.map +1 -1
  197. package/dist/statsAnalyzer/global.js +1 -95
  198. package/dist/statsAnalyzer/global.js.map +1 -1
  199. package/dist/statsAnalyzer/index.js +361 -449
  200. package/dist/statsAnalyzer/index.js.map +1 -1
  201. package/dist/statsAnalyzer/mqaUtil.js +137 -81
  202. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  203. package/dist/transcription/index.js +22 -47
  204. package/dist/transcription/index.js.map +1 -1
  205. package/dist/types/breakouts/breakout.d.ts +8 -0
  206. package/dist/types/breakouts/collection.d.ts +5 -0
  207. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  208. package/dist/types/breakouts/index.d.ts +5 -0
  209. package/dist/types/breakouts/request.d.ts +22 -0
  210. package/dist/types/breakouts/utils.d.ts +8 -0
  211. package/dist/types/common/browser-detection.d.ts +9 -0
  212. package/dist/types/common/collection.d.ts +48 -0
  213. package/dist/types/common/config.d.ts +2 -0
  214. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  215. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  216. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  217. package/dist/types/common/errors/media.d.ts +15 -0
  218. package/dist/types/common/errors/parameter.d.ts +15 -0
  219. package/dist/types/common/errors/password-error.d.ts +15 -0
  220. package/dist/types/common/errors/permission.d.ts +14 -0
  221. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  222. package/dist/types/common/errors/reconnection.d.ts +15 -0
  223. package/dist/types/common/errors/stats.d.ts +15 -0
  224. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  225. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  226. package/dist/types/common/events/events-scope.d.ts +17 -0
  227. package/dist/types/common/events/events.d.ts +12 -0
  228. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  229. package/dist/types/common/events/util.d.ts +2 -0
  230. package/dist/types/common/logs/logger-config.d.ts +2 -0
  231. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  232. package/dist/types/common/logs/request.d.ts +34 -0
  233. package/dist/types/common/queue.d.ts +32 -0
  234. package/dist/types/config.d.ts +77 -0
  235. package/dist/types/constants.d.ts +916 -0
  236. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  237. package/dist/types/controls-options-manager/enums.d.ts +5 -0
  238. package/dist/types/controls-options-manager/index.d.ts +120 -0
  239. package/dist/types/controls-options-manager/util.d.ts +7 -0
  240. package/dist/types/index.d.ts +6 -0
  241. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  242. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  243. package/dist/types/locus-info/fullState.d.ts +2 -0
  244. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  245. package/dist/types/locus-info/index.d.ts +269 -0
  246. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  247. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  248. package/dist/types/locus-info/parser.d.ts +212 -0
  249. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  250. package/dist/types/media/index.d.ts +32 -0
  251. package/dist/types/media/properties.d.ts +108 -0
  252. package/dist/types/media/util.d.ts +2 -0
  253. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  254. package/dist/types/meeting/in-meeting-actions.d.ts +83 -0
  255. package/dist/types/meeting/index.d.ts +1699 -0
  256. package/dist/types/meeting/muteState.d.ts +116 -0
  257. package/dist/types/meeting/request.d.ts +271 -0
  258. package/dist/types/meeting/request.type.d.ts +11 -0
  259. package/dist/types/meeting/state.d.ts +9 -0
  260. package/dist/types/meeting/util.d.ts +2 -0
  261. package/dist/types/meeting-info/collection.d.ts +20 -0
  262. package/dist/types/meeting-info/index.d.ts +57 -0
  263. package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
  264. package/dist/types/meeting-info/request.d.ts +22 -0
  265. package/dist/types/meeting-info/util.d.ts +2 -0
  266. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  267. package/dist/types/meetings/collection.d.ts +23 -0
  268. package/dist/types/meetings/index.d.ts +297 -0
  269. package/dist/types/meetings/request.d.ts +27 -0
  270. package/dist/types/meetings/util.d.ts +18 -0
  271. package/dist/types/member/index.d.ts +146 -0
  272. package/dist/types/member/util.d.ts +2 -0
  273. package/dist/types/members/collection.d.ts +24 -0
  274. package/dist/types/members/index.d.ts +320 -0
  275. package/dist/types/members/request.d.ts +50 -0
  276. package/dist/types/members/util.d.ts +2 -0
  277. package/dist/types/metrics/config.d.ts +169 -0
  278. package/dist/types/metrics/constants.d.ts +53 -0
  279. package/dist/types/metrics/index.d.ts +152 -0
  280. package/dist/types/multistream/mediaRequestManager.d.ts +51 -0
  281. package/dist/types/multistream/receiveSlot.d.ts +64 -0
  282. package/dist/types/multistream/receiveSlotManager.d.ts +46 -0
  283. package/dist/types/multistream/remoteMedia.d.ts +100 -0
  284. package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
  285. package/dist/types/multistream/remoteMediaManager.d.ts +241 -0
  286. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  287. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  288. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  289. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  290. package/dist/types/reachability/index.d.ts +140 -0
  291. package/dist/types/reachability/request.d.ts +37 -0
  292. package/dist/types/reactions/constants.d.ts +3 -0
  293. package/dist/types/reactions/reactions.d.ts +4 -0
  294. package/dist/types/reactions/reactions.type.d.ts +52 -0
  295. package/dist/types/reconnection-manager/index.d.ts +117 -0
  296. package/dist/types/recording-controller/enums.d.ts +7 -0
  297. package/dist/types/recording-controller/index.d.ts +193 -0
  298. package/dist/types/recording-controller/util.d.ts +13 -0
  299. package/dist/types/roap/index.d.ts +77 -0
  300. package/dist/types/roap/request.d.ts +38 -0
  301. package/dist/types/roap/turnDiscovery.d.ts +74 -0
  302. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  303. package/dist/types/statsAnalyzer/index.d.ts +195 -0
  304. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  305. package/dist/types/transcription/index.d.ts +64 -0
  306. package/internal-README.md +7 -6
  307. package/package.json +27 -21
  308. package/src/breakouts/README.md +199 -0
  309. package/src/breakouts/breakout.ts +130 -0
  310. package/src/breakouts/collection.ts +19 -0
  311. package/src/breakouts/edit-lock-error.ts +25 -0
  312. package/src/breakouts/index.ts +504 -0
  313. package/src/breakouts/request.ts +55 -0
  314. package/src/breakouts/utils.ts +39 -0
  315. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  316. package/src/common/collection.ts +9 -7
  317. package/src/common/{config.js → config.ts} +1 -1
  318. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  319. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  320. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  321. package/src/common/errors/{media.js → media.ts} +11 -7
  322. package/src/common/errors/parameter.ts +11 -7
  323. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  324. package/src/common/errors/{permission.js → permission.ts} +10 -6
  325. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  326. package/src/common/errors/{stats.js → stats.ts} +11 -7
  327. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  328. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  329. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  330. package/src/common/events/{events.js → events.ts} +5 -1
  331. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  332. package/src/common/events/{util.js → util.ts} +2 -3
  333. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  334. package/src/common/logs/logger-proxy.ts +44 -0
  335. package/src/common/logs/{request.js → request.ts} +22 -9
  336. package/src/common/queue.ts +1 -2
  337. package/src/{config.js → config.ts} +17 -12
  338. package/src/constants.ts +62 -5
  339. package/src/controls-options-manager/constants.ts +5 -0
  340. package/src/controls-options-manager/enums.ts +6 -0
  341. package/src/controls-options-manager/index.ts +183 -0
  342. package/src/controls-options-manager/util.ts +20 -0
  343. package/src/index.js +4 -1
  344. package/src/locus-info/controlsUtils.ts +114 -0
  345. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  346. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  347. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  348. package/src/locus-info/{index.js → index.ts} +150 -66
  349. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  350. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  351. package/src/locus-info/{parser.js → parser.ts} +67 -79
  352. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  353. package/src/media/{index.js → index.ts} +182 -173
  354. package/src/media/{properties.js → properties.ts} +60 -37
  355. package/src/media/{util.js → util.ts} +2 -2
  356. package/src/mediaQualityMetrics/config.ts +384 -0
  357. package/src/meeting/in-meeting-actions.ts +31 -3
  358. package/src/meeting/{index.js → index.ts} +2512 -1579
  359. package/src/meeting/{muteState.js → muteState.ts} +95 -49
  360. package/src/meeting/{request.js → request.ts} +326 -142
  361. package/src/meeting/request.type.ts +13 -0
  362. package/src/meeting/{state.js → state.ts} +50 -35
  363. package/src/meeting/{util.js → util.ts} +117 -119
  364. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  365. package/src/meeting-info/{index.js → index.ts} +42 -36
  366. package/src/meeting-info/meeting-info-v2.ts +273 -0
  367. package/src/meeting-info/{request.js → request.ts} +14 -4
  368. package/src/meeting-info/{util.js → util.ts} +60 -51
  369. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  370. package/src/meetings/{collection.js → collection.ts} +6 -3
  371. package/src/meetings/index.ts +1159 -0
  372. package/src/meetings/{request.js → request.ts} +32 -25
  373. package/src/meetings/{util.js → util.ts} +58 -32
  374. package/src/member/{index.js → index.ts} +102 -56
  375. package/src/member/{util.js → util.ts} +52 -25
  376. package/src/members/{collection.js → collection.ts} +2 -2
  377. package/src/members/{index.js → index.ts} +221 -142
  378. package/src/members/{request.js → request.ts} +60 -16
  379. package/src/members/{util.js → util.ts} +50 -48
  380. package/src/metrics/{config.js → config.ts} +253 -92
  381. package/src/metrics/{constants.js → constants.ts} +0 -6
  382. package/src/metrics/{index.js → index.ts} +105 -94
  383. package/src/multistream/mediaRequestManager.ts +101 -39
  384. package/src/multistream/receiveSlot.ts +62 -26
  385. package/src/multistream/receiveSlotManager.ts +35 -21
  386. package/src/multistream/remoteMedia.ts +38 -5
  387. package/src/multistream/remoteMediaGroup.ts +4 -3
  388. package/src/multistream/remoteMediaManager.ts +152 -36
  389. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  390. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  391. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  392. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  393. package/src/reachability/{index.js → index.ts} +109 -85
  394. package/src/reachability/request.ts +46 -35
  395. package/src/reactions/constants.ts +4 -0
  396. package/src/reactions/reactions.ts +104 -0
  397. package/src/reactions/reactions.type.ts +62 -0
  398. package/src/reconnection-manager/{index.js → index.ts} +196 -103
  399. package/src/recording-controller/enums.ts +8 -0
  400. package/src/recording-controller/index.ts +315 -0
  401. package/src/recording-controller/util.ts +58 -0
  402. package/src/roap/{index.js → index.ts} +77 -60
  403. package/src/roap/request.ts +172 -0
  404. package/src/roap/turnDiscovery.ts +81 -41
  405. package/src/statsAnalyzer/global.ts +37 -0
  406. package/src/statsAnalyzer/index.ts +1234 -0
  407. package/src/statsAnalyzer/mqaUtil.ts +293 -0
  408. package/src/transcription/{index.js → index.ts} +46 -39
  409. package/test/integration/spec/converged-space-meetings.js +176 -0
  410. package/test/integration/spec/journey.js +665 -464
  411. package/test/integration/spec/space-meeting.js +320 -206
  412. package/test/integration/spec/transcription.js +7 -8
  413. package/test/unit/spec/breakouts/breakout.ts +147 -0
  414. package/test/unit/spec/breakouts/collection.ts +15 -0
  415. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  416. package/test/unit/spec/breakouts/index.ts +707 -0
  417. package/test/unit/spec/breakouts/request.ts +104 -0
  418. package/test/unit/spec/breakouts/utils.js +47 -0
  419. package/test/unit/spec/common/browser-detection.js +9 -28
  420. package/test/unit/spec/controls-options-manager/index.js +124 -0
  421. package/test/unit/spec/controls-options-manager/util.js +66 -0
  422. package/test/unit/spec/fixture/locus.js +92 -90
  423. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  424. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  425. package/test/unit/spec/locus-info/index.js +104 -2
  426. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  427. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  428. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  429. package/test/unit/spec/locus-info/parser.js +3 -9
  430. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  431. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  432. package/test/unit/spec/media/index.ts +39 -53
  433. package/test/unit/spec/media/properties.ts +9 -9
  434. package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
  435. package/test/unit/spec/meeting/index.js +2253 -811
  436. package/test/unit/spec/meeting/muteState.js +74 -55
  437. package/test/unit/spec/meeting/request.js +141 -43
  438. package/test/unit/spec/meeting/utils.js +106 -171
  439. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  440. package/test/unit/spec/meeting-info/request.js +7 -9
  441. package/test/unit/spec/meeting-info/util.js +11 -12
  442. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  443. package/test/unit/spec/meetings/collection.js +1 -1
  444. package/test/unit/spec/meetings/index.js +439 -257
  445. package/test/unit/spec/meetings/utils.js +14 -12
  446. package/test/unit/spec/member/index.js +0 -1
  447. package/test/unit/spec/member/util.js +31 -7
  448. package/test/unit/spec/members/index.js +104 -54
  449. package/test/unit/spec/members/request.js +29 -20
  450. package/test/unit/spec/members/utils.js +8 -5
  451. package/test/unit/spec/metrics/index.js +16 -21
  452. package/test/unit/spec/multistream/mediaRequestManager.ts +318 -64
  453. package/test/unit/spec/multistream/receiveSlot.ts +68 -17
  454. package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
  455. package/test/unit/spec/multistream/remoteMedia.ts +38 -2
  456. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  457. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  458. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  459. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  460. package/test/unit/spec/reachability/index.ts +70 -27
  461. package/test/unit/spec/reachability/request.js +66 -0
  462. package/test/unit/spec/reconnection-manager/index.js +58 -30
  463. package/test/unit/spec/recording-controller/index.js +231 -0
  464. package/test/unit/spec/recording-controller/util.js +102 -0
  465. package/test/unit/spec/roap/index.ts +12 -8
  466. package/test/unit/spec/roap/request.ts +217 -0
  467. package/test/unit/spec/roap/turnDiscovery.ts +72 -49
  468. package/test/unit/spec/stats-analyzer/index.js +86 -57
  469. package/test/utils/cmr.js +44 -42
  470. package/test/utils/constants.js +9 -0
  471. package/test/utils/testUtils.js +98 -77
  472. package/test/utils/webex-config.js +22 -18
  473. package/test/utils/webex-test-users.js +57 -50
  474. package/tsconfig.json +6 -0
  475. package/dist/media/internal-media-core-wrapper.js +0 -22
  476. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  477. package/dist/meeting/effectsState.js +0 -327
  478. package/dist/meeting/effectsState.js.map +0 -1
  479. package/dist/multistream/multistreamMedia.js +0 -116
  480. package/dist/multistream/multistreamMedia.js.map +0 -1
  481. package/dist/peer-connection-manager/util.js +0 -124
  482. package/dist/peer-connection-manager/util.js.map +0 -1
  483. package/src/common/logs/logger-proxy.js +0 -33
  484. package/src/locus-info/controlsUtils.js +0 -102
  485. package/src/media/internal-media-core-wrapper.ts +0 -9
  486. package/src/mediaQualityMetrics/config.js +0 -382
  487. package/src/meeting/effectsState.js +0 -205
  488. package/src/meeting-info/meeting-info-v2.js +0 -255
  489. package/src/meetings/index.js +0 -1015
  490. package/src/multistream/multistreamMedia.ts +0 -92
  491. package/src/peer-connection-manager/util.ts +0 -117
  492. package/src/roap/request.js +0 -127
  493. package/src/statsAnalyzer/global.js +0 -133
  494. package/src/statsAnalyzer/index.js +0 -1006
  495. package/src/statsAnalyzer/mqaUtil.js +0 -173
  496. package/test/unit/spec/meeting/effectsState.js +0 -291
  497. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  498. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -0,0 +1,44 @@
1
+ /* eslint-disable no-unused-vars */
2
+ import LoggerConfig from './logger-config';
3
+
4
+ const LoggerProxy: any = {
5
+ logger: {
6
+ info: (args) => {
7
+ console.error('LoggerProxy->info#NO LOGGER DEFINED');
8
+ },
9
+ log: (args) => {
10
+ console.error('LoggerProxy->log#NO LOGGER DEFINED');
11
+ },
12
+ error: (args) => {
13
+ console.error('LoggerProxy->error#NO LOGGER DEFINED');
14
+ },
15
+ warn: (args) => {
16
+ console.error('LoggerProxy->warn#NO LOGGER DEFINED');
17
+ },
18
+ trace: (args) => {
19
+ console.error('LoggerProxy->trace#NO LOGGER DEFINED');
20
+ },
21
+ debug: (args) => {
22
+ console.error('LoggerProxy->debug#NO LOGGER DEFINED');
23
+ },
24
+ },
25
+ };
26
+
27
+ LoggerProxy.set = (logger) => {
28
+ if (!LoggerConfig.enable) {
29
+ LoggerProxy.logger = {
30
+ info: () => {},
31
+ log: () => {},
32
+ error: () => {},
33
+ warn: () => {},
34
+ trace: () => {},
35
+ debug: () => {},
36
+ };
37
+ } else {
38
+ LoggerProxy.logger = logger;
39
+ }
40
+ };
41
+
42
+ LoggerProxy.get = () => LoggerProxy.logger;
43
+
44
+ export default LoggerProxy;
@@ -6,13 +6,15 @@ import LoggerProxy from './logger-proxy';
6
6
  * @class LogsRequest
7
7
  */
8
8
  export default class LogsRequest {
9
+ webex: any;
10
+
9
11
  /**
10
12
  *
11
13
  * @param {Object} options
12
14
  * @param {Object} options.webex Webex SDK instance
13
15
  * @param {ClientMetrics} metrics
14
16
  */
15
- constructor(options) {
17
+ constructor(options: {webex: object}) {
16
18
  this.webex = options.webex;
17
19
  }
18
20
 
@@ -28,20 +30,31 @@ export default class LogsRequest {
28
30
  * @returns {Promise.<String>} Feedback ID
29
31
  * @memberof LogsRequest
30
32
  */
31
- async uploadLogs(options = {}) {
33
+ async uploadLogs(
34
+ options: {
35
+ feedbackId?: string;
36
+ locusId?: string;
37
+ correlationId?: string;
38
+ callStart?: string;
39
+ meetingId?: string;
40
+ } = {}
41
+ ) {
32
42
  const id = options.feedbackId || uuid.v4();
33
- const {
34
- locusId, correlationId, meetingId, callStart
35
- } = options;
43
+ const {locusId, correlationId, meetingId, callStart} = options;
36
44
 
37
- LoggerProxy.logger.info(`Logs:request#uploadLogs --> uploading user logs for feedbackId: ${id}`);
45
+ LoggerProxy.logger.info(
46
+ `Logs:request#uploadLogs --> uploading user logs for feedbackId: ${id}`
47
+ );
38
48
 
39
49
  try {
40
50
  await this.webex.internal.support.submitLogs({
41
- feedbackId: id, locusId, correlationId, meetingId, callStart
51
+ feedbackId: id,
52
+ locusId,
53
+ correlationId,
54
+ meetingId,
55
+ callStart,
42
56
  });
43
- }
44
- catch (error) {
57
+ } catch (error) {
45
58
  LoggerProxy.logger.error('Logs:request#uploadLogs --> uploading user logs failed', error);
46
59
 
47
60
  return Promise.reject(error);
@@ -23,7 +23,7 @@ export default class SimpleQueue {
23
23
  * @param {object} item
24
24
  * @returns {undefined}
25
25
  */
26
- enqueue(item) {
26
+ enqueue(item: object) {
27
27
  this.queue.push(item);
28
28
  }
29
29
 
@@ -48,4 +48,3 @@ export default class SimpleQueue {
48
48
  return this.queue.length;
49
49
  }
50
50
  }
51
-
@@ -1,5 +1,6 @@
1
1
  import {
2
- deviceType
2
+ // @ts-ignore
3
+ deviceType,
3
4
  } from '@webex/common';
4
5
 
5
6
  export default {
@@ -15,7 +16,7 @@ export default {
15
16
  receiveVideo: true,
16
17
  pstn: false,
17
18
  sendShare: false,
18
- receiveShare: false
19
+ receiveShare: false,
19
20
  },
20
21
  reconnection: {
21
22
  enabled: false,
@@ -24,7 +25,7 @@ export default {
24
25
  // Timeout duration to wait for ICE to reconnect if a disconnect is received.
25
26
  iceReconnectionTimeout: 10000,
26
27
  // Amount of times attempting to rejoin a meeting during reconnect
27
- maxRejoinAttempts: 3
28
+ maxRejoinAttempts: 3,
28
29
  },
29
30
  stats: {
30
31
  // Enable the webrtc stats analyzer that emits quality degradation events
@@ -40,7 +41,7 @@ export default {
40
41
  // Once packet loss hits this ratio, the video will downgrade
41
42
  videoPacketLossRatioThreshold: 9, // comparison of packets lost / packets received
42
43
  rttThreshold: 500, // 500 ms noticeable quality lag begins based on bandwidth of user
43
- 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
44
45
  },
45
46
  metrics: {
46
47
  // change to your client name else data will be muddled
@@ -54,30 +55,30 @@ export default {
54
55
  mqaMetricsInterval: 60000,
55
56
  // send to cisco internal MQA data automatically
56
57
  // we already send CA
57
- autoSendMQA: true
58
+ autoSendMQA: true,
58
59
  },
59
60
  logging: {
60
61
  enable: true,
61
- verboseEvents: true
62
+ verboseEvents: true,
62
63
  },
63
64
  resolution: {
64
65
  maxWidth: 1280,
65
66
  maxHeight: 720,
66
67
  idealWidth: 1280,
67
- idealHeight: 720
68
+ idealHeight: 720,
68
69
  },
69
70
  screenResolution: {
70
71
  maxWidth: 1920,
71
72
  maxHeight: 1080,
72
73
  idealWidth: 1920,
73
- idealHeight: 1080
74
+ idealHeight: 1080,
74
75
  },
75
76
  bandwidth: {
76
77
  // please note, these are the maximum bandwidth values
77
78
  // the server supports, minimums have to be tested
78
79
  audio: 64000,
79
80
  video: 4000000,
80
- startBitrate: 2000
81
+ startBitrate: 2000,
81
82
  },
82
83
  screenFrameRate: 10,
83
84
  videoShareFrameRate: 30,
@@ -87,11 +88,15 @@ export default {
87
88
  enableRtx: true,
88
89
  receiveTranscription: false,
89
90
  enableExtmap: false,
91
+ enableAutomaticLLM: false,
90
92
  experimental: {
91
93
  enableMediaNegotiatedEvent: false,
92
94
  enableUnifiedMeetings: false,
93
95
  enableAdhocMeetings: false,
94
- enableTurnDiscovery: false,
95
- }
96
- }
96
+ enableTurnDiscovery: true,
97
+ },
98
+ degradationPreferences: {
99
+ maxMacroblocksLimit: 8192,
100
+ },
101
+ },
97
102
  };
package/src/constants.ts CHANGED
@@ -1,3 +1,4 @@
1
+ // @ts-ignore
1
2
  import {hydraTypes} from '@webex/common';
2
3
 
3
4
  // *********** LOWERCASE / CAMELCASE STRINGS ************
@@ -287,6 +288,7 @@ export const EVENT_TRIGGERS = {
287
288
  MEETING_STOPPED_RECORDING: 'meeting:recording:stopped',
288
289
  MEETING_STARTED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:started',
289
290
  MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
291
+ MEETING_RECEIVE_REACTIONS: 'meeting:receiveReactions',
290
292
  MEETING_PAUSED_RECORDING: 'meeting:recording:paused',
291
293
  MEETING_RESUMED_RECORDING: 'meeting:recording:resumed',
292
294
  MEETING_ADDED: 'meeting:added',
@@ -303,6 +305,9 @@ export const EVENT_TRIGGERS = {
303
305
  MEETING_SELF_IS_SHARING_BLOCKED: 'meeting:self:isSharingBlocked',
304
306
  MEETING_CONTROLS_LAYOUT_UPDATE: 'meeting:layout:update',
305
307
  MEETING_ENTRY_EXIT_TONE_UPDATE: 'meeting:entryExitTone:update',
308
+ MEETING_BREAKOUTS_UPDATE: 'meeting:breakouts:update',
309
+ MEETING_BREAKOUTS_CLOSING: 'meeting:breakouts:closing',
310
+ MEETING_BREAKOUTS_MESSAGE: 'meeting:breakouts:message',
306
311
  MEMBERS_UPDATE: 'members:update',
307
312
  MEMBERS_CONTENT_UPDATE: 'members:content:update',
308
313
  MEMBERS_HOST_UPDATE: 'members:host:update',
@@ -330,7 +335,7 @@ export const EVENT_TRIGGERS = {
330
335
  REMOTE_VIDEO_SOURCE_COUNT_CHANGED: 'media:remoteVideoSourceCountChanged',
331
336
  REMOTE_AUDIO_SOURCE_COUNT_CHANGED: 'media:remoteAudioSourceCountChanged',
332
337
  REMOTE_MEDIA_AUDIO_CREATED: 'media:remoteAudio:created',
333
- REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED: 'media:remoteScrenShareAudio:created',
338
+ REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED: 'media:remoteScreenShareAudio:created',
334
339
  REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED: 'media:remoteVideo:layoutChanged',
335
340
  };
336
341
 
@@ -447,6 +452,11 @@ export const ERROR_DICTIONARY = {
447
452
  MESSAGE: 'Captcha is required.',
448
453
  CODE: 8,
449
454
  },
455
+ BREAKOUT_EDIT: {
456
+ NAME: 'BreakoutEditLockedError',
457
+ MESSAGE: 'Edit lock token mismatch',
458
+ CODE: 9,
459
+ },
450
460
  };
451
461
 
452
462
  export const FLOOR_ACTION = {
@@ -513,11 +523,45 @@ export const LOCUS = {
513
523
  SYNCDEBUG: 'sync_debug',
514
524
  };
515
525
 
526
+ export const BREAKOUTS = {
527
+ STATUS: {
528
+ CLOSING: 'CLOSING',
529
+ CLOSED: 'CLOSED',
530
+ PENDING: 'PENDING',
531
+ OPEN: 'OPEN',
532
+ },
533
+ EVENTS: {
534
+ BREAKOUTS_CLOSING: 'BREAKOUTS_CLOSING',
535
+ MESSAGE: 'MESSAGE',
536
+ MEMBERS_UPDATE: 'MEMBERS_UPDATE',
537
+ },
538
+ SESSION_TYPES: {
539
+ MAIN: 'MAIN',
540
+ },
541
+ SESSION_STATES: {
542
+ ACTIVE: 'active',
543
+ ASSIGNED: 'assigned',
544
+ ALLOWED: 'allowed',
545
+ ASSIGNED_CURRENT: 'assignedCurrent',
546
+ REQUESTED: 'requested',
547
+ },
548
+ BREAKOUTS_SUPPORTED: 'BREAKOUTS_SUPPORTED',
549
+ ACTION: {
550
+ START: 'START',
551
+ CLOSE: 'CLOSE',
552
+ DELETE: 'DELETE',
553
+ },
554
+ ERROR_CODE: {
555
+ EDIT_LOCK_TOKEN_MISMATCH: 201409024,
556
+ },
557
+ };
558
+
516
559
  export const LOCUSINFO = {
517
560
  EVENTS: {
518
561
  CONTROLS_MEETING_LAYOUT_UPDATED: 'CONTROLS_MEETING_LAYOUT_UPDATED',
519
562
  CONTROLS_RECORDING_UPDATED: 'CONTROLS_RECORDING_UPDATED',
520
563
  CONTROLS_MEETING_TRANSCRIBE_UPDATED: 'CONTROLS_MEETING_TRANSCRIBE_UPDATED',
564
+ CONTROLS_MEETING_BREAKOUT_UPDATED: 'CONTROLS_MEETING_BREAKOUT_UPDATED',
521
565
  CONTROLS_MEETING_CONTAINER_UPDATED: 'CONTROLS_MEETING_CONTAINER_UPDATED',
522
566
  CONTROLS_ENTRY_EXIT_TONE_UPDATED: 'CONTROLS_ENTRY_EXIT_TONE_UPDATED',
523
567
  SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',
@@ -539,6 +583,9 @@ export const LOCUSINFO = {
539
583
  EMBEDDED_APPS_UPDATED: 'EMBEDDED_APPS_UPDATED',
540
584
  SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE: 'SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE',
541
585
  SELF_IS_SHARING_BLOCKED_CHANGE: 'SELF_IS_SHARING_BLOCKED_CHANGE',
586
+ SELF_MEETING_BREAKOUTS_CHANGED: 'SELF_MEETING_BREAKOUTS_CHANGED',
587
+ MEDIA_INACTIVITY: 'MEDIA_INACTIVITY',
588
+ LINKS_SERVICES: 'LINKS_SERVICES',
542
589
  },
543
590
  };
544
591
 
@@ -551,6 +598,9 @@ export const LOCUSEVENT = {
551
598
  // delta events
552
599
  DIFFERENCE: 'locus.difference',
553
600
 
601
+ // Breakout sessions
602
+ BREAKOUT_ROSTER: 'breakout.roster',
603
+
554
604
  // screen sharing
555
605
  FLOOR_GRANTED: 'locus.floor_granted',
556
606
  FLOOR_RELEASED: 'locus.floor_released',
@@ -723,6 +773,14 @@ export const DISPLAY_HINTS = {
723
773
  TRANSCRIPTION_CONTROL_STOP: 'TRANSCRIPTION_CONTROL_STOP',
724
774
  WEBEX_ASSISTANT_STATUS_ACTIVE: 'WEBEX_ASSISTANT_STATUS_ACTIVE',
725
775
  WAITING_FOR_OTHERS: 'WAITING_FOR_OTHERS',
776
+ ENABLE_REACTIONS: 'ENABLE_REACTIONS',
777
+ DISABLE_REACTIONS: 'DISABLE_REACTIONS',
778
+ REACTIONS_ACTIVE: 'REACTIONS_ACTIVE',
779
+ REACTIONS_INACTIVE: 'REACTIONS_INACTIVE',
780
+ ENABLE_MUTE_ON_ENTRY: 'ENABLE_MUTE_ON_ENTRY',
781
+ DISABLE_MUTE_ON_ENTRY: 'DISABLE_MUTE_ON_ENTRY',
782
+ ENABLE_HARD_MUTE: 'ENABLE_HARD_MUTE',
783
+ DISABLE_HARD_MUTE: 'DISABLE_HARD_MUTE',
726
784
  };
727
785
 
728
786
  export const SELF_ROLES = {
@@ -812,7 +870,9 @@ export const RESOURCE = {
812
870
  };
813
871
 
814
872
  export const REACHABILITY = {
815
- localStorage: 'reachability.result',
873
+ localStorageResult: 'reachability.result',
874
+ localStorageJoinCookie: 'reachability.joinCookie',
875
+ namespace: 'Reachability',
816
876
  };
817
877
 
818
878
  export const ROAP = {
@@ -847,9 +907,6 @@ export const NETWORK_TYPE = {
847
907
  };
848
908
 
849
909
  export const STATS = {
850
- AUDIO_CORRELATE: 'audio',
851
- VIDEO_CORRELATE: 'video',
852
- SHARE_CORRELATE: 'share',
853
910
  SEND_DIRECTION: 'send',
854
911
  RECEIVE_DIRECTION: 'recv',
855
912
  REMOTE: 'remote',
@@ -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,6 @@
1
+ enum Setting {
2
+ disallowUnmute = 'DisallowUnmute',
3
+ muteOnEntry = 'MuteOnEntry',
4
+ }
5
+
6
+ export default Setting;
@@ -0,0 +1,183 @@
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 Setting from './enums';
7
+ import Util from './util';
8
+ import {CAN_SET, CAN_UNSET, ENABLED} from './constants';
9
+
10
+ /**
11
+ * docs
12
+ * https://sqbu-github.cisco.com/pages/WebExSquared/locus/guides/mute.html
13
+ * https://confluence-eng-gpk2.cisco.com/conf/display/LOCUS/Hard+Mute+and+Audio+Privacy#HardMuteandAudioPrivacy-SelfMuteonEntry
14
+ * 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
15
+ * https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-180867
16
+ * https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-393351
17
+ */
18
+
19
+ /**
20
+ * @description ControlsOptionsManager is responsible for handling the behavior of participant controls when somebody joins a meeting
21
+ * @export
22
+ * @private
23
+ * @class Recording
24
+ */
25
+ export default class ControlsOptionsManager {
26
+ /**
27
+ * @instance
28
+ * @type {MeetingRequest}
29
+ * @private
30
+ * @memberof ControlsOptionsManager
31
+ */
32
+ private request: MeetingRequest;
33
+
34
+ /**
35
+ * @instance
36
+ * @type {Array}
37
+ * @private
38
+ * @memberof ControlsOptionsManager
39
+ */
40
+ private displayHints: Array<string> = [];
41
+
42
+ /**
43
+ * @instance
44
+ * @type {string}
45
+ * @private
46
+ * @memberof ControlsOptionsManager
47
+ */
48
+ private locusUrl: string;
49
+
50
+ /**
51
+ * @param {MeetingRequest} request
52
+ * @param {Object} options
53
+ * @constructor
54
+ * @memberof ControlsOptionsManager
55
+ */
56
+ constructor(
57
+ request: MeetingRequest,
58
+ options?: {
59
+ locusUrl: string;
60
+ displayHints?: Array<string>;
61
+ }
62
+ ) {
63
+ this.initialize(request);
64
+ this.set(options);
65
+ }
66
+
67
+ /**
68
+ * @param {MeetingRequest} request
69
+ * @returns {void}
70
+ * @private
71
+ * @memberof ControlsOptionsManager
72
+ */
73
+ private initialize(request: MeetingRequest) {
74
+ this.request = request;
75
+ }
76
+
77
+ /**
78
+ * @param {Object} options
79
+ * @returns {void}
80
+ * @public
81
+ * @memberof ControlsOptionsManager
82
+ */
83
+ public set(options?: {locusUrl: string; displayHints?: Array<string>}) {
84
+ this.extract(options);
85
+ }
86
+
87
+ /**
88
+ * @param {string} url
89
+ * @returns {void}
90
+ * @public
91
+ * @memberof ControlsOptionsManager
92
+ */
93
+ public setLocusUrl(url: string) {
94
+ this.locusUrl = url;
95
+ }
96
+
97
+ /**
98
+ * @param {Array} hints
99
+ * @returns {void}
100
+ * @public
101
+ * @memberof ControlsOptionsManager
102
+ */
103
+ public setDisplayHints(hints: Array<string>) {
104
+ this.displayHints = hints;
105
+ }
106
+
107
+ /**
108
+ * @returns {string}
109
+ * @public
110
+ * @memberof ControlsOptionsManager
111
+ */
112
+ public getLocusUrl() {
113
+ return this.locusUrl;
114
+ }
115
+
116
+ /**
117
+ * @returns {Array}
118
+ * @public
119
+ * @memberof ControlsOptionsManager
120
+ */
121
+ public getDisplayHints() {
122
+ return this.displayHints;
123
+ }
124
+
125
+ /**
126
+ * @param {Object} options
127
+ * @returns {void}
128
+ * @private
129
+ * @memberof ControlsOptionsManager
130
+ */
131
+ private extract(options?: {locusUrl: string; displayHints?: Array<string>}) {
132
+ this.setDisplayHints(options?.displayHints);
133
+ this.setLocusUrl(options?.locusUrl);
134
+ }
135
+
136
+ /**
137
+ * @param {Setting} setting
138
+ * @param {boolean} enabled
139
+ * @private
140
+ * @memberof ControlsOptionsManager
141
+ * @returns {Promise}
142
+ */
143
+ private setControls(setting: Setting, enabled: boolean): Promise<any> {
144
+ LoggerProxy.logger.log(`ControlsOptionsManager:index#setControls --> ${setting} [${enabled}]`);
145
+
146
+ if (Util?.[`${enabled ? CAN_SET : CAN_UNSET}${setting}`](this.displayHints)) {
147
+ // @ts-ignore
148
+ return this.request.request({
149
+ uri: `${this.locusUrl}/${CONTROLS}`,
150
+ body: {
151
+ [camelCase(setting)]: {
152
+ [ENABLED]: enabled,
153
+ },
154
+ },
155
+ method: HTTP_VERBS.PATCH,
156
+ });
157
+ }
158
+
159
+ return Promise.reject(
160
+ new PermissionError(`${setting} [${enabled}] not allowed, due to moderator property.`)
161
+ );
162
+ }
163
+
164
+ /**
165
+ * @public
166
+ * @param {boolean} enabled
167
+ * @memberof ControlsOptionsManager
168
+ * @returns {Promise}
169
+ */
170
+ public setMuteOnEntry(enabled: boolean): Promise<any> {
171
+ return this.setControls(Setting.muteOnEntry, enabled);
172
+ }
173
+
174
+ /**
175
+ * @public
176
+ * @param {boolean} enabled
177
+ * @memberof ControlsOptionsManager
178
+ * @returns {Promise}
179
+ */
180
+ public setDisallowUnmute(enabled: boolean): Promise<any> {
181
+ return this.setControls(Setting.disallowUnmute, enabled);
182
+ }
183
+ }
@@ -0,0 +1,20 @@
1
+ import {DISPLAY_HINTS} from '../constants';
2
+
3
+ const canSetMuteOnEntry = (displayHints: Array<string>): boolean =>
4
+ displayHints.includes(DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY);
5
+
6
+ const canSetDisallowUnmute = (displayHints: Array<string>): boolean =>
7
+ displayHints.includes(DISPLAY_HINTS.ENABLE_HARD_MUTE);
8
+
9
+ const canUnsetMuteOnEntry = (displayHints: Array<string>): boolean =>
10
+ displayHints.includes(DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY);
11
+
12
+ const canUnsetDisallowUnmute = (displayHints: Array<string>): boolean =>
13
+ displayHints.includes(DISPLAY_HINTS.DISABLE_HARD_MUTE);
14
+
15
+ export default {
16
+ canSetMuteOnEntry,
17
+ canSetDisallowUnmute,
18
+ canUnsetMuteOnEntry,
19
+ canUnsetDisallowUnmute,
20
+ };
package/src/index.js CHANGED
@@ -5,11 +5,14 @@ import Meetings from './meetings';
5
5
  import config from './config';
6
6
 
7
7
  registerPlugin('meetings', Meetings, {
8
- config
8
+ config,
9
9
  });
10
10
 
11
11
  export default Meetings;
12
12
 
13
13
  export * as CONSTANTS from './constants';
14
+ export * as REACTIONS from './reactions/reactions';
15
+
16
+ export {RemoteMedia} from './multistream/remoteMedia';
14
17
 
15
18
  export {default as TriggerProxy} from './common/events/trigger-proxy';
@@ -0,0 +1,114 @@
1
+ import {isEqual} from 'lodash';
2
+
3
+ const ControlsUtils: any = {};
4
+
5
+ /**
6
+ * Controls
7
+ * @typedef {Object} LocusControls
8
+ * @property {Object} record
9
+ * @property {Boolean} record.recording
10
+ * @property {Object} record.meta
11
+ * @property {String} record.meta.modifiedBy
12
+ */
13
+
14
+ /**
15
+ * parse the relevant host values that we care about: id
16
+ * @param {LocusControls} controls
17
+ * @returns {Object} parsedObject - parsed host or null if host was undefined
18
+ * @returns {String} parsedObject.recordingId
19
+ */
20
+ ControlsUtils.parse = (controls: any) => {
21
+ const parsedControls = {...controls};
22
+
23
+ if (controls && controls.record) {
24
+ parsedControls.record = {
25
+ modifiedBy: ControlsUtils.getId(controls),
26
+ paused: controls.record.paused ? controls.record.paused : false,
27
+ recording: controls.record.recording,
28
+ lastModified: controls.record.meta.lastModified,
29
+ };
30
+ }
31
+
32
+ if (controls && controls.meetingContainer) {
33
+ parsedControls.meetingContainer = {
34
+ meetingContainerUrl: controls.meetingContainer.meetingContainerUrl,
35
+ };
36
+ }
37
+
38
+ if (controls && controls.transcribe) {
39
+ parsedControls.transcribe = {
40
+ transcribing: controls.transcribe.transcribing,
41
+ caption: controls.transcribe.caption,
42
+ };
43
+ }
44
+
45
+ if (controls && controls.entryExitTone) {
46
+ parsedControls.entryExitTone = controls.entryExitTone.enabled
47
+ ? controls.entryExitTone.mode
48
+ : null;
49
+ }
50
+
51
+ return parsedControls;
52
+ };
53
+
54
+ /**
55
+ * parses and returns previous state vs current state and triggers the changes.
56
+ * @param {LocusControls} oldControls previous state
57
+ * @param {LocusControls} newControls current state
58
+ * @returns {Object} combination of state plus the changes
59
+ */
60
+ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
61
+ const previous = ControlsUtils.parse(oldControls);
62
+ const current = ControlsUtils.parse(newControls);
63
+
64
+ return {
65
+ previous,
66
+ current,
67
+ updates: {
68
+ hasRecordingPausedChanged:
69
+ current?.record &&
70
+ !isEqual(previous?.record?.paused, current.record.paused) &&
71
+ (previous?.record?.recording || current?.record?.recording), // see comments directly below
72
+
73
+ hasRecordingChanged:
74
+ current?.record &&
75
+ !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
76
+ (previous?.record?.recording || current?.record?.recording), // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting
77
+
78
+ hasMeetingContainerChanged:
79
+ current?.meetingContainer &&
80
+ !isEqual(
81
+ previous?.meetingContainer?.meetingContainerUrl,
82
+ current?.meetingContainer?.meetingContainerUrl
83
+ ),
84
+
85
+ hasTranscribeChanged:
86
+ current?.transcribe &&
87
+ !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
88
+ (previous?.transcribe?.transcribing || current?.transcribe?.transcribing), // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting
89
+
90
+ hasEntryExitToneChanged: !!(
91
+ newControls.entryExitTone &&
92
+ !isEqual(previous?.entryExitTone, current?.entryExitTone) &&
93
+ (previous?.entryExitTone || current?.entryExitTone)
94
+ ),
95
+
96
+ hasBreakoutChanged: !isEqual(previous?.breakout, current?.breakout),
97
+ },
98
+ };
99
+ };
100
+
101
+ /**
102
+ * Extract the id from the record controls object
103
+ * @param {LocusControls} controls
104
+ * @returns {String|null}
105
+ */
106
+ ControlsUtils.getId = (controls: any) => {
107
+ if (controls.record.meta) {
108
+ return controls.record.meta.modifiedBy;
109
+ }
110
+
111
+ return null;
112
+ };
113
+
114
+ export default ControlsUtils;