@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.21

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 (365) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +116 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/index.js +226 -0
  8. package/dist/breakouts/index.js.map +1 -0
  9. package/dist/common/browser-detection.js +1 -20
  10. package/dist/common/browser-detection.js.map +1 -1
  11. package/dist/common/collection.js +5 -20
  12. package/dist/common/collection.js.map +1 -1
  13. package/dist/common/config.js +0 -7
  14. package/dist/common/config.js.map +1 -1
  15. package/dist/common/errors/captcha-error.js +10 -24
  16. package/dist/common/errors/captcha-error.js.map +1 -1
  17. package/dist/common/errors/intent-to-join.js +11 -24
  18. package/dist/common/errors/intent-to-join.js.map +1 -1
  19. package/dist/common/errors/join-meeting.js +12 -25
  20. package/dist/common/errors/join-meeting.js.map +1 -1
  21. package/dist/common/errors/media.js +10 -24
  22. package/dist/common/errors/media.js.map +1 -1
  23. package/dist/common/errors/parameter.js +5 -33
  24. package/dist/common/errors/parameter.js.map +1 -1
  25. package/dist/common/errors/password-error.js +10 -24
  26. package/dist/common/errors/password-error.js.map +1 -1
  27. package/dist/common/errors/permission.js +9 -23
  28. package/dist/common/errors/permission.js.map +1 -1
  29. package/dist/common/errors/reconnection-in-progress.js +0 -17
  30. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  31. package/dist/common/errors/reconnection.js +10 -24
  32. package/dist/common/errors/reconnection.js.map +1 -1
  33. package/dist/common/errors/stats.js +10 -24
  34. package/dist/common/errors/stats.js.map +1 -1
  35. package/dist/common/errors/webex-errors.js +6 -41
  36. package/dist/common/errors/webex-errors.js.map +1 -1
  37. package/dist/common/errors/webex-meetings-error.js +5 -25
  38. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  39. package/dist/common/events/events-scope.js +0 -22
  40. package/dist/common/events/events-scope.js.map +1 -1
  41. package/dist/common/events/events.js +0 -23
  42. package/dist/common/events/events.js.map +1 -1
  43. package/dist/common/events/trigger-proxy.js +0 -12
  44. package/dist/common/events/trigger-proxy.js.map +1 -1
  45. package/dist/common/events/util.js +0 -15
  46. package/dist/common/events/util.js.map +1 -1
  47. package/dist/common/logs/logger-config.js +0 -4
  48. package/dist/common/logs/logger-config.js.map +1 -1
  49. package/dist/common/logs/logger-proxy.js +1 -8
  50. package/dist/common/logs/logger-proxy.js.map +1 -1
  51. package/dist/common/logs/request.js +37 -60
  52. package/dist/common/logs/request.js.map +1 -1
  53. package/dist/common/queue.js +4 -14
  54. package/dist/common/queue.js.map +1 -1
  55. package/dist/config.js +6 -6
  56. package/dist/config.js.map +1 -1
  57. package/dist/constants.js +88 -46
  58. package/dist/constants.js.map +1 -1
  59. package/dist/index.js +4 -18
  60. package/dist/index.js.map +1 -1
  61. package/dist/locus-info/controlsUtils.js +12 -29
  62. package/dist/locus-info/controlsUtils.js.map +1 -1
  63. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  64. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  65. package/dist/locus-info/fullState.js +0 -15
  66. package/dist/locus-info/fullState.js.map +1 -1
  67. package/dist/locus-info/hostUtils.js +4 -12
  68. package/dist/locus-info/hostUtils.js.map +1 -1
  69. package/dist/locus-info/index.js +184 -190
  70. package/dist/locus-info/index.js.map +1 -1
  71. package/dist/locus-info/infoUtils.js +3 -37
  72. package/dist/locus-info/infoUtils.js.map +1 -1
  73. package/dist/locus-info/mediaSharesUtils.js +12 -38
  74. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  75. package/dist/locus-info/parser.js +92 -118
  76. package/dist/locus-info/parser.js.map +1 -1
  77. package/dist/locus-info/selfUtils.js +34 -91
  78. package/dist/locus-info/selfUtils.js.map +1 -1
  79. package/dist/media/index.js +67 -111
  80. package/dist/media/index.js.map +1 -1
  81. package/dist/media/properties.js +80 -114
  82. package/dist/media/properties.js.map +1 -1
  83. package/dist/media/util.js +2 -9
  84. package/dist/media/util.js.map +1 -1
  85. package/dist/mediaQualityMetrics/config.js +10 -12
  86. package/dist/mediaQualityMetrics/config.js.map +1 -1
  87. package/dist/meeting/effectsState.js +125 -190
  88. package/dist/meeting/effectsState.js.map +1 -1
  89. package/dist/meeting/in-meeting-actions.js +5 -14
  90. package/dist/meeting/in-meeting-actions.js.map +1 -1
  91. package/dist/meeting/index.js +1692 -1925
  92. package/dist/meeting/index.js.map +1 -1
  93. package/dist/meeting/muteState.js +36 -77
  94. package/dist/meeting/muteState.js.map +1 -1
  95. package/dist/meeting/request.js +224 -230
  96. package/dist/meeting/request.js.map +1 -1
  97. package/dist/meeting/request.type.js +7 -0
  98. package/dist/meeting/request.type.js.map +1 -0
  99. package/dist/meeting/state.js +21 -31
  100. package/dist/meeting/state.js.map +1 -1
  101. package/dist/meeting/util.js +43 -215
  102. package/dist/meeting/util.js.map +1 -1
  103. package/dist/meeting-info/collection.js +6 -25
  104. package/dist/meeting-info/collection.js.map +1 -1
  105. package/dist/meeting-info/index.js +14 -32
  106. package/dist/meeting-info/index.js.map +1 -1
  107. package/dist/meeting-info/meeting-info-v2.js +193 -268
  108. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  109. package/dist/meeting-info/request.js +3 -15
  110. package/dist/meeting-info/request.js.map +1 -1
  111. package/dist/meeting-info/util.js +98 -183
  112. package/dist/meeting-info/util.js.map +1 -1
  113. package/dist/meeting-info/utilv2.js +137 -228
  114. package/dist/meeting-info/utilv2.js.map +1 -1
  115. package/dist/meetings/collection.js +5 -20
  116. package/dist/meetings/collection.js.map +1 -1
  117. package/dist/meetings/index.js +490 -560
  118. package/dist/meetings/index.js.map +1 -1
  119. package/dist/meetings/request.js +24 -41
  120. package/dist/meetings/request.js.map +1 -1
  121. package/dist/meetings/util.js +99 -155
  122. package/dist/meetings/util.js.map +1 -1
  123. package/dist/member/index.js +78 -86
  124. package/dist/member/index.js.map +1 -1
  125. package/dist/member/util.js +31 -68
  126. package/dist/member/util.js.map +1 -1
  127. package/dist/members/collection.js +3 -12
  128. package/dist/members/collection.js.map +1 -1
  129. package/dist/members/index.js +93 -200
  130. package/dist/members/index.js.map +1 -1
  131. package/dist/members/request.js +16 -39
  132. package/dist/members/request.js.map +1 -1
  133. package/dist/members/util.js +9 -38
  134. package/dist/members/util.js.map +1 -1
  135. package/dist/metrics/config.js +0 -2
  136. package/dist/metrics/config.js.map +1 -1
  137. package/dist/metrics/constants.js +1 -2
  138. package/dist/metrics/constants.js.map +1 -1
  139. package/dist/metrics/index.js +55 -135
  140. package/dist/metrics/index.js.map +1 -1
  141. package/dist/multistream/mediaRequestManager.js +57 -32
  142. package/dist/multistream/mediaRequestManager.js.map +1 -1
  143. package/dist/multistream/multistreamMedia.js +15 -21
  144. package/dist/multistream/multistreamMedia.js.map +1 -1
  145. package/dist/multistream/receiveSlot.js +10 -50
  146. package/dist/multistream/receiveSlot.js.map +1 -1
  147. package/dist/multistream/receiveSlotManager.js +45 -82
  148. package/dist/multistream/receiveSlotManager.js.map +1 -1
  149. package/dist/multistream/remoteMedia.js +18 -58
  150. package/dist/multistream/remoteMedia.js.map +1 -1
  151. package/dist/multistream/remoteMediaGroup.js +6 -40
  152. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  153. package/dist/multistream/remoteMediaManager.js +362 -416
  154. package/dist/multistream/remoteMediaManager.js.map +1 -1
  155. package/dist/networkQualityMonitor/index.js +36 -57
  156. package/dist/networkQualityMonitor/index.js.map +1 -1
  157. package/dist/personal-meeting-room/index.js +21 -45
  158. package/dist/personal-meeting-room/index.js.map +1 -1
  159. package/dist/personal-meeting-room/request.js +1 -31
  160. package/dist/personal-meeting-room/request.js.map +1 -1
  161. package/dist/personal-meeting-room/util.js +0 -13
  162. package/dist/personal-meeting-room/util.js.map +1 -1
  163. package/dist/reachability/index.js +138 -182
  164. package/dist/reachability/index.js.map +1 -1
  165. package/dist/reachability/request.js +3 -18
  166. package/dist/reachability/request.js.map +1 -1
  167. package/dist/reactions/constants.js +13 -0
  168. package/dist/reactions/constants.js.map +1 -0
  169. package/dist/reactions/reactions.js +109 -0
  170. package/dist/reactions/reactions.js.map +1 -0
  171. package/dist/reactions/reactions.type.js +36 -0
  172. package/dist/reactions/reactions.type.js.map +1 -0
  173. package/dist/reconnection-manager/index.js +322 -455
  174. package/dist/reconnection-manager/index.js.map +1 -1
  175. package/dist/recording-controller/enums.js +17 -0
  176. package/dist/recording-controller/enums.js.map +1 -0
  177. package/dist/recording-controller/index.js +343 -0
  178. package/dist/recording-controller/index.js.map +1 -0
  179. package/dist/recording-controller/util.js +63 -0
  180. package/dist/recording-controller/util.js.map +1 -0
  181. package/dist/roap/index.js +39 -64
  182. package/dist/roap/index.js.map +1 -1
  183. package/dist/roap/request.js +94 -113
  184. package/dist/roap/request.js.map +1 -1
  185. package/dist/roap/turnDiscovery.js +85 -94
  186. package/dist/roap/turnDiscovery.js.map +1 -1
  187. package/dist/statsAnalyzer/global.js +0 -2
  188. package/dist/statsAnalyzer/global.js.map +1 -1
  189. package/dist/statsAnalyzer/index.js +85 -175
  190. package/dist/statsAnalyzer/index.js.map +1 -1
  191. package/dist/statsAnalyzer/mqaUtil.js +72 -53
  192. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  193. package/dist/transcription/index.js +22 -47
  194. package/dist/transcription/index.js.map +1 -1
  195. package/internal-README.md +7 -6
  196. package/package.json +25 -20
  197. package/src/breakouts/README.md +190 -0
  198. package/src/breakouts/breakout.ts +110 -0
  199. package/src/breakouts/collection.ts +19 -0
  200. package/src/breakouts/index.ts +225 -0
  201. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  202. package/src/common/collection.ts +9 -7
  203. package/src/common/{config.js → config.ts} +1 -1
  204. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  205. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  206. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  207. package/src/common/errors/{media.js → media.ts} +11 -7
  208. package/src/common/errors/parameter.ts +11 -7
  209. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  210. package/src/common/errors/{permission.js → permission.ts} +10 -6
  211. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  212. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  213. package/src/common/errors/{stats.js → stats.ts} +11 -7
  214. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  215. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  216. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  217. package/src/common/events/{events.js → events.ts} +5 -1
  218. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  219. package/src/common/events/{util.js → util.ts} +2 -3
  220. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  221. package/src/common/logs/logger-proxy.ts +44 -0
  222. package/src/common/logs/{request.js → request.ts} +22 -9
  223. package/src/common/queue.ts +1 -2
  224. package/src/{config.js → config.ts} +17 -12
  225. package/src/constants.ts +40 -1
  226. package/src/index.js +2 -1
  227. package/src/locus-info/controlsUtils.ts +114 -0
  228. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  229. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  230. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  231. package/src/locus-info/{index.js → index.ts} +148 -64
  232. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  233. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  234. package/src/locus-info/{parser.js → parser.ts} +67 -79
  235. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  236. package/src/media/{index.js → index.ts} +181 -131
  237. package/src/media/{properties.js → properties.ts} +47 -28
  238. package/src/media/{util.js → util.ts} +2 -2
  239. package/src/mediaQualityMetrics/{config.js → config.ts} +46 -46
  240. package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
  241. package/src/meeting/in-meeting-actions.ts +15 -3
  242. package/src/meeting/{index.js → index.ts} +2263 -1427
  243. package/src/meeting/{muteState.js → muteState.ts} +78 -42
  244. package/src/meeting/{request.js → request.ts} +292 -142
  245. package/src/meeting/request.type.ts +13 -0
  246. package/src/meeting/{state.js → state.ts} +50 -35
  247. package/src/meeting/{util.js → util.ts} +112 -115
  248. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  249. package/src/meeting-info/{index.js → index.ts} +42 -36
  250. package/src/meeting-info/meeting-info-v2.ts +273 -0
  251. package/src/meeting-info/{request.js → request.ts} +14 -4
  252. package/src/meeting-info/{util.js → util.ts} +60 -51
  253. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  254. package/src/meetings/{collection.js → collection.ts} +6 -3
  255. package/src/meetings/index.ts +1159 -0
  256. package/src/meetings/{request.js → request.ts} +32 -25
  257. package/src/meetings/{util.js → util.ts} +34 -32
  258. package/src/member/{index.js → index.ts} +102 -56
  259. package/src/member/{util.js → util.ts} +52 -25
  260. package/src/members/{collection.js → collection.ts} +2 -2
  261. package/src/members/{index.js → index.ts} +219 -142
  262. package/src/members/{request.js → request.ts} +60 -16
  263. package/src/members/{util.js → util.ts} +50 -48
  264. package/src/metrics/{config.js → config.ts} +254 -83
  265. package/src/metrics/{constants.js → constants.ts} +0 -2
  266. package/src/metrics/{index.js → index.ts} +106 -74
  267. package/src/multistream/mediaRequestManager.ts +81 -15
  268. package/src/multistream/multistreamMedia.ts +5 -0
  269. package/src/multistream/receiveSlot.ts +18 -12
  270. package/src/multistream/receiveSlotManager.ts +23 -21
  271. package/src/multistream/remoteMedia.ts +15 -5
  272. package/src/multistream/remoteMediaGroup.ts +4 -3
  273. package/src/multistream/remoteMediaManager.ts +153 -37
  274. package/src/networkQualityMonitor/{index.js → index.ts} +37 -25
  275. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  276. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  277. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  278. package/src/reachability/{index.js → index.ts} +99 -83
  279. package/src/reachability/request.ts +39 -33
  280. package/src/reactions/constants.ts +4 -0
  281. package/src/reactions/reactions.ts +104 -0
  282. package/src/reactions/reactions.type.ts +62 -0
  283. package/src/reconnection-manager/{index.js → index.ts} +195 -102
  284. package/src/recording-controller/enums.ts +8 -0
  285. package/src/recording-controller/index.ts +315 -0
  286. package/src/recording-controller/util.ts +58 -0
  287. package/src/roap/{index.js → index.ts} +73 -56
  288. package/src/roap/request.ts +157 -0
  289. package/src/roap/turnDiscovery.ts +77 -37
  290. package/src/statsAnalyzer/{global.js → global.ts} +30 -33
  291. package/src/statsAnalyzer/{index.js → index.ts} +468 -192
  292. package/src/statsAnalyzer/mqaUtil.ts +290 -0
  293. package/src/transcription/{index.js → index.ts} +46 -39
  294. package/test/integration/spec/journey.js +664 -463
  295. package/test/integration/spec/space-meeting.js +320 -206
  296. package/test/integration/spec/transcription.js +7 -8
  297. package/test/unit/spec/breakouts/breakout.ts +119 -0
  298. package/test/unit/spec/breakouts/collection.ts +15 -0
  299. package/test/unit/spec/breakouts/index.ts +293 -0
  300. package/test/unit/spec/common/browser-detection.js +9 -28
  301. package/test/unit/spec/fixture/locus.js +92 -90
  302. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  303. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  304. package/test/unit/spec/locus-info/index.js +104 -2
  305. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  306. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  307. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  308. package/test/unit/spec/locus-info/parser.js +3 -9
  309. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  310. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  311. package/test/unit/spec/media/index.ts +31 -47
  312. package/test/unit/spec/media/properties.ts +9 -9
  313. package/test/unit/spec/meeting/effectsState.js +39 -45
  314. package/test/unit/spec/meeting/in-meeting-actions.ts +5 -2
  315. package/test/unit/spec/meeting/index.js +2017 -742
  316. package/test/unit/spec/meeting/muteState.js +42 -33
  317. package/test/unit/spec/meeting/request.js +115 -44
  318. package/test/unit/spec/meeting/utils.js +104 -171
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  320. package/test/unit/spec/meeting-info/request.js +7 -9
  321. package/test/unit/spec/meeting-info/util.js +11 -12
  322. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  323. package/test/unit/spec/meetings/collection.js +1 -1
  324. package/test/unit/spec/meetings/index.js +439 -257
  325. package/test/unit/spec/meetings/utils.js +14 -12
  326. package/test/unit/spec/member/index.js +0 -1
  327. package/test/unit/spec/member/util.js +31 -7
  328. package/test/unit/spec/members/index.js +104 -54
  329. package/test/unit/spec/members/request.js +29 -20
  330. package/test/unit/spec/members/utils.js +8 -5
  331. package/test/unit/spec/metrics/index.js +16 -21
  332. package/test/unit/spec/multistream/mediaRequestManager.ts +316 -50
  333. package/test/unit/spec/multistream/receiveSlot.ts +6 -6
  334. package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
  335. package/test/unit/spec/multistream/remoteMedia.ts +10 -2
  336. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  337. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  338. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  339. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  340. package/test/unit/spec/reachability/index.ts +58 -26
  341. package/test/unit/spec/reconnection-manager/index.js +102 -9
  342. package/test/unit/spec/recording-controller/index.js +231 -0
  343. package/test/unit/spec/recording-controller/util.js +102 -0
  344. package/test/unit/spec/roap/index.ts +2 -1
  345. package/test/unit/spec/roap/request.ts +114 -0
  346. package/test/unit/spec/roap/turnDiscovery.ts +64 -45
  347. package/test/unit/spec/stats-analyzer/index.js +27 -22
  348. package/test/utils/cmr.js +44 -42
  349. package/test/utils/testUtils.js +83 -74
  350. package/test/utils/webex-config.js +18 -18
  351. package/test/utils/webex-test-users.js +54 -50
  352. package/tsconfig.json +6 -0
  353. package/dist/media/internal-media-core-wrapper.js +0 -22
  354. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  355. package/dist/peer-connection-manager/util.js +0 -124
  356. package/dist/peer-connection-manager/util.js.map +0 -1
  357. package/src/common/logs/logger-proxy.js +0 -33
  358. package/src/locus-info/controlsUtils.js +0 -102
  359. package/src/media/internal-media-core-wrapper.ts +0 -9
  360. package/src/meeting-info/meeting-info-v2.js +0 -255
  361. package/src/meetings/index.js +0 -1015
  362. package/src/peer-connection-manager/util.ts +0 -117
  363. package/src/roap/request.js +0 -127
  364. package/src/statsAnalyzer/mqaUtil.js +0 -173
  365. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
@@ -7,11 +7,7 @@
7
7
  import _ from 'lodash';
8
8
 
9
9
  import LoggerProxy from '../common/logs/logger-proxy';
10
- import {
11
- ICE_GATHERING_STATE,
12
- CONNECTION_STATE,
13
- REACHABILITY
14
- } from '../constants';
10
+ import {ICE_GATHERING_STATE, CONNECTION_STATE, REACHABILITY} from '../constants';
15
11
 
16
12
  import ReachabilityRequest from './request';
17
13
 
@@ -23,12 +19,17 @@ const VIDEO_MESH_TIMEOUT = 1000;
23
19
  * @export
24
20
  */
25
21
  export default class Reachability {
22
+ namespace = REACHABILITY.namespace;
23
+ webex: object;
24
+ reachabilityRequest: any;
25
+ clusterLatencyResults: any;
26
+
26
27
  /**
27
28
  * Creates an instance of Reachability.
28
29
  * @param {object} webex
29
30
  * @memberof Reachability
30
31
  */
31
- constructor(webex) {
32
+ constructor(webex: object) {
32
33
  this.webex = webex;
33
34
 
34
35
  /**
@@ -50,7 +51,6 @@ export default class Reachability {
50
51
  this.clusterLatencyResults = {};
51
52
  }
52
53
 
53
-
54
54
  /**
55
55
  * fetches reachability data
56
56
  * @returns {Object} reachability data
@@ -58,18 +58,12 @@ export default class Reachability {
58
58
  * @async
59
59
  * @memberof Reachability
60
60
  */
61
- async gatherReachability() {
61
+ public async gatherReachability() {
62
62
  this.setup();
63
63
 
64
64
  // Remove stored reachability results to ensure no stale data
65
- if (window?.localStorage?.removeItem) {
66
- window.localStorage.removeItem(REACHABILITY.localStorage);
67
- }
68
- else {
69
- LoggerProxy.logger.error('Reachability:index#gatherReachability --> Error in accessing LocalStorage.');
70
-
71
- return {};
72
- }
65
+ // @ts-ignore
66
+ await this.webex.boundedStorage.del(this.namespace, REACHABILITY.localStorage);
73
67
 
74
68
  // Fetch clusters and measure latency
75
69
  try {
@@ -78,14 +72,22 @@ export default class Reachability {
78
72
  // Perform Reachability Check
79
73
  const results = await this.performReachabilityCheck(clusters);
80
74
 
81
- window.localStorage.setItem(REACHABILITY.localStorage, JSON.stringify(results));
75
+ // @ts-ignore
76
+ await this.webex.boundedStorage.put(
77
+ this.namespace,
78
+ REACHABILITY.localStorage,
79
+ JSON.stringify(results)
80
+ );
82
81
 
83
- LoggerProxy.logger.log('Reachability:index#gatherReachability --> Reachability checks completed');
82
+ LoggerProxy.logger.log(
83
+ 'Reachability:index#gatherReachability --> Reachability checks completed'
84
+ );
84
85
 
85
86
  return results;
86
- }
87
- catch (getClusterError) {
88
- LoggerProxy.logger.error(`Reachability:index#gatherReachability --> Error in calling getClusters(): ${getClusterError}`);
87
+ } catch (getClusterError) {
88
+ LoggerProxy.logger.error(
89
+ `Reachability:index#gatherReachability --> Error in calling getClusters(): ${getClusterError}`
90
+ );
89
91
 
90
92
  return {};
91
93
  }
@@ -97,25 +99,30 @@ export default class Reachability {
97
99
  * @public
98
100
  * @memberof Reachability
99
101
  */
100
- isAnyClusterReachable() {
102
+ async isAnyClusterReachable() {
101
103
  let reachable = false;
102
- const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);
104
+ // @ts-ignore
105
+ const reachabilityData = await this.webex.boundedStorage
106
+ .get(this.namespace, REACHABILITY.localStorage)
107
+ .catch(() => {});
103
108
 
104
109
  if (reachabilityData) {
105
110
  try {
106
111
  const reachabilityResults = JSON.parse(reachabilityData);
107
112
 
108
- reachable = Object.values(reachabilityResults).some((result) => result.udp?.reachable === 'true' || result.tcp?.reachable === 'true');
109
- }
110
- catch (e) {
111
- LoggerProxy.logger.error(`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`);
113
+ reachable = Object.values(reachabilityResults).some(
114
+ (result: any) => result.udp?.reachable === 'true' || result.tcp?.reachable === 'true'
115
+ );
116
+ } catch (e) {
117
+ LoggerProxy.logger.error(
118
+ `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
119
+ );
112
120
  }
113
121
  }
114
122
 
115
123
  return reachable;
116
124
  }
117
125
 
118
-
119
126
  /**
120
127
  * Generate peerConnection config settings
121
128
  * @param {object} cluster
@@ -123,26 +130,20 @@ export default class Reachability {
123
130
  * @private
124
131
  * @memberof Reachability
125
132
  */
126
- buildPeerConnectionConfig(cluster) {
127
- const iceServers = _.uniq([
128
- ...cluster.udp,
129
- ...cluster.tcp
130
- ]).map((url) => ({
133
+ private buildPeerConnectionConfig(cluster: any) {
134
+ const iceServers = _.uniq([...cluster.udp, ...cluster.tcp]).map((url) => ({
131
135
  username: '',
132
136
  credential: '',
133
- urls: [url]
137
+ urls: [url],
134
138
  }));
135
139
 
136
140
  return {
137
- iceServers: [
138
- ...iceServers
139
- ],
141
+ iceServers: [...iceServers],
140
142
  iceCandidatePoolSize: '0',
141
- iceTransportPolicy: 'all'
143
+ iceTransportPolicy: 'all',
142
144
  };
143
145
  }
144
146
 
145
-
146
147
  /**
147
148
  * Creates an RTCPeerConnection
148
149
  * @param {object} cluster
@@ -150,24 +151,25 @@ export default class Reachability {
150
151
  * @private
151
152
  * @memberof Reachability
152
153
  */
153
- createPeerConnection(cluster) {
154
+ private createPeerConnection(cluster: any) {
154
155
  const {key, config} = cluster;
155
156
 
156
157
  try {
157
158
  const peerConnection = new window.RTCPeerConnection(config);
158
159
 
160
+ // @ts-ignore
159
161
  peerConnection.key = key;
160
162
 
161
163
  return peerConnection;
162
- }
163
- catch (peerConnectionError) {
164
- LoggerProxy.logger.log(`Reachability:index#createPeerConnection --> Error creating peerConnection: ${peerConnectionError}`);
164
+ } catch (peerConnectionError) {
165
+ LoggerProxy.logger.log(
166
+ `Reachability:index#createPeerConnection --> Error creating peerConnection: ${peerConnectionError}`
167
+ );
165
168
 
166
169
  return null;
167
170
  }
168
171
  }
169
172
 
170
-
171
173
  /**
172
174
  * Gets total elapsed time
173
175
  * @param {RTCPeerConnection} peerConnection
@@ -175,7 +177,7 @@ export default class Reachability {
175
177
  * @private
176
178
  * @memberof Reachability
177
179
  */
178
- getElapsedTime(peerConnection) {
180
+ private getElapsedTime(peerConnection: any) {
179
181
  const startTime = peerConnection.begin;
180
182
 
181
183
  delete peerConnection.begin;
@@ -183,7 +185,6 @@ export default class Reachability {
183
185
  return Date.now() - startTime;
184
186
  }
185
187
 
186
-
187
188
  /**
188
189
  * creates offer and generates localSDP
189
190
  * @param {object} clusterList cluster List
@@ -191,8 +192,8 @@ export default class Reachability {
191
192
  * @private
192
193
  * @memberof Reachability
193
194
  */
194
- getLocalSDPForClusters(clusterList) {
195
- let clusters = [...Object.keys(clusterList)];
195
+ private getLocalSDPForClusters(clusterList: object) {
196
+ let clusters: any[] = [...Object.keys(clusterList)];
196
197
 
197
198
  clusters = clusters.map(async (key) => {
198
199
  const cluster = clusterList[key];
@@ -200,13 +201,18 @@ export default class Reachability {
200
201
  const peerConnection = this.createPeerConnection({key, config});
201
202
  const description = await peerConnection.createOffer({offerToReceiveAudio: true});
202
203
 
204
+ // @ts-ignore
203
205
  peerConnection.begin = Date.now();
204
206
  peerConnection.setLocalDescription(description);
205
207
 
206
- return this.iceGatheringState(peerConnection, cluster.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT)
207
- .catch((iceGatheringStateError) => {
208
- LoggerProxy.logger.log(`Reachability:index#getLocalSDPForClusters --> Error in getLocalSDP : ${iceGatheringStateError}`);
209
- });
208
+ return this.iceGatheringState(
209
+ peerConnection,
210
+ cluster.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT
211
+ ).catch((iceGatheringStateError) => {
212
+ LoggerProxy.logger.log(
213
+ `Reachability:index#getLocalSDPForClusters --> Error in getLocalSDP : ${iceGatheringStateError}`
214
+ );
215
+ });
210
216
  });
211
217
 
212
218
  return Promise.all(clusters)
@@ -219,14 +225,13 @@ export default class Reachability {
219
225
  });
220
226
  }
221
227
 
222
-
223
228
  /**
224
229
  * Get list of all unreachable clusters
225
230
  * @returns {array} Unreachable clusters
226
231
  * @private
227
232
  * @memberof Reachability
228
233
  */
229
- getUnreachablClusters() {
234
+ private getUnreachablClusters() {
230
235
  const unreachableList = [];
231
236
  const clusters = this.clusterLatencyResults;
232
237
 
@@ -241,7 +246,6 @@ export default class Reachability {
241
246
  return unreachableList;
242
247
  }
243
248
 
244
-
245
249
  /**
246
250
  * Attach an event handler for the icegatheringstatechange
247
251
  * event and measure latency.
@@ -250,20 +254,24 @@ export default class Reachability {
250
254
  * @private
251
255
  * @memberof Reachability
252
256
  */
253
- handleIceGatheringStateChange(peerConnection) {
257
+ private handleIceGatheringStateChange(peerConnection: RTCPeerConnection) {
254
258
  peerConnection.onicegatheringstatechange = () => {
255
259
  const {COMPLETE} = ICE_GATHERING_STATE;
256
260
 
257
261
  if (peerConnection.iceConnectionState === COMPLETE) {
258
262
  const elapsed = this.getElapsedTime(peerConnection);
259
263
 
260
- LoggerProxy.logger.log(`Reachability:index#onIceGatheringStateChange --> Successfully pinged ${peerConnection.key}:`, elapsed);
264
+ // @ts-ignore
265
+ LoggerProxy.logger.log(
266
+ // @ts-ignore
267
+ `Reachability:index#onIceGatheringStateChange --> Successfully pinged ${peerConnection.key}:`,
268
+ elapsed
269
+ );
261
270
  this.setLatencyAndClose(peerConnection, elapsed);
262
271
  }
263
272
  };
264
273
  }
265
274
 
266
-
267
275
  /**
268
276
  * Attach an event handler for the icecandidate
269
277
  * event and measure latency.
@@ -272,14 +280,18 @@ export default class Reachability {
272
280
  * @private
273
281
  * @memberof Reachability
274
282
  */
275
- handleOnIceCandidate(peerConnection) {
283
+ private handleOnIceCandidate(peerConnection: RTCPeerConnection) {
276
284
  peerConnection.onicecandidate = (e) => {
277
285
  const SERVER_REFLEXIVE = 'srflx';
278
286
 
279
287
  if (e.candidate && String(e.candidate.type).toLowerCase() === SERVER_REFLEXIVE) {
280
288
  const elapsed = this.getElapsedTime(peerConnection);
281
289
 
282
- LoggerProxy.logger.log(`Reachability:index#onIceCandidate --> Successfully pinged ${peerConnection.key}:`, elapsed);
290
+ LoggerProxy.logger.log(
291
+ // @ts-ignore
292
+ `Reachability:index#onIceCandidate --> Successfully pinged ${peerConnection.key}:`,
293
+ elapsed
294
+ );
283
295
  this.setLatencyAndClose(peerConnection, elapsed);
284
296
  }
285
297
  };
@@ -294,7 +306,7 @@ export default class Reachability {
294
306
  * @param {number} timeout
295
307
  * @returns {Promise}
296
308
  */
297
- iceGatheringState(peerConnection, timeout) {
309
+ private iceGatheringState(peerConnection: RTCPeerConnection, timeout: number) {
298
310
  const ELAPSED = 'elapsed';
299
311
 
300
312
  return new Promise((resolve) => {
@@ -302,7 +314,7 @@ export default class Reachability {
302
314
  get(target, property) {
303
315
  const targetMember = target[property];
304
316
 
305
- if (typeof (targetMember) === 'function') {
317
+ if (typeof targetMember === 'function') {
306
318
  return targetMember.bind(target);
307
319
  }
308
320
 
@@ -311,6 +323,7 @@ export default class Reachability {
311
323
  set: (target, property, value) => {
312
324
  // only intercept elapsed property
313
325
  if (property === ELAPSED) {
326
+ // @ts-ignore
314
327
  resolve({clusterId: peerConnection.key, elapsed: value});
315
328
 
316
329
  return true;
@@ -318,7 +331,7 @@ export default class Reachability {
318
331
 
319
332
  // pass thru
320
333
  return window.Reflect.set(target, property, value);
321
- }
334
+ },
322
335
  });
323
336
 
324
337
  // Using peerConnection proxy so handle functions below
@@ -338,22 +351,22 @@ export default class Reachability {
338
351
  });
339
352
  }
340
353
 
341
-
342
354
  /**
343
355
  * Make a log of unreachable clusters.
344
356
  * @returns {undefined}
345
357
  * @private
346
358
  * @memberof Reachability
347
359
  */
348
- logUnreachableClusters() {
360
+ private logUnreachableClusters() {
349
361
  const list = this.getUnreachablClusters();
350
362
 
351
363
  list.forEach((cluster) => {
352
- LoggerProxy.logger.log(`Reachability:index#logUnreachableClusters --> No ice candidate for ${cluster}.`);
364
+ LoggerProxy.logger.log(
365
+ `Reachability:index#logUnreachableClusters --> No ice candidate for ${cluster}.`
366
+ );
353
367
  });
354
368
  }
355
369
 
356
-
357
370
  /**
358
371
  * Calculates time to establish connection
359
372
  * @param {array} iceResults iceResults
@@ -361,7 +374,7 @@ export default class Reachability {
361
374
  * @private
362
375
  * @memberof Reachability
363
376
  */
364
- parseIceResultsToReachabilityResults(iceResults) {
377
+ private parseIceResultsToReachabilityResults(iceResults: Array<any>) {
365
378
  const reachabilityMap = {};
366
379
 
367
380
  iceResults.forEach(({clusterId, elapsed}) => {
@@ -369,24 +382,22 @@ export default class Reachability {
369
382
 
370
383
  if (elapsed === null) {
371
384
  latencyResult = {reachable: 'false'};
372
- }
373
- else {
385
+ } else {
374
386
  latencyResult = {
375
387
  reachable: 'true',
376
- latencyInMilliseconds: (elapsed).toString()
388
+ latencyInMilliseconds: elapsed.toString(),
377
389
  };
378
390
  }
379
391
 
380
392
  reachabilityMap[clusterId] = {
381
393
  udp: latencyResult,
382
- tcp: latencyResult
394
+ tcp: latencyResult,
383
395
  };
384
396
  });
385
397
 
386
398
  return reachabilityMap;
387
399
  }
388
400
 
389
-
390
401
  /**
391
402
  * fetches reachability data
392
403
  * @param {object} clusterList
@@ -394,7 +405,7 @@ export default class Reachability {
394
405
  * @private
395
406
  * @memberof Reachability
396
407
  */
397
- performReachabilityCheck(clusterList) {
408
+ private performReachabilityCheck(clusterList: object) {
398
409
  if (!clusterList || !Object.keys(clusterList).length) {
399
410
  return Promise.resolve({});
400
411
  }
@@ -404,21 +415,23 @@ export default class Reachability {
404
415
  .then((localSDPData) => {
405
416
  if (!localSDPData || !Object.keys(localSDPData).length) {
406
417
  // TODO: handle the error condition properly and try retry
407
- LoggerProxy.logger.log('Reachability:index#performReachabilityCheck --> Local SDP is empty or has missing elements..returning');
418
+ LoggerProxy.logger.log(
419
+ 'Reachability:index#performReachabilityCheck --> Local SDP is empty or has missing elements..returning'
420
+ );
408
421
  resolve({});
409
- }
410
- else {
422
+ } else {
411
423
  resolve(localSDPData);
412
424
  }
413
425
  })
414
426
  .catch((error) => {
415
- LoggerProxy.logger.error(`Reachability:index#performReachabilityCheck --> Error in getLocalSDPForClusters: ${error}`);
427
+ LoggerProxy.logger.error(
428
+ `Reachability:index#performReachabilityCheck --> Error in getLocalSDPForClusters: ${error}`
429
+ );
416
430
  resolve({});
417
431
  });
418
432
  });
419
433
  }
420
434
 
421
-
422
435
  /**
423
436
  * Records latency and closes the peerConnection
424
437
  * @param {RTCPeerConnection} peerConnection
@@ -427,16 +440,19 @@ export default class Reachability {
427
440
  * @private
428
441
  * @memberof Reachability
429
442
  */
430
- setLatencyAndClose(peerConnection, elapsed) {
443
+ private setLatencyAndClose(peerConnection: RTCPeerConnection, elapsed: number) {
431
444
  const REACHABLE = 'reachable';
432
445
  const UNREACHABLE = 'unreachable';
433
446
  const {CLOSED} = CONNECTION_STATE;
447
+ // @ts-ignore
434
448
  const {key} = peerConnection;
435
449
  const resultKey = elapsed === null ? UNREACHABLE : REACHABLE;
436
450
  const intialState = {[REACHABLE]: 0, [UNREACHABLE]: 0};
437
451
 
438
452
  if (peerConnection.connectionState === CLOSED) {
439
- LoggerProxy.logger.log(`Reachability:index#setLatencyAndClose --> Attempting to set latency of ${elapsed} on closed peerConnection.`);
453
+ LoggerProxy.logger.log(
454
+ `Reachability:index#setLatencyAndClose --> Attempting to set latency of ${elapsed} on closed peerConnection.`
455
+ );
440
456
 
441
457
  return;
442
458
  }
@@ -448,17 +464,17 @@ export default class Reachability {
448
464
  // an event other than onIceCandidate
449
465
  peerConnection.onicecandidate = null;
450
466
  peerConnection.close();
467
+ // @ts-ignore
451
468
  peerConnection.elapsed = elapsed;
452
469
  }
453
470
 
454
-
455
471
  /**
456
472
  * utility function
457
473
  * @returns {undefined}
458
474
  * @private
459
475
  * @memberof Reachability
460
476
  */
461
- setup() {
477
+ private setup() {
462
478
  this.clusterLatencyResults = {};
463
479
  }
464
480
  }
@@ -1,9 +1,5 @@
1
1
  import LoggerProxy from '../common/logs/logger-proxy';
2
- import {
3
- HTTP_VERBS,
4
- RESOURCE,
5
- API
6
- } from '../constants';
2
+ import {HTTP_VERBS, RESOURCE, API} from '../constants';
7
3
 
8
4
  export interface ClusterNode {
9
5
  isVideoMesh: boolean;
@@ -13,19 +9,21 @@ export interface ClusterNode {
13
9
  }
14
10
 
15
11
  export type ClusterList = {
16
- [key:string]: ClusterNode;
17
- }
12
+ [key: string]: ClusterNode;
13
+ };
18
14
 
19
15
  /**
20
16
  * @class ReachabilityRequest
21
17
  */
22
18
  class ReachabilityRequest {
19
+ webex: any;
20
+
23
21
  /**
24
22
  * Creates an instance of ReachabilityRequest.
25
23
  * @param {object} webex
26
24
  * @memberof ReachabilityRequest
27
25
  */
28
- constructor(webex) {
26
+ constructor(webex: object) {
29
27
  this.webex = webex;
30
28
  }
31
29
 
@@ -35,41 +33,49 @@ class ReachabilityRequest {
35
33
  * @param {boolean} includeVideoMesh whether to include the video mesh clusters in the result or not
36
34
  * @returns {Promise}
37
35
  */
38
- getClusters = (): Promise<ClusterList> => this.webex.request({
39
- method: HTTP_VERBS.GET,
40
- shouldRefreshAccessToken: false,
41
- api: API.CALLIOPEDISCOVERY,
42
- resource: RESOURCE.CLUSTERS
43
- })
44
- .then((res) => {
45
- const {clusters} = res.body;
36
+ getClusters = (): Promise<ClusterList> =>
37
+ this.webex
38
+ .request({
39
+ method: HTTP_VERBS.GET,
40
+ shouldRefreshAccessToken: false,
41
+ api: API.CALLIOPEDISCOVERY,
42
+ resource: RESOURCE.CLUSTERS,
43
+ })
44
+ .then((res) => {
45
+ const {clusters} = res.body;
46
46
 
47
- Object.keys(clusters).forEach((key) => {
48
- clusters[key].isVideoMesh = res.body.clusterClasses?.hybridMedia?.includes(key);
49
- });
47
+ Object.keys(clusters).forEach((key) => {
48
+ clusters[key].isVideoMesh = res.body.clusterClasses?.hybridMedia?.includes(key);
49
+ });
50
50
 
51
- LoggerProxy.logger.log(`Reachability:request#getClusters --> get clusters successful:${JSON.stringify(clusters)}`);
51
+ LoggerProxy.logger.log(
52
+ `Reachability:request#getClusters --> get clusters successful:${JSON.stringify(clusters)}`
53
+ );
52
54
 
53
- return clusters;
54
- });
55
+ return clusters;
56
+ });
55
57
 
56
58
  /**
57
59
  * gets remote SDP For Clusters
58
60
  * @param {Object} localSDPList localSDPs for the cluster
59
61
  * @returns {Object}
60
62
  */
61
- remoteSDPForClusters = (localSDPList) => this.webex.request({
62
- method: HTTP_VERBS.POST,
63
- shouldRefreshAccessToken: false,
64
- api: API.CALLIOPEDISCOVERY,
65
- resource: RESOURCE.REACHABILITY,
66
- body: {offers: localSDPList}
67
- })
68
- .then((res) => {
69
- LoggerProxy.logger.log('Reachability:request#remoteSDPForClusters --> Remote SDPs got succcessfully');
63
+ remoteSDPForClusters = (localSDPList: object) =>
64
+ this.webex
65
+ .request({
66
+ method: HTTP_VERBS.POST,
67
+ shouldRefreshAccessToken: false,
68
+ api: API.CALLIOPEDISCOVERY,
69
+ resource: RESOURCE.REACHABILITY,
70
+ body: {offers: localSDPList},
71
+ })
72
+ .then((res) => {
73
+ LoggerProxy.logger.log(
74
+ 'Reachability:request#remoteSDPForClusters --> Remote SDPs got succcessfully'
75
+ );
70
76
 
71
- return res.body;
72
- });
77
+ return res.body;
78
+ });
73
79
  }
74
80
 
75
81
  export default ReachabilityRequest;
@@ -0,0 +1,4 @@
1
+ // eslint-disable-next-line import/prefer-default-export
2
+ export const REACTION_RELAY_TYPES = {
3
+ REACTION: 'react',
4
+ } as const;