@webex/plugin-meetings 2.59.8 → 2.60.0-next.2

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 (528) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +41 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +357 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +215 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +22 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +51 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +44 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1047 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +77 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +64 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/browser-detection.js +2 -3
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +3 -4
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.js +50 -0
  37. package/dist/common/errors/no-meeting-info.js.map +1 -0
  38. package/dist/common/errors/parameter.js +3 -4
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +1 -2
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +1 -2
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  45. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  46. package/dist/common/errors/reconnection-in-progress.js +1 -2
  47. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  48. package/dist/common/errors/reconnection.js +1 -2
  49. package/dist/common/errors/reconnection.js.map +1 -1
  50. package/dist/common/errors/stats.js +1 -2
  51. package/dist/common/errors/stats.js.map +1 -1
  52. package/dist/common/errors/webex-errors.js +48 -28
  53. package/dist/common/errors/webex-errors.js.map +1 -1
  54. package/dist/common/errors/webex-meetings-error.js +1 -2
  55. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  56. package/dist/common/events/events-scope.js +1 -2
  57. package/dist/common/events/events-scope.js.map +1 -1
  58. package/dist/common/events/events.js +1 -2
  59. package/dist/common/events/events.js.map +1 -1
  60. package/dist/common/events/trigger-proxy.js +1 -2
  61. package/dist/common/events/trigger-proxy.js.map +1 -1
  62. package/dist/common/events/util.js +1 -2
  63. package/dist/common/events/util.js.map +1 -1
  64. package/dist/common/logs/logger-config.js +1 -2
  65. package/dist/common/logs/logger-config.js.map +1 -1
  66. package/dist/common/logs/logger-proxy.js +2 -3
  67. package/dist/common/logs/logger-proxy.js.map +1 -1
  68. package/dist/common/logs/request.js +8 -5
  69. package/dist/common/logs/request.js.map +1 -1
  70. package/dist/common/queue.js +22 -9
  71. package/dist/common/queue.js.map +1 -1
  72. package/dist/config.js +8 -11
  73. package/dist/config.js.map +1 -1
  74. package/dist/constants.js +437 -435
  75. package/dist/constants.js.map +1 -1
  76. package/dist/controls-options-manager/constants.js +3 -6
  77. package/dist/controls-options-manager/constants.js.map +1 -1
  78. package/dist/controls-options-manager/enums.js +15 -6
  79. package/dist/controls-options-manager/enums.js.map +1 -1
  80. package/dist/controls-options-manager/index.js +127 -38
  81. package/dist/controls-options-manager/index.js.map +1 -1
  82. package/dist/controls-options-manager/types.js +7 -0
  83. package/dist/controls-options-manager/types.js.map +1 -0
  84. package/dist/controls-options-manager/util.js +309 -19
  85. package/dist/controls-options-manager/util.js.map +1 -1
  86. package/dist/index.js +116 -4
  87. package/dist/index.js.map +1 -1
  88. package/dist/interpretation/collection.js +22 -0
  89. package/dist/interpretation/collection.js.map +1 -0
  90. package/dist/interpretation/index.js +365 -0
  91. package/dist/interpretation/index.js.map +1 -0
  92. package/dist/interpretation/siLanguage.js +24 -0
  93. package/dist/interpretation/siLanguage.js.map +1 -0
  94. package/dist/locus-info/controlsUtils.js +100 -11
  95. package/dist/locus-info/controlsUtils.js.map +1 -1
  96. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  97. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  98. package/dist/locus-info/fullState.js +1 -2
  99. package/dist/locus-info/fullState.js.map +1 -1
  100. package/dist/locus-info/hostUtils.js +1 -2
  101. package/dist/locus-info/hostUtils.js.map +1 -1
  102. package/dist/locus-info/index.js +425 -84
  103. package/dist/locus-info/index.js.map +1 -1
  104. package/dist/locus-info/infoUtils.js +13 -5
  105. package/dist/locus-info/infoUtils.js.map +1 -1
  106. package/dist/locus-info/mediaSharesUtils.js +58 -3
  107. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  108. package/dist/locus-info/parser.js +253 -80
  109. package/dist/locus-info/parser.js.map +1 -1
  110. package/dist/locus-info/selfUtils.js +97 -13
  111. package/dist/locus-info/selfUtils.js.map +1 -1
  112. package/dist/media/index.js +106 -319
  113. package/dist/media/index.js.map +1 -1
  114. package/dist/media/properties.js +96 -153
  115. package/dist/media/properties.js.map +1 -1
  116. package/dist/media/util.js +1 -22
  117. package/dist/media/util.js.map +1 -1
  118. package/dist/mediaQualityMetrics/config.js +498 -493
  119. package/dist/mediaQualityMetrics/config.js.map +1 -1
  120. package/dist/meeting/in-meeting-actions.js +92 -3
  121. package/dist/meeting/in-meeting-actions.js.map +1 -1
  122. package/dist/meeting/index.js +4628 -2971
  123. package/dist/meeting/index.js.map +1 -1
  124. package/dist/meeting/locusMediaRequest.js +291 -0
  125. package/dist/meeting/locusMediaRequest.js.map +1 -0
  126. package/dist/meeting/muteState.js +224 -133
  127. package/dist/meeting/muteState.js.map +1 -1
  128. package/dist/meeting/request.js +297 -199
  129. package/dist/meeting/request.js.map +1 -1
  130. package/dist/meeting/request.type.js +7 -0
  131. package/dist/meeting/request.type.js.map +1 -0
  132. package/dist/meeting/state.js +1 -2
  133. package/dist/meeting/state.js.map +1 -1
  134. package/dist/meeting/util.js +605 -435
  135. package/dist/meeting/util.js.map +1 -1
  136. package/dist/meeting-info/collection.js +3 -4
  137. package/dist/meeting-info/collection.js.map +1 -1
  138. package/dist/meeting-info/index.js +74 -7
  139. package/dist/meeting-info/index.js.map +1 -1
  140. package/dist/meeting-info/meeting-info-v2.js +200 -63
  141. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  142. package/dist/meeting-info/request.js +1 -2
  143. package/dist/meeting-info/request.js.map +1 -1
  144. package/dist/meeting-info/util.js +2 -3
  145. package/dist/meeting-info/util.js.map +1 -1
  146. package/dist/meeting-info/utilv2.js +39 -41
  147. package/dist/meeting-info/utilv2.js.map +1 -1
  148. package/dist/meetings/collection.js +42 -4
  149. package/dist/meetings/collection.js.map +1 -1
  150. package/dist/meetings/index.js +477 -123
  151. package/dist/meetings/index.js.map +1 -1
  152. package/dist/meetings/meetings.types.js +7 -0
  153. package/dist/meetings/meetings.types.js.map +1 -0
  154. package/dist/meetings/request.js +4 -3
  155. package/dist/meetings/request.js.map +1 -1
  156. package/dist/meetings/util.js +107 -6
  157. package/dist/meetings/util.js.map +1 -1
  158. package/dist/member/index.js +54 -2
  159. package/dist/member/index.js.map +1 -1
  160. package/dist/member/member.types.js +3 -4
  161. package/dist/member/member.types.js.map +1 -1
  162. package/dist/member/types.js +23 -0
  163. package/dist/member/types.js.map +1 -0
  164. package/dist/member/util.js +131 -29
  165. package/dist/member/util.js.map +1 -1
  166. package/dist/members/collection.js +11 -2
  167. package/dist/members/collection.js.map +1 -1
  168. package/dist/members/index.js +174 -10
  169. package/dist/members/index.js.map +1 -1
  170. package/dist/members/request.js +108 -41
  171. package/dist/members/request.js.map +1 -1
  172. package/dist/members/types.js +14 -0
  173. package/dist/members/types.js.map +1 -0
  174. package/dist/members/util.js +327 -234
  175. package/dist/members/util.js.map +1 -1
  176. package/dist/metrics/constants.js +15 -9
  177. package/dist/metrics/constants.js.map +1 -1
  178. package/dist/metrics/index.js +4 -452
  179. package/dist/metrics/index.js.map +1 -1
  180. package/dist/multistream/mediaRequestManager.js +344 -0
  181. package/dist/multistream/mediaRequestManager.js.map +1 -0
  182. package/dist/multistream/receiveSlot.js +200 -0
  183. package/dist/multistream/receiveSlot.js.map +1 -0
  184. package/dist/multistream/receiveSlotManager.js +174 -0
  185. package/dist/multistream/receiveSlotManager.js.map +1 -0
  186. package/dist/multistream/remoteMedia.js +268 -0
  187. package/dist/multistream/remoteMedia.js.map +1 -0
  188. package/dist/multistream/remoteMediaGroup.js +267 -0
  189. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  190. package/dist/multistream/remoteMediaManager.js +1211 -0
  191. package/dist/multistream/remoteMediaManager.js.map +1 -0
  192. package/dist/multistream/sendSlotManager.js +236 -0
  193. package/dist/multistream/sendSlotManager.js.map +1 -0
  194. package/dist/networkQualityMonitor/index.js +5 -4
  195. package/dist/networkQualityMonitor/index.js.map +1 -1
  196. package/dist/personal-meeting-room/index.js +2 -3
  197. package/dist/personal-meeting-room/index.js.map +1 -1
  198. package/dist/personal-meeting-room/request.js +2 -3
  199. package/dist/personal-meeting-room/request.js.map +1 -1
  200. package/dist/personal-meeting-room/util.js +1 -2
  201. package/dist/personal-meeting-room/util.js.map +1 -1
  202. package/dist/reachability/index.js +265 -72
  203. package/dist/reachability/index.js.map +1 -1
  204. package/dist/reachability/request.js +18 -10
  205. package/dist/reachability/request.js.map +1 -1
  206. package/dist/reactions/constants.js +12 -0
  207. package/dist/reactions/constants.js.map +1 -0
  208. package/dist/reactions/reactions.js +4 -6
  209. package/dist/reactions/reactions.js.map +1 -1
  210. package/dist/reactions/reactions.type.js +21 -23
  211. package/dist/reactions/reactions.type.js.map +1 -1
  212. package/dist/reconnection-manager/index.js +281 -229
  213. package/dist/reconnection-manager/index.js.map +1 -1
  214. package/dist/recording-controller/enums.js +4 -5
  215. package/dist/recording-controller/enums.js.map +1 -1
  216. package/dist/recording-controller/index.js +57 -46
  217. package/dist/recording-controller/index.js.map +1 -1
  218. package/dist/recording-controller/util.js +10 -10
  219. package/dist/recording-controller/util.js.map +1 -1
  220. package/dist/roap/index.js +101 -235
  221. package/dist/roap/index.js.map +1 -1
  222. package/dist/roap/request.js +126 -180
  223. package/dist/roap/request.js.map +1 -1
  224. package/dist/roap/turnDiscovery.js +115 -105
  225. package/dist/roap/turnDiscovery.js.map +1 -1
  226. package/dist/rtcMetrics/constants.js +11 -0
  227. package/dist/rtcMetrics/constants.js.map +1 -0
  228. package/dist/rtcMetrics/index.js +140 -0
  229. package/dist/rtcMetrics/index.js.map +1 -0
  230. package/dist/statsAnalyzer/global.js +2 -85
  231. package/dist/statsAnalyzer/global.js.map +1 -1
  232. package/dist/statsAnalyzer/index.js +402 -424
  233. package/dist/statsAnalyzer/index.js.map +1 -1
  234. package/dist/statsAnalyzer/mqaUtil.js +117 -83
  235. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  236. package/dist/transcription/index.js +1 -2
  237. package/dist/transcription/index.js.map +1 -1
  238. package/dist/webinar/collection.js +43 -0
  239. package/dist/webinar/collection.js.map +1 -0
  240. package/dist/webinar/index.js +68 -0
  241. package/dist/webinar/index.js.map +1 -0
  242. package/package.json +34 -25
  243. package/src/annotation/annotation.types.ts +50 -0
  244. package/src/annotation/constants.ts +36 -0
  245. package/src/annotation/index.ts +328 -0
  246. package/src/breakouts/README.md +220 -0
  247. package/src/breakouts/breakout.ts +188 -0
  248. package/src/breakouts/collection.ts +19 -0
  249. package/src/breakouts/edit-lock-error.ts +25 -0
  250. package/src/breakouts/events.ts +56 -0
  251. package/src/breakouts/index.ts +925 -0
  252. package/src/breakouts/request.ts +55 -0
  253. package/src/breakouts/utils.ts +57 -0
  254. package/src/common/errors/no-meeting-info.ts +24 -0
  255. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  256. package/src/common/errors/webex-errors.ts +36 -12
  257. package/src/common/logs/logger-proxy.ts +1 -1
  258. package/src/common/logs/request.ts +5 -1
  259. package/src/common/queue.ts +22 -8
  260. package/src/config.ts +5 -7
  261. package/src/constants.ts +271 -93
  262. package/src/controls-options-manager/enums.ts +12 -0
  263. package/src/controls-options-manager/index.ts +116 -21
  264. package/src/controls-options-manager/types.ts +59 -0
  265. package/src/controls-options-manager/util.ts +294 -14
  266. package/src/index.ts +40 -0
  267. package/src/interpretation/README.md +60 -0
  268. package/src/interpretation/collection.ts +19 -0
  269. package/src/interpretation/index.ts +332 -0
  270. package/src/interpretation/siLanguage.ts +18 -0
  271. package/src/locus-info/controlsUtils.ts +110 -0
  272. package/src/locus-info/index.ts +449 -61
  273. package/src/locus-info/infoUtils.ts +14 -2
  274. package/src/locus-info/mediaSharesUtils.ts +64 -0
  275. package/src/locus-info/parser.ts +258 -47
  276. package/src/locus-info/selfUtils.ts +85 -2
  277. package/src/media/index.ts +153 -370
  278. package/src/media/properties.ts +106 -136
  279. package/src/media/util.ts +0 -21
  280. package/src/mediaQualityMetrics/config.ts +379 -377
  281. package/src/meeting/in-meeting-actions.ts +172 -0
  282. package/src/meeting/index.ts +3861 -2504
  283. package/src/meeting/locusMediaRequest.ts +313 -0
  284. package/src/meeting/muteState.ts +224 -138
  285. package/src/meeting/request.ts +207 -127
  286. package/src/meeting/request.type.ts +13 -0
  287. package/src/meeting/util.ts +590 -423
  288. package/src/meeting-info/index.ts +81 -8
  289. package/src/meeting-info/meeting-info-v2.ts +163 -13
  290. package/src/meeting-info/util.ts +1 -1
  291. package/src/meeting-info/utilv2.ts +28 -28
  292. package/src/meetings/collection.ts +33 -0
  293. package/src/meetings/index.ts +477 -124
  294. package/src/meetings/meetings.types.ts +12 -0
  295. package/src/meetings/request.ts +2 -0
  296. package/src/meetings/util.ts +116 -5
  297. package/src/member/index.ts +52 -1
  298. package/src/member/types.ts +38 -0
  299. package/src/member/util.ts +139 -28
  300. package/src/members/collection.ts +8 -0
  301. package/src/members/index.ts +196 -7
  302. package/src/members/request.ts +97 -17
  303. package/src/members/types.ts +29 -0
  304. package/src/members/util.ts +333 -240
  305. package/src/metrics/constants.ts +13 -6
  306. package/src/metrics/index.ts +1 -471
  307. package/src/multistream/mediaRequestManager.ts +440 -0
  308. package/src/multistream/receiveSlot.ts +184 -0
  309. package/src/multistream/receiveSlotManager.ts +166 -0
  310. package/src/multistream/remoteMedia.ts +254 -0
  311. package/src/multistream/remoteMediaGroup.ts +284 -0
  312. package/src/multistream/remoteMediaManager.ts +1145 -0
  313. package/src/multistream/sendSlotManager.ts +170 -0
  314. package/src/networkQualityMonitor/index.ts +6 -6
  315. package/src/reachability/index.ts +238 -45
  316. package/src/reachability/request.ts +17 -8
  317. package/src/reactions/constants.ts +4 -0
  318. package/src/reactions/reactions.ts +4 -4
  319. package/src/reactions/reactions.type.ts +30 -4
  320. package/src/reconnection-manager/index.ts +167 -154
  321. package/src/recording-controller/index.ts +20 -3
  322. package/src/recording-controller/util.ts +26 -9
  323. package/src/roap/index.ts +98 -241
  324. package/src/roap/request.ts +74 -148
  325. package/src/roap/turnDiscovery.ts +62 -56
  326. package/src/rtcMetrics/constants.ts +3 -0
  327. package/src/rtcMetrics/index.ts +124 -0
  328. package/src/statsAnalyzer/global.ts +1 -84
  329. package/src/statsAnalyzer/index.ts +470 -522
  330. package/src/statsAnalyzer/mqaUtil.ts +117 -112
  331. package/src/webinar/collection.ts +31 -0
  332. package/src/webinar/index.ts +62 -0
  333. package/test/integration/spec/converged-space-meetings.js +233 -0
  334. package/test/integration/spec/journey.js +320 -264
  335. package/test/integration/spec/space-meeting.js +77 -4
  336. package/test/unit/spec/annotation/index.ts +418 -0
  337. package/test/unit/spec/breakouts/breakout.ts +237 -0
  338. package/test/unit/spec/breakouts/collection.ts +15 -0
  339. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  340. package/test/unit/spec/breakouts/events.ts +89 -0
  341. package/test/unit/spec/breakouts/index.ts +1790 -0
  342. package/test/unit/spec/breakouts/request.ts +104 -0
  343. package/test/unit/spec/breakouts/utils.js +72 -0
  344. package/test/unit/spec/common/queue.js +31 -2
  345. package/test/unit/spec/controls-options-manager/index.js +163 -0
  346. package/test/unit/spec/controls-options-manager/util.js +576 -60
  347. package/test/unit/spec/fixture/locus.js +1 -0
  348. package/test/unit/spec/interpretation/collection.ts +15 -0
  349. package/test/unit/spec/interpretation/index.ts +589 -0
  350. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  351. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  352. package/test/unit/spec/locus-info/index.js +1390 -16
  353. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  354. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  355. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  356. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  357. package/test/unit/spec/locus-info/parser.js +116 -35
  358. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  359. package/test/unit/spec/media/index.ts +274 -0
  360. package/test/unit/spec/media/properties.ts +75 -84
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +84 -0
  362. package/test/unit/spec/meeting/index.js +8269 -3145
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  364. package/test/unit/spec/meeting/muteState.js +409 -213
  365. package/test/unit/spec/meeting/request.js +512 -42
  366. package/test/unit/spec/meeting/utils.js +741 -24
  367. package/test/unit/spec/meeting-info/index.js +300 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +26 -0
  371. package/test/unit/spec/meetings/index.js +1201 -210
  372. package/test/unit/spec/meetings/utils.js +202 -2
  373. package/test/unit/spec/member/index.js +38 -8
  374. package/test/unit/spec/member/util.js +499 -29
  375. package/test/unit/spec/members/index.js +597 -3
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +210 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  380. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  382. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  385. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  386. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  387. package/test/unit/spec/reachability/index.ts +598 -24
  388. package/test/unit/spec/reachability/request.js +68 -0
  389. package/test/unit/spec/reconnection-manager/index.js +145 -22
  390. package/test/unit/spec/recording-controller/index.js +293 -218
  391. package/test/unit/spec/recording-controller/util.js +223 -96
  392. package/test/unit/spec/roap/index.ts +200 -76
  393. package/test/unit/spec/roap/request.ts +232 -0
  394. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  395. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  396. package/test/unit/spec/stats-analyzer/index.js +188 -174
  397. package/test/unit/spec/webinar/collection.ts +13 -0
  398. package/test/unit/spec/webinar/index.ts +60 -0
  399. package/test/utils/constants.js +9 -0
  400. package/test/utils/integrationTestUtils.js +46 -0
  401. package/test/utils/testUtils.js +0 -45
  402. package/test/utils/webex-config.js +4 -0
  403. package/test/utils/webex-test-users.js +7 -3
  404. package/dist/common/browser-detection.d.ts +0 -9
  405. package/dist/common/collection.d.ts +0 -48
  406. package/dist/common/config.d.ts +0 -2
  407. package/dist/common/errors/captcha-error.d.ts +0 -15
  408. package/dist/common/errors/intent-to-join.d.ts +0 -16
  409. package/dist/common/errors/join-meeting.d.ts +0 -17
  410. package/dist/common/errors/media.d.ts +0 -15
  411. package/dist/common/errors/parameter.d.ts +0 -15
  412. package/dist/common/errors/password-error.d.ts +0 -15
  413. package/dist/common/errors/permission.d.ts +0 -14
  414. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  415. package/dist/common/errors/reconnection.d.ts +0 -15
  416. package/dist/common/errors/stats.d.ts +0 -15
  417. package/dist/common/errors/webex-errors.d.ts +0 -81
  418. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  419. package/dist/common/events/events-scope.d.ts +0 -17
  420. package/dist/common/events/events.d.ts +0 -12
  421. package/dist/common/events/trigger-proxy.d.ts +0 -2
  422. package/dist/common/events/util.d.ts +0 -2
  423. package/dist/common/logs/logger-config.d.ts +0 -2
  424. package/dist/common/logs/logger-proxy.d.ts +0 -2
  425. package/dist/common/logs/request.d.ts +0 -34
  426. package/dist/common/queue.d.ts +0 -32
  427. package/dist/config.d.ts +0 -73
  428. package/dist/constants.d.ts +0 -926
  429. package/dist/controls-options-manager/constants.d.ts +0 -4
  430. package/dist/controls-options-manager/enums.d.ts +0 -5
  431. package/dist/controls-options-manager/index.d.ts +0 -120
  432. package/dist/controls-options-manager/util.d.ts +0 -7
  433. package/dist/index.d.ts +0 -4
  434. package/dist/locus-info/controlsUtils.d.ts +0 -2
  435. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  436. package/dist/locus-info/fullState.d.ts +0 -2
  437. package/dist/locus-info/hostUtils.d.ts +0 -2
  438. package/dist/locus-info/index.d.ts +0 -269
  439. package/dist/locus-info/infoUtils.d.ts +0 -2
  440. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  441. package/dist/locus-info/parser.d.ts +0 -212
  442. package/dist/locus-info/selfUtils.d.ts +0 -2
  443. package/dist/media/index.d.ts +0 -32
  444. package/dist/media/properties.d.ts +0 -108
  445. package/dist/media/util.d.ts +0 -2
  446. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  447. package/dist/meeting/effectsState.d.ts +0 -42
  448. package/dist/meeting/effectsState.js +0 -260
  449. package/dist/meeting/effectsState.js.map +0 -1
  450. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  451. package/dist/meeting/index.d.ts +0 -1622
  452. package/dist/meeting/muteState.d.ts +0 -116
  453. package/dist/meeting/request.d.ts +0 -255
  454. package/dist/meeting/state.d.ts +0 -9
  455. package/dist/meeting/util.d.ts +0 -2
  456. package/dist/meeting-info/collection.d.ts +0 -20
  457. package/dist/meeting-info/index.d.ts +0 -57
  458. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  459. package/dist/meeting-info/request.d.ts +0 -22
  460. package/dist/meeting-info/util.d.ts +0 -2
  461. package/dist/meeting-info/utilv2.d.ts +0 -2
  462. package/dist/meetings/collection.d.ts +0 -23
  463. package/dist/meetings/index.d.ts +0 -296
  464. package/dist/meetings/request.d.ts +0 -27
  465. package/dist/meetings/util.d.ts +0 -18
  466. package/dist/member/index.d.ts +0 -147
  467. package/dist/member/member.types.d.ts +0 -11
  468. package/dist/member/util.d.ts +0 -2
  469. package/dist/members/collection.d.ts +0 -24
  470. package/dist/members/index.d.ts +0 -298
  471. package/dist/members/request.d.ts +0 -50
  472. package/dist/members/util.d.ts +0 -2
  473. package/dist/metrics/config.d.ts +0 -169
  474. package/dist/metrics/config.js +0 -289
  475. package/dist/metrics/config.js.map +0 -1
  476. package/dist/metrics/constants.d.ts +0 -59
  477. package/dist/metrics/index.d.ts +0 -152
  478. package/dist/networkQualityMonitor/index.d.ts +0 -70
  479. package/dist/peer-connection-manager/index.d.ts +0 -6
  480. package/dist/peer-connection-manager/index.js +0 -671
  481. package/dist/peer-connection-manager/index.js.map +0 -1
  482. package/dist/peer-connection-manager/util.d.ts +0 -6
  483. package/dist/peer-connection-manager/util.js +0 -110
  484. package/dist/peer-connection-manager/util.js.map +0 -1
  485. package/dist/personal-meeting-room/index.d.ts +0 -47
  486. package/dist/personal-meeting-room/request.d.ts +0 -14
  487. package/dist/personal-meeting-room/util.d.ts +0 -2
  488. package/dist/reachability/index.d.ts +0 -139
  489. package/dist/reachability/request.d.ts +0 -35
  490. package/dist/reactions/reactions.d.ts +0 -4
  491. package/dist/reactions/reactions.type.d.ts +0 -32
  492. package/dist/reconnection-manager/index.d.ts +0 -112
  493. package/dist/recording-controller/enums.d.ts +0 -7
  494. package/dist/recording-controller/index.d.ts +0 -193
  495. package/dist/recording-controller/util.d.ts +0 -13
  496. package/dist/roap/collection.d.ts +0 -10
  497. package/dist/roap/collection.js +0 -63
  498. package/dist/roap/collection.js.map +0 -1
  499. package/dist/roap/handler.d.ts +0 -47
  500. package/dist/roap/handler.js +0 -279
  501. package/dist/roap/handler.js.map +0 -1
  502. package/dist/roap/index.d.ts +0 -116
  503. package/dist/roap/request.d.ts +0 -35
  504. package/dist/roap/state.d.ts +0 -9
  505. package/dist/roap/state.js +0 -127
  506. package/dist/roap/state.js.map +0 -1
  507. package/dist/roap/turnDiscovery.d.ts +0 -81
  508. package/dist/roap/util.d.ts +0 -2
  509. package/dist/roap/util.js +0 -76
  510. package/dist/roap/util.js.map +0 -1
  511. package/dist/statsAnalyzer/global.d.ts +0 -118
  512. package/dist/statsAnalyzer/index.d.ts +0 -193
  513. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  514. package/dist/transcription/index.d.ts +0 -64
  515. package/src/index.js +0 -15
  516. package/src/meeting/effectsState.ts +0 -209
  517. package/src/metrics/config.ts +0 -485
  518. package/src/peer-connection-manager/index.ts +0 -847
  519. package/src/peer-connection-manager/util.ts +0 -119
  520. package/src/roap/collection.ts +0 -62
  521. package/src/roap/handler.ts +0 -294
  522. package/src/roap/state.ts +0 -156
  523. package/src/roap/util.ts +0 -100
  524. package/test/unit/spec/meeting/effectsState.js +0 -281
  525. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  526. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  527. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  528. package/test/unit/spec/roap/util.js +0 -30
@@ -0,0 +1,442 @@
1
+ import sinon from 'sinon';
2
+ import {assert} from '@webex/test-helper-chai';
3
+ import { cloneDeep, defer } from 'lodash';
4
+
5
+ import MockWebex from '@webex/test-helper-mock-webex';
6
+ import Meetings from '@webex/plugin-meetings';
7
+ import { LocalMuteRequest, LocusMediaRequest, RoapRequest } from "@webex/plugin-meetings/src/meeting/locusMediaRequest";
8
+ import testUtils from '../../../utils/testUtils';
9
+ import { Defer } from '@webex/common';
10
+ import { IP_VERSION } from '../../../../src/constants';
11
+
12
+ describe('LocusMediaRequest.send()', () => {
13
+ let locusMediaRequest: LocusMediaRequest;
14
+ let webexRequestStub;
15
+ let mockWebex;
16
+
17
+ const fakeLocusResponse = {
18
+ locus: { something: 'whatever'}
19
+ };
20
+
21
+ const exampleRoapRequestBody:RoapRequest = {
22
+ type: 'RoapMessage',
23
+ mediaId: 'mediaId',
24
+ selfUrl: 'fakeMeetingSelfUrl',
25
+ roapMessage: {
26
+ messageType: 'OFFER',
27
+ sdps: ['sdp'],
28
+ version: '2',
29
+ seq: 1,
30
+ tieBreaker: 0xfffffffe,
31
+ },
32
+ reachability: {
33
+ 'wjfkm.wjfkm.*': {udp:{reachable: true}, tcp:{reachable:false}},
34
+ '1eb65fdf-9643-417f-9974-ad72cae0e10f.59268c12-7a04-4b23-a1a1-4c74be03019a.*': {udp:{reachable: false}, tcp:{reachable:true}},
35
+ },
36
+ joinCookie: {
37
+ anycastEntryPoint: 'aws-eu-west-1',
38
+ clientIpAddress: 'some ip',
39
+ timeShot: '2023-05-23T08:03:49Z',
40
+ },
41
+ ipVersion: IP_VERSION.only_ipv4,
42
+ };
43
+
44
+ const createExpectedRoapBody = (expectedMessageType, expectedMute:{audioMuted: boolean, videoMuted: boolean}) => {
45
+ return {
46
+ device: { url: 'deviceUrl', deviceType: 'deviceType', regionCode: 'regionCode' },
47
+ correlationId: 'correlationId',
48
+ localMedias: [
49
+ {
50
+ localSdp: `{"audioMuted":${expectedMute.audioMuted},"videoMuted":${expectedMute.videoMuted},"roapMessage":{"messageType":"${expectedMessageType}","sdps":["sdp"],"version":"2","seq":1,"tieBreaker":4294967294},"reachability":{"wjfkm.wjfkm.*":{"udp":{"reachable":true},"tcp":{"reachable":false}},"1eb65fdf-9643-417f-9974-ad72cae0e10f.59268c12-7a04-4b23-a1a1-4c74be03019a.*":{"udp":{"reachable":false},"tcp":{"reachable":true}}}}`,
51
+ mediaId: 'mediaId'
52
+ }
53
+ ],
54
+ clientMediaPreferences: {
55
+ preferTranscoding: true,
56
+ ipver: 4,
57
+ joinCookie: {
58
+ anycastEntryPoint: 'aws-eu-west-1',
59
+ clientIpAddress: 'some ip',
60
+ timeShot: '2023-05-23T08:03:49Z'
61
+ }
62
+ }
63
+ };
64
+ };
65
+
66
+ const exampleLocalMuteRequestBody:LocalMuteRequest = {
67
+ type: 'LocalMute',
68
+ mediaId: 'mediaId',
69
+ selfUrl: 'fakeMeetingSelfUrl',
70
+ muteOptions: {},
71
+ };
72
+
73
+ const createExpectedLocalMuteBody = (expectedMute:{audioMuted: boolean, videoMuted: boolean}, sequence = undefined) => {
74
+ const body: any = {
75
+ device: {
76
+ url: 'deviceUrl',
77
+ deviceType: 'deviceType',
78
+ regionCode: 'regionCode',
79
+ },
80
+ correlationId: 'correlationId',
81
+ usingResource: null,
82
+ respOnlySdp: true,
83
+ localMedias: [
84
+ {
85
+ mediaId: 'mediaId',
86
+ localSdp: `{"audioMuted":${expectedMute.audioMuted},"videoMuted":${expectedMute.videoMuted}}`,
87
+ },
88
+ ],
89
+ clientMediaPreferences: {
90
+ preferTranscoding: true,
91
+ ipver: undefined,
92
+ },
93
+ };
94
+
95
+ if (sequence) {
96
+ body.sequence = sequence;
97
+ }
98
+
99
+ return body;
100
+ };
101
+
102
+ beforeEach(() => {
103
+ mockWebex = new MockWebex({
104
+ children: {
105
+ meetings: Meetings,
106
+ },
107
+ });
108
+
109
+ locusMediaRequest = new LocusMediaRequest({
110
+ device: {
111
+ url: 'deviceUrl',
112
+ deviceType: 'deviceType',
113
+ regionCode: 'regionCode',
114
+ },
115
+ correlationId: 'correlationId',
116
+ preferTranscoding: true,
117
+ }, {
118
+ parent: mockWebex,
119
+ });
120
+ webexRequestStub = sinon.stub(locusMediaRequest, 'request').resolves(fakeLocusResponse);
121
+ })
122
+
123
+ const sendLocalMute = (muteOptions, overrides={}) => locusMediaRequest.send({...exampleLocalMuteRequestBody, ...overrides, muteOptions});
124
+
125
+ const sendRoapMessage = (messageType) => {
126
+ const request = cloneDeep(exampleRoapRequestBody);
127
+
128
+ request.roapMessage.messageType = messageType;
129
+ return locusMediaRequest.send(request);
130
+ }
131
+
132
+ /** Helper function that makes sure the LocusMediaRequest.confluenceState is 'created' */
133
+ const ensureConfluenceCreated = async () => {
134
+ await sendRoapMessage('OFFER');
135
+
136
+ webexRequestStub.resetHistory();
137
+ }
138
+
139
+ it('sends a roap message', async () => {
140
+ const result = await sendRoapMessage('OFFER');
141
+
142
+ assert.equal(result, fakeLocusResponse);
143
+
144
+ assert.calledOnceWithExactly(webexRequestStub, {
145
+ method: 'PUT',
146
+ uri: 'fakeMeetingSelfUrl/media',
147
+ body: createExpectedRoapBody('OFFER', {audioMuted: true, videoMuted: true}),
148
+ });
149
+ });
150
+
151
+ it('sends a local mute request', async () => {
152
+ await ensureConfluenceCreated();
153
+
154
+ const result = await sendLocalMute({audioMuted: false, videoMuted: false});
155
+
156
+ assert.equal(result, fakeLocusResponse);
157
+
158
+ assert.calledOnceWithExactly(webexRequestStub, {
159
+ method: 'PUT',
160
+ uri: 'fakeMeetingSelfUrl/media',
161
+ body: createExpectedLocalMuteBody({audioMuted: false, videoMuted: false}),
162
+ });
163
+ });
164
+
165
+ it('sends a local mute request with sequence', async () => {
166
+ await ensureConfluenceCreated();
167
+
168
+ const sequence = {some: 'sequence data'};
169
+
170
+ const result = await sendLocalMute({audioMuted: false, videoMuted: false}, {sequence});
171
+
172
+ assert.equal(result, fakeLocusResponse);
173
+
174
+ assert.calledOnceWithExactly(webexRequestStub, {
175
+ method: 'PUT',
176
+ uri: 'fakeMeetingSelfUrl/media',
177
+ body: createExpectedLocalMuteBody({audioMuted: false, videoMuted: false}, sequence),
178
+ });
179
+ });
180
+
181
+ it('sends a local mute request with the last audio/video mute values when called multiple times in same processing cycle', async () => {
182
+ await ensureConfluenceCreated();
183
+
184
+ let result1;
185
+ let result2;
186
+
187
+ const promise1 = sendLocalMute({audioMuted: true, videoMuted: false})
188
+ .then((result) => {
189
+ result1 = result;
190
+ });
191
+
192
+ const promise2 = sendLocalMute({audioMuted: false, videoMuted: true})
193
+ .then((result) => {
194
+ result2 = result;
195
+ });
196
+
197
+ await testUtils.flushPromises();
198
+
199
+ await promise1;
200
+ await promise2;
201
+ assert.equal(result1, fakeLocusResponse);
202
+ assert.equal(result2, fakeLocusResponse);
203
+
204
+ assert.calledOnceWithExactly(webexRequestStub, {
205
+ method: 'PUT',
206
+ uri: 'fakeMeetingSelfUrl/media',
207
+ body: createExpectedLocalMuteBody({audioMuted: false, videoMuted: true}),
208
+ });
209
+
210
+ });
211
+
212
+ it('sends a local mute request with the last audio/video mute values', async () => {
213
+ await ensureConfluenceCreated();
214
+
215
+ await Promise.all([
216
+ sendLocalMute({audioMuted: undefined, videoMuted: false}),
217
+ sendLocalMute({audioMuted: true, videoMuted: undefined}),
218
+ sendLocalMute({audioMuted: false, videoMuted: true}),
219
+ sendLocalMute({audioMuted: true, videoMuted: false}),
220
+ ]);
221
+
222
+ assert.calledOnceWithExactly(webexRequestStub, {
223
+ method: 'PUT',
224
+ uri: 'fakeMeetingSelfUrl/media',
225
+ body: createExpectedLocalMuteBody({audioMuted: true, videoMuted: false}),
226
+ });
227
+
228
+ });
229
+
230
+ it('sends only roap when roap and local mute are requested', async () => {
231
+ await Promise.all([
232
+ sendLocalMute({audioMuted: false, videoMuted: undefined}),
233
+ sendRoapMessage('OFFER'),
234
+ sendLocalMute({audioMuted: true, videoMuted: false}),
235
+ ]);
236
+
237
+ /* check that only the roap message was sent and it had the last
238
+ values for audio and video mute
239
+ */
240
+ assert.calledOnceWithExactly(webexRequestStub, {
241
+ method: 'PUT',
242
+ uri: 'fakeMeetingSelfUrl/media',
243
+ body: createExpectedRoapBody('OFFER', {audioMuted: true, videoMuted: false}),
244
+ });
245
+ });
246
+
247
+ describe('queueing', () => {
248
+ let clock;
249
+ let requestsToLocus;
250
+ let results;
251
+
252
+ beforeEach(() => {
253
+ clock = sinon.useFakeTimers();
254
+ requestsToLocus = [];
255
+ results = [];
256
+
257
+ // setup the mock so that each new request that we send to Locus,
258
+ // returns a promise that we control from this test
259
+ webexRequestStub.callsFake(() => {
260
+ const defer = new Defer();
261
+ requestsToLocus.push(defer);
262
+ return defer.promise;
263
+ });
264
+ });
265
+
266
+ afterEach(() => {
267
+ clock.restore();
268
+ });
269
+
270
+ /** LocusMediaRequest.send() uses Lodash.defer(), so it only starts sending any requests
271
+ * after the processing cycle from which it was called is finished.
272
+ * This helper function waits for this to happen - it's needed, because we're using
273
+ * fake timers in these tests
274
+ */
275
+ const ensureQueueProcessingIsStarted = () => {
276
+ clock.tick(1);
277
+ }
278
+ it('queues requests if there is one already in progress', async () => {
279
+ results.push(sendRoapMessage('OFFER'));
280
+
281
+ ensureQueueProcessingIsStarted();
282
+
283
+ // check that OFFER has been sent out
284
+ assert.calledWith(webexRequestStub, {
285
+ method: 'PUT',
286
+ uri: 'fakeMeetingSelfUrl/media',
287
+ body: createExpectedRoapBody('OFFER', {audioMuted: true, videoMuted: true}),
288
+ });
289
+
290
+ webexRequestStub.resetHistory();
291
+
292
+ // at this point the request should be sent out and "in progress",
293
+ // so any further calls should be queued
294
+ results.push(sendRoapMessage('OK'));
295
+
296
+ // OK should not be sent out yet, only queued
297
+ assert.notCalled(webexRequestStub);
298
+
299
+ // now simulate the first locus request (offer) to resolve,
300
+ // so that the next request from the queue (ok) can be sent out
301
+ requestsToLocus[0].resolve();
302
+ await testUtils.flushPromises();
303
+ ensureQueueProcessingIsStarted();
304
+
305
+ // verify OK was sent out
306
+ assert.calledWith(webexRequestStub, {
307
+ method: 'PUT',
308
+ uri: 'fakeMeetingSelfUrl/media',
309
+ body: createExpectedRoapBody('OK', {audioMuted: true, videoMuted: true}),
310
+ });
311
+
312
+ // promise returned by the first call to send OFFER should be resolved by now
313
+ await results[0];
314
+
315
+ // simulate Locus sending http response to OK
316
+ requestsToLocus[1].resolve();
317
+ await results[1];
318
+ });
319
+
320
+ it('combines local mute requests into a single /media request to Locus when queueing', async () => {
321
+ results.push(sendRoapMessage('OFFER'));
322
+ results.push(sendLocalMute({audioMuted: false, videoMuted: false}));
323
+
324
+ ensureQueueProcessingIsStarted();
325
+
326
+ // check that OFFER and local mute have been combined into
327
+ // a single OFFER request with the right mute values
328
+ assert.calledOnceWithExactly(webexRequestStub, {
329
+ method: 'PUT',
330
+ uri: 'fakeMeetingSelfUrl/media',
331
+ body: createExpectedRoapBody('OFFER', {audioMuted: false, videoMuted: false}),
332
+ });
333
+
334
+ webexRequestStub.resetHistory();
335
+
336
+ // at this point the request should be sent out and "in progress",
337
+ // so any further calls should be queued
338
+ results.push(sendLocalMute({audioMuted: true, videoMuted: false}));
339
+ results.push(sendRoapMessage('OK'));
340
+ results.push(sendLocalMute({audioMuted: false, videoMuted: true}));
341
+
342
+ // nothing should be sent out yet, only queued
343
+ assert.notCalled(webexRequestStub);
344
+
345
+ // now simulate the first locus request (offer) to resolve,
346
+ // so that the next request from the queue (ok) can be sent out
347
+ requestsToLocus[0].resolve();
348
+ await testUtils.flushPromises();
349
+ ensureQueueProcessingIsStarted();
350
+
351
+ // verify OK was sent out
352
+ assert.calledOnceWithExactly(webexRequestStub, {
353
+ method: 'PUT',
354
+ uri: 'fakeMeetingSelfUrl/media',
355
+ body: createExpectedRoapBody('OK', {audioMuted: false, videoMuted: true}),
356
+ });
357
+
358
+ // promise returned by the first call to send OFFER should be resolved by now
359
+ await results[0];
360
+
361
+ // simulate Locus sending http response to OK
362
+ requestsToLocus[1].resolve();
363
+ await results[1];
364
+ });
365
+
366
+ describe('confluence creation', () => {
367
+ it('resolves without sending the request if LocalMute is requested before Roap Offer is sent (confluence state is "not created")', async () => {
368
+ const result = await sendLocalMute({audioMuted: false, videoMuted: true});
369
+
370
+ assert.notCalled(webexRequestStub);
371
+ assert.deepEqual(result, {});
372
+ });
373
+
374
+ it('queues LocalMute if requested after first Roap Offer was sent but before it got http response (confluence state is "creation in progress")', async () => {
375
+ let result;
376
+
377
+ // send roap offer so that confluence state is "creation in progress"
378
+ sendRoapMessage('OFFER');
379
+
380
+ ensureQueueProcessingIsStarted();
381
+
382
+ sendLocalMute({audioMuted: false, videoMuted: true})
383
+ .then((response) => {
384
+ result = response;
385
+ });
386
+
387
+ // only roap offer should have been sent so far
388
+ assert.calledOnceWithExactly(webexRequestStub, {
389
+ method: 'PUT',
390
+ uri: 'fakeMeetingSelfUrl/media',
391
+ body: createExpectedRoapBody('OFFER', {audioMuted: true, videoMuted: true}),
392
+ });
393
+ assert.equal(result, undefined); // sendLocalMute shouldn't resolve yet, as the request should be queued
394
+
395
+ // now let the Offer be completed - so confluence state will be "complete"
396
+ webexRequestStub.resetHistory();
397
+ requestsToLocus[0].resolve({});
398
+ await testUtils.flushPromises();
399
+
400
+ // now the queued up local mute request should have been sent out
401
+ assert.calledOnceWithExactly(webexRequestStub, {
402
+ method: 'PUT',
403
+ uri: 'fakeMeetingSelfUrl/media',
404
+ body: createExpectedLocalMuteBody({audioMuted: false, videoMuted: true}),
405
+ });
406
+
407
+ // check also the result once Locus replies to local mute
408
+ const fakeLocusResponse = { response: 'ok'};
409
+ requestsToLocus[1].resolve(fakeLocusResponse);
410
+ await testUtils.flushPromises();
411
+ assert.deepEqual(result, fakeLocusResponse);
412
+ });
413
+ });
414
+
415
+ it('sends LocalMute request if Offer was already sent and Locus replied (confluence state is "completed")', async () => {
416
+ let result;
417
+
418
+ // send roap offer and ensure it's completed
419
+ sendRoapMessage('OFFER');
420
+ ensureQueueProcessingIsStarted();
421
+ requestsToLocus[0].resolve({});
422
+ await testUtils.flushPromises();
423
+ webexRequestStub.resetHistory();
424
+
425
+ // now send local mute
426
+ sendLocalMute({audioMuted: false, videoMuted: true})
427
+ .then((response) => {
428
+ result = response;
429
+ });
430
+
431
+ ensureQueueProcessingIsStarted();
432
+
433
+ // it should be sent out
434
+ assert.calledOnceWithExactly(webexRequestStub, {
435
+ method: 'PUT',
436
+ uri: 'fakeMeetingSelfUrl/media',
437
+ body: createExpectedLocalMuteBody({audioMuted: false, videoMuted: true}),
438
+ });
439
+ });
440
+
441
+ });
442
+ })