@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.400

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 (629) hide show
  1. package/README.md +58 -8
  2. package/UPGRADING.md +9 -9
  3. package/browsers.js +19 -24
  4. package/dist/annotation/annotation.types.js +7 -0
  5. package/dist/annotation/annotation.types.js.map +1 -0
  6. package/dist/annotation/constants.js +49 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +342 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +216 -0
  11. package/dist/breakouts/breakout.js.map +1 -0
  12. package/dist/breakouts/collection.js +23 -0
  13. package/dist/breakouts/collection.js.map +1 -0
  14. package/dist/breakouts/edit-lock-error.js +52 -0
  15. package/dist/breakouts/edit-lock-error.js.map +1 -0
  16. package/dist/breakouts/events.js +45 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +1048 -0
  19. package/dist/breakouts/index.js.map +1 -0
  20. package/dist/breakouts/request.js +78 -0
  21. package/dist/breakouts/request.js.map +1 -0
  22. package/dist/breakouts/utils.js +67 -0
  23. package/dist/breakouts/utils.js.map +1 -0
  24. package/dist/common/browser-detection.js +1 -20
  25. package/dist/common/browser-detection.js.map +1 -1
  26. package/dist/common/collection.js +5 -20
  27. package/dist/common/collection.js.map +1 -1
  28. package/dist/common/config.js +0 -7
  29. package/dist/common/config.js.map +1 -1
  30. package/dist/common/errors/captcha-error.js +10 -24
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +11 -24
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +12 -25
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +10 -24
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/no-meeting-info.js +51 -0
  39. package/dist/common/errors/no-meeting-info.js.map +1 -0
  40. package/dist/common/errors/parameter.js +5 -33
  41. package/dist/common/errors/parameter.js.map +1 -1
  42. package/dist/common/errors/password-error.js +10 -24
  43. package/dist/common/errors/password-error.js.map +1 -1
  44. package/dist/common/errors/permission.js +9 -23
  45. package/dist/common/errors/permission.js.map +1 -1
  46. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  47. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  48. package/dist/common/errors/reconnection-in-progress.js +0 -17
  49. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  50. package/dist/common/errors/reconnection.js +10 -24
  51. package/dist/common/errors/reconnection.js.map +1 -1
  52. package/dist/common/errors/stats.js +10 -24
  53. package/dist/common/errors/stats.js.map +1 -1
  54. package/dist/common/errors/webex-errors.js +54 -48
  55. package/dist/common/errors/webex-errors.js.map +1 -1
  56. package/dist/common/errors/webex-meetings-error.js +5 -25
  57. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  58. package/dist/common/events/events-scope.js +0 -22
  59. package/dist/common/events/events-scope.js.map +1 -1
  60. package/dist/common/events/events.js +0 -23
  61. package/dist/common/events/events.js.map +1 -1
  62. package/dist/common/events/trigger-proxy.js +0 -12
  63. package/dist/common/events/trigger-proxy.js.map +1 -1
  64. package/dist/common/events/util.js +0 -15
  65. package/dist/common/events/util.js.map +1 -1
  66. package/dist/common/logs/logger-config.js +0 -4
  67. package/dist/common/logs/logger-config.js.map +1 -1
  68. package/dist/common/logs/logger-proxy.js +1 -8
  69. package/dist/common/logs/logger-proxy.js.map +1 -1
  70. package/dist/common/logs/request.js +41 -60
  71. package/dist/common/logs/request.js.map +1 -1
  72. package/dist/common/queue.js +28 -23
  73. package/dist/common/queue.js.map +1 -1
  74. package/dist/config.js +11 -15
  75. package/dist/config.js.map +1 -1
  76. package/dist/constants.js +347 -74
  77. package/dist/constants.js.map +1 -1
  78. package/dist/controls-options-manager/constants.js +14 -0
  79. package/dist/controls-options-manager/constants.js.map +1 -0
  80. package/dist/controls-options-manager/enums.js +27 -0
  81. package/dist/controls-options-manager/enums.js.map +1 -0
  82. package/dist/controls-options-manager/index.js +297 -0
  83. package/dist/controls-options-manager/index.js.map +1 -0
  84. package/dist/controls-options-manager/types.js +7 -0
  85. package/dist/controls-options-manager/types.js.map +1 -0
  86. package/dist/controls-options-manager/util.js +319 -0
  87. package/dist/controls-options-manager/util.js.map +1 -0
  88. package/dist/index.js +125 -18
  89. package/dist/index.js.map +1 -1
  90. package/dist/interceptors/index.js +15 -0
  91. package/dist/interceptors/index.js.map +1 -0
  92. package/dist/interceptors/locusRetry.js +93 -0
  93. package/dist/interceptors/locusRetry.js.map +1 -0
  94. package/dist/interpretation/collection.js +23 -0
  95. package/dist/interpretation/collection.js.map +1 -0
  96. package/dist/interpretation/index.js +380 -0
  97. package/dist/interpretation/index.js.map +1 -0
  98. package/dist/interpretation/siLanguage.js +25 -0
  99. package/dist/interpretation/siLanguage.js.map +1 -0
  100. package/dist/locus-info/controlsUtils.js +101 -29
  101. package/dist/locus-info/controlsUtils.js.map +1 -1
  102. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  103. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  104. package/dist/locus-info/fullState.js +0 -15
  105. package/dist/locus-info/fullState.js.map +1 -1
  106. package/dist/locus-info/hostUtils.js +4 -12
  107. package/dist/locus-info/hostUtils.js.map +1 -1
  108. package/dist/locus-info/index.js +564 -246
  109. package/dist/locus-info/index.js.map +1 -1
  110. package/dist/locus-info/infoUtils.js +10 -38
  111. package/dist/locus-info/infoUtils.js.map +1 -1
  112. package/dist/locus-info/mediaSharesUtils.js +82 -38
  113. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  114. package/dist/locus-info/parser.js +314 -163
  115. package/dist/locus-info/parser.js.map +1 -1
  116. package/dist/locus-info/selfUtils.js +110 -92
  117. package/dist/locus-info/selfUtils.js.map +1 -1
  118. package/dist/media/index.js +107 -231
  119. package/dist/media/index.js.map +1 -1
  120. package/dist/media/properties.js +137 -222
  121. package/dist/media/properties.js.map +1 -1
  122. package/dist/media/util.js +2 -9
  123. package/dist/media/util.js.map +1 -1
  124. package/dist/mediaQualityMetrics/config.js +316 -501
  125. package/dist/mediaQualityMetrics/config.js.map +1 -1
  126. package/dist/meeting/in-meeting-actions.js +97 -14
  127. package/dist/meeting/in-meeting-actions.js.map +1 -1
  128. package/dist/meeting/index.js +5311 -3871
  129. package/dist/meeting/index.js.map +1 -1
  130. package/dist/meeting/locusMediaRequest.js +292 -0
  131. package/dist/meeting/locusMediaRequest.js.map +1 -0
  132. package/dist/meeting/muteState.js +260 -183
  133. package/dist/meeting/muteState.js.map +1 -1
  134. package/dist/meeting/request.js +421 -347
  135. package/dist/meeting/request.js.map +1 -1
  136. package/dist/meeting/request.type.js +7 -0
  137. package/dist/meeting/request.type.js.map +1 -0
  138. package/dist/meeting/state.js +21 -31
  139. package/dist/meeting/state.js.map +1 -1
  140. package/dist/meeting/util.js +672 -585
  141. package/dist/meeting/util.js.map +1 -1
  142. package/dist/meeting/voicea-meeting.js +172 -0
  143. package/dist/meeting/voicea-meeting.js.map +1 -0
  144. package/dist/meeting-info/collection.js +6 -25
  145. package/dist/meeting-info/collection.js.map +1 -1
  146. package/dist/meeting-info/index.js +87 -39
  147. package/dist/meeting-info/index.js.map +1 -1
  148. package/dist/meeting-info/meeting-info-v2.js +352 -283
  149. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  150. package/dist/meeting-info/request.js +3 -15
  151. package/dist/meeting-info/request.js.map +1 -1
  152. package/dist/meeting-info/util.js +99 -183
  153. package/dist/meeting-info/util.js.map +1 -1
  154. package/dist/meeting-info/utilv2.js +147 -234
  155. package/dist/meeting-info/utilv2.js.map +1 -1
  156. package/dist/meetings/collection.js +43 -19
  157. package/dist/meetings/collection.js.map +1 -1
  158. package/dist/meetings/index.js +895 -600
  159. package/dist/meetings/index.js.map +1 -1
  160. package/dist/meetings/meetings.types.js +7 -0
  161. package/dist/meetings/meetings.types.js.map +1 -0
  162. package/dist/meetings/request.js +26 -41
  163. package/dist/meetings/request.js.map +1 -1
  164. package/dist/meetings/util.js +184 -157
  165. package/dist/meetings/util.js.map +1 -1
  166. package/dist/member/index.js +134 -85
  167. package/dist/member/index.js.map +1 -1
  168. package/dist/member/types.js +25 -0
  169. package/dist/member/types.js.map +1 -0
  170. package/dist/member/util.js +158 -88
  171. package/dist/member/util.js.map +1 -1
  172. package/dist/members/collection.js +13 -12
  173. package/dist/members/collection.js.map +1 -1
  174. package/dist/members/index.js +194 -204
  175. package/dist/members/index.js.map +1 -1
  176. package/dist/members/request.js +113 -68
  177. package/dist/members/request.js.map +1 -1
  178. package/dist/members/types.js +15 -0
  179. package/dist/members/types.js.map +1 -0
  180. package/dist/members/util.js +324 -259
  181. package/dist/members/util.js.map +1 -1
  182. package/dist/metrics/constants.js +19 -7
  183. package/dist/metrics/constants.js.map +1 -1
  184. package/dist/metrics/index.js +11 -558
  185. package/dist/metrics/index.js.map +1 -1
  186. package/dist/multistream/mediaRequestManager.js +263 -50
  187. package/dist/multistream/mediaRequestManager.js.map +1 -1
  188. package/dist/multistream/receiveSlot.js +58 -65
  189. package/dist/multistream/receiveSlot.js.map +1 -1
  190. package/dist/multistream/receiveSlotManager.js +76 -95
  191. package/dist/multistream/receiveSlotManager.js.map +1 -1
  192. package/dist/multistream/remoteMedia.js +62 -76
  193. package/dist/multistream/remoteMedia.js.map +1 -1
  194. package/dist/multistream/remoteMediaGroup.js +82 -45
  195. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  196. package/dist/multistream/remoteMediaManager.js +657 -448
  197. package/dist/multistream/remoteMediaManager.js.map +1 -1
  198. package/dist/multistream/sendSlotManager.js +255 -0
  199. package/dist/multistream/sendSlotManager.js.map +1 -0
  200. package/dist/networkQualityMonitor/index.js +40 -59
  201. package/dist/networkQualityMonitor/index.js.map +1 -1
  202. package/dist/personal-meeting-room/index.js +21 -45
  203. package/dist/personal-meeting-room/index.js.map +1 -1
  204. package/dist/personal-meeting-room/request.js +1 -31
  205. package/dist/personal-meeting-room/request.js.map +1 -1
  206. package/dist/personal-meeting-room/util.js +0 -13
  207. package/dist/personal-meeting-room/util.js.map +1 -1
  208. package/dist/reachability/clusterReachability.js +356 -0
  209. package/dist/reachability/clusterReachability.js.map +1 -0
  210. package/dist/reachability/index.js +297 -460
  211. package/dist/reachability/index.js.map +1 -1
  212. package/dist/reachability/request.js +20 -26
  213. package/dist/reachability/request.js.map +1 -1
  214. package/dist/reachability/util.js +29 -0
  215. package/dist/reachability/util.js.map +1 -0
  216. package/dist/reactions/constants.js +13 -0
  217. package/dist/reactions/constants.js.map +1 -0
  218. package/dist/reactions/reactions.js +109 -0
  219. package/dist/reactions/reactions.js.map +1 -0
  220. package/dist/reactions/reactions.type.js +36 -0
  221. package/dist/reactions/reactions.type.js.map +1 -0
  222. package/dist/reconnection-manager/index.js +413 -483
  223. package/dist/reconnection-manager/index.js.map +1 -1
  224. package/dist/recording-controller/enums.js +17 -0
  225. package/dist/recording-controller/enums.js.map +1 -0
  226. package/dist/recording-controller/index.js +362 -0
  227. package/dist/recording-controller/index.js.map +1 -0
  228. package/dist/recording-controller/util.js +64 -0
  229. package/dist/recording-controller/util.js.map +1 -0
  230. package/dist/roap/index.js +102 -86
  231. package/dist/roap/index.js.map +1 -1
  232. package/dist/roap/request.js +131 -135
  233. package/dist/roap/request.js.map +1 -1
  234. package/dist/roap/turnDiscovery.js +437 -116
  235. package/dist/roap/turnDiscovery.js.map +1 -1
  236. package/dist/rtcMetrics/constants.js +12 -0
  237. package/dist/rtcMetrics/constants.js.map +1 -0
  238. package/dist/rtcMetrics/index.js +179 -0
  239. package/dist/rtcMetrics/index.js.map +1 -0
  240. package/dist/statsAnalyzer/global.js +1 -95
  241. package/dist/statsAnalyzer/global.js.map +1 -1
  242. package/dist/statsAnalyzer/index.js +557 -583
  243. package/dist/statsAnalyzer/index.js.map +1 -1
  244. package/dist/statsAnalyzer/mqaUtil.js +326 -130
  245. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  246. package/dist/transcription/index.js +22 -47
  247. package/dist/transcription/index.js.map +1 -1
  248. package/dist/types/annotation/annotation.types.d.ts +42 -0
  249. package/dist/types/annotation/constants.d.ts +31 -0
  250. package/dist/types/annotation/index.d.ts +117 -0
  251. package/dist/types/breakouts/breakout.d.ts +8 -0
  252. package/dist/types/breakouts/collection.d.ts +5 -0
  253. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  254. package/dist/types/breakouts/events.d.ts +8 -0
  255. package/dist/types/breakouts/index.d.ts +5 -0
  256. package/dist/types/breakouts/request.d.ts +22 -0
  257. package/dist/types/breakouts/utils.d.ts +15 -0
  258. package/dist/types/common/browser-detection.d.ts +9 -0
  259. package/dist/types/common/collection.d.ts +48 -0
  260. package/dist/types/common/config.d.ts +2 -0
  261. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  262. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  263. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  264. package/dist/types/common/errors/media.d.ts +15 -0
  265. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  266. package/dist/types/common/errors/parameter.d.ts +15 -0
  267. package/dist/types/common/errors/password-error.d.ts +15 -0
  268. package/dist/types/common/errors/permission.d.ts +14 -0
  269. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  270. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  271. package/dist/types/common/errors/reconnection.d.ts +15 -0
  272. package/dist/types/common/errors/stats.d.ts +15 -0
  273. package/dist/types/common/errors/webex-errors.d.ts +93 -0
  274. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  275. package/dist/types/common/events/events-scope.d.ts +17 -0
  276. package/dist/types/common/events/events.d.ts +12 -0
  277. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  278. package/dist/types/common/events/util.d.ts +2 -0
  279. package/dist/types/common/logs/logger-config.d.ts +2 -0
  280. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  281. package/dist/types/common/logs/request.d.ts +36 -0
  282. package/dist/types/common/queue.d.ts +34 -0
  283. package/dist/types/config.d.ts +72 -0
  284. package/dist/types/constants.d.ts +1088 -0
  285. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  286. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  287. package/dist/types/controls-options-manager/index.d.ts +136 -0
  288. package/dist/types/controls-options-manager/types.d.ts +43 -0
  289. package/dist/types/controls-options-manager/util.d.ts +1 -0
  290. package/dist/types/index.d.ts +7 -0
  291. package/dist/types/interceptors/index.d.ts +2 -0
  292. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  293. package/dist/types/interpretation/collection.d.ts +5 -0
  294. package/dist/types/interpretation/index.d.ts +5 -0
  295. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  296. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  297. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  298. package/dist/types/locus-info/fullState.d.ts +2 -0
  299. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  300. package/dist/types/locus-info/index.d.ts +322 -0
  301. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  302. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  303. package/dist/types/locus-info/parser.d.ts +272 -0
  304. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  305. package/dist/types/media/index.d.ts +34 -0
  306. package/dist/types/media/properties.d.ts +93 -0
  307. package/dist/types/media/util.d.ts +2 -0
  308. package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
  309. package/dist/types/meeting/in-meeting-actions.d.ts +167 -0
  310. package/dist/types/meeting/index.d.ts +1824 -0
  311. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  312. package/dist/types/meeting/muteState.d.ts +178 -0
  313. package/dist/types/meeting/request.d.ts +293 -0
  314. package/dist/types/meeting/request.type.d.ts +11 -0
  315. package/dist/types/meeting/state.d.ts +9 -0
  316. package/dist/types/meeting/util.d.ts +118 -0
  317. package/dist/types/meeting/voicea-meeting.d.ts +16 -0
  318. package/dist/types/meeting-info/collection.d.ts +20 -0
  319. package/dist/types/meeting-info/index.d.ts +69 -0
  320. package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -0
  321. package/dist/types/meeting-info/request.d.ts +22 -0
  322. package/dist/types/meeting-info/util.d.ts +2 -0
  323. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  324. package/dist/types/meetings/collection.d.ts +40 -0
  325. package/dist/types/meetings/index.d.ts +389 -0
  326. package/dist/types/meetings/meetings.types.d.ts +4 -0
  327. package/dist/types/meetings/request.d.ts +27 -0
  328. package/dist/types/meetings/util.d.ts +18 -0
  329. package/dist/types/member/index.d.ts +160 -0
  330. package/dist/types/member/types.d.ts +32 -0
  331. package/dist/types/member/util.d.ts +2 -0
  332. package/dist/types/members/collection.d.ts +29 -0
  333. package/dist/types/members/index.d.ts +353 -0
  334. package/dist/types/members/request.d.ts +114 -0
  335. package/dist/types/members/types.d.ts +25 -0
  336. package/dist/types/members/util.d.ts +215 -0
  337. package/dist/types/metrics/constants.d.ts +70 -0
  338. package/dist/types/metrics/index.d.ts +45 -0
  339. package/dist/types/multistream/mediaRequestManager.d.ts +120 -0
  340. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  341. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  342. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  343. package/dist/types/multistream/remoteMediaGroup.d.ts +49 -0
  344. package/dist/types/multistream/remoteMediaManager.d.ts +301 -0
  345. package/dist/types/multistream/sendSlotManager.d.ts +70 -0
  346. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  347. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  348. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  349. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  350. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  351. package/dist/types/reachability/index.d.ts +105 -0
  352. package/dist/types/reachability/request.d.ts +39 -0
  353. package/dist/types/reachability/util.d.ts +8 -0
  354. package/dist/types/reactions/constants.d.ts +3 -0
  355. package/dist/types/reactions/reactions.d.ts +4 -0
  356. package/dist/types/reactions/reactions.type.d.ts +52 -0
  357. package/dist/types/reconnection-manager/index.d.ts +136 -0
  358. package/dist/types/recording-controller/enums.d.ts +7 -0
  359. package/dist/types/recording-controller/index.d.ts +207 -0
  360. package/dist/types/recording-controller/util.d.ts +14 -0
  361. package/dist/types/roap/index.d.ts +86 -0
  362. package/dist/types/roap/request.d.ts +39 -0
  363. package/dist/types/roap/turnDiscovery.d.ts +155 -0
  364. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  365. package/dist/types/rtcMetrics/index.d.ts +61 -0
  366. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  367. package/dist/types/statsAnalyzer/index.d.ts +217 -0
  368. package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
  369. package/dist/types/transcription/index.d.ts +64 -0
  370. package/dist/types/webinar/collection.d.ts +16 -0
  371. package/dist/types/webinar/index.d.ts +5 -0
  372. package/dist/webinar/collection.js +44 -0
  373. package/dist/webinar/collection.js.map +1 -0
  374. package/dist/webinar/index.js +69 -0
  375. package/dist/webinar/index.js.map +1 -0
  376. package/internal-README.md +7 -6
  377. package/package.json +30 -21
  378. package/src/annotation/annotation.types.ts +50 -0
  379. package/src/annotation/constants.ts +36 -0
  380. package/src/annotation/index.ts +328 -0
  381. package/src/breakouts/README.md +220 -0
  382. package/src/breakouts/breakout.ts +188 -0
  383. package/src/breakouts/collection.ts +19 -0
  384. package/src/breakouts/edit-lock-error.ts +25 -0
  385. package/src/breakouts/events.ts +56 -0
  386. package/src/breakouts/index.ts +925 -0
  387. package/src/breakouts/request.ts +55 -0
  388. package/src/breakouts/utils.ts +57 -0
  389. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  390. package/src/common/collection.ts +9 -7
  391. package/src/common/{config.js → config.ts} +1 -1
  392. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  393. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  394. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  395. package/src/common/errors/{media.js → media.ts} +11 -7
  396. package/src/common/errors/no-meeting-info.ts +24 -0
  397. package/src/common/errors/parameter.ts +11 -7
  398. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  399. package/src/common/errors/{permission.js → permission.ts} +10 -6
  400. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  401. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  402. package/src/common/errors/{stats.js → stats.ts} +11 -7
  403. package/src/common/errors/{webex-errors.js → webex-errors.ts} +51 -8
  404. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  405. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  406. package/src/common/events/{events.js → events.ts} +5 -1
  407. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  408. package/src/common/events/{util.js → util.ts} +2 -3
  409. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  410. package/src/common/logs/logger-proxy.ts +44 -0
  411. package/src/common/logs/{request.js → request.ts} +26 -9
  412. package/src/common/queue.ts +22 -9
  413. package/src/{config.js → config.ts} +19 -21
  414. package/src/constants.ts +296 -27
  415. package/src/controls-options-manager/constants.ts +5 -0
  416. package/src/controls-options-manager/enums.ts +18 -0
  417. package/src/controls-options-manager/index.ts +278 -0
  418. package/src/controls-options-manager/types.ts +59 -0
  419. package/src/controls-options-manager/util.ts +300 -0
  420. package/src/index.ts +45 -0
  421. package/src/interceptors/index.ts +3 -0
  422. package/src/interceptors/locusRetry.ts +67 -0
  423. package/src/interpretation/README.md +60 -0
  424. package/src/interpretation/collection.ts +19 -0
  425. package/src/interpretation/index.ts +349 -0
  426. package/src/interpretation/siLanguage.ts +18 -0
  427. package/src/locus-info/controlsUtils.ts +222 -0
  428. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  429. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  430. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  431. package/src/locus-info/{index.js → index.ts} +561 -119
  432. package/src/locus-info/{infoUtils.js → infoUtils.ts} +29 -10
  433. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +97 -17
  434. package/src/locus-info/{parser.js → parser.ts} +303 -104
  435. package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
  436. package/src/media/index.ts +460 -0
  437. package/src/media/properties.ts +283 -0
  438. package/src/media/{util.js → util.ts} +2 -2
  439. package/src/mediaQualityMetrics/config.ts +249 -0
  440. package/src/meeting/in-meeting-actions.ts +199 -3
  441. package/src/meeting/index.ts +8494 -0
  442. package/src/meeting/locusMediaRequest.ts +313 -0
  443. package/src/meeting/muteState.ts +465 -0
  444. package/src/meeting/request.ts +912 -0
  445. package/src/meeting/request.type.ts +13 -0
  446. package/src/meeting/{state.js → state.ts} +50 -35
  447. package/src/meeting/util.ts +799 -0
  448. package/src/meeting/voicea-meeting.ts +122 -0
  449. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  450. package/src/meeting-info/index.ts +210 -0
  451. package/src/meeting-info/meeting-info-v2.ts +423 -0
  452. package/src/meeting-info/{request.js → request.ts} +14 -4
  453. package/src/meeting-info/{util.js → util.ts} +70 -58
  454. package/src/meeting-info/{utilv2.js → utilv2.ts} +99 -82
  455. package/src/meetings/collection.ts +76 -0
  456. package/src/meetings/index.ts +1539 -0
  457. package/src/meetings/meetings.types.ts +12 -0
  458. package/src/meetings/{request.js → request.ts} +34 -25
  459. package/src/meetings/{util.js → util.ts} +133 -38
  460. package/src/member/{index.js → index.ts} +159 -56
  461. package/src/member/types.ts +38 -0
  462. package/src/member/util.ts +397 -0
  463. package/src/members/{collection.js → collection.ts} +10 -2
  464. package/src/members/{index.js → index.ts} +351 -146
  465. package/src/members/request.ts +255 -0
  466. package/src/members/types.ts +29 -0
  467. package/src/members/util.ts +353 -0
  468. package/src/metrics/{constants.js → constants.ts} +17 -6
  469. package/src/metrics/index.ts +73 -0
  470. package/src/multistream/mediaRequestManager.ts +341 -64
  471. package/src/multistream/receiveSlot.ts +69 -26
  472. package/src/multistream/receiveSlotManager.ts +66 -42
  473. package/src/multistream/remoteMedia.ts +40 -5
  474. package/src/multistream/remoteMediaGroup.ts +82 -3
  475. package/src/multistream/remoteMediaManager.ts +401 -81
  476. package/src/multistream/sendSlotManager.ts +199 -0
  477. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  478. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  479. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  480. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  481. package/src/reachability/clusterReachability.ts +320 -0
  482. package/src/reachability/index.ts +371 -0
  483. package/src/reachability/request.ts +50 -35
  484. package/src/reachability/util.ts +24 -0
  485. package/src/reactions/constants.ts +4 -0
  486. package/src/reactions/reactions.ts +104 -0
  487. package/src/reactions/reactions.type.ts +62 -0
  488. package/src/reconnection-manager/index.ts +643 -0
  489. package/src/recording-controller/enums.ts +8 -0
  490. package/src/recording-controller/index.ts +332 -0
  491. package/src/recording-controller/util.ts +75 -0
  492. package/src/roap/index.ts +288 -0
  493. package/src/roap/request.ts +153 -0
  494. package/src/roap/turnDiscovery.ts +374 -70
  495. package/src/rtcMetrics/constants.ts +3 -0
  496. package/src/rtcMetrics/index.ts +166 -0
  497. package/src/statsAnalyzer/global.ts +37 -0
  498. package/src/statsAnalyzer/index.ts +1275 -0
  499. package/src/statsAnalyzer/mqaUtil.ts +440 -0
  500. package/src/transcription/{index.js → index.ts} +46 -39
  501. package/src/webinar/collection.ts +31 -0
  502. package/src/webinar/index.ts +62 -0
  503. package/test/integration/spec/converged-space-meetings.js +233 -0
  504. package/test/integration/spec/journey.js +791 -531
  505. package/test/integration/spec/space-meeting.js +391 -204
  506. package/test/integration/spec/transcription.js +7 -8
  507. package/test/unit/spec/annotation/index.ts +418 -0
  508. package/test/unit/spec/breakouts/breakout.ts +238 -0
  509. package/test/unit/spec/breakouts/collection.ts +15 -0
  510. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  511. package/test/unit/spec/breakouts/events.ts +89 -0
  512. package/test/unit/spec/breakouts/index.ts +1793 -0
  513. package/test/unit/spec/breakouts/request.ts +104 -0
  514. package/test/unit/spec/breakouts/utils.js +72 -0
  515. package/test/unit/spec/common/browser-detection.js +9 -28
  516. package/test/unit/spec/common/queue.js +31 -2
  517. package/test/unit/spec/controls-options-manager/index.js +287 -0
  518. package/test/unit/spec/controls-options-manager/util.js +582 -0
  519. package/test/unit/spec/fixture/locus.js +93 -90
  520. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  521. package/test/unit/spec/interpretation/collection.ts +15 -0
  522. package/test/unit/spec/interpretation/index.ts +625 -0
  523. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  524. package/test/unit/spec/locus-info/controlsUtils.js +325 -32
  525. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  526. package/test/unit/spec/locus-info/index.js +1458 -21
  527. package/test/unit/spec/locus-info/infoUtils.js +71 -40
  528. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  529. package/test/unit/spec/locus-info/lib/SeqCmp.json +529 -685
  530. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  531. package/test/unit/spec/locus-info/parser.js +119 -44
  532. package/test/unit/spec/locus-info/selfConstant.js +120 -103
  533. package/test/unit/spec/locus-info/selfUtils.js +291 -12
  534. package/test/unit/spec/media/index.ts +194 -111
  535. package/test/unit/spec/media/properties.ts +11 -11
  536. package/test/unit/spec/meeting/in-meeting-actions.ts +96 -3
  537. package/test/unit/spec/meeting/index.js +8616 -1921
  538. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  539. package/test/unit/spec/meeting/muteState.js +568 -207
  540. package/test/unit/spec/meeting/request.js +602 -82
  541. package/test/unit/spec/meeting/utils.js +867 -179
  542. package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
  543. package/test/unit/spec/meeting-info/index.js +300 -0
  544. package/test/unit/spec/meeting-info/meetinginfov2.js +631 -78
  545. package/test/unit/spec/meeting-info/request.js +7 -9
  546. package/test/unit/spec/meeting-info/util.js +11 -12
  547. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  548. package/test/unit/spec/meetings/collection.js +27 -1
  549. package/test/unit/spec/meetings/index.js +1826 -374
  550. package/test/unit/spec/meetings/utils.js +243 -14
  551. package/test/unit/spec/member/index.js +61 -7
  552. package/test/unit/spec/member/util.js +526 -26
  553. package/test/unit/spec/members/index.js +536 -55
  554. package/test/unit/spec/members/request.js +228 -40
  555. package/test/unit/spec/members/utils.js +217 -4
  556. package/test/unit/spec/metrics/index.js +13 -68
  557. package/test/unit/spec/multistream/mediaRequestManager.ts +1032 -110
  558. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  559. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  560. package/test/unit/spec/multistream/remoteMedia.ts +40 -2
  561. package/test/unit/spec/multistream/remoteMediaGroup.ts +350 -5
  562. package/test/unit/spec/multistream/remoteMediaManager.ts +937 -65
  563. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  564. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  565. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  566. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  567. package/test/unit/spec/reachability/index.ts +606 -26
  568. package/test/unit/spec/reachability/request.js +68 -0
  569. package/test/unit/spec/reachability/util.ts +40 -0
  570. package/test/unit/spec/reconnection-manager/index.js +222 -34
  571. package/test/unit/spec/recording-controller/index.js +306 -0
  572. package/test/unit/spec/recording-controller/util.js +229 -0
  573. package/test/unit/spec/roap/index.ts +238 -82
  574. package/test/unit/spec/roap/request.ts +255 -0
  575. package/test/unit/spec/roap/turnDiscovery.ts +707 -110
  576. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  577. package/test/unit/spec/stats-analyzer/index.js +1331 -62
  578. package/test/unit/spec/webinar/collection.ts +13 -0
  579. package/test/unit/spec/webinar/index.ts +60 -0
  580. package/test/utils/cmr.js +44 -42
  581. package/test/utils/constants.js +9 -0
  582. package/test/utils/integrationTestUtils.js +46 -0
  583. package/test/utils/testUtils.js +63 -99
  584. package/test/utils/webex-config.js +22 -18
  585. package/test/utils/webex-test-users.js +65 -50
  586. package/tsconfig.json +6 -0
  587. package/dist/media/internal-media-core-wrapper.js +0 -22
  588. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  589. package/dist/meeting/effectsState.js +0 -327
  590. package/dist/meeting/effectsState.js.map +0 -1
  591. package/dist/metrics/config.js +0 -301
  592. package/dist/metrics/config.js.map +0 -1
  593. package/dist/multistream/multistreamMedia.js +0 -116
  594. package/dist/multistream/multistreamMedia.js.map +0 -1
  595. package/dist/peer-connection-manager/util.js +0 -124
  596. package/dist/peer-connection-manager/util.js.map +0 -1
  597. package/src/common/logs/logger-proxy.js +0 -33
  598. package/src/index.js +0 -15
  599. package/src/locus-info/controlsUtils.js +0 -102
  600. package/src/media/index.js +0 -459
  601. package/src/media/internal-media-core-wrapper.ts +0 -9
  602. package/src/media/properties.js +0 -289
  603. package/src/mediaQualityMetrics/config.js +0 -382
  604. package/src/meeting/effectsState.js +0 -205
  605. package/src/meeting/index.js +0 -6284
  606. package/src/meeting/muteState.js +0 -318
  607. package/src/meeting/request.js +0 -684
  608. package/src/meeting/util.js +0 -506
  609. package/src/meeting-info/index.js +0 -131
  610. package/src/meeting-info/meeting-info-v2.js +0 -255
  611. package/src/meetings/collection.js +0 -40
  612. package/src/meetings/index.js +0 -1015
  613. package/src/member/util.js +0 -254
  614. package/src/members/request.js +0 -131
  615. package/src/members/util.js +0 -258
  616. package/src/metrics/config.js +0 -324
  617. package/src/metrics/index.js +0 -530
  618. package/src/multistream/multistreamMedia.ts +0 -92
  619. package/src/peer-connection-manager/util.ts +0 -117
  620. package/src/reachability/index.js +0 -464
  621. package/src/reconnection-manager/index.js +0 -519
  622. package/src/roap/index.js +0 -220
  623. package/src/roap/request.js +0 -127
  624. package/src/statsAnalyzer/global.js +0 -133
  625. package/src/statsAnalyzer/index.js +0 -1006
  626. package/src/statsAnalyzer/mqaUtil.js +0 -173
  627. package/test/unit/spec/meeting/effectsState.js +0 -291
  628. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  629. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -1,67 +1,42 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
-
5
4
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
-
7
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
-
9
6
  _Object$defineProperty(exports, "__esModule", {
10
7
  value: true
11
8
  });
12
-
13
9
  exports.default = void 0;
14
-
15
10
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
-
17
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
18
-
19
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
20
-
21
13
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
22
-
23
14
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
24
-
25
15
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
26
-
27
16
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
28
-
29
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
30
-
31
18
  var _webexCore = require("@webex/webex-core");
32
-
33
19
  var _constants = require("../constants");
34
-
35
20
  var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
36
-
37
21
  var _util = _interopRequireDefault(require("./util"));
38
-
39
22
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
40
-
41
23
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
42
-
43
24
  /**
44
25
  * @class MeetingInfoRequest
45
26
  */
46
27
  var PersonalMeetingRoomRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
47
28
  (0, _inherits2.default)(PersonalMeetingRoomRequest, _StatelessWebexPlugin);
48
-
49
29
  var _super = _createSuper(PersonalMeetingRoomRequest);
50
-
51
30
  function PersonalMeetingRoomRequest() {
52
31
  var _this;
53
-
54
32
  (0, _classCallCheck2.default)(this, PersonalMeetingRoomRequest);
55
-
56
33
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
57
34
  args[_key] = arguments[_key];
58
35
  }
59
-
60
36
  _this = _super.call.apply(_super, [this].concat(args));
61
37
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "namespace", _constants.MEETINGS);
62
38
  return _this;
63
39
  }
64
-
65
40
  (0, _createClass2.default)(PersonalMeetingRoomRequest, [{
66
41
  key: "claimPmr",
67
42
  value:
@@ -75,26 +50,21 @@ var PersonalMeetingRoomRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
75
50
  if (!options || !options.userId || !options.passcode || !options.meetingAddress || !options.preferred) {
76
51
  throw new _parameter.default('Claiming a PMR should be done with userId, passcode, preferred, and meetingAddress in options.');
77
52
  }
78
-
79
53
  var validPin = _util.default.getClaimPmrPin(options.passcode);
80
-
81
54
  if (!validPin) {
82
55
  return _promise.default.reject(new _parameter.default('The host pin provided was of an invalid format'));
83
56
  }
84
-
85
57
  var validLink = _util.default.getClaimPmrLink(options.meetingAddress);
86
-
87
58
  if (!validLink) {
88
59
  return _promise.default.reject(new _parameter.default('The PMR link provided was of an invalid format'));
89
60
  }
90
-
91
61
  var request = _util.default.getClaimedRequestParams(validLink, validPin, options);
92
62
 
63
+ // @ts-ignore
93
64
  return this.request(request);
94
65
  }
95
66
  }]);
96
67
  return PersonalMeetingRoomRequest;
97
68
  }(_webexCore.StatelessWebexPlugin);
98
-
99
69
  exports.default = PersonalMeetingRoomRequest;
100
70
  //# sourceMappingURL=request.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PersonalMeetingRoomRequest","MEETINGS","options","userId","passcode","meetingAddress","preferred","ParameterError","validPin","PersonalMeetingRoomUtil","getClaimPmrPin","reject","validLink","getClaimPmrLink","request","getClaimedRequestParams","StatelessWebexPlugin"],"sources":["request.js"],"sourcesContent":["import {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport PersonalMeetingRoomUtil from './util';\n\n\n/**\n * @class MeetingInfoRequest\n */\nexport default class PersonalMeetingRoomRequest extends StatelessWebexPlugin {\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} options with format of {userId, passcode, meetingAddress, preferred}\n * @returns {Promise} returns a promise that resolves/rejects the result of the request\n * @memberof PersonalMeetingRoomRequest\n */\n claimPmr(options) {\n if (!options || !options.userId || !options.passcode || !options.meetingAddress || !options.preferred) {\n throw new ParameterError('Claiming a PMR should be done with userId, passcode, preferred, and meetingAddress in options.');\n }\n const validPin = PersonalMeetingRoomUtil.getClaimPmrPin(options.passcode);\n\n if (!validPin) {\n return Promise.reject(new ParameterError('The host pin provided was of an invalid format'));\n }\n const validLink = PersonalMeetingRoomUtil.getClaimPmrLink(options.meetingAddress);\n\n if (!validLink) {\n return Promise.reject(new ParameterError('The PMR link provided was of an invalid format'));\n }\n const request = PersonalMeetingRoomUtil.getClaimedRequestParams(validLink, validPin, options);\n\n return this.request(request);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;AAEA;;;;;;AAGA;AACA;AACA;IACqBA,0B;;;;;;;;;;;;;;;4FACPC,mB;;;;;;;IAEZ;AACF;AACA;AACA;AACA;AACA;IACE,kBAASC,OAAT,EAAkB;MAChB,IAAI,CAACA,OAAD,IAAY,CAACA,OAAO,CAACC,MAArB,IAA+B,CAACD,OAAO,CAACE,QAAxC,IAAoD,CAACF,OAAO,CAACG,cAA7D,IAA+E,CAACH,OAAO,CAACI,SAA5F,EAAuG;QACrG,MAAM,IAAIC,kBAAJ,CAAmB,gGAAnB,CAAN;MACD;;MACD,IAAMC,QAAQ,GAAGC,aAAA,CAAwBC,cAAxB,CAAuCR,OAAO,CAACE,QAA/C,CAAjB;;MAEA,IAAI,CAACI,QAAL,EAAe;QACb,OAAO,iBAAQG,MAAR,CAAe,IAAIJ,kBAAJ,CAAmB,gDAAnB,CAAf,CAAP;MACD;;MACD,IAAMK,SAAS,GAAGH,aAAA,CAAwBI,eAAxB,CAAwCX,OAAO,CAACG,cAAhD,CAAlB;;MAEA,IAAI,CAACO,SAAL,EAAgB;QACd,OAAO,iBAAQD,MAAR,CAAe,IAAIJ,kBAAJ,CAAmB,gDAAnB,CAAf,CAAP;MACD;;MACD,IAAMO,OAAO,GAAGL,aAAA,CAAwBM,uBAAxB,CAAgDH,SAAhD,EAA2DJ,QAA3D,EAAqEN,OAArE,CAAhB;;MAEA,OAAO,KAAKY,OAAL,CAAaA,OAAb,CAAP;IACD;;;EA1BqDE,+B"}
1
+ {"version":3,"names":["PersonalMeetingRoomRequest","MEETINGS","options","userId","passcode","meetingAddress","preferred","ParameterError","validPin","PersonalMeetingRoomUtil","getClaimPmrPin","reject","validLink","getClaimPmrLink","request","getClaimedRequestParams","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport PersonalMeetingRoomUtil from './util';\n\n/**\n * @class MeetingInfoRequest\n */\nexport default class PersonalMeetingRoomRequest extends StatelessWebexPlugin {\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} options with format of {userId, passcode, meetingAddress, preferred}\n * @returns {Promise} returns a promise that resolves/rejects the result of the request\n * @memberof PersonalMeetingRoomRequest\n */\n claimPmr(options: any) {\n if (\n !options ||\n !options.userId ||\n !options.passcode ||\n !options.meetingAddress ||\n !options.preferred\n ) {\n throw new ParameterError(\n 'Claiming a PMR should be done with userId, passcode, preferred, and meetingAddress in options.'\n );\n }\n const validPin = PersonalMeetingRoomUtil.getClaimPmrPin(options.passcode);\n\n if (!validPin) {\n return Promise.reject(new ParameterError('The host pin provided was of an invalid format'));\n }\n const validLink = PersonalMeetingRoomUtil.getClaimPmrLink(options.meetingAddress);\n\n if (!validLink) {\n return Promise.reject(new ParameterError('The PMR link provided was of an invalid format'));\n }\n const request = PersonalMeetingRoomUtil.getClaimedRequestParams(validLink, validPin, options);\n\n // @ts-ignore\n return this.request(request);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AACA;AAEA;AACA;AAEA;AAA6C;AAAA;AAE7C;AACA;AACA;AAFA,IAGqBA,0BAA0B;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,wFACjCC,mBAAQ;IAAA;EAAA;EAAA;IAAA;IAAA;IAEpB;AACF;AACA;AACA;AACA;AACA;IACE,kBAASC,OAAY,EAAE;MACrB,IACE,CAACA,OAAO,IACR,CAACA,OAAO,CAACC,MAAM,IACf,CAACD,OAAO,CAACE,QAAQ,IACjB,CAACF,OAAO,CAACG,cAAc,IACvB,CAACH,OAAO,CAACI,SAAS,EAClB;QACA,MAAM,IAAIC,kBAAc,CACtB,gGAAgG,CACjG;MACH;MACA,IAAMC,QAAQ,GAAGC,aAAuB,CAACC,cAAc,CAACR,OAAO,CAACE,QAAQ,CAAC;MAEzE,IAAI,CAACI,QAAQ,EAAE;QACb,OAAO,iBAAQG,MAAM,CAAC,IAAIJ,kBAAc,CAAC,gDAAgD,CAAC,CAAC;MAC7F;MACA,IAAMK,SAAS,GAAGH,aAAuB,CAACI,eAAe,CAACX,OAAO,CAACG,cAAc,CAAC;MAEjF,IAAI,CAACO,SAAS,EAAE;QACd,OAAO,iBAAQD,MAAM,CAAC,IAAIJ,kBAAc,CAAC,gDAAgD,CAAC,CAAC;MAC7F;MACA,IAAMO,OAAO,GAAGL,aAAuB,CAACM,uBAAuB,CAACH,SAAS,EAAEJ,QAAQ,EAAEN,OAAO,CAAC;;MAE7F;MACA,OAAO,IAAI,CAACY,OAAO,CAACA,OAAO,CAAC;IAC9B;EAAC;EAAA;AAAA,EAnCqDE,+BAAoB;AAAA"}
@@ -1,42 +1,30 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
-
9
7
  exports.default = void 0;
10
-
11
8
  var _constants = require("../constants");
12
-
13
9
  var PersonalMeetingRoomUtil = {};
14
-
15
10
  PersonalMeetingRoomUtil.getClaimPmrLink = function (pmrLink) {
16
11
  var validator = _constants.VALID_PMR_ADDRESS.test(pmrLink);
17
-
18
12
  if (validator) {
19
13
  return pmrLink;
20
14
  }
21
-
22
15
  validator = pmrLink.match(_constants.VALID_PMR_LINK);
23
-
24
16
  if (validator) {
25
17
  // userId + '@' + site + '.webex.com'
26
18
  return "".concat(validator[4], "@").concat(validator[2], ".").concat(_constants.WEBEX_DOT_COM);
27
19
  }
28
-
29
20
  return null;
30
21
  };
31
-
32
22
  PersonalMeetingRoomUtil.getClaimPmrPin = function (hostPin) {
33
23
  if (_constants.VALID_PIN.test(hostPin)) {
34
24
  return hostPin;
35
25
  }
36
-
37
26
  return null;
38
27
  };
39
-
40
28
  PersonalMeetingRoomUtil.getClaimedRequestParams = function (link, pin, options) {
41
29
  return {
42
30
  method: _constants.HTTP_VERBS.POST,
@@ -50,7 +38,6 @@ PersonalMeetingRoomUtil.getClaimedRequestParams = function (link, pin, options)
50
38
  }
51
39
  };
52
40
  };
53
-
54
41
  var _default = PersonalMeetingRoomUtil;
55
42
  exports.default = _default;
56
43
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PersonalMeetingRoomUtil","getClaimPmrLink","pmrLink","validator","VALID_PMR_ADDRESS","test","match","VALID_PMR_LINK","WEBEX_DOT_COM","getClaimPmrPin","hostPin","VALID_PIN","getClaimedRequestParams","link","pin","options","method","HTTP_VERBS","POST","api","HECATE","resource","CMR_MEETINGS","CLAIM","body","userId","passcode","preferred","meetingAddress"],"sources":["util.js"],"sourcesContent":["import {\n HTTP_VERBS,\n VALID_PIN,\n VALID_PMR_ADDRESS,\n VALID_PMR_LINK,\n CMR_MEETINGS,\n CLAIM,\n HECATE,\n WEBEX_DOT_COM\n} from '../constants';\n\nconst PersonalMeetingRoomUtil = {};\n\nPersonalMeetingRoomUtil.getClaimPmrLink = (pmrLink) => {\n let validator = VALID_PMR_ADDRESS.test(pmrLink);\n\n if (validator) {\n return pmrLink;\n }\n validator = pmrLink.match(VALID_PMR_LINK);\n if (validator) {\n // userId + '@' + site + '.webex.com'\n return `${validator[4]}@${validator[2]}.${WEBEX_DOT_COM}`;\n }\n\n return null;\n};\n\nPersonalMeetingRoomUtil.getClaimPmrPin = (hostPin) => {\n if (VALID_PIN.test(hostPin)) {\n return hostPin;\n }\n\n return null;\n};\n\nPersonalMeetingRoomUtil.getClaimedRequestParams = (link, pin, options) => ({\n method: HTTP_VERBS.POST,\n api: HECATE,\n resource: `/${CMR_MEETINGS}/${CLAIM}`,\n body: {\n userId: options.userId,\n passcode: pin,\n preferred: options.preferred,\n meetingAddress: link\n }\n});\n\nexport default PersonalMeetingRoomUtil;\n"],"mappings":";;;;;;;;;;AAAA;;AAWA,IAAMA,uBAAuB,GAAG,EAAhC;;AAEAA,uBAAuB,CAACC,eAAxB,GAA0C,UAACC,OAAD,EAAa;EACrD,IAAIC,SAAS,GAAGC,4BAAA,CAAkBC,IAAlB,CAAuBH,OAAvB,CAAhB;;EAEA,IAAIC,SAAJ,EAAe;IACb,OAAOD,OAAP;EACD;;EACDC,SAAS,GAAGD,OAAO,CAACI,KAAR,CAAcC,yBAAd,CAAZ;;EACA,IAAIJ,SAAJ,EAAe;IACb;IACA,iBAAUA,SAAS,CAAC,CAAD,CAAnB,cAA0BA,SAAS,CAAC,CAAD,CAAnC,cAA0CK,wBAA1C;EACD;;EAED,OAAO,IAAP;AACD,CAbD;;AAeAR,uBAAuB,CAACS,cAAxB,GAAyC,UAACC,OAAD,EAAa;EACpD,IAAIC,oBAAA,CAAUN,IAAV,CAAeK,OAAf,CAAJ,EAA6B;IAC3B,OAAOA,OAAP;EACD;;EAED,OAAO,IAAP;AACD,CAND;;AAQAV,uBAAuB,CAACY,uBAAxB,GAAkD,UAACC,IAAD,EAAOC,GAAP,EAAYC,OAAZ;EAAA,OAAyB;IACzEC,MAAM,EAAEC,qBAAA,CAAWC,IADsD;IAEzEC,GAAG,EAAEC,iBAFoE;IAGzEC,QAAQ,aAAMC,uBAAN,cAAsBC,gBAAtB,CAHiE;IAIzEC,IAAI,EAAE;MACJC,MAAM,EAAEV,OAAO,CAACU,MADZ;MAEJC,QAAQ,EAAEZ,GAFN;MAGJa,SAAS,EAAEZ,OAAO,CAACY,SAHf;MAIJC,cAAc,EAAEf;IAJZ;EAJmE,CAAzB;AAAA,CAAlD;;eAYeb,uB"}
1
+ {"version":3,"names":["PersonalMeetingRoomUtil","getClaimPmrLink","pmrLink","validator","VALID_PMR_ADDRESS","test","match","VALID_PMR_LINK","WEBEX_DOT_COM","getClaimPmrPin","hostPin","VALID_PIN","getClaimedRequestParams","link","pin","options","method","HTTP_VERBS","POST","api","HECATE","resource","CMR_MEETINGS","CLAIM","body","userId","passcode","preferred","meetingAddress"],"sources":["util.ts"],"sourcesContent":["import {\n HTTP_VERBS,\n VALID_PIN,\n VALID_PMR_ADDRESS,\n VALID_PMR_LINK,\n CMR_MEETINGS,\n CLAIM,\n HECATE,\n WEBEX_DOT_COM,\n} from '../constants';\n\nconst PersonalMeetingRoomUtil: any = {};\n\nPersonalMeetingRoomUtil.getClaimPmrLink = (pmrLink) => {\n let validator = VALID_PMR_ADDRESS.test(pmrLink);\n\n if (validator) {\n return pmrLink;\n }\n validator = pmrLink.match(VALID_PMR_LINK);\n if (validator) {\n // userId + '@' + site + '.webex.com'\n return `${validator[4]}@${validator[2]}.${WEBEX_DOT_COM}`;\n }\n\n return null;\n};\n\nPersonalMeetingRoomUtil.getClaimPmrPin = (hostPin) => {\n if (VALID_PIN.test(hostPin)) {\n return hostPin;\n }\n\n return null;\n};\n\nPersonalMeetingRoomUtil.getClaimedRequestParams = (link, pin, options) => ({\n method: HTTP_VERBS.POST,\n api: HECATE,\n resource: `/${CMR_MEETINGS}/${CLAIM}`,\n body: {\n userId: options.userId,\n passcode: pin,\n preferred: options.preferred,\n meetingAddress: link,\n },\n});\n\nexport default PersonalMeetingRoomUtil;\n"],"mappings":";;;;;;;AAAA;AAWA,IAAMA,uBAA4B,GAAG,CAAC,CAAC;AAEvCA,uBAAuB,CAACC,eAAe,GAAG,UAACC,OAAO,EAAK;EACrD,IAAIC,SAAS,GAAGC,4BAAiB,CAACC,IAAI,CAACH,OAAO,CAAC;EAE/C,IAAIC,SAAS,EAAE;IACb,OAAOD,OAAO;EAChB;EACAC,SAAS,GAAGD,OAAO,CAACI,KAAK,CAACC,yBAAc,CAAC;EACzC,IAAIJ,SAAS,EAAE;IACb;IACA,iBAAUA,SAAS,CAAC,CAAC,CAAC,cAAIA,SAAS,CAAC,CAAC,CAAC,cAAIK,wBAAa;EACzD;EAEA,OAAO,IAAI;AACb,CAAC;AAEDR,uBAAuB,CAACS,cAAc,GAAG,UAACC,OAAO,EAAK;EACpD,IAAIC,oBAAS,CAACN,IAAI,CAACK,OAAO,CAAC,EAAE;IAC3B,OAAOA,OAAO;EAChB;EAEA,OAAO,IAAI;AACb,CAAC;AAEDV,uBAAuB,CAACY,uBAAuB,GAAG,UAACC,IAAI,EAAEC,GAAG,EAAEC,OAAO;EAAA,OAAM;IACzEC,MAAM,EAAEC,qBAAU,CAACC,IAAI;IACvBC,GAAG,EAAEC,iBAAM;IACXC,QAAQ,aAAMC,uBAAY,cAAIC,gBAAK,CAAE;IACrCC,IAAI,EAAE;MACJC,MAAM,EAAEV,OAAO,CAACU,MAAM;MACtBC,QAAQ,EAAEZ,GAAG;MACba,SAAS,EAAEZ,OAAO,CAACY,SAAS;MAC5BC,cAAc,EAAEf;IAClB;EACF,CAAC;AAAA,CAAC;AAAC,eAEYb,uBAAuB;AAAA"}
@@ -0,0 +1,356 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ClusterReachability = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
13
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
15
+ var _common = require("@webex/common");
16
+ var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
17
+ var _util = require("./util");
18
+ var _constants = require("../constants");
19
+ var DEFAULT_TIMEOUT = 3000;
20
+ var VIDEO_MESH_TIMEOUT = 1000;
21
+
22
+ // result for a specific transport protocol (like udp or tcp)
23
+ /**
24
+ * A class that handles reachability checks for a single cluster.
25
+ */
26
+ var ClusterReachability = /*#__PURE__*/function () {
27
+ // this defer is resolved once reachability checks for this cluster are completed
28
+
29
+ /**
30
+ * Constructor for ClusterReachability
31
+ * @param {string} name cluster name
32
+ * @param {ClusterNode} clusterInfo information about the media cluster
33
+ */
34
+ function ClusterReachability(name, clusterInfo) {
35
+ (0, _classCallCheck2.default)(this, ClusterReachability);
36
+ (0, _defineProperty2.default)(this, "numUdpUrls", void 0);
37
+ (0, _defineProperty2.default)(this, "numTcpUrls", void 0);
38
+ (0, _defineProperty2.default)(this, "result", void 0);
39
+ (0, _defineProperty2.default)(this, "pc", void 0);
40
+ (0, _defineProperty2.default)(this, "defer", void 0);
41
+ (0, _defineProperty2.default)(this, "startTimestamp", void 0);
42
+ (0, _defineProperty2.default)(this, "isVideoMesh", void 0);
43
+ (0, _defineProperty2.default)(this, "name", void 0);
44
+ this.name = name;
45
+ this.isVideoMesh = clusterInfo.isVideoMesh;
46
+ this.numUdpUrls = clusterInfo.udp.length;
47
+ this.numTcpUrls = clusterInfo.tcp.length;
48
+ this.pc = this.createPeerConnection(clusterInfo);
49
+ this.defer = new _common.Defer();
50
+ this.result = {
51
+ udp: {
52
+ result: 'untested'
53
+ },
54
+ tcp: {
55
+ result: 'untested'
56
+ },
57
+ xtls: {
58
+ result: 'untested'
59
+ }
60
+ };
61
+ }
62
+
63
+ /**
64
+ * Gets total elapsed time, can be called only after start() is called
65
+ * @returns {Number} Milliseconds
66
+ */
67
+ (0, _createClass2.default)(ClusterReachability, [{
68
+ key: "getElapsedTime",
69
+ value: function getElapsedTime() {
70
+ return Math.round(performance.now() - this.startTimestamp);
71
+ }
72
+
73
+ /**
74
+ * Generate peerConnection config settings
75
+ * @param {ClusterNode} cluster
76
+ * @returns {RTCConfiguration} peerConnectionConfig
77
+ */
78
+ }, {
79
+ key: "buildPeerConnectionConfig",
80
+ value: function buildPeerConnectionConfig(cluster) {
81
+ var udpIceServers = cluster.udp.map(function (url) {
82
+ return {
83
+ username: '',
84
+ credential: '',
85
+ urls: [url]
86
+ };
87
+ });
88
+
89
+ // STUN servers are contacted only using UDP, so in order to test TCP reachability
90
+ // we pretend that Linus is a TURN server, because we can explicitly say "transport=tcp" in TURN urls.
91
+ // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).
92
+ var tcpIceServers = cluster.tcp.map(function (urlString) {
93
+ return {
94
+ username: 'webexturnreachuser',
95
+ credential: 'webexturnreachpwd',
96
+ urls: [(0, _util.convertStunUrlToTurn)(urlString, 'tcp')]
97
+ };
98
+ });
99
+ return {
100
+ iceServers: [].concat((0, _toConsumableArray2.default)(udpIceServers), (0, _toConsumableArray2.default)(tcpIceServers)),
101
+ iceCandidatePoolSize: 0,
102
+ iceTransportPolicy: 'all'
103
+ };
104
+ }
105
+
106
+ /**
107
+ * Creates an RTCPeerConnection
108
+ * @param {ClusterNode} clusterInfo information about the media cluster
109
+ * @returns {RTCPeerConnection} peerConnection
110
+ */
111
+ }, {
112
+ key: "createPeerConnection",
113
+ value: function createPeerConnection(clusterInfo) {
114
+ try {
115
+ var config = this.buildPeerConnectionConfig(clusterInfo);
116
+ var peerConnection = new RTCPeerConnection(config);
117
+ return peerConnection;
118
+ } catch (peerConnectionError) {
119
+ _loggerProxy.default.logger.warn("Reachability:index#createPeerConnection --> Error creating peerConnection:", peerConnectionError);
120
+ return undefined;
121
+ }
122
+ }
123
+
124
+ /**
125
+ * @returns {ClusterReachabilityResult} reachability result for this cluster
126
+ */
127
+ }, {
128
+ key: "getResult",
129
+ value: function getResult() {
130
+ return this.result;
131
+ }
132
+
133
+ /**
134
+ * Closes the peerConnection
135
+ *
136
+ * @returns {void}
137
+ */
138
+ }, {
139
+ key: "closePeerConnection",
140
+ value: function closePeerConnection() {
141
+ if (this.pc) {
142
+ this.pc.onicecandidate = null;
143
+ this.pc.onicegatheringstatechange = null;
144
+ this.pc.close();
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Resolves the defer, indicating that reachability checks for this cluster are completed
150
+ *
151
+ * @returns {void}
152
+ */
153
+ }, {
154
+ key: "finishReachabilityCheck",
155
+ value: function finishReachabilityCheck() {
156
+ this.defer.resolve();
157
+ }
158
+
159
+ /**
160
+ * Adds public IP (client media IPs)
161
+ * @param {string} protocol
162
+ * @param {string} publicIP
163
+ * @returns {void}
164
+ */
165
+ }, {
166
+ key: "addPublicIP",
167
+ value: function addPublicIP(protocol, publicIP) {
168
+ var result = this.result[protocol];
169
+ if (publicIP) {
170
+ if (result.clientMediaIPs) {
171
+ if (!result.clientMediaIPs.includes(publicIP)) {
172
+ result.clientMediaIPs.push(publicIP);
173
+ }
174
+ } else {
175
+ result.clientMediaIPs = [publicIP];
176
+ }
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Registers a listener for the iceGatheringStateChange event
182
+ *
183
+ * @returns {void}
184
+ */
185
+ }, {
186
+ key: "registerIceGatheringStateChangeListener",
187
+ value: function registerIceGatheringStateChangeListener() {
188
+ var _this = this;
189
+ this.pc.onicegatheringstatechange = function () {
190
+ var COMPLETE = _constants.ICE_GATHERING_STATE.COMPLETE;
191
+ if (_this.pc.iceConnectionState === COMPLETE) {
192
+ _this.closePeerConnection();
193
+ _this.finishReachabilityCheck();
194
+ }
195
+ };
196
+ }
197
+
198
+ /**
199
+ * Checks if we have the results for all the protocols (UDP and TCP)
200
+ *
201
+ * @returns {boolean} true if we have all results, false otherwise
202
+ */
203
+ }, {
204
+ key: "haveWeGotAllResults",
205
+ value: function haveWeGotAllResults() {
206
+ var _this2 = this;
207
+ return ['udp', 'tcp'].every(function (protocol) {
208
+ return _this2.result[protocol].result === 'reachable' || _this2.result[protocol].result === 'untested';
209
+ });
210
+ }
211
+
212
+ /**
213
+ * Stores the latency in the result for the given protocol and marks it as reachable
214
+ *
215
+ * @param {string} protocol
216
+ * @param {number} latency
217
+ * @returns {void}
218
+ */
219
+ }, {
220
+ key: "storeLatencyResult",
221
+ value: function storeLatencyResult(protocol, latency) {
222
+ var result = this.result[protocol];
223
+ if (result.latencyInMilliseconds === undefined) {
224
+ _loggerProxy.default.logger.log( // @ts-ignore
225
+ "Reachability:index#storeLatencyResult --> Successfully reached ".concat(this.name, " over ").concat(protocol, ": ").concat(latency, "ms"));
226
+ result.latencyInMilliseconds = latency;
227
+ result.result = 'reachable';
228
+ }
229
+ }
230
+
231
+ /**
232
+ * Registers a listener for the icecandidate event
233
+ *
234
+ * @returns {void}
235
+ */
236
+ }, {
237
+ key: "registerIceCandidateListener",
238
+ value: function registerIceCandidateListener() {
239
+ var _this3 = this;
240
+ this.pc.onicecandidate = function (e) {
241
+ var CANDIDATE_TYPES = {
242
+ SERVER_REFLEXIVE: 'srflx',
243
+ RELAY: 'relay'
244
+ };
245
+ if (e.candidate) {
246
+ if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {
247
+ _this3.storeLatencyResult('udp', _this3.getElapsedTime());
248
+ _this3.addPublicIP('udp', e.candidate.address);
249
+ }
250
+ if (e.candidate.type === CANDIDATE_TYPES.RELAY) {
251
+ _this3.storeLatencyResult('tcp', _this3.getElapsedTime());
252
+ // we don't add public IP for TCP, because in the case of relay candidates
253
+ // e.candidate.address is the TURN server address, not the client's public IP
254
+ }
255
+
256
+ if (_this3.haveWeGotAllResults()) {
257
+ _this3.closePeerConnection();
258
+ _this3.finishReachabilityCheck();
259
+ }
260
+ }
261
+ };
262
+ }
263
+
264
+ /**
265
+ * Starts the process of doing UDP and TCP reachability checks on the media cluster.
266
+ * XTLS reachability checking is not supported.
267
+ *
268
+ * @returns {Promise}
269
+ */
270
+ }, {
271
+ key: "start",
272
+ value: function () {
273
+ var _start = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
274
+ var offer;
275
+ return _regenerator.default.wrap(function _callee$(_context) {
276
+ while (1) switch (_context.prev = _context.next) {
277
+ case 0:
278
+ if (this.pc) {
279
+ _context.next = 3;
280
+ break;
281
+ }
282
+ _loggerProxy.default.logger.warn("Reachability:ClusterReachability#start --> Error: peerConnection is undefined");
283
+ return _context.abrupt("return", this.result);
284
+ case 3:
285
+ // Initialize this.result as saying that nothing is reachable.
286
+ // It will get updated as we go along and successfully gather ICE candidates.
287
+ this.result.udp = {
288
+ result: this.numUdpUrls > 0 ? 'unreachable' : 'untested'
289
+ };
290
+ this.result.tcp = {
291
+ result: this.numTcpUrls > 0 ? 'unreachable' : 'untested'
292
+ };
293
+ _context.prev = 5;
294
+ _context.next = 8;
295
+ return this.pc.createOffer({
296
+ offerToReceiveAudio: true
297
+ });
298
+ case 8:
299
+ offer = _context.sent;
300
+ this.startTimestamp = performance.now();
301
+
302
+ // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer
303
+ // we just need to make this call to trigger the ICE gathering process
304
+ this.pc.setLocalDescription(offer);
305
+ _context.next = 13;
306
+ return this.gatherIceCandidates();
307
+ case 13:
308
+ _context.next = 18;
309
+ break;
310
+ case 15:
311
+ _context.prev = 15;
312
+ _context.t0 = _context["catch"](5);
313
+ _loggerProxy.default.logger.warn("Reachability:ClusterReachability#start --> Error: ", _context.t0);
314
+ case 18:
315
+ return _context.abrupt("return", this.result);
316
+ case 19:
317
+ case "end":
318
+ return _context.stop();
319
+ }
320
+ }, _callee, this, [[5, 15]]);
321
+ }));
322
+ function start() {
323
+ return _start.apply(this, arguments);
324
+ }
325
+ return start;
326
+ }()
327
+ /**
328
+ * Starts the process of gathering ICE candidates
329
+ *
330
+ * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached
331
+ */
332
+ }, {
333
+ key: "gatherIceCandidates",
334
+ value: function gatherIceCandidates() {
335
+ var _this4 = this;
336
+ var timeout = this.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT;
337
+ this.registerIceGatheringStateChangeListener();
338
+ this.registerIceCandidateListener();
339
+
340
+ // Set maximum timeout
341
+ setTimeout(function () {
342
+ var CLOSED = _constants.CONNECTION_STATE.CLOSED;
343
+
344
+ // Close any open peerConnections
345
+ if (_this4.pc.connectionState !== CLOSED) {
346
+ _this4.closePeerConnection();
347
+ _this4.finishReachabilityCheck();
348
+ }
349
+ }, timeout);
350
+ return this.defer.promise;
351
+ }
352
+ }]);
353
+ return ClusterReachability;
354
+ }();
355
+ exports.ClusterReachability = ClusterReachability;
356
+ //# sourceMappingURL=clusterReachability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","ClusterReachability","name","clusterInfo","isVideoMesh","numUdpUrls","udp","length","numTcpUrls","tcp","pc","createPeerConnection","defer","Defer","result","xtls","Math","round","performance","now","startTimestamp","cluster","udpIceServers","map","url","username","credential","urls","tcpIceServers","urlString","convertStunUrlToTurn","iceServers","iceCandidatePoolSize","iceTransportPolicy","config","buildPeerConnectionConfig","peerConnection","RTCPeerConnection","peerConnectionError","LoggerProxy","logger","warn","undefined","onicecandidate","onicegatheringstatechange","close","resolve","protocol","publicIP","clientMediaIPs","includes","push","COMPLETE","ICE_GATHERING_STATE","iceConnectionState","closePeerConnection","finishReachabilityCheck","every","latency","latencyInMilliseconds","log","e","CANDIDATE_TYPES","SERVER_REFLEXIVE","RELAY","candidate","type","storeLatencyResult","getElapsedTime","addPublicIP","address","haveWeGotAllResults","createOffer","offerToReceiveAudio","offer","setLocalDescription","gatherIceCandidates","timeout","registerIceGatheringStateChangeListener","registerIceCandidateListener","setTimeout","CLOSED","CONNECTION_STATE","connectionState","promise"],"sources":["clusterReachability.ts"],"sourcesContent":["import {Defer} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ClusterNode} from './request';\nimport {convertStunUrlToTurn} from './util';\n\nimport {ICE_GATHERING_STATE, CONNECTION_STATE} from '../constants';\n\nconst DEFAULT_TIMEOUT = 3000;\nconst VIDEO_MESH_TIMEOUT = 1000;\n\n// result for a specific transport protocol (like udp or tcp)\nexport type TransportResult = {\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds?: number; // amount of time it took to get the first ICE candidate\n clientMediaIPs?: string[];\n};\n\n// reachability result for a specific media cluster\nexport type ClusterReachabilityResult = {\n udp: TransportResult;\n tcp: TransportResult;\n xtls: TransportResult;\n};\n\n/**\n * A class that handles reachability checks for a single cluster.\n */\nexport class ClusterReachability {\n private numUdpUrls: number;\n private numTcpUrls: number;\n private result: ClusterReachabilityResult;\n private pc?: RTCPeerConnection;\n private defer: Defer; // this defer is resolved once reachability checks for this cluster are completed\n private startTimestamp: number;\n public readonly isVideoMesh: boolean;\n public readonly name;\n\n /**\n * Constructor for ClusterReachability\n * @param {string} name cluster name\n * @param {ClusterNode} clusterInfo information about the media cluster\n */\n constructor(name: string, clusterInfo: ClusterNode) {\n this.name = name;\n this.isVideoMesh = clusterInfo.isVideoMesh;\n this.numUdpUrls = clusterInfo.udp.length;\n this.numTcpUrls = clusterInfo.tcp.length;\n\n this.pc = this.createPeerConnection(clusterInfo);\n\n this.defer = new Defer();\n this.result = {\n udp: {\n result: 'untested',\n },\n tcp: {\n result: 'untested',\n },\n xtls: {\n result: 'untested',\n },\n };\n }\n\n /**\n * Gets total elapsed time, can be called only after start() is called\n * @returns {Number} Milliseconds\n */\n private getElapsedTime() {\n return Math.round(performance.now() - this.startTimestamp);\n }\n\n /**\n * Generate peerConnection config settings\n * @param {ClusterNode} cluster\n * @returns {RTCConfiguration} peerConnectionConfig\n */\n private buildPeerConnectionConfig(cluster: ClusterNode): RTCConfiguration {\n const udpIceServers = cluster.udp.map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n // STUN servers are contacted only using UDP, so in order to test TCP reachability\n // we pretend that Linus is a TURN server, because we can explicitly say \"transport=tcp\" in TURN urls.\n // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).\n const tcpIceServers = cluster.tcp.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurn(urlString, 'tcp')],\n };\n });\n\n return {\n iceServers: [...udpIceServers, ...tcpIceServers],\n iceCandidatePoolSize: 0,\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {ClusterNode} clusterInfo information about the media cluster\n * @returns {RTCPeerConnection} peerConnection\n */\n private createPeerConnection(clusterInfo: ClusterNode) {\n try {\n const config = this.buildPeerConnectionConfig(clusterInfo);\n\n const peerConnection = new RTCPeerConnection(config);\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.warn(\n `Reachability:index#createPeerConnection --> Error creating peerConnection:`,\n peerConnectionError\n );\n\n return undefined;\n }\n }\n\n /**\n * @returns {ClusterReachabilityResult} reachability result for this cluster\n */\n getResult() {\n return this.result;\n }\n\n /**\n * Closes the peerConnection\n *\n * @returns {void}\n */\n private closePeerConnection() {\n if (this.pc) {\n this.pc.onicecandidate = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.close();\n }\n }\n\n /**\n * Resolves the defer, indicating that reachability checks for this cluster are completed\n *\n * @returns {void}\n */\n private finishReachabilityCheck() {\n this.defer.resolve();\n }\n\n /**\n * Adds public IP (client media IPs)\n * @param {string} protocol\n * @param {string} publicIP\n * @returns {void}\n */\n private addPublicIP(protocol: 'udp' | 'tcp', publicIP?: string | null) {\n const result = this.result[protocol];\n\n if (publicIP) {\n if (result.clientMediaIPs) {\n if (!result.clientMediaIPs.includes(publicIP)) {\n result.clientMediaIPs.push(publicIP);\n }\n } else {\n result.clientMediaIPs = [publicIP];\n }\n }\n }\n\n /**\n * Registers a listener for the iceGatheringStateChange event\n *\n * @returns {void}\n */\n private registerIceGatheringStateChangeListener() {\n this.pc.onicegatheringstatechange = () => {\n const {COMPLETE} = ICE_GATHERING_STATE;\n\n if (this.pc.iceConnectionState === COMPLETE) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n };\n }\n\n /**\n * Checks if we have the results for all the protocols (UDP and TCP)\n *\n * @returns {boolean} true if we have all results, false otherwise\n */\n private haveWeGotAllResults(): boolean {\n return ['udp', 'tcp'].every(\n (protocol) =>\n this.result[protocol].result === 'reachable' || this.result[protocol].result === 'untested'\n );\n }\n\n /**\n * Stores the latency in the result for the given protocol and marks it as reachable\n *\n * @param {string} protocol\n * @param {number} latency\n * @returns {void}\n */\n private storeLatencyResult(protocol: 'udp' | 'tcp', latency: number) {\n const result = this.result[protocol];\n\n if (result.latencyInMilliseconds === undefined) {\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#storeLatencyResult --> Successfully reached ${this.name} over ${protocol}: ${latency}ms`\n );\n result.latencyInMilliseconds = latency;\n result.result = 'reachable';\n }\n }\n\n /**\n * Registers a listener for the icecandidate event\n *\n * @returns {void}\n */\n private registerIceCandidateListener() {\n this.pc.onicecandidate = (e) => {\n const CANDIDATE_TYPES = {\n SERVER_REFLEXIVE: 'srflx',\n RELAY: 'relay',\n };\n\n if (e.candidate) {\n if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {\n this.storeLatencyResult('udp', this.getElapsedTime());\n this.addPublicIP('udp', e.candidate.address);\n }\n\n if (e.candidate.type === CANDIDATE_TYPES.RELAY) {\n this.storeLatencyResult('tcp', this.getElapsedTime());\n // we don't add public IP for TCP, because in the case of relay candidates\n // e.candidate.address is the TURN server address, not the client's public IP\n }\n\n if (this.haveWeGotAllResults()) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n };\n }\n\n /**\n * Starts the process of doing UDP and TCP reachability checks on the media cluster.\n * XTLS reachability checking is not supported.\n *\n * @returns {Promise}\n */\n async start(): Promise<ClusterReachabilityResult> {\n if (!this.pc) {\n LoggerProxy.logger.warn(\n `Reachability:ClusterReachability#start --> Error: peerConnection is undefined`\n );\n\n return this.result;\n }\n\n // Initialize this.result as saying that nothing is reachable.\n // It will get updated as we go along and successfully gather ICE candidates.\n this.result.udp = {\n result: this.numUdpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.tcp = {\n result: this.numTcpUrls > 0 ? 'unreachable' : 'untested',\n };\n\n try {\n const offer = await this.pc.createOffer({offerToReceiveAudio: true});\n\n this.startTimestamp = performance.now();\n\n // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer\n // we just need to make this call to trigger the ICE gathering process\n this.pc.setLocalDescription(offer);\n\n await this.gatherIceCandidates();\n } catch (error) {\n LoggerProxy.logger.warn(`Reachability:ClusterReachability#start --> Error: `, error);\n }\n\n return this.result;\n }\n\n /**\n * Starts the process of gathering ICE candidates\n *\n * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached\n */\n private gatherIceCandidates() {\n const timeout = this.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT;\n\n this.registerIceGatheringStateChangeListener();\n this.registerIceCandidateListener();\n\n // Set maximum timeout\n setTimeout(() => {\n const {CLOSED} = CONNECTION_STATE;\n\n // Close any open peerConnections\n if (this.pc.connectionState !== CLOSED) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }, timeout);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}