@webex/plugin-meetings 3.0.0-beta.39 → 3.0.0-beta.391

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 (393) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +671 -81
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +45 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/no-meeting-info.js +51 -0
  17. package/dist/common/errors/no-meeting-info.js.map +1 -0
  18. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  19. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +48 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/logs/request.js +5 -1
  25. package/dist/common/logs/request.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +5 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +242 -33
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +110 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/interceptors/index.js +15 -0
  43. package/dist/interceptors/index.js.map +1 -0
  44. package/dist/interceptors/locusRetry.js +93 -0
  45. package/dist/interceptors/locusRetry.js.map +1 -0
  46. package/dist/interpretation/collection.js +23 -0
  47. package/dist/interpretation/collection.js.map +1 -0
  48. package/dist/interpretation/index.js +380 -0
  49. package/dist/interpretation/index.js.map +1 -0
  50. package/dist/interpretation/siLanguage.js +25 -0
  51. package/dist/interpretation/siLanguage.js.map +1 -0
  52. package/dist/locus-info/controlsUtils.js +91 -2
  53. package/dist/locus-info/controlsUtils.js.map +1 -1
  54. package/dist/locus-info/index.js +386 -62
  55. package/dist/locus-info/index.js.map +1 -1
  56. package/dist/locus-info/infoUtils.js +7 -1
  57. package/dist/locus-info/infoUtils.js.map +1 -1
  58. package/dist/locus-info/mediaSharesUtils.js +71 -1
  59. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  60. package/dist/locus-info/parser.js +249 -72
  61. package/dist/locus-info/parser.js.map +1 -1
  62. package/dist/locus-info/selfUtils.js +89 -14
  63. package/dist/locus-info/selfUtils.js.map +1 -1
  64. package/dist/media/index.js +65 -102
  65. package/dist/media/index.js.map +1 -1
  66. package/dist/media/properties.js +73 -124
  67. package/dist/media/properties.js.map +1 -1
  68. package/dist/mediaQualityMetrics/config.js +135 -330
  69. package/dist/mediaQualityMetrics/config.js.map +1 -1
  70. package/dist/meeting/in-meeting-actions.js +86 -2
  71. package/dist/meeting/in-meeting-actions.js.map +1 -1
  72. package/dist/meeting/index.js +4075 -2827
  73. package/dist/meeting/index.js.map +1 -1
  74. package/dist/meeting/locusMediaRequest.js +292 -0
  75. package/dist/meeting/locusMediaRequest.js.map +1 -0
  76. package/dist/meeting/muteState.js +224 -136
  77. package/dist/meeting/muteState.js.map +1 -1
  78. package/dist/meeting/request.js +177 -152
  79. package/dist/meeting/request.js.map +1 -1
  80. package/dist/meeting/util.js +672 -417
  81. package/dist/meeting/util.js.map +1 -1
  82. package/dist/meeting-info/index.js +73 -7
  83. package/dist/meeting-info/index.js.map +1 -1
  84. package/dist/meeting-info/meeting-info-v2.js +192 -51
  85. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  86. package/dist/meeting-info/util.js +1 -1
  87. package/dist/meeting-info/util.js.map +1 -1
  88. package/dist/meeting-info/utilv2.js +36 -36
  89. package/dist/meeting-info/utilv2.js.map +1 -1
  90. package/dist/meetings/collection.js +39 -0
  91. package/dist/meetings/collection.js.map +1 -1
  92. package/dist/meetings/index.js +484 -119
  93. package/dist/meetings/index.js.map +1 -1
  94. package/dist/meetings/meetings.types.js +7 -0
  95. package/dist/meetings/meetings.types.js.map +1 -0
  96. package/dist/meetings/request.js +2 -0
  97. package/dist/meetings/request.js.map +1 -1
  98. package/dist/meetings/util.js +73 -7
  99. package/dist/meetings/util.js.map +1 -1
  100. package/dist/member/index.js +58 -0
  101. package/dist/member/index.js.map +1 -1
  102. package/dist/member/types.js +25 -0
  103. package/dist/member/types.js.map +1 -0
  104. package/dist/member/util.js +132 -25
  105. package/dist/member/util.js.map +1 -1
  106. package/dist/members/collection.js +10 -0
  107. package/dist/members/collection.js.map +1 -1
  108. package/dist/members/index.js +102 -6
  109. package/dist/members/index.js.map +1 -1
  110. package/dist/members/request.js +106 -38
  111. package/dist/members/request.js.map +1 -1
  112. package/dist/members/types.js +15 -0
  113. package/dist/members/types.js.map +1 -0
  114. package/dist/members/util.js +326 -232
  115. package/dist/members/util.js.map +1 -1
  116. package/dist/metrics/constants.js +18 -1
  117. package/dist/metrics/constants.js.map +1 -1
  118. package/dist/metrics/index.js +1 -446
  119. package/dist/metrics/index.js.map +1 -1
  120. package/dist/multistream/mediaRequestManager.js +223 -32
  121. package/dist/multistream/mediaRequestManager.js.map +1 -1
  122. package/dist/multistream/receiveSlot.js +10 -0
  123. package/dist/multistream/receiveSlot.js.map +1 -1
  124. package/dist/multistream/receiveSlotManager.js +39 -36
  125. package/dist/multistream/receiveSlotManager.js.map +1 -1
  126. package/dist/multistream/remoteMedia.js +3 -1
  127. package/dist/multistream/remoteMedia.js.map +1 -1
  128. package/dist/multistream/remoteMediaGroup.js +76 -5
  129. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  130. package/dist/multistream/remoteMediaManager.js +366 -104
  131. package/dist/multistream/remoteMediaManager.js.map +1 -1
  132. package/dist/multistream/sendSlotManager.js +255 -0
  133. package/dist/multistream/sendSlotManager.js.map +1 -0
  134. package/dist/reachability/clusterReachability.js +356 -0
  135. package/dist/reachability/clusterReachability.js.map +1 -0
  136. package/dist/reachability/index.js +263 -390
  137. package/dist/reachability/index.js.map +1 -1
  138. package/dist/reachability/request.js +6 -4
  139. package/dist/reachability/request.js.map +1 -1
  140. package/dist/reachability/util.js +29 -0
  141. package/dist/reachability/util.js.map +1 -0
  142. package/dist/reconnection-manager/index.js +266 -202
  143. package/dist/reconnection-manager/index.js.map +1 -1
  144. package/dist/recording-controller/index.js +21 -2
  145. package/dist/recording-controller/index.js.map +1 -1
  146. package/dist/recording-controller/util.js +9 -8
  147. package/dist/recording-controller/util.js.map +1 -1
  148. package/dist/roap/index.js +51 -28
  149. package/dist/roap/index.js.map +1 -1
  150. package/dist/roap/request.js +48 -64
  151. package/dist/roap/request.js.map +1 -1
  152. package/dist/roap/turnDiscovery.js +220 -70
  153. package/dist/roap/turnDiscovery.js.map +1 -1
  154. package/dist/rtcMetrics/constants.js +12 -0
  155. package/dist/rtcMetrics/constants.js.map +1 -0
  156. package/dist/rtcMetrics/index.js +179 -0
  157. package/dist/rtcMetrics/index.js.map +1 -0
  158. package/dist/statsAnalyzer/index.js +357 -295
  159. package/dist/statsAnalyzer/index.js.map +1 -1
  160. package/dist/statsAnalyzer/mqaUtil.js +296 -156
  161. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  162. package/dist/types/annotation/annotation.types.d.ts +42 -0
  163. package/dist/types/annotation/constants.d.ts +31 -0
  164. package/dist/types/annotation/index.d.ts +117 -0
  165. package/dist/types/breakouts/events.d.ts +8 -0
  166. package/dist/types/breakouts/utils.d.ts +14 -0
  167. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  168. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  169. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  170. package/dist/types/common/logs/request.d.ts +2 -0
  171. package/dist/types/common/queue.d.ts +9 -7
  172. package/dist/types/config.d.ts +2 -7
  173. package/dist/types/constants.d.ts +203 -31
  174. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  175. package/dist/types/controls-options-manager/index.d.ts +17 -1
  176. package/dist/types/controls-options-manager/types.d.ts +43 -0
  177. package/dist/types/controls-options-manager/util.d.ts +1 -7
  178. package/dist/types/index.d.ts +6 -5
  179. package/dist/types/interceptors/index.d.ts +2 -0
  180. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  181. package/dist/types/interpretation/collection.d.ts +5 -0
  182. package/dist/types/interpretation/index.d.ts +5 -0
  183. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  184. package/dist/types/locus-info/index.d.ts +57 -4
  185. package/dist/types/locus-info/parser.d.ts +66 -6
  186. package/dist/types/media/index.d.ts +2 -0
  187. package/dist/types/media/properties.d.ts +34 -49
  188. package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
  189. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  190. package/dist/types/meeting/index.d.ts +567 -496
  191. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  192. package/dist/types/meeting/muteState.d.ts +93 -25
  193. package/dist/types/meeting/request.d.ts +64 -43
  194. package/dist/types/meeting/util.d.ts +117 -1
  195. package/dist/types/meeting-info/index.d.ts +13 -1
  196. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  197. package/dist/types/meetings/collection.d.ts +17 -0
  198. package/dist/types/meetings/index.d.ts +113 -21
  199. package/dist/types/meetings/meetings.types.d.ts +4 -0
  200. package/dist/types/member/index.d.ts +14 -0
  201. package/dist/types/member/types.d.ts +32 -0
  202. package/dist/types/members/collection.d.ts +5 -0
  203. package/dist/types/members/index.d.ts +35 -2
  204. package/dist/types/members/request.d.ts +73 -9
  205. package/dist/types/members/types.d.ts +25 -0
  206. package/dist/types/members/util.d.ts +214 -1
  207. package/dist/types/metrics/constants.d.ts +17 -0
  208. package/dist/types/metrics/index.d.ts +4 -111
  209. package/dist/types/multistream/mediaRequestManager.d.ts +72 -3
  210. package/dist/types/multistream/receiveSlot.d.ts +7 -3
  211. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  212. package/dist/types/multistream/remoteMedia.d.ts +3 -31
  213. package/dist/types/multistream/remoteMediaGroup.d.ts +2 -9
  214. package/dist/types/multistream/remoteMediaManager.d.ts +62 -2
  215. package/dist/types/multistream/sendSlotManager.d.ts +70 -0
  216. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  217. package/dist/types/reachability/index.d.ts +60 -95
  218. package/dist/types/reachability/request.d.ts +3 -1
  219. package/dist/types/reachability/util.d.ts +8 -0
  220. package/dist/types/reconnection-manager/index.d.ts +19 -0
  221. package/dist/types/recording-controller/index.d.ts +15 -1
  222. package/dist/types/recording-controller/util.d.ts +5 -4
  223. package/dist/types/roap/index.d.ts +2 -1
  224. package/dist/types/roap/request.d.ts +9 -8
  225. package/dist/types/roap/turnDiscovery.d.ts +39 -5
  226. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  227. package/dist/types/rtcMetrics/index.d.ts +61 -0
  228. package/dist/types/statsAnalyzer/index.d.ts +34 -12
  229. package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
  230. package/dist/types/webinar/collection.d.ts +16 -0
  231. package/dist/types/webinar/index.d.ts +5 -0
  232. package/dist/webinar/collection.js +44 -0
  233. package/dist/webinar/collection.js.map +1 -0
  234. package/dist/webinar/index.js +69 -0
  235. package/dist/webinar/index.js.map +1 -0
  236. package/package.json +22 -19
  237. package/src/annotation/annotation.types.ts +50 -0
  238. package/src/annotation/constants.ts +36 -0
  239. package/src/annotation/index.ts +328 -0
  240. package/src/breakouts/README.md +35 -11
  241. package/src/breakouts/breakout.ts +67 -9
  242. package/src/breakouts/events.ts +56 -0
  243. package/src/breakouts/index.ts +558 -59
  244. package/src/breakouts/utils.ts +42 -0
  245. package/src/common/errors/no-meeting-info.ts +24 -0
  246. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  247. package/src/common/errors/webex-errors.ts +44 -2
  248. package/src/common/logs/logger-proxy.ts +1 -1
  249. package/src/common/logs/request.ts +5 -1
  250. package/src/common/queue.ts +22 -8
  251. package/src/config.ts +4 -9
  252. package/src/constants.ts +229 -21
  253. package/src/controls-options-manager/enums.ts +12 -0
  254. package/src/controls-options-manager/index.ts +116 -21
  255. package/src/controls-options-manager/types.ts +59 -0
  256. package/src/controls-options-manager/util.ts +294 -14
  257. package/src/index.ts +44 -0
  258. package/src/interceptors/index.ts +3 -0
  259. package/src/interceptors/locusRetry.ts +67 -0
  260. package/src/interpretation/README.md +60 -0
  261. package/src/interpretation/collection.ts +19 -0
  262. package/src/interpretation/index.ts +349 -0
  263. package/src/interpretation/siLanguage.ts +18 -0
  264. package/src/locus-info/controlsUtils.ts +108 -0
  265. package/src/locus-info/index.ts +417 -59
  266. package/src/locus-info/infoUtils.ts +10 -2
  267. package/src/locus-info/mediaSharesUtils.ts +80 -0
  268. package/src/locus-info/parser.ts +258 -47
  269. package/src/locus-info/selfUtils.ts +81 -5
  270. package/src/media/index.ts +100 -108
  271. package/src/media/properties.ts +88 -117
  272. package/src/mediaQualityMetrics/config.ts +103 -238
  273. package/src/meeting/in-meeting-actions.ts +171 -3
  274. package/src/meeting/index.ts +3411 -2435
  275. package/src/meeting/locusMediaRequest.ts +313 -0
  276. package/src/meeting/muteState.ts +223 -136
  277. package/src/meeting/request.ts +155 -120
  278. package/src/meeting/util.ts +685 -395
  279. package/src/meeting-info/index.ts +81 -8
  280. package/src/meeting-info/meeting-info-v2.ts +170 -14
  281. package/src/meeting-info/util.ts +1 -1
  282. package/src/meeting-info/utilv2.ts +23 -23
  283. package/src/meetings/collection.ts +33 -0
  284. package/src/meetings/index.ts +507 -127
  285. package/src/meetings/meetings.types.ts +12 -0
  286. package/src/meetings/request.ts +2 -0
  287. package/src/meetings/util.ts +81 -12
  288. package/src/member/index.ts +58 -0
  289. package/src/member/types.ts +38 -0
  290. package/src/member/util.ts +141 -25
  291. package/src/members/collection.ts +8 -0
  292. package/src/members/index.ts +134 -8
  293. package/src/members/request.ts +97 -17
  294. package/src/members/types.ts +29 -0
  295. package/src/members/util.ts +333 -240
  296. package/src/metrics/constants.ts +17 -0
  297. package/src/metrics/index.ts +1 -469
  298. package/src/multistream/mediaRequestManager.ts +271 -56
  299. package/src/multistream/receiveSlot.ts +11 -4
  300. package/src/multistream/receiveSlotManager.ts +34 -24
  301. package/src/multistream/remoteMedia.ts +5 -3
  302. package/src/multistream/remoteMediaGroup.ts +78 -0
  303. package/src/multistream/remoteMediaManager.ts +248 -44
  304. package/src/multistream/sendSlotManager.ts +199 -0
  305. package/src/reachability/clusterReachability.ts +320 -0
  306. package/src/reachability/index.ts +229 -346
  307. package/src/reachability/request.ts +8 -4
  308. package/src/reachability/util.ts +24 -0
  309. package/src/reconnection-manager/index.ts +128 -97
  310. package/src/recording-controller/index.ts +20 -3
  311. package/src/recording-controller/util.ts +26 -9
  312. package/src/roap/index.ts +52 -23
  313. package/src/roap/request.ts +48 -67
  314. package/src/roap/turnDiscovery.ts +147 -49
  315. package/src/rtcMetrics/constants.ts +3 -0
  316. package/src/rtcMetrics/index.ts +166 -0
  317. package/src/statsAnalyzer/index.ts +457 -416
  318. package/src/statsAnalyzer/mqaUtil.ts +317 -170
  319. package/src/webinar/collection.ts +31 -0
  320. package/src/webinar/index.ts +62 -0
  321. package/test/integration/spec/converged-space-meetings.js +60 -3
  322. package/test/integration/spec/journey.js +320 -261
  323. package/test/integration/spec/space-meeting.js +76 -3
  324. package/test/unit/spec/annotation/index.ts +418 -0
  325. package/test/unit/spec/breakouts/breakout.ts +118 -28
  326. package/test/unit/spec/breakouts/events.ts +89 -0
  327. package/test/unit/spec/breakouts/index.ts +1349 -114
  328. package/test/unit/spec/breakouts/utils.js +52 -1
  329. package/test/unit/spec/common/queue.js +31 -2
  330. package/test/unit/spec/controls-options-manager/index.js +163 -0
  331. package/test/unit/spec/controls-options-manager/util.js +576 -60
  332. package/test/unit/spec/fixture/locus.js +1 -0
  333. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  334. package/test/unit/spec/interpretation/collection.ts +15 -0
  335. package/test/unit/spec/interpretation/index.ts +625 -0
  336. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  337. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  338. package/test/unit/spec/locus-info/index.js +1363 -37
  339. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  340. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  341. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  342. package/test/unit/spec/locus-info/parser.js +116 -35
  343. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  344. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  345. package/test/unit/spec/media/index.ts +173 -81
  346. package/test/unit/spec/media/properties.ts +2 -2
  347. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  348. package/test/unit/spec/meeting/index.js +6821 -2172
  349. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  350. package/test/unit/spec/meeting/muteState.js +402 -212
  351. package/test/unit/spec/meeting/request.js +473 -54
  352. package/test/unit/spec/meeting/utils.js +773 -67
  353. package/test/unit/spec/meeting-info/index.js +300 -0
  354. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  355. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  356. package/test/unit/spec/meetings/collection.js +26 -0
  357. package/test/unit/spec/meetings/index.js +1415 -213
  358. package/test/unit/spec/meetings/utils.js +229 -2
  359. package/test/unit/spec/member/index.js +61 -6
  360. package/test/unit/spec/member/util.js +510 -34
  361. package/test/unit/spec/members/index.js +432 -1
  362. package/test/unit/spec/members/request.js +206 -27
  363. package/test/unit/spec/members/utils.js +210 -0
  364. package/test/unit/spec/metrics/index.js +1 -50
  365. package/test/unit/spec/multistream/mediaRequestManager.ts +781 -114
  366. package/test/unit/spec/multistream/receiveSlot.ts +9 -1
  367. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  368. package/test/unit/spec/multistream/remoteMedia.ts +2 -0
  369. package/test/unit/spec/multistream/remoteMediaGroup.ts +345 -0
  370. package/test/unit/spec/multistream/remoteMediaManager.ts +525 -0
  371. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  372. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  373. package/test/unit/spec/reachability/index.ts +551 -14
  374. package/test/unit/spec/reachability/request.js +3 -1
  375. package/test/unit/spec/reachability/util.ts +40 -0
  376. package/test/unit/spec/reconnection-manager/index.js +171 -11
  377. package/test/unit/spec/recording-controller/index.js +294 -218
  378. package/test/unit/spec/recording-controller/util.js +223 -96
  379. package/test/unit/spec/roap/index.ts +180 -83
  380. package/test/unit/spec/roap/request.ts +100 -62
  381. package/test/unit/spec/roap/turnDiscovery.ts +388 -96
  382. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  383. package/test/unit/spec/stats-analyzer/index.js +1252 -12
  384. package/test/unit/spec/webinar/collection.ts +13 -0
  385. package/test/unit/spec/webinar/index.ts +60 -0
  386. package/test/utils/integrationTestUtils.js +46 -0
  387. package/test/utils/testUtils.js +0 -57
  388. package/test/utils/webex-test-users.js +12 -4
  389. package/dist/metrics/config.js +0 -289
  390. package/dist/metrics/config.js.map +0 -1
  391. package/dist/types/metrics/config.d.ts +0 -169
  392. package/src/index.js +0 -18
  393. package/src/metrics/config.ts +0 -485
@@ -9,21 +9,20 @@ exports.default = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
10
10
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
11
11
  var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
12
- var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
12
+ var _entries = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/entries"));
13
13
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
14
14
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
15
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
15
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
16
16
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
17
17
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
18
18
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
19
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
20
- var _uniq2 = _interopRequireDefault(require("lodash/uniq"));
20
+ var _mapValues2 = _interopRequireDefault(require("lodash/mapValues"));
21
21
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
22
+ var _util = _interopRequireDefault(require("../meeting/util"));
22
23
  var _constants = require("../constants");
23
24
  var _request = _interopRequireDefault(require("./request"));
24
- var DEFAULT_TIMEOUT = 3000;
25
- var VIDEO_MESH_TIMEOUT = 1000;
26
-
25
+ var _clusterReachability = require("./clusterReachability");
27
26
  /**
28
27
  * @class Reachability
29
28
  * @export
@@ -39,7 +38,7 @@ var Reachability = /*#__PURE__*/function () {
39
38
  (0, _defineProperty2.default)(this, "namespace", _constants.REACHABILITY.namespace);
40
39
  (0, _defineProperty2.default)(this, "webex", void 0);
41
40
  (0, _defineProperty2.default)(this, "reachabilityRequest", void 0);
42
- (0, _defineProperty2.default)(this, "clusterLatencyResults", void 0);
41
+ (0, _defineProperty2.default)(this, "clusterReachability", void 0);
43
42
  this.webex = webex;
44
43
 
45
44
  /**
@@ -50,22 +49,13 @@ var Reachability = /*#__PURE__*/function () {
50
49
  * @memberof Reachability
51
50
  */
52
51
  this.reachabilityRequest = new _request.default(this.webex);
53
-
54
- /**
55
- * internal object of clusters latency results
56
- * @instance
57
- * @type {object}
58
- * @private
59
- * @memberof Reachability
60
- */
61
- this.clusterLatencyResults = {};
52
+ this.clusterReachability = {};
62
53
  }
63
54
 
64
55
  /**
65
- * fetches reachability data
66
- * @returns {Object} reachability data
56
+ * Gets a list of media clusters from the backend and performs reachability checks on all the clusters
57
+ * @returns {Promise<ReachabilityResults>} reachability results
67
58
  * @public
68
- * @async
69
59
  * @memberof Reachability
70
60
  */
71
61
  (0, _createClass2.default)(Reachability, [{
@@ -76,51 +66,194 @@ var Reachability = /*#__PURE__*/function () {
76
66
  return _regenerator.default.wrap(function _callee$(_context) {
77
67
  while (1) switch (_context.prev = _context.next) {
78
68
  case 0:
79
- this.setup();
80
-
81
- // Remove stored reachability results to ensure no stale data
82
- // @ts-ignore
69
+ _context.prev = 0;
83
70
  _context.next = 3;
84
- return this.webex.boundedStorage.del(this.namespace, _constants.REACHABILITY.localStorageResult);
71
+ return this.reachabilityRequest.getClusters(_util.default.getIpVersion(this.webex));
85
72
  case 3:
86
- _context.next = 5;
87
- return this.webex.boundedStorage.del(this.namespace, _constants.REACHABILITY.localStorageJoinCookie);
88
- case 5:
89
- _context.prev = 5;
90
- _context.next = 8;
91
- return this.reachabilityRequest.getClusters();
92
- case 8:
93
73
  _yield$this$reachabil = _context.sent;
94
74
  clusters = _yield$this$reachabil.clusters;
95
75
  joinCookie = _yield$this$reachabil.joinCookie;
96
- _context.next = 13;
97
- return this.performReachabilityCheck(clusters);
98
- case 13:
76
+ _context.next = 8;
77
+ return this.performReachabilityChecks(clusters);
78
+ case 8:
99
79
  results = _context.sent;
100
- _context.next = 16;
80
+ _context.next = 11;
101
81
  return this.webex.boundedStorage.put(this.namespace, _constants.REACHABILITY.localStorageResult, (0, _stringify.default)(results));
102
- case 16:
103
- _context.next = 18;
82
+ case 11:
83
+ _context.next = 13;
104
84
  return this.webex.boundedStorage.put(this.namespace, _constants.REACHABILITY.localStorageJoinCookie, (0, _stringify.default)(joinCookie));
105
- case 18:
85
+ case 13:
106
86
  _loggerProxy.default.logger.log('Reachability:index#gatherReachability --> Reachability checks completed');
107
87
  return _context.abrupt("return", results);
108
- case 22:
109
- _context.prev = 22;
110
- _context.t0 = _context["catch"](5);
111
- _loggerProxy.default.logger.error("Reachability:index#gatherReachability --> Error in calling getClusters(): ".concat(_context.t0));
88
+ case 17:
89
+ _context.prev = 17;
90
+ _context.t0 = _context["catch"](0);
91
+ _loggerProxy.default.logger.error("Reachability:index#gatherReachability --> Error:", _context.t0);
112
92
  return _context.abrupt("return", {});
113
- case 26:
93
+ case 21:
114
94
  case "end":
115
95
  return _context.stop();
116
96
  }
117
- }, _callee, this, [[5, 22]]);
97
+ }, _callee, this, [[0, 17]]);
118
98
  }));
119
99
  function gatherReachability() {
120
100
  return _gatherReachability.apply(this, arguments);
121
101
  }
122
102
  return gatherReachability;
123
103
  }()
104
+ /**
105
+ * Returns statistics about last reachability results. The returned value is an object
106
+ * with a flat list of properties so that it can be easily sent with metrics
107
+ *
108
+ * @returns {Promise} Promise with metrics values, it never rejects/throws.
109
+ */
110
+ }, {
111
+ key: "getReachabilityMetrics",
112
+ value: function () {
113
+ var _getReachabilityMetrics = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
114
+ var stats, updateStats, resultsJson, results;
115
+ return _regenerator.default.wrap(function _callee2$(_context2) {
116
+ while (1) switch (_context2.prev = _context2.next) {
117
+ case 0:
118
+ stats = {
119
+ reachability_public_udp_success: 0,
120
+ reachability_public_udp_failed: 0,
121
+ reachability_public_tcp_success: 0,
122
+ reachability_public_tcp_failed: 0,
123
+ reachability_vmn_udp_success: 0,
124
+ reachability_vmn_udp_failed: 0,
125
+ reachability_vmn_tcp_success: 0,
126
+ reachability_vmn_tcp_failed: 0
127
+ };
128
+ updateStats = function updateStats(clusterType, result) {
129
+ if (result.udp && result.udp.result !== 'untested') {
130
+ var outcome = result.udp.result === 'reachable' ? 'success' : 'failed';
131
+ stats["reachability_".concat(clusterType, "_udp_").concat(outcome)] += 1;
132
+ }
133
+ if (result.tcp && result.tcp.result !== 'untested') {
134
+ var _outcome = result.tcp.result === 'reachable' ? 'success' : 'failed';
135
+ stats["reachability_".concat(clusterType, "_tcp_").concat(_outcome)] += 1;
136
+ }
137
+ };
138
+ _context2.prev = 2;
139
+ _context2.next = 5;
140
+ return this.webex.boundedStorage.get(_constants.REACHABILITY.namespace, _constants.REACHABILITY.localStorageResult);
141
+ case 5:
142
+ resultsJson = _context2.sent;
143
+ results = JSON.parse(resultsJson);
144
+ (0, _values.default)(results).forEach(function (result) {
145
+ updateStats(result.isVideoMesh ? 'vmn' : 'public', result);
146
+ });
147
+ _context2.next = 13;
148
+ break;
149
+ case 10:
150
+ _context2.prev = 10;
151
+ _context2.t0 = _context2["catch"](2);
152
+ // empty storage, that's ok
153
+ _loggerProxy.default.logger.warn('Roap:request#getReachabilityMetrics --> Error parsing reachability data: ', _context2.t0);
154
+ case 13:
155
+ return _context2.abrupt("return", stats);
156
+ case 14:
157
+ case "end":
158
+ return _context2.stop();
159
+ }
160
+ }, _callee2, this, [[2, 10]]);
161
+ }));
162
+ function getReachabilityMetrics() {
163
+ return _getReachabilityMetrics.apply(this, arguments);
164
+ }
165
+ return getReachabilityMetrics;
166
+ }()
167
+ /**
168
+ * Maps our internal transport result to the format that backend expects
169
+ * @param {TransportResult} transportResult
170
+ * @returns {TransportResultForBackend}
171
+ */
172
+ }, {
173
+ key: "mapTransportResultToBackendDataFormat",
174
+ value: function mapTransportResultToBackendDataFormat(transportResult) {
175
+ var output = {};
176
+ for (var _i = 0, _Object$entries = (0, _entries.default)(transportResult); _i < _Object$entries.length; _i++) {
177
+ var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
178
+ _key = _Object$entries$_i[0],
179
+ value = _Object$entries$_i[1];
180
+ switch (_key) {
181
+ case 'result':
182
+ switch (value) {
183
+ case 'reachable':
184
+ output.reachable = 'true';
185
+ break;
186
+ case 'unreachable':
187
+ output.reachable = 'false';
188
+ break;
189
+ case 'untested':
190
+ output.untested = 'true';
191
+ break;
192
+ }
193
+ break;
194
+ case 'latencyInMilliseconds':
195
+ output.latencyInMilliseconds = value.toString();
196
+ break;
197
+ default:
198
+ output[_key] = value;
199
+ }
200
+ }
201
+ return output;
202
+ }
203
+
204
+ /**
205
+ * Reachability results as an object in the format that backend expects
206
+ *
207
+ * @returns {any} reachability results that need to be sent to the backend
208
+ */
209
+ }, {
210
+ key: "getReachabilityResults",
211
+ value: function () {
212
+ var _getReachabilityResults = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
213
+ var _this = this;
214
+ var results, resultsJson, allClusterResults;
215
+ return _regenerator.default.wrap(function _callee3$(_context3) {
216
+ while (1) switch (_context3.prev = _context3.next) {
217
+ case 0:
218
+ _context3.prev = 0;
219
+ _context3.next = 3;
220
+ return this.webex.boundedStorage.get(_constants.REACHABILITY.namespace, _constants.REACHABILITY.localStorageResult);
221
+ case 3:
222
+ resultsJson = _context3.sent;
223
+ allClusterResults = JSON.parse(resultsJson);
224
+ results = (0, _mapValues2.default)(allClusterResults, function (clusterResult) {
225
+ return {
226
+ udp: _this.mapTransportResultToBackendDataFormat(clusterResult.udp || {
227
+ result: 'untested'
228
+ }),
229
+ tcp: _this.mapTransportResultToBackendDataFormat(clusterResult.tcp || {
230
+ result: 'untested'
231
+ }),
232
+ xtls: _this.mapTransportResultToBackendDataFormat(clusterResult.xtls || {
233
+ result: 'untested'
234
+ })
235
+ };
236
+ });
237
+ _context3.next = 11;
238
+ break;
239
+ case 8:
240
+ _context3.prev = 8;
241
+ _context3.t0 = _context3["catch"](0);
242
+ // empty storage, that's ok
243
+ _loggerProxy.default.logger.warn('Roap:request#attachReachabilityData --> Error parsing reachability data: ', _context3.t0);
244
+ case 11:
245
+ return _context3.abrupt("return", results);
246
+ case 12:
247
+ case "end":
248
+ return _context3.stop();
249
+ }
250
+ }, _callee3, this, [[0, 8]]);
251
+ }));
252
+ function getReachabilityResults() {
253
+ return _getReachabilityResults.apply(this, arguments);
254
+ }
255
+ return getReachabilityResults;
256
+ }()
124
257
  /**
125
258
  * fetches reachability data and checks for cluster reachability
126
259
  * @returns {boolean}
@@ -128,158 +261,41 @@ var Reachability = /*#__PURE__*/function () {
128
261
  * @memberof Reachability
129
262
  */
130
263
  }, {
131
- key: "isAnyClusterReachable",
264
+ key: "isAnyPublicClusterReachable",
132
265
  value: function () {
133
- var _isAnyClusterReachable = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
266
+ var _isAnyPublicClusterReachable = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
134
267
  var reachable, reachabilityData, reachabilityResults;
135
- return _regenerator.default.wrap(function _callee2$(_context2) {
136
- while (1) switch (_context2.prev = _context2.next) {
268
+ return _regenerator.default.wrap(function _callee4$(_context4) {
269
+ while (1) switch (_context4.prev = _context4.next) {
137
270
  case 0:
138
271
  reachable = false; // @ts-ignore
139
- _context2.next = 3;
272
+ _context4.next = 3;
140
273
  return this.webex.boundedStorage.get(this.namespace, _constants.REACHABILITY.localStorageResult).catch(function () {});
141
274
  case 3:
142
- reachabilityData = _context2.sent;
275
+ reachabilityData = _context4.sent;
143
276
  if (reachabilityData) {
144
277
  try {
145
278
  reachabilityResults = JSON.parse(reachabilityData);
146
279
  reachable = (0, _values.default)(reachabilityResults).some(function (result) {
147
280
  var _result$udp, _result$tcp;
148
- return ((_result$udp = result.udp) === null || _result$udp === void 0 ? void 0 : _result$udp.reachable) === 'true' || ((_result$tcp = result.tcp) === null || _result$tcp === void 0 ? void 0 : _result$tcp.reachable) === 'true';
281
+ return !result.isVideoMesh && (((_result$udp = result.udp) === null || _result$udp === void 0 ? void 0 : _result$udp.result) === 'reachable' || ((_result$tcp = result.tcp) === null || _result$tcp === void 0 ? void 0 : _result$tcp.result) === 'reachable');
149
282
  });
150
283
  } catch (e) {
151
284
  _loggerProxy.default.logger.error("Roap:request#attachReachabilityData --> Error in parsing reachability data: ".concat(e));
152
285
  }
153
286
  }
154
- return _context2.abrupt("return", reachable);
287
+ return _context4.abrupt("return", reachable);
155
288
  case 6:
156
289
  case "end":
157
- return _context2.stop();
290
+ return _context4.stop();
158
291
  }
159
- }, _callee2, this);
292
+ }, _callee4, this);
160
293
  }));
161
- function isAnyClusterReachable() {
162
- return _isAnyClusterReachable.apply(this, arguments);
294
+ function isAnyPublicClusterReachable() {
295
+ return _isAnyPublicClusterReachable.apply(this, arguments);
163
296
  }
164
- return isAnyClusterReachable;
297
+ return isAnyPublicClusterReachable;
165
298
  }()
166
- /**
167
- * Generate peerConnection config settings
168
- * @param {object} cluster
169
- * @returns {object} peerConnectionConfig
170
- * @private
171
- * @memberof Reachability
172
- */
173
- }, {
174
- key: "buildPeerConnectionConfig",
175
- value: function buildPeerConnectionConfig(cluster) {
176
- var iceServers = (0, _uniq2.default)([].concat((0, _toConsumableArray2.default)(cluster.udp), (0, _toConsumableArray2.default)(cluster.tcp))).map(function (url) {
177
- return {
178
- username: '',
179
- credential: '',
180
- urls: [url]
181
- };
182
- });
183
- return {
184
- iceServers: (0, _toConsumableArray2.default)(iceServers),
185
- iceCandidatePoolSize: '0',
186
- iceTransportPolicy: 'all'
187
- };
188
- }
189
-
190
- /**
191
- * Creates an RTCPeerConnection
192
- * @param {object} cluster
193
- * @returns {RTCPeerConnection} peerConnection
194
- * @private
195
- * @memberof Reachability
196
- */
197
- }, {
198
- key: "createPeerConnection",
199
- value: function createPeerConnection(cluster) {
200
- var key = cluster.key,
201
- config = cluster.config;
202
- try {
203
- var peerConnection = new window.RTCPeerConnection(config);
204
-
205
- // @ts-ignore
206
- peerConnection.key = key;
207
- return peerConnection;
208
- } catch (peerConnectionError) {
209
- _loggerProxy.default.logger.log("Reachability:index#createPeerConnection --> Error creating peerConnection: ".concat(peerConnectionError));
210
- return null;
211
- }
212
- }
213
-
214
- /**
215
- * Gets total elapsed time
216
- * @param {RTCPeerConnection} peerConnection
217
- * @returns {Number} Milliseconds
218
- * @private
219
- * @memberof Reachability
220
- */
221
- }, {
222
- key: "getElapsedTime",
223
- value: function getElapsedTime(peerConnection) {
224
- var startTime = peerConnection.begin;
225
- delete peerConnection.begin;
226
- return (0, _now.default)() - startTime;
227
- }
228
-
229
- /**
230
- * creates offer and generates localSDP
231
- * @param {object} clusterList cluster List
232
- * @returns {Promise} Reachability latency results
233
- * @private
234
- * @memberof Reachability
235
- */
236
- }, {
237
- key: "getLocalSDPForClusters",
238
- value: function getLocalSDPForClusters(clusterList) {
239
- var _this = this;
240
- var clusters = (0, _toConsumableArray2.default)((0, _keys.default)(clusterList));
241
- clusters = clusters.map( /*#__PURE__*/function () {
242
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(key) {
243
- var cluster, config, peerConnection, description;
244
- return _regenerator.default.wrap(function _callee3$(_context3) {
245
- while (1) switch (_context3.prev = _context3.next) {
246
- case 0:
247
- cluster = clusterList[key];
248
- config = _this.buildPeerConnectionConfig(cluster);
249
- peerConnection = _this.createPeerConnection({
250
- key: key,
251
- config: config
252
- });
253
- _context3.next = 5;
254
- return peerConnection.createOffer({
255
- offerToReceiveAudio: true
256
- });
257
- case 5:
258
- description = _context3.sent;
259
- // @ts-ignore
260
- peerConnection.begin = (0, _now.default)();
261
- peerConnection.setLocalDescription(description);
262
- return _context3.abrupt("return", _this.iceGatheringState(peerConnection, cluster.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT).catch(function (iceGatheringStateError) {
263
- _loggerProxy.default.logger.log("Reachability:index#getLocalSDPForClusters --> Error in getLocalSDP : ".concat(iceGatheringStateError));
264
- }));
265
- case 9:
266
- case "end":
267
- return _context3.stop();
268
- }
269
- }, _callee3);
270
- }));
271
- return function (_x) {
272
- return _ref.apply(this, arguments);
273
- };
274
- }());
275
- return _promise.default.all(clusters).then(this.parseIceResultsToReachabilityResults).then(function (reachabilityLatencyResults) {
276
- _this.logUnreachableClusters();
277
-
278
- // return results
279
- return reachabilityLatencyResults;
280
- });
281
- }
282
-
283
299
  /**
284
300
  * Get list of all unreachable clusters
285
301
  * @returns {array} Unreachable clusters
@@ -287,121 +303,28 @@ var Reachability = /*#__PURE__*/function () {
287
303
  * @memberof Reachability
288
304
  */
289
305
  }, {
290
- key: "getUnreachablClusters",
291
- value: function getUnreachablClusters() {
306
+ key: "getUnreachableClusters",
307
+ value: function getUnreachableClusters() {
292
308
  var unreachableList = [];
293
- var clusters = this.clusterLatencyResults;
294
- (0, _keys.default)(clusters).forEach(function (key) {
295
- var cluster = clusters[key];
296
- if (cluster.unreachable && !cluster.reachable) {
297
- unreachableList.push(key);
298
- }
299
- });
300
- return unreachableList;
301
- }
302
-
303
- /**
304
- * Attach an event handler for the icegatheringstatechange
305
- * event and measure latency.
306
- * @param {RTCPeerConnection} peerConnection
307
- * @returns {undefined}
308
- * @private
309
- * @memberof Reachability
310
- */
311
- }, {
312
- key: "handleIceGatheringStateChange",
313
- value: function handleIceGatheringStateChange(peerConnection) {
314
- var _this2 = this;
315
- peerConnection.onicegatheringstatechange = function () {
316
- var COMPLETE = _constants.ICE_GATHERING_STATE.COMPLETE;
317
- if (peerConnection.iceConnectionState === COMPLETE) {
318
- var elapsed = _this2.getElapsedTime(peerConnection);
319
-
320
- // @ts-ignore
321
- _loggerProxy.default.logger.log( // @ts-ignore
322
- "Reachability:index#onIceGatheringStateChange --> Successfully pinged ".concat(peerConnection.key, ":"), elapsed);
323
- _this2.setLatencyAndClose(peerConnection, elapsed);
309
+ (0, _entries.default)(this.clusterReachability).forEach(function (_ref) {
310
+ var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
311
+ key = _ref2[0],
312
+ clusterReachability = _ref2[1];
313
+ var result = clusterReachability.getResult();
314
+ if (result.udp.result === 'unreachable') {
315
+ unreachableList.push({
316
+ name: key,
317
+ protocol: 'udp'
318
+ });
324
319
  }
325
- };
326
- }
327
-
328
- /**
329
- * Attach an event handler for the icecandidate
330
- * event and measure latency.
331
- * @param {RTCPeerConnection} peerConnection
332
- * @returns {undefined}
333
- * @private
334
- * @memberof Reachability
335
- */
336
- }, {
337
- key: "handleOnIceCandidate",
338
- value: function handleOnIceCandidate(peerConnection) {
339
- var _this3 = this;
340
- peerConnection.onicecandidate = function (e) {
341
- var SERVER_REFLEXIVE = 'srflx';
342
- if (e.candidate && String(e.candidate.type).toLowerCase() === SERVER_REFLEXIVE) {
343
- var elapsed = _this3.getElapsedTime(peerConnection);
344
- _loggerProxy.default.logger.log( // @ts-ignore
345
- "Reachability:index#onIceCandidate --> Successfully pinged ".concat(peerConnection.key, ":"), elapsed);
346
- _this3.setLatencyAndClose(peerConnection, elapsed);
320
+ if (result.tcp.result === 'unreachable') {
321
+ unreachableList.push({
322
+ name: key,
323
+ protocol: 'tcp'
324
+ });
347
325
  }
348
- };
349
- }
350
-
351
- /**
352
- * An event handler on an RTCPeerConnection when the state of the ICE
353
- * candidate gathering process changes. Used to measure connection
354
- * speed.
355
- * @private
356
- * @param {RTCPeerConnection} peerConnection
357
- * @param {number} timeout
358
- * @returns {Promise}
359
- */
360
- }, {
361
- key: "iceGatheringState",
362
- value: function iceGatheringState(peerConnection, timeout) {
363
- var _this4 = this;
364
- var ELAPSED = 'elapsed';
365
- return new _promise.default(function (resolve) {
366
- var peerConnectionProxy = new window.Proxy(peerConnection, {
367
- get: function get(target, property) {
368
- var targetMember = target[property];
369
- if (typeof targetMember === 'function') {
370
- return targetMember.bind(target);
371
- }
372
- return targetMember;
373
- },
374
- set: function set(target, property, value) {
375
- // only intercept elapsed property
376
- if (property === ELAPSED) {
377
- // @ts-ignore
378
- resolve({
379
- clusterId: peerConnection.key,
380
- elapsed: value
381
- });
382
- return true;
383
- }
384
-
385
- // pass thru
386
- return window.Reflect.set(target, property, value);
387
- }
388
- });
389
-
390
- // Using peerConnection proxy so handle functions below
391
- // won't be coupled to our promise implementation
392
- _this4.handleIceGatheringStateChange(peerConnectionProxy);
393
- _this4.handleOnIceCandidate(peerConnectionProxy);
394
-
395
- // Set maximum timeout
396
- window.setTimeout(function () {
397
- var CLOSED = _constants.CONNECTION_STATE.CLOSED;
398
-
399
- // Close any open peerConnections
400
- if (peerConnectionProxy.connectionState !== CLOSED) {
401
- _this4.setLatencyAndClose(peerConnectionProxy, null);
402
- }
403
- }, timeout);
404
326
  });
327
+ return unreachableList;
405
328
  }
406
329
 
407
330
  /**
@@ -413,120 +336,70 @@ var Reachability = /*#__PURE__*/function () {
413
336
  }, {
414
337
  key: "logUnreachableClusters",
415
338
  value: function logUnreachableClusters() {
416
- var list = this.getUnreachablClusters();
417
- list.forEach(function (cluster) {
418
- _loggerProxy.default.logger.log("Reachability:index#logUnreachableClusters --> No ice candidate for ".concat(cluster, "."));
339
+ var list = this.getUnreachableClusters();
340
+ list.forEach(function (_ref3) {
341
+ var name = _ref3.name,
342
+ protocol = _ref3.protocol;
343
+ _loggerProxy.default.logger.log("Reachability:index#logUnreachableClusters --> failed to reach ".concat(name, " over ").concat(protocol));
419
344
  });
420
345
  }
421
346
 
422
347
  /**
423
- * Calculates time to establish connection
424
- * @param {array} iceResults iceResults
425
- * @returns {object} reachabilityMap
426
- * @private
427
- * @memberof Reachability
348
+ * Performs reachability checks for all clusters
349
+ * @param {ClusterList} clusterList
350
+ * @returns {Promise<ReachabilityResults>} reachability check results
428
351
  */
429
352
  }, {
430
- key: "parseIceResultsToReachabilityResults",
431
- value: function parseIceResultsToReachabilityResults(iceResults) {
432
- var reachabilityMap = {};
433
- iceResults.forEach(function (_ref2) {
434
- var clusterId = _ref2.clusterId,
435
- elapsed = _ref2.elapsed;
436
- var latencyResult;
437
- if (elapsed === null) {
438
- latencyResult = {
439
- reachable: 'false'
440
- };
441
- } else {
442
- latencyResult = {
443
- reachable: 'true',
444
- latencyInMilliseconds: elapsed.toString()
445
- };
446
- }
447
- reachabilityMap[clusterId] = {
448
- udp: latencyResult,
449
- tcp: latencyResult
450
- };
451
- });
452
- return reachabilityMap;
453
- }
353
+ key: "performReachabilityChecks",
354
+ value: function () {
355
+ var _performReachabilityChecks = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(clusterList) {
356
+ var _this2 = this;
357
+ var results, clusterReachabilityChecks;
358
+ return _regenerator.default.wrap(function _callee5$(_context5) {
359
+ while (1) switch (_context5.prev = _context5.next) {
360
+ case 0:
361
+ results = {};
362
+ if (!(!clusterList || !(0, _keys.default)(clusterList).length)) {
363
+ _context5.next = 3;
364
+ break;
365
+ }
366
+ return _context5.abrupt("return", _promise.default.resolve(results));
367
+ case 3:
368
+ _loggerProxy.default.logger.log("Reachability:index#performReachabilityChecks --> doing UDP".concat(
369
+ // @ts-ignore
370
+ this.webex.config.meetings.experimental.enableTcpReachability ? ' and TCP' : '', " reachability checks"));
371
+ clusterReachabilityChecks = (0, _keys.default)(clusterList).map(function (key) {
372
+ var cluster = clusterList[key];
454
373
 
455
- /**
456
- * fetches reachability data
457
- * @param {object} clusterList
458
- * @returns {Promise<localSDPData>} reachability check results
459
- * @private
460
- * @memberof Reachability
461
- */
462
- }, {
463
- key: "performReachabilityCheck",
464
- value: function performReachabilityCheck(clusterList) {
465
- var _this5 = this;
466
- if (!clusterList || !(0, _keys.default)(clusterList).length) {
467
- return _promise.default.resolve({});
468
- }
469
- return new _promise.default(function (resolve) {
470
- _this5.getLocalSDPForClusters(clusterList).then(function (localSDPData) {
471
- if (!localSDPData || !(0, _keys.default)(localSDPData).length) {
472
- // TODO: handle the error condition properly and try retry
473
- _loggerProxy.default.logger.log('Reachability:index#performReachabilityCheck --> Local SDP is empty or has missing elements..returning');
474
- resolve({});
475
- } else {
476
- resolve(localSDPData);
374
+ // Linus doesn't support TCP reachability checks on video mesh nodes
375
+ var includeTcpReachability =
376
+ // @ts-ignore
377
+ _this2.webex.config.meetings.experimental.enableTcpReachability && !cluster.isVideoMesh;
378
+ if (!includeTcpReachability) {
379
+ cluster.tcp = [];
380
+ }
381
+ _this2.clusterReachability[key] = new _clusterReachability.ClusterReachability(key, cluster);
382
+ return _this2.clusterReachability[key].start().then(function (result) {
383
+ results[key] = result;
384
+ results[key].isVideoMesh = cluster.isVideoMesh;
385
+ });
386
+ });
387
+ _context5.next = 7;
388
+ return _promise.default.all(clusterReachabilityChecks);
389
+ case 7:
390
+ this.logUnreachableClusters();
391
+ return _context5.abrupt("return", results);
392
+ case 9:
393
+ case "end":
394
+ return _context5.stop();
477
395
  }
478
- }).catch(function (error) {
479
- _loggerProxy.default.logger.error("Reachability:index#performReachabilityCheck --> Error in getLocalSDPForClusters: ".concat(error));
480
- resolve({});
481
- });
482
- });
483
- }
484
-
485
- /**
486
- * Records latency and closes the peerConnection
487
- * @param {RTCPeerConnection} peerConnection
488
- * @param {number} elapsed Latency in milliseconds
489
- * @returns {undefined}
490
- * @private
491
- * @memberof Reachability
492
- */
493
- }, {
494
- key: "setLatencyAndClose",
495
- value: function setLatencyAndClose(peerConnection, elapsed) {
496
- var _intialState;
497
- var REACHABLE = 'reachable';
498
- var UNREACHABLE = 'unreachable';
499
- var CLOSED = _constants.CONNECTION_STATE.CLOSED;
500
- // @ts-ignore
501
- var key = peerConnection.key;
502
- var resultKey = elapsed === null ? UNREACHABLE : REACHABLE;
503
- var intialState = (_intialState = {}, (0, _defineProperty2.default)(_intialState, REACHABLE, 0), (0, _defineProperty2.default)(_intialState, UNREACHABLE, 0), _intialState);
504
- if (peerConnection.connectionState === CLOSED) {
505
- _loggerProxy.default.logger.log("Reachability:index#setLatencyAndClose --> Attempting to set latency of ".concat(elapsed, " on closed peerConnection."));
506
- return;
396
+ }, _callee5, this);
397
+ }));
398
+ function performReachabilityChecks(_x) {
399
+ return _performReachabilityChecks.apply(this, arguments);
507
400
  }
508
- this.clusterLatencyResults[key] = this.clusterLatencyResults[key] || intialState;
509
- this.clusterLatencyResults[key][resultKey] += 1;
510
-
511
- // Set to null in case this fired from
512
- // an event other than onIceCandidate
513
- peerConnection.onicecandidate = null;
514
- peerConnection.close();
515
- // @ts-ignore
516
- peerConnection.elapsed = elapsed;
517
- }
518
-
519
- /**
520
- * utility function
521
- * @returns {undefined}
522
- * @private
523
- * @memberof Reachability
524
- */
525
- }, {
526
- key: "setup",
527
- value: function setup() {
528
- this.clusterLatencyResults = {};
529
- }
401
+ return performReachabilityChecks;
402
+ }()
530
403
  }]);
531
404
  return Reachability;
532
405
  }();