@webex/plugin-meetings 3.0.0-test.1 → 3.1.0

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 (431) hide show
  1. package/.eslintrc.js +6 -0
  2. package/babel.config.js +3 -0
  3. package/dist/annotation/constants.js +12 -20
  4. package/dist/annotation/constants.js.map +1 -1
  5. package/dist/annotation/index.js +25 -10
  6. package/dist/annotation/index.js.map +1 -1
  7. package/dist/breakouts/breakout.js +2 -3
  8. package/dist/breakouts/breakout.js.map +1 -1
  9. package/dist/breakouts/collection.js +1 -2
  10. package/dist/breakouts/collection.js.map +1 -1
  11. package/dist/breakouts/edit-lock-error.js +1 -2
  12. package/dist/breakouts/edit-lock-error.js.map +1 -1
  13. package/dist/breakouts/events.js +1 -2
  14. package/dist/breakouts/events.js.map +1 -1
  15. package/dist/breakouts/index.js +13 -14
  16. package/dist/breakouts/index.js.map +1 -1
  17. package/dist/breakouts/request.js +1 -2
  18. package/dist/breakouts/request.js.map +1 -1
  19. package/dist/breakouts/utils.js +3 -6
  20. package/dist/breakouts/utils.js.map +1 -1
  21. package/dist/common/browser-detection.js +2 -3
  22. package/dist/common/browser-detection.js.map +1 -1
  23. package/dist/common/collection.js +3 -4
  24. package/dist/common/collection.js.map +1 -1
  25. package/dist/common/config.js +1 -2
  26. package/dist/common/config.js.map +1 -1
  27. package/dist/common/errors/captcha-error.js +1 -2
  28. package/dist/common/errors/captcha-error.js.map +1 -1
  29. package/dist/common/errors/intent-to-join.js +1 -2
  30. package/dist/common/errors/intent-to-join.js.map +1 -1
  31. package/dist/common/errors/join-meeting.js +1 -2
  32. package/dist/common/errors/join-meeting.js.map +1 -1
  33. package/dist/common/errors/media.js +1 -2
  34. package/dist/common/errors/media.js.map +1 -1
  35. package/dist/common/errors/no-meeting-info.js +1 -2
  36. package/dist/common/errors/no-meeting-info.js.map +1 -1
  37. package/dist/common/errors/parameter.js +3 -4
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +1 -2
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +1 -2
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reclaim-host-role-errors.js +6 -10
  44. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -1
  45. package/dist/common/errors/reconnection-in-progress.js +1 -2
  46. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  47. package/dist/common/errors/reconnection.js +1 -2
  48. package/dist/common/errors/reconnection.js.map +1 -1
  49. package/dist/common/errors/stats.js +1 -2
  50. package/dist/common/errors/stats.js.map +1 -1
  51. package/dist/common/errors/webex-errors.js +14 -15
  52. package/dist/common/errors/webex-errors.js.map +1 -1
  53. package/dist/common/errors/webex-meetings-error.js +1 -2
  54. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  55. package/dist/common/events/events-scope.js +1 -2
  56. package/dist/common/events/events-scope.js.map +1 -1
  57. package/dist/common/events/events.js +1 -2
  58. package/dist/common/events/events.js.map +1 -1
  59. package/dist/common/events/trigger-proxy.js +1 -2
  60. package/dist/common/events/trigger-proxy.js.map +1 -1
  61. package/dist/common/events/util.js +1 -2
  62. package/dist/common/events/util.js.map +1 -1
  63. package/dist/common/logs/logger-config.js +1 -2
  64. package/dist/common/logs/logger-config.js.map +1 -1
  65. package/dist/common/logs/logger-proxy.js +1 -2
  66. package/dist/common/logs/logger-proxy.js.map +1 -1
  67. package/dist/{types/common → common}/logs/request.d.ts +1 -1
  68. package/dist/common/logs/request.js +3 -4
  69. package/dist/common/logs/request.js.map +1 -1
  70. package/dist/common/queue.js +2 -4
  71. package/dist/common/queue.js.map +1 -1
  72. package/dist/{types/config.d.ts → config.d.ts} +1 -0
  73. package/dist/config.js +4 -3
  74. package/dist/config.js.map +1 -1
  75. package/dist/{types/constants.d.ts → constants.d.ts} +10 -5
  76. package/dist/constants.js +207 -380
  77. package/dist/constants.js.map +1 -1
  78. package/dist/controls-options-manager/constants.js +3 -6
  79. package/dist/controls-options-manager/constants.js.map +1 -1
  80. package/dist/controls-options-manager/enums.js +7 -10
  81. package/dist/controls-options-manager/enums.js.map +1 -1
  82. package/dist/controls-options-manager/index.js +27 -32
  83. package/dist/controls-options-manager/index.js.map +1 -1
  84. package/dist/controls-options-manager/util.js +1 -2
  85. package/dist/controls-options-manager/util.js.map +1 -1
  86. package/dist/index.js +3 -4
  87. package/dist/index.js.map +1 -1
  88. package/dist/interceptors/index.js.map +1 -1
  89. package/dist/interceptors/locusRetry.js +4 -3
  90. package/dist/interceptors/locusRetry.js.map +1 -1
  91. package/dist/interpretation/collection.js +1 -2
  92. package/dist/interpretation/collection.js.map +1 -1
  93. package/dist/interpretation/index.js +4 -5
  94. package/dist/interpretation/index.js.map +1 -1
  95. package/dist/interpretation/siLanguage.js +2 -3
  96. package/dist/interpretation/siLanguage.js.map +1 -1
  97. package/dist/locus-info/controlsUtils.js +12 -13
  98. package/dist/locus-info/controlsUtils.js.map +1 -1
  99. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  100. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  101. package/dist/locus-info/fullState.js +1 -2
  102. package/dist/locus-info/fullState.js.map +1 -1
  103. package/dist/locus-info/hostUtils.js +1 -2
  104. package/dist/locus-info/hostUtils.js.map +1 -1
  105. package/dist/locus-info/index.js +23 -27
  106. package/dist/locus-info/index.js.map +1 -1
  107. package/dist/locus-info/infoUtils.js +3 -4
  108. package/dist/locus-info/infoUtils.js.map +1 -1
  109. package/dist/locus-info/mediaSharesUtils.js +16 -3
  110. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  111. package/dist/locus-info/parser.js +6 -10
  112. package/dist/locus-info/parser.js.map +1 -1
  113. package/dist/locus-info/selfUtils.js +12 -6
  114. package/dist/locus-info/selfUtils.js.map +1 -1
  115. package/dist/media/MediaConnectionAwaiter.d.ts +61 -0
  116. package/dist/media/MediaConnectionAwaiter.js +163 -0
  117. package/dist/media/MediaConnectionAwaiter.js.map +1 -0
  118. package/dist/media/index.js +9 -5
  119. package/dist/media/index.js.map +1 -1
  120. package/dist/media/properties.js +7 -28
  121. package/dist/media/properties.js.map +1 -1
  122. package/dist/media/util.js +1 -2
  123. package/dist/media/util.js.map +1 -1
  124. package/dist/mediaQualityMetrics/config.js +9 -18
  125. package/dist/mediaQualityMetrics/config.js.map +1 -1
  126. package/dist/meeting/in-meeting-actions.js +14 -2
  127. package/dist/meeting/in-meeting-actions.js.map +1 -1
  128. package/dist/{types/meeting → meeting}/index.d.ts +71 -16
  129. package/dist/meeting/index.js +1411 -1036
  130. package/dist/meeting/index.js.map +1 -1
  131. package/dist/meeting/locusMediaRequest.js +4 -5
  132. package/dist/meeting/locusMediaRequest.js.map +1 -1
  133. package/dist/meeting/muteState.js +2 -4
  134. package/dist/meeting/muteState.js.map +1 -1
  135. package/dist/{types/meeting → meeting}/request.d.ts +3 -0
  136. package/dist/meeting/request.js +45 -36
  137. package/dist/meeting/request.js.map +1 -1
  138. package/dist/meeting/state.js +1 -2
  139. package/dist/meeting/state.js.map +1 -1
  140. package/dist/{types/meeting → meeting}/util.d.ts +1 -0
  141. package/dist/meeting/util.js +13 -10
  142. package/dist/meeting/util.js.map +1 -1
  143. package/dist/meeting/voicea-meeting.d.ts +16 -0
  144. package/dist/meeting/voicea-meeting.js +169 -0
  145. package/dist/meeting/voicea-meeting.js.map +1 -0
  146. package/dist/meeting-info/collection.js +3 -4
  147. package/dist/meeting-info/collection.js.map +1 -1
  148. package/dist/meeting-info/index.js +5 -4
  149. package/dist/meeting-info/index.js.map +1 -1
  150. package/dist/meeting-info/meeting-info-v2.js +27 -29
  151. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  152. package/dist/meeting-info/request.js +1 -2
  153. package/dist/meeting-info/request.js.map +1 -1
  154. package/dist/meeting-info/util.js +8 -8
  155. package/dist/meeting-info/util.js.map +1 -1
  156. package/dist/meeting-info/utilv2.js +15 -9
  157. package/dist/meeting-info/utilv2.js.map +1 -1
  158. package/dist/meetings/collection.js +5 -6
  159. package/dist/meetings/collection.js.map +1 -1
  160. package/dist/{types/meetings → meetings}/index.d.ts +11 -2
  161. package/dist/meetings/index.js +44 -17
  162. package/dist/meetings/index.js.map +1 -1
  163. package/dist/meetings/request.js +2 -3
  164. package/dist/meetings/request.js.map +1 -1
  165. package/dist/meetings/util.js +1 -4
  166. package/dist/meetings/util.js.map +1 -1
  167. package/dist/member/index.js +1 -3
  168. package/dist/member/index.js.map +1 -1
  169. package/dist/member/types.js +6 -8
  170. package/dist/member/types.js.map +1 -1
  171. package/dist/member/util.js +1 -2
  172. package/dist/member/util.js.map +1 -1
  173. package/dist/members/collection.js +1 -2
  174. package/dist/members/collection.js.map +1 -1
  175. package/dist/members/index.js +8 -7
  176. package/dist/members/index.js.map +1 -1
  177. package/dist/members/request.js +2 -3
  178. package/dist/members/request.js.map +1 -1
  179. package/dist/members/types.js +3 -4
  180. package/dist/members/types.js.map +1 -1
  181. package/dist/{types/members → members}/util.d.ts +1 -1
  182. package/dist/members/util.js +3 -4
  183. package/dist/members/util.js.map +1 -1
  184. package/dist/metrics/constants.js +1 -2
  185. package/dist/metrics/constants.js.map +1 -1
  186. package/dist/metrics/index.js +3 -2
  187. package/dist/metrics/index.js.map +1 -1
  188. package/dist/{types/multistream → multistream}/mediaRequestManager.d.ts +1 -2
  189. package/dist/multistream/mediaRequestManager.js +9 -11
  190. package/dist/multistream/mediaRequestManager.js.map +1 -1
  191. package/dist/multistream/receiveSlot.js +3 -5
  192. package/dist/multistream/receiveSlot.js.map +1 -1
  193. package/dist/multistream/receiveSlotManager.js +7 -9
  194. package/dist/multistream/receiveSlotManager.js.map +1 -1
  195. package/dist/multistream/remoteMedia.js +3 -5
  196. package/dist/multistream/remoteMedia.js.map +1 -1
  197. package/dist/{types/multistream → multistream}/remoteMediaGroup.d.ts +1 -1
  198. package/dist/multistream/remoteMediaGroup.js +7 -6
  199. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  200. package/dist/{types/multistream → multistream}/remoteMediaManager.d.ts +1 -2
  201. package/dist/multistream/remoteMediaManager.js +32 -29
  202. package/dist/multistream/remoteMediaManager.js.map +1 -1
  203. package/dist/{types/multistream → multistream}/sendSlotManager.d.ts +1 -2
  204. package/dist/multistream/sendSlotManager.js +9 -6
  205. package/dist/multistream/sendSlotManager.js.map +1 -1
  206. package/dist/networkQualityMonitor/index.js +1 -2
  207. package/dist/networkQualityMonitor/index.js.map +1 -1
  208. package/dist/personal-meeting-room/index.js +2 -3
  209. package/dist/personal-meeting-room/index.js.map +1 -1
  210. package/dist/personal-meeting-room/request.js +2 -3
  211. package/dist/personal-meeting-room/request.js.map +1 -1
  212. package/dist/personal-meeting-room/util.js +1 -2
  213. package/dist/personal-meeting-room/util.js.map +1 -1
  214. package/dist/{types/reachability → reachability}/clusterReachability.d.ts +1 -0
  215. package/dist/reachability/clusterReachability.js +35 -20
  216. package/dist/reachability/clusterReachability.js.map +1 -1
  217. package/dist/{types/reachability → reachability}/index.d.ts +4 -0
  218. package/dist/reachability/index.js +41 -12
  219. package/dist/reachability/index.js.map +1 -1
  220. package/dist/reachability/request.js +25 -20
  221. package/dist/reachability/request.js.map +1 -1
  222. package/dist/{types/reachability → reachability}/util.d.ts +7 -0
  223. package/dist/reachability/util.js +19 -0
  224. package/dist/reachability/util.js.map +1 -1
  225. package/dist/reactions/constants.js +1 -2
  226. package/dist/reactions/constants.js.map +1 -1
  227. package/dist/reactions/reactions.js +2 -4
  228. package/dist/reactions/reactions.js.map +1 -1
  229. package/dist/reactions/reactions.type.js +6 -8
  230. package/dist/reactions/reactions.type.js.map +1 -1
  231. package/dist/reconnection-manager/index.js +18 -11
  232. package/dist/reconnection-manager/index.js.map +1 -1
  233. package/dist/recording-controller/enums.js +4 -5
  234. package/dist/recording-controller/enums.js.map +1 -1
  235. package/dist/recording-controller/index.js +43 -51
  236. package/dist/recording-controller/index.js.map +1 -1
  237. package/dist/recording-controller/util.js +1 -2
  238. package/dist/recording-controller/util.js.map +1 -1
  239. package/dist/{types/roap → roap}/index.d.ts +10 -2
  240. package/dist/roap/index.js +17 -3
  241. package/dist/roap/index.js.map +1 -1
  242. package/dist/roap/request.js +10 -10
  243. package/dist/roap/request.js.map +1 -1
  244. package/dist/{types/roap → roap}/turnDiscovery.d.ts +64 -17
  245. package/dist/roap/turnDiscovery.js +316 -134
  246. package/dist/roap/turnDiscovery.js.map +1 -1
  247. package/dist/rtcMetrics/constants.js +1 -2
  248. package/dist/rtcMetrics/constants.js.map +1 -1
  249. package/dist/rtcMetrics/index.js +4 -6
  250. package/dist/rtcMetrics/index.js.map +1 -1
  251. package/dist/statsAnalyzer/global.js +1 -2
  252. package/dist/statsAnalyzer/global.js.map +1 -1
  253. package/dist/statsAnalyzer/index.js +123 -96
  254. package/dist/statsAnalyzer/index.js.map +1 -1
  255. package/dist/statsAnalyzer/mqaUtil.js +24 -31
  256. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  257. package/dist/transcription/index.js +1 -2
  258. package/dist/transcription/index.js.map +1 -1
  259. package/dist/webinar/collection.js +1 -2
  260. package/dist/webinar/collection.js.map +1 -1
  261. package/dist/webinar/index.js +2 -3
  262. package/dist/webinar/index.js.map +1 -1
  263. package/jest.config.js +3 -0
  264. package/package.json +44 -25
  265. package/process +1 -0
  266. package/src/config.ts +3 -4
  267. package/src/constants.ts +13 -4
  268. package/src/interpretation/index.ts +2 -2
  269. package/src/locus-info/mediaSharesUtils.ts +16 -0
  270. package/src/locus-info/selfUtils.ts +5 -0
  271. package/src/media/MediaConnectionAwaiter.ts +174 -0
  272. package/src/media/index.ts +3 -1
  273. package/src/media/properties.ts +6 -31
  274. package/src/meeting/index.ts +526 -227
  275. package/src/meeting/request.ts +18 -2
  276. package/src/meeting/util.ts +6 -1
  277. package/src/meeting/voicea-meeting.ts +122 -0
  278. package/src/meeting-info/meeting-info-v2.ts +5 -11
  279. package/src/meeting-info/util.ts +12 -9
  280. package/src/meeting-info/utilv2.ts +26 -15
  281. package/src/meetings/index.ts +18 -0
  282. package/src/member/index.ts +0 -1
  283. package/src/multistream/mediaRequestManager.ts +1 -1
  284. package/src/multistream/remoteMediaGroup.ts +1 -1
  285. package/src/multistream/remoteMediaManager.ts +1 -2
  286. package/src/multistream/sendSlotManager.ts +1 -2
  287. package/src/reachability/clusterReachability.ts +20 -5
  288. package/src/reachability/index.ts +24 -1
  289. package/src/reachability/request.ts +15 -11
  290. package/src/reachability/util.ts +21 -0
  291. package/src/reconnection-manager/index.ts +1 -1
  292. package/src/roap/index.ts +25 -3
  293. package/src/roap/request.ts +2 -2
  294. package/src/roap/turnDiscovery.ts +244 -78
  295. package/src/statsAnalyzer/index.ts +63 -27
  296. package/test/integration/spec/journey.js +2 -2
  297. package/test/unit/spec/breakouts/breakout.ts +2 -1
  298. package/test/unit/spec/breakouts/index.ts +7 -4
  299. package/test/unit/spec/interpretation/index.ts +4 -1
  300. package/test/unit/spec/locus-info/index.js +27 -18
  301. package/test/unit/spec/locus-info/mediaSharesUtils.ts +9 -0
  302. package/test/unit/spec/locus-info/selfUtils.js +41 -11
  303. package/test/unit/spec/media/MediaConnectionAwaiter.ts +344 -0
  304. package/test/unit/spec/media/index.ts +94 -78
  305. package/test/unit/spec/media/properties.ts +16 -70
  306. package/test/unit/spec/meeting/index.js +757 -141
  307. package/test/unit/spec/meeting/request.js +21 -0
  308. package/test/unit/spec/meeting/utils.js +58 -11
  309. package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
  310. package/test/unit/spec/meeting-info/meetinginfov2.js +20 -15
  311. package/test/unit/spec/meeting-info/utilv2.js +6 -0
  312. package/test/unit/spec/meetings/index.js +101 -13
  313. package/test/unit/spec/metrics/index.js +1 -2
  314. package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
  315. package/test/unit/spec/multistream/remoteMediaGroup.ts +0 -1
  316. package/test/unit/spec/multistream/remoteMediaManager.ts +0 -1
  317. package/test/unit/spec/reachability/clusterReachability.ts +86 -22
  318. package/test/unit/spec/reachability/index.ts +197 -60
  319. package/test/unit/spec/reachability/request.js +15 -7
  320. package/test/unit/spec/reachability/util.ts +32 -2
  321. package/test/unit/spec/reconnection-manager/index.js +28 -0
  322. package/test/unit/spec/recording-controller/index.js +0 -1
  323. package/test/unit/spec/roap/index.ts +61 -6
  324. package/test/unit/spec/roap/turnDiscovery.ts +299 -17
  325. package/test/unit/spec/stats-analyzer/index.js +179 -0
  326. /package/dist/{types/annotation → annotation}/annotation.types.d.ts +0 -0
  327. /package/dist/{types/annotation → annotation}/constants.d.ts +0 -0
  328. /package/dist/{types/annotation → annotation}/index.d.ts +0 -0
  329. /package/dist/{types/breakouts → breakouts}/breakout.d.ts +0 -0
  330. /package/dist/{types/breakouts → breakouts}/collection.d.ts +0 -0
  331. /package/dist/{types/breakouts → breakouts}/edit-lock-error.d.ts +0 -0
  332. /package/dist/{types/breakouts → breakouts}/events.d.ts +0 -0
  333. /package/dist/{types/breakouts → breakouts}/index.d.ts +0 -0
  334. /package/dist/{types/breakouts → breakouts}/request.d.ts +0 -0
  335. /package/dist/{types/breakouts → breakouts}/utils.d.ts +0 -0
  336. /package/dist/{types/common → common}/browser-detection.d.ts +0 -0
  337. /package/dist/{types/common → common}/collection.d.ts +0 -0
  338. /package/dist/{types/common → common}/config.d.ts +0 -0
  339. /package/dist/{types/common → common}/errors/captcha-error.d.ts +0 -0
  340. /package/dist/{types/common → common}/errors/intent-to-join.d.ts +0 -0
  341. /package/dist/{types/common → common}/errors/join-meeting.d.ts +0 -0
  342. /package/dist/{types/common → common}/errors/media.d.ts +0 -0
  343. /package/dist/{types/common → common}/errors/no-meeting-info.d.ts +0 -0
  344. /package/dist/{types/common → common}/errors/parameter.d.ts +0 -0
  345. /package/dist/{types/common → common}/errors/password-error.d.ts +0 -0
  346. /package/dist/{types/common → common}/errors/permission.d.ts +0 -0
  347. /package/dist/{types/common → common}/errors/reclaim-host-role-errors.d.ts +0 -0
  348. /package/dist/{types/common → common}/errors/reconnection-in-progress.d.ts +0 -0
  349. /package/dist/{types/common → common}/errors/reconnection.d.ts +0 -0
  350. /package/dist/{types/common → common}/errors/stats.d.ts +0 -0
  351. /package/dist/{types/common → common}/errors/webex-errors.d.ts +0 -0
  352. /package/dist/{types/common → common}/errors/webex-meetings-error.d.ts +0 -0
  353. /package/dist/{types/common → common}/events/events-scope.d.ts +0 -0
  354. /package/dist/{types/common → common}/events/events.d.ts +0 -0
  355. /package/dist/{types/common → common}/events/trigger-proxy.d.ts +0 -0
  356. /package/dist/{types/common → common}/events/util.d.ts +0 -0
  357. /package/dist/{types/common → common}/logs/logger-config.d.ts +0 -0
  358. /package/dist/{types/common → common}/logs/logger-proxy.d.ts +0 -0
  359. /package/dist/{types/common → common}/queue.d.ts +0 -0
  360. /package/dist/{types/controls-options-manager → controls-options-manager}/constants.d.ts +0 -0
  361. /package/dist/{types/controls-options-manager → controls-options-manager}/enums.d.ts +0 -0
  362. /package/dist/{types/controls-options-manager → controls-options-manager}/index.d.ts +0 -0
  363. /package/dist/{types/controls-options-manager → controls-options-manager}/types.d.ts +0 -0
  364. /package/dist/{types/controls-options-manager → controls-options-manager}/util.d.ts +0 -0
  365. /package/dist/{types/index.d.ts → index.d.ts} +0 -0
  366. /package/dist/{types/interceptors → interceptors}/index.d.ts +0 -0
  367. /package/dist/{types/interceptors → interceptors}/locusRetry.d.ts +0 -0
  368. /package/dist/{types/interpretation → interpretation}/collection.d.ts +0 -0
  369. /package/dist/{types/interpretation → interpretation}/index.d.ts +0 -0
  370. /package/dist/{types/interpretation → interpretation}/siLanguage.d.ts +0 -0
  371. /package/dist/{types/locus-info → locus-info}/controlsUtils.d.ts +0 -0
  372. /package/dist/{types/locus-info → locus-info}/embeddedAppsUtils.d.ts +0 -0
  373. /package/dist/{types/locus-info → locus-info}/fullState.d.ts +0 -0
  374. /package/dist/{types/locus-info → locus-info}/hostUtils.d.ts +0 -0
  375. /package/dist/{types/locus-info → locus-info}/index.d.ts +0 -0
  376. /package/dist/{types/locus-info → locus-info}/infoUtils.d.ts +0 -0
  377. /package/dist/{types/locus-info → locus-info}/mediaSharesUtils.d.ts +0 -0
  378. /package/dist/{types/locus-info → locus-info}/parser.d.ts +0 -0
  379. /package/dist/{types/locus-info → locus-info}/selfUtils.d.ts +0 -0
  380. /package/dist/{types/media → media}/index.d.ts +0 -0
  381. /package/dist/{types/media → media}/properties.d.ts +0 -0
  382. /package/dist/{types/media → media}/util.d.ts +0 -0
  383. /package/dist/{types/mediaQualityMetrics → mediaQualityMetrics}/config.d.ts +0 -0
  384. /package/dist/{types/meeting → meeting}/in-meeting-actions.d.ts +0 -0
  385. /package/dist/{types/meeting → meeting}/locusMediaRequest.d.ts +0 -0
  386. /package/dist/{types/meeting → meeting}/muteState.d.ts +0 -0
  387. /package/dist/{types/meeting → meeting}/request.type.d.ts +0 -0
  388. /package/dist/{types/meeting → meeting}/state.d.ts +0 -0
  389. /package/dist/{types/meeting-info → meeting-info}/collection.d.ts +0 -0
  390. /package/dist/{types/meeting-info → meeting-info}/index.d.ts +0 -0
  391. /package/dist/{types/meeting-info → meeting-info}/meeting-info-v2.d.ts +0 -0
  392. /package/dist/{types/meeting-info → meeting-info}/request.d.ts +0 -0
  393. /package/dist/{types/meeting-info → meeting-info}/util.d.ts +0 -0
  394. /package/dist/{types/meeting-info → meeting-info}/utilv2.d.ts +0 -0
  395. /package/dist/{types/meetings → meetings}/collection.d.ts +0 -0
  396. /package/dist/{types/meetings → meetings}/meetings.types.d.ts +0 -0
  397. /package/dist/{types/meetings → meetings}/request.d.ts +0 -0
  398. /package/dist/{types/meetings → meetings}/util.d.ts +0 -0
  399. /package/dist/{types/member → member}/index.d.ts +0 -0
  400. /package/dist/{types/member → member}/types.d.ts +0 -0
  401. /package/dist/{types/member → member}/util.d.ts +0 -0
  402. /package/dist/{types/members → members}/collection.d.ts +0 -0
  403. /package/dist/{types/members → members}/index.d.ts +0 -0
  404. /package/dist/{types/members → members}/request.d.ts +0 -0
  405. /package/dist/{types/members → members}/types.d.ts +0 -0
  406. /package/dist/{types/metrics → metrics}/constants.d.ts +0 -0
  407. /package/dist/{types/metrics → metrics}/index.d.ts +0 -0
  408. /package/dist/{types/multistream → multistream}/receiveSlot.d.ts +0 -0
  409. /package/dist/{types/multistream → multistream}/receiveSlotManager.d.ts +0 -0
  410. /package/dist/{types/multistream → multistream}/remoteMedia.d.ts +0 -0
  411. /package/dist/{types/networkQualityMonitor → networkQualityMonitor}/index.d.ts +0 -0
  412. /package/dist/{types/personal-meeting-room → personal-meeting-room}/index.d.ts +0 -0
  413. /package/dist/{types/personal-meeting-room → personal-meeting-room}/request.d.ts +0 -0
  414. /package/dist/{types/personal-meeting-room → personal-meeting-room}/util.d.ts +0 -0
  415. /package/dist/{types/reachability → reachability}/request.d.ts +0 -0
  416. /package/dist/{types/reactions → reactions}/constants.d.ts +0 -0
  417. /package/dist/{types/reactions → reactions}/reactions.d.ts +0 -0
  418. /package/dist/{types/reactions → reactions}/reactions.type.d.ts +0 -0
  419. /package/dist/{types/reconnection-manager → reconnection-manager}/index.d.ts +0 -0
  420. /package/dist/{types/recording-controller → recording-controller}/enums.d.ts +0 -0
  421. /package/dist/{types/recording-controller → recording-controller}/index.d.ts +0 -0
  422. /package/dist/{types/recording-controller → recording-controller}/util.d.ts +0 -0
  423. /package/dist/{types/roap → roap}/request.d.ts +0 -0
  424. /package/dist/{types/rtcMetrics → rtcMetrics}/constants.d.ts +0 -0
  425. /package/dist/{types/rtcMetrics → rtcMetrics}/index.d.ts +0 -0
  426. /package/dist/{types/statsAnalyzer → statsAnalyzer}/global.d.ts +0 -0
  427. /package/dist/{types/statsAnalyzer → statsAnalyzer}/index.d.ts +0 -0
  428. /package/dist/{types/statsAnalyzer → statsAnalyzer}/mqaUtil.d.ts +0 -0
  429. /package/dist/{types/transcription → transcription}/index.d.ts +0 -0
  430. /package/dist/{types/webinar → webinar}/collection.d.ts +0 -0
  431. /package/dist/{types/webinar → webinar}/index.d.ts +0 -0
@@ -0,0 +1,344 @@
1
+ import {assert} from '@webex/test-helper-chai';
2
+ import sinon from 'sinon';
3
+ import {ConnectionState, Event} from '@webex/internal-media-core';
4
+ import testUtils from '../../../utils/testUtils';
5
+ import {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '@webex/plugin-meetings/src/constants';
6
+ import MediaConnectionAwaiter from '../../../../src/media/MediaConnectionAwaiter';
7
+
8
+ describe('MediaConnectionAwaiter', () => {
9
+ let mediaConnectionAwaiter;
10
+ let mockMC;
11
+ let clock;
12
+
13
+ beforeEach(() => {
14
+ clock = sinon.useFakeTimers();
15
+
16
+ mockMC = {
17
+ getStats: sinon.stub().resolves([]),
18
+ on: sinon.stub(),
19
+ off: sinon.stub(),
20
+ getConnectionState: sinon.stub().returns(ConnectionState.New),
21
+ getIceGatheringState: sinon.stub().returns('new'),
22
+ };
23
+
24
+ mediaConnectionAwaiter = new MediaConnectionAwaiter({
25
+ webrtcMediaConnection: mockMC,
26
+ });
27
+ });
28
+
29
+ afterEach(() => {
30
+ clock.restore();
31
+ sinon.restore();
32
+ });
33
+
34
+ describe('waitForMediaConnectionConnected', () => {
35
+ it('resolves immediately if connection state is connected', async () => {
36
+ mockMC.getConnectionState.returns(ConnectionState.Connected);
37
+
38
+ await mediaConnectionAwaiter.waitForMediaConnectionConnected();
39
+
40
+ assert.neverCalledWith(mockMC.on);
41
+ });
42
+
43
+ it('rejects after timeout if ice state is not connected', async () => {
44
+ mockMC.getConnectionState.returns(ConnectionState.Connecting);
45
+ mockMC.getIceGatheringState.returns('gathering');
46
+
47
+ let promiseResolved = false;
48
+ let promiseRejected = false;
49
+
50
+ mediaConnectionAwaiter
51
+ .waitForMediaConnectionConnected()
52
+ .then(() => {
53
+ promiseResolved = true;
54
+ })
55
+ .catch(() => {
56
+ promiseRejected = true;
57
+ });
58
+
59
+ await testUtils.flushPromises();
60
+ assert.equal(promiseResolved, false);
61
+ assert.equal(promiseRejected, false);
62
+
63
+ // check the right listener was registered
64
+ assert.calledTwice(mockMC.on);
65
+ assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
66
+ assert.equal(mockMC.on.getCall(1).args[0], Event.ICE_GATHERING_STATE_CHANGED);
67
+ const listener = mockMC.on.getCall(1).args[1];
68
+
69
+ mockMC.getIceGatheringState.returns('complete');
70
+ listener();
71
+
72
+ await clock.tickAsync(ICE_AND_DTLS_CONNECTION_TIMEOUT);
73
+ await testUtils.flushPromises();
74
+
75
+ assert.equal(promiseResolved, false);
76
+ assert.equal(promiseRejected, true);
77
+
78
+ assert.calledTwice(mockMC.off);
79
+ });
80
+
81
+ it('resolves after timeout if connection state reach connected/completed', async () => {
82
+ mockMC.getConnectionState.returns(ConnectionState.Connecting);
83
+ mockMC.getIceGatheringState.returns('gathering');
84
+
85
+ let promiseResolved = false;
86
+ let promiseRejected = false;
87
+
88
+ mediaConnectionAwaiter
89
+ .waitForMediaConnectionConnected()
90
+ .then(() => {
91
+ promiseResolved = true;
92
+ })
93
+ .catch(() => {
94
+ promiseRejected = true;
95
+ });
96
+
97
+ await testUtils.flushPromises();
98
+ assert.equal(promiseResolved, false);
99
+ assert.equal(promiseRejected, false);
100
+
101
+ // check the right listener was registered
102
+ assert.calledTwice(mockMC.on);
103
+ assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
104
+ assert.equal(mockMC.on.getCall(1).args[0], Event.ICE_GATHERING_STATE_CHANGED);
105
+
106
+ mockMC.getConnectionState.returns(ConnectionState.Connected);
107
+
108
+ await clock.tickAsync(ICE_AND_DTLS_CONNECTION_TIMEOUT);
109
+ await testUtils.flushPromises();
110
+
111
+ assert.equal(promiseResolved, true);
112
+ assert.equal(promiseRejected, false);
113
+
114
+ assert.calledTwice(mockMC.off);
115
+ });
116
+
117
+ it(`resolves when media connection reaches "connected" state`, async () => {
118
+ mockMC.getConnectionState.returns(ConnectionState.Connecting);
119
+ mockMC.getIceGatheringState.returns('gathering');
120
+
121
+ const clearTimeoutSpy = sinon.spy(clock, 'clearTimeout');
122
+
123
+ let promiseResolved = false;
124
+ let promiseRejected = false;
125
+
126
+ mediaConnectionAwaiter
127
+ .waitForMediaConnectionConnected()
128
+ .then(() => {
129
+ promiseResolved = true;
130
+ })
131
+ .catch(() => {
132
+ promiseRejected = true;
133
+ });
134
+
135
+ await testUtils.flushPromises();
136
+ assert.equal(promiseResolved, false);
137
+ assert.equal(promiseRejected, false);
138
+
139
+ // check the right listener was registered
140
+ assert.calledTwice(mockMC.on);
141
+ assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
142
+ assert.equal(mockMC.on.getCall(1).args[0], Event.ICE_GATHERING_STATE_CHANGED);
143
+ const listener = mockMC.on.getCall(0).args[1];
144
+
145
+ // call the listener and pretend we are now connected
146
+ mockMC.getConnectionState.returns(ConnectionState.Connected);
147
+ listener();
148
+ await testUtils.flushPromises();
149
+
150
+ assert.equal(promiseResolved, true);
151
+ assert.equal(promiseRejected, false);
152
+
153
+ // check that listener was removed
154
+ assert.calledTwice(mockMC.off);
155
+
156
+ assert.calledOnce(clearTimeoutSpy);
157
+ });
158
+
159
+ it(`ice gathering state update to "gathering" state does not update timer`, async () => {
160
+ mockMC.getConnectionState.returns(ConnectionState.Connecting);
161
+ mockMC.getIceGatheringState.returns('new');
162
+
163
+ const clearTimeoutSpy = sinon.spy(clock, 'clearTimeout');
164
+
165
+ let promiseResolved = false;
166
+ let promiseRejected = false;
167
+
168
+ mediaConnectionAwaiter
169
+ .waitForMediaConnectionConnected()
170
+ .then(() => {
171
+ promiseResolved = true;
172
+ })
173
+ .catch(() => {
174
+ promiseRejected = true;
175
+ });
176
+
177
+ await testUtils.flushPromises();
178
+ assert.equal(promiseResolved, false);
179
+ assert.equal(promiseRejected, false);
180
+
181
+ // check the right listener was registered
182
+ assert.calledTwice(mockMC.on);
183
+ assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
184
+ assert.equal(mockMC.on.getCall(1).args[0], Event.ICE_GATHERING_STATE_CHANGED);
185
+ const listener = mockMC.on.getCall(1).args[1];
186
+
187
+ // call the listener and pretend we are now connected
188
+ mockMC.getIceGatheringState.returns('gathering');
189
+ listener();
190
+
191
+ mockMC.getConnectionState.returns(ConnectionState.Connected);
192
+
193
+ await clock.tickAsync(ICE_AND_DTLS_CONNECTION_TIMEOUT);
194
+ await testUtils.flushPromises();
195
+
196
+ assert.equal(promiseResolved, true);
197
+ assert.equal(promiseRejected, false);
198
+
199
+ // check that listener was removed
200
+ assert.calledTwice(mockMC.off);
201
+
202
+ assert.neverCalledWith(clearTimeoutSpy);
203
+ });
204
+
205
+ it(`ice gathering update to 'complete' state restarts the timer`, async () => {
206
+ mockMC.getConnectionState.returns(ConnectionState.Connecting);
207
+ mockMC.getIceGatheringState.returns('new');
208
+
209
+ const setTimeoutSpy = sinon.spy(clock, 'setTimeout');
210
+ const clearTimeoutSpy = sinon.spy(clock, 'clearTimeout');
211
+
212
+ let promiseResolved = false;
213
+ let promiseRejected = false;
214
+
215
+ mediaConnectionAwaiter
216
+ .waitForMediaConnectionConnected()
217
+ .then(() => {
218
+ promiseResolved = true;
219
+ })
220
+ .catch(() => {
221
+ promiseRejected = true;
222
+ });
223
+
224
+ await testUtils.flushPromises();
225
+ assert.equal(promiseResolved, false);
226
+ assert.equal(promiseRejected, false);
227
+
228
+ assert.calledOnce(setTimeoutSpy);
229
+
230
+ // check the right listener was registered
231
+ assert.calledTwice(mockMC.on);
232
+ assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
233
+ assert.equal(mockMC.on.getCall(1).args[0], Event.ICE_GATHERING_STATE_CHANGED);
234
+ const listener = mockMC.on.getCall(1).args[1];
235
+
236
+ // call the listener and pretend we are now connected
237
+ mockMC.getIceGatheringState.returns('complete');
238
+ listener();
239
+
240
+ assert.calledOnce(clearTimeoutSpy);
241
+ assert.calledTwice(setTimeoutSpy);
242
+
243
+ mockMC.getConnectionState.returns(ConnectionState.Connected);
244
+
245
+ await clock.tickAsync(ICE_AND_DTLS_CONNECTION_TIMEOUT);
246
+ await testUtils.flushPromises();
247
+
248
+ assert.equal(promiseResolved, true);
249
+ assert.equal(promiseRejected, false);
250
+
251
+ // check that listener was removed
252
+ assert.calledTwice(mockMC.off);
253
+ });
254
+
255
+ it(`reject with restart timer once if gathering state is not complete`, async () => {
256
+ mockMC.getConnectionState.returns(ConnectionState.Connecting);
257
+ mockMC.getIceGatheringState.returns('new');
258
+
259
+ const setTimeoutSpy = sinon.spy(clock, 'setTimeout');
260
+ const clearTimeoutSpy = sinon.spy(clock, 'clearTimeout');
261
+
262
+ let promiseResolved = false;
263
+ let promiseRejected = false;
264
+
265
+ mediaConnectionAwaiter
266
+ .waitForMediaConnectionConnected()
267
+ .then(() => {
268
+ promiseResolved = true;
269
+ })
270
+ .catch(() => {
271
+ promiseRejected = true;
272
+ });
273
+
274
+ await testUtils.flushPromises();
275
+ assert.equal(promiseResolved, false);
276
+ assert.equal(promiseRejected, false);
277
+
278
+ // check the right listener was registered
279
+ assert.calledTwice(mockMC.on);
280
+ assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
281
+ assert.equal(mockMC.on.getCall(1).args[0], Event.ICE_GATHERING_STATE_CHANGED);
282
+
283
+ await clock.tickAsync(ICE_AND_DTLS_CONNECTION_TIMEOUT * 2);
284
+ await testUtils.flushPromises();
285
+
286
+ assert.equal(promiseResolved, false);
287
+ assert.equal(promiseRejected, true);
288
+
289
+ // check that listener was removed
290
+ assert.calledTwice(mockMC.off);
291
+
292
+ assert.calledOnce(clearTimeoutSpy);
293
+ assert.calledTwice(setTimeoutSpy);
294
+ });
295
+
296
+ it(`resolves gathering and connection state complete right after`, async () => {
297
+ mockMC.getConnectionState.returns(ConnectionState.Connecting);
298
+ mockMC.getIceGatheringState.returns('new');
299
+
300
+ const setTimeoutSpy = sinon.spy(clock, 'setTimeout');
301
+ const clearTimeoutSpy = sinon.spy(clock, 'clearTimeout');
302
+
303
+ let promiseResolved = false;
304
+ let promiseRejected = false;
305
+
306
+ mediaConnectionAwaiter
307
+ .waitForMediaConnectionConnected()
308
+ .then(() => {
309
+ promiseResolved = true;
310
+ })
311
+ .catch(() => {
312
+ promiseRejected = true;
313
+ });
314
+
315
+ await testUtils.flushPromises();
316
+ assert.equal(promiseResolved, false);
317
+ assert.equal(promiseRejected, false);
318
+
319
+ // check the right listener was registered
320
+ assert.calledTwice(mockMC.on);
321
+ assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
322
+ assert.equal(mockMC.on.getCall(1).args[0], Event.ICE_GATHERING_STATE_CHANGED);
323
+ const connectionStateListener = mockMC.on.getCall(0).args[1];
324
+ const iceGatheringListener = mockMC.on.getCall(1).args[1];
325
+
326
+ mockMC.getIceGatheringState.returns('complete');
327
+ iceGatheringListener();
328
+
329
+ mockMC.getConnectionState.returns(ConnectionState.Connected);
330
+ connectionStateListener();
331
+
332
+ await testUtils.flushPromises();
333
+
334
+ assert.equal(promiseResolved, true);
335
+ assert.equal(promiseRejected, false);
336
+
337
+ // check that listener was removed
338
+ assert.calledTwice(mockMC.off);
339
+
340
+ assert.calledTwice(clearTimeoutSpy);
341
+ assert.calledTwice(setTimeoutSpy);
342
+ });
343
+ });
344
+ });
@@ -7,6 +7,10 @@ import {forEach} from 'lodash';
7
7
  import MockWebex from '@webex/test-helper-mock-webex';
8
8
 
9
9
  describe('createMediaConnection', () => {
10
+ let clock;
11
+ beforeEach(() => {
12
+ clock = sinon.useFakeTimers();
13
+ });
10
14
  const webex = MockWebex();
11
15
 
12
16
  const fakeRoapMediaConnection = {
@@ -45,6 +49,7 @@ describe('createMediaConnection', () => {
45
49
  };
46
50
  afterEach(() => {
47
51
  sinon.restore();
52
+ clock.uninstall()
48
53
  });
49
54
 
50
55
  it('creates a RoapMediaConnection when multistream is disabled', () => {
@@ -165,37 +170,15 @@ describe('createMediaConnection', () => {
165
170
  );
166
171
  });
167
172
 
168
- it('passes empty ICE servers array to MultistreamRoapMediaConnection if turnServerInfo is undefined (multistream enabled)', () => {
169
- const multistreamRoapMediaConnectionConstructorStub = sinon
170
- .stub(internalMediaModule, 'MultistreamRoapMediaConnection')
171
- .returns(fakeRoapMediaConnection);
172
-
173
- Media.createMediaConnection(true, 'debug string', webex, 'meeting id', 'correlationId', {
174
- mediaProperties: {
175
- mediaDirection: {
176
- sendAudio: true,
177
- sendVideo: true,
178
- sendShare: false,
179
- receiveAudio: true,
180
- receiveVideo: true,
181
- receiveShare: true,
182
- },
183
- },
184
- });
185
- assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
186
- assert.calledWith(
187
- multistreamRoapMediaConnectionConstructorStub,
188
- {
189
- iceServers: [],
190
- },
191
- 'meeting id'
192
- );
193
-
194
- it('does not pass bundlePolicy to MultistreamRoapMediaConnection if bundlePolicy is undefined', () => {
173
+ [
174
+ {testCase: 'turnServerInfo is undefined', turnServerInfo: undefined},
175
+ {testCase: 'turnServerInfo.url is empty string', turnServerInfo: {url: '', username: 'turn username', password: 'turn password'}},
176
+ ].forEach(({testCase, turnServerInfo}) => {
177
+ it(`passes empty ICE servers array to MultistreamRoapMediaConnection if ${testCase} (multistream enabled)`, () => {
195
178
  const multistreamRoapMediaConnectionConstructorStub = sinon
196
179
  .stub(internalMediaModule, 'MultistreamRoapMediaConnection')
197
180
  .returns(fakeRoapMediaConnection);
198
-
181
+
199
182
  Media.createMediaConnection(true, 'debug string', webex, 'meeting id', 'correlationId', {
200
183
  mediaProperties: {
201
184
  mediaDirection: {
@@ -207,7 +190,7 @@ describe('createMediaConnection', () => {
207
190
  receiveShare: true,
208
191
  },
209
192
  },
210
- bundlePolicy: undefined,
193
+ turnServerInfo,
211
194
  });
212
195
  assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
213
196
  assert.calledWith(
@@ -216,75 +199,108 @@ describe('createMediaConnection', () => {
216
199
  iceServers: [],
217
200
  },
218
201
  'meeting id'
219
- );
202
+ );
220
203
  });
221
204
  });
222
-
223
- it('passes empty ICE servers array to RoapMediaConnection if turnServerInfo is undefined (multistream disabled)', () => {
224
- const roapMediaConnectionConstructorStub = sinon
225
- .stub(internalMediaModule, 'RoapMediaConnection')
205
+
206
+ it('does not pass bundlePolicy to MultistreamRoapMediaConnection if bundlePolicy is undefined', () => {
207
+ const multistreamRoapMediaConnectionConstructorStub = sinon
208
+ .stub(internalMediaModule, 'MultistreamRoapMediaConnection')
226
209
  .returns(fakeRoapMediaConnection);
227
210
 
228
- StaticConfig.set({bandwidth: {audio: 123, video: 456, startBitrate: 999}});
229
-
230
- const ENABLE_EXTMAP = false;
231
- const ENABLE_RTX = true;
232
-
233
- Media.createMediaConnection(false, 'some debug id', webex, 'meeting id', 'correlationId', {
211
+ Media.createMediaConnection(true, 'debug string', webex, 'meeting id', 'correlationId', {
234
212
  mediaProperties: {
235
213
  mediaDirection: {
236
214
  sendAudio: true,
237
215
  sendVideo: true,
238
- sendShare: true,
216
+ sendShare: false,
239
217
  receiveAudio: true,
240
218
  receiveVideo: true,
241
219
  receiveShare: true,
242
220
  },
243
- audioStream: fakeAudioStream,
244
- videoStream: null,
245
- shareVideoStream: fakeShareVideoStream,
246
- shareAudioStream: fakeShareAudioStream,
247
221
  },
248
- remoteQualityLevel: 'HIGH',
249
- enableRtx: ENABLE_RTX,
250
- enableExtmap: ENABLE_EXTMAP,
251
- turnServerInfo: undefined,
222
+ bundlePolicy: undefined,
252
223
  });
253
- assert.calledOnce(roapMediaConnectionConstructorStub);
224
+ assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
254
225
  assert.calledWith(
255
- roapMediaConnectionConstructorStub,
226
+ multistreamRoapMediaConnectionConstructorStub,
256
227
  {
257
228
  iceServers: [],
258
- skipInactiveTransceivers: false,
259
- requireH264: true,
260
- sdpMunging: {
261
- convertPort9to0: false,
262
- addContentSlides: true,
263
- bandwidthLimits: {
264
- audio: 123,
265
- video: 456,
229
+ },
230
+ 'meeting id'
231
+ );
232
+ });
233
+
234
+ [
235
+ {testCase: 'turnServerInfo is undefined', turnServerInfo: undefined},
236
+ {testCase: 'turnServerInfo.url is empty string', turnServerInfo: {url: '', username: 'turn username', password: 'turn password'}},
237
+ ].forEach(({testCase, turnServerInfo}) => {
238
+ it(`passes empty ICE servers array to RoapMediaConnection if ${testCase} (multistream disabled)`, () => {
239
+ const roapMediaConnectionConstructorStub = sinon
240
+ .stub(internalMediaModule, 'RoapMediaConnection')
241
+ .returns(fakeRoapMediaConnection);
242
+
243
+ StaticConfig.set({bandwidth: {audio: 123, video: 456, startBitrate: 999}});
244
+
245
+ const ENABLE_EXTMAP = false;
246
+ const ENABLE_RTX = true;
247
+
248
+ Media.createMediaConnection(false, 'some debug id', webex, 'meeting id', 'correlationId', {
249
+ mediaProperties: {
250
+ mediaDirection: {
251
+ sendAudio: true,
252
+ sendVideo: true,
253
+ sendShare: true,
254
+ receiveAudio: true,
255
+ receiveVideo: true,
256
+ receiveShare: true,
266
257
  },
267
- startBitrate: 999,
268
- periodicKeyframes: 20,
269
- disableExtmap: !ENABLE_EXTMAP,
270
- disableRtx: !ENABLE_RTX,
258
+ audioStream: fakeAudioStream,
259
+ videoStream: null,
260
+ shareVideoStream: fakeShareVideoStream,
261
+ shareAudioStream: fakeShareAudioStream,
271
262
  },
272
- },
273
- {
274
- localTracks: {
275
- audio: fakeTrack,
276
- video: undefined,
277
- screenShareVideo: fakeTrack,
278
- screenShareAudio: fakeTrack,
263
+ remoteQualityLevel: 'HIGH',
264
+ enableRtx: ENABLE_RTX,
265
+ enableExtmap: ENABLE_EXTMAP,
266
+ turnServerInfo,
267
+ });
268
+ assert.calledOnce(roapMediaConnectionConstructorStub);
269
+ assert.calledWith(
270
+ roapMediaConnectionConstructorStub,
271
+ {
272
+ iceServers: [],
273
+ skipInactiveTransceivers: false,
274
+ requireH264: true,
275
+ sdpMunging: {
276
+ convertPort9to0: false,
277
+ addContentSlides: true,
278
+ bandwidthLimits: {
279
+ audio: 123,
280
+ video: 456,
281
+ },
282
+ startBitrate: 999,
283
+ periodicKeyframes: 20,
284
+ disableExtmap: !ENABLE_EXTMAP,
285
+ disableRtx: !ENABLE_RTX,
286
+ },
279
287
  },
280
- direction: {
281
- audio: 'sendrecv',
282
- video: 'sendrecv',
283
- screenShareVideo: 'sendrecv',
288
+ {
289
+ localTracks: {
290
+ audio: fakeTrack,
291
+ video: undefined,
292
+ screenShareVideo: fakeTrack,
293
+ screenShareAudio: fakeTrack,
294
+ },
295
+ direction: {
296
+ audio: 'sendrecv',
297
+ video: 'sendrecv',
298
+ screenShareVideo: 'sendrecv',
299
+ },
300
+ remoteQualityLevel: 'HIGH',
284
301
  },
285
- remoteQualityLevel: 'HIGH',
286
- },
287
- 'some debug id'
288
- );
302
+ 'some debug id'
303
+ );
304
+ });
289
305
  });
290
306
  });
@@ -1,11 +1,10 @@
1
1
  import {assert} from '@webex/test-helper-chai';
2
2
  import sinon from 'sinon';
3
- import {ConnectionState, Event} from '@webex/internal-media-core';
3
+ import {ConnectionState} from '@webex/internal-media-core';
4
4
  import MediaProperties from '@webex/plugin-meetings/src/media/properties';
5
- import MediaUtil from '@webex/plugin-meetings/src/media/util';
6
5
  import testUtils from '../../../utils/testUtils';
7
- import {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '@webex/plugin-meetings/src/constants';
8
6
  import {Defer} from '@webex/common';
7
+ import MediaConnectionAwaiter from '../../../../src/media/MediaConnectionAwaiter';
9
8
 
10
9
  describe('MediaProperties', () => {
11
10
  let mediaProperties;
@@ -31,80 +30,27 @@ describe('MediaProperties', () => {
31
30
  sinon.restore();
32
31
  });
33
32
  describe('waitForMediaConnectionConnected', () => {
34
- it('resolves immediately if ice state is connected', async () => {
35
- await mediaProperties.waitForMediaConnectionConnected();
36
- });
37
- it('rejects after timeout if ice state does not reach connected/completed', async () => {
38
- mockMC.getConnectionState.returns(ConnectionState.Connecting);
39
-
40
- let promiseResolved = false;
41
- let promiseRejected = false;
42
-
43
- mediaProperties
44
- .waitForMediaConnectionConnected()
45
- .then(() => {
46
- promiseResolved = true;
47
- })
48
- .catch(() => {
49
- promiseRejected = true;
50
- });
51
-
52
- assert.equal(promiseResolved, false);
53
- assert.equal(promiseRejected, false);
54
-
55
- await clock.tickAsync(ICE_AND_DTLS_CONNECTION_TIMEOUT);
56
- await testUtils.flushPromises();
33
+ it('resolves if media connection is connected', async () => {
34
+ const waitForMediaConnectionConnectedResult = new Defer();
57
35
 
58
- assert.equal(promiseResolved, false);
59
- assert.equal(promiseRejected, true);
36
+ sinon
37
+ .stub(MediaConnectionAwaiter.prototype, 'waitForMediaConnectionConnected')
38
+ .returns(waitForMediaConnectionConnectedResult.promise);
60
39
 
61
- // check that listener was registered and removed
62
- assert.calledOnce(mockMC.on);
63
- assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
64
- const listener = mockMC.on.getCall(0).args[1];
40
+ waitForMediaConnectionConnectedResult.resolve();
65
41
 
66
- assert.calledOnce(mockMC.off);
67
- assert.calledWith(mockMC.off, Event.CONNECTION_STATE_CHANGED, listener);
42
+ await mediaProperties.waitForMediaConnectionConnected();
68
43
  });
44
+ it('rejects if media connection is not connected', async () => {
45
+ const waitForMediaConnectionConnectedResult = new Defer();
69
46
 
70
- it(`resolves when media connection reaches "connected" state`, async () => {
71
- mockMC.getConnectionState.returns(ConnectionState.Connecting);
72
-
73
- const clearTimeoutSpy = sinon.spy(clock, 'clearTimeout');
74
-
75
- let promiseResolved = false;
76
- let promiseRejected = false;
77
-
78
- mediaProperties
79
- .waitForMediaConnectionConnected()
80
- .then(() => {
81
- promiseResolved = true;
82
- })
83
- .catch(() => {
84
- promiseRejected = true;
85
- });
86
-
87
- assert.equal(promiseResolved, false);
88
- assert.equal(promiseRejected, false);
89
-
90
- // check the right listener was registered
91
- assert.calledOnce(mockMC.on);
92
- assert.equal(mockMC.on.getCall(0).args[0], Event.CONNECTION_STATE_CHANGED);
93
- const listener = mockMC.on.getCall(0).args[1];
94
-
95
- // call the listener and pretend we are now connected
96
- mockMC.getConnectionState.returns(ConnectionState.Connected);
97
- listener();
98
- await testUtils.flushPromises();
99
-
100
- assert.equal(promiseResolved, true);
101
- assert.equal(promiseRejected, false);
47
+ sinon
48
+ .stub(MediaConnectionAwaiter.prototype, 'waitForMediaConnectionConnected')
49
+ .returns(waitForMediaConnectionConnectedResult.promise);
102
50
 
103
- // check that listener was removed
104
- assert.calledOnce(mockMC.off);
105
- assert.calledWith(mockMC.off, Event.CONNECTION_STATE_CHANGED, listener);
51
+ waitForMediaConnectionConnectedResult.reject();
106
52
 
107
- assert.calledOnce(clearTimeoutSpy);
53
+ await assert.isRejected(mediaProperties.waitForMediaConnectionConnected());
108
54
  });
109
55
  });
110
56