@webex/plugin-meetings 2.60.1-next.9 → 2.60.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/README.md +8 -58
  2. package/dist/common/browser-detection.js +3 -2
  3. package/dist/common/browser-detection.js.map +1 -1
  4. package/dist/common/collection.js +4 -3
  5. package/dist/common/collection.js.map +1 -1
  6. package/dist/common/config.js +2 -1
  7. package/dist/common/config.js.map +1 -1
  8. package/dist/common/errors/captcha-error.js +2 -1
  9. package/dist/common/errors/captcha-error.js.map +1 -1
  10. package/dist/common/errors/intent-to-join.js +2 -1
  11. package/dist/common/errors/intent-to-join.js.map +1 -1
  12. package/dist/common/errors/join-meeting.js +2 -1
  13. package/dist/common/errors/join-meeting.js.map +1 -1
  14. package/dist/common/errors/media.js +2 -1
  15. package/dist/common/errors/media.js.map +1 -1
  16. package/dist/common/errors/parameter.js +4 -3
  17. package/dist/common/errors/parameter.js.map +1 -1
  18. package/dist/common/errors/password-error.js +2 -1
  19. package/dist/common/errors/password-error.js.map +1 -1
  20. package/dist/common/errors/permission.js +2 -1
  21. package/dist/common/errors/permission.js.map +1 -1
  22. package/dist/common/errors/{reclaim-host-role-errors.js → reclaim-host-role-error.js} +11 -7
  23. package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
  24. package/dist/common/errors/reconnection-in-progress.js +2 -1
  25. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  26. package/dist/common/errors/reconnection.js +2 -1
  27. package/dist/common/errors/reconnection.js.map +1 -1
  28. package/dist/common/errors/stats.js +2 -1
  29. package/dist/common/errors/stats.js.map +1 -1
  30. package/dist/common/errors/webex-errors.d.ts +8 -20
  31. package/dist/common/errors/webex-errors.js +28 -48
  32. package/dist/common/errors/webex-errors.js.map +1 -1
  33. package/dist/common/errors/webex-meetings-error.js +2 -1
  34. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  35. package/dist/common/events/events-scope.js +2 -1
  36. package/dist/common/events/events-scope.js.map +1 -1
  37. package/dist/common/events/events.js +2 -1
  38. package/dist/common/events/events.js.map +1 -1
  39. package/dist/common/events/trigger-proxy.js +2 -1
  40. package/dist/common/events/trigger-proxy.js.map +1 -1
  41. package/dist/common/events/util.js +2 -1
  42. package/dist/common/events/util.js.map +1 -1
  43. package/dist/common/logs/logger-config.js +2 -1
  44. package/dist/common/logs/logger-config.js.map +1 -1
  45. package/dist/common/logs/logger-proxy.js +3 -2
  46. package/dist/common/logs/logger-proxy.js.map +1 -1
  47. package/dist/common/logs/request.d.ts +1 -3
  48. package/dist/common/logs/request.js +5 -8
  49. package/dist/common/logs/request.js.map +1 -1
  50. package/dist/common/queue.d.ts +7 -9
  51. package/dist/common/queue.js +9 -22
  52. package/dist/common/queue.js.map +1 -1
  53. package/dist/config.d.ts +7 -6
  54. package/dist/config.js +10 -8
  55. package/dist/config.js.map +1 -1
  56. package/dist/constants.d.ts +100 -234
  57. package/dist/constants.js +444 -433
  58. package/dist/constants.js.map +1 -1
  59. package/dist/controls-options-manager/constants.js +6 -3
  60. package/dist/controls-options-manager/constants.js.map +1 -1
  61. package/dist/controls-options-manager/enums.d.ts +1 -11
  62. package/dist/controls-options-manager/enums.js +6 -15
  63. package/dist/controls-options-manager/enums.js.map +1 -1
  64. package/dist/controls-options-manager/index.d.ts +1 -17
  65. package/dist/controls-options-manager/index.js +38 -127
  66. package/dist/controls-options-manager/index.js.map +1 -1
  67. package/dist/controls-options-manager/util.d.ts +7 -1
  68. package/dist/controls-options-manager/util.js +19 -309
  69. package/dist/controls-options-manager/util.js.map +1 -1
  70. package/dist/index.d.ts +3 -6
  71. package/dist/index.js +5 -121
  72. package/dist/index.js.map +1 -1
  73. package/dist/locus-info/controlsUtils.js +11 -100
  74. package/dist/locus-info/controlsUtils.js.map +1 -1
  75. package/dist/locus-info/embeddedAppsUtils.js +4 -3
  76. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  77. package/dist/locus-info/fullState.js +2 -1
  78. package/dist/locus-info/fullState.js.map +1 -1
  79. package/dist/locus-info/hostUtils.js +2 -1
  80. package/dist/locus-info/hostUtils.js.map +1 -1
  81. package/dist/locus-info/index.d.ts +4 -57
  82. package/dist/locus-info/index.js +84 -425
  83. package/dist/locus-info/index.js.map +1 -1
  84. package/dist/locus-info/infoUtils.js +5 -13
  85. package/dist/locus-info/infoUtils.js.map +1 -1
  86. package/dist/locus-info/mediaSharesUtils.js +3 -58
  87. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  88. package/dist/locus-info/parser.d.ts +6 -66
  89. package/dist/locus-info/parser.js +80 -253
  90. package/dist/locus-info/parser.js.map +1 -1
  91. package/dist/locus-info/selfUtils.js +13 -97
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.d.ts +0 -2
  94. package/dist/media/index.js +319 -107
  95. package/dist/media/index.js.map +1 -1
  96. package/dist/media/properties.d.ts +53 -38
  97. package/dist/media/properties.js +153 -96
  98. package/dist/media/properties.js.map +1 -1
  99. package/dist/media/util.js +22 -1
  100. package/dist/media/util.js.map +1 -1
  101. package/dist/mediaQualityMetrics/config.d.ts +230 -234
  102. package/dist/mediaQualityMetrics/config.js +498 -302
  103. package/dist/mediaQualityMetrics/config.js.map +1 -1
  104. package/dist/meeting/effectsState.d.ts +42 -0
  105. package/dist/meeting/effectsState.js +260 -0
  106. package/dist/meeting/effectsState.js.map +1 -0
  107. package/dist/meeting/in-meeting-actions.d.ts +0 -88
  108. package/dist/meeting/in-meeting-actions.js +3 -94
  109. package/dist/meeting/in-meeting-actions.js.map +1 -1
  110. package/dist/meeting/index.d.ts +520 -705
  111. package/dist/meeting/index.js +3083 -5041
  112. package/dist/meeting/index.js.map +1 -1
  113. package/dist/meeting/muteState.d.ts +25 -93
  114. package/dist/meeting/muteState.js +133 -224
  115. package/dist/meeting/muteState.js.map +1 -1
  116. package/dist/meeting/request.d.ts +47 -82
  117. package/dist/meeting/request.js +199 -304
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/state.js +2 -1
  120. package/dist/meeting/state.js.map +1 -1
  121. package/dist/meeting/util.d.ts +1 -118
  122. package/dist/meeting/util.js +435 -676
  123. package/dist/meeting/util.js.map +1 -1
  124. package/dist/meeting-info/collection.js +4 -3
  125. package/dist/meeting-info/collection.js.map +1 -1
  126. package/dist/meeting-info/index.d.ts +1 -13
  127. package/dist/meeting-info/index.js +7 -74
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.d.ts +1 -31
  130. package/dist/meeting-info/meeting-info-v2.js +63 -200
  131. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  132. package/dist/meeting-info/request.js +2 -1
  133. package/dist/meeting-info/request.js.map +1 -1
  134. package/dist/meeting-info/util.js +3 -2
  135. package/dist/meeting-info/util.js.map +1 -1
  136. package/dist/meeting-info/utilv2.js +41 -39
  137. package/dist/meeting-info/utilv2.js.map +1 -1
  138. package/dist/meetings/collection.d.ts +0 -17
  139. package/dist/meetings/collection.js +4 -42
  140. package/dist/meetings/collection.js.map +1 -1
  141. package/dist/meetings/index.d.ts +20 -114
  142. package/dist/meetings/index.js +133 -540
  143. package/dist/meetings/index.js.map +1 -1
  144. package/dist/meetings/request.js +3 -4
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +6 -107
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.d.ts +1 -13
  149. package/dist/member/index.js +2 -45
  150. package/dist/member/index.js.map +1 -1
  151. package/dist/member/member.types.js +4 -3
  152. package/dist/member/member.types.js.map +1 -1
  153. package/dist/member/util.js +29 -120
  154. package/dist/member/util.js.map +1 -1
  155. package/dist/members/collection.d.ts +0 -5
  156. package/dist/members/collection.js +2 -11
  157. package/dist/members/collection.js.map +1 -1
  158. package/dist/members/index.d.ts +11 -56
  159. package/dist/members/index.js +47 -174
  160. package/dist/members/index.js.map +1 -1
  161. package/dist/members/request.d.ts +11 -67
  162. package/dist/members/request.js +54 -102
  163. package/dist/members/request.js.map +1 -1
  164. package/dist/members/types.js +4 -3
  165. package/dist/members/types.js.map +1 -1
  166. package/dist/members/util.d.ts +1 -214
  167. package/dist/members/util.js +284 -327
  168. package/dist/members/util.js.map +1 -1
  169. package/dist/metrics/config.d.ts +169 -0
  170. package/dist/metrics/config.js +289 -0
  171. package/dist/metrics/config.js.map +1 -0
  172. package/dist/metrics/constants.d.ts +6 -15
  173. package/dist/metrics/constants.js +9 -17
  174. package/dist/metrics/constants.js.map +1 -1
  175. package/dist/metrics/index.d.ts +111 -4
  176. package/dist/metrics/index.js +452 -4
  177. package/dist/metrics/index.js.map +1 -1
  178. package/dist/networkQualityMonitor/index.js +4 -5
  179. package/dist/networkQualityMonitor/index.js.map +1 -1
  180. package/dist/peer-connection-manager/index.d.ts +6 -0
  181. package/dist/peer-connection-manager/index.js +671 -0
  182. package/dist/peer-connection-manager/index.js.map +1 -0
  183. package/dist/peer-connection-manager/util.d.ts +6 -0
  184. package/dist/peer-connection-manager/util.js +110 -0
  185. package/dist/peer-connection-manager/util.js.map +1 -0
  186. package/dist/personal-meeting-room/index.js +3 -2
  187. package/dist/personal-meeting-room/index.js.map +1 -1
  188. package/dist/personal-meeting-room/request.js +3 -2
  189. package/dist/personal-meeting-room/request.js.map +1 -1
  190. package/dist/personal-meeting-room/util.js +2 -1
  191. package/dist/personal-meeting-room/util.js.map +1 -1
  192. package/dist/reachability/index.d.ts +95 -61
  193. package/dist/reachability/index.js +392 -304
  194. package/dist/reachability/index.js.map +1 -1
  195. package/dist/reachability/request.d.ts +3 -7
  196. package/dist/reachability/request.js +10 -18
  197. package/dist/reachability/request.js.map +1 -1
  198. package/dist/reactions/reactions.d.ts +2 -2
  199. package/dist/reactions/reactions.js +6 -4
  200. package/dist/reactions/reactions.js.map +1 -1
  201. package/dist/reactions/reactions.type.d.ts +3 -23
  202. package/dist/reactions/reactions.type.js +23 -21
  203. package/dist/reactions/reactions.type.js.map +1 -1
  204. package/dist/reconnection-manager/index.d.ts +8 -32
  205. package/dist/reconnection-manager/index.js +232 -285
  206. package/dist/reconnection-manager/index.js.map +1 -1
  207. package/dist/recording-controller/enums.js +5 -4
  208. package/dist/recording-controller/enums.js.map +1 -1
  209. package/dist/recording-controller/index.d.ts +1 -15
  210. package/dist/recording-controller/index.js +46 -57
  211. package/dist/recording-controller/index.js.map +1 -1
  212. package/dist/recording-controller/util.d.ts +4 -5
  213. package/dist/recording-controller/util.js +10 -10
  214. package/dist/recording-controller/util.js.map +1 -1
  215. package/dist/roap/collection.d.ts +10 -0
  216. package/dist/roap/collection.js +63 -0
  217. package/dist/roap/collection.js.map +1 -0
  218. package/dist/roap/handler.d.ts +47 -0
  219. package/dist/roap/handler.js +279 -0
  220. package/dist/roap/handler.js.map +1 -0
  221. package/dist/roap/index.d.ts +47 -9
  222. package/dist/roap/index.js +238 -100
  223. package/dist/roap/index.js.map +1 -1
  224. package/dist/roap/request.d.ts +12 -18
  225. package/dist/roap/request.js +180 -126
  226. package/dist/roap/request.js.map +1 -1
  227. package/dist/roap/state.d.ts +9 -0
  228. package/dist/roap/state.js +127 -0
  229. package/dist/roap/state.js.map +1 -0
  230. package/dist/roap/turnDiscovery.d.ts +16 -27
  231. package/dist/roap/turnDiscovery.js +105 -115
  232. package/dist/roap/turnDiscovery.js.map +1 -1
  233. package/dist/roap/util.d.ts +2 -0
  234. package/dist/roap/util.js +76 -0
  235. package/dist/roap/util.js.map +1 -0
  236. package/dist/statsAnalyzer/global.d.ts +83 -1
  237. package/dist/statsAnalyzer/global.js +85 -2
  238. package/dist/statsAnalyzer/global.js.map +1 -1
  239. package/dist/statsAnalyzer/index.d.ts +30 -50
  240. package/dist/statsAnalyzer/index.js +511 -436
  241. package/dist/statsAnalyzer/index.js.map +1 -1
  242. package/dist/statsAnalyzer/mqaUtil.d.ts +6 -8
  243. package/dist/statsAnalyzer/mqaUtil.js +90 -130
  244. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  245. package/dist/transcription/index.js +2 -1
  246. package/dist/transcription/index.js.map +1 -1
  247. package/package.json +26 -39
  248. package/src/common/errors/webex-errors.ts +12 -36
  249. package/src/common/logs/logger-proxy.ts +1 -1
  250. package/src/common/logs/request.ts +1 -5
  251. package/src/common/queue.ts +8 -22
  252. package/src/config.ts +7 -6
  253. package/src/constants.ts +100 -265
  254. package/src/controls-options-manager/enums.ts +0 -12
  255. package/src/controls-options-manager/index.ts +21 -116
  256. package/src/controls-options-manager/util.ts +14 -294
  257. package/src/index.js +15 -0
  258. package/src/locus-info/controlsUtils.ts +0 -110
  259. package/src/locus-info/index.ts +61 -450
  260. package/src/locus-info/infoUtils.ts +2 -14
  261. package/src/locus-info/mediaSharesUtils.ts +0 -64
  262. package/src/locus-info/parser.ts +47 -258
  263. package/src/locus-info/selfUtils.ts +2 -85
  264. package/src/media/index.ts +370 -153
  265. package/src/media/properties.ts +136 -106
  266. package/src/media/util.ts +21 -0
  267. package/src/mediaQualityMetrics/config.ts +377 -244
  268. package/src/meeting/effectsState.ts +209 -0
  269. package/src/meeting/in-meeting-actions.ts +0 -176
  270. package/src/meeting/index.ts +2581 -4306
  271. package/src/meeting/muteState.ts +138 -224
  272. package/src/meeting/request.ts +127 -214
  273. package/src/meeting/util.ts +423 -687
  274. package/src/meeting-info/index.ts +8 -81
  275. package/src/meeting-info/meeting-info-v2.ts +13 -163
  276. package/src/meeting-info/util.ts +1 -1
  277. package/src/meeting-info/utilv2.ts +28 -28
  278. package/src/meetings/collection.ts +0 -33
  279. package/src/meetings/index.ts +136 -531
  280. package/src/meetings/request.ts +0 -2
  281. package/src/meetings/util.ts +5 -116
  282. package/src/member/index.ts +1 -43
  283. package/src/member/util.ts +28 -125
  284. package/src/members/collection.ts +0 -8
  285. package/src/members/index.ts +52 -187
  286. package/src/members/request.ts +27 -87
  287. package/src/members/util.ts +291 -332
  288. package/src/metrics/config.ts +485 -0
  289. package/src/metrics/constants.ts +6 -15
  290. package/src/metrics/index.ts +471 -1
  291. package/src/networkQualityMonitor/index.ts +6 -6
  292. package/src/peer-connection-manager/index.ts +847 -0
  293. package/src/peer-connection-manager/util.ts +119 -0
  294. package/src/reachability/index.ts +347 -246
  295. package/src/reachability/request.ts +8 -17
  296. package/src/reactions/reactions.ts +4 -4
  297. package/src/reactions/reactions.type.ts +4 -30
  298. package/src/reconnection-manager/index.ts +156 -168
  299. package/src/recording-controller/index.ts +3 -20
  300. package/src/recording-controller/util.ts +9 -26
  301. package/src/roap/collection.ts +62 -0
  302. package/src/roap/handler.ts +294 -0
  303. package/src/roap/index.ts +241 -96
  304. package/src/roap/request.ts +148 -74
  305. package/src/roap/state.ts +156 -0
  306. package/src/roap/turnDiscovery.ts +56 -62
  307. package/src/roap/util.ts +100 -0
  308. package/src/statsAnalyzer/global.ts +84 -1
  309. package/src/statsAnalyzer/index.ts +645 -479
  310. package/src/statsAnalyzer/mqaUtil.ts +126 -128
  311. package/test/integration/spec/journey.js +264 -320
  312. package/test/integration/spec/space-meeting.js +4 -77
  313. package/test/unit/spec/common/queue.js +2 -31
  314. package/test/unit/spec/controls-options-manager/index.js +0 -163
  315. package/test/unit/spec/controls-options-manager/util.js +60 -576
  316. package/test/unit/spec/fixture/locus.js +0 -1
  317. package/test/unit/spec/locus-info/controlsUtils.js +30 -323
  318. package/test/unit/spec/locus-info/index.js +15 -1437
  319. package/test/unit/spec/locus-info/infoUtils.js +16 -54
  320. package/test/unit/spec/locus-info/lib/SeqCmp.json +0 -16
  321. package/test/unit/spec/locus-info/lib/selfConstant.js +0 -48
  322. package/test/unit/spec/locus-info/parser.js +35 -116
  323. package/test/unit/spec/locus-info/selfUtils.js +0 -275
  324. package/test/unit/spec/media/properties.ts +84 -75
  325. package/test/unit/spec/meeting/effectsState.js +281 -0
  326. package/test/unit/spec/meeting/in-meeting-actions.ts +0 -86
  327. package/test/unit/spec/meeting/index.js +2313 -8384
  328. package/test/unit/spec/meeting/muteState.js +213 -409
  329. package/test/unit/spec/meeting/request.js +43 -523
  330. package/test/unit/spec/meeting/utils.js +24 -834
  331. package/test/unit/spec/meeting-info/meetinginfov2.js +5 -527
  332. package/test/unit/spec/meeting-info/utilv2.js +0 -21
  333. package/test/unit/spec/meetings/collection.js +0 -26
  334. package/test/unit/spec/meetings/index.js +232 -1445
  335. package/test/unit/spec/meetings/utils.js +2 -202
  336. package/test/unit/spec/member/index.js +9 -32
  337. package/test/unit/spec/member/util.js +61 -499
  338. package/test/unit/spec/members/index.js +5 -394
  339. package/test/unit/spec/members/request.js +27 -206
  340. package/test/unit/spec/members/utils.js +38 -173
  341. package/test/unit/spec/metrics/index.js +50 -1
  342. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  343. package/test/unit/spec/peerconnection-manager/index.js +218 -0
  344. package/test/unit/spec/peerconnection-manager/utils.js +49 -0
  345. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +388 -0
  346. package/test/unit/spec/reachability/index.ts +24 -532
  347. package/test/unit/spec/reconnection-manager/index.js +24 -163
  348. package/test/unit/spec/recording-controller/index.js +218 -293
  349. package/test/unit/spec/recording-controller/util.js +96 -223
  350. package/test/unit/spec/roap/index.ts +77 -187
  351. package/test/unit/spec/roap/turnDiscovery.ts +48 -86
  352. package/test/unit/spec/roap/util.js +30 -0
  353. package/test/unit/spec/stats-analyzer/index.js +165 -644
  354. package/test/utils/testUtils.js +45 -0
  355. package/test/utils/webex-config.js +0 -4
  356. package/test/utils/webex-test-users.js +3 -7
  357. package/dist/annotation/annotation.types.d.ts +0 -42
  358. package/dist/annotation/annotation.types.js +0 -7
  359. package/dist/annotation/annotation.types.js.map +0 -1
  360. package/dist/annotation/constants.d.ts +0 -31
  361. package/dist/annotation/constants.js +0 -41
  362. package/dist/annotation/constants.js.map +0 -1
  363. package/dist/annotation/index.d.ts +0 -117
  364. package/dist/annotation/index.js +0 -357
  365. package/dist/annotation/index.js.map +0 -1
  366. package/dist/breakouts/breakout.d.ts +0 -8
  367. package/dist/breakouts/breakout.js +0 -215
  368. package/dist/breakouts/breakout.js.map +0 -1
  369. package/dist/breakouts/collection.d.ts +0 -5
  370. package/dist/breakouts/collection.js +0 -22
  371. package/dist/breakouts/collection.js.map +0 -1
  372. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  373. package/dist/breakouts/edit-lock-error.js +0 -51
  374. package/dist/breakouts/edit-lock-error.js.map +0 -1
  375. package/dist/breakouts/events.d.ts +0 -8
  376. package/dist/breakouts/events.js +0 -44
  377. package/dist/breakouts/events.js.map +0 -1
  378. package/dist/breakouts/index.d.ts +0 -5
  379. package/dist/breakouts/index.js +0 -1047
  380. package/dist/breakouts/index.js.map +0 -1
  381. package/dist/breakouts/request.d.ts +0 -22
  382. package/dist/breakouts/request.js +0 -77
  383. package/dist/breakouts/request.js.map +0 -1
  384. package/dist/breakouts/utils.d.ts +0 -15
  385. package/dist/breakouts/utils.js +0 -64
  386. package/dist/breakouts/utils.js.map +0 -1
  387. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  388. package/dist/common/errors/no-meeting-info.js +0 -50
  389. package/dist/common/errors/no-meeting-info.js.map +0 -1
  390. package/dist/common/errors/reclaim-host-role-errors.js.map +0 -1
  391. package/dist/controls-options-manager/types.d.ts +0 -43
  392. package/dist/controls-options-manager/types.js +0 -7
  393. package/dist/controls-options-manager/types.js.map +0 -1
  394. package/dist/interceptors/index.d.ts +0 -2
  395. package/dist/interceptors/index.js +0 -15
  396. package/dist/interceptors/index.js.map +0 -1
  397. package/dist/interceptors/locusRetry.d.ts +0 -27
  398. package/dist/interceptors/locusRetry.js +0 -94
  399. package/dist/interceptors/locusRetry.js.map +0 -1
  400. package/dist/interpretation/collection.d.ts +0 -5
  401. package/dist/interpretation/collection.js +0 -22
  402. package/dist/interpretation/collection.js.map +0 -1
  403. package/dist/interpretation/index.d.ts +0 -5
  404. package/dist/interpretation/index.js +0 -365
  405. package/dist/interpretation/index.js.map +0 -1
  406. package/dist/interpretation/siLanguage.d.ts +0 -5
  407. package/dist/interpretation/siLanguage.js +0 -24
  408. package/dist/interpretation/siLanguage.js.map +0 -1
  409. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  410. package/dist/meeting/locusMediaRequest.js +0 -291
  411. package/dist/meeting/locusMediaRequest.js.map +0 -1
  412. package/dist/meeting/request.type.d.ts +0 -11
  413. package/dist/meeting/request.type.js +0 -7
  414. package/dist/meeting/request.type.js.map +0 -1
  415. package/dist/meeting/voicea-meeting.d.ts +0 -20
  416. package/dist/meeting/voicea-meeting.js +0 -201
  417. package/dist/meeting/voicea-meeting.js.map +0 -1
  418. package/dist/meetings/meetings.types.d.ts +0 -4
  419. package/dist/meetings/meetings.types.js +0 -7
  420. package/dist/meetings/meetings.types.js.map +0 -1
  421. package/dist/member/types.d.ts +0 -32
  422. package/dist/member/types.js +0 -23
  423. package/dist/member/types.js.map +0 -1
  424. package/dist/multistream/mediaRequestManager.d.ts +0 -118
  425. package/dist/multistream/mediaRequestManager.js +0 -344
  426. package/dist/multistream/mediaRequestManager.js.map +0 -1
  427. package/dist/multistream/receiveSlot.d.ts +0 -68
  428. package/dist/multistream/receiveSlot.js +0 -200
  429. package/dist/multistream/receiveSlot.js.map +0 -1
  430. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  431. package/dist/multistream/receiveSlotManager.js +0 -174
  432. package/dist/multistream/receiveSlotManager.js.map +0 -1
  433. package/dist/multistream/remoteMedia.d.ts +0 -72
  434. package/dist/multistream/remoteMedia.js +0 -268
  435. package/dist/multistream/remoteMedia.js.map +0 -1
  436. package/dist/multistream/remoteMediaGroup.d.ts +0 -47
  437. package/dist/multistream/remoteMediaGroup.js +0 -267
  438. package/dist/multistream/remoteMediaGroup.js.map +0 -1
  439. package/dist/multistream/remoteMediaManager.d.ts +0 -285
  440. package/dist/multistream/remoteMediaManager.js +0 -1211
  441. package/dist/multistream/remoteMediaManager.js.map +0 -1
  442. package/dist/multistream/sendSlotManager.d.ts +0 -61
  443. package/dist/multistream/sendSlotManager.js +0 -236
  444. package/dist/multistream/sendSlotManager.js.map +0 -1
  445. package/dist/reachability/clusterReachability.d.ts +0 -109
  446. package/dist/reachability/clusterReachability.js +0 -357
  447. package/dist/reachability/clusterReachability.js.map +0 -1
  448. package/dist/reachability/util.d.ts +0 -8
  449. package/dist/reachability/util.js +0 -29
  450. package/dist/reachability/util.js.map +0 -1
  451. package/dist/reactions/constants.d.ts +0 -3
  452. package/dist/reactions/constants.js +0 -12
  453. package/dist/reactions/constants.js.map +0 -1
  454. package/dist/rtcMetrics/constants.d.ts +0 -4
  455. package/dist/rtcMetrics/constants.js +0 -11
  456. package/dist/rtcMetrics/constants.js.map +0 -1
  457. package/dist/rtcMetrics/index.d.ts +0 -54
  458. package/dist/rtcMetrics/index.js +0 -140
  459. package/dist/rtcMetrics/index.js.map +0 -1
  460. package/dist/webinar/collection.d.ts +0 -16
  461. package/dist/webinar/collection.js +0 -43
  462. package/dist/webinar/collection.js.map +0 -1
  463. package/dist/webinar/index.d.ts +0 -5
  464. package/dist/webinar/index.js +0 -68
  465. package/dist/webinar/index.js.map +0 -1
  466. package/src/annotation/annotation.types.ts +0 -50
  467. package/src/annotation/constants.ts +0 -36
  468. package/src/annotation/index.ts +0 -328
  469. package/src/breakouts/README.md +0 -220
  470. package/src/breakouts/breakout.ts +0 -188
  471. package/src/breakouts/collection.ts +0 -19
  472. package/src/breakouts/edit-lock-error.ts +0 -25
  473. package/src/breakouts/events.ts +0 -56
  474. package/src/breakouts/index.ts +0 -925
  475. package/src/breakouts/request.ts +0 -55
  476. package/src/breakouts/utils.ts +0 -57
  477. package/src/common/errors/no-meeting-info.ts +0 -24
  478. package/src/controls-options-manager/types.ts +0 -59
  479. package/src/index.ts +0 -44
  480. package/src/interceptors/index.ts +0 -3
  481. package/src/interceptors/locusRetry.ts +0 -67
  482. package/src/interpretation/README.md +0 -60
  483. package/src/interpretation/collection.ts +0 -19
  484. package/src/interpretation/index.ts +0 -332
  485. package/src/interpretation/siLanguage.ts +0 -18
  486. package/src/meeting/locusMediaRequest.ts +0 -313
  487. package/src/meeting/request.type.ts +0 -13
  488. package/src/meeting/voicea-meeting.ts +0 -161
  489. package/src/meetings/meetings.types.ts +0 -12
  490. package/src/member/types.ts +0 -38
  491. package/src/multistream/mediaRequestManager.ts +0 -440
  492. package/src/multistream/receiveSlot.ts +0 -184
  493. package/src/multistream/receiveSlotManager.ts +0 -166
  494. package/src/multistream/remoteMedia.ts +0 -254
  495. package/src/multistream/remoteMediaGroup.ts +0 -284
  496. package/src/multistream/remoteMediaManager.ts +0 -1145
  497. package/src/multistream/sendSlotManager.ts +0 -170
  498. package/src/reachability/clusterReachability.ts +0 -320
  499. package/src/reachability/util.ts +0 -24
  500. package/src/reactions/constants.ts +0 -4
  501. package/src/rtcMetrics/constants.ts +0 -3
  502. package/src/rtcMetrics/index.ts +0 -124
  503. package/src/webinar/collection.ts +0 -31
  504. package/src/webinar/index.ts +0 -62
  505. package/test/integration/spec/converged-space-meetings.js +0 -233
  506. package/test/unit/spec/annotation/index.ts +0 -418
  507. package/test/unit/spec/breakouts/breakout.ts +0 -237
  508. package/test/unit/spec/breakouts/collection.ts +0 -15
  509. package/test/unit/spec/breakouts/edit-lock-error.ts +0 -30
  510. package/test/unit/spec/breakouts/events.ts +0 -89
  511. package/test/unit/spec/breakouts/index.ts +0 -1790
  512. package/test/unit/spec/breakouts/request.ts +0 -104
  513. package/test/unit/spec/breakouts/utils.js +0 -72
  514. package/test/unit/spec/interceptors/locusRetry.ts +0 -131
  515. package/test/unit/spec/interpretation/collection.ts +0 -15
  516. package/test/unit/spec/interpretation/index.ts +0 -589
  517. package/test/unit/spec/interpretation/siLanguage.ts +0 -28
  518. package/test/unit/spec/locus-info/mediaSharesUtils.ts +0 -32
  519. package/test/unit/spec/media/index.ts +0 -290
  520. package/test/unit/spec/meeting/locusMediaRequest.ts +0 -442
  521. package/test/unit/spec/meeting-info/index.js +0 -300
  522. package/test/unit/spec/multistream/mediaRequestManager.ts +0 -1418
  523. package/test/unit/spec/multistream/receiveSlot.ts +0 -163
  524. package/test/unit/spec/multistream/receiveSlotManager.ts +0 -203
  525. package/test/unit/spec/multistream/remoteMedia.ts +0 -255
  526. package/test/unit/spec/multistream/remoteMediaGroup.ts +0 -662
  527. package/test/unit/spec/multistream/remoteMediaManager.ts +0 -1924
  528. package/test/unit/spec/multistream/sendSlotManager.ts +0 -242
  529. package/test/unit/spec/reachability/clusterReachability.ts +0 -279
  530. package/test/unit/spec/reachability/request.js +0 -68
  531. package/test/unit/spec/reachability/util.ts +0 -40
  532. package/test/unit/spec/roap/request.ts +0 -255
  533. package/test/unit/spec/rtcMetrics/index.ts +0 -93
  534. package/test/unit/spec/webinar/collection.ts +0 -13
  535. package/test/unit/spec/webinar/index.ts +0 -60
  536. package/test/utils/constants.js +0 -9
  537. package/test/utils/integrationTestUtils.js +0 -46
  538. /package/dist/common/errors/{reclaim-host-role-errors.d.ts → reclaim-host-role-error.d.ts} +0 -0
  539. /package/src/common/errors/{reclaim-host-role-errors.ts → reclaim-host-role-error.ts} +0 -0
@@ -1,242 +0,0 @@
1
- import SendSlotManager from '@webex/plugin-meetings/src/multistream/sendSlotManager';
2
- import { LocalStream, MediaType, MultistreamRoapMediaConnection } from "@webex/internal-media-core";
3
- import {expect} from '@webex/test-helper-chai';
4
- import sinon from 'sinon';
5
-
6
- describe('SendSlotsManager', () => {
7
- let sendSlotsManager: SendSlotManager;
8
- const LoggerProxy = {
9
- logger: {
10
- info: sinon.stub(),
11
- },
12
- };
13
-
14
- beforeEach(() => {
15
- sendSlotsManager = new SendSlotManager(LoggerProxy);
16
- });
17
-
18
- describe('createSlot', () => {
19
- let mediaConnection;
20
- const mediaType = MediaType.AudioMain;
21
-
22
- beforeEach(() => {
23
- mediaConnection = {
24
- createSendSlot: sinon.stub(),
25
- } as MultistreamRoapMediaConnection;
26
- });
27
-
28
- it('should create a slot for the given mediaType', () => {
29
- sendSlotsManager.createSlot(mediaConnection, mediaType);
30
-
31
- expect(mediaConnection.createSendSlot.calledWith(mediaType, true));
32
- });
33
-
34
- it('should create a slot for the given mediaType & active state', () => {
35
- sendSlotsManager.createSlot(mediaConnection, mediaType, false);
36
-
37
- expect(mediaConnection.createSendSlot.calledWith(mediaType, false));
38
- });
39
-
40
- it('should throw an error if a slot for the given mediaType already exists', () => {
41
- sendSlotsManager.createSlot(mediaConnection, mediaType);
42
-
43
- expect(() => sendSlotsManager.createSlot(mediaConnection, mediaType)).to.throw(`Slot for ${mediaType} already exists`);
44
- });
45
- });
46
-
47
- describe('getSlot', () => {
48
- const mediaType = MediaType.AudioMain;
49
- let mediaConnection;
50
-
51
- beforeEach(() => {
52
- mediaConnection = {
53
- createSendSlot: sinon.stub().returns({}),
54
- } as MultistreamRoapMediaConnection;
55
- });
56
-
57
- it('should return the slot for the given mediaType', () => {
58
- const slot = sendSlotsManager.createSlot(mediaConnection,mediaType);
59
-
60
- expect(sendSlotsManager.getSlot(mediaType)).to.equal(slot);
61
- });
62
-
63
- it('should throw an error if a slot for the given mediaType does not exist', () => {
64
- expect(() => sendSlotsManager.getSlot(mediaType)).to.throw(`Slot for ${mediaType} does not exist`);
65
- });
66
- });
67
-
68
- describe('publishStream', () => {
69
- let mediaConnection;
70
- const mediaType = MediaType.AudioMain;
71
- const stream = {} as LocalStream;
72
-
73
- beforeEach(() => {
74
- mediaConnection = {
75
- createSendSlot: sinon.stub(),
76
- } as MultistreamRoapMediaConnection;
77
- });
78
-
79
- it('should publish the given stream to the sendSlot for the given mediaType', async () => {
80
- const slot = {
81
- publishStream: sinon.stub().resolves(),
82
- };
83
- mediaConnection.createSendSlot.returns(slot);
84
- sendSlotsManager.createSlot(mediaConnection, mediaType);
85
-
86
- await sendSlotsManager.publishStream(mediaType, stream);
87
-
88
- expect(slot.publishStream.calledWith(stream));
89
- });
90
-
91
- it('should throw an error if a slot for the given mediaType does not exist', (done) => {
92
- sendSlotsManager.publishStream(mediaType, stream).catch((error) => {
93
- expect(error.message).to.equal(`Slot for ${mediaType} does not exist`);
94
- done();
95
- });
96
- });
97
- });
98
-
99
- describe('unpublishStream', () => {
100
- let mediaConnection;
101
- const mediaType = MediaType.AudioMain;
102
-
103
- beforeEach(() => {
104
- mediaConnection = {
105
- createSendSlot: sinon.stub(),
106
- } as MultistreamRoapMediaConnection;
107
- });
108
-
109
- it('should unpublish the stream from the sendSlot of the given mediaType', async () => {
110
- const slot = {
111
- unpublishStream: sinon.stub().resolves(),
112
- };
113
- mediaConnection.createSendSlot.returns(slot);
114
- sendSlotsManager.createSlot(mediaConnection, mediaType);
115
-
116
- await sendSlotsManager.unpublishStream(mediaType);
117
-
118
- expect(slot.unpublishStream.called);
119
- });
120
-
121
- it('should throw an error if a slot for the given mediaType does not exist',(done) => {
122
- sendSlotsManager.unpublishStream(mediaType).catch((error) => {
123
- expect(error.message).to.equal(`Slot for ${mediaType} does not exist`);
124
- done();
125
- });
126
- });
127
- });
128
-
129
- describe('setActive', () => {
130
- let mediaConnection;
131
- const mediaType = MediaType.AudioMain;
132
-
133
- beforeEach(() => {
134
- mediaConnection = {
135
- createSendSlot: sinon.stub(),
136
- } as MultistreamRoapMediaConnection;
137
- });
138
-
139
- it('should set the active state of the sendSlot for the given mediaType', async () => {
140
- const slot = {
141
- setActive: sinon.stub().resolves(),
142
- };
143
- mediaConnection.createSendSlot.returns(slot);
144
- sendSlotsManager.createSlot(mediaConnection, mediaType);
145
-
146
- await sendSlotsManager.setActive(mediaType,true);
147
-
148
- expect(slot.setActive.called);
149
- });
150
-
151
- it('should throw an error if a slot for the given mediaType does not exist', () => {
152
- expect(() => sendSlotsManager.setActive(mediaType)).to.throw(`Slot for ${mediaType} does not exist`)
153
- });
154
- });
155
-
156
- describe('setCodecParameters', () => {
157
- let mediaConnection;
158
- const mediaType = MediaType.AudioMain;
159
- const codecParameters = {};
160
-
161
- beforeEach(() => {
162
- mediaConnection = {
163
- createSendSlot: sinon.stub(),
164
- } as MultistreamRoapMediaConnection;
165
- });
166
-
167
- it('should set the codec parameters of the sendSlot for the given mediaType', async () => {
168
- const slot = {
169
- setCodecParameters: sinon.stub().resolves(),
170
- };
171
- mediaConnection.createSendSlot.returns(slot);
172
- sendSlotsManager.createSlot(mediaConnection, mediaType);
173
-
174
- await sendSlotsManager.setCodecParameters(mediaType, codecParameters);
175
-
176
- expect(slot.setCodecParameters.calledWith(codecParameters));
177
- });
178
-
179
- it('should throw an error if a slot for the given mediaType does not exist', (done) => {
180
- sendSlotsManager.setCodecParameters(mediaType, codecParameters).catch((error) => {
181
- expect(error.message).to.equal(`Slot for ${mediaType} does not exist`);
182
- done();
183
- });
184
- });
185
- });
186
-
187
- describe('deleteCodecParameters', () => {
188
- let mediaConnection;
189
- const mediaType = MediaType.AudioMain;
190
-
191
- beforeEach(() => {
192
- mediaConnection = {
193
- createSendSlot: sinon.stub(),
194
- } as MultistreamRoapMediaConnection;
195
- });
196
-
197
- it('should delete the codec parameters of the sendSlot for the given mediaType', async () => {
198
- const slot = {
199
- deleteCodecParameters: sinon.stub().resolves(),
200
- };
201
- mediaConnection.createSendSlot.returns(slot);
202
- sendSlotsManager.createSlot(mediaConnection, mediaType);
203
-
204
- await sendSlotsManager.deleteCodecParameters(mediaType,[]);
205
-
206
- expect(slot.deleteCodecParameters.called);
207
- });
208
-
209
- it('should throw an error if a slot for the given mediaType does not exist', (done) => {
210
- sendSlotsManager.deleteCodecParameters(mediaType,[]).catch((error) => {
211
- expect(error.message).to.equal(`Slot for ${mediaType} does not exist`);
212
- done();
213
- });
214
- });
215
- });
216
-
217
- describe('reset', () => {
218
- let mediaConnection;
219
-
220
- beforeEach(() => {
221
- mediaConnection = {
222
- createSendSlot: sinon.stub().returns({}),
223
- } as MultistreamRoapMediaConnection;
224
- });
225
-
226
- it('should reset the send slot manager', () => {
227
- const AudioSlot = sendSlotsManager.createSlot(mediaConnection, MediaType.AudioMain);
228
- const VideoSlot = sendSlotsManager.createSlot(mediaConnection, MediaType.VideoMain);
229
- const AudioSlidesSlot = sendSlotsManager.createSlot(mediaConnection, MediaType.AudioSlides);
230
- const VideoSlidesSlot = sendSlotsManager.createSlot(mediaConnection, MediaType.VideoSlides);
231
- expect(sendSlotsManager.getSlot(MediaType.AudioMain)).to.equal(AudioSlot);
232
- expect(sendSlotsManager.getSlot(MediaType.VideoMain)).to.equal(VideoSlot);
233
- expect(sendSlotsManager.getSlot(MediaType.AudioSlides)).to.equal(AudioSlidesSlot);
234
- expect(sendSlotsManager.getSlot(MediaType.VideoSlides)).to.equal(VideoSlidesSlot);
235
- sendSlotsManager.reset();
236
- expect(() => sendSlotsManager.getSlot(MediaType.AudioMain)).to.throw();
237
- expect(() => sendSlotsManager.getSlot(MediaType.VideoMain)).to.throw();
238
- expect(() => sendSlotsManager.getSlot(MediaType.AudioSlides)).to.throw();
239
- expect(() => sendSlotsManager.getSlot(MediaType.VideoSlides)).to.throw();
240
- });
241
- });
242
- });
@@ -1,279 +0,0 @@
1
- import {assert} from '@webex/test-helper-chai';
2
- import MockWebex from '@webex/test-helper-mock-webex';
3
- import sinon from 'sinon';
4
- import testUtils from '../../../utils/testUtils';
5
-
6
- // packages/@webex/plugin-meetings/test/unit/spec/reachability/clusterReachability.ts
7
- import { ClusterReachability } from '@webex/plugin-meetings/src/reachability/clusterReachability'; // replace with actual path
8
-
9
- describe('ClusterReachability', () => {
10
- let previousRTCPeerConnection;
11
- let clusterReachability;
12
- let fakePeerConnection;
13
-
14
- const FAKE_OFFER = {type: 'offer', sdp: 'fake sdp'};
15
-
16
- beforeEach(() => {
17
- fakePeerConnection = {
18
- createOffer: sinon.stub().resolves(FAKE_OFFER),
19
- setLocalDescription: sinon.stub().resolves(),
20
- close: sinon.stub(),
21
- iceGatheringState: 'new',
22
- };
23
-
24
- previousRTCPeerConnection = global.RTCPeerConnection;
25
- global.RTCPeerConnection = sinon.stub().returns(fakePeerConnection);
26
-
27
- clusterReachability = new ClusterReachability('testName', {
28
- isVideoMesh: false,
29
- udp: ['stun:udp1', 'stun:udp2'],
30
- tcp: ['stun:tcp1.webex.com', 'stun:tcp2.webex.com:5004'],
31
- xtls: ['xtls1', 'xtls2'],
32
- });
33
-
34
- });
35
-
36
- afterEach(() => {
37
- global.RTCPeerConnection = previousRTCPeerConnection;
38
- });
39
-
40
- it('should create an instance correctly', () => {
41
- assert.instanceOf(clusterReachability, ClusterReachability);
42
- assert.equal(clusterReachability.name, 'testName');
43
- assert.equal(clusterReachability.isVideoMesh, false);
44
- assert.equal(clusterReachability.numUdpUrls, 2);
45
- assert.equal(clusterReachability.numTcpUrls, 2);
46
- });
47
-
48
- it('should create a peer connection with the right config', () => {
49
- assert.calledOnceWithExactly(global.RTCPeerConnection, {
50
- iceServers: [
51
- {username: '', credential: '', urls: ['stun:udp1']},
52
- {username: '', credential: '', urls: ['stun:udp2']},
53
- {username: 'webexturnreachuser', credential: 'webexturnreachpwd', urls: ['turn:tcp1.webex.com?transport=tcp']},
54
- {username: 'webexturnreachuser', credential: 'webexturnreachpwd', urls: ['turn:tcp2.webex.com:5004?transport=tcp']}
55
- ],
56
- iceCandidatePoolSize: 0,
57
- iceTransportPolicy: 'all',
58
- });
59
- });
60
-
61
- it('should create a peer connection with the right config even if lists of urls are empty', () => {
62
- (global.RTCPeerConnection as any).resetHistory();
63
-
64
- clusterReachability = new ClusterReachability('testName', {
65
- isVideoMesh: false,
66
- udp: [],
67
- tcp: [],
68
- xtls: [],
69
- });
70
-
71
- assert.calledOnceWithExactly(global.RTCPeerConnection, {
72
- iceServers: [],
73
- iceCandidatePoolSize: 0,
74
- iceTransportPolicy: 'all',
75
- });
76
- });
77
-
78
- it('returns correct results before start() is called', () => {
79
- assert.deepEqual(clusterReachability.getResult(), {
80
- udp: {result: 'untested'},
81
- tcp: {result: 'untested'},
82
- xtls: {result: 'untested'}
83
- });
84
- });
85
-
86
- describe('#start', () => {
87
- let clock;
88
-
89
- beforeEach(() => {
90
- clock = sinon.useFakeTimers();
91
- });
92
-
93
- afterEach(() => {
94
- clock.restore();
95
- })
96
-
97
- it('should initiate the ICE gathering process', async () => {
98
- const promise = clusterReachability.start();
99
-
100
- await testUtils.flushPromises();
101
-
102
- // check that the right listeners are setup
103
- assert.isFunction(fakePeerConnection.onicecandidate);
104
- assert.isFunction(fakePeerConnection.onicegatheringstatechange);
105
-
106
- // check that the right webrtc APIs are called
107
- assert.calledOnceWithExactly(fakePeerConnection.createOffer, {offerToReceiveAudio: true});
108
- assert.calledOnce(fakePeerConnection.setLocalDescription);
109
-
110
- await clock.tickAsync(3000);// move the clock so that reachability times out
111
- await promise;
112
- });
113
-
114
- it('resolves and has correct result as soon as it finds that both udp and tcp is reachable', async () => {
115
- const promise = clusterReachability.start();
116
-
117
- await clock.tickAsync(100);
118
- fakePeerConnection.onicecandidate({candidate: {type: 'srflx', address: 'somePublicIp'}});
119
-
120
- await clock.tickAsync(100);
121
- fakePeerConnection.onicecandidate({candidate: {type: 'relay', address: 'someTurnRelayIp'}});
122
-
123
- await promise;
124
-
125
- assert.deepEqual(clusterReachability.getResult(), {
126
- udp: {result: 'reachable', latencyInMilliseconds: 100, clientMediaIPs: ['somePublicIp']},
127
- tcp: {result: 'reachable', latencyInMilliseconds: 200},
128
- xtls: {result: 'untested'}
129
- });
130
- });
131
-
132
- it('times out correctly', async () => {
133
- const promise = clusterReachability.start();
134
-
135
- // progress time without any candidates
136
- await clock.tickAsync(3000);
137
- await promise;
138
-
139
- assert.deepEqual(clusterReachability.getResult(), {
140
- udp: {result: 'unreachable'},
141
- tcp: {result: 'unreachable'},
142
- xtls: {result: 'untested'}
143
- });
144
- });
145
-
146
- it('times out correctly for video mesh nodes', async () => {
147
- clusterReachability = new ClusterReachability('testName', {
148
- isVideoMesh: true,
149
- udp: ['stun:udp1', 'stun:udp2'],
150
- tcp: ['stun:tcp1.webex.com', 'stun:tcp2.webex.com:5004'],
151
- xtls: ['xtls1', 'xtls2'],
152
- });
153
-
154
- const promise = clusterReachability.start();
155
-
156
- // video mesh nodes have shorter timeout of just 1s
157
- await clock.tickAsync(1000);
158
- await promise;
159
-
160
- assert.deepEqual(clusterReachability.getResult(), {
161
- udp: {result: 'unreachable'},
162
- tcp: {result: 'unreachable'},
163
- xtls: {result: 'untested'}
164
- });
165
- });
166
-
167
- it('resolves when ICE gathering is completed', async () => {
168
- const promise = clusterReachability.start();
169
-
170
- await testUtils.flushPromises();
171
-
172
- fakePeerConnection.iceConnectionState = 'complete';
173
- fakePeerConnection.onicegatheringstatechange();
174
- await promise;
175
-
176
- assert.deepEqual(clusterReachability.getResult(), {
177
- udp: {result: 'unreachable'},
178
- tcp: {result: 'unreachable'},
179
- xtls: {result: 'untested'}
180
- });
181
- });
182
-
183
- it('resolves with the right result when ICE gathering is completed', async () => {
184
- const promise = clusterReachability.start();
185
-
186
- // send 1 candidate
187
- await clock.tickAsync(30);
188
- fakePeerConnection.onicecandidate({candidate: {type: 'srflx', address: 'somePublicIp1'}});
189
-
190
- fakePeerConnection.iceConnectionState = 'complete';
191
- fakePeerConnection.onicegatheringstatechange();
192
- await promise;
193
-
194
- assert.deepEqual(clusterReachability.getResult(), {
195
- udp: {result: 'reachable', latencyInMilliseconds: 30, clientMediaIPs: ['somePublicIp1']},
196
- tcp: {result: 'unreachable'},
197
- xtls: {result: 'untested'}
198
- });
199
- });
200
-
201
- it('should store latency only for the first srflx candidate, but IPs from all of them', async () => {
202
- const promise = clusterReachability.start();
203
-
204
- await clock.tickAsync(10);
205
- fakePeerConnection.onicecandidate({candidate: {type: 'srflx', address: 'somePublicIp1'}});
206
-
207
- // generate more candidates
208
- await clock.tickAsync(10);
209
- fakePeerConnection.onicecandidate({candidate: {type: 'srflx', address: 'somePublicIp2'}});
210
-
211
- await clock.tickAsync(10);
212
- fakePeerConnection.onicecandidate({candidate: {type: 'srflx', address: 'somePublicIp3'}});
213
-
214
- await clock.tickAsync(3000);// move the clock so that reachability times out
215
-
216
- await promise;
217
-
218
- // latency should be from only the first candidates, but the clientMediaIps should be from all UDP candidates (not TCP)
219
- assert.deepEqual(clusterReachability.getResult(), {
220
- udp: {result: 'reachable', latencyInMilliseconds: 10, clientMediaIPs: ['somePublicIp1', 'somePublicIp2', 'somePublicIp3']},
221
- tcp: {result: 'unreachable'},
222
- xtls: {result: 'untested'}
223
- });
224
- });
225
-
226
- it('should store latency only for the first relay candidate', async () => {
227
- const promise = clusterReachability.start();
228
-
229
- await clock.tickAsync(10);
230
- fakePeerConnection.onicecandidate({candidate: {type: 'relay', address: 'someTurnRelayIp1'}});
231
-
232
- // generate more candidates
233
- await clock.tickAsync(10);
234
- fakePeerConnection.onicecandidate({candidate: {type: 'relay', address: 'someTurnRelayIp2'}});
235
-
236
- await clock.tickAsync(10);
237
- fakePeerConnection.onicecandidate({candidate: {type: 'relay', address: 'someTurnRelayIp3'}});
238
-
239
- await clock.tickAsync(3000);// move the clock so that reachability times out
240
-
241
- await promise;
242
-
243
- // latency should be from only the first candidates, but the clientMediaIps should be from only from UDP candidates
244
- assert.deepEqual(clusterReachability.getResult(), {
245
- udp: {result: 'unreachable'},
246
- tcp: {result: 'reachable', latencyInMilliseconds: 10},
247
- xtls: {result: 'untested'}
248
- });
249
- });
250
-
251
- it('ignores duplicate clientMediaIps', async () => {
252
- const promise = clusterReachability.start();
253
-
254
- // generate candidates with duplicate addresses
255
- await clock.tickAsync(10);
256
- fakePeerConnection.onicecandidate({candidate: {type: 'srflx', address: 'somePublicIp1'}});
257
-
258
- await clock.tickAsync(10);
259
- fakePeerConnection.onicecandidate({candidate: {type: 'srflx', address: 'somePublicIp1'}});
260
-
261
- await clock.tickAsync(10);
262
- fakePeerConnection.onicecandidate({candidate: {type: 'srflx', address: 'somePublicIp2'}});
263
-
264
- await clock.tickAsync(10);
265
- fakePeerConnection.onicecandidate({candidate: {type: 'srflx', address: 'somePublicIp2'}});
266
-
267
- // send also a relay candidate so that the reachability check finishes
268
- fakePeerConnection.onicecandidate({candidate: {type: 'relay', address: 'someTurnRelayIp'}});
269
-
270
- await promise;
271
-
272
- assert.deepEqual(clusterReachability.getResult(), {
273
- udp: {result: 'reachable', latencyInMilliseconds: 10, clientMediaIPs: ['somePublicIp1', 'somePublicIp2']},
274
- tcp: {result: 'reachable', latencyInMilliseconds: 40},
275
- xtls: {result: 'untested'}
276
- });
277
- });
278
- });
279
- });
@@ -1,68 +0,0 @@
1
- import sinon from 'sinon';
2
- import {assert} from '@webex/test-helper-chai';
3
- import MockWebex from '@webex/test-helper-mock-webex';
4
- import Meetings from '@webex/plugin-meetings';
5
- import ReachabilityRequest from '@webex/plugin-meetings/src/reachability/request';
6
- import {IP_VERSION} from '@webex/plugin-meetings/src/constants';
7
-
8
-
9
- describe('plugin-meetings/reachability', () => {
10
- let reachabilityRequest;
11
- let webex;
12
-
13
- beforeEach(() => {
14
- webex = new MockWebex({
15
- children: {
16
- meetings: Meetings,
17
- },
18
- });
19
-
20
- webex.meetings.clientRegion = {
21
- countryCode: 'US',
22
- regionCode: 'WEST-COAST',
23
- };
24
-
25
- webex.internal = {
26
- services: {
27
- get: sinon.mock().returns('locusUrl'),
28
- waitForCatalog: sinon.mock().returns(Promise.resolve({})),
29
- },
30
- };
31
-
32
-
33
- reachabilityRequest = new ReachabilityRequest(webex);
34
-
35
- });
36
-
37
- describe('#getClusters', () => {
38
- it('sends a GET request with the correct params', async () => {
39
- webex.request = sinon.mock().returns(Promise.resolve({
40
- body: {
41
- clusterClasses: {
42
- hybridMedia: ["clusterId"]
43
- },
44
- clusters: {"clusterId": {
45
- udp: "testUDP"
46
- }},
47
- joinCookie: {anycastEntryPoint: "aws-eu-west-1"}
48
- }
49
- }));
50
-
51
- const res = await reachabilityRequest.getClusters(IP_VERSION.only_ipv4);
52
-
53
- const requestParams = webex.request.getCall(0).args[0];
54
-
55
- assert.equal(requestParams.method, 'GET');
56
- assert.equal(requestParams.resource, `clusters`);
57
- assert.equal(requestParams.api, 'calliopeDiscovery');
58
- assert.equal(requestParams.shouldRefreshAccessToken, false);
59
-
60
- assert.deepEqual(requestParams.qs, {
61
- JCSupport: 1,
62
- ipver: 4,
63
- });
64
- assert.deepEqual(res.clusters.clusterId, {udp: "testUDP", isVideoMesh: true})
65
- assert.deepEqual(res.joinCookie, {anycastEntryPoint: "aws-eu-west-1"})
66
- });
67
- });
68
- });
@@ -1,40 +0,0 @@
1
- import {assert} from '@webex/test-helper-chai';
2
-
3
- import {convertStunUrlToTurn} from '@webex/plugin-meetings/src/reachability/util';
4
-
5
- describe('plugin-meetings/src/reachability/util', () => {
6
- describe('#convertStunUrlToTurn()', () => {
7
- [
8
- {
9
- title: 'a stun url with port',
10
- stunUrl: 'stun:external-media91.public.wjfkm-a-10.prod.infra.webex.com:5004',
11
- expectedUrlPart: 'external-media91.public.wjfkm-a-10.prod.infra.webex.com:5004',
12
- },
13
- {
14
- title: 'a stun url without port',
15
- stunUrl: 'stun:something.somewhere.com',
16
- expectedUrlPart: 'something.somewhere.com',
17
- },
18
- ].forEach(({title, stunUrl, expectedUrlPart}) => {
19
- it(`should convert ${title} to a TCP turn url`, () => {
20
- const turnUrl = convertStunUrlToTurn(stunUrl, 'tcp');
21
-
22
- assert.equal(turnUrl, `turn:${expectedUrlPart}?transport=tcp`);
23
- });
24
-
25
- it(`should convert ${title} to a UDP turn url`, () => {
26
- const turnUrl = convertStunUrlToTurn(stunUrl, 'udp');
27
-
28
- assert.equal(turnUrl, `turn:${expectedUrlPart}`);
29
- });
30
- });
31
-
32
- it('show fail if stunUrl is not a valid url', () => {
33
- assert.throws(() => convertStunUrlToTurn('not a url', 'tcp'), 'Invalid URL: not a url');
34
- });
35
-
36
- 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');
38
- });
39
- });
40
- });