@webex/plugin-meetings 3.0.0-stream-classes.4 → 3.0.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 (469) hide show
  1. package/.eslintrc.js +6 -0
  2. package/README.md +12 -0
  3. package/babel.config.js +3 -0
  4. package/dist/annotation/constants.js +12 -20
  5. package/dist/annotation/constants.js.map +1 -1
  6. package/dist/annotation/index.js +25 -10
  7. package/dist/annotation/index.js.map +1 -1
  8. package/dist/breakouts/breakout.js +2 -3
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/collection.js +1 -2
  11. package/dist/breakouts/collection.js.map +1 -1
  12. package/dist/breakouts/edit-lock-error.js +1 -2
  13. package/dist/breakouts/edit-lock-error.js.map +1 -1
  14. package/dist/breakouts/events.js +1 -2
  15. package/dist/breakouts/events.js.map +1 -1
  16. package/dist/breakouts/index.js +13 -14
  17. package/dist/breakouts/index.js.map +1 -1
  18. package/dist/breakouts/request.js +1 -2
  19. package/dist/breakouts/request.js.map +1 -1
  20. package/dist/breakouts/utils.js +3 -6
  21. package/dist/breakouts/utils.js.map +1 -1
  22. package/dist/common/browser-detection.js +2 -3
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +3 -4
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  37. package/dist/common/errors/no-meeting-info.js +50 -0
  38. package/dist/common/errors/no-meeting-info.js.map +1 -0
  39. package/dist/common/errors/parameter.js +3 -4
  40. package/dist/common/errors/parameter.js.map +1 -1
  41. package/dist/common/errors/password-error.js +1 -2
  42. package/dist/common/errors/password-error.js.map +1 -1
  43. package/dist/common/errors/permission.js +1 -2
  44. package/dist/common/errors/permission.js.map +1 -1
  45. package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
  46. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  47. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  48. package/dist/common/errors/reconnection-in-progress.js +1 -2
  49. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  50. package/dist/common/errors/reconnection.js +1 -2
  51. package/dist/common/errors/reconnection.js.map +1 -1
  52. package/dist/common/errors/stats.js +1 -2
  53. package/dist/common/errors/stats.js.map +1 -1
  54. package/dist/{types/common → common}/errors/webex-errors.d.ts +13 -1
  55. package/dist/common/errors/webex-errors.js +35 -16
  56. package/dist/common/errors/webex-errors.js.map +1 -1
  57. package/dist/common/errors/webex-meetings-error.js +1 -2
  58. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  59. package/dist/common/events/events-scope.js +1 -2
  60. package/dist/common/events/events-scope.js.map +1 -1
  61. package/dist/common/events/events.js +1 -2
  62. package/dist/common/events/events.js.map +1 -1
  63. package/dist/common/events/trigger-proxy.js +1 -2
  64. package/dist/common/events/trigger-proxy.js.map +1 -1
  65. package/dist/common/events/util.js +1 -2
  66. package/dist/common/events/util.js.map +1 -1
  67. package/dist/common/logs/logger-config.js +1 -2
  68. package/dist/common/logs/logger-config.js.map +1 -1
  69. package/dist/common/logs/logger-proxy.js +1 -2
  70. package/dist/common/logs/logger-proxy.js.map +1 -1
  71. package/dist/{types/common → common}/logs/request.d.ts +3 -1
  72. package/dist/common/logs/request.js +8 -5
  73. package/dist/common/logs/request.js.map +1 -1
  74. package/dist/common/queue.js +2 -4
  75. package/dist/common/queue.js.map +1 -1
  76. package/dist/{types/config.d.ts → config.d.ts} +1 -1
  77. package/dist/config.js +3 -3
  78. package/dist/config.js.map +1 -1
  79. package/dist/{types/constants.d.ts → constants.d.ts} +72 -15
  80. package/dist/constants.js +254 -371
  81. package/dist/constants.js.map +1 -1
  82. package/dist/controls-options-manager/constants.js +3 -6
  83. package/dist/controls-options-manager/constants.js.map +1 -1
  84. package/dist/controls-options-manager/enums.js +7 -10
  85. package/dist/controls-options-manager/enums.js.map +1 -1
  86. package/dist/controls-options-manager/index.js +27 -32
  87. package/dist/controls-options-manager/index.js.map +1 -1
  88. package/dist/controls-options-manager/util.js +1 -2
  89. package/dist/controls-options-manager/util.js.map +1 -1
  90. package/dist/index.js +8 -5
  91. package/dist/index.js.map +1 -1
  92. package/dist/interceptors/index.d.ts +2 -0
  93. package/dist/interceptors/index.js +15 -0
  94. package/dist/interceptors/index.js.map +1 -0
  95. package/dist/interceptors/locusRetry.d.ts +27 -0
  96. package/dist/interceptors/locusRetry.js +94 -0
  97. package/dist/interceptors/locusRetry.js.map +1 -0
  98. package/dist/interpretation/collection.js +1 -2
  99. package/dist/interpretation/collection.js.map +1 -1
  100. package/dist/interpretation/index.js +2 -3
  101. package/dist/interpretation/index.js.map +1 -1
  102. package/dist/interpretation/siLanguage.js +2 -3
  103. package/dist/interpretation/siLanguage.js.map +1 -1
  104. package/dist/locus-info/controlsUtils.js +12 -13
  105. package/dist/locus-info/controlsUtils.js.map +1 -1
  106. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  107. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  108. package/dist/locus-info/fullState.js +1 -2
  109. package/dist/locus-info/fullState.js.map +1 -1
  110. package/dist/locus-info/hostUtils.js +1 -2
  111. package/dist/locus-info/hostUtils.js.map +1 -1
  112. package/dist/{types/locus-info → locus-info}/index.d.ts +1 -1
  113. package/dist/locus-info/index.js +63 -38
  114. package/dist/locus-info/index.js.map +1 -1
  115. package/dist/locus-info/infoUtils.js +3 -4
  116. package/dist/locus-info/infoUtils.js.map +1 -1
  117. package/dist/locus-info/mediaSharesUtils.js +16 -3
  118. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  119. package/dist/{types/locus-info → locus-info}/parser.d.ts +3 -2
  120. package/dist/locus-info/parser.js +48 -31
  121. package/dist/locus-info/parser.js.map +1 -1
  122. package/dist/locus-info/selfUtils.js +7 -6
  123. package/dist/locus-info/selfUtils.js.map +1 -1
  124. package/dist/media/index.js +15 -10
  125. package/dist/media/index.js.map +1 -1
  126. package/dist/media/properties.js +16 -7
  127. package/dist/media/properties.js.map +1 -1
  128. package/dist/media/util.js +1 -2
  129. package/dist/media/util.js.map +1 -1
  130. package/dist/mediaQualityMetrics/config.d.ts +241 -0
  131. package/dist/mediaQualityMetrics/config.js +135 -339
  132. package/dist/mediaQualityMetrics/config.js.map +1 -1
  133. package/dist/{types/meeting → meeting}/in-meeting-actions.d.ts +4 -0
  134. package/dist/meeting/in-meeting-actions.js +18 -2
  135. package/dist/meeting/in-meeting-actions.js.map +1 -1
  136. package/dist/{types/meeting → meeting}/index.d.ts +331 -44
  137. package/dist/meeting/index.js +2639 -1367
  138. package/dist/meeting/index.js.map +1 -1
  139. package/dist/{types/meeting → meeting}/locusMediaRequest.d.ts +1 -2
  140. package/dist/meeting/locusMediaRequest.js +4 -5
  141. package/dist/meeting/locusMediaRequest.js.map +1 -1
  142. package/dist/meeting/muteState.js +2 -4
  143. package/dist/meeting/muteState.js.map +1 -1
  144. package/dist/{types/meeting → meeting}/request.d.ts +4 -1
  145. package/dist/meeting/request.js +47 -32
  146. package/dist/meeting/request.js.map +1 -1
  147. package/dist/meeting/state.js +1 -2
  148. package/dist/meeting/state.js.map +1 -1
  149. package/dist/{types/meeting → meeting}/util.d.ts +26 -1
  150. package/dist/meeting/util.js +83 -10
  151. package/dist/meeting/util.js.map +1 -1
  152. package/dist/meeting/voicea-meeting.d.ts +16 -0
  153. package/dist/meeting/voicea-meeting.js +169 -0
  154. package/dist/meeting/voicea-meeting.js.map +1 -0
  155. package/dist/meeting-info/collection.js +3 -4
  156. package/dist/meeting-info/collection.js.map +1 -1
  157. package/dist/{types/meeting-info → meeting-info}/index.d.ts +7 -0
  158. package/dist/meeting-info/index.js +53 -27
  159. package/dist/meeting-info/index.js.map +1 -1
  160. package/dist/{types/meeting-info → meeting-info}/meeting-info-v2.d.ts +1 -0
  161. package/dist/meeting-info/meeting-info-v2.js +52 -33
  162. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  163. package/dist/meeting-info/request.js +1 -2
  164. package/dist/meeting-info/request.js.map +1 -1
  165. package/dist/meeting-info/util.js +8 -8
  166. package/dist/meeting-info/util.js.map +1 -1
  167. package/dist/meeting-info/utilv2.js +12 -9
  168. package/dist/meeting-info/utilv2.js.map +1 -1
  169. package/dist/{types/meetings → meetings}/collection.d.ts +9 -0
  170. package/dist/meetings/collection.js +21 -5
  171. package/dist/meetings/collection.js.map +1 -1
  172. package/dist/{types/meetings → meetings}/index.d.ts +45 -16
  173. package/dist/meetings/index.js +166 -74
  174. package/dist/meetings/index.js.map +1 -1
  175. package/dist/meetings/request.js +2 -3
  176. package/dist/meetings/request.js.map +1 -1
  177. package/dist/meetings/util.js +3 -10
  178. package/dist/meetings/util.js.map +1 -1
  179. package/dist/{types/member → member}/index.d.ts +1 -0
  180. package/dist/member/index.js +10 -3
  181. package/dist/member/index.js.map +1 -1
  182. package/dist/member/member.types.d.ts +11 -0
  183. package/dist/member/member.types.js +17 -0
  184. package/dist/member/member.types.js.map +1 -0
  185. package/dist/member/types.js +6 -8
  186. package/dist/member/types.js.map +1 -1
  187. package/dist/member/util.js +12 -2
  188. package/dist/member/util.js.map +1 -1
  189. package/dist/members/collection.js +1 -2
  190. package/dist/members/collection.js.map +1 -1
  191. package/dist/members/index.js +25 -8
  192. package/dist/members/index.js.map +1 -1
  193. package/dist/members/request.js +2 -3
  194. package/dist/members/request.js.map +1 -1
  195. package/dist/{types/members → members}/types.d.ts +1 -0
  196. package/dist/members/types.js +3 -4
  197. package/dist/members/types.js.map +1 -1
  198. package/dist/{types/members → members}/util.d.ts +6 -1
  199. package/dist/members/util.js +18 -8
  200. package/dist/members/util.js.map +1 -1
  201. package/dist/{types/metrics → metrics}/constants.d.ts +15 -0
  202. package/dist/metrics/constants.js +16 -3
  203. package/dist/metrics/constants.js.map +1 -1
  204. package/dist/metrics/index.js +3 -2
  205. package/dist/metrics/index.js.map +1 -1
  206. package/dist/multistream/mediaRequestManager.js +9 -11
  207. package/dist/multistream/mediaRequestManager.js.map +1 -1
  208. package/dist/multistream/receiveSlot.js +3 -5
  209. package/dist/multistream/receiveSlot.js.map +1 -1
  210. package/dist/multistream/receiveSlotManager.js +7 -9
  211. package/dist/multistream/receiveSlotManager.js.map +1 -1
  212. package/dist/multistream/remoteMedia.js +3 -5
  213. package/dist/multistream/remoteMedia.js.map +1 -1
  214. package/dist/multistream/remoteMediaGroup.js +7 -6
  215. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  216. package/dist/{types/multistream → multistream}/remoteMediaManager.d.ts +9 -1
  217. package/dist/multistream/remoteMediaManager.js +74 -36
  218. package/dist/multistream/remoteMediaManager.js.map +1 -1
  219. package/dist/multistream/sendSlotManager.js +9 -6
  220. package/dist/multistream/sendSlotManager.js.map +1 -1
  221. package/dist/networkQualityMonitor/index.js +1 -2
  222. package/dist/networkQualityMonitor/index.js.map +1 -1
  223. package/dist/personal-meeting-room/index.js +2 -3
  224. package/dist/personal-meeting-room/index.js.map +1 -1
  225. package/dist/personal-meeting-room/request.js +2 -3
  226. package/dist/personal-meeting-room/request.js.map +1 -1
  227. package/dist/personal-meeting-room/util.js +1 -2
  228. package/dist/personal-meeting-room/util.js.map +1 -1
  229. package/dist/reachability/clusterReachability.d.ts +109 -0
  230. package/dist/reachability/clusterReachability.js +357 -0
  231. package/dist/reachability/clusterReachability.js.map +1 -0
  232. package/dist/reachability/index.d.ts +105 -0
  233. package/dist/reachability/index.js +279 -436
  234. package/dist/reachability/index.js.map +1 -1
  235. package/dist/{types/reachability → reachability}/request.d.ts +1 -1
  236. package/dist/reachability/request.js +14 -11
  237. package/dist/reachability/request.js.map +1 -1
  238. package/dist/reachability/util.d.ts +8 -0
  239. package/dist/reachability/util.js +29 -0
  240. package/dist/reachability/util.js.map +1 -0
  241. package/dist/reactions/constants.js +1 -2
  242. package/dist/reactions/constants.js.map +1 -1
  243. package/dist/reactions/reactions.js +2 -4
  244. package/dist/reactions/reactions.js.map +1 -1
  245. package/dist/reactions/reactions.type.js +6 -8
  246. package/dist/reactions/reactions.type.js.map +1 -1
  247. package/dist/{types/reconnection-manager → reconnection-manager}/index.d.ts +10 -0
  248. package/dist/reconnection-manager/index.js +129 -106
  249. package/dist/reconnection-manager/index.js.map +1 -1
  250. package/dist/recording-controller/enums.js +4 -5
  251. package/dist/recording-controller/enums.js.map +1 -1
  252. package/dist/recording-controller/index.js +43 -51
  253. package/dist/recording-controller/index.js.map +1 -1
  254. package/dist/recording-controller/util.js +1 -2
  255. package/dist/recording-controller/util.js.map +1 -1
  256. package/dist/{types/roap → roap}/index.d.ts +2 -1
  257. package/dist/roap/index.js +59 -28
  258. package/dist/roap/index.js.map +1 -1
  259. package/dist/{types/roap → roap}/request.d.ts +2 -1
  260. package/dist/roap/request.js +14 -22
  261. package/dist/roap/request.js.map +1 -1
  262. package/dist/{types/roap → roap}/turnDiscovery.d.ts +21 -4
  263. package/dist/roap/turnDiscovery.js +182 -89
  264. package/dist/roap/turnDiscovery.js.map +1 -1
  265. package/dist/rtcMetrics/constants.js +1 -2
  266. package/dist/rtcMetrics/constants.js.map +1 -1
  267. package/dist/{types/rtcMetrics → rtcMetrics}/index.d.ts +15 -1
  268. package/dist/rtcMetrics/index.js +72 -12
  269. package/dist/rtcMetrics/index.js.map +1 -1
  270. package/dist/statsAnalyzer/global.js +1 -2
  271. package/dist/statsAnalyzer/global.js.map +1 -1
  272. package/dist/{types/statsAnalyzer → statsAnalyzer}/index.d.ts +28 -11
  273. package/dist/statsAnalyzer/index.js +371 -318
  274. package/dist/statsAnalyzer/index.js.map +1 -1
  275. package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
  276. package/dist/statsAnalyzer/mqaUtil.js +295 -162
  277. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  278. package/dist/transcription/index.js +1 -2
  279. package/dist/transcription/index.js.map +1 -1
  280. package/dist/webinar/collection.d.ts +16 -0
  281. package/dist/webinar/collection.js +43 -0
  282. package/dist/webinar/collection.js.map +1 -0
  283. package/dist/webinar/index.d.ts +5 -0
  284. package/dist/webinar/index.js +68 -0
  285. package/dist/webinar/index.js.map +1 -0
  286. package/jest.config.js +3 -0
  287. package/package.json +44 -24
  288. package/process +1 -0
  289. package/src/common/errors/no-meeting-info.ts +24 -0
  290. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  291. package/src/common/errors/webex-errors.ts +19 -2
  292. package/src/common/logs/request.ts +5 -1
  293. package/src/config.ts +3 -5
  294. package/src/constants.ts +78 -8
  295. package/src/index.ts +4 -0
  296. package/src/interceptors/index.ts +3 -0
  297. package/src/interceptors/locusRetry.ts +67 -0
  298. package/src/locus-info/index.ts +52 -16
  299. package/src/locus-info/mediaSharesUtils.ts +16 -0
  300. package/src/locus-info/parser.ts +47 -21
  301. package/src/media/index.ts +8 -6
  302. package/src/media/properties.ts +17 -2
  303. package/src/mediaQualityMetrics/config.ts +103 -238
  304. package/src/meeting/in-meeting-actions.ts +8 -0
  305. package/src/meeting/index.ts +1692 -627
  306. package/src/meeting/request.ts +19 -1
  307. package/src/meeting/util.ts +102 -1
  308. package/src/meeting/voicea-meeting.ts +122 -0
  309. package/src/meeting-info/index.ts +47 -20
  310. package/src/meeting-info/meeting-info-v2.ts +32 -16
  311. package/src/meeting-info/util.ts +12 -9
  312. package/src/meeting-info/utilv2.ts +25 -15
  313. package/src/meetings/collection.ts +13 -0
  314. package/src/meetings/index.ts +112 -31
  315. package/src/meetings/util.ts +2 -8
  316. package/src/member/index.ts +9 -1
  317. package/src/member/member.types.ts +13 -0
  318. package/src/member/util.ts +14 -0
  319. package/src/members/index.ts +29 -2
  320. package/src/members/types.ts +1 -0
  321. package/src/members/util.ts +15 -1
  322. package/src/metrics/constants.ts +14 -0
  323. package/src/multistream/remoteMediaManager.ts +41 -4
  324. package/src/reachability/clusterReachability.ts +320 -0
  325. package/src/reachability/index.ts +221 -382
  326. package/src/reachability/request.ts +1 -1
  327. package/src/reachability/util.ts +24 -0
  328. package/src/reconnection-manager/index.ts +87 -83
  329. package/src/roap/index.ts +60 -24
  330. package/src/roap/request.ts +4 -17
  331. package/src/roap/turnDiscovery.ts +112 -39
  332. package/src/rtcMetrics/index.ts +71 -5
  333. package/src/statsAnalyzer/index.ts +430 -427
  334. package/src/statsAnalyzer/mqaUtil.ts +317 -168
  335. package/src/webinar/collection.ts +31 -0
  336. package/src/webinar/index.ts +62 -0
  337. package/test/integration/spec/converged-space-meetings.js +7 -7
  338. package/test/integration/spec/journey.js +88 -106
  339. package/test/integration/spec/space-meeting.js +10 -10
  340. package/test/unit/spec/breakouts/breakout.ts +2 -1
  341. package/test/unit/spec/breakouts/index.ts +7 -4
  342. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  343. package/test/unit/spec/locus-info/index.js +206 -13
  344. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  345. package/test/unit/spec/locus-info/mediaSharesUtils.ts +10 -0
  346. package/test/unit/spec/locus-info/parser.js +54 -13
  347. package/test/unit/spec/locus-info/selfUtils.js +1 -1
  348. package/test/unit/spec/media/index.ts +25 -4
  349. package/test/unit/spec/media/properties.ts +2 -2
  350. package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
  351. package/test/unit/spec/meeting/index.js +4354 -1285
  352. package/test/unit/spec/meeting/request.js +63 -12
  353. package/test/unit/spec/meeting/utils.js +145 -10
  354. package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
  355. package/test/unit/spec/meeting-info/index.js +180 -61
  356. package/test/unit/spec/meeting-info/meetinginfov2.js +216 -68
  357. package/test/unit/spec/meetings/collection.js +12 -0
  358. package/test/unit/spec/meetings/index.js +676 -195
  359. package/test/unit/spec/meetings/utils.js +35 -12
  360. package/test/unit/spec/member/index.js +8 -7
  361. package/test/unit/spec/member/util.js +32 -0
  362. package/test/unit/spec/members/index.js +130 -17
  363. package/test/unit/spec/members/utils.js +26 -0
  364. package/test/unit/spec/metrics/index.js +1 -2
  365. package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
  366. package/test/unit/spec/multistream/remoteMediaManager.ts +10 -2
  367. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  368. package/test/unit/spec/reachability/index.ts +505 -135
  369. package/test/unit/spec/reachability/util.ts +40 -0
  370. package/test/unit/spec/reconnection-manager/index.js +74 -17
  371. package/test/unit/spec/recording-controller/index.js +0 -1
  372. package/test/unit/spec/roap/index.ts +181 -61
  373. package/test/unit/spec/roap/request.ts +27 -3
  374. package/test/unit/spec/roap/turnDiscovery.ts +363 -102
  375. package/test/unit/spec/rtcMetrics/index.ts +57 -3
  376. package/test/unit/spec/stats-analyzer/index.js +1225 -12
  377. package/test/unit/spec/webinar/collection.ts +13 -0
  378. package/test/unit/spec/webinar/index.ts +60 -0
  379. package/test/utils/integrationTestUtils.js +4 -4
  380. package/test/utils/webex-test-users.js +12 -4
  381. package/dist/types/mediaQualityMetrics/config.d.ts +0 -365
  382. package/dist/types/reachability/index.d.ts +0 -158
  383. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -24
  384. /package/dist/{types/annotation → annotation}/annotation.types.d.ts +0 -0
  385. /package/dist/{types/annotation → annotation}/constants.d.ts +0 -0
  386. /package/dist/{types/annotation → annotation}/index.d.ts +0 -0
  387. /package/dist/{types/breakouts → breakouts}/breakout.d.ts +0 -0
  388. /package/dist/{types/breakouts → breakouts}/collection.d.ts +0 -0
  389. /package/dist/{types/breakouts → breakouts}/edit-lock-error.d.ts +0 -0
  390. /package/dist/{types/breakouts → breakouts}/events.d.ts +0 -0
  391. /package/dist/{types/breakouts → breakouts}/index.d.ts +0 -0
  392. /package/dist/{types/breakouts → breakouts}/request.d.ts +0 -0
  393. /package/dist/{types/breakouts → breakouts}/utils.d.ts +0 -0
  394. /package/dist/{types/common → common}/browser-detection.d.ts +0 -0
  395. /package/dist/{types/common → common}/collection.d.ts +0 -0
  396. /package/dist/{types/common → common}/config.d.ts +0 -0
  397. /package/dist/{types/common → common}/errors/captcha-error.d.ts +0 -0
  398. /package/dist/{types/common → common}/errors/intent-to-join.d.ts +0 -0
  399. /package/dist/{types/common → common}/errors/join-meeting.d.ts +0 -0
  400. /package/dist/{types/common → common}/errors/media.d.ts +0 -0
  401. /package/dist/{types/common → common}/errors/parameter.d.ts +0 -0
  402. /package/dist/{types/common → common}/errors/password-error.d.ts +0 -0
  403. /package/dist/{types/common → common}/errors/permission.d.ts +0 -0
  404. /package/dist/{types/common → common}/errors/reconnection-in-progress.d.ts +0 -0
  405. /package/dist/{types/common → common}/errors/reconnection.d.ts +0 -0
  406. /package/dist/{types/common → common}/errors/stats.d.ts +0 -0
  407. /package/dist/{types/common → common}/errors/webex-meetings-error.d.ts +0 -0
  408. /package/dist/{types/common → common}/events/events-scope.d.ts +0 -0
  409. /package/dist/{types/common → common}/events/events.d.ts +0 -0
  410. /package/dist/{types/common → common}/events/trigger-proxy.d.ts +0 -0
  411. /package/dist/{types/common → common}/events/util.d.ts +0 -0
  412. /package/dist/{types/common → common}/logs/logger-config.d.ts +0 -0
  413. /package/dist/{types/common → common}/logs/logger-proxy.d.ts +0 -0
  414. /package/dist/{types/common → common}/queue.d.ts +0 -0
  415. /package/dist/{types/controls-options-manager → controls-options-manager}/constants.d.ts +0 -0
  416. /package/dist/{types/controls-options-manager → controls-options-manager}/enums.d.ts +0 -0
  417. /package/dist/{types/controls-options-manager → controls-options-manager}/index.d.ts +0 -0
  418. /package/dist/{types/controls-options-manager → controls-options-manager}/types.d.ts +0 -0
  419. /package/dist/{types/controls-options-manager → controls-options-manager}/util.d.ts +0 -0
  420. /package/dist/{types/index.d.ts → index.d.ts} +0 -0
  421. /package/dist/{types/interpretation → interpretation}/collection.d.ts +0 -0
  422. /package/dist/{types/interpretation → interpretation}/index.d.ts +0 -0
  423. /package/dist/{types/interpretation → interpretation}/siLanguage.d.ts +0 -0
  424. /package/dist/{types/locus-info → locus-info}/controlsUtils.d.ts +0 -0
  425. /package/dist/{types/locus-info → locus-info}/embeddedAppsUtils.d.ts +0 -0
  426. /package/dist/{types/locus-info → locus-info}/fullState.d.ts +0 -0
  427. /package/dist/{types/locus-info → locus-info}/hostUtils.d.ts +0 -0
  428. /package/dist/{types/locus-info → locus-info}/infoUtils.d.ts +0 -0
  429. /package/dist/{types/locus-info → locus-info}/mediaSharesUtils.d.ts +0 -0
  430. /package/dist/{types/locus-info → locus-info}/selfUtils.d.ts +0 -0
  431. /package/dist/{types/media → media}/index.d.ts +0 -0
  432. /package/dist/{types/media → media}/properties.d.ts +0 -0
  433. /package/dist/{types/media → media}/util.d.ts +0 -0
  434. /package/dist/{types/meeting → meeting}/muteState.d.ts +0 -0
  435. /package/dist/{types/meeting → meeting}/request.type.d.ts +0 -0
  436. /package/dist/{types/meeting → meeting}/state.d.ts +0 -0
  437. /package/dist/{types/meeting-info → meeting-info}/collection.d.ts +0 -0
  438. /package/dist/{types/meeting-info → meeting-info}/request.d.ts +0 -0
  439. /package/dist/{types/meeting-info → meeting-info}/util.d.ts +0 -0
  440. /package/dist/{types/meeting-info → meeting-info}/utilv2.d.ts +0 -0
  441. /package/dist/{types/meetings → meetings}/meetings.types.d.ts +0 -0
  442. /package/dist/{types/meetings → meetings}/request.d.ts +0 -0
  443. /package/dist/{types/meetings → meetings}/util.d.ts +0 -0
  444. /package/dist/{types/member → member}/types.d.ts +0 -0
  445. /package/dist/{types/member → member}/util.d.ts +0 -0
  446. /package/dist/{types/members → members}/collection.d.ts +0 -0
  447. /package/dist/{types/members → members}/index.d.ts +0 -0
  448. /package/dist/{types/members → members}/request.d.ts +0 -0
  449. /package/dist/{types/metrics → metrics}/index.d.ts +0 -0
  450. /package/dist/{types/multistream → multistream}/mediaRequestManager.d.ts +0 -0
  451. /package/dist/{types/multistream → multistream}/receiveSlot.d.ts +0 -0
  452. /package/dist/{types/multistream → multistream}/receiveSlotManager.d.ts +0 -0
  453. /package/dist/{types/multistream → multistream}/remoteMedia.d.ts +0 -0
  454. /package/dist/{types/multistream → multistream}/remoteMediaGroup.d.ts +0 -0
  455. /package/dist/{types/multistream → multistream}/sendSlotManager.d.ts +0 -0
  456. /package/dist/{types/networkQualityMonitor → networkQualityMonitor}/index.d.ts +0 -0
  457. /package/dist/{types/personal-meeting-room → personal-meeting-room}/index.d.ts +0 -0
  458. /package/dist/{types/personal-meeting-room → personal-meeting-room}/request.d.ts +0 -0
  459. /package/dist/{types/personal-meeting-room → personal-meeting-room}/util.d.ts +0 -0
  460. /package/dist/{types/reactions → reactions}/constants.d.ts +0 -0
  461. /package/dist/{types/reactions → reactions}/reactions.d.ts +0 -0
  462. /package/dist/{types/reactions → reactions}/reactions.type.d.ts +0 -0
  463. /package/dist/{types/recording-controller → recording-controller}/enums.d.ts +0 -0
  464. /package/dist/{types/recording-controller → recording-controller}/index.d.ts +0 -0
  465. /package/dist/{types/recording-controller → recording-controller}/util.d.ts +0 -0
  466. /package/dist/{types/rtcMetrics → rtcMetrics}/constants.d.ts +0 -0
  467. /package/dist/{types/statsAnalyzer → statsAnalyzer}/global.d.ts +0 -0
  468. /package/dist/{types/transcription → transcription}/index.d.ts +0 -0
  469. /package/test/unit/spec/locus-info/{selfConstant.js → lib/selfConstant.js} +0 -0
@@ -33,11 +33,6 @@ describe('TurnDiscovery', () => {
33
33
 
34
34
  testMeeting = {
35
35
  id: 'fake meeting id',
36
- config: {
37
- experimental: {
38
- enableTurnDiscovery: true,
39
- },
40
- },
41
36
  correlationId: 'fake correlation id',
42
37
  selfUrl: 'fake self url',
43
38
  mediaId: 'fake media id',
@@ -54,7 +49,7 @@ describe('TurnDiscovery', () => {
54
49
  }),
55
50
  updateMediaConnections: sinon.stub(),
56
51
  webex: {meetings: {reachability: {
57
- isAnyClusterReachable: () => Promise.resolve(false),
52
+ isAnyPublicClusterReachable: () => Promise.resolve(false),
58
53
  }}},
59
54
  isMultistream: false,
60
55
  locusMediaRequest: { fake: true },
@@ -89,19 +84,13 @@ describe('TurnDiscovery', () => {
89
84
 
90
85
  if (messageType === 'TURN_DISCOVERY_REQUEST') {
91
86
  expectedSendRoapArgs.ipVersion = 0;
87
+ expectedSendRoapArgs.roapMessage.headers = ['includeAnswerInHttpResponse', 'noOkInTransaction'];
92
88
  }
93
-
94
- assert.calledWith(mockRoapRequest.sendRoap, expectedSendRoapArgs);
95
89
 
96
- if (messageType === 'TURN_DISCOVERY_REQUEST') {
97
- // check also that we've applied the media connections from the response
98
- assert.calledOnce(testMeeting.updateMediaConnections);
99
- assert.calledWith(testMeeting.updateMediaConnections, FAKE_MEDIA_CONNECTIONS_FROM_LOCUS);
100
- }
90
+ assert.calledWith(mockRoapRequest.sendRoap, expectedSendRoapArgs);
101
91
  };
102
92
 
103
93
  const checkFailureMetricsSent = () => {
104
- assert.calledOnce(Metrics.sendBehavioralMetric);
105
94
  assert.calledWith(
106
95
  Metrics.sendBehavioralMetric,
107
96
  BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE,
@@ -112,45 +101,318 @@ describe('TurnDiscovery', () => {
112
101
  );
113
102
  };
114
103
 
104
+ const checkHttpResponseMissingMetricsSent = () => {
105
+ assert.calledWith(
106
+ Metrics.sendBehavioralMetric,
107
+ BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING,
108
+ sinon.match({
109
+ correlationId: testMeeting.correlationId,
110
+ messageType: 'TURN_DISCOVERY_RESPONSE',
111
+ isMultistream: testMeeting.isMultistream,
112
+ })
113
+ );
114
+ };
115
+
115
116
  describe('doTurnDiscovery', () => {
116
- [false, true].forEach(function (enabledMultistream ) {
117
- it('sends TURN_DISCOVERY_REQUEST'+ (enabledMultistream ? ' when enable Multistream':'') + ', waits for response and sends OK', async () => {
118
- testMeeting.isMultistream = enabledMultistream;
117
+ [false, true].forEach(function (enabledMultistream) {
118
+ describe('when Multistream is ' + (enabledMultistream ? 'enabled' : 'disabled'), () => {
119
+ beforeEach(() => {
120
+ testMeeting.isMultistream = enabledMultistream;
121
+ });
119
122
 
120
- const td = new TurnDiscovery(mockRoapRequest);
123
+ // checks that OK roap message was sent or not sent and that the result is as expected
124
+ const checkResult = async (resultPromise, expectedRoapMessageSent, expectedResult) => {
125
+ let turnServerInfo, turnDiscoverySkippedReason;
126
+
127
+ if (expectedRoapMessageSent === 'OK') {
128
+ await testUtils.flushPromises();
129
+
130
+ // check that we've sent OK
131
+ await checkRoapMessageSent('OK', 0);
132
+
133
+ assert.calledWith(
134
+ Metrics.sendBehavioralMetric,
135
+ BEHAVIORAL_METRICS.TURN_DISCOVERY_REQUIRES_OK,
136
+ sinon.match({
137
+ correlation_id: testMeeting.correlationId,
138
+ locus_id: FAKE_LOCUS_ID,
139
+ })
140
+ );
141
+
142
+ ({turnServerInfo, turnDiscoverySkippedReason} = await resultPromise);
143
+ } else {
144
+ ({turnServerInfo, turnDiscoverySkippedReason} = await resultPromise);
145
+
146
+ await testUtils.flushPromises();
147
+
148
+ // check that we didn't send OK or any other message
149
+ assert.notCalled(mockRoapRequest.sendRoap);
150
+ }
151
+
152
+ assert.deepEqual(turnServerInfo, expectedResult);
153
+ assert.isUndefined(turnDiscoverySkippedReason);
154
+ };
155
+
156
+ it('sends TURN_DISCOVERY_REQUEST, waits for response and sends OK', async () => {
157
+ const td = new TurnDiscovery(mockRoapRequest);
158
+ const result = td.doTurnDiscovery(testMeeting, false);
159
+
160
+ // check that TURN_DISCOVERY_REQUEST was sent
161
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
162
+
163
+ // check also that we've applied the media connections from the response
164
+ assert.calledOnce(testMeeting.updateMediaConnections);
165
+ assert.calledWith(testMeeting.updateMediaConnections, FAKE_MEDIA_CONNECTIONS_FROM_LOCUS);
166
+
167
+ // response is not in http response, so we expect a metric for that
168
+ checkHttpResponseMissingMetricsSent();
169
+
170
+ // @ts-ignore
171
+ mockRoapRequest.sendRoap.resetHistory();
172
+
173
+ // simulate the response
174
+ td.handleTurnDiscoveryResponse(
175
+ {
176
+ messageType: 'TURN_DISCOVERY_RESPONSE',
177
+ headers: [
178
+ `x-cisco-turn-url=${FAKE_TURN_URL}`,
179
+ `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
180
+ `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
181
+ ],
182
+ },
183
+ 'from test'
184
+ );
185
+
186
+ await checkResult(result, 'OK', {
187
+ url: FAKE_TURN_URL,
188
+ username: FAKE_TURN_USERNAME,
189
+ password: FAKE_TURN_PASSWORD,
190
+ });
191
+ });
121
192
 
122
- const result = td.doTurnDiscovery(testMeeting, false);
193
+ it('sends TURN_DISCOVERY_REQUEST, waits for response and does not send OK if response received from Mercury has "noOkInTransaction" header', async () => {
194
+ const td = new TurnDiscovery(mockRoapRequest);
195
+ const result = td.doTurnDiscovery(testMeeting, false);
196
+
197
+ // check that TURN_DISCOVERY_REQUEST was sent
198
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
199
+
200
+ // check also that we've applied the media connections from the response
201
+ assert.calledOnce(testMeeting.updateMediaConnections);
202
+ assert.calledWith(testMeeting.updateMediaConnections, FAKE_MEDIA_CONNECTIONS_FROM_LOCUS);
203
+
204
+ // @ts-ignore
205
+ mockRoapRequest.sendRoap.resetHistory();
206
+
207
+ // simulate the response
208
+ td.handleTurnDiscoveryResponse(
209
+ {
210
+ messageType: 'TURN_DISCOVERY_RESPONSE',
211
+ headers: [
212
+ `x-cisco-turn-url=${FAKE_TURN_URL}`,
213
+ `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
214
+ `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
215
+ 'noOkInTransaction',
216
+ ],
217
+ },
218
+ 'from test'
219
+ );
220
+
221
+ await checkResult(result, undefined, {
222
+ url: FAKE_TURN_URL,
223
+ username: FAKE_TURN_USERNAME,
224
+ password: FAKE_TURN_PASSWORD,
225
+ });
226
+ });
123
227
 
124
- // check that TURN_DISCOVERY_REQUEST was sent
125
- await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
228
+ it('sends TURN_DISCOVERY_REQUEST, handles http response and does not send OK if received response has "noOkInTransaction" header', async () => {
229
+ mockRoapRequest.sendRoap = sinon.fake.resolves({
230
+ mediaConnections: [
231
+ {
232
+ mediaId: '464ff97f-4bda-466a-ad06-3a22184a2274',
233
+ remoteSdp: `{"roapMessage": {"messageType":"TURN_DISCOVERY_RESPONSE","seq":"0","headers": ["x-cisco-turn-url=${FAKE_TURN_URL}","x-cisco-turn-username=${FAKE_TURN_USERNAME}","x-cisco-turn-password=${FAKE_TURN_PASSWORD}", "noOkInTransaction"]}}`,
234
+ },
235
+ ],
236
+ });
237
+
238
+ const td = new TurnDiscovery(mockRoapRequest);
239
+ const result = td.doTurnDiscovery(testMeeting, false);
240
+
241
+ // check that TURN_DISCOVERY_REQUEST was sent
242
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
243
+
244
+ // @ts-ignore
245
+ mockRoapRequest.sendRoap.resetHistory();
246
+
247
+ await checkResult(result, undefined, {
248
+ url: FAKE_TURN_URL,
249
+ username: FAKE_TURN_USERNAME,
250
+ password: FAKE_TURN_PASSWORD,
251
+ });
252
+ });
126
253
 
127
- // @ts-ignore
128
- mockRoapRequest.sendRoap.resetHistory();
254
+ it('sends TURN_DISCOVERY_REQUEST, handles http response and sends OK if received response does not have "noOkInTransaction" header', async () => {
255
+ let sendRoapPromiseResolve;
256
+ const sendRoapResult = {
257
+ mediaConnections: [
258
+ {
259
+ mediaId: '464ff97f-4bda-466a-ad06-3a22184a2274',
260
+ remoteSdp: `{"roapMessage": {"messageType":"TURN_DISCOVERY_RESPONSE","seq":"0","headers": ["x-cisco-turn-url=${FAKE_TURN_URL}","x-cisco-turn-username=${FAKE_TURN_USERNAME}","x-cisco-turn-password=${FAKE_TURN_PASSWORD}"]}}`,
261
+ },
262
+ ],
263
+ };
264
+ mockRoapRequest.sendRoap = sinon.fake.returns(new Promise((resolve) => {
265
+ sendRoapPromiseResolve = resolve;
266
+ }));
267
+
268
+ const td = new TurnDiscovery(mockRoapRequest);
269
+ const result = td.doTurnDiscovery(testMeeting, false);
270
+
271
+ // check that TURN_DISCOVERY_REQUEST was sent
272
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
273
+
274
+ // @ts-ignore
275
+ mockRoapRequest.sendRoap.resetHistory();
276
+ // simulate the http response without 'noOkInTransaction' header
277
+ sendRoapPromiseResolve(sendRoapResult);
278
+
279
+ await checkResult(result, 'OK', {
280
+ url: FAKE_TURN_URL,
281
+ username: FAKE_TURN_USERNAME,
282
+ password: FAKE_TURN_PASSWORD,
283
+ });
284
+ });
129
285
 
130
- // simulate the response
131
- td.handleTurnDiscoveryResponse({
132
- headers: [
133
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
134
- `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
135
- `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
136
- ]
286
+ it('handles http response that has invalid JSON in the remoteSdp field', async () => {
287
+ mockRoapRequest.sendRoap = sinon.fake.resolves({
288
+ mediaConnections: [
289
+ {
290
+ mediaId: '464ff97f-4bda-466a-ad06-3a22184a2274',
291
+ remoteSdp: `not a json`,
292
+ },
293
+ ],
294
+ });
295
+
296
+ const td = new TurnDiscovery(mockRoapRequest);
297
+ const result = td.doTurnDiscovery(testMeeting, false);
298
+
299
+ // check that TURN_DISCOVERY_REQUEST was sent
300
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
301
+
302
+ // @ts-ignore
303
+ mockRoapRequest.sendRoap.resetHistory();
304
+
305
+ await checkResult(result, undefined, undefined);
306
+ checkFailureMetricsSent();
137
307
  });
138
308
 
139
- await testUtils.flushPromises();
309
+ it('waits for response from Mercury if http response does not contain a roapMessage', async () => {
310
+ mockRoapRequest.sendRoap = sinon.fake.resolves({
311
+ mediaConnections: [
312
+ {
313
+ mediaId: '464ff97f-4bda-466a-ad06-3a22184a2274',
314
+ remoteSdp: `{"something": "whatever"}`,
315
+ },
316
+ ],
317
+ });
318
+
319
+ const td = new TurnDiscovery(mockRoapRequest);
320
+ const result = td.doTurnDiscovery(testMeeting, false);
321
+
322
+ // check that TURN_DISCOVERY_REQUEST was sent
323
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
324
+
325
+ checkHttpResponseMissingMetricsSent();
326
+
327
+ // @ts-ignore
328
+ mockRoapRequest.sendRoap.resetHistory();
329
+
330
+ // simulate the response coming from Mercury
331
+ td.handleTurnDiscoveryResponse(
332
+ {
333
+ messageType: 'TURN_DISCOVERY_RESPONSE',
334
+ headers: [
335
+ `x-cisco-turn-url=${FAKE_TURN_URL}`,
336
+ `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
337
+ `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
338
+ ],
339
+ },
340
+ 'from test'
341
+ );
342
+
343
+ await checkResult(result, 'OK', {
344
+ url: FAKE_TURN_URL,
345
+ username: FAKE_TURN_USERNAME,
346
+ password: FAKE_TURN_PASSWORD,
347
+ });
348
+ });
349
+
350
+ it('handles unexpected roap message type in http response', async () => {
351
+ mockRoapRequest.sendRoap = sinon.fake.resolves({
352
+ mediaConnections: [
353
+ {
354
+ mediaId: '464ff97f-4bda-466a-ad06-3a22184a2274',
355
+ remoteSdp: `{"roapMessage": {"messageType":"ERROR","seq":"0"}}`,
356
+ },
357
+ ],
358
+ });
359
+
360
+ const td = new TurnDiscovery(mockRoapRequest);
361
+ const result = td.doTurnDiscovery(testMeeting, false);
140
362
 
141
- // check that we've sent OK
142
- await checkRoapMessageSent('OK', 0);
363
+ // check that TURN_DISCOVERY_REQUEST was sent
364
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
143
365
 
144
- const {turnServerInfo, turnDiscoverySkippedReason} = await result;
366
+ // @ts-ignore
367
+ mockRoapRequest.sendRoap.resetHistory();
145
368
 
146
- assert.deepEqual(turnServerInfo, {
147
- url: FAKE_TURN_URL,
148
- username: FAKE_TURN_USERNAME,
149
- password: FAKE_TURN_PASSWORD
369
+ await checkResult(result, undefined, undefined);
150
370
  });
371
+ });
372
+ });
373
+
374
+ it('sends TURN_DISCOVERY_REQUEST, waits for response and sends OK when isForced = true when cluster is reachable', async () => {
375
+ const prev = testMeeting.webex.meetings.reachability.isAnyPublicClusterReachable;
376
+ testMeeting.webex.meetings.reachability.isAnyPublicClusterReachable = sinon
377
+ .stub()
378
+ .resolves(true);
379
+
380
+ const td = new TurnDiscovery(mockRoapRequest);
381
+ const result = td.doTurnDiscovery(testMeeting, false, true);
382
+
383
+ // We ignore reachability results so we don't get skip reason
384
+ assert.notCalled(testMeeting.webex.meetings.reachability.isAnyPublicClusterReachable);
151
385
 
152
- assert.isUndefined(turnDiscoverySkippedReason);
386
+ // check that TURN_DISCOVERY_REQUEST was sent
387
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
388
+ // @ts-ignore
389
+ mockRoapRequest.sendRoap.resetHistory();
390
+ // simulate the response
391
+ td.handleTurnDiscoveryResponse(
392
+ {
393
+ messageType: 'TURN_DISCOVERY_RESPONSE',
394
+ headers: [
395
+ `x-cisco-turn-url=${FAKE_TURN_URL}`,
396
+ `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
397
+ `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
398
+ ],
399
+ },
400
+ 'from test'
401
+ );
402
+ await testUtils.flushPromises();
403
+ // check that we've sent OK
404
+ await checkRoapMessageSent('OK', 0);
405
+
406
+ const {turnServerInfo, turnDiscoverySkippedReason} = await result;
407
+ assert.deepEqual(turnServerInfo, {
408
+ url: FAKE_TURN_URL,
409
+ username: FAKE_TURN_USERNAME,
410
+ password: FAKE_TURN_PASSWORD,
153
411
  });
412
+ assert.isUndefined(turnDiscoverySkippedReason);
413
+
414
+ // restore previous callback
415
+ testMeeting.webex.meetings.reachability.isAnyPublicClusterReachable = prev;
154
416
  });
155
417
 
156
418
  it('sends TURN_DISCOVERY_REQUEST with empty mediaId when isReconnecting is true', async () => {
@@ -166,13 +428,17 @@ describe('TurnDiscovery', () => {
166
428
  mockRoapRequest.sendRoap.resetHistory();
167
429
 
168
430
  // simulate the response
169
- td.handleTurnDiscoveryResponse({
170
- headers: [
171
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
172
- `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
173
- `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
174
- ],
175
- });
431
+ td.handleTurnDiscoveryResponse(
432
+ {
433
+ messageType: 'TURN_DISCOVERY_RESPONSE',
434
+ headers: [
435
+ `x-cisco-turn-url=${FAKE_TURN_URL}`,
436
+ `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
437
+ `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
438
+ ],
439
+ },
440
+ 'from test'
441
+ );
176
442
 
177
443
  await testUtils.flushPromises();
178
444
 
@@ -199,16 +465,20 @@ describe('TurnDiscovery', () => {
199
465
  mockRoapRequest.sendRoap.resetHistory();
200
466
 
201
467
  // simulate the response with some extra headers
202
- td.handleTurnDiscoveryResponse({
203
- headers: [
204
- 'x-cisco-turn-unexpected-header=xxx',
205
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
206
- 'x-cisco-some-other-header',
207
- `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
208
- `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
209
- 'another-header-at-the-end=12345',
210
- ],
211
- });
468
+ td.handleTurnDiscoveryResponse(
469
+ {
470
+ messageType: 'TURN_DISCOVERY_RESPONSE',
471
+ headers: [
472
+ 'x-cisco-turn-unexpected-header=xxx',
473
+ `x-cisco-turn-url=${FAKE_TURN_URL}`,
474
+ 'x-cisco-some-other-header',
475
+ `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
476
+ `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
477
+ 'another-header-at-the-end=12345',
478
+ ],
479
+ },
480
+ 'from test'
481
+ );
212
482
 
213
483
  await testUtils.flushPromises();
214
484
 
@@ -224,24 +494,6 @@ describe('TurnDiscovery', () => {
224
494
  assert.isUndefined(turnDiscoverySkippedReason);
225
495
  });
226
496
 
227
- it('resolves with undefined if turn discovery feature is disabled in config', async () => {
228
- const prevConfigValue = testMeeting.config.experimental.enableTurnDiscovery;
229
-
230
- testMeeting.config.experimental.enableTurnDiscovery = false;
231
- // @ts-ignore
232
- const result = await new TurnDiscovery(mockRoapRequest).doTurnDiscovery(testMeeting);
233
-
234
- const {turnServerInfo, turnDiscoverySkippedReason} = result;
235
-
236
- assert.isUndefined(turnServerInfo);
237
- assert.equal(turnDiscoverySkippedReason, 'config');
238
- assert.notCalled(mockRoapRequest.sendRoap);
239
- assert.notCalled(Metrics.sendBehavioralMetric);
240
-
241
- // restore previous config
242
- testMeeting.config.experimental.enableTurnDiscovery = prevConfigValue;
243
- });
244
-
245
497
  it('resolves with undefined if sending the request fails', async () => {
246
498
  const td = new TurnDiscovery(mockRoapRequest);
247
499
 
@@ -257,8 +509,9 @@ describe('TurnDiscovery', () => {
257
509
  });
258
510
 
259
511
  it('resolves with undefined when cluster is reachable', async () => {
260
- const prev = testMeeting.webex.meetings.reachability.isAnyClusterReachable;
261
- testMeeting.webex.meetings.reachability.isAnyClusterReachable = () => Promise.resolve(true);
512
+ const prev = testMeeting.webex.meetings.reachability.isAnyPublicClusterReachable;
513
+ testMeeting.webex.meetings.reachability.isAnyPublicClusterReachable = () =>
514
+ Promise.resolve(true);
262
515
  const result = await new TurnDiscovery(mockRoapRequest).doTurnDiscovery(testMeeting);
263
516
 
264
517
  const {turnServerInfo, turnDiscoverySkippedReason} = result;
@@ -267,7 +520,7 @@ describe('TurnDiscovery', () => {
267
520
  assert.equal(turnDiscoverySkippedReason, 'reachability');
268
521
  assert.notCalled(mockRoapRequest.sendRoap);
269
522
  assert.notCalled(Metrics.sendBehavioralMetric);
270
- testMeeting.webex.meetings.reachability.isAnyClusterReachable = prev;
523
+ testMeeting.webex.meetings.reachability.isAnyPublicClusterReachable = prev;
271
524
  });
272
525
 
273
526
  it("resolves with undefined if we don't get a response within 10s", async () => {
@@ -292,12 +545,16 @@ describe('TurnDiscovery', () => {
292
545
  await testUtils.flushPromises();
293
546
 
294
547
  // simulate the response without the password
295
- td.handleTurnDiscoveryResponse({
296
- headers: [
297
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
298
- `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
299
- ],
300
- });
548
+ td.handleTurnDiscoveryResponse(
549
+ {
550
+ messageType: 'TURN_DISCOVERY_RESPONSE',
551
+ headers: [
552
+ `x-cisco-turn-url=${FAKE_TURN_URL}`,
553
+ `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
554
+ ],
555
+ },
556
+ 'from test'
557
+ );
301
558
  await testUtils.flushPromises();
302
559
  const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
303
560
 
@@ -313,7 +570,7 @@ describe('TurnDiscovery', () => {
313
570
  await testUtils.flushPromises();
314
571
 
315
572
  // simulate the response without the headers
316
- td.handleTurnDiscoveryResponse({});
573
+ td.handleTurnDiscoveryResponse({messageType: 'TURN_DISCOVERY_RESPONSE'}, 'from test');
317
574
 
318
575
  await testUtils.flushPromises();
319
576
  const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
@@ -330,7 +587,10 @@ describe('TurnDiscovery', () => {
330
587
  await testUtils.flushPromises();
331
588
 
332
589
  // simulate the response without the headers
333
- td.handleTurnDiscoveryResponse({headers: []});
590
+ td.handleTurnDiscoveryResponse(
591
+ {messageType: 'TURN_DISCOVERY_RESPONSE', headers: []},
592
+ 'from test'
593
+ );
334
594
 
335
595
  await testUtils.flushPromises();
336
596
  const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
@@ -356,13 +616,17 @@ describe('TurnDiscovery', () => {
356
616
  mockRoapRequest.sendRoap = sinon.fake.rejects(new Error('fake error'));
357
617
 
358
618
  // simulate the response
359
- td.handleTurnDiscoveryResponse({
360
- headers: [
361
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
362
- `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
363
- `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
364
- ],
365
- });
619
+ td.handleTurnDiscoveryResponse(
620
+ {
621
+ messageType: 'TURN_DISCOVERY_RESPONSE',
622
+ headers: [
623
+ `x-cisco-turn-url=${FAKE_TURN_URL}`,
624
+ `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
625
+ `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
626
+ ],
627
+ },
628
+ 'from test'
629
+ );
366
630
 
367
631
  await testUtils.flushPromises();
368
632
 
@@ -379,15 +643,11 @@ describe('TurnDiscovery', () => {
379
643
 
380
644
  describe('isSkipped', () => {
381
645
  [
382
- {enabledInConfig: true, isAnyClusterReachable: true, expectedIsSkipped: true},
383
- {enabledInConfig: true, isAnyClusterReachable: false, expectedIsSkipped: false},
384
- {enabledInConfig: false, isAnyClusterReachable: true, expectedIsSkipped: true},
385
- {enabledInConfig: false, isAnyClusterReachable: false, expectedIsSkipped: true},
386
- ].forEach(({enabledInConfig, isAnyClusterReachable, expectedIsSkipped}) => {
387
- it(`returns ${expectedIsSkipped} when TURN discovery is ${enabledInConfig ? '' : 'not '} enabled in config and isAnyClusterReachable() returns ${isAnyClusterReachable ? 'true' : 'false'}`, async () => {
388
- testMeeting.config.experimental.enableTurnDiscovery = enabledInConfig;
389
-
390
- sinon.stub(testMeeting.webex.meetings.reachability, 'isAnyClusterReachable').resolves(isAnyClusterReachable);
646
+ {isAnyPublicClusterReachable: true, expectedIsSkipped: true},
647
+ {isAnyPublicClusterReachable: false, expectedIsSkipped: false},
648
+ ].forEach(({isAnyPublicClusterReachable, expectedIsSkipped}) => {
649
+ it(`returns ${expectedIsSkipped} when isAnyPublicClusterReachable() returns ${isAnyPublicClusterReachable ? 'true' : 'false'}`, async () => {
650
+ sinon.stub(testMeeting.webex.meetings.reachability, 'isAnyPublicClusterReachable').resolves(isAnyPublicClusterReachable);
391
651
 
392
652
  const td = new TurnDiscovery(mockRoapRequest);
393
653
 
@@ -405,12 +665,13 @@ describe('TurnDiscovery', () => {
405
665
  // there is not much we can check, but we mainly want to make
406
666
  // sure that it doesn't crash
407
667
  td.handleTurnDiscoveryResponse({
668
+ messageType: 'TURN_DISCOVERY_RESPONSE',
408
669
  headers: [
409
670
  `x-cisco-turn-url=${FAKE_TURN_URL}`,
410
671
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
411
672
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
412
673
  ],
413
- });
674
+ }, 'from test');
414
675
 
415
676
  assert.notCalled(mockRoapRequest.sendRoap);
416
677
  });