@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
@@ -1,11 +1,14 @@
1
1
  import {assert} from '@webex/test-helper-chai';
2
2
  import MockWebex from '@webex/test-helper-mock-webex';
3
3
  import sinon from 'sinon';
4
- import Reachability, {ReachabilityResults, ReachabilityResultsForBackend} from '@webex/plugin-meetings/src/reachability/';
4
+ import Reachability, {
5
+ ReachabilityResults,
6
+ ReachabilityResultsForBackend,
7
+ } from '@webex/plugin-meetings/src/reachability/';
5
8
  import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
6
9
  import * as ClusterReachabilityModule from '@webex/plugin-meetings/src/reachability/clusterReachability';
7
10
 
8
- import { IP_VERSION } from '@webex/plugin-meetings/src/constants';
11
+ import {IP_VERSION} from '@webex/plugin-meetings/src/constants';
9
12
 
10
13
  describe('isAnyPublicClusterReachable', () => {
11
14
  let webex;
@@ -36,19 +39,31 @@ describe('isAnyPublicClusterReachable', () => {
36
39
  };
37
40
 
38
41
  it('returns true when udp is reachable', async () => {
39
- await checkIsClusterReachable({x: {udp: {result: 'reachable'}, tcp: {result: 'unreachable'}}}, true);
42
+ await checkIsClusterReachable(
43
+ {x: {udp: {result: 'reachable'}, tcp: {result: 'unreachable'}}},
44
+ true
45
+ );
40
46
  });
41
47
 
42
48
  it('returns true when tcp is reachable', async () => {
43
- await checkIsClusterReachable({x: {udp: {result: 'unreachable'}, tcp: {result: 'reachable'}}}, true);
49
+ await checkIsClusterReachable(
50
+ {x: {udp: {result: 'unreachable'}, tcp: {result: 'reachable'}}},
51
+ true
52
+ );
44
53
  });
45
54
 
46
55
  it('returns true when both tcp and udp are reachable', async () => {
47
- await checkIsClusterReachable({x: {udp: {result: 'reachable'}, tcp: {result: 'reachable'}}}, true);
56
+ await checkIsClusterReachable(
57
+ {x: {udp: {result: 'reachable'}, tcp: {result: 'reachable'}}},
58
+ true
59
+ );
48
60
  });
49
61
 
50
62
  it('returns false when both tcp and udp are unreachable', async () => {
51
- await checkIsClusterReachable({x: {udp: {result: 'unreachable'}, tcp: {result: 'unreachable'}}}, false);
63
+ await checkIsClusterReachable(
64
+ {x: {udp: {result: 'unreachable'}, tcp: {result: 'unreachable'}}},
65
+ false
66
+ );
52
67
  });
53
68
 
54
69
  it('returns false when reachability result is empty', async () => {
@@ -61,60 +76,69 @@ describe('isAnyPublicClusterReachable', () => {
61
76
 
62
77
  describe('ignores video mesh reachability', () => {
63
78
  it('returns false if there are no public cluster results, only video mesh', async () => {
64
- await checkIsClusterReachable({
65
- x: {
66
- udp: {result: 'reachable'},
67
- tcp: {result: 'reachable'},
68
- isVideoMesh: true,
69
- },
70
- y: {
71
- udp: {result: 'unreachable'},
72
- tcp: {result: 'reachable'},
73
- isVideoMesh: true,
74
- }
75
- }, false);
79
+ await checkIsClusterReachable(
80
+ {
81
+ x: {
82
+ udp: {result: 'reachable'},
83
+ tcp: {result: 'reachable'},
84
+ isVideoMesh: true,
85
+ },
86
+ y: {
87
+ udp: {result: 'unreachable'},
88
+ tcp: {result: 'reachable'},
89
+ isVideoMesh: true,
90
+ },
91
+ },
92
+ false
93
+ );
76
94
  });
77
95
 
78
96
  it('returns false if there public cluster reachability failed, only video mesh succeeded', async () => {
79
- await checkIsClusterReachable({
80
- x: {
81
- udp: {result: 'unreachable'},
82
- tcp: {result: 'reachable'},
83
- isVideoMesh: true,
84
- },
85
- y: {
86
- udp: {result: 'reachable'},
87
- tcp: {result: 'unreachable'},
88
- isVideoMesh: true,
89
- },
90
- publicOne: {
91
- udp: {result: 'unreachable'},
92
- tcp: {result: 'unreachable'},
93
- isVideoMesh: false,
94
- }
95
- }, false);
97
+ await checkIsClusterReachable(
98
+ {
99
+ x: {
100
+ udp: {result: 'unreachable'},
101
+ tcp: {result: 'reachable'},
102
+ isVideoMesh: true,
103
+ },
104
+ y: {
105
+ udp: {result: 'reachable'},
106
+ tcp: {result: 'unreachable'},
107
+ isVideoMesh: true,
108
+ },
109
+ publicOne: {
110
+ udp: {result: 'unreachable'},
111
+ tcp: {result: 'unreachable'},
112
+ isVideoMesh: false,
113
+ },
114
+ },
115
+ false
116
+ );
96
117
  });
97
118
 
98
119
  it('returns true if there is at least 1 public cluster result, while video mesh is not reachable', async () => {
99
- await checkIsClusterReachable({
100
- x: {
101
- udp: {result: 'reachable'},
102
- tcp: {result: 'reachable'},
103
- isVideoMesh: true,
104
- },
105
- y: {
106
- udp: {result: 'unreachable'},
107
- tcp: {result: 'reachable'},
108
- isVideoMesh: true,
109
- },
110
- publicOne: {
111
- udp: {result: 'unreachable'},
112
- tcp: {result: 'reachable'},
113
- isVideoMesh: false,
114
- }
115
- }, true);
120
+ await checkIsClusterReachable(
121
+ {
122
+ x: {
123
+ udp: {result: 'reachable'},
124
+ tcp: {result: 'reachable'},
125
+ isVideoMesh: true,
126
+ },
127
+ y: {
128
+ udp: {result: 'unreachable'},
129
+ tcp: {result: 'reachable'},
130
+ isVideoMesh: true,
131
+ },
132
+ publicOne: {
133
+ udp: {result: 'unreachable'},
134
+ tcp: {result: 'reachable'},
135
+ isVideoMesh: false,
136
+ },
137
+ },
138
+ true
139
+ );
116
140
  });
117
- })
141
+ });
118
142
  });
119
143
 
120
144
  describe('gatherReachability', () => {
@@ -244,7 +268,10 @@ describe('gatherReachability', () => {
244
268
  });
245
269
 
246
270
  it('starts ClusterReachability on each media cluster', async () => {
247
- webex.config.meetings.experimental = {enableTcpReachability: true};
271
+ webex.config.meetings.experimental = {
272
+ enableTcpReachability: true,
273
+ enableTlsReachability: true,
274
+ };
248
275
 
249
276
  const getClustersResult = {
250
277
  clusters: {
@@ -284,11 +311,11 @@ describe('gatherReachability', () => {
284
311
  xtls: ['xtls1.1', 'xtls1.2'],
285
312
  isVideoMesh: false,
286
313
  });
287
- // cluster 2 is video mesh, so we should not do TCP reachability on it
314
+ // cluster 2 is video mesh, so we should not do TCP or TLS reachability on it
288
315
  assert.calledWith(clusterReachabilityCtorStub, 'cluster 2', {
289
316
  udp: ['udp2.1', 'udp2.2'],
290
317
  tcp: [],
291
- xtls: ['xtls2.1', 'xtls2.2'],
318
+ xtls: [],
292
319
  isVideoMesh: true,
293
320
  });
294
321
 
@@ -296,7 +323,10 @@ describe('gatherReachability', () => {
296
323
  });
297
324
 
298
325
  it('does not do TCP reachability if it is disabled in config', async () => {
299
- webex.config.meetings.experimental = {enableTcpReachability: false};
326
+ webex.config.meetings.experimental = {
327
+ enableTcpReachability: false,
328
+ enableTlsReachability: true,
329
+ };
300
330
 
301
331
  const getClustersResult = {
302
332
  clusters: {
@@ -329,6 +359,82 @@ describe('gatherReachability', () => {
329
359
  xtls: ['testXTLS1', 'testXTLS2'],
330
360
  });
331
361
  });
362
+
363
+ it('does not do TLS reachability if it is disabled in config', async () => {
364
+ webex.config.meetings.experimental = {
365
+ enableTcpReachability: true,
366
+ enableTlsReachability: false,
367
+ };
368
+
369
+ const getClustersResult = {
370
+ clusters: {
371
+ 'cluster name': {
372
+ udp: ['testUDP1', 'testUDP2'],
373
+ tcp: ['testTCP1', 'testTCP2'],
374
+ xtls: ['testXTLS1', 'testXTLS2'],
375
+ isVideoMesh: false,
376
+ },
377
+ },
378
+ joinCookie: {id: 'id'},
379
+ };
380
+
381
+ const reachability = new Reachability(webex);
382
+
383
+ reachability.reachabilityRequest.getClusters = sinon.stub().returns(getClustersResult);
384
+
385
+ const clusterReachabilityCtorStub = sinon
386
+ .stub(ClusterReachabilityModule, 'ClusterReachability')
387
+ .callsFake(() => ({
388
+ start: sinon.stub().resolves({}),
389
+ }));
390
+
391
+ await reachability.gatherReachability();
392
+
393
+ assert.calledOnceWithExactly(clusterReachabilityCtorStub, 'cluster name', {
394
+ isVideoMesh: false,
395
+ udp: ['testUDP1', 'testUDP2'],
396
+ tcp: ['testTCP1', 'testTCP2'],
397
+ xtls: [], // empty list because TLS is disabled in config
398
+ });
399
+ });
400
+
401
+ it('does not do TCP or TLS reachability if it is disabled in config', async () => {
402
+ webex.config.meetings.experimental = {
403
+ enableTcpReachability: false,
404
+ enableTlsReachability: false,
405
+ };
406
+
407
+ const getClustersResult = {
408
+ clusters: {
409
+ 'cluster name': {
410
+ udp: ['testUDP1', 'testUDP2'],
411
+ tcp: ['testTCP1', 'testTCP2'],
412
+ xtls: ['testXTLS1', 'testXTLS2'],
413
+ isVideoMesh: false,
414
+ },
415
+ },
416
+ joinCookie: {id: 'id'},
417
+ };
418
+
419
+ const reachability = new Reachability(webex);
420
+
421
+ reachability.reachabilityRequest.getClusters = sinon.stub().returns(getClustersResult);
422
+
423
+ const clusterReachabilityCtorStub = sinon
424
+ .stub(ClusterReachabilityModule, 'ClusterReachability')
425
+ .callsFake(() => ({
426
+ start: sinon.stub().resolves({}),
427
+ }));
428
+
429
+ await reachability.gatherReachability();
430
+
431
+ assert.calledOnceWithExactly(clusterReachabilityCtorStub, 'cluster name', {
432
+ isVideoMesh: false,
433
+ udp: ['testUDP1', 'testUDP2'],
434
+ tcp: [], // empty list because TCP is disabled in config
435
+ xtls: [], // empty list because TLS is disabled in config
436
+ });
437
+ });
332
438
  });
333
439
 
334
440
  describe('getReachabilityResults', () => {
@@ -460,10 +566,14 @@ describe('getReachabilityMetrics', () => {
460
566
  reachability_public_udp_failed: 0,
461
567
  reachability_public_tcp_success: 0,
462
568
  reachability_public_tcp_failed: 0,
569
+ reachability_public_xtls_success: 0,
570
+ reachability_public_xtls_failed: 0,
463
571
  reachability_vmn_udp_success: 0,
464
572
  reachability_vmn_udp_failed: 0,
465
573
  reachability_vmn_tcp_success: 0,
466
574
  reachability_vmn_tcp_failed: 0,
575
+ reachability_vmn_xtls_success: 0,
576
+ reachability_vmn_xtls_failed: 0,
467
577
  });
468
578
  });
469
579
 
@@ -523,10 +633,14 @@ describe('getReachabilityMetrics', () => {
523
633
  reachability_public_udp_failed: 2,
524
634
  reachability_public_tcp_success: 2,
525
635
  reachability_public_tcp_failed: 1,
636
+ reachability_public_xtls_success: 0,
637
+ reachability_public_xtls_failed: 0,
526
638
  reachability_vmn_udp_success: 1,
527
639
  reachability_vmn_udp_failed: 0,
528
640
  reachability_vmn_tcp_success: 1,
529
641
  reachability_vmn_tcp_failed: 1,
642
+ reachability_vmn_xtls_success: 0,
643
+ reachability_vmn_xtls_failed: 0,
530
644
  }
531
645
  );
532
646
  });
@@ -562,7 +676,16 @@ describe('getReachabilityMetrics', () => {
562
676
  public5: {
563
677
  udp: {result: 'reachable', latencyInMilliseconds: '400', clientMediaIPs: ['10.10.10.10']},
564
678
  tcp: {result: 'untested'},
565
- xtls: {result: 'untested'},
679
+ xtls: {result: 'unreachable'},
680
+ },
681
+ public6: {
682
+ udp: {result: 'untested'},
683
+ tcp: {result: 'untested'},
684
+ xtls: {
685
+ result: 'reachable',
686
+ latencyInMilliseconds: '200',
687
+ clientMediaIPs: ['10.10.10.10'],
688
+ },
566
689
  },
567
690
  },
568
691
  // expected result:
@@ -571,10 +694,14 @@ describe('getReachabilityMetrics', () => {
571
694
  reachability_public_udp_failed: 1,
572
695
  reachability_public_tcp_success: 1,
573
696
  reachability_public_tcp_failed: 2,
697
+ reachability_public_xtls_success: 1,
698
+ reachability_public_xtls_failed: 1,
574
699
  reachability_vmn_udp_success: 0,
575
700
  reachability_vmn_udp_failed: 0,
576
701
  reachability_vmn_tcp_success: 0,
577
702
  reachability_vmn_tcp_failed: 0,
703
+ reachability_vmn_xtls_success: 0,
704
+ reachability_vmn_xtls_failed: 0,
578
705
  }
579
706
  );
580
707
  });
@@ -611,10 +738,16 @@ describe('getReachabilityMetrics', () => {
611
738
  vmn5: {
612
739
  udp: {result: 'reachable', latencyInMilliseconds: 200, clientMediaIPs: ['10.10.10.10']},
613
740
  tcp: {result: 'unreachable'},
614
- xtls: {result: 'untested'},
741
+ xtls: {result: 'unreachable'},
615
742
  isVideoMesh: true,
616
743
  someOtherField: 'any value',
617
744
  },
745
+ vmn6: {
746
+ udp: {result: 'untested'},
747
+ tcp: {result: 'untested'},
748
+ xtls: {result: 'reachable', latencyInMilliseconds: 100, clientMediaIPs: ['10.10.10.10']},
749
+ isVideoMesh: true,
750
+ },
618
751
  },
619
752
  // expected result:
620
753
  {
@@ -622,11 +755,15 @@ describe('getReachabilityMetrics', () => {
622
755
  reachability_public_udp_failed: 0,
623
756
  reachability_public_tcp_success: 0,
624
757
  reachability_public_tcp_failed: 0,
758
+ reachability_public_xtls_success: 0,
759
+ reachability_public_xtls_failed: 0,
625
760
  reachability_vmn_udp_success: 3,
626
761
  reachability_vmn_udp_failed: 1,
627
762
  reachability_vmn_tcp_success: 1,
628
763
  reachability_vmn_tcp_failed: 3,
764
+ reachability_vmn_xtls_success: 1,
765
+ reachability_vmn_xtls_failed: 1,
629
766
  }
630
767
  );
631
768
  });
632
- });
769
+ });
@@ -4,6 +4,7 @@ import MockWebex from '@webex/test-helper-mock-webex';
4
4
  import Meetings from '@webex/plugin-meetings';
5
5
  import ReachabilityRequest from '@webex/plugin-meetings/src/reachability/request';
6
6
  import {IP_VERSION} from '@webex/plugin-meetings/src/constants';
7
+ import {NewMetrics} from '@webex/internal-plugin-metrics';
7
8
 
8
9
 
9
10
  describe('plugin-meetings/reachability', () => {
@@ -14,6 +15,7 @@ describe('plugin-meetings/reachability', () => {
14
15
  webex = new MockWebex({
15
16
  children: {
16
17
  meetings: Meetings,
18
+ newMetrics: NewMetrics
17
19
  },
18
20
  });
19
21
 
@@ -22,19 +24,25 @@ describe('plugin-meetings/reachability', () => {
22
24
  regionCode: 'WEST-COAST',
23
25
  };
24
26
 
25
- webex.internal = {
26
- services: {
27
- get: sinon.mock().returns('locusUrl'),
28
- waitForCatalog: sinon.mock().returns(Promise.resolve({})),
29
- },
27
+ webex.internal.services = {
28
+ get: sinon.mock().returns('locusUrl'),
29
+ waitForCatalog: sinon.mock().returns(Promise.resolve({})),
30
30
  };
31
31
 
32
-
33
32
  reachabilityRequest = new ReachabilityRequest(webex);
34
33
 
35
34
  });
36
35
 
37
36
  describe('#getClusters', () => {
37
+
38
+ beforeEach(() => {
39
+ sinon.spy(webex.internal.newMetrics.callDiagnosticLatencies, 'measureLatency');
40
+ });
41
+
42
+ afterEach(() => {
43
+ sinon.restore();
44
+ });
45
+
38
46
  it('sends a GET request with the correct params', async () => {
39
47
  webex.request = sinon.mock().returns(Promise.resolve({
40
48
  body: {
@@ -49,7 +57,6 @@ describe('plugin-meetings/reachability', () => {
49
57
  }));
50
58
 
51
59
  const res = await reachabilityRequest.getClusters(IP_VERSION.only_ipv4);
52
-
53
60
  const requestParams = webex.request.getCall(0).args[0];
54
61
 
55
62
  assert.equal(requestParams.method, 'GET');
@@ -63,6 +70,7 @@ describe('plugin-meetings/reachability', () => {
63
70
  });
64
71
  assert.deepEqual(res.clusters.clusterId, {udp: "testUDP", isVideoMesh: true})
65
72
  assert.deepEqual(res.joinCookie, {anycastEntryPoint: "aws-eu-west-1"})
73
+ assert.calledOnceWithExactly(webex.internal.newMetrics.callDiagnosticLatencies.measureLatency, sinon.match.func, 'internal.get.cluster.time');
66
74
  });
67
75
  });
68
76
  });
@@ -1,6 +1,9 @@
1
1
  import {assert} from '@webex/test-helper-chai';
2
2
 
3
- import {convertStunUrlToTurn} from '@webex/plugin-meetings/src/reachability/util';
3
+ import {
4
+ convertStunUrlToTurn,
5
+ convertStunUrlToTurnTls,
6
+ } from '@webex/plugin-meetings/src/reachability/util';
4
7
 
5
8
  describe('plugin-meetings/src/reachability/util', () => {
6
9
  describe('#convertStunUrlToTurn()', () => {
@@ -34,7 +37,34 @@ describe('plugin-meetings/src/reachability/util', () => {
34
37
  });
35
38
 
36
39
  it('show fail if stunUrl is not a STUN url', () => {
37
- assert.throws(() => convertStunUrlToTurn('http://webex.com', 'tcp'), 'Not a STUN URL: http://webex.com');
40
+ assert.throws(
41
+ () => convertStunUrlToTurn('http://webex.com', 'tcp'),
42
+ 'Not a STUN URL: http://webex.com'
43
+ );
44
+ });
45
+ });
46
+
47
+ describe('#convertStunUrlToTurnTls()', () => {
48
+ it(`should convert to a turns url`, () => {
49
+ const turnsUrl = convertStunUrlToTurnTls(
50
+ 'stun:external-media91.public.wjfkm-a-10.prod.infra.webex.com:443'
51
+ );
52
+
53
+ assert.equal(
54
+ turnsUrl,
55
+ 'turns:external-media91.public.wjfkm-a-10.prod.infra.webex.com:443?transport=tcp'
56
+ );
57
+ });
58
+
59
+ it('show fail if stunUrl is not a valid url', () => {
60
+ assert.throws(() => convertStunUrlToTurn('not a url', 'tcp'), 'Invalid URL: not a url');
61
+ });
62
+
63
+ it('show fail if stunUrl is not a STUN url', () => {
64
+ assert.throws(
65
+ () => convertStunUrlToTurn('http://webex.com', 'tcp'),
66
+ 'Not a STUN URL: http://webex.com'
67
+ );
38
68
  });
39
69
  });
40
70
  });
@@ -144,6 +144,34 @@ describe('plugin-meetings', () => {
144
144
  });
145
145
  });
146
146
 
147
+ // this can happen when we land on a video mesh node
148
+ it('does not use TURN server if TURN url is an empty string', async () => {
149
+ const rm = new ReconnectionManager(fakeMeeting);
150
+
151
+ fakeMeeting.roap.doTurnDiscovery.resolves({
152
+ turnServerInfo: {
153
+ url: '',
154
+ username: 'whatever',
155
+ password: 'whatever',
156
+ },
157
+ turnDiscoverySkippedReason: undefined,
158
+ });
159
+
160
+ await rm.reconnect();
161
+
162
+ assert.calledOnce(fakeMeeting.roap.doTurnDiscovery);
163
+ assert.calledWith(fakeMeeting.roap.doTurnDiscovery, fakeMeeting, true, true);
164
+ assert.calledOnce(fakeMediaConnection.reconnect);
165
+ assert.calledWith(fakeMediaConnection.reconnect, []);
166
+
167
+ assert.calledWith(fakeMeeting.webex.internal.newMetrics.submitClientEvent, {
168
+ name: 'client.media.reconnecting',
169
+ options: {
170
+ meetingId: rm.meeting.id,
171
+ },
172
+ });
173
+ });
174
+
147
175
  it('does not clear previous requests and re-request media for non-multistream meetings', async () => {
148
176
  fakeMeeting.isMultistream = false;
149
177
  const rm = new ReconnectionManager(fakeMeeting);
@@ -3,7 +3,6 @@ import sinon from 'sinon';
3
3
  import {assert} from '@webex/test-helper-chai';
4
4
  import {HTTP_VERBS, SELF_POLICY} from '@webex/plugin-meetings/src/constants';
5
5
 
6
-
7
6
  describe('plugin-meetings', () => {
8
7
  describe('recording-controller tests', () => {
9
8
  describe('index', () => {
@@ -13,15 +13,23 @@ import BEHAVIORAL_METRICS from '@webex/plugin-meetings/src/metrics/constants';
13
13
  import { IP_VERSION } from '../../../../src/constants';
14
14
 
15
15
  describe('Roap', () => {
16
+ let webex;
17
+
18
+ const RESULT = {something: 'some value'};
19
+ const meeting = {id: 'some meeting id'} as Meeting;
20
+
21
+ beforeEach(() => {
22
+ webex = new MockWebex({});
23
+ });
24
+
25
+ afterEach(() => {
26
+ sinon.restore();
27
+ });
28
+
16
29
  describe('doTurnDiscovery', () => {
17
30
  [false, true].forEach(function (isReconnecting) {
18
31
  [false, true, undefined].forEach(function (isForced) {
19
32
  it(`calls this.turnDiscovery.doTurnDiscovery() and forwards all the arguments when isReconnecting = ${isReconnecting} and isForced = ${isForced}`, async () => {
20
- const webex = new MockWebex({});
21
-
22
- const RESULT = {something: 'some value'};
23
- const meeting = {id: 'some meeting id'} as Meeting;
24
-
25
33
  const doTurnDiscoveryStub = sinon
26
34
  .stub(TurnDiscovery.prototype, 'doTurnDiscovery')
27
35
  .resolves(RESULT);
@@ -32,11 +40,58 @@ describe('Roap', () => {
32
40
 
33
41
  assert.calledOnceWithExactly(doTurnDiscoveryStub, meeting, isReconnecting, isForced);
34
42
  assert.deepEqual(result, RESULT);
43
+ });
44
+ });
45
+ });
46
+
47
+ describe('generateTurnDiscoveryRequestMessage', () => {
48
+ [false, true].forEach(function (isForced) {
49
+ it(`calls this.turnDiscovery.generateTurnDiscoveryRequestMessage with isForced=${isForced}`, async () => {
50
+ const generateTurnDiscoveryRequestMessageStub = sinon
51
+ .stub(TurnDiscovery.prototype, 'generateTurnDiscoveryRequestMessage')
52
+ .resolves(RESULT);
53
+
54
+ const roap = new Roap({}, {parent: webex});
35
55
 
36
- sinon.restore();
56
+ const result = await roap.generateTurnDiscoveryRequestMessage(meeting, isForced);
57
+
58
+ assert.calledOnceWithExactly(generateTurnDiscoveryRequestMessageStub, meeting, isForced);
59
+ assert.deepEqual(result, RESULT);
37
60
  });
38
61
  });
39
62
  });
63
+
64
+ describe('handleTurnDiscoveryHttpResponse', () => {
65
+ it('calls this.turnDiscovery.handleTurnDiscoveryHttpResponse', async () => {
66
+ const handleTurnDiscoveryHttpResponseStub = sinon
67
+ .stub(TurnDiscovery.prototype, 'handleTurnDiscoveryHttpResponse')
68
+ .resolves(RESULT);
69
+
70
+ const httpReponse = {some: 'http response'};
71
+
72
+ const roap = new Roap({}, {parent: webex});
73
+
74
+ const result = await roap.handleTurnDiscoveryHttpResponse(meeting, httpReponse);
75
+
76
+ assert.calledOnceWithExactly(handleTurnDiscoveryHttpResponseStub, meeting, httpReponse);
77
+ assert.deepEqual(result, RESULT);
78
+ });
79
+ });
80
+
81
+ describe('abortTurnDiscovery', () => {
82
+ it('calls this.turnDiscovery.abort', async () => {
83
+ const abortStub = sinon
84
+ .stub(TurnDiscovery.prototype, 'abort')
85
+ .returns(RESULT);
86
+
87
+ const roap = new Roap({}, {parent: webex});
88
+
89
+ const result = await roap.abortTurnDiscovery();
90
+
91
+ assert.calledOnceWithExactly(abortStub);
92
+ assert.deepEqual(result, RESULT);
93
+ });
94
+ });
40
95
  });
41
96
 
42
97
  describe('sendRoapMediaRequest', () => {