@webex/plugin-meetings 3.0.0-beta.34 → 3.0.0-beta.340

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