@webex/plugin-meetings 3.0.0-stream-classes.5 → 3.0.0

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 (465) hide show
  1. package/.eslintrc.js +6 -0
  2. package/README.md +12 -0
  3. package/babel.config.js +3 -0
  4. package/dist/annotation/constants.js +12 -20
  5. package/dist/annotation/constants.js.map +1 -1
  6. package/dist/annotation/index.js +25 -10
  7. package/dist/annotation/index.js.map +1 -1
  8. package/dist/breakouts/breakout.js +2 -3
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/collection.js +1 -2
  11. package/dist/breakouts/collection.js.map +1 -1
  12. package/dist/breakouts/edit-lock-error.js +1 -2
  13. package/dist/breakouts/edit-lock-error.js.map +1 -1
  14. package/dist/breakouts/events.js +1 -2
  15. package/dist/breakouts/events.js.map +1 -1
  16. package/dist/breakouts/index.js +13 -14
  17. package/dist/breakouts/index.js.map +1 -1
  18. package/dist/breakouts/request.js +1 -2
  19. package/dist/breakouts/request.js.map +1 -1
  20. package/dist/breakouts/utils.js +3 -6
  21. package/dist/breakouts/utils.js.map +1 -1
  22. package/dist/common/browser-detection.js +2 -3
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +3 -4
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  37. package/dist/common/errors/no-meeting-info.js +50 -0
  38. package/dist/common/errors/no-meeting-info.js.map +1 -0
  39. package/dist/common/errors/parameter.js +3 -4
  40. package/dist/common/errors/parameter.js.map +1 -1
  41. package/dist/common/errors/password-error.js +1 -2
  42. package/dist/common/errors/password-error.js.map +1 -1
  43. package/dist/common/errors/permission.js +1 -2
  44. package/dist/common/errors/permission.js.map +1 -1
  45. package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
  46. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  47. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  48. package/dist/common/errors/reconnection-in-progress.js +1 -2
  49. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  50. package/dist/common/errors/reconnection.js +1 -2
  51. package/dist/common/errors/reconnection.js.map +1 -1
  52. package/dist/common/errors/stats.js +1 -2
  53. package/dist/common/errors/stats.js.map +1 -1
  54. package/dist/{types/common → common}/errors/webex-errors.d.ts +13 -1
  55. package/dist/common/errors/webex-errors.js +35 -16
  56. package/dist/common/errors/webex-errors.js.map +1 -1
  57. package/dist/common/errors/webex-meetings-error.js +1 -2
  58. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  59. package/dist/common/events/events-scope.js +1 -2
  60. package/dist/common/events/events-scope.js.map +1 -1
  61. package/dist/common/events/events.js +1 -2
  62. package/dist/common/events/events.js.map +1 -1
  63. package/dist/common/events/trigger-proxy.js +1 -2
  64. package/dist/common/events/trigger-proxy.js.map +1 -1
  65. package/dist/common/events/util.js +1 -2
  66. package/dist/common/events/util.js.map +1 -1
  67. package/dist/common/logs/logger-config.js +1 -2
  68. package/dist/common/logs/logger-config.js.map +1 -1
  69. package/dist/common/logs/logger-proxy.js +1 -2
  70. package/dist/common/logs/logger-proxy.js.map +1 -1
  71. package/dist/{types/common → common}/logs/request.d.ts +3 -1
  72. package/dist/common/logs/request.js +8 -5
  73. package/dist/common/logs/request.js.map +1 -1
  74. package/dist/common/queue.js +2 -4
  75. package/dist/common/queue.js.map +1 -1
  76. package/dist/{types/config.d.ts → config.d.ts} +1 -1
  77. package/dist/config.js +3 -3
  78. package/dist/config.js.map +1 -1
  79. package/dist/{types/constants.d.ts → constants.d.ts} +71 -15
  80. package/dist/constants.js +252 -371
  81. package/dist/constants.js.map +1 -1
  82. package/dist/controls-options-manager/constants.js +3 -6
  83. package/dist/controls-options-manager/constants.js.map +1 -1
  84. package/dist/controls-options-manager/enums.js +7 -10
  85. package/dist/controls-options-manager/enums.js.map +1 -1
  86. package/dist/controls-options-manager/index.js +27 -32
  87. package/dist/controls-options-manager/index.js.map +1 -1
  88. package/dist/controls-options-manager/util.js +1 -2
  89. package/dist/controls-options-manager/util.js.map +1 -1
  90. package/dist/index.js +8 -5
  91. package/dist/index.js.map +1 -1
  92. package/dist/interceptors/index.d.ts +2 -0
  93. package/dist/interceptors/index.js +15 -0
  94. package/dist/interceptors/index.js.map +1 -0
  95. package/dist/interceptors/locusRetry.d.ts +27 -0
  96. package/dist/interceptors/locusRetry.js +94 -0
  97. package/dist/interceptors/locusRetry.js.map +1 -0
  98. package/dist/interpretation/collection.js +1 -2
  99. package/dist/interpretation/collection.js.map +1 -1
  100. package/dist/interpretation/index.js +2 -3
  101. package/dist/interpretation/index.js.map +1 -1
  102. package/dist/interpretation/siLanguage.js +2 -3
  103. package/dist/interpretation/siLanguage.js.map +1 -1
  104. package/dist/locus-info/controlsUtils.js +12 -13
  105. package/dist/locus-info/controlsUtils.js.map +1 -1
  106. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  107. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  108. package/dist/locus-info/fullState.js +1 -2
  109. package/dist/locus-info/fullState.js.map +1 -1
  110. package/dist/locus-info/hostUtils.js +1 -2
  111. package/dist/locus-info/hostUtils.js.map +1 -1
  112. package/dist/{types/locus-info → locus-info}/index.d.ts +1 -1
  113. package/dist/locus-info/index.js +38 -37
  114. package/dist/locus-info/index.js.map +1 -1
  115. package/dist/locus-info/infoUtils.js +3 -4
  116. package/dist/locus-info/infoUtils.js.map +1 -1
  117. package/dist/locus-info/mediaSharesUtils.js +16 -3
  118. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  119. package/dist/{types/locus-info → locus-info}/parser.d.ts +3 -2
  120. package/dist/locus-info/parser.js +43 -31
  121. package/dist/locus-info/parser.js.map +1 -1
  122. package/dist/locus-info/selfUtils.js +7 -6
  123. package/dist/locus-info/selfUtils.js.map +1 -1
  124. package/dist/media/index.js +15 -10
  125. package/dist/media/index.js.map +1 -1
  126. package/dist/media/properties.js +16 -7
  127. package/dist/media/properties.js.map +1 -1
  128. package/dist/media/util.js +1 -2
  129. package/dist/media/util.js.map +1 -1
  130. package/dist/mediaQualityMetrics/config.d.ts +241 -0
  131. package/dist/mediaQualityMetrics/config.js +135 -339
  132. package/dist/mediaQualityMetrics/config.js.map +1 -1
  133. package/dist/{types/meeting → meeting}/in-meeting-actions.d.ts +4 -0
  134. package/dist/meeting/in-meeting-actions.js +18 -2
  135. package/dist/meeting/in-meeting-actions.js.map +1 -1
  136. package/dist/{types/meeting → meeting}/index.d.ts +318 -45
  137. package/dist/meeting/index.js +2620 -1405
  138. package/dist/meeting/index.js.map +1 -1
  139. package/dist/meeting/locusMediaRequest.js +4 -5
  140. package/dist/meeting/locusMediaRequest.js.map +1 -1
  141. package/dist/meeting/muteState.js +2 -4
  142. package/dist/meeting/muteState.js.map +1 -1
  143. package/dist/{types/meeting → meeting}/request.d.ts +2 -0
  144. package/dist/meeting/request.js +46 -31
  145. package/dist/meeting/request.js.map +1 -1
  146. package/dist/meeting/state.js +1 -2
  147. package/dist/meeting/state.js.map +1 -1
  148. package/dist/{types/meeting → meeting}/util.d.ts +17 -0
  149. package/dist/meeting/util.js +83 -10
  150. package/dist/meeting/util.js.map +1 -1
  151. package/dist/meeting/voicea-meeting.d.ts +16 -0
  152. package/dist/meeting/voicea-meeting.js +169 -0
  153. package/dist/meeting/voicea-meeting.js.map +1 -0
  154. package/dist/meeting-info/collection.js +3 -4
  155. package/dist/meeting-info/collection.js.map +1 -1
  156. package/dist/{types/meeting-info → meeting-info}/index.d.ts +7 -0
  157. package/dist/meeting-info/index.js +53 -27
  158. package/dist/meeting-info/index.js.map +1 -1
  159. package/dist/{types/meeting-info → meeting-info}/meeting-info-v2.d.ts +1 -0
  160. package/dist/meeting-info/meeting-info-v2.js +52 -33
  161. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  162. package/dist/meeting-info/request.js +1 -2
  163. package/dist/meeting-info/request.js.map +1 -1
  164. package/dist/meeting-info/util.js +8 -8
  165. package/dist/meeting-info/util.js.map +1 -1
  166. package/dist/meeting-info/utilv2.js +12 -9
  167. package/dist/meeting-info/utilv2.js.map +1 -1
  168. package/dist/{types/meetings → meetings}/collection.d.ts +9 -0
  169. package/dist/meetings/collection.js +21 -5
  170. package/dist/meetings/collection.js.map +1 -1
  171. package/dist/{types/meetings → meetings}/index.d.ts +45 -16
  172. package/dist/meetings/index.js +166 -74
  173. package/dist/meetings/index.js.map +1 -1
  174. package/dist/meetings/request.js +2 -3
  175. package/dist/meetings/request.js.map +1 -1
  176. package/dist/meetings/util.js +3 -10
  177. package/dist/meetings/util.js.map +1 -1
  178. package/dist/{types/member → member}/index.d.ts +1 -0
  179. package/dist/member/index.js +10 -3
  180. package/dist/member/index.js.map +1 -1
  181. package/dist/member/member.types.d.ts +11 -0
  182. package/dist/member/member.types.js +17 -0
  183. package/dist/member/member.types.js.map +1 -0
  184. package/dist/member/types.js +6 -8
  185. package/dist/member/types.js.map +1 -1
  186. package/dist/member/util.js +12 -2
  187. package/dist/member/util.js.map +1 -1
  188. package/dist/members/collection.js +1 -2
  189. package/dist/members/collection.js.map +1 -1
  190. package/dist/members/index.js +25 -8
  191. package/dist/members/index.js.map +1 -1
  192. package/dist/members/request.js +2 -3
  193. package/dist/members/request.js.map +1 -1
  194. package/dist/{types/members → members}/types.d.ts +1 -0
  195. package/dist/members/types.js +3 -4
  196. package/dist/members/types.js.map +1 -1
  197. package/dist/{types/members → members}/util.d.ts +6 -1
  198. package/dist/members/util.js +18 -8
  199. package/dist/members/util.js.map +1 -1
  200. package/dist/{types/metrics → metrics}/constants.d.ts +12 -0
  201. package/dist/metrics/constants.js +14 -3
  202. package/dist/metrics/constants.js.map +1 -1
  203. package/dist/metrics/index.js +3 -2
  204. package/dist/metrics/index.js.map +1 -1
  205. package/dist/multistream/mediaRequestManager.js +9 -11
  206. package/dist/multistream/mediaRequestManager.js.map +1 -1
  207. package/dist/multistream/receiveSlot.js +3 -5
  208. package/dist/multistream/receiveSlot.js.map +1 -1
  209. package/dist/multistream/receiveSlotManager.js +7 -9
  210. package/dist/multistream/receiveSlotManager.js.map +1 -1
  211. package/dist/multistream/remoteMedia.js +3 -5
  212. package/dist/multistream/remoteMedia.js.map +1 -1
  213. package/dist/multistream/remoteMediaGroup.js +7 -6
  214. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  215. package/dist/multistream/remoteMediaManager.js +28 -27
  216. package/dist/multistream/remoteMediaManager.js.map +1 -1
  217. package/dist/multistream/sendSlotManager.js +9 -6
  218. package/dist/multistream/sendSlotManager.js.map +1 -1
  219. package/dist/networkQualityMonitor/index.js +1 -2
  220. package/dist/networkQualityMonitor/index.js.map +1 -1
  221. package/dist/personal-meeting-room/index.js +2 -3
  222. package/dist/personal-meeting-room/index.js.map +1 -1
  223. package/dist/personal-meeting-room/request.js +2 -3
  224. package/dist/personal-meeting-room/request.js.map +1 -1
  225. package/dist/personal-meeting-room/util.js +1 -2
  226. package/dist/personal-meeting-room/util.js.map +1 -1
  227. package/dist/reachability/clusterReachability.d.ts +109 -0
  228. package/dist/reachability/clusterReachability.js +357 -0
  229. package/dist/reachability/clusterReachability.js.map +1 -0
  230. package/dist/reachability/index.d.ts +105 -0
  231. package/dist/reachability/index.js +279 -436
  232. package/dist/reachability/index.js.map +1 -1
  233. package/dist/reachability/request.js +14 -11
  234. package/dist/reachability/request.js.map +1 -1
  235. package/dist/reachability/util.d.ts +8 -0
  236. package/dist/reachability/util.js +29 -0
  237. package/dist/reachability/util.js.map +1 -0
  238. package/dist/reactions/constants.js +1 -2
  239. package/dist/reactions/constants.js.map +1 -1
  240. package/dist/reactions/reactions.js +2 -4
  241. package/dist/reactions/reactions.js.map +1 -1
  242. package/dist/reactions/reactions.type.js +6 -8
  243. package/dist/reactions/reactions.type.js.map +1 -1
  244. package/dist/{types/reconnection-manager → reconnection-manager}/index.d.ts +10 -0
  245. package/dist/reconnection-manager/index.js +129 -106
  246. package/dist/reconnection-manager/index.js.map +1 -1
  247. package/dist/recording-controller/enums.js +4 -5
  248. package/dist/recording-controller/enums.js.map +1 -1
  249. package/dist/recording-controller/index.js +43 -51
  250. package/dist/recording-controller/index.js.map +1 -1
  251. package/dist/recording-controller/util.js +1 -2
  252. package/dist/recording-controller/util.js.map +1 -1
  253. package/dist/{types/roap → roap}/index.d.ts +2 -1
  254. package/dist/roap/index.js +59 -28
  255. package/dist/roap/index.js.map +1 -1
  256. package/dist/roap/request.js +14 -22
  257. package/dist/roap/request.js.map +1 -1
  258. package/dist/{types/roap → roap}/turnDiscovery.d.ts +21 -4
  259. package/dist/roap/turnDiscovery.js +182 -89
  260. package/dist/roap/turnDiscovery.js.map +1 -1
  261. package/dist/rtcMetrics/constants.js +1 -2
  262. package/dist/rtcMetrics/constants.js.map +1 -1
  263. package/dist/{types/rtcMetrics → rtcMetrics}/index.d.ts +15 -1
  264. package/dist/rtcMetrics/index.js +72 -12
  265. package/dist/rtcMetrics/index.js.map +1 -1
  266. package/dist/statsAnalyzer/global.js +1 -2
  267. package/dist/statsAnalyzer/global.js.map +1 -1
  268. package/dist/{types/statsAnalyzer → statsAnalyzer}/index.d.ts +28 -11
  269. package/dist/statsAnalyzer/index.js +371 -318
  270. package/dist/statsAnalyzer/index.js.map +1 -1
  271. package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
  272. package/dist/statsAnalyzer/mqaUtil.js +295 -162
  273. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  274. package/dist/transcription/index.js +1 -2
  275. package/dist/transcription/index.js.map +1 -1
  276. package/dist/webinar/collection.d.ts +16 -0
  277. package/dist/webinar/collection.js +43 -0
  278. package/dist/webinar/collection.js.map +1 -0
  279. package/dist/webinar/index.d.ts +5 -0
  280. package/dist/webinar/index.js +68 -0
  281. package/dist/webinar/index.js.map +1 -0
  282. package/jest.config.js +3 -0
  283. package/package.json +44 -24
  284. package/process +1 -0
  285. package/src/common/errors/no-meeting-info.ts +24 -0
  286. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  287. package/src/common/errors/webex-errors.ts +19 -2
  288. package/src/common/logs/request.ts +5 -1
  289. package/src/config.ts +3 -5
  290. package/src/constants.ts +77 -8
  291. package/src/index.ts +4 -0
  292. package/src/interceptors/index.ts +3 -0
  293. package/src/interceptors/locusRetry.ts +67 -0
  294. package/src/locus-info/index.ts +19 -14
  295. package/src/locus-info/mediaSharesUtils.ts +16 -0
  296. package/src/locus-info/parser.ts +40 -21
  297. package/src/media/index.ts +8 -6
  298. package/src/media/properties.ts +17 -2
  299. package/src/mediaQualityMetrics/config.ts +103 -238
  300. package/src/meeting/in-meeting-actions.ts +8 -0
  301. package/src/meeting/index.ts +1664 -642
  302. package/src/meeting/request.ts +18 -0
  303. package/src/meeting/util.ts +102 -1
  304. package/src/meeting/voicea-meeting.ts +122 -0
  305. package/src/meeting-info/index.ts +47 -20
  306. package/src/meeting-info/meeting-info-v2.ts +32 -16
  307. package/src/meeting-info/util.ts +12 -9
  308. package/src/meeting-info/utilv2.ts +25 -15
  309. package/src/meetings/collection.ts +13 -0
  310. package/src/meetings/index.ts +112 -31
  311. package/src/meetings/util.ts +2 -8
  312. package/src/member/index.ts +9 -1
  313. package/src/member/member.types.ts +13 -0
  314. package/src/member/util.ts +14 -0
  315. package/src/members/index.ts +29 -2
  316. package/src/members/types.ts +1 -0
  317. package/src/members/util.ts +15 -1
  318. package/src/metrics/constants.ts +12 -0
  319. package/src/reachability/clusterReachability.ts +320 -0
  320. package/src/reachability/index.ts +221 -382
  321. package/src/reachability/request.ts +1 -1
  322. package/src/reachability/util.ts +24 -0
  323. package/src/reconnection-manager/index.ts +87 -83
  324. package/src/roap/index.ts +60 -24
  325. package/src/roap/request.ts +4 -17
  326. package/src/roap/turnDiscovery.ts +112 -39
  327. package/src/rtcMetrics/index.ts +71 -5
  328. package/src/statsAnalyzer/index.ts +430 -427
  329. package/src/statsAnalyzer/mqaUtil.ts +317 -168
  330. package/src/webinar/collection.ts +31 -0
  331. package/src/webinar/index.ts +62 -0
  332. package/test/integration/spec/journey.js +12 -12
  333. package/test/integration/spec/space-meeting.js +1 -1
  334. package/test/unit/spec/breakouts/breakout.ts +2 -1
  335. package/test/unit/spec/breakouts/index.ts +7 -4
  336. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  337. package/test/unit/spec/locus-info/index.js +88 -12
  338. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  339. package/test/unit/spec/locus-info/mediaSharesUtils.ts +10 -0
  340. package/test/unit/spec/locus-info/parser.js +54 -13
  341. package/test/unit/spec/locus-info/selfUtils.js +1 -1
  342. package/test/unit/spec/media/index.ts +25 -4
  343. package/test/unit/spec/media/properties.ts +2 -2
  344. package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
  345. package/test/unit/spec/meeting/index.js +4388 -1382
  346. package/test/unit/spec/meeting/request.js +63 -12
  347. package/test/unit/spec/meeting/utils.js +145 -10
  348. package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
  349. package/test/unit/spec/meeting-info/index.js +180 -61
  350. package/test/unit/spec/meeting-info/meetinginfov2.js +216 -68
  351. package/test/unit/spec/meetings/collection.js +12 -0
  352. package/test/unit/spec/meetings/index.js +674 -193
  353. package/test/unit/spec/meetings/utils.js +35 -12
  354. package/test/unit/spec/member/index.js +8 -7
  355. package/test/unit/spec/member/util.js +32 -0
  356. package/test/unit/spec/members/index.js +130 -17
  357. package/test/unit/spec/members/utils.js +26 -0
  358. package/test/unit/spec/metrics/index.js +1 -2
  359. package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
  360. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  361. package/test/unit/spec/reachability/index.ts +505 -135
  362. package/test/unit/spec/reachability/util.ts +40 -0
  363. package/test/unit/spec/reconnection-manager/index.js +74 -17
  364. package/test/unit/spec/recording-controller/index.js +0 -1
  365. package/test/unit/spec/roap/index.ts +181 -61
  366. package/test/unit/spec/roap/request.ts +27 -3
  367. package/test/unit/spec/roap/turnDiscovery.ts +363 -102
  368. package/test/unit/spec/rtcMetrics/index.ts +57 -3
  369. package/test/unit/spec/stats-analyzer/index.js +1225 -12
  370. package/test/unit/spec/webinar/collection.ts +13 -0
  371. package/test/unit/spec/webinar/index.ts +60 -0
  372. package/test/utils/webex-test-users.js +12 -4
  373. package/dist/types/mediaQualityMetrics/config.d.ts +0 -365
  374. package/dist/types/reachability/index.d.ts +0 -152
  375. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -24
  376. /package/dist/{types/annotation → annotation}/annotation.types.d.ts +0 -0
  377. /package/dist/{types/annotation → annotation}/constants.d.ts +0 -0
  378. /package/dist/{types/annotation → annotation}/index.d.ts +0 -0
  379. /package/dist/{types/breakouts → breakouts}/breakout.d.ts +0 -0
  380. /package/dist/{types/breakouts → breakouts}/collection.d.ts +0 -0
  381. /package/dist/{types/breakouts → breakouts}/edit-lock-error.d.ts +0 -0
  382. /package/dist/{types/breakouts → breakouts}/events.d.ts +0 -0
  383. /package/dist/{types/breakouts → breakouts}/index.d.ts +0 -0
  384. /package/dist/{types/breakouts → breakouts}/request.d.ts +0 -0
  385. /package/dist/{types/breakouts → breakouts}/utils.d.ts +0 -0
  386. /package/dist/{types/common → common}/browser-detection.d.ts +0 -0
  387. /package/dist/{types/common → common}/collection.d.ts +0 -0
  388. /package/dist/{types/common → common}/config.d.ts +0 -0
  389. /package/dist/{types/common → common}/errors/captcha-error.d.ts +0 -0
  390. /package/dist/{types/common → common}/errors/intent-to-join.d.ts +0 -0
  391. /package/dist/{types/common → common}/errors/join-meeting.d.ts +0 -0
  392. /package/dist/{types/common → common}/errors/media.d.ts +0 -0
  393. /package/dist/{types/common → common}/errors/parameter.d.ts +0 -0
  394. /package/dist/{types/common → common}/errors/password-error.d.ts +0 -0
  395. /package/dist/{types/common → common}/errors/permission.d.ts +0 -0
  396. /package/dist/{types/common → common}/errors/reconnection-in-progress.d.ts +0 -0
  397. /package/dist/{types/common → common}/errors/reconnection.d.ts +0 -0
  398. /package/dist/{types/common → common}/errors/stats.d.ts +0 -0
  399. /package/dist/{types/common → common}/errors/webex-meetings-error.d.ts +0 -0
  400. /package/dist/{types/common → common}/events/events-scope.d.ts +0 -0
  401. /package/dist/{types/common → common}/events/events.d.ts +0 -0
  402. /package/dist/{types/common → common}/events/trigger-proxy.d.ts +0 -0
  403. /package/dist/{types/common → common}/events/util.d.ts +0 -0
  404. /package/dist/{types/common → common}/logs/logger-config.d.ts +0 -0
  405. /package/dist/{types/common → common}/logs/logger-proxy.d.ts +0 -0
  406. /package/dist/{types/common → common}/queue.d.ts +0 -0
  407. /package/dist/{types/controls-options-manager → controls-options-manager}/constants.d.ts +0 -0
  408. /package/dist/{types/controls-options-manager → controls-options-manager}/enums.d.ts +0 -0
  409. /package/dist/{types/controls-options-manager → controls-options-manager}/index.d.ts +0 -0
  410. /package/dist/{types/controls-options-manager → controls-options-manager}/types.d.ts +0 -0
  411. /package/dist/{types/controls-options-manager → controls-options-manager}/util.d.ts +0 -0
  412. /package/dist/{types/index.d.ts → index.d.ts} +0 -0
  413. /package/dist/{types/interpretation → interpretation}/collection.d.ts +0 -0
  414. /package/dist/{types/interpretation → interpretation}/index.d.ts +0 -0
  415. /package/dist/{types/interpretation → interpretation}/siLanguage.d.ts +0 -0
  416. /package/dist/{types/locus-info → locus-info}/controlsUtils.d.ts +0 -0
  417. /package/dist/{types/locus-info → locus-info}/embeddedAppsUtils.d.ts +0 -0
  418. /package/dist/{types/locus-info → locus-info}/fullState.d.ts +0 -0
  419. /package/dist/{types/locus-info → locus-info}/hostUtils.d.ts +0 -0
  420. /package/dist/{types/locus-info → locus-info}/infoUtils.d.ts +0 -0
  421. /package/dist/{types/locus-info → locus-info}/mediaSharesUtils.d.ts +0 -0
  422. /package/dist/{types/locus-info → locus-info}/selfUtils.d.ts +0 -0
  423. /package/dist/{types/media → media}/index.d.ts +0 -0
  424. /package/dist/{types/media → media}/properties.d.ts +0 -0
  425. /package/dist/{types/media → media}/util.d.ts +0 -0
  426. /package/dist/{types/meeting → meeting}/locusMediaRequest.d.ts +0 -0
  427. /package/dist/{types/meeting → meeting}/muteState.d.ts +0 -0
  428. /package/dist/{types/meeting → meeting}/request.type.d.ts +0 -0
  429. /package/dist/{types/meeting → meeting}/state.d.ts +0 -0
  430. /package/dist/{types/meeting-info → meeting-info}/collection.d.ts +0 -0
  431. /package/dist/{types/meeting-info → meeting-info}/request.d.ts +0 -0
  432. /package/dist/{types/meeting-info → meeting-info}/util.d.ts +0 -0
  433. /package/dist/{types/meeting-info → meeting-info}/utilv2.d.ts +0 -0
  434. /package/dist/{types/meetings → meetings}/meetings.types.d.ts +0 -0
  435. /package/dist/{types/meetings → meetings}/request.d.ts +0 -0
  436. /package/dist/{types/meetings → meetings}/util.d.ts +0 -0
  437. /package/dist/{types/member → member}/types.d.ts +0 -0
  438. /package/dist/{types/member → member}/util.d.ts +0 -0
  439. /package/dist/{types/members → members}/collection.d.ts +0 -0
  440. /package/dist/{types/members → members}/index.d.ts +0 -0
  441. /package/dist/{types/members → members}/request.d.ts +0 -0
  442. /package/dist/{types/metrics → metrics}/index.d.ts +0 -0
  443. /package/dist/{types/multistream → multistream}/mediaRequestManager.d.ts +0 -0
  444. /package/dist/{types/multistream → multistream}/receiveSlot.d.ts +0 -0
  445. /package/dist/{types/multistream → multistream}/receiveSlotManager.d.ts +0 -0
  446. /package/dist/{types/multistream → multistream}/remoteMedia.d.ts +0 -0
  447. /package/dist/{types/multistream → multistream}/remoteMediaGroup.d.ts +0 -0
  448. /package/dist/{types/multistream → multistream}/remoteMediaManager.d.ts +0 -0
  449. /package/dist/{types/multistream → multistream}/sendSlotManager.d.ts +0 -0
  450. /package/dist/{types/networkQualityMonitor → networkQualityMonitor}/index.d.ts +0 -0
  451. /package/dist/{types/personal-meeting-room → personal-meeting-room}/index.d.ts +0 -0
  452. /package/dist/{types/personal-meeting-room → personal-meeting-room}/request.d.ts +0 -0
  453. /package/dist/{types/personal-meeting-room → personal-meeting-room}/util.d.ts +0 -0
  454. /package/dist/{types/reachability → reachability}/request.d.ts +0 -0
  455. /package/dist/{types/reactions → reactions}/constants.d.ts +0 -0
  456. /package/dist/{types/reactions → reactions}/reactions.d.ts +0 -0
  457. /package/dist/{types/reactions → reactions}/reactions.type.d.ts +0 -0
  458. /package/dist/{types/recording-controller → recording-controller}/enums.d.ts +0 -0
  459. /package/dist/{types/recording-controller → recording-controller}/index.d.ts +0 -0
  460. /package/dist/{types/recording-controller → recording-controller}/util.d.ts +0 -0
  461. /package/dist/{types/roap → roap}/request.d.ts +0 -0
  462. /package/dist/{types/rtcMetrics → rtcMetrics}/constants.d.ts +0 -0
  463. /package/dist/{types/statsAnalyzer → statsAnalyzer}/global.d.ts +0 -0
  464. /package/dist/{types/transcription → transcription}/index.d.ts +0 -0
  465. /package/test/unit/spec/locus-info/{selfConstant.js → lib/selfConstant.js} +0 -0
@@ -0,0 +1,320 @@
1
+ import {Defer} from '@webex/common';
2
+
3
+ import LoggerProxy from '../common/logs/logger-proxy';
4
+ import {ClusterNode} from './request';
5
+ import {convertStunUrlToTurn} from './util';
6
+
7
+ import {ICE_GATHERING_STATE, CONNECTION_STATE} from '../constants';
8
+
9
+ const DEFAULT_TIMEOUT = 3000;
10
+ const VIDEO_MESH_TIMEOUT = 1000;
11
+
12
+ // result for a specific transport protocol (like udp or tcp)
13
+ export type TransportResult = {
14
+ result: 'reachable' | 'unreachable' | 'untested';
15
+ latencyInMilliseconds?: number; // amount of time it took to get the first ICE candidate
16
+ clientMediaIPs?: string[];
17
+ };
18
+
19
+ // reachability result for a specific media cluster
20
+ export type ClusterReachabilityResult = {
21
+ udp: TransportResult;
22
+ tcp: TransportResult;
23
+ xtls: TransportResult;
24
+ };
25
+
26
+ /**
27
+ * A class that handles reachability checks for a single cluster.
28
+ */
29
+ export class ClusterReachability {
30
+ private numUdpUrls: number;
31
+ private numTcpUrls: number;
32
+ private result: ClusterReachabilityResult;
33
+ private pc?: RTCPeerConnection;
34
+ private defer: Defer; // this defer is resolved once reachability checks for this cluster are completed
35
+ private startTimestamp: number;
36
+ public readonly isVideoMesh: boolean;
37
+ public readonly name;
38
+
39
+ /**
40
+ * Constructor for ClusterReachability
41
+ * @param {string} name cluster name
42
+ * @param {ClusterNode} clusterInfo information about the media cluster
43
+ */
44
+ constructor(name: string, clusterInfo: ClusterNode) {
45
+ this.name = name;
46
+ this.isVideoMesh = clusterInfo.isVideoMesh;
47
+ this.numUdpUrls = clusterInfo.udp.length;
48
+ this.numTcpUrls = clusterInfo.tcp.length;
49
+
50
+ this.pc = this.createPeerConnection(clusterInfo);
51
+
52
+ this.defer = new Defer();
53
+ this.result = {
54
+ udp: {
55
+ result: 'untested',
56
+ },
57
+ tcp: {
58
+ result: 'untested',
59
+ },
60
+ xtls: {
61
+ result: 'untested',
62
+ },
63
+ };
64
+ }
65
+
66
+ /**
67
+ * Gets total elapsed time, can be called only after start() is called
68
+ * @returns {Number} Milliseconds
69
+ */
70
+ private getElapsedTime() {
71
+ return Math.round(performance.now() - this.startTimestamp);
72
+ }
73
+
74
+ /**
75
+ * Generate peerConnection config settings
76
+ * @param {ClusterNode} cluster
77
+ * @returns {RTCConfiguration} peerConnectionConfig
78
+ */
79
+ private buildPeerConnectionConfig(cluster: ClusterNode): RTCConfiguration {
80
+ const udpIceServers = cluster.udp.map((url) => ({
81
+ username: '',
82
+ credential: '',
83
+ urls: [url],
84
+ }));
85
+
86
+ // STUN servers are contacted only using UDP, so in order to test TCP reachability
87
+ // we pretend that Linus is a TURN server, because we can explicitly say "transport=tcp" in TURN urls.
88
+ // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).
89
+ const tcpIceServers = cluster.tcp.map((urlString: string) => {
90
+ return {
91
+ username: 'webexturnreachuser',
92
+ credential: 'webexturnreachpwd',
93
+ urls: [convertStunUrlToTurn(urlString, 'tcp')],
94
+ };
95
+ });
96
+
97
+ return {
98
+ iceServers: [...udpIceServers, ...tcpIceServers],
99
+ iceCandidatePoolSize: 0,
100
+ iceTransportPolicy: 'all',
101
+ };
102
+ }
103
+
104
+ /**
105
+ * Creates an RTCPeerConnection
106
+ * @param {ClusterNode} clusterInfo information about the media cluster
107
+ * @returns {RTCPeerConnection} peerConnection
108
+ */
109
+ private createPeerConnection(clusterInfo: ClusterNode) {
110
+ try {
111
+ const config = this.buildPeerConnectionConfig(clusterInfo);
112
+
113
+ const peerConnection = new RTCPeerConnection(config);
114
+
115
+ return peerConnection;
116
+ } catch (peerConnectionError) {
117
+ LoggerProxy.logger.warn(
118
+ `Reachability:index#createPeerConnection --> Error creating peerConnection:`,
119
+ peerConnectionError
120
+ );
121
+
122
+ return undefined;
123
+ }
124
+ }
125
+
126
+ /**
127
+ * @returns {ClusterReachabilityResult} reachability result for this cluster
128
+ */
129
+ getResult() {
130
+ return this.result;
131
+ }
132
+
133
+ /**
134
+ * Closes the peerConnection
135
+ *
136
+ * @returns {void}
137
+ */
138
+ private closePeerConnection() {
139
+ if (this.pc) {
140
+ this.pc.onicecandidate = null;
141
+ this.pc.onicegatheringstatechange = null;
142
+ this.pc.close();
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Resolves the defer, indicating that reachability checks for this cluster are completed
148
+ *
149
+ * @returns {void}
150
+ */
151
+ private finishReachabilityCheck() {
152
+ this.defer.resolve();
153
+ }
154
+
155
+ /**
156
+ * Adds public IP (client media IPs)
157
+ * @param {string} protocol
158
+ * @param {string} publicIP
159
+ * @returns {void}
160
+ */
161
+ private addPublicIP(protocol: 'udp' | 'tcp', publicIP?: string | null) {
162
+ const result = this.result[protocol];
163
+
164
+ if (publicIP) {
165
+ if (result.clientMediaIPs) {
166
+ if (!result.clientMediaIPs.includes(publicIP)) {
167
+ result.clientMediaIPs.push(publicIP);
168
+ }
169
+ } else {
170
+ result.clientMediaIPs = [publicIP];
171
+ }
172
+ }
173
+ }
174
+
175
+ /**
176
+ * Registers a listener for the iceGatheringStateChange event
177
+ *
178
+ * @returns {void}
179
+ */
180
+ private registerIceGatheringStateChangeListener() {
181
+ this.pc.onicegatheringstatechange = () => {
182
+ const {COMPLETE} = ICE_GATHERING_STATE;
183
+
184
+ if (this.pc.iceConnectionState === COMPLETE) {
185
+ this.closePeerConnection();
186
+ this.finishReachabilityCheck();
187
+ }
188
+ };
189
+ }
190
+
191
+ /**
192
+ * Checks if we have the results for all the protocols (UDP and TCP)
193
+ *
194
+ * @returns {boolean} true if we have all results, false otherwise
195
+ */
196
+ private haveWeGotAllResults(): boolean {
197
+ return ['udp', 'tcp'].every(
198
+ (protocol) =>
199
+ this.result[protocol].result === 'reachable' || this.result[protocol].result === 'untested'
200
+ );
201
+ }
202
+
203
+ /**
204
+ * Stores the latency in the result for the given protocol and marks it as reachable
205
+ *
206
+ * @param {string} protocol
207
+ * @param {number} latency
208
+ * @returns {void}
209
+ */
210
+ private storeLatencyResult(protocol: 'udp' | 'tcp', latency: number) {
211
+ const result = this.result[protocol];
212
+
213
+ if (result.latencyInMilliseconds === undefined) {
214
+ LoggerProxy.logger.log(
215
+ // @ts-ignore
216
+ `Reachability:index#storeLatencyResult --> Successfully reached ${this.name} over ${protocol}: ${latency}ms`
217
+ );
218
+ result.latencyInMilliseconds = latency;
219
+ result.result = 'reachable';
220
+ }
221
+ }
222
+
223
+ /**
224
+ * Registers a listener for the icecandidate event
225
+ *
226
+ * @returns {void}
227
+ */
228
+ private registerIceCandidateListener() {
229
+ this.pc.onicecandidate = (e) => {
230
+ const CANDIDATE_TYPES = {
231
+ SERVER_REFLEXIVE: 'srflx',
232
+ RELAY: 'relay',
233
+ };
234
+
235
+ if (e.candidate) {
236
+ if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {
237
+ this.storeLatencyResult('udp', this.getElapsedTime());
238
+ this.addPublicIP('udp', e.candidate.address);
239
+ }
240
+
241
+ if (e.candidate.type === CANDIDATE_TYPES.RELAY) {
242
+ this.storeLatencyResult('tcp', this.getElapsedTime());
243
+ // we don't add public IP for TCP, because in the case of relay candidates
244
+ // e.candidate.address is the TURN server address, not the client's public IP
245
+ }
246
+
247
+ if (this.haveWeGotAllResults()) {
248
+ this.closePeerConnection();
249
+ this.finishReachabilityCheck();
250
+ }
251
+ }
252
+ };
253
+ }
254
+
255
+ /**
256
+ * Starts the process of doing UDP and TCP reachability checks on the media cluster.
257
+ * XTLS reachability checking is not supported.
258
+ *
259
+ * @returns {Promise}
260
+ */
261
+ async start(): Promise<ClusterReachabilityResult> {
262
+ if (!this.pc) {
263
+ LoggerProxy.logger.warn(
264
+ `Reachability:ClusterReachability#start --> Error: peerConnection is undefined`
265
+ );
266
+
267
+ return this.result;
268
+ }
269
+
270
+ // Initialize this.result as saying that nothing is reachable.
271
+ // It will get updated as we go along and successfully gather ICE candidates.
272
+ this.result.udp = {
273
+ result: this.numUdpUrls > 0 ? 'unreachable' : 'untested',
274
+ };
275
+ this.result.tcp = {
276
+ result: this.numTcpUrls > 0 ? 'unreachable' : 'untested',
277
+ };
278
+
279
+ try {
280
+ const offer = await this.pc.createOffer({offerToReceiveAudio: true});
281
+
282
+ this.startTimestamp = performance.now();
283
+
284
+ // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer
285
+ // we just need to make this call to trigger the ICE gathering process
286
+ this.pc.setLocalDescription(offer);
287
+
288
+ await this.gatherIceCandidates();
289
+ } catch (error) {
290
+ LoggerProxy.logger.warn(`Reachability:ClusterReachability#start --> Error: `, error);
291
+ }
292
+
293
+ return this.result;
294
+ }
295
+
296
+ /**
297
+ * Starts the process of gathering ICE candidates
298
+ *
299
+ * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached
300
+ */
301
+ private gatherIceCandidates() {
302
+ const timeout = this.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT;
303
+
304
+ this.registerIceGatheringStateChangeListener();
305
+ this.registerIceCandidateListener();
306
+
307
+ // Set maximum timeout
308
+ setTimeout(() => {
309
+ const {CLOSED} = CONNECTION_STATE;
310
+
311
+ // Close any open peerConnections
312
+ if (this.pc.connectionState !== CLOSED) {
313
+ this.closePeerConnection();
314
+ this.finishReachabilityCheck();
315
+ }
316
+ }, timeout);
317
+
318
+ return this.defer.promise;
319
+ }
320
+ }