@webex/plugin-meetings 3.0.0-beta.16 → 3.0.0-beta.161

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 (424) hide show
  1. package/README.md +45 -1
  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 +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +359 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +212 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +23 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +52 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +43 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1046 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +78 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +67 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +3 -2
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/config.js +6 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +175 -26
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +300 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +77 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +214 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +92 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +317 -24
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/mediaSharesUtils.js +43 -1
  53. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  54. package/dist/locus-info/parser.js +2 -1
  55. package/dist/locus-info/parser.js.map +1 -1
  56. package/dist/locus-info/selfUtils.js +97 -14
  57. package/dist/locus-info/selfUtils.js.map +1 -1
  58. package/dist/media/index.js +39 -134
  59. package/dist/media/index.js.map +1 -1
  60. package/dist/media/properties.js +19 -97
  61. package/dist/media/properties.js.map +1 -1
  62. package/dist/mediaQualityMetrics/config.js +505 -493
  63. package/dist/mediaQualityMetrics/config.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +79 -1
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +2349 -2178
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +291 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +229 -124
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +191 -167
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/request.type.js.map +1 -1
  75. package/dist/meeting/util.js +444 -443
  76. package/dist/meeting/util.js.map +1 -1
  77. package/dist/meeting-info/meeting-info-v2.js +157 -49
  78. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  79. package/dist/meeting-info/utilv2.js +20 -5
  80. package/dist/meeting-info/utilv2.js.map +1 -1
  81. package/dist/meetings/collection.js +22 -0
  82. package/dist/meetings/collection.js.map +1 -1
  83. package/dist/meetings/index.js +365 -73
  84. package/dist/meetings/index.js.map +1 -1
  85. package/dist/meetings/meetings.types.js +7 -0
  86. package/dist/meetings/meetings.types.js.map +1 -0
  87. package/dist/meetings/request.js +16 -12
  88. package/dist/meetings/request.js.map +1 -1
  89. package/dist/meetings/util.js +88 -1
  90. package/dist/meetings/util.js.map +1 -1
  91. package/dist/member/index.js +43 -0
  92. package/dist/member/index.js.map +1 -1
  93. package/dist/member/types.js +15 -0
  94. package/dist/member/types.js.map +1 -0
  95. package/dist/member/util.js +97 -3
  96. package/dist/member/util.js.map +1 -1
  97. package/dist/members/collection.js +10 -0
  98. package/dist/members/collection.js.map +1 -1
  99. package/dist/members/index.js +94 -11
  100. package/dist/members/index.js.map +1 -1
  101. package/dist/members/request.js +109 -39
  102. package/dist/members/request.js.map +1 -1
  103. package/dist/members/types.js +15 -0
  104. package/dist/members/types.js.map +1 -0
  105. package/dist/members/util.js +316 -233
  106. package/dist/members/util.js.map +1 -1
  107. package/dist/metrics/config.js +50 -14
  108. package/dist/metrics/config.js.map +1 -1
  109. package/dist/metrics/constants.js +3 -5
  110. package/dist/metrics/constants.js.map +1 -1
  111. package/dist/metrics/index.js +48 -29
  112. package/dist/metrics/index.js.map +1 -1
  113. package/dist/multistream/mediaRequestManager.js +265 -36
  114. package/dist/multistream/mediaRequestManager.js.map +1 -1
  115. package/dist/multistream/receiveSlot.js +52 -19
  116. package/dist/multistream/receiveSlot.js.map +1 -1
  117. package/dist/multistream/receiveSlotManager.js +53 -33
  118. package/dist/multistream/receiveSlotManager.js.map +1 -1
  119. package/dist/multistream/remoteMedia.js +44 -18
  120. package/dist/multistream/remoteMedia.js.map +1 -1
  121. package/dist/multistream/remoteMediaGroup.js +60 -3
  122. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  123. package/dist/multistream/remoteMediaManager.js +322 -103
  124. package/dist/multistream/remoteMediaManager.js.map +1 -1
  125. package/dist/networkQualityMonitor/index.js +4 -2
  126. package/dist/networkQualityMonitor/index.js.map +1 -1
  127. package/dist/reachability/index.js +117 -60
  128. package/dist/reachability/index.js.map +1 -1
  129. package/dist/reachability/request.js +12 -5
  130. package/dist/reachability/request.js.map +1 -1
  131. package/dist/reactions/constants.js +13 -0
  132. package/dist/reactions/constants.js.map +1 -0
  133. package/dist/reactions/reactions.js +2 -2
  134. package/dist/reactions/reactions.js.map +1 -1
  135. package/dist/reactions/reactions.type.js +18 -18
  136. package/dist/reactions/reactions.type.js.map +1 -1
  137. package/dist/reconnection-manager/index.js +190 -145
  138. package/dist/reconnection-manager/index.js.map +1 -1
  139. package/dist/recording-controller/enums.js +17 -0
  140. package/dist/recording-controller/enums.js.map +1 -0
  141. package/dist/recording-controller/index.js +343 -0
  142. package/dist/recording-controller/index.js.map +1 -0
  143. package/dist/recording-controller/util.js +63 -0
  144. package/dist/recording-controller/util.js.map +1 -0
  145. package/dist/roap/index.js +21 -29
  146. package/dist/roap/index.js.map +1 -1
  147. package/dist/roap/request.js +127 -92
  148. package/dist/roap/request.js.map +1 -1
  149. package/dist/roap/turnDiscovery.js +135 -53
  150. package/dist/roap/turnDiscovery.js.map +1 -1
  151. package/dist/statsAnalyzer/global.js +1 -93
  152. package/dist/statsAnalyzer/global.js.map +1 -1
  153. package/dist/statsAnalyzer/index.js +329 -314
  154. package/dist/statsAnalyzer/index.js.map +1 -1
  155. package/dist/statsAnalyzer/mqaUtil.js +103 -54
  156. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  157. package/dist/types/annotation/annotation.types.d.ts +43 -0
  158. package/dist/types/annotation/constants.d.ts +31 -0
  159. package/dist/types/annotation/index.d.ts +124 -0
  160. package/dist/types/breakouts/breakout.d.ts +8 -0
  161. package/dist/types/breakouts/collection.d.ts +5 -0
  162. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  163. package/dist/types/breakouts/events.d.ts +2 -0
  164. package/dist/types/breakouts/index.d.ts +5 -0
  165. package/dist/types/breakouts/request.d.ts +22 -0
  166. package/dist/types/breakouts/utils.d.ts +15 -0
  167. package/dist/types/common/browser-detection.d.ts +9 -0
  168. package/dist/types/common/collection.d.ts +48 -0
  169. package/dist/types/common/config.d.ts +2 -0
  170. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  171. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  172. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  173. package/dist/types/common/errors/media.d.ts +15 -0
  174. package/dist/types/common/errors/parameter.d.ts +15 -0
  175. package/dist/types/common/errors/password-error.d.ts +15 -0
  176. package/dist/types/common/errors/permission.d.ts +14 -0
  177. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  178. package/dist/types/common/errors/reconnection.d.ts +15 -0
  179. package/dist/types/common/errors/stats.d.ts +15 -0
  180. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  181. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  182. package/dist/types/common/events/events-scope.d.ts +17 -0
  183. package/dist/types/common/events/events.d.ts +12 -0
  184. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  185. package/dist/types/common/events/util.d.ts +2 -0
  186. package/dist/types/common/logs/logger-config.d.ts +2 -0
  187. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  188. package/dist/types/common/logs/request.d.ts +34 -0
  189. package/dist/types/common/queue.d.ts +32 -0
  190. package/dist/types/config.d.ts +72 -0
  191. package/dist/types/constants.d.ts +987 -0
  192. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  193. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  194. package/dist/types/controls-options-manager/index.d.ts +136 -0
  195. package/dist/types/controls-options-manager/types.d.ts +43 -0
  196. package/dist/types/controls-options-manager/util.d.ts +1 -0
  197. package/dist/types/index.d.ts +7 -0
  198. package/dist/types/interpretation/collection.d.ts +5 -0
  199. package/dist/types/interpretation/index.d.ts +5 -0
  200. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  201. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  202. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  203. package/dist/types/locus-info/fullState.d.ts +2 -0
  204. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  205. package/dist/types/locus-info/index.d.ts +315 -0
  206. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  207. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  208. package/dist/types/locus-info/parser.d.ts +212 -0
  209. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  210. package/dist/types/media/index.d.ts +34 -0
  211. package/dist/types/media/properties.d.ts +86 -0
  212. package/dist/types/media/util.d.ts +2 -0
  213. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  214. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  215. package/dist/types/meeting/index.d.ts +1524 -0
  216. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  217. package/dist/types/meeting/muteState.d.ts +184 -0
  218. package/dist/types/meeting/request.d.ts +270 -0
  219. package/dist/types/meeting/request.type.d.ts +11 -0
  220. package/dist/types/meeting/state.d.ts +9 -0
  221. package/dist/types/meeting/util.d.ts +75 -0
  222. package/dist/types/meeting-info/collection.d.ts +20 -0
  223. package/dist/types/meeting-info/index.d.ts +57 -0
  224. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  225. package/dist/types/meeting-info/request.d.ts +22 -0
  226. package/dist/types/meeting-info/util.d.ts +2 -0
  227. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  228. package/dist/types/meetings/collection.d.ts +31 -0
  229. package/dist/types/meetings/index.d.ts +364 -0
  230. package/dist/types/meetings/meetings.types.d.ts +4 -0
  231. package/dist/types/meetings/request.d.ts +27 -0
  232. package/dist/types/meetings/util.d.ts +18 -0
  233. package/dist/types/member/index.d.ts +158 -0
  234. package/dist/types/member/types.d.ts +21 -0
  235. package/dist/types/member/util.d.ts +2 -0
  236. package/dist/types/members/collection.d.ts +29 -0
  237. package/dist/types/members/index.d.ts +353 -0
  238. package/dist/types/members/request.d.ts +114 -0
  239. package/dist/types/members/types.d.ts +24 -0
  240. package/dist/types/members/util.d.ts +210 -0
  241. package/dist/types/metrics/config.d.ts +195 -0
  242. package/dist/types/metrics/constants.d.ts +55 -0
  243. package/dist/types/metrics/index.d.ts +169 -0
  244. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  245. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  246. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  247. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  248. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  249. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  250. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  251. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  252. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  253. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  254. package/dist/types/reachability/index.d.ts +152 -0
  255. package/dist/types/reachability/request.d.ts +37 -0
  256. package/dist/types/reactions/constants.d.ts +3 -0
  257. package/dist/types/reactions/reactions.d.ts +4 -0
  258. package/dist/types/reactions/reactions.type.d.ts +52 -0
  259. package/dist/types/reconnection-manager/index.d.ts +126 -0
  260. package/dist/types/recording-controller/enums.d.ts +7 -0
  261. package/dist/types/recording-controller/index.d.ts +193 -0
  262. package/dist/types/recording-controller/util.d.ts +13 -0
  263. package/dist/types/roap/index.d.ts +77 -0
  264. package/dist/types/roap/request.d.ts +36 -0
  265. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  266. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  267. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  268. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  269. package/dist/types/transcription/index.d.ts +64 -0
  270. package/package.json +28 -21
  271. package/src/annotation/annotation.types.ts +52 -0
  272. package/src/annotation/constants.ts +36 -0
  273. package/src/annotation/index.ts +343 -0
  274. package/src/breakouts/README.md +220 -0
  275. package/src/breakouts/breakout.ts +180 -0
  276. package/src/breakouts/collection.ts +19 -0
  277. package/src/breakouts/edit-lock-error.ts +25 -0
  278. package/src/breakouts/events.ts +37 -0
  279. package/src/breakouts/index.ts +921 -0
  280. package/src/breakouts/request.ts +55 -0
  281. package/src/breakouts/utils.ts +57 -0
  282. package/src/common/errors/webex-errors.ts +6 -2
  283. package/src/common/logs/logger-proxy.ts +1 -1
  284. package/src/config.ts +5 -7
  285. package/src/constants.ts +165 -20
  286. package/src/controls-options-manager/constants.ts +5 -0
  287. package/src/controls-options-manager/enums.ts +18 -0
  288. package/src/controls-options-manager/index.ts +278 -0
  289. package/src/controls-options-manager/types.ts +59 -0
  290. package/src/controls-options-manager/util.ts +286 -0
  291. package/src/index.ts +34 -0
  292. package/src/interpretation/README.md +51 -0
  293. package/src/interpretation/collection.ts +19 -0
  294. package/src/interpretation/index.ts +182 -0
  295. package/src/interpretation/siLanguage.ts +18 -0
  296. package/src/locus-info/controlsUtils.ts +110 -0
  297. package/src/locus-info/index.ts +339 -21
  298. package/src/locus-info/mediaSharesUtils.ts +48 -0
  299. package/src/locus-info/parser.ts +2 -1
  300. package/src/locus-info/selfUtils.ts +86 -2
  301. package/src/media/index.ts +70 -142
  302. package/src/media/properties.ts +41 -104
  303. package/src/mediaQualityMetrics/config.ts +379 -377
  304. package/src/meeting/in-meeting-actions.ts +156 -0
  305. package/src/meeting/index.ts +1779 -1741
  306. package/src/meeting/locusMediaRequest.ts +309 -0
  307. package/src/meeting/muteState.ts +228 -132
  308. package/src/meeting/request.ts +100 -91
  309. package/src/meeting/request.type.ts +2 -0
  310. package/src/meeting/util.ts +422 -421
  311. package/src/meeting-info/meeting-info-v2.ts +134 -13
  312. package/src/meeting-info/utilv2.ts +13 -3
  313. package/src/meetings/collection.ts +20 -0
  314. package/src/meetings/index.ts +385 -83
  315. package/src/meetings/meetings.types.ts +12 -0
  316. package/src/meetings/request.ts +3 -1
  317. package/src/meetings/util.ts +103 -4
  318. package/src/member/index.ts +42 -0
  319. package/src/member/types.ts +24 -0
  320. package/src/member/util.ts +95 -1
  321. package/src/members/collection.ts +8 -0
  322. package/src/members/index.ts +108 -6
  323. package/src/members/request.ts +98 -17
  324. package/src/members/types.ts +28 -0
  325. package/src/members/util.ts +319 -240
  326. package/src/metrics/config.ts +49 -10
  327. package/src/metrics/constants.ts +2 -4
  328. package/src/metrics/index.ts +43 -27
  329. package/src/multistream/mediaRequestManager.ts +337 -63
  330. package/src/multistream/receiveSlot.ts +68 -26
  331. package/src/multistream/receiveSlotManager.ts +61 -38
  332. package/src/multistream/remoteMedia.ts +29 -3
  333. package/src/multistream/remoteMediaGroup.ts +61 -2
  334. package/src/multistream/remoteMediaManager.ts +260 -66
  335. package/src/networkQualityMonitor/index.ts +6 -6
  336. package/src/reachability/index.ts +75 -25
  337. package/src/reachability/request.ts +10 -5
  338. package/src/reactions/constants.ts +4 -0
  339. package/src/reactions/reactions.ts +4 -4
  340. package/src/reactions/reactions.type.ts +28 -3
  341. package/src/reconnection-manager/index.ts +53 -32
  342. package/src/recording-controller/enums.ts +8 -0
  343. package/src/recording-controller/index.ts +315 -0
  344. package/src/recording-controller/util.ts +58 -0
  345. package/src/roap/index.ts +21 -30
  346. package/src/roap/request.ts +51 -52
  347. package/src/roap/turnDiscovery.ts +51 -27
  348. package/src/statsAnalyzer/global.ts +1 -94
  349. package/src/statsAnalyzer/index.ts +380 -390
  350. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  351. package/test/integration/spec/converged-space-meetings.js +233 -0
  352. package/test/integration/spec/journey.js +331 -254
  353. package/test/integration/spec/space-meeting.js +77 -4
  354. package/test/unit/spec/annotation/index.ts +436 -0
  355. package/test/unit/spec/breakouts/breakout.ts +233 -0
  356. package/test/unit/spec/breakouts/collection.ts +15 -0
  357. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  358. package/test/unit/spec/breakouts/events.ts +77 -0
  359. package/test/unit/spec/breakouts/index.ts +1790 -0
  360. package/test/unit/spec/breakouts/request.ts +104 -0
  361. package/test/unit/spec/breakouts/utils.js +72 -0
  362. package/test/unit/spec/controls-options-manager/index.js +287 -0
  363. package/test/unit/spec/controls-options-manager/util.js +518 -0
  364. package/test/unit/spec/fixture/locus.js +1 -0
  365. package/test/unit/spec/interpretation/collection.ts +15 -0
  366. package/test/unit/spec/interpretation/index.ts +329 -0
  367. package/test/unit/spec/interpretation/siLanguage.ts +26 -0
  368. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  369. package/test/unit/spec/locus-info/index.js +680 -4
  370. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  371. package/test/unit/spec/locus-info/selfConstant.js +48 -0
  372. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  373. package/test/unit/spec/media/index.ts +118 -22
  374. package/test/unit/spec/media/properties.ts +9 -9
  375. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -0
  376. package/test/unit/spec/meeting/index.js +2695 -1513
  377. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  378. package/test/unit/spec/meeting/muteState.js +370 -208
  379. package/test/unit/spec/meeting/request.js +354 -42
  380. package/test/unit/spec/meeting/utils.js +270 -156
  381. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  382. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  383. package/test/unit/spec/meetings/collection.js +14 -0
  384. package/test/unit/spec/meetings/index.js +866 -120
  385. package/test/unit/spec/meetings/utils.js +206 -2
  386. package/test/unit/spec/member/index.js +31 -0
  387. package/test/unit/spec/member/util.js +408 -32
  388. package/test/unit/spec/members/index.js +320 -1
  389. package/test/unit/spec/members/request.js +206 -27
  390. package/test/unit/spec/members/utils.js +184 -0
  391. package/test/unit/spec/metrics/index.js +98 -0
  392. package/test/unit/spec/multistream/mediaRequestManager.ts +1012 -109
  393. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  394. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  395. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  396. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  397. package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
  398. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  399. package/test/unit/spec/reachability/index.ts +176 -25
  400. package/test/unit/spec/reachability/request.js +66 -0
  401. package/test/unit/spec/reconnection-manager/index.js +46 -13
  402. package/test/unit/spec/recording-controller/index.js +231 -0
  403. package/test/unit/spec/recording-controller/util.js +102 -0
  404. package/test/unit/spec/roap/index.ts +21 -51
  405. package/test/unit/spec/roap/request.ts +187 -0
  406. package/test/unit/spec/roap/turnDiscovery.ts +73 -34
  407. package/test/unit/spec/stats-analyzer/index.js +94 -43
  408. package/test/utils/constants.js +9 -0
  409. package/test/utils/integrationTestUtils.js +46 -0
  410. package/test/utils/testUtils.js +0 -45
  411. package/test/utils/webex-config.js +4 -0
  412. package/test/utils/webex-test-users.js +7 -3
  413. package/tsconfig.json +6 -0
  414. package/dist/media/internal-media-core-wrapper.js +0 -18
  415. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  416. package/dist/meeting/effectsState.js +0 -262
  417. package/dist/meeting/effectsState.js.map +0 -1
  418. package/dist/multistream/multistreamMedia.js +0 -106
  419. package/dist/multistream/multistreamMedia.js.map +0 -1
  420. package/src/index.js +0 -15
  421. package/src/media/internal-media-core-wrapper.ts +0 -9
  422. package/src/meeting/effectsState.ts +0 -211
  423. package/src/multistream/multistreamMedia.ts +0 -93
  424. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -0,0 +1,22 @@
1
+ import MediaSharesUtils from '@webex/plugin-meetings/src/locus-info/mediaSharesUtils';
2
+ import {assert} from "chai";
3
+ import Sinon from "sinon";
4
+
5
+ describe('getShareInstanceId', () => {
6
+ it('getShareInstanceId return correct shareInstanceId value', () => {
7
+ const stub = Sinon.stub(MediaSharesUtils, 'extractContent').returns({ floor:{shareInstanceId:'shareInstanceId'}});
8
+ const shareInstanceId = MediaSharesUtils.getShareInstanceId();
9
+ assert.equal(shareInstanceId,'shareInstanceId');
10
+ stub.restore();
11
+ });
12
+ });
13
+
14
+ describe('getContentUrl', () => {
15
+ it('getContentUrl return correct url value', () => {
16
+ const stub = Sinon.stub(MediaSharesUtils, 'extractContent').returns({url:'url'});
17
+ const url = MediaSharesUtils.getContentUrl();
18
+ assert.equal(url,'url');
19
+ stub.restore();
20
+ });
21
+ });
22
+
@@ -66,6 +66,15 @@ export const self = {
66
66
  },
67
67
  ],
68
68
  mediaSessionsExternal: false,
69
+ replaces: [
70
+ {
71
+ breakoutMoveId: 'e5caeb2c-ffcc-4e06-a08a-1122e7710398',
72
+ lastActive: '2023-05-04T07:14:32.068Z',
73
+ locusUrl: 'https://locus-alpha-apdx.prod.meetapi.webex.com/locus/api/v1/loci/495061ca-7b3c-3b77-85ff-4e1bd58600d1',
74
+ replacedAt: '2023-05-04T07:16:04.905Z',
75
+ sessionId: 'be3147d4-c318-86d8-7611-8d24beaaca8d',
76
+ }
77
+ ],
69
78
  state: 'JOINED',
70
79
  intent: {type: ''},
71
80
  intents: [null],
@@ -109,6 +118,45 @@ export const self = {
109
118
  requestedToUnmute: false,
110
119
  meta: {},
111
120
  },
121
+ video: {
122
+ muted: false,
123
+ meta: {},
124
+ },
125
+ breakout: {
126
+ sessions: {
127
+ active: [
128
+ {
129
+ name: 'Breakout session 2',
130
+ groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
131
+ sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
132
+ sessionType: 'BREAKOUT',
133
+ },
134
+ ],
135
+ allowed: [
136
+ {
137
+ name: 'Breakout session 2',
138
+ groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
139
+ sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
140
+ sessionType: 'BREAKOUT',
141
+ },
142
+ ],
143
+ },
144
+ meta: {
145
+ modifiedBy: '347ef89e-e1be-40a3-849c-731bdd935e62',
146
+ lastModified: '2023-01-10T10:10:06.813Z',
147
+ readOnly: true,
148
+ },
149
+ },
150
+ interpretation: {
151
+ originalLanguage: 'en',
152
+ sourceLanguage: 'en',
153
+ targetLanguage: 'cn',
154
+ order: 0,
155
+ isActive: true,
156
+ meta: {
157
+ lastModified: '2023-07-11T01:57:31.040Z',
158
+ }
159
+ },
112
160
  localRecord: {
113
161
  recording: false,
114
162
  },
@@ -33,6 +33,24 @@ describe('plugin-meetings', () => {
33
33
  assert.calledWith(getRolesSpy, self);
34
34
 
35
35
  assert.deepEqual(parsedSelf.roles, ['PRESENTER']);
36
+ assert.deepEqual(parsedSelf.breakoutSessions, {
37
+ active: [
38
+ {
39
+ name: 'Breakout session 2',
40
+ groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
41
+ sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
42
+ sessionType: 'BREAKOUT',
43
+ },
44
+ ],
45
+ allowed: [
46
+ {
47
+ name: 'Breakout session 2',
48
+ groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
49
+ sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
50
+ sessionType: 'BREAKOUT',
51
+ },
52
+ ],
53
+ });
36
54
  });
37
55
 
38
56
  it('calls getLayout and returns the resulting layout', () => {
@@ -58,6 +76,101 @@ describe('plugin-meetings', () => {
58
76
  });
59
77
  });
60
78
 
79
+ describe('getBreakoutSessions', () => {
80
+ it('should return breakout sessions', () => {
81
+ assert.deepEqual(
82
+ SelfUtils.getBreakoutSessions({controls: {breakout: {sessions: 'SESSIONS'}}}),
83
+ 'SESSIONS'
84
+ );
85
+ });
86
+ });
87
+
88
+ describe('breakoutsChanged', () => {
89
+ it('should return true if breakouts have changed', () => {
90
+ const current = {
91
+ breakoutSessions: {
92
+ allowed: [
93
+ {
94
+ name: 'Breakout session 2',
95
+ groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
96
+ sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
97
+ sessionType: 'BREAKOUT',
98
+ },
99
+ ],
100
+ },
101
+ breakout: {},
102
+ };
103
+ const previous = {
104
+ breakoutSessions: {
105
+ active: [
106
+ {
107
+ name: 'Breakout session 2',
108
+ groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
109
+ sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
110
+ sessionType: 'BREAKOUT',
111
+ },
112
+ ],
113
+ },
114
+ breakout: {},
115
+ };
116
+
117
+ assert.isTrue(SelfUtils.breakoutsChanged(previous, current));
118
+ });
119
+
120
+ it('should return false if breakouts have not changed', () => {
121
+ const current = {
122
+ breakoutSessions: {
123
+ active: [
124
+ {
125
+ name: 'Breakout session 2',
126
+ groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
127
+ sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
128
+ sessionType: 'BREAKOUT',
129
+ },
130
+ ],
131
+ },
132
+ breakout: {},
133
+ };
134
+ const previous = {
135
+ breakoutSessions: {
136
+ active: [
137
+ {
138
+ name: 'Breakout session 2',
139
+ groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
140
+ sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
141
+ sessionType: 'BREAKOUT',
142
+ },
143
+ ],
144
+ },
145
+ breakout: {},
146
+ };
147
+
148
+ assert.isFalse(SelfUtils.breakoutsChanged(previous, current));
149
+ });
150
+
151
+ it('should return false if no breakouts in current', () => {
152
+ const current = {
153
+ breakoutSessions: {
154
+ },
155
+ };
156
+ const previous = {
157
+ breakoutSessions: {
158
+ active: [
159
+ {
160
+ name: 'Breakout session 2',
161
+ groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
162
+ sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
163
+ sessionType: 'BREAKOUT',
164
+ },
165
+ ],
166
+ },
167
+ breakout: {},
168
+ };
169
+
170
+ assert.isFalse(SelfUtils.breakoutsChanged(previous, current));
171
+ });
172
+ });
173
+
61
174
  describe('canNotViewTheParticipantList', () => {
62
175
  it('should return the correct value', () => {
63
176
  assert.equal(
@@ -138,6 +251,55 @@ describe('plugin-meetings', () => {
138
251
  assert.equal(updates.canNotViewTheParticipantListChanged, false);
139
252
  });
140
253
  });
254
+
255
+ describe('localAudioUnmuteRequestedByServer', () => {
256
+ it('should return localAudioUnmuteRequestedByServer = false when requestedToUnmute = false', () => {
257
+ const clonedSelf = cloneDeep(self);
258
+
259
+ const {updates} = SelfUtils.getSelves(self, clonedSelf);
260
+
261
+ assert.equal(updates.localAudioUnmuteRequestedByServer, false);
262
+ });
263
+
264
+ it('should return localAudioUnmuteRequestedByServer = true when first request is made with requestedToUnmute = true', () => {
265
+ const clonedSelf = cloneDeep(self);
266
+
267
+ //request to unmute with timestamp
268
+ clonedSelf.controls.audio.requestedToUnmute = true;
269
+ clonedSelf.controls.audio.lastModifiedRequestedToUnmute = '2023-06-16T18:25:04.369Z';
270
+
271
+ const {updates} = SelfUtils.getSelves(self, clonedSelf);
272
+
273
+ assert.equal(updates.localAudioUnmuteRequestedByServer, true);
274
+ });
275
+
276
+ it('should return localAudioUnmuteRequestedByServer = true when requestedToUnmute = true and new requests lastModifiedRequestedToUnmute timestamp is greater than old one', () => {
277
+ self.controls.audio.requestedToUnmute = true;
278
+ self.controls.audio.lastModifiedRequestedToUnmute = '2023-06-16T18:25:04.369Z';
279
+ const clonedSelf = cloneDeep(self);
280
+
281
+ //request to unmute with timestamp
282
+ clonedSelf.controls.audio.requestedToUnmute = true;
283
+ clonedSelf.controls.audio.lastModifiedRequestedToUnmute = '2023-06-16T19:25:04.369Z';
284
+
285
+ const {updates} = SelfUtils.getSelves(self, clonedSelf);
286
+
287
+ assert.equal(updates.localAudioUnmuteRequestedByServer, true);
288
+ });
289
+
290
+ it('should return localAudioUnmuteRequestedByServer = false when requestedToUnmute but lastModifiedRequestedToUnmute timestamps are same', () => {
291
+ self.controls.audio.requestedToUnmute = true;
292
+ self.controls.audio.lastModifiedRequestedToUnmute = '2023-06-16T18:25:04.369Z';
293
+ const clonedSelf = cloneDeep(self);
294
+
295
+ clonedSelf.controls.audio.requestedToUnmute = true;
296
+ clonedSelf.controls.audio.lastModifiedRequestedToUnmute = '2023-06-16T18:25:04.369Z'
297
+
298
+ const {updates} = SelfUtils.getSelves(self, clonedSelf);
299
+
300
+ assert.equal(updates.localAudioUnmuteRequestedByServer, false);
301
+ });
302
+ });
141
303
  });
142
304
 
143
305
  describe('isSharingBlocked', () => {
@@ -182,4 +344,117 @@ describe('plugin-meetings', () => {
182
344
  assert.deepEqual(SelfUtils.isJoined(customSelf), false);
183
345
  });
184
346
  });
347
+
348
+ describe('videoMutedByOthersChanged', () => {
349
+ it('returns true if changed', () => {
350
+ assert.equal(
351
+ SelfUtils.videoMutedByOthersChanged({remoteVideoMuted: true}, {remoteVideoMuted: false}),
352
+ true
353
+ );
354
+ });
355
+
356
+ it('returns true if changed from undefined', () => {
357
+ assert.equal(SelfUtils.videoMutedByOthersChanged({}, {remoteVideoMuted: false}), true);
358
+ });
359
+
360
+ it('returns false if not changed', () => {
361
+ assert.equal(
362
+ SelfUtils.videoMutedByOthersChanged({remoteVideoMuted: false}, {remoteVideoMuted: false}),
363
+ false
364
+ );
365
+ });
366
+ });
367
+
368
+ describe('getReplacedBreakoutMoveId', () => {
369
+ const deviceId = 'https://wdm-a.wbx2.com/wdm/api/v1/devices/20eabde3-4254-48da-9a24';
370
+ const breakoutMoveId = 'e5caeb2c-ffcc-4e06-a08a-1122e7710398';
371
+ const clonedSelf = cloneDeep(self);
372
+
373
+ it('get breakoutMoveId works', () => {
374
+
375
+ assert.deepEqual(SelfUtils.getReplacedBreakoutMoveId(self, deviceId), breakoutMoveId);
376
+
377
+ });
378
+
379
+ it('replaces is empty', () => {
380
+
381
+ clonedSelf.devices[0].replaces = undefined;
382
+ assert.deepEqual(SelfUtils.getReplacedBreakoutMoveId(clonedSelf, deviceId), null);
383
+
384
+ });
385
+
386
+ it('no self or self.devices is not array', () => {
387
+
388
+ assert.deepEqual(SelfUtils.getReplacedBreakoutMoveId(undefined, deviceId), null);
389
+
390
+ clonedSelf.devices = {
391
+ url: 'https://wdm-a.wbx2.com/wdm/api/v1/devices/20eabde3-4254-48da-9a24',
392
+ deviceType: 'WEB',
393
+ mediaSessionsExternal: false,
394
+ replaces: [
395
+ {
396
+ breakoutMoveId: 'e5caeb2c-ffcc-4e06-a08a-1122e7710398',
397
+ lastActive: '2023-05-04T07:14:32.068Z',
398
+ locusUrl: 'https://locus-alpha-apdx.prod.meetapi.webex.com/locus/api/v1/loci/495061ca-7b3c-3b77-85ff-4e1bd58600d1',
399
+ replacedAt: '2023-05-04T07:16:04.905Z',
400
+ sessionId: 'be3147d4-c318-86d8-7611-8d24beaaca8d',
401
+ }
402
+ ],
403
+ state: 'JOINED',
404
+ };
405
+ assert.deepEqual(SelfUtils.getReplacedBreakoutMoveId(clonedSelf, deviceId), null);
406
+ });
407
+ });
408
+
409
+ describe('isRolesChanged', () => {
410
+ it('should return false if new self is null', () => {
411
+ const parsedSelf = SelfUtils.parse(self);
412
+
413
+ assert.deepEqual(SelfUtils.isRolesChanged(parsedSelf, null), false);
414
+ });
415
+
416
+ it('should return true if self roles has changed', () => {
417
+ const parsedSelf = SelfUtils.parse(self);
418
+ const clonedSelf = cloneDeep(parsedSelf);
419
+
420
+ clonedSelf.roles = ['COHOST'];
421
+
422
+ assert.deepEqual(SelfUtils.isRolesChanged(parsedSelf, clonedSelf), true);
423
+ });
424
+
425
+ it('should return false if self roles has not changed', () => {
426
+ const parsedSelf = SelfUtils.parse(self);
427
+ const clonedSelf = cloneDeep(parsedSelf);
428
+
429
+ clonedSelf.roles = ['PRESENTER'];
430
+
431
+ assert.deepEqual(SelfUtils.isRolesChanged(parsedSelf, clonedSelf), false);
432
+ });
433
+ });
434
+
435
+ describe('interpretationChanged', () => {
436
+ it('should return false if new self is null', () => {
437
+ const parsedSelf = SelfUtils.parse(self);
438
+
439
+ assert.deepEqual(SelfUtils.interpretationChanged(parsedSelf, null), false);
440
+ });
441
+
442
+ it('should return true if interpretation info has changed', () => {
443
+ const parsedSelf = SelfUtils.parse(self);
444
+ const clonedSelf = cloneDeep(parsedSelf);
445
+
446
+ clonedSelf.interpretation.sourceLanguage = 'ja';
447
+
448
+ assert.deepEqual(SelfUtils.interpretationChanged(parsedSelf, clonedSelf), true);
449
+ });
450
+
451
+ it('should return false if interpretation info has not changed', () => {
452
+ const parsedSelf = SelfUtils.parse(self);
453
+ const clonedSelf = cloneDeep(parsedSelf);
454
+
455
+ clonedSelf.interpretation.sourceLanguage = 'en';
456
+
457
+ assert.deepEqual(SelfUtils.interpretationChanged(parsedSelf, clonedSelf), false);
458
+ });
459
+ });
185
460
  });
@@ -1,8 +1,9 @@
1
- import * as internalMediaModule from '@webex/plugin-meetings/src/media/internal-media-core-wrapper';
1
+ import * as internalMediaModule from '@webex/internal-media-core';
2
2
  import Media from '@webex/plugin-meetings/src/media/index';
3
3
  import {assert} from '@webex/test-helper-chai';
4
4
  import sinon from 'sinon';
5
5
  import StaticConfig from '@webex/plugin-meetings/src/common/config';
6
+ import { forEach } from 'lodash';
6
7
 
7
8
  describe('createMediaConnection', () => {
8
9
  const fakeRoapMediaConnection = {
@@ -10,9 +11,11 @@ describe('createMediaConnection', () => {
10
11
  };
11
12
  const fakeAudioTrack = {
12
13
  id: 'audio track',
14
+ underlyingTrack: 'underlying audio track',
13
15
  };
14
16
  const fakeVideoTrack = {
15
17
  id: 'video track',
18
+ underlyingTrack: 'underlying video track',
16
19
  };
17
20
 
18
21
  afterEach(() => {
@@ -32,10 +35,10 @@ describe('createMediaConnection', () => {
32
35
  Media.createMediaConnection(false, 'some debug id', {
33
36
  mediaProperties: {
34
37
  mediaDirection: {
35
- sendAudio: true,
38
+ sendAudio: false,
36
39
  sendVideo: true,
37
40
  sendShare: false,
38
- receiveAudio: true,
41
+ receiveAudio: false,
39
42
  receiveVideo: true,
40
43
  receiveShare: true,
41
44
  },
@@ -79,17 +82,17 @@ describe('createMediaConnection', () => {
79
82
  },
80
83
  },
81
84
  {
82
- send: {
83
- audio: fakeAudioTrack,
84
- video: fakeVideoTrack,
85
- screenShareVideo: null,
85
+ localTracks: {
86
+ audio: fakeAudioTrack.underlyingTrack,
87
+ video: fakeVideoTrack.underlyingTrack,
88
+ screenShareVideo: undefined,
86
89
  },
87
- receive: {
88
- audio: true,
89
- video: true,
90
- screenShareVideo: true,
91
- remoteQualityLevel: 'HIGH',
90
+ direction: {
91
+ audio: 'inactive',
92
+ video: 'sendrecv',
93
+ screenShareVideo: 'recvonly',
92
94
  },
95
+ remoteQualityLevel: 'HIGH',
93
96
  },
94
97
  'some debug id'
95
98
  );
@@ -101,11 +104,22 @@ describe('createMediaConnection', () => {
101
104
  .returns(fakeRoapMediaConnection);
102
105
 
103
106
  Media.createMediaConnection(true, 'some debug id', {
107
+ mediaProperties: {
108
+ mediaDirection: {
109
+ sendAudio: true,
110
+ sendVideo: true,
111
+ sendShare: false,
112
+ receiveAudio: true,
113
+ receiveVideo: true,
114
+ receiveShare: true,
115
+ }
116
+ },
104
117
  turnServerInfo: {
105
118
  url: 'turn server url',
106
119
  username: 'turn username',
107
120
  password: 'turn password',
108
121
  },
122
+ bundlePolicy: 'max-bundle',
109
123
  });
110
124
  assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
111
125
  assert.calledWith(
@@ -118,25 +132,107 @@ describe('createMediaConnection', () => {
118
132
  credential: 'turn password',
119
133
  },
120
134
  ],
135
+ enableMainAudio: true,
136
+ enableMainVideo: true,
137
+ bundlePolicy: 'max-bundle',
121
138
  },
122
139
  'some debug id'
123
140
  );
124
141
  });
125
142
 
143
+ forEach([
144
+ {sendAudio: true, receiveAudio: true, sendVideo: true, receiveVideo: true, enableMainAudio: true, enableMainVideo: true,},
145
+ {sendAudio: true, receiveAudio: false, sendVideo: true, receiveVideo: false, enableMainAudio: true, enableMainVideo: true,},
146
+ {sendAudio: false, receiveAudio: true, sendVideo: false, receiveVideo: true, enableMainAudio: true, enableMainVideo: true,},
147
+ {sendAudio: false, receiveAudio: false, sendVideo: false, receiveVideo: false, enableMainAudio: false, enableMainVideo: false,},
148
+ ], ({sendAudio, sendVideo, receiveAudio, receiveVideo, enableMainAudio, enableMainVideo}) => {
149
+ it(`sets enableMainVideo to ${enableMainVideo} and enableMainAudio to ${enableMainAudio} when sendAudio: ${sendAudio} sendVideo: ${sendVideo} receiveAudio: ${receiveAudio} receiveVideo: ${receiveVideo}`, () => {
150
+ const multistreamRoapMediaConnectionConstructorStub = sinon
151
+ .stub(internalMediaModule, 'MultistreamRoapMediaConnection')
152
+ .returns(fakeRoapMediaConnection);
153
+
154
+ Media.createMediaConnection(true, 'some debug id', {
155
+ mediaProperties: {
156
+ mediaDirection: {
157
+ sendAudio,
158
+ sendVideo,
159
+ sendShare: false,
160
+ receiveAudio,
161
+ receiveVideo,
162
+ receiveShare: true,
163
+ },
164
+ },
165
+ });
166
+ assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
167
+ assert.calledWith(
168
+ multistreamRoapMediaConnectionConstructorStub,
169
+ {
170
+ iceServers: [],
171
+ enableMainAudio,
172
+ enableMainVideo,
173
+ },
174
+ 'some debug id'
175
+ );
176
+ });
177
+ });
178
+
126
179
  it('passes empty ICE servers array to MultistreamRoapMediaConnection if turnServerInfo is undefined (multistream enabled)', () => {
127
180
  const multistreamRoapMediaConnectionConstructorStub = sinon
128
181
  .stub(internalMediaModule, 'MultistreamRoapMediaConnection')
129
182
  .returns(fakeRoapMediaConnection);
130
183
 
131
- Media.createMediaConnection(true, 'debug string', {});
184
+ Media.createMediaConnection(true, 'debug string', {
185
+ mediaProperties: {
186
+ mediaDirection: {
187
+ sendAudio: true,
188
+ sendVideo: true,
189
+ sendShare: false,
190
+ receiveAudio: true,
191
+ receiveVideo: true,
192
+ receiveShare: true,
193
+ },
194
+ },
195
+ });
132
196
  assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
133
197
  assert.calledWith(
134
198
  multistreamRoapMediaConnectionConstructorStub,
135
199
  {
136
200
  iceServers: [],
201
+ enableMainAudio: true,
202
+ enableMainVideo: true,
137
203
  },
138
204
  'debug string'
139
205
  );
206
+
207
+ it('does not pass bundlePolicy to MultistreamRoapMediaConnection if bundlePolicy is undefined', () => {
208
+ const multistreamRoapMediaConnectionConstructorStub = sinon
209
+ .stub(internalMediaModule, 'MultistreamRoapMediaConnection')
210
+ .returns(fakeRoapMediaConnection);
211
+
212
+ Media.createMediaConnection(true, 'debug string', {
213
+ mediaProperties: {
214
+ mediaDirection: {
215
+ sendAudio: true,
216
+ sendVideo: true,
217
+ sendShare: false,
218
+ receiveAudio: true,
219
+ receiveVideo: true,
220
+ receiveShare: true,
221
+ },
222
+ },
223
+ bundlePolicy: undefined
224
+ });
225
+ assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
226
+ assert.calledWith(
227
+ multistreamRoapMediaConnectionConstructorStub,
228
+ {
229
+ iceServers: [],
230
+ enableMainAudio: true,
231
+ enableMainVideo: true,
232
+ },
233
+ 'debug string'
234
+ );
235
+ });
140
236
  });
141
237
 
142
238
  it('passes empty ICE servers array to RoapMediaConnection if turnServerInfo is undefined (multistream disabled)', () => {
@@ -189,17 +285,17 @@ describe('createMediaConnection', () => {
189
285
  },
190
286
  },
191
287
  {
192
- send: {
193
- audio: fakeAudioTrack,
194
- video: null,
195
- screenShareVideo: fakeVideoTrack,
288
+ localTracks: {
289
+ audio: fakeAudioTrack.underlyingTrack,
290
+ video: undefined,
291
+ screenShareVideo: fakeVideoTrack.underlyingTrack,
196
292
  },
197
- receive: {
198
- audio: true,
199
- video: true,
200
- screenShareVideo: true,
201
- remoteQualityLevel: 'HIGH',
293
+ direction: {
294
+ audio: 'sendrecv',
295
+ video: 'sendrecv',
296
+ screenShareVideo: 'sendrecv',
202
297
  },
298
+ remoteQualityLevel: 'HIGH',
203
299
  },
204
300
  'some debug id'
205
301
  );
@@ -1,6 +1,6 @@
1
1
  import {assert} from '@webex/test-helper-chai';
2
2
  import sinon from 'sinon';
3
- import {MediaConnection as MC} from '@webex/internal-media-core';
3
+ import {ConnectionState, Event} from '@webex/internal-media-core';
4
4
  import MediaProperties from '@webex/plugin-meetings/src/media/properties';
5
5
  import MediaUtil from '@webex/plugin-meetings/src/media/util';
6
6
  import testUtils from '../../../utils/testUtils';
@@ -19,7 +19,7 @@ describe('MediaProperties', () => {
19
19
  getStats: sinon.stub().resolves([]),
20
20
  on: sinon.stub(),
21
21
  off: sinon.stub(),
22
- getConnectionState: sinon.stub().returns(MC.ConnectionState.Connected),
22
+ getConnectionState: sinon.stub().returns(ConnectionState.Connected),
23
23
  };
24
24
 
25
25
  mediaProperties = new MediaProperties();
@@ -35,7 +35,7 @@ describe('MediaProperties', () => {
35
35
  await mediaProperties.waitForMediaConnectionConnected();
36
36
  });
37
37
  it('rejects after timeout if ice state does not reach connected/completed', async () => {
38
- mockMC.getConnectionState.returns(MC.ConnectionState.Connecting);
38
+ mockMC.getConnectionState.returns(ConnectionState.Connecting);
39
39
 
40
40
  let promiseResolved = false;
41
41
  let promiseRejected = false;
@@ -60,15 +60,15 @@ describe('MediaProperties', () => {
60
60
 
61
61
  // check that listener was registered and removed
62
62
  assert.calledOnce(mockMC.on);
63
- assert.equal(mockMC.on.getCall(0).args[0], MC.Event.CONNECTION_STATE_CHANGED);
63
+ assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
64
64
  const listener = mockMC.on.getCall(0).args[1];
65
65
 
66
66
  assert.calledOnce(mockMC.off);
67
- assert.calledWith(mockMC.off, MC.Event.CONNECTION_STATE_CHANGED, listener);
67
+ assert.calledWith(mockMC.off, Event.CONNECTION_STATE_CHANGED, listener);
68
68
  });
69
69
 
70
70
  it(`resolves when media connection reaches "connected" state`, async () => {
71
- mockMC.getConnectionState.returns(MC.ConnectionState.Connecting);
71
+ mockMC.getConnectionState.returns(ConnectionState.Connecting);
72
72
 
73
73
  const clearTimeoutSpy = sinon.spy(clock, 'clearTimeout');
74
74
 
@@ -89,11 +89,11 @@ describe('MediaProperties', () => {
89
89
 
90
90
  // check the right listener was registered
91
91
  assert.calledOnce(mockMC.on);
92
- assert.equal(mockMC.on.getCall(0).args[0], MC.Event.CONNECTION_STATE_CHANGED);
92
+ assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
93
93
  const listener = mockMC.on.getCall(0).args[1];
94
94
 
95
95
  // call the listener and pretend we are now connected
96
- mockMC.getConnectionState.returns(MC.ConnectionState.Connected);
96
+ mockMC.getConnectionState.returns(ConnectionState.Connected);
97
97
  listener();
98
98
  await testUtils.flushPromises();
99
99
 
@@ -102,7 +102,7 @@ describe('MediaProperties', () => {
102
102
 
103
103
  // check that listener was removed
104
104
  assert.calledOnce(mockMC.off);
105
- assert.calledWith(mockMC.off, MC.Event.CONNECTION_STATE_CHANGED, listener);
105
+ assert.calledWith(mockMC.off, Event.CONNECTION_STATE_CHANGED, listener);
106
106
 
107
107
  assert.calledOnce(clearTimeoutSpy);
108
108
  });