@webex/plugin-meetings 3.0.0-beta.35 → 3.0.0-beta.351

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 (401) 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/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 +117 -2
  43. package/dist/index.js.map +1 -1
  44. package/dist/interceptors/index.js +15 -0
  45. package/dist/interceptors/index.js.map +1 -0
  46. package/dist/interceptors/locusRetry.js +93 -0
  47. package/dist/interceptors/locusRetry.js.map +1 -0
  48. package/dist/interpretation/collection.js +23 -0
  49. package/dist/interpretation/collection.js.map +1 -0
  50. package/dist/interpretation/index.js +366 -0
  51. package/dist/interpretation/index.js.map +1 -0
  52. package/dist/interpretation/siLanguage.js +25 -0
  53. package/dist/interpretation/siLanguage.js.map +1 -0
  54. package/dist/locus-info/controlsUtils.js +91 -2
  55. package/dist/locus-info/controlsUtils.js.map +1 -1
  56. package/dist/locus-info/index.js +383 -62
  57. package/dist/locus-info/index.js.map +1 -1
  58. package/dist/locus-info/infoUtils.js +7 -1
  59. package/dist/locus-info/infoUtils.js.map +1 -1
  60. package/dist/locus-info/mediaSharesUtils.js +57 -1
  61. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  62. package/dist/locus-info/parser.js +249 -72
  63. package/dist/locus-info/parser.js.map +1 -1
  64. package/dist/locus-info/selfUtils.js +89 -14
  65. package/dist/locus-info/selfUtils.js.map +1 -1
  66. package/dist/media/index.js +62 -116
  67. package/dist/media/index.js.map +1 -1
  68. package/dist/media/properties.js +73 -124
  69. package/dist/media/properties.js.map +1 -1
  70. package/dist/mediaQualityMetrics/config.js +1 -204
  71. package/dist/mediaQualityMetrics/config.js.map +1 -1
  72. package/dist/meeting/in-meeting-actions.js +86 -2
  73. package/dist/meeting/in-meeting-actions.js.map +1 -1
  74. package/dist/meeting/index.js +3921 -2960
  75. package/dist/meeting/index.js.map +1 -1
  76. package/dist/meeting/locusMediaRequest.js +292 -0
  77. package/dist/meeting/locusMediaRequest.js.map +1 -0
  78. package/dist/meeting/muteState.js +224 -131
  79. package/dist/meeting/muteState.js.map +1 -1
  80. package/dist/meeting/request.js +166 -152
  81. package/dist/meeting/request.js.map +1 -1
  82. package/dist/meeting/util.js +601 -417
  83. package/dist/meeting/util.js.map +1 -1
  84. package/dist/meeting-info/index.js +73 -7
  85. package/dist/meeting-info/index.js.map +1 -1
  86. package/dist/meeting-info/meeting-info-v2.js +192 -51
  87. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  88. package/dist/meeting-info/util.js +1 -1
  89. package/dist/meeting-info/util.js.map +1 -1
  90. package/dist/meeting-info/utilv2.js +36 -36
  91. package/dist/meeting-info/utilv2.js.map +1 -1
  92. package/dist/meetings/collection.js +39 -0
  93. package/dist/meetings/collection.js.map +1 -1
  94. package/dist/meetings/index.js +437 -121
  95. package/dist/meetings/index.js.map +1 -1
  96. package/dist/meetings/meetings.types.js +7 -0
  97. package/dist/meetings/meetings.types.js.map +1 -0
  98. package/dist/meetings/request.js +2 -0
  99. package/dist/meetings/request.js.map +1 -1
  100. package/dist/meetings/util.js +72 -6
  101. package/dist/meetings/util.js.map +1 -1
  102. package/dist/member/index.js +58 -0
  103. package/dist/member/index.js.map +1 -1
  104. package/dist/member/types.js +25 -0
  105. package/dist/member/types.js.map +1 -0
  106. package/dist/member/util.js +132 -25
  107. package/dist/member/util.js.map +1 -1
  108. package/dist/members/collection.js +10 -0
  109. package/dist/members/collection.js.map +1 -1
  110. package/dist/members/index.js +102 -6
  111. package/dist/members/index.js.map +1 -1
  112. package/dist/members/request.js +106 -38
  113. package/dist/members/request.js.map +1 -1
  114. package/dist/members/types.js +15 -0
  115. package/dist/members/types.js.map +1 -0
  116. package/dist/members/util.js +326 -232
  117. package/dist/members/util.js.map +1 -1
  118. package/dist/metrics/constants.js +16 -5
  119. package/dist/metrics/constants.js.map +1 -1
  120. package/dist/metrics/index.js +1 -446
  121. package/dist/metrics/index.js.map +1 -1
  122. package/dist/multistream/mediaRequestManager.js +228 -58
  123. package/dist/multistream/mediaRequestManager.js.map +1 -1
  124. package/dist/multistream/receiveSlot.js +29 -16
  125. package/dist/multistream/receiveSlot.js.map +1 -1
  126. package/dist/multistream/receiveSlotManager.js +39 -36
  127. package/dist/multistream/receiveSlotManager.js.map +1 -1
  128. package/dist/multistream/remoteMedia.js +44 -18
  129. package/dist/multistream/remoteMedia.js.map +1 -1
  130. package/dist/multistream/remoteMediaGroup.js +60 -3
  131. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  132. package/dist/multistream/remoteMediaManager.js +209 -59
  133. package/dist/multistream/remoteMediaManager.js.map +1 -1
  134. package/dist/multistream/sendSlotManager.js +233 -0
  135. package/dist/multistream/sendSlotManager.js.map +1 -0
  136. package/dist/reachability/clusterReachability.js +356 -0
  137. package/dist/reachability/clusterReachability.js.map +1 -0
  138. package/dist/reachability/index.js +265 -391
  139. package/dist/reachability/index.js.map +1 -1
  140. package/dist/reachability/request.js +6 -4
  141. package/dist/reachability/request.js.map +1 -1
  142. package/dist/reachability/util.js +29 -0
  143. package/dist/reachability/util.js.map +1 -0
  144. package/dist/reconnection-manager/index.js +217 -171
  145. package/dist/reconnection-manager/index.js.map +1 -1
  146. package/dist/recording-controller/index.js +21 -2
  147. package/dist/recording-controller/index.js.map +1 -1
  148. package/dist/recording-controller/util.js +9 -8
  149. package/dist/recording-controller/util.js.map +1 -1
  150. package/dist/roap/index.js +62 -35
  151. package/dist/roap/index.js.map +1 -1
  152. package/dist/roap/request.js +48 -64
  153. package/dist/roap/request.js.map +1 -1
  154. package/dist/roap/turnDiscovery.js +95 -38
  155. package/dist/roap/turnDiscovery.js.map +1 -1
  156. package/dist/rtcMetrics/constants.js +12 -0
  157. package/dist/rtcMetrics/constants.js.map +1 -0
  158. package/dist/rtcMetrics/index.js +142 -0
  159. package/dist/rtcMetrics/index.js.map +1 -0
  160. package/dist/statsAnalyzer/index.js +181 -214
  161. package/dist/statsAnalyzer/index.js.map +1 -1
  162. package/dist/statsAnalyzer/mqaUtil.js +22 -18
  163. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  164. package/dist/types/annotation/annotation.types.d.ts +42 -0
  165. package/dist/types/annotation/constants.d.ts +31 -0
  166. package/dist/types/annotation/index.d.ts +117 -0
  167. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  168. package/dist/types/breakouts/events.d.ts +8 -0
  169. package/dist/types/breakouts/utils.d.ts +14 -0
  170. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  171. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  172. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  173. package/dist/types/common/logs/request.d.ts +2 -0
  174. package/dist/types/common/queue.d.ts +9 -7
  175. package/dist/types/config.d.ts +2 -7
  176. package/dist/types/constants.d.ts +200 -29
  177. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  178. package/dist/types/controls-options-manager/index.d.ts +17 -1
  179. package/dist/types/controls-options-manager/types.d.ts +43 -0
  180. package/dist/types/controls-options-manager/util.d.ts +1 -7
  181. package/dist/types/index.d.ts +6 -4
  182. package/dist/types/interceptors/index.d.ts +2 -0
  183. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  184. package/dist/types/interpretation/collection.d.ts +5 -0
  185. package/dist/types/interpretation/index.d.ts +5 -0
  186. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  187. package/dist/types/locus-info/index.d.ts +57 -4
  188. package/dist/types/locus-info/parser.d.ts +66 -6
  189. package/dist/types/media/index.d.ts +2 -0
  190. package/dist/types/media/properties.d.ts +34 -48
  191. package/dist/types/mediaQualityMetrics/config.d.ts +0 -128
  192. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  193. package/dist/types/meeting/index.d.ts +506 -512
  194. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  195. package/dist/types/meeting/muteState.d.ts +93 -25
  196. package/dist/types/meeting/request.d.ts +62 -43
  197. package/dist/types/meeting/util.d.ts +101 -1
  198. package/dist/types/meeting-info/index.d.ts +13 -1
  199. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  200. package/dist/types/meetings/collection.d.ts +17 -0
  201. package/dist/types/meetings/index.d.ts +95 -22
  202. package/dist/types/meetings/meetings.types.d.ts +4 -0
  203. package/dist/types/member/index.d.ts +14 -0
  204. package/dist/types/member/types.d.ts +32 -0
  205. package/dist/types/members/collection.d.ts +5 -0
  206. package/dist/types/members/index.d.ts +35 -2
  207. package/dist/types/members/request.d.ts +73 -9
  208. package/dist/types/members/types.d.ts +25 -0
  209. package/dist/types/members/util.d.ts +214 -1
  210. package/dist/types/metrics/constants.d.ts +15 -4
  211. package/dist/types/metrics/index.d.ts +4 -111
  212. package/dist/types/multistream/mediaRequestManager.d.ts +72 -5
  213. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  214. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  215. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  216. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  217. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  218. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  219. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  220. package/dist/types/reachability/index.d.ts +60 -95
  221. package/dist/types/reachability/request.d.ts +3 -1
  222. package/dist/types/reachability/util.d.ts +8 -0
  223. package/dist/types/reconnection-manager/index.d.ts +19 -0
  224. package/dist/types/recording-controller/index.d.ts +15 -1
  225. package/dist/types/recording-controller/util.d.ts +5 -4
  226. package/dist/types/roap/index.d.ts +2 -1
  227. package/dist/types/roap/request.d.ts +9 -8
  228. package/dist/types/roap/turnDiscovery.d.ts +21 -3
  229. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  230. package/dist/types/rtcMetrics/index.d.ts +54 -0
  231. package/dist/types/statsAnalyzer/index.d.ts +29 -11
  232. package/dist/types/webinar/collection.d.ts +16 -0
  233. package/dist/types/webinar/index.d.ts +5 -0
  234. package/dist/webinar/collection.js +44 -0
  235. package/dist/webinar/collection.js.map +1 -0
  236. package/dist/webinar/index.js +69 -0
  237. package/dist/webinar/index.js.map +1 -0
  238. package/package.json +22 -19
  239. package/src/annotation/annotation.types.ts +50 -0
  240. package/src/annotation/constants.ts +36 -0
  241. package/src/annotation/index.ts +328 -0
  242. package/src/breakouts/README.md +42 -12
  243. package/src/breakouts/breakout.ts +67 -9
  244. package/src/breakouts/edit-lock-error.ts +25 -0
  245. package/src/breakouts/events.ts +56 -0
  246. package/src/breakouts/index.ts +592 -20
  247. package/src/breakouts/utils.ts +42 -0
  248. package/src/common/errors/no-meeting-info.ts +24 -0
  249. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  250. package/src/common/errors/webex-errors.ts +44 -2
  251. package/src/common/logs/logger-proxy.ts +1 -1
  252. package/src/common/logs/request.ts +5 -1
  253. package/src/common/queue.ts +22 -8
  254. package/src/config.ts +4 -9
  255. package/src/constants.ts +223 -19
  256. package/src/controls-options-manager/enums.ts +12 -0
  257. package/src/controls-options-manager/index.ts +116 -21
  258. package/src/controls-options-manager/types.ts +59 -0
  259. package/src/controls-options-manager/util.ts +294 -14
  260. package/src/index.ts +44 -0
  261. package/src/interceptors/index.ts +3 -0
  262. package/src/interceptors/locusRetry.ts +67 -0
  263. package/src/interpretation/README.md +60 -0
  264. package/src/interpretation/collection.ts +19 -0
  265. package/src/interpretation/index.ts +332 -0
  266. package/src/interpretation/siLanguage.ts +18 -0
  267. package/src/locus-info/controlsUtils.ts +108 -0
  268. package/src/locus-info/index.ts +414 -59
  269. package/src/locus-info/infoUtils.ts +10 -2
  270. package/src/locus-info/mediaSharesUtils.ts +64 -0
  271. package/src/locus-info/parser.ts +258 -47
  272. package/src/locus-info/selfUtils.ts +81 -5
  273. package/src/media/index.ts +102 -122
  274. package/src/media/properties.ts +87 -110
  275. package/src/mediaQualityMetrics/config.ts +0 -135
  276. package/src/meeting/in-meeting-actions.ts +171 -3
  277. package/src/meeting/index.ts +3274 -2555
  278. package/src/meeting/locusMediaRequest.ts +313 -0
  279. package/src/meeting/muteState.ts +223 -136
  280. package/src/meeting/request.ts +142 -120
  281. package/src/meeting/util.ts +588 -394
  282. package/src/meeting-info/index.ts +81 -8
  283. package/src/meeting-info/meeting-info-v2.ts +170 -14
  284. package/src/meeting-info/util.ts +1 -1
  285. package/src/meeting-info/utilv2.ts +23 -23
  286. package/src/meetings/collection.ts +33 -0
  287. package/src/meetings/index.ts +460 -128
  288. package/src/meetings/meetings.types.ts +12 -0
  289. package/src/meetings/request.ts +2 -0
  290. package/src/meetings/util.ts +80 -11
  291. package/src/member/index.ts +58 -0
  292. package/src/member/types.ts +38 -0
  293. package/src/member/util.ts +141 -25
  294. package/src/members/collection.ts +8 -0
  295. package/src/members/index.ts +134 -8
  296. package/src/members/request.ts +97 -17
  297. package/src/members/types.ts +29 -0
  298. package/src/members/util.ts +333 -240
  299. package/src/metrics/constants.ts +15 -4
  300. package/src/metrics/index.ts +1 -469
  301. package/src/multistream/mediaRequestManager.ts +277 -82
  302. package/src/multistream/receiveSlot.ts +31 -17
  303. package/src/multistream/receiveSlotManager.ts +34 -24
  304. package/src/multistream/remoteMedia.ts +27 -2
  305. package/src/multistream/remoteMediaGroup.ts +59 -0
  306. package/src/multistream/remoteMediaManager.ts +148 -30
  307. package/src/multistream/sendSlotManager.ts +170 -0
  308. package/src/reachability/clusterReachability.ts +320 -0
  309. package/src/reachability/index.ts +226 -340
  310. package/src/reachability/request.ts +8 -4
  311. package/src/reachability/util.ts +24 -0
  312. package/src/reconnection-manager/index.ts +128 -106
  313. package/src/recording-controller/index.ts +20 -3
  314. package/src/recording-controller/util.ts +26 -9
  315. package/src/roap/index.ts +63 -32
  316. package/src/roap/request.ts +48 -67
  317. package/src/roap/turnDiscovery.ts +48 -26
  318. package/src/rtcMetrics/constants.ts +3 -0
  319. package/src/rtcMetrics/index.ts +124 -0
  320. package/src/statsAnalyzer/index.ts +218 -289
  321. package/src/statsAnalyzer/mqaUtil.ts +28 -30
  322. package/src/webinar/collection.ts +31 -0
  323. package/src/webinar/index.ts +62 -0
  324. package/test/integration/spec/converged-space-meetings.js +60 -3
  325. package/test/integration/spec/journey.js +320 -261
  326. package/test/integration/spec/space-meeting.js +76 -3
  327. package/test/unit/spec/annotation/index.ts +418 -0
  328. package/test/unit/spec/breakouts/breakout.ts +118 -28
  329. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  330. package/test/unit/spec/breakouts/events.ts +89 -0
  331. package/test/unit/spec/breakouts/index.ts +1395 -69
  332. package/test/unit/spec/breakouts/utils.js +52 -1
  333. package/test/unit/spec/common/queue.js +31 -2
  334. package/test/unit/spec/controls-options-manager/index.js +163 -0
  335. package/test/unit/spec/controls-options-manager/util.js +576 -60
  336. package/test/unit/spec/fixture/locus.js +1 -0
  337. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  338. package/test/unit/spec/interpretation/collection.ts +15 -0
  339. package/test/unit/spec/interpretation/index.ts +589 -0
  340. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  341. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  342. package/test/unit/spec/locus-info/index.js +1352 -33
  343. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  344. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  345. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  346. package/test/unit/spec/locus-info/parser.js +116 -35
  347. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  348. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  349. package/test/unit/spec/media/index.ts +120 -37
  350. package/test/unit/spec/media/properties.ts +2 -2
  351. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  352. package/test/unit/spec/meeting/index.js +5815 -2008
  353. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  354. package/test/unit/spec/meeting/muteState.js +402 -213
  355. package/test/unit/spec/meeting/request.js +459 -52
  356. package/test/unit/spec/meeting/utils.js +679 -64
  357. package/test/unit/spec/meeting-info/index.js +300 -0
  358. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  359. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  360. package/test/unit/spec/meetings/collection.js +26 -0
  361. package/test/unit/spec/meetings/index.js +1301 -254
  362. package/test/unit/spec/meetings/utils.js +202 -2
  363. package/test/unit/spec/member/index.js +61 -6
  364. package/test/unit/spec/member/util.js +510 -34
  365. package/test/unit/spec/members/index.js +432 -1
  366. package/test/unit/spec/members/request.js +206 -27
  367. package/test/unit/spec/members/utils.js +210 -0
  368. package/test/unit/spec/metrics/index.js +1 -50
  369. package/test/unit/spec/multistream/mediaRequestManager.ts +776 -162
  370. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  371. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  372. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  373. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  374. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  375. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  376. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  377. package/test/unit/spec/reachability/index.ts +476 -14
  378. package/test/unit/spec/reachability/request.js +3 -1
  379. package/test/unit/spec/reachability/util.ts +40 -0
  380. package/test/unit/spec/reconnection-manager/index.js +118 -11
  381. package/test/unit/spec/recording-controller/index.js +294 -218
  382. package/test/unit/spec/recording-controller/util.js +223 -96
  383. package/test/unit/spec/roap/index.ts +174 -63
  384. package/test/unit/spec/roap/request.ts +100 -62
  385. package/test/unit/spec/roap/turnDiscovery.ts +76 -34
  386. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  387. package/test/unit/spec/stats-analyzer/index.js +231 -7
  388. package/test/unit/spec/webinar/collection.ts +13 -0
  389. package/test/unit/spec/webinar/index.ts +60 -0
  390. package/test/utils/integrationTestUtils.js +46 -0
  391. package/test/utils/testUtils.js +0 -52
  392. package/dist/meeting/effectsState.js +0 -262
  393. package/dist/meeting/effectsState.js.map +0 -1
  394. package/dist/metrics/config.js +0 -289
  395. package/dist/metrics/config.js.map +0 -1
  396. package/dist/types/meeting/effectsState.d.ts +0 -42
  397. package/dist/types/metrics/config.d.ts +0 -169
  398. package/src/index.js +0 -16
  399. package/src/meeting/effectsState.ts +0 -211
  400. package/src/metrics/config.ts +0 -485
  401. 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,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,200 @@ 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
83
- _context.next = 3;
69
+ _context.next = 2;
84
70
  return this.webex.boundedStorage.del(this.namespace, _constants.REACHABILITY.localStorageResult);
85
- case 3:
86
- _context.next = 5;
71
+ case 2:
72
+ _context.next = 4;
87
73
  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:
74
+ case 4:
75
+ _context.prev = 4;
76
+ _context.next = 7;
77
+ return this.reachabilityRequest.getClusters(_util.default.getIpVersion(this.webex));
78
+ case 7:
93
79
  _yield$this$reachabil = _context.sent;
94
80
  clusters = _yield$this$reachabil.clusters;
95
81
  joinCookie = _yield$this$reachabil.joinCookie;
96
- _context.next = 13;
97
- return this.performReachabilityCheck(clusters);
98
- case 13:
82
+ _context.next = 12;
83
+ return this.performReachabilityChecks(clusters);
84
+ case 12:
99
85
  results = _context.sent;
100
- _context.next = 16;
86
+ _context.next = 15;
101
87
  return this.webex.boundedStorage.put(this.namespace, _constants.REACHABILITY.localStorageResult, (0, _stringify.default)(results));
102
- case 16:
103
- _context.next = 18;
88
+ case 15:
89
+ _context.next = 17;
104
90
  return this.webex.boundedStorage.put(this.namespace, _constants.REACHABILITY.localStorageJoinCookie, (0, _stringify.default)(joinCookie));
105
- case 18:
91
+ case 17:
106
92
  _loggerProxy.default.logger.log('Reachability:index#gatherReachability --> Reachability checks completed');
107
93
  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));
94
+ case 21:
95
+ _context.prev = 21;
96
+ _context.t0 = _context["catch"](4);
97
+ _loggerProxy.default.logger.error("Reachability:index#gatherReachability --> Error:", _context.t0);
112
98
  return _context.abrupt("return", {});
113
- case 26:
99
+ case 25:
114
100
  case "end":
115
101
  return _context.stop();
116
102
  }
117
- }, _callee, this, [[5, 22]]);
103
+ }, _callee, this, [[4, 21]]);
118
104
  }));
119
105
  function gatherReachability() {
120
106
  return _gatherReachability.apply(this, arguments);
121
107
  }
122
108
  return gatherReachability;
123
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
+ }()
124
263
  /**
125
264
  * fetches reachability data and checks for cluster reachability
126
265
  * @returns {boolean}
@@ -128,158 +267,41 @@ var Reachability = /*#__PURE__*/function () {
128
267
  * @memberof Reachability
129
268
  */
130
269
  }, {
131
- key: "isAnyClusterReachable",
270
+ key: "isAnyPublicClusterReachable",
132
271
  value: function () {
133
- var _isAnyClusterReachable = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
272
+ var _isAnyPublicClusterReachable = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
134
273
  var reachable, reachabilityData, reachabilityResults;
135
- return _regenerator.default.wrap(function _callee2$(_context2) {
136
- while (1) switch (_context2.prev = _context2.next) {
274
+ return _regenerator.default.wrap(function _callee4$(_context4) {
275
+ while (1) switch (_context4.prev = _context4.next) {
137
276
  case 0:
138
277
  reachable = false; // @ts-ignore
139
- _context2.next = 3;
278
+ _context4.next = 3;
140
279
  return this.webex.boundedStorage.get(this.namespace, _constants.REACHABILITY.localStorageResult).catch(function () {});
141
280
  case 3:
142
- reachabilityData = _context2.sent;
281
+ reachabilityData = _context4.sent;
143
282
  if (reachabilityData) {
144
283
  try {
145
284
  reachabilityResults = JSON.parse(reachabilityData);
146
285
  reachable = (0, _values.default)(reachabilityResults).some(function (result) {
147
286
  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';
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');
149
288
  });
150
289
  } catch (e) {
151
290
  _loggerProxy.default.logger.error("Roap:request#attachReachabilityData --> Error in parsing reachability data: ".concat(e));
152
291
  }
153
292
  }
154
- return _context2.abrupt("return", reachable);
293
+ return _context4.abrupt("return", reachable);
155
294
  case 6:
156
295
  case "end":
157
- return _context2.stop();
296
+ return _context4.stop();
158
297
  }
159
- }, _callee2, this);
298
+ }, _callee4, this);
160
299
  }));
161
- function isAnyClusterReachable() {
162
- return _isAnyClusterReachable.apply(this, arguments);
300
+ function isAnyPublicClusterReachable() {
301
+ return _isAnyPublicClusterReachable.apply(this, arguments);
163
302
  }
164
- return isAnyClusterReachable;
303
+ return isAnyPublicClusterReachable;
165
304
  }()
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
305
  /**
284
306
  * Get list of all unreachable clusters
285
307
  * @returns {array} Unreachable clusters
@@ -287,121 +309,28 @@ var Reachability = /*#__PURE__*/function () {
287
309
  * @memberof Reachability
288
310
  */
289
311
  }, {
290
- key: "getUnreachablClusters",
291
- value: function getUnreachablClusters() {
312
+ key: "getUnreachableClusters",
313
+ value: function getUnreachableClusters() {
292
314
  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);
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
+ });
298
325
  }
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);
326
+ if (result.tcp.result === 'unreachable') {
327
+ unreachableList.push({
328
+ name: key,
329
+ protocol: 'tcp'
330
+ });
324
331
  }
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);
347
- }
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
332
  });
333
+ return unreachableList;
405
334
  }
406
335
 
407
336
  /**
@@ -413,120 +342,65 @@ var Reachability = /*#__PURE__*/function () {
413
342
  }, {
414
343
  key: "logUnreachableClusters",
415
344
  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, "."));
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));
419
350
  });
420
351
  }
421
352
 
422
353
  /**
423
- * Calculates time to establish connection
424
- * @param {array} iceResults iceResults
425
- * @returns {object} reachabilityMap
426
- * @private
427
- * @memberof Reachability
354
+ * Performs reachability checks for all clusters
355
+ * @param {ClusterList} clusterList
356
+ * @returns {Promise<ReachabilityResults>} reachability check results
428
357
  */
429
358
  }, {
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
- }
454
-
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);
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();
477
396
  }
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;
397
+ }, _callee5, this);
398
+ }));
399
+ function performReachabilityChecks(_x) {
400
+ return _performReachabilityChecks.apply(this, arguments);
507
401
  }
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
- }
402
+ return performReachabilityChecks;
403
+ }()
530
404
  }]);
531
405
  return Reachability;
532
406
  }();