@webex/plugin-meetings 3.0.0-beta.10 → 3.0.0-beta.104

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +5 -26
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +5 -26
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +6 -27
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +5 -26
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +5 -26
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +4 -25
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +5 -26
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +5 -26
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +6 -41
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +1 -24
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +35 -61
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +6 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +173 -52
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +327 -211
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +0 -38
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +88 -123
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +62 -147
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +71 -117
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +2 -9
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2396 -2388
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +252 -113
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +318 -283
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +58 -217
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +3 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +10 -33
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +263 -282
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +1 -16
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +24 -20
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +675 -593
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +23 -42
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +177 -155
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +80 -88
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -69
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +12 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +162 -204
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +58 -53
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +61 -161
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +167 -50
  168. package/dist/multistream/mediaRequestManager.js.map +1 -1
  169. package/dist/multistream/receiveSlot.js +58 -65
  170. package/dist/multistream/receiveSlot.js.map +1 -1
  171. package/dist/multistream/receiveSlotManager.js +74 -93
  172. package/dist/multistream/receiveSlotManager.js.map +1 -1
  173. package/dist/multistream/remoteMedia.js +55 -74
  174. package/dist/multistream/remoteMedia.js.map +1 -1
  175. package/dist/multistream/remoteMediaGroup.js +6 -40
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  177. package/dist/multistream/remoteMediaManager.js +466 -442
  178. package/dist/multistream/remoteMediaManager.js.map +1 -1
  179. package/dist/networkQualityMonitor/index.js +32 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +10 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +2 -33
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +190 -199
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +14 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +326 -465
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +38 -67
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +143 -134
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +149 -101
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -95
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +369 -461
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +13 -45
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +28 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/browser-detection.ts +9 -6
  341. package/src/common/collection.ts +3 -1
  342. package/src/common/errors/captcha-error.ts +6 -6
  343. package/src/common/errors/intent-to-join.ts +6 -6
  344. package/src/common/errors/join-meeting.ts +12 -8
  345. package/src/common/errors/media.ts +6 -6
  346. package/src/common/errors/parameter.ts +9 -6
  347. package/src/common/errors/password-error.ts +6 -6
  348. package/src/common/errors/permission.ts +5 -5
  349. package/src/common/errors/reconnection.ts +6 -6
  350. package/src/common/errors/stats.ts +6 -6
  351. package/src/common/errors/webex-errors.ts +7 -5
  352. package/src/common/errors/webex-meetings-error.ts +1 -1
  353. package/src/common/events/events-scope.ts +5 -1
  354. package/src/common/events/events.ts +5 -1
  355. package/src/common/events/trigger-proxy.ts +8 -3
  356. package/src/common/events/util.ts +1 -2
  357. package/src/common/logs/logger-proxy.ts +21 -10
  358. package/src/common/logs/request.ts +11 -8
  359. package/src/config.ts +16 -12
  360. package/src/constants.ts +119 -6
  361. package/src/controls-options-manager/constants.ts +5 -0
  362. package/src/controls-options-manager/enums.ts +16 -0
  363. package/src/controls-options-manager/index.ts +278 -0
  364. package/src/controls-options-manager/types.ts +49 -0
  365. package/src/controls-options-manager/util.ts +229 -0
  366. package/src/index.ts +33 -0
  367. package/src/locus-info/controlsUtils.ts +91 -24
  368. package/src/locus-info/fullState.ts +15 -11
  369. package/src/locus-info/hostUtils.ts +4 -3
  370. package/src/locus-info/index.ts +270 -54
  371. package/src/locus-info/infoUtils.ts +12 -4
  372. package/src/locus-info/mediaSharesUtils.ts +4 -4
  373. package/src/locus-info/parser.ts +46 -68
  374. package/src/locus-info/selfUtils.ts +187 -56
  375. package/src/media/index.ts +142 -172
  376. package/src/media/properties.ts +43 -36
  377. package/src/media/util.ts +1 -1
  378. package/src/mediaQualityMetrics/config.ts +380 -378
  379. package/src/meeting/in-meeting-actions.ts +123 -3
  380. package/src/meeting/index.ts +2617 -1545
  381. package/src/meeting/muteState.ts +271 -68
  382. package/src/meeting/request.ts +251 -132
  383. package/src/meeting/request.type.ts +13 -0
  384. package/src/meeting/state.ts +45 -30
  385. package/src/meeting/util.ts +119 -110
  386. package/src/meeting-info/collection.ts +2 -1
  387. package/src/meeting-info/index.ts +32 -30
  388. package/src/meeting-info/meeting-info-v2.ts +181 -109
  389. package/src/meeting-info/request.ts +9 -3
  390. package/src/meeting-info/util.ts +54 -46
  391. package/src/meeting-info/utilv2.ts +70 -55
  392. package/src/meetings/collection.ts +21 -1
  393. package/src/meetings/index.ts +749 -437
  394. package/src/meetings/request.ts +29 -25
  395. package/src/meetings/util.ts +122 -33
  396. package/src/member/index.ts +86 -49
  397. package/src/member/types.ts +24 -0
  398. package/src/member/util.ts +92 -13
  399. package/src/members/collection.ts +8 -1
  400. package/src/members/index.ts +281 -129
  401. package/src/members/request.ts +87 -14
  402. package/src/members/types.ts +28 -0
  403. package/src/members/util.ts +140 -49
  404. package/src/metrics/config.ts +256 -90
  405. package/src/metrics/constants.ts +1 -6
  406. package/src/metrics/index.ts +96 -96
  407. package/src/multistream/mediaRequestManager.ts +203 -45
  408. package/src/multistream/receiveSlot.ts +69 -26
  409. package/src/multistream/receiveSlotManager.ts +62 -38
  410. package/src/multistream/remoteMedia.ts +30 -4
  411. package/src/multistream/remoteMediaGroup.ts +4 -3
  412. package/src/multistream/remoteMediaManager.ts +230 -66
  413. package/src/networkQualityMonitor/index.ts +24 -27
  414. package/src/personal-meeting-room/index.ts +12 -16
  415. package/src/personal-meeting-room/request.ts +10 -3
  416. package/src/personal-meeting-room/util.ts +3 -3
  417. package/src/reachability/index.ts +131 -79
  418. package/src/reachability/request.ts +43 -34
  419. package/src/reactions/constants.ts +4 -0
  420. package/src/reactions/reactions.ts +104 -0
  421. package/src/reactions/reactions.type.ts +62 -0
  422. package/src/reconnection-manager/index.ts +193 -111
  423. package/src/recording-controller/enums.ts +8 -0
  424. package/src/recording-controller/index.ts +315 -0
  425. package/src/recording-controller/util.ts +58 -0
  426. package/src/roap/index.ts +63 -51
  427. package/src/roap/request.ts +86 -53
  428. package/src/roap/turnDiscovery.ts +105 -46
  429. package/src/statsAnalyzer/global.ts +8 -104
  430. package/src/statsAnalyzer/index.ts +624 -376
  431. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  432. package/src/transcription/index.ts +34 -32
  433. package/test/integration/spec/converged-space-meetings.js +177 -0
  434. package/test/integration/spec/journey.js +666 -464
  435. package/test/integration/spec/space-meeting.js +320 -204
  436. package/test/integration/spec/transcription.js +7 -8
  437. package/test/unit/spec/annotation/index.ts +435 -0
  438. package/test/unit/spec/breakouts/breakout.ts +184 -0
  439. package/test/unit/spec/breakouts/collection.ts +15 -0
  440. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  441. package/test/unit/spec/breakouts/events.ts +77 -0
  442. package/test/unit/spec/breakouts/index.ts +1504 -0
  443. package/test/unit/spec/breakouts/request.ts +104 -0
  444. package/test/unit/spec/breakouts/utils.js +72 -0
  445. package/test/unit/spec/common/browser-detection.js +9 -28
  446. package/test/unit/spec/controls-options-manager/index.js +287 -0
  447. package/test/unit/spec/controls-options-manager/util.js +403 -0
  448. package/test/unit/spec/fixture/locus.js +92 -90
  449. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  450. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  451. package/test/unit/spec/locus-info/index.js +493 -3
  452. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  453. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  454. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  455. package/test/unit/spec/locus-info/parser.js +3 -9
  456. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  457. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  458. package/test/unit/spec/media/index.ts +104 -8
  459. package/test/unit/spec/media/properties.ts +9 -9
  460. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  461. package/test/unit/spec/meeting/index.js +2649 -837
  462. package/test/unit/spec/meeting/muteState.js +368 -70
  463. package/test/unit/spec/meeting/request.js +217 -43
  464. package/test/unit/spec/meeting/utils.js +146 -165
  465. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  466. package/test/unit/spec/meeting-info/request.js +7 -9
  467. package/test/unit/spec/meeting-info/util.js +11 -12
  468. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  469. package/test/unit/spec/meetings/collection.js +15 -1
  470. package/test/unit/spec/meetings/index.js +1052 -329
  471. package/test/unit/spec/meetings/utils.js +163 -14
  472. package/test/unit/spec/member/index.js +24 -1
  473. package/test/unit/spec/member/util.js +359 -32
  474. package/test/unit/spec/members/index.js +402 -54
  475. package/test/unit/spec/members/request.js +76 -20
  476. package/test/unit/spec/members/utils.js +191 -4
  477. package/test/unit/spec/metrics/index.js +46 -20
  478. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  479. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  480. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  481. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  482. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  483. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  484. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  485. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  486. package/test/unit/spec/reachability/index.ts +176 -27
  487. package/test/unit/spec/reachability/request.js +66 -0
  488. package/test/unit/spec/reconnection-manager/index.js +62 -31
  489. package/test/unit/spec/recording-controller/index.js +231 -0
  490. package/test/unit/spec/recording-controller/util.js +102 -0
  491. package/test/unit/spec/roap/index.ts +21 -16
  492. package/test/unit/spec/roap/request.ts +217 -0
  493. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  494. package/test/unit/spec/stats-analyzer/index.js +116 -60
  495. package/test/utils/cmr.js +44 -42
  496. package/test/utils/constants.js +9 -0
  497. package/test/utils/integrationTestUtils.js +64 -0
  498. package/test/utils/testUtils.js +63 -99
  499. package/test/utils/webex-config.js +22 -18
  500. package/test/utils/webex-test-users.js +57 -50
  501. package/tsconfig.json +6 -0
  502. package/dist/media/internal-media-core-wrapper.js +0 -22
  503. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  504. package/dist/meeting/effectsState.js +0 -334
  505. package/dist/meeting/effectsState.js.map +0 -1
  506. package/dist/multistream/multistreamMedia.js +0 -116
  507. package/dist/multistream/multistreamMedia.js.map +0 -1
  508. package/src/index.js +0 -15
  509. package/src/media/internal-media-core-wrapper.ts +0 -9
  510. package/src/meeting/effectsState.ts +0 -211
  511. package/src/multistream/multistreamMedia.ts +0 -92
  512. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -1,211 +0,0 @@
1
- /* eslint-disable no-param-reassign */
2
- import {Media as WebRTCMedia} from '@webex/internal-media-core';
3
-
4
- import BEHAVIORAL_METRICS from '../metrics/constants';
5
- import Metrics from '../metrics';
6
- import MediaUtil from '../media/util';
7
- import LoggerProxy from '../common/logs/logger-proxy';
8
- import {BNR_STATUS} from '../constants';
9
-
10
- const createEffectsState = (type: any) => {
11
- LoggerProxy.logger.info(`Meeting:effectState#createEffectsState --> creating effectsState for effect ${type}`);
12
-
13
- return new EffectsState(type);
14
- };
15
-
16
- /* The purpose of this class is to manage the effects state(for eg., BNR).
17
- */
18
- class EffectsState {
19
- effectType: any;
20
- pendingPromiseReject: any;
21
- pendingPromiseResolve: any;
22
- state: any;
23
-
24
- constructor(type: any) {
25
- this.effectType = type;
26
- this.state = {
27
- bnr: {
28
- enabled: BNR_STATUS.NOT_ENABLED
29
- },
30
- callToWebrtcBNRInProgress: false
31
- };
32
- // these 2 hold the resolve, reject methods for the promise we returned to the client in last handleClientRequest() call
33
- this.pendingPromiseResolve = null;
34
- this.pendingPromiseReject = null;
35
- }
36
-
37
- /**
38
- * @memberof EffectsState
39
- * @param {Boolean} [isEnable] true for enableBNR, false for disableBNR request
40
- * @param {Object} [meeting] the meeting object
41
- * @returns {Promise}
42
- */
43
- async handleClientRequest(isEnable?: boolean, meeting?: object) {
44
- return new Promise((resolve, reject) => {
45
- if (this.pendingPromiseResolve) {
46
- // resolve the last promise we returned to the client as the client has issued a new request that has superseded the previous one
47
- this.pendingPromiseResolve();
48
- }
49
- this.pendingPromiseResolve = resolve;
50
- this.pendingPromiseReject = reject;
51
-
52
- if (isEnable) this.enableBNR(meeting);
53
- else this.disableBNR(meeting);
54
- });
55
- }
56
-
57
- /**
58
- * Internal API to return status of BNR
59
- * @memberof EffectsState
60
- * @returns {Boolean}
61
- * @public
62
- * @memberof Meeting
63
- */
64
- public isBnrEnabled() {
65
- return this.state.bnr.enabled === BNR_STATUS.ENABLED;
66
- }
67
-
68
- resolvePromise() {
69
- if (this.pendingPromiseResolve) {
70
- this.pendingPromiseResolve(true);
71
- }
72
- this.pendingPromiseResolve = null;
73
- this.pendingPromiseReject = null;
74
- }
75
-
76
- rejectPromise(e) {
77
- if (this.pendingPromiseReject) {
78
- this.pendingPromiseReject(e);
79
- }
80
- this.pendingPromiseResolve = null;
81
- this.pendingPromiseReject = null;
82
- }
83
-
84
- /**
85
- * enableBNR API
86
- * @param {Object} meeting the meeting object
87
- * @returns {Promise<Boolean>}
88
- * @public
89
- * @memberof EffectsState
90
- */
91
- public async enableBNR(meeting: any) {
92
- LoggerProxy.logger.info('Meeting:effectState#enableBNR. Enable BNR called');
93
-
94
- if (this.isBnrEnabled()) {
95
- LoggerProxy.logger.warn('Meeting:index#enableBNR. BNR is already enabled');
96
-
97
- return this.resolvePromise();
98
- }
99
-
100
- if (this.state.callToWebrtcBNRInProgress) {
101
- LoggerProxy.logger.warn('Meeting:effectState#enableBNR. Call to WebRTC in progress, we need to wait for it to complete');
102
-
103
- return this.resolvePromise();
104
- }
105
-
106
- const {bnr} = this.state;
107
-
108
- try {
109
- bnr.enabled = BNR_STATUS.SHOULD_ENABLE;
110
- this.state.callToWebrtcBNRInProgress = true;
111
- const audioStream = MediaUtil.createMediaStream([meeting.mediaProperties.audioTrack]);
112
-
113
- LoggerProxy.logger.info('Meeting:effectState#enableBNR. MediaStream created from meeting & sent to updateAudio');
114
- await meeting.updateAudio({
115
- sendAudio: true,
116
- receiveAudio: meeting.mediaProperties.mediaDirection.receiveAudio,
117
- stream: audioStream
118
- });
119
-
120
- LoggerProxy.logger.info('Meeting:effectState#enableBNR. Updated meeting audio with bnr enabled track');
121
- bnr.enabled = BNR_STATUS.ENABLED;
122
- this.state.callToWebrtcBNRInProgress = false;
123
- Metrics.sendBehavioralMetric(
124
- BEHAVIORAL_METRICS.ENABLE_BNR_SUCCESS,
125
- );
126
- }
127
- catch (error) {
128
- bnr.enabled = BNR_STATUS.NOT_ENABLED;
129
- this.state.callToWebrtcBNRInProgress = false;
130
- LoggerProxy.logger.error('Meeting:index#enableBNR.', error);
131
-
132
- Metrics.sendBehavioralMetric(
133
- BEHAVIORAL_METRICS.ENABLE_BNR_FAILURE,
134
- {
135
- reason: error.message,
136
- stack: error.stack
137
- }
138
- );
139
- this.rejectPromise(error);
140
-
141
- throw error;
142
- }
143
-
144
- return this.resolvePromise();
145
- }
146
-
147
- /**
148
- * disableBNR API
149
- * @param {Object} meeting the meeting object
150
- * @returns {Promise<Boolean>}
151
- * @public
152
- * @memberof EffectsState
153
- */
154
- public async disableBNR(meeting: any) {
155
- LoggerProxy.logger.info('Meeting:effectState#disableBNR. Disable BNR called');
156
-
157
- const {bnr} = this.state;
158
-
159
- try {
160
- if (this.state.callToWebrtcBNRInProgress) {
161
- LoggerProxy.logger.info('Meeting:effectState#disableBNR. Call to WebRTC in progress, we need to wait for it to complete');
162
-
163
- return this.resolvePromise();
164
- }
165
-
166
- bnr.enabled = BNR_STATUS.SHOULD_DISABLE;
167
- this.state.callToWebrtcBNRInProgress = true;
168
-
169
- // @ts-ignore - disableBNR does not expect an argument
170
- const audioTrack = WebRTCMedia.Effects.BNR.disableBNR(meeting.mediaProperties.audioTrack);
171
-
172
- const audioStream = MediaUtil.createMediaStream([audioTrack]);
173
-
174
- LoggerProxy.logger.info('Meeting:effectState#disableBNR. Raw media track obtained from WebRTC & sent to updateAudio');
175
-
176
- await meeting.updateAudio({
177
- sendAudio: true,
178
- receiveAudio: meeting.mediaProperties.mediaDirection.receiveAudio,
179
- stream: audioStream
180
- });
181
-
182
- bnr.enabled = BNR_STATUS.NOT_ENABLED;
183
-
184
- this.state.callToWebrtcBNRInProgress = false;
185
-
186
- Metrics.sendBehavioralMetric(
187
- BEHAVIORAL_METRICS.DISABLE_BNR_SUCCESS
188
- );
189
- }
190
- catch (error) {
191
- bnr.enabled = BNR_STATUS.ENABLED;
192
- this.state.callToWebrtcBNRInProgress = false;
193
- LoggerProxy.logger.error(`Meeting:index#disableBNR. ${error}`);
194
-
195
- Metrics.sendBehavioralMetric(
196
- BEHAVIORAL_METRICS.DISABLE_BNR_FAILURE,
197
- {
198
- reason: error.message,
199
- stack: error.stack
200
- }
201
- );
202
- this.rejectPromise(error);
203
-
204
- throw error;
205
- }
206
-
207
- return this.resolvePromise();
208
- }
209
- }
210
-
211
- export default createEffectsState;
@@ -1,92 +0,0 @@
1
- /* eslint-disable import/prefer-default-export */
2
-
3
- import {AUDIO, VIDEO} from '../constants';
4
- import createMuteState from '../meeting/muteState';
5
- import Meeting from '../meeting';
6
-
7
- /**
8
- * Class wrapping all the multistream specific APIs that need to be exposed at meeting level.
9
- *
10
- */
11
- export class MultistreamMedia {
12
- private meeting: Meeting;
13
-
14
- /**
15
- * Constructor
16
- * @param {Meeting} meeting
17
- */
18
- constructor(meeting: Meeting) {
19
- this.meeting = meeting;
20
- }
21
-
22
- /**
23
- * throws if we don't have a media connection created
24
- */
25
- private checkMediaConnection() {
26
- if (this.meeting?.mediaProperties?.webrtcMediaConnection) {
27
- return;
28
- }
29
- throw new Error('Webrtc media connection is missing');
30
- }
31
-
32
- /**
33
- * Publishes a local track in the meeting
34
- *
35
- * @param {MediaStreamTrack} track
36
- * @returns {Promise}
37
- */
38
- publishTrack(track: MediaStreamTrack): Promise<void> {
39
- this.checkMediaConnection();
40
-
41
- /* todo: for now we don't support screen share (waiting for server to support bundling, see SPARK-377812)
42
- for sharing:
43
- we have to call meeting.stopFloorRequest() before unpublishing a track
44
- we have to call meeting.share() after publishing a track
45
- */
46
-
47
- // todo: depending on how muting is done with Local tracks, this code here might need to change...
48
-
49
- if (track.kind === 'audio') {
50
- this.meeting.setLocalAudioTrack(track);
51
- this.meeting.mediaProperties.mediaDirection.sendAudio = true;
52
-
53
- // audio state could be undefined if you have not sent audio before
54
- this.meeting.audio =
55
- this.meeting.audio ||
56
- createMuteState(AUDIO, this.meeting, this.meeting.mediaProperties.mediaDirection);
57
- } else if (track.kind === 'video') {
58
- this.meeting.setLocalVideoTrack(track);
59
- this.meeting.mediaProperties.mediaDirection.sendVideo = true;
60
-
61
- // video state could be undefined if you have not sent video before
62
- this.meeting.video =
63
- this.meeting.video ||
64
- createMuteState(VIDEO, this.meeting, this.meeting.mediaProperties.mediaDirection);
65
- }
66
-
67
- return this.meeting.mediaProperties.webrtcMediaConnection.publishTrack(track);
68
- }
69
-
70
- /**
71
- * Unpublishes a local track in the meeting
72
- *
73
- * @param {MediaStreamTrack} track
74
- * @returns {Promise}
75
- */
76
- unpublishTrack(track: MediaStreamTrack): Promise<void> {
77
- // todo: see todos in publishTrack() - they all apply here too:
78
- // screen sharing - SPARK-377812
79
- // muting etc
80
-
81
- if (track.kind === 'audio') {
82
- this.meeting.setLocalVideoTrack(null);
83
- this.meeting.mediaProperties.mediaDirection.sendAudio = false;
84
- } else if (track.kind === 'video') {
85
- this.meeting.setLocalAudioTrack(null);
86
- this.meeting.mediaProperties.mediaDirection.sendVideo = false;
87
- }
88
- this.checkMediaConnection();
89
-
90
- return this.meeting.mediaProperties.webrtcMediaConnection.unpublishTrack(track);
91
- }
92
- }
@@ -1,291 +0,0 @@
1
- /* eslint-disable camelcase */
2
- import {assert} from '@webex/test-helper-chai';
3
- import sinon from 'sinon';
4
- import MockWebex from '@webex/test-helper-mock-webex';
5
- import {BNR_STATUS} from '@webex/plugin-meetings/src/constants';
6
- import BEHAVIORAL_METRICS from '@webex/plugin-meetings/src/metrics/constants';
7
- import Meeting from '@webex/plugin-meetings/src/meeting';
8
- import Meetings from '@webex/plugin-meetings';
9
- import Metrics from '@webex/plugin-meetings/src/metrics';
10
- import MediaUtil from '@webex/plugin-meetings/src/media/util';
11
- import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
12
- import createEffectsState from '@webex/plugin-meetings/src/meeting/effectsState';
13
- import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
14
- import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
15
-
16
- describe('plugin-meetings', () => {
17
- const logger = {
18
- info: () => {},
19
- log: () => {},
20
- error: () => {},
21
- warn: () => {},
22
- trace: () => {},
23
- debug: () => {}
24
- };
25
-
26
- beforeEach(() => {
27
- sinon.stub(Metrics, 'sendBehavioralMetric');
28
- });
29
- afterEach(() => {
30
- sinon.restore();
31
- });
32
-
33
- Object.defineProperty(global.window.navigator, 'mediaDevices', {
34
- writable: true,
35
- value: {
36
- getSupportedConstraints: sinon.stub().returns({
37
- sampleRate: true
38
- })
39
- },
40
- });
41
- LoggerConfig.set({verboseEvents: true, enable: false});
42
- LoggerProxy.set(logger);
43
-
44
- let webex;
45
- let meeting;
46
- let uuid1;
47
-
48
- const fakeMediaTrack = () => ({
49
- id: Date.now().toString(),
50
- stop: () => {},
51
- readyState: 'live',
52
- enabled: true,
53
- getSettings: () => ({
54
- sampleRate: 48000
55
- })
56
- });
57
-
58
- class FakeMediaStream {
59
- constructor(tracks) {
60
- this.active = false;
61
- this.id = '5146425f-c240-48cc-b86b-27d422988fb7';
62
- this.tracks = tracks;
63
- }
64
-
65
- addTrack = () => undefined;
66
-
67
- getAudioTracks = () => this.tracks;
68
- }
69
-
70
- class FakeAudioContext {
71
- constructor() {
72
- this.state = 'running';
73
- this.baseLatency = 0.005333333333333333;
74
- this.currentTime = 2.7946666666666666;
75
- this.sampleRate = 48000;
76
- this.audioWorklet = {
77
- addModule: async () => undefined,
78
- };
79
- }
80
-
81
- onstatechange = null;
82
-
83
- createMediaStreamSource() {
84
- return {
85
- connect: () => undefined,
86
- mediaStream: {
87
- getAudioTracks() {
88
- // eslint-disable-next-line no-undef
89
- return [new MediaStreamTrack()];
90
- },
91
- },
92
- };
93
- }
94
-
95
- createMediaStreamDestination() {
96
- return {
97
- stream: {
98
- getAudioTracks() {
99
- // eslint-disable-next-line no-undef
100
- return [new MediaStreamTrack()];
101
- },
102
- },
103
- };
104
- }
105
- }
106
-
107
- class FakeAudioWorkletNode {
108
- constructor() {
109
- this.port = {
110
- postMessage: () => undefined,
111
- };
112
- }
113
-
114
- connect() {
115
- /* placeholder method */
116
- }
117
- }
118
-
119
- class FakeMediaStreamTrack {
120
- constructor() {
121
- this.kind = 'audio';
122
- this.enabled = true;
123
- this.label = 'Default - MacBook Pro Microphone (Built-in)';
124
- this.muted = false;
125
- this.readyState = 'live';
126
- this.contentHint = '';
127
- }
128
-
129
- getSettings() {
130
- return {
131
- sampleRate: 48000
132
- };
133
- }
134
- }
135
- Object.defineProperty(global, 'MediaStream', {
136
- writable: true,
137
- value: FakeMediaStream,
138
- });
139
-
140
- Object.defineProperty(global, 'AudioContext', {
141
- writable: true,
142
- value: FakeAudioContext,
143
- });
144
-
145
- Object.defineProperty(global, 'AudioWorkletNode', {
146
- writable: true,
147
- value: FakeAudioWorkletNode,
148
- });
149
-
150
- Object.defineProperty(global, 'MediaStreamTrack', {
151
- writable: true,
152
- value: FakeMediaStreamTrack,
153
- });
154
-
155
- let effects;
156
-
157
- beforeEach(() => {
158
- webex = new MockWebex({
159
- children: {
160
- meetings: Meetings
161
- }
162
- });
163
- meeting = new Meeting(
164
- {
165
- userId: uuid1
166
- },
167
- {
168
- parent: webex
169
- }
170
- );
171
-
172
- effects = createEffectsState('BNR');
173
- meeting.canUpdateMedia = sinon.stub().returns(true);
174
- MeetingUtil.validateOptions = sinon.stub().returns(Promise.resolve());
175
-
176
- meeting.addMedia = sinon.stub().returns(Promise.resolve());
177
- meeting.getMediaStreams = sinon.stub().returns(Promise.resolve());
178
- sinon.stub(meeting, 'effects').value(effects);
179
- sinon.replace(meeting, 'addMedia', () => {
180
- sinon.stub(meeting.mediaProperties, 'audioTrack').value(fakeMediaTrack());
181
- sinon.stub(meeting.mediaProperties, 'mediaDirection').value({
182
- receiveAudio: true
183
- });
184
- sinon.stub(meeting.mediaProperties, 'webrtcMediaConnection').value({updateSendReceiveOptions: sinon.stub()});
185
- });
186
- });
187
-
188
- describe('bnr effect library', () => {
189
- beforeEach(async () => {
190
- await meeting.getMediaStreams();
191
- await meeting.addMedia();
192
- });
193
- describe('#enableBNR', () => {
194
- it('should have #enableBnr', () => {
195
- assert.exists(effects.enableBNR);
196
- });
197
-
198
- it('does bnr effect enable on audio track', async () => {
199
- assert.isTrue(await effects.handleClientRequest(true, meeting));
200
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.ENABLED);
201
-
202
- assert(Metrics.sendBehavioralMetric.calledOnce);
203
- assert.calledWith(
204
- Metrics.sendBehavioralMetric,
205
- BEHAVIORAL_METRICS.ENABLE_BNR_SUCCESS,
206
- );
207
- });
208
-
209
- it('does resolve request if bnr is already enabled', async () => {
210
- effects.state.bnr.enabled = BNR_STATUS.ENABLED;
211
- assert.isTrue(await effects.handleClientRequest(true, meeting));
212
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.ENABLED);
213
- });
214
-
215
- it('if called twice, does bnr effect enable on audio track for the first request and resolves second', async () => {
216
- Promise.all([effects.handleClientRequest(true, meeting), effects.handleClientRequest(true, meeting)])
217
- .then((resolveFirst, resolveSecond) => {
218
- assert.isTrue(resolveFirst);
219
- assert.isTrue(resolveSecond);
220
- assert.calledOnce(MediaUtil.createMediaStream);
221
- });
222
- });
223
-
224
- it('should throw error for inappropriate sample rate and send error metrics', async () => {
225
- const fakeMediaTrack1 = () => ({
226
- id: Date.now().toString(),
227
- stop: () => {},
228
- readyState: 'live',
229
- getSettings: () => ({
230
- sampleRate: 49000
231
- })
232
- });
233
-
234
- sinon.stub(meeting.mediaProperties, 'audioTrack').value(fakeMediaTrack1());
235
-
236
- // eslint-disable-next-line no-undef
237
- MediaUtil.createMediaStream = sinon.stub().returns(new MediaStream([fakeMediaTrack1()]));
238
- try {
239
- await effects.handleClientRequest(true, meeting);
240
- }
241
- catch (err) {
242
- assert(Metrics.sendBehavioralMetric.calledOnce);
243
- assert.calledWith(
244
- Metrics.sendBehavioralMetric,
245
- BEHAVIORAL_METRICS.ENABLE_BNR_FAILURE, {
246
- reason: err.message,
247
- stack: err.stack
248
- }
249
- );
250
- assert.equal(err.message, 'Sample rate of 49000 is not supported.');
251
- }
252
- });
253
- });
254
-
255
- describe('#disableBNR', () => {
256
- beforeEach(() => {
257
- effects.state.bnr.enabled = BNR_STATUS.ENABLED;
258
- });
259
- it('should have #disableBnr', () => {
260
- assert.exists(effects.disableBNR);
261
- });
262
-
263
- it('does bnr disable on audio track', async () => {
264
- assert.isTrue(await effects.handleClientRequest(false, meeting));
265
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.NOT_ENABLED);
266
-
267
- assert(Metrics.sendBehavioralMetric.calledOnce);
268
- assert.calledWith(
269
- Metrics.sendBehavioralMetric,
270
- BEHAVIORAL_METRICS.DISABLE_BNR_SUCCESS,
271
- );
272
- });
273
-
274
- it('reject request for disable bnr if not enabled', async () => {
275
- try {
276
- await effects.handleClientRequest(false, meeting);
277
- }
278
- catch (e) {
279
- assert.equal(e.message, 'Can not disable as BNR is not enabled');
280
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.ENABLED);
281
-
282
- assert(Metrics.sendBehavioralMetric.calledOnce);
283
- assert.calledWith(
284
- Metrics.sendBehavioralMetric,
285
- BEHAVIORAL_METRICS.DISABLE_BNR_FAILURE,
286
- );
287
- }
288
- });
289
- });
290
- });
291
- });