@webex/plugin-meetings 3.0.0-beta.7 → 3.0.0-beta.71

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