@webex/plugin-meetings 2.60.0 → 2.60.1-next.1

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