@webex/plugin-meetings 3.0.0-beta.18 → 3.0.0-beta.180

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 (410) hide show
  1. package/README.md +45 -7
  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 +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +3 -2
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/config.js +3 -8
  25. package/dist/config.js.map +1 -1
  26. package/dist/constants.js +172 -30
  27. package/dist/constants.js.map +1 -1
  28. package/dist/controls-options-manager/constants.js +14 -0
  29. package/dist/controls-options-manager/constants.js.map +1 -0
  30. package/dist/controls-options-manager/enums.js +27 -0
  31. package/dist/controls-options-manager/enums.js.map +1 -0
  32. package/dist/controls-options-manager/index.js +297 -0
  33. package/dist/controls-options-manager/index.js.map +1 -0
  34. package/dist/controls-options-manager/types.js +7 -0
  35. package/dist/controls-options-manager/types.js.map +1 -0
  36. package/dist/controls-options-manager/util.js +300 -0
  37. package/dist/controls-options-manager/util.js.map +1 -0
  38. package/dist/index.js +107 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/interpretation/collection.js +23 -0
  41. package/dist/interpretation/collection.js.map +1 -0
  42. package/dist/interpretation/index.js +352 -0
  43. package/dist/interpretation/index.js.map +1 -0
  44. package/dist/interpretation/siLanguage.js +25 -0
  45. package/dist/interpretation/siLanguage.js.map +1 -0
  46. package/dist/locus-info/controlsUtils.js +91 -2
  47. package/dist/locus-info/controlsUtils.js.map +1 -1
  48. package/dist/locus-info/index.js +302 -41
  49. package/dist/locus-info/index.js.map +1 -1
  50. package/dist/locus-info/mediaSharesUtils.js +43 -1
  51. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  52. package/dist/locus-info/parser.js +1 -1
  53. package/dist/locus-info/parser.js.map +1 -1
  54. package/dist/locus-info/selfUtils.js +89 -14
  55. package/dist/locus-info/selfUtils.js.map +1 -1
  56. package/dist/media/index.js +39 -134
  57. package/dist/media/index.js.map +1 -1
  58. package/dist/media/properties.js +29 -90
  59. package/dist/media/properties.js.map +1 -1
  60. package/dist/mediaQualityMetrics/config.js +505 -493
  61. package/dist/mediaQualityMetrics/config.js.map +1 -1
  62. package/dist/meeting/in-meeting-actions.js +76 -2
  63. package/dist/meeting/in-meeting-actions.js.map +1 -1
  64. package/dist/meeting/index.js +2610 -2465
  65. package/dist/meeting/index.js.map +1 -1
  66. package/dist/meeting/locusMediaRequest.js +291 -0
  67. package/dist/meeting/locusMediaRequest.js.map +1 -0
  68. package/dist/meeting/muteState.js +229 -124
  69. package/dist/meeting/muteState.js.map +1 -1
  70. package/dist/meeting/request.js +189 -146
  71. package/dist/meeting/request.js.map +1 -1
  72. package/dist/meeting/util.js +478 -414
  73. package/dist/meeting/util.js.map +1 -1
  74. package/dist/meeting-info/index.js +48 -7
  75. package/dist/meeting-info/index.js.map +1 -1
  76. package/dist/meeting-info/meeting-info-v2.js +171 -51
  77. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  78. package/dist/meeting-info/utilv2.js +20 -5
  79. package/dist/meeting-info/utilv2.js.map +1 -1
  80. package/dist/meetings/collection.js +22 -0
  81. package/dist/meetings/collection.js.map +1 -1
  82. package/dist/meetings/index.js +350 -65
  83. package/dist/meetings/index.js.map +1 -1
  84. package/dist/meetings/meetings.types.js +7 -0
  85. package/dist/meetings/meetings.types.js.map +1 -0
  86. package/dist/meetings/request.js +2 -0
  87. package/dist/meetings/request.js.map +1 -1
  88. package/dist/meetings/util.js +88 -1
  89. package/dist/meetings/util.js.map +1 -1
  90. package/dist/member/index.js +49 -0
  91. package/dist/member/index.js.map +1 -1
  92. package/dist/member/types.js +25 -0
  93. package/dist/member/types.js.map +1 -0
  94. package/dist/member/util.js +98 -2
  95. package/dist/member/util.js.map +1 -1
  96. package/dist/members/collection.js +10 -0
  97. package/dist/members/collection.js.map +1 -1
  98. package/dist/members/index.js +86 -5
  99. package/dist/members/index.js.map +1 -1
  100. package/dist/members/request.js +106 -38
  101. package/dist/members/request.js.map +1 -1
  102. package/dist/members/types.js +15 -0
  103. package/dist/members/types.js.map +1 -0
  104. package/dist/members/util.js +316 -233
  105. package/dist/members/util.js.map +1 -1
  106. package/dist/metrics/constants.js +3 -5
  107. package/dist/metrics/constants.js.map +1 -1
  108. package/dist/metrics/index.js +1 -468
  109. package/dist/metrics/index.js.map +1 -1
  110. package/dist/multistream/mediaRequestManager.js +238 -49
  111. package/dist/multistream/mediaRequestManager.js.map +1 -1
  112. package/dist/multistream/receiveSlot.js +49 -16
  113. package/dist/multistream/receiveSlot.js.map +1 -1
  114. package/dist/multistream/receiveSlotManager.js +48 -30
  115. package/dist/multistream/receiveSlotManager.js.map +1 -1
  116. package/dist/multistream/remoteMedia.js +44 -18
  117. package/dist/multistream/remoteMedia.js.map +1 -1
  118. package/dist/multistream/remoteMediaGroup.js +60 -3
  119. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  120. package/dist/multistream/remoteMediaManager.js +173 -59
  121. package/dist/multistream/remoteMediaManager.js.map +1 -1
  122. package/dist/networkQualityMonitor/index.js +4 -2
  123. package/dist/networkQualityMonitor/index.js.map +1 -1
  124. package/dist/reachability/index.js +72 -27
  125. package/dist/reachability/index.js.map +1 -1
  126. package/dist/reachability/request.js +12 -5
  127. package/dist/reachability/request.js.map +1 -1
  128. package/dist/reactions/reactions.js +2 -2
  129. package/dist/reactions/reactions.js.map +1 -1
  130. package/dist/reactions/reactions.type.js +18 -18
  131. package/dist/reactions/reactions.type.js.map +1 -1
  132. package/dist/reconnection-manager/index.js +196 -155
  133. package/dist/reconnection-manager/index.js.map +1 -1
  134. package/dist/recording-controller/index.js +21 -1
  135. package/dist/recording-controller/index.js.map +1 -1
  136. package/dist/recording-controller/util.js +9 -8
  137. package/dist/recording-controller/util.js.map +1 -1
  138. package/dist/roap/index.js +21 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +110 -89
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +93 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/statsAnalyzer/global.js +1 -93
  145. package/dist/statsAnalyzer/global.js.map +1 -1
  146. package/dist/statsAnalyzer/index.js +326 -311
  147. package/dist/statsAnalyzer/index.js.map +1 -1
  148. package/dist/statsAnalyzer/mqaUtil.js +90 -53
  149. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  150. package/dist/types/annotation/annotation.types.d.ts +42 -0
  151. package/dist/types/annotation/constants.d.ts +31 -0
  152. package/dist/types/annotation/index.d.ts +117 -0
  153. package/dist/types/breakouts/breakout.d.ts +8 -0
  154. package/dist/types/breakouts/collection.d.ts +5 -0
  155. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  156. package/dist/types/breakouts/events.d.ts +8 -0
  157. package/dist/types/breakouts/index.d.ts +5 -0
  158. package/dist/types/breakouts/request.d.ts +22 -0
  159. package/dist/types/breakouts/utils.d.ts +15 -0
  160. package/dist/types/common/browser-detection.d.ts +9 -0
  161. package/dist/types/common/collection.d.ts +48 -0
  162. package/dist/types/common/config.d.ts +2 -0
  163. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  164. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  165. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  166. package/dist/types/common/errors/media.d.ts +15 -0
  167. package/dist/types/common/errors/parameter.d.ts +15 -0
  168. package/dist/types/common/errors/password-error.d.ts +15 -0
  169. package/dist/types/common/errors/permission.d.ts +14 -0
  170. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  171. package/dist/types/common/errors/reconnection.d.ts +15 -0
  172. package/dist/types/common/errors/stats.d.ts +15 -0
  173. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  174. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  175. package/dist/types/common/events/events-scope.d.ts +17 -0
  176. package/dist/types/common/events/events.d.ts +12 -0
  177. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  178. package/dist/types/common/events/util.d.ts +2 -0
  179. package/dist/types/common/logs/logger-config.d.ts +2 -0
  180. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  181. package/dist/types/common/logs/request.d.ts +34 -0
  182. package/dist/types/common/queue.d.ts +32 -0
  183. package/dist/types/config.d.ts +72 -0
  184. package/dist/types/constants.d.ts +1016 -0
  185. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  186. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  187. package/dist/types/controls-options-manager/index.d.ts +136 -0
  188. package/dist/types/controls-options-manager/types.d.ts +43 -0
  189. package/dist/types/controls-options-manager/util.d.ts +1 -0
  190. package/dist/types/index.d.ts +7 -0
  191. package/dist/types/interpretation/collection.d.ts +5 -0
  192. package/dist/types/interpretation/index.d.ts +5 -0
  193. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  194. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  195. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  196. package/dist/types/locus-info/fullState.d.ts +2 -0
  197. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  198. package/dist/types/locus-info/index.d.ts +315 -0
  199. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  200. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  201. package/dist/types/locus-info/parser.d.ts +212 -0
  202. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  203. package/dist/types/media/index.d.ts +34 -0
  204. package/dist/types/media/properties.d.ts +93 -0
  205. package/dist/types/media/util.d.ts +2 -0
  206. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  207. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  208. package/dist/types/meeting/index.d.ts +1467 -0
  209. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  210. package/dist/types/meeting/muteState.d.ts +184 -0
  211. package/dist/types/meeting/request.d.ts +270 -0
  212. package/dist/types/meeting/request.type.d.ts +11 -0
  213. package/dist/types/meeting/state.d.ts +9 -0
  214. package/dist/types/meeting/util.d.ts +77 -0
  215. package/dist/types/meeting-info/collection.d.ts +20 -0
  216. package/dist/types/meeting-info/index.d.ts +62 -0
  217. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  218. package/dist/types/meeting-info/request.d.ts +22 -0
  219. package/dist/types/meeting-info/util.d.ts +2 -0
  220. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  221. package/dist/types/meetings/collection.d.ts +31 -0
  222. package/dist/types/meetings/index.d.ts +365 -0
  223. package/dist/types/meetings/meetings.types.d.ts +4 -0
  224. package/dist/types/meetings/request.d.ts +27 -0
  225. package/dist/types/meetings/util.d.ts +18 -0
  226. package/dist/types/member/index.d.ts +159 -0
  227. package/dist/types/member/types.d.ts +32 -0
  228. package/dist/types/member/util.d.ts +2 -0
  229. package/dist/types/members/collection.d.ts +29 -0
  230. package/dist/types/members/index.d.ts +353 -0
  231. package/dist/types/members/request.d.ts +114 -0
  232. package/dist/types/members/types.d.ts +24 -0
  233. package/dist/types/members/util.d.ts +210 -0
  234. package/dist/types/metrics/constants.d.ts +55 -0
  235. package/dist/types/metrics/index.d.ts +45 -0
  236. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  237. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  238. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  239. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  240. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  241. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  242. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  243. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  244. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  245. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  246. package/dist/types/reachability/index.d.ts +152 -0
  247. package/dist/types/reachability/request.d.ts +37 -0
  248. package/dist/types/reactions/constants.d.ts +3 -0
  249. package/dist/types/reactions/reactions.d.ts +4 -0
  250. package/dist/types/reactions/reactions.type.d.ts +52 -0
  251. package/dist/types/reconnection-manager/index.d.ts +126 -0
  252. package/dist/types/recording-controller/enums.d.ts +7 -0
  253. package/dist/types/recording-controller/index.d.ts +208 -0
  254. package/dist/types/recording-controller/util.d.ts +14 -0
  255. package/dist/types/roap/index.d.ts +77 -0
  256. package/dist/types/roap/request.d.ts +36 -0
  257. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  258. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  259. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  260. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  261. package/dist/types/transcription/index.d.ts +64 -0
  262. package/package.json +26 -23
  263. package/src/annotation/annotation.types.ts +50 -0
  264. package/src/annotation/constants.ts +36 -0
  265. package/src/annotation/index.ts +328 -0
  266. package/src/breakouts/README.md +44 -14
  267. package/src/breakouts/breakout.ts +87 -9
  268. package/src/breakouts/edit-lock-error.ts +25 -0
  269. package/src/breakouts/events.ts +56 -0
  270. package/src/breakouts/index.ts +710 -10
  271. package/src/breakouts/request.ts +55 -0
  272. package/src/breakouts/utils.ts +57 -0
  273. package/src/common/errors/webex-errors.ts +6 -2
  274. package/src/common/logs/logger-proxy.ts +1 -1
  275. package/src/config.ts +2 -7
  276. package/src/constants.ts +157 -21
  277. package/src/controls-options-manager/constants.ts +5 -0
  278. package/src/controls-options-manager/enums.ts +18 -0
  279. package/src/controls-options-manager/index.ts +278 -0
  280. package/src/controls-options-manager/types.ts +59 -0
  281. package/src/controls-options-manager/util.ts +286 -0
  282. package/src/index.ts +39 -0
  283. package/src/interpretation/README.md +60 -0
  284. package/src/interpretation/collection.ts +19 -0
  285. package/src/interpretation/index.ts +318 -0
  286. package/src/interpretation/siLanguage.ts +18 -0
  287. package/src/locus-info/controlsUtils.ts +108 -0
  288. package/src/locus-info/index.ts +316 -38
  289. package/src/locus-info/mediaSharesUtils.ts +48 -0
  290. package/src/locus-info/parser.ts +1 -1
  291. package/src/locus-info/selfUtils.ts +81 -5
  292. package/src/media/index.ts +77 -142
  293. package/src/media/properties.ts +49 -90
  294. package/src/mediaQualityMetrics/config.ts +379 -377
  295. package/src/meeting/in-meeting-actions.ts +151 -3
  296. package/src/meeting/index.ts +1919 -2002
  297. package/src/meeting/locusMediaRequest.ts +309 -0
  298. package/src/meeting/muteState.ts +228 -132
  299. package/src/meeting/request.ts +96 -65
  300. package/src/meeting/util.ts +464 -396
  301. package/src/meeting-info/index.ts +54 -8
  302. package/src/meeting-info/meeting-info-v2.ts +148 -14
  303. package/src/meeting-info/utilv2.ts +13 -3
  304. package/src/meetings/collection.ts +20 -0
  305. package/src/meetings/index.ts +386 -84
  306. package/src/meetings/meetings.types.ts +12 -0
  307. package/src/meetings/request.ts +2 -0
  308. package/src/meetings/util.ts +103 -4
  309. package/src/member/index.ts +49 -0
  310. package/src/member/types.ts +38 -0
  311. package/src/member/util.ts +103 -0
  312. package/src/members/collection.ts +8 -0
  313. package/src/members/index.ts +107 -6
  314. package/src/members/request.ts +97 -17
  315. package/src/members/types.ts +28 -0
  316. package/src/members/util.ts +319 -240
  317. package/src/metrics/constants.ts +2 -4
  318. package/src/metrics/index.ts +1 -490
  319. package/src/multistream/mediaRequestManager.ts +289 -79
  320. package/src/multistream/receiveSlot.ts +55 -18
  321. package/src/multistream/receiveSlotManager.ts +42 -20
  322. package/src/multistream/remoteMedia.ts +28 -2
  323. package/src/multistream/remoteMediaGroup.ts +59 -0
  324. package/src/multistream/remoteMediaManager.ts +113 -32
  325. package/src/networkQualityMonitor/index.ts +6 -6
  326. package/src/reachability/index.ts +62 -15
  327. package/src/reachability/request.ts +10 -5
  328. package/src/reactions/reactions.ts +4 -4
  329. package/src/reactions/reactions.type.ts +3 -3
  330. package/src/reconnection-manager/index.ts +68 -43
  331. package/src/recording-controller/index.ts +20 -2
  332. package/src/recording-controller/util.ts +26 -9
  333. package/src/roap/index.ts +21 -30
  334. package/src/roap/request.ts +101 -95
  335. package/src/roap/turnDiscovery.ts +47 -25
  336. package/src/statsAnalyzer/global.ts +1 -94
  337. package/src/statsAnalyzer/index.ts +376 -386
  338. package/src/statsAnalyzer/mqaUtil.ts +100 -99
  339. package/test/integration/spec/converged-space-meetings.js +233 -0
  340. package/test/integration/spec/journey.js +336 -259
  341. package/test/integration/spec/space-meeting.js +77 -4
  342. package/test/unit/spec/annotation/index.ts +418 -0
  343. package/test/unit/spec/breakouts/breakout.ts +142 -24
  344. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  345. package/test/unit/spec/breakouts/events.ts +89 -0
  346. package/test/unit/spec/breakouts/index.ts +1545 -48
  347. package/test/unit/spec/breakouts/request.ts +104 -0
  348. package/test/unit/spec/breakouts/utils.js +72 -0
  349. package/test/unit/spec/controls-options-manager/index.js +287 -0
  350. package/test/unit/spec/controls-options-manager/util.js +518 -0
  351. package/test/unit/spec/fixture/locus.js +1 -0
  352. package/test/unit/spec/interpretation/collection.ts +15 -0
  353. package/test/unit/spec/interpretation/index.ts +570 -0
  354. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  355. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  356. package/test/unit/spec/locus-info/index.js +707 -22
  357. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  358. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  359. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  360. package/test/unit/spec/media/index.ts +129 -23
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +75 -3
  362. package/test/unit/spec/meeting/index.js +2728 -1397
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  364. package/test/unit/spec/meeting/muteState.js +370 -208
  365. package/test/unit/spec/meeting/request.js +338 -43
  366. package/test/unit/spec/meeting/utils.js +378 -55
  367. package/test/unit/spec/meeting-info/index.js +181 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +14 -0
  371. package/test/unit/spec/meetings/index.js +846 -121
  372. package/test/unit/spec/meetings/utils.js +206 -2
  373. package/test/unit/spec/member/index.js +58 -4
  374. package/test/unit/spec/member/util.js +415 -33
  375. package/test/unit/spec/members/index.js +320 -1
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +184 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  380. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  382. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
  385. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  386. package/test/unit/spec/reachability/index.ts +125 -8
  387. package/test/unit/spec/reachability/request.js +66 -0
  388. package/test/unit/spec/reconnection-manager/index.js +59 -6
  389. package/test/unit/spec/recording-controller/index.js +294 -218
  390. package/test/unit/spec/recording-controller/util.js +223 -96
  391. package/test/unit/spec/roap/index.ts +26 -51
  392. package/test/unit/spec/roap/request.ts +196 -85
  393. package/test/unit/spec/roap/turnDiscovery.ts +30 -7
  394. package/test/unit/spec/stats-analyzer/index.js +92 -41
  395. package/test/utils/constants.js +9 -0
  396. package/test/utils/integrationTestUtils.js +46 -0
  397. package/test/utils/testUtils.js +0 -45
  398. package/test/utils/webex-config.js +4 -0
  399. package/test/utils/webex-test-users.js +6 -3
  400. package/dist/meeting/effectsState.js +0 -262
  401. package/dist/meeting/effectsState.js.map +0 -1
  402. package/dist/metrics/config.js +0 -299
  403. package/dist/metrics/config.js.map +0 -1
  404. package/dist/multistream/multistreamMedia.js +0 -110
  405. package/dist/multistream/multistreamMedia.js.map +0 -1
  406. package/src/index.js +0 -15
  407. package/src/meeting/effectsState.ts +0 -211
  408. package/src/metrics/config.ts +0 -495
  409. package/src/multistream/multistreamMedia.ts +0 -97
  410. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -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,10 @@ export const self = {
109
118
  requestedToUnmute: false,
110
119
  meta: {},
111
120
  },
121
+ video: {
122
+ muted: false,
123
+ meta: {},
124
+ },
112
125
  breakout: {
113
126
  sessions: {
114
127
  active: [
@@ -116,7 +129,7 @@ export const self = {
116
129
  name: 'Breakout session 2',
117
130
  groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
118
131
  sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
119
- sessionType: 'BREAKOUT'
132
+ sessionType: 'BREAKOUT',
120
133
  },
121
134
  ],
122
135
  allowed: [
@@ -124,14 +137,24 @@ export const self = {
124
137
  name: 'Breakout session 2',
125
138
  groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
126
139
  sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
127
- sessionType: 'BREAKOUT'
140
+ sessionType: 'BREAKOUT',
128
141
  },
129
- ]
142
+ ],
130
143
  },
131
144
  meta: {
132
145
  modifiedBy: '347ef89e-e1be-40a3-849c-731bdd935e62',
133
146
  lastModified: '2023-01-10T10:10:06.813Z',
134
- readOnly: true
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',
135
158
  }
136
159
  },
137
160
  localRecord: {
@@ -39,7 +39,7 @@ describe('plugin-meetings', () => {
39
39
  name: 'Breakout session 2',
40
40
  groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
41
41
  sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
42
- sessionType: 'BREAKOUT'
42
+ sessionType: 'BREAKOUT',
43
43
  },
44
44
  ],
45
45
  allowed: [
@@ -47,9 +47,9 @@ describe('plugin-meetings', () => {
47
47
  name: 'Breakout session 2',
48
48
  groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
49
49
  sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
50
- sessionType: 'BREAKOUT'
50
+ sessionType: 'BREAKOUT',
51
51
  },
52
- ]
52
+ ],
53
53
  });
54
54
  });
55
55
 
@@ -76,9 +76,12 @@ describe('plugin-meetings', () => {
76
76
  });
77
77
  });
78
78
 
79
- describe('getBreakouts', () => {
79
+ describe('getBreakoutSessions', () => {
80
80
  it('should return breakout sessions', () => {
81
- assert.deepEqual(SelfUtils.getBreakouts({controls: {breakout: {sessions: 'SESSIONS'}}}), 'SESSIONS');
81
+ assert.deepEqual(
82
+ SelfUtils.getBreakoutSessions({controls: {breakout: {sessions: 'SESSIONS'}}}),
83
+ 'SESSIONS'
84
+ );
82
85
  });
83
86
  });
84
87
 
@@ -91,10 +94,11 @@ describe('plugin-meetings', () => {
91
94
  name: 'Breakout session 2',
92
95
  groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
93
96
  sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
94
- sessionType: 'BREAKOUT'
97
+ sessionType: 'BREAKOUT',
95
98
  },
96
- ]
97
- }
99
+ ],
100
+ },
101
+ breakout: {},
98
102
  };
99
103
  const previous = {
100
104
  breakoutSessions: {
@@ -103,10 +107,11 @@ describe('plugin-meetings', () => {
103
107
  name: 'Breakout session 2',
104
108
  groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
105
109
  sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
106
- sessionType: 'BREAKOUT'
110
+ sessionType: 'BREAKOUT',
107
111
  },
108
- ]
109
- }
112
+ ],
113
+ },
114
+ breakout: {},
110
115
  };
111
116
 
112
117
  assert.isTrue(SelfUtils.breakoutsChanged(previous, current));
@@ -120,10 +125,11 @@ describe('plugin-meetings', () => {
120
125
  name: 'Breakout session 2',
121
126
  groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
122
127
  sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
123
- sessionType: 'BREAKOUT'
128
+ sessionType: 'BREAKOUT',
124
129
  },
125
- ]
126
- }
130
+ ],
131
+ },
132
+ breakout: {},
127
133
  };
128
134
  const previous = {
129
135
  breakoutSessions: {
@@ -132,10 +138,33 @@ describe('plugin-meetings', () => {
132
138
  name: 'Breakout session 2',
133
139
  groupId: '0e73abb8-5584-49d8-be8d-806d2a8247ca',
134
140
  sessionId: '1cf41ab1-2e57-4d95-b7e9-5613acddfb0f',
135
- sessionType: 'BREAKOUT'
141
+ sessionType: 'BREAKOUT',
136
142
  },
137
- ]
138
- }
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: {},
139
168
  };
140
169
 
141
170
  assert.isFalse(SelfUtils.breakoutsChanged(previous, current));
@@ -222,6 +251,55 @@ describe('plugin-meetings', () => {
222
251
  assert.equal(updates.canNotViewTheParticipantListChanged, false);
223
252
  });
224
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
+ });
225
303
  });
226
304
 
227
305
  describe('isSharingBlocked', () => {
@@ -266,4 +344,117 @@ describe('plugin-meetings', () => {
266
344
  assert.deepEqual(SelfUtils.isJoined(customSelf), false);
267
345
  });
268
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
+ });
269
460
  });
@@ -3,6 +3,7 @@ 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,19 @@ 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',
19
+ };
20
+ const fakeShareVideoTrack = {
21
+ id: 'share video track',
22
+ underlyingTrack: 'underlying share video track',
23
+ };
24
+ const fakeShareAudioTrack = {
25
+ id: 'share audio track',
26
+ underlyingTrack: 'underlying share audio track',
16
27
  };
17
28
 
18
29
  afterEach(() => {
@@ -32,16 +43,17 @@ describe('createMediaConnection', () => {
32
43
  Media.createMediaConnection(false, 'some debug id', {
33
44
  mediaProperties: {
34
45
  mediaDirection: {
35
- sendAudio: true,
46
+ sendAudio: false,
36
47
  sendVideo: true,
37
48
  sendShare: false,
38
- receiveAudio: true,
49
+ receiveAudio: false,
39
50
  receiveVideo: true,
40
51
  receiveShare: true,
41
52
  },
42
53
  audioTrack: fakeAudioTrack,
43
54
  videoTrack: fakeVideoTrack,
44
- shareTrack: null,
55
+ shareVideoTrack: null,
56
+ shareAudioTrack: null,
45
57
  },
46
58
  remoteQualityLevel: 'HIGH',
47
59
  enableRtx: ENABLE_RTX,
@@ -79,17 +91,17 @@ describe('createMediaConnection', () => {
79
91
  },
80
92
  },
81
93
  {
82
- send: {
83
- audio: fakeAudioTrack,
84
- video: fakeVideoTrack,
85
- screenShareVideo: null,
94
+ localTracks: {
95
+ audio: fakeAudioTrack.underlyingTrack,
96
+ video: fakeVideoTrack.underlyingTrack,
97
+ screenShareVideo: undefined,
86
98
  },
87
- receive: {
88
- audio: true,
89
- video: true,
90
- screenShareVideo: true,
91
- remoteQualityLevel: 'HIGH',
99
+ direction: {
100
+ audio: 'inactive',
101
+ video: 'sendrecv',
102
+ screenShareVideo: 'recvonly',
92
103
  },
104
+ remoteQualityLevel: 'HIGH',
93
105
  },
94
106
  'some debug id'
95
107
  );
@@ -101,11 +113,22 @@ describe('createMediaConnection', () => {
101
113
  .returns(fakeRoapMediaConnection);
102
114
 
103
115
  Media.createMediaConnection(true, 'some debug id', {
116
+ mediaProperties: {
117
+ mediaDirection: {
118
+ sendAudio: true,
119
+ sendVideo: true,
120
+ sendShare: false,
121
+ receiveAudio: true,
122
+ receiveVideo: true,
123
+ receiveShare: true,
124
+ }
125
+ },
104
126
  turnServerInfo: {
105
127
  url: 'turn server url',
106
128
  username: 'turn username',
107
129
  password: 'turn password',
108
130
  },
131
+ bundlePolicy: 'max-bundle',
109
132
  });
110
133
  assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
111
134
  assert.calledWith(
@@ -118,25 +141,107 @@ describe('createMediaConnection', () => {
118
141
  credential: 'turn password',
119
142
  },
120
143
  ],
144
+ enableMainAudio: true,
145
+ enableMainVideo: true,
146
+ bundlePolicy: 'max-bundle',
121
147
  },
122
148
  'some debug id'
123
149
  );
124
150
  });
125
151
 
152
+ forEach([
153
+ {sendAudio: true, receiveAudio: true, sendVideo: true, receiveVideo: true, enableMainAudio: true, enableMainVideo: true,},
154
+ {sendAudio: true, receiveAudio: false, sendVideo: true, receiveVideo: false, enableMainAudio: true, enableMainVideo: true,},
155
+ {sendAudio: false, receiveAudio: true, sendVideo: false, receiveVideo: true, enableMainAudio: true, enableMainVideo: true,},
156
+ {sendAudio: false, receiveAudio: false, sendVideo: false, receiveVideo: false, enableMainAudio: false, enableMainVideo: false,},
157
+ ], ({sendAudio, sendVideo, receiveAudio, receiveVideo, enableMainAudio, enableMainVideo}) => {
158
+ it(`sets enableMainVideo to ${enableMainVideo} and enableMainAudio to ${enableMainAudio} when sendAudio: ${sendAudio} sendVideo: ${sendVideo} receiveAudio: ${receiveAudio} receiveVideo: ${receiveVideo}`, () => {
159
+ const multistreamRoapMediaConnectionConstructorStub = sinon
160
+ .stub(internalMediaModule, 'MultistreamRoapMediaConnection')
161
+ .returns(fakeRoapMediaConnection);
162
+
163
+ Media.createMediaConnection(true, 'some debug id', {
164
+ mediaProperties: {
165
+ mediaDirection: {
166
+ sendAudio,
167
+ sendVideo,
168
+ sendShare: false,
169
+ receiveAudio,
170
+ receiveVideo,
171
+ receiveShare: true,
172
+ },
173
+ },
174
+ });
175
+ assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
176
+ assert.calledWith(
177
+ multistreamRoapMediaConnectionConstructorStub,
178
+ {
179
+ iceServers: [],
180
+ enableMainAudio,
181
+ enableMainVideo,
182
+ },
183
+ 'some debug id'
184
+ );
185
+ });
186
+ });
187
+
126
188
  it('passes empty ICE servers array to MultistreamRoapMediaConnection if turnServerInfo is undefined (multistream enabled)', () => {
127
189
  const multistreamRoapMediaConnectionConstructorStub = sinon
128
190
  .stub(internalMediaModule, 'MultistreamRoapMediaConnection')
129
191
  .returns(fakeRoapMediaConnection);
130
192
 
131
- Media.createMediaConnection(true, 'debug string', {});
193
+ Media.createMediaConnection(true, 'debug string', {
194
+ mediaProperties: {
195
+ mediaDirection: {
196
+ sendAudio: true,
197
+ sendVideo: true,
198
+ sendShare: false,
199
+ receiveAudio: true,
200
+ receiveVideo: true,
201
+ receiveShare: true,
202
+ },
203
+ },
204
+ });
132
205
  assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
133
206
  assert.calledWith(
134
207
  multistreamRoapMediaConnectionConstructorStub,
135
208
  {
136
209
  iceServers: [],
210
+ enableMainAudio: true,
211
+ enableMainVideo: true,
137
212
  },
138
213
  'debug string'
139
214
  );
215
+
216
+ it('does not pass bundlePolicy to MultistreamRoapMediaConnection if bundlePolicy is undefined', () => {
217
+ const multistreamRoapMediaConnectionConstructorStub = sinon
218
+ .stub(internalMediaModule, 'MultistreamRoapMediaConnection')
219
+ .returns(fakeRoapMediaConnection);
220
+
221
+ Media.createMediaConnection(true, 'debug string', {
222
+ mediaProperties: {
223
+ mediaDirection: {
224
+ sendAudio: true,
225
+ sendVideo: true,
226
+ sendShare: false,
227
+ receiveAudio: true,
228
+ receiveVideo: true,
229
+ receiveShare: true,
230
+ },
231
+ },
232
+ bundlePolicy: undefined
233
+ });
234
+ assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
235
+ assert.calledWith(
236
+ multistreamRoapMediaConnectionConstructorStub,
237
+ {
238
+ iceServers: [],
239
+ enableMainAudio: true,
240
+ enableMainVideo: true,
241
+ },
242
+ 'debug string'
243
+ );
244
+ });
140
245
  });
141
246
 
142
247
  it('passes empty ICE servers array to RoapMediaConnection if turnServerInfo is undefined (multistream disabled)', () => {
@@ -161,7 +266,8 @@ describe('createMediaConnection', () => {
161
266
  },
162
267
  audioTrack: fakeAudioTrack,
163
268
  videoTrack: null,
164
- shareTrack: fakeVideoTrack,
269
+ shareVideoTrack: fakeShareVideoTrack,
270
+ shareAudioTrack: fakeShareAudioTrack,
165
271
  },
166
272
  remoteQualityLevel: 'HIGH',
167
273
  enableRtx: ENABLE_RTX,
@@ -189,17 +295,17 @@ describe('createMediaConnection', () => {
189
295
  },
190
296
  },
191
297
  {
192
- send: {
193
- audio: fakeAudioTrack,
194
- video: null,
195
- screenShareVideo: fakeVideoTrack,
298
+ localTracks: {
299
+ audio: fakeAudioTrack.underlyingTrack,
300
+ video: undefined,
301
+ screenShareVideo: fakeShareVideoTrack.underlyingTrack,
196
302
  },
197
- receive: {
198
- audio: true,
199
- video: true,
200
- screenShareVideo: true,
201
- remoteQualityLevel: 'HIGH',
303
+ direction: {
304
+ audio: 'sendrecv',
305
+ video: 'sendrecv',
306
+ screenShareVideo: 'sendrecv',
202
307
  },
308
+ remoteQualityLevel: 'HIGH',
203
309
  },
204
310
  'some debug id'
205
311
  );