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

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 (576) hide show
  1. package/README.md +45 -7
  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/parameter.js +5 -33
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +10 -24
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +9 -23
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reconnection-in-progress.js +0 -17
  45. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  46. package/dist/common/errors/reconnection.js +10 -24
  47. package/dist/common/errors/reconnection.js.map +1 -1
  48. package/dist/common/errors/stats.js +10 -24
  49. package/dist/common/errors/stats.js.map +1 -1
  50. package/dist/common/errors/webex-errors.js +9 -43
  51. package/dist/common/errors/webex-errors.js.map +1 -1
  52. package/dist/common/errors/webex-meetings-error.js +5 -25
  53. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  54. package/dist/common/events/events-scope.js +0 -22
  55. package/dist/common/events/events-scope.js.map +1 -1
  56. package/dist/common/events/events.js +0 -23
  57. package/dist/common/events/events.js.map +1 -1
  58. package/dist/common/events/trigger-proxy.js +0 -12
  59. package/dist/common/events/trigger-proxy.js.map +1 -1
  60. package/dist/common/events/util.js +0 -15
  61. package/dist/common/events/util.js.map +1 -1
  62. package/dist/common/logs/logger-config.js +0 -4
  63. package/dist/common/logs/logger-config.js.map +1 -1
  64. package/dist/common/logs/logger-proxy.js +1 -8
  65. package/dist/common/logs/logger-proxy.js.map +1 -1
  66. package/dist/common/logs/request.js +37 -60
  67. package/dist/common/logs/request.js.map +1 -1
  68. package/dist/common/queue.js +28 -23
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.js +8 -13
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.js +250 -66
  73. package/dist/constants.js.map +1 -1
  74. package/dist/controls-options-manager/constants.js +14 -0
  75. package/dist/controls-options-manager/constants.js.map +1 -0
  76. package/dist/controls-options-manager/enums.js +27 -0
  77. package/dist/controls-options-manager/enums.js.map +1 -0
  78. package/dist/controls-options-manager/index.js +297 -0
  79. package/dist/controls-options-manager/index.js.map +1 -0
  80. package/dist/controls-options-manager/types.js +7 -0
  81. package/dist/controls-options-manager/types.js.map +1 -0
  82. package/dist/controls-options-manager/util.js +319 -0
  83. package/dist/controls-options-manager/util.js.map +1 -0
  84. package/dist/index.js +108 -17
  85. package/dist/index.js.map +1 -1
  86. package/dist/interpretation/collection.js +23 -0
  87. package/dist/interpretation/collection.js.map +1 -0
  88. package/dist/interpretation/index.js +366 -0
  89. package/dist/interpretation/index.js.map +1 -0
  90. package/dist/interpretation/siLanguage.js +25 -0
  91. package/dist/interpretation/siLanguage.js.map +1 -0
  92. package/dist/locus-info/controlsUtils.js +101 -29
  93. package/dist/locus-info/controlsUtils.js.map +1 -1
  94. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  95. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  96. package/dist/locus-info/fullState.js +0 -15
  97. package/dist/locus-info/fullState.js.map +1 -1
  98. package/dist/locus-info/hostUtils.js +4 -12
  99. package/dist/locus-info/hostUtils.js.map +1 -1
  100. package/dist/locus-info/index.js +532 -240
  101. package/dist/locus-info/index.js.map +1 -1
  102. package/dist/locus-info/infoUtils.js +3 -37
  103. package/dist/locus-info/infoUtils.js.map +1 -1
  104. package/dist/locus-info/mediaSharesUtils.js +54 -38
  105. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  106. package/dist/locus-info/parser.js +284 -154
  107. package/dist/locus-info/parser.js.map +1 -1
  108. package/dist/locus-info/selfUtils.js +110 -92
  109. package/dist/locus-info/selfUtils.js.map +1 -1
  110. package/dist/media/index.js +95 -226
  111. package/dist/media/index.js.map +1 -1
  112. package/dist/media/properties.js +99 -194
  113. package/dist/media/properties.js.map +1 -1
  114. package/dist/media/util.js +2 -9
  115. package/dist/media/util.js.map +1 -1
  116. package/dist/mediaQualityMetrics/config.js +505 -495
  117. package/dist/mediaQualityMetrics/config.js.map +1 -1
  118. package/dist/meeting/in-meeting-actions.js +83 -14
  119. package/dist/meeting/in-meeting-actions.js.map +1 -1
  120. package/dist/meeting/index.js +3478 -3563
  121. package/dist/meeting/index.js.map +1 -1
  122. package/dist/meeting/locusMediaRequest.js +291 -0
  123. package/dist/meeting/locusMediaRequest.js.map +1 -0
  124. package/dist/meeting/muteState.js +247 -183
  125. package/dist/meeting/muteState.js.map +1 -1
  126. package/dist/meeting/request.js +344 -344
  127. package/dist/meeting/request.js.map +1 -1
  128. package/dist/meeting/request.type.js +7 -0
  129. package/dist/meeting/request.type.js.map +1 -0
  130. package/dist/meeting/state.js +21 -31
  131. package/dist/meeting/state.js.map +1 -1
  132. package/dist/meeting/util.js +529 -588
  133. package/dist/meeting/util.js.map +1 -1
  134. package/dist/meeting-info/collection.js +6 -25
  135. package/dist/meeting-info/collection.js.map +1 -1
  136. package/dist/meeting-info/index.js +62 -39
  137. package/dist/meeting-info/index.js.map +1 -1
  138. package/dist/meeting-info/meeting-info-v2.js +328 -283
  139. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  140. package/dist/meeting-info/request.js +3 -15
  141. package/dist/meeting-info/request.js.map +1 -1
  142. package/dist/meeting-info/util.js +98 -183
  143. package/dist/meeting-info/util.js.map +1 -1
  144. package/dist/meeting-info/utilv2.js +156 -232
  145. package/dist/meeting-info/utilv2.js.map +1 -1
  146. package/dist/meetings/collection.js +26 -19
  147. package/dist/meetings/collection.js.map +1 -1
  148. package/dist/meetings/index.js +795 -574
  149. package/dist/meetings/index.js.map +1 -1
  150. package/dist/meetings/meetings.types.js +7 -0
  151. package/dist/meetings/meetings.types.js.map +1 -0
  152. package/dist/meetings/request.js +26 -41
  153. package/dist/meetings/request.js.map +1 -1
  154. package/dist/meetings/util.js +186 -155
  155. package/dist/meetings/util.js.map +1 -1
  156. package/dist/member/index.js +126 -85
  157. package/dist/member/index.js.map +1 -1
  158. package/dist/member/types.js +25 -0
  159. package/dist/member/types.js.map +1 -0
  160. package/dist/member/util.js +147 -88
  161. package/dist/member/util.js.map +1 -1
  162. package/dist/members/collection.js +13 -12
  163. package/dist/members/collection.js.map +1 -1
  164. package/dist/members/index.js +178 -204
  165. package/dist/members/index.js.map +1 -1
  166. package/dist/members/request.js +113 -68
  167. package/dist/members/request.js.map +1 -1
  168. package/dist/members/types.js +15 -0
  169. package/dist/members/types.js.map +1 -0
  170. package/dist/members/util.js +314 -260
  171. package/dist/members/util.js.map +1 -1
  172. package/dist/metrics/constants.js +4 -7
  173. package/dist/metrics/constants.js.map +1 -1
  174. package/dist/metrics/index.js +11 -558
  175. package/dist/metrics/index.js.map +1 -1
  176. package/dist/multistream/mediaRequestManager.js +264 -50
  177. package/dist/multistream/mediaRequestManager.js.map +1 -1
  178. package/dist/multistream/receiveSlot.js +58 -65
  179. package/dist/multistream/receiveSlot.js.map +1 -1
  180. package/dist/multistream/receiveSlotManager.js +76 -95
  181. package/dist/multistream/receiveSlotManager.js.map +1 -1
  182. package/dist/multistream/remoteMedia.js +62 -76
  183. package/dist/multistream/remoteMedia.js.map +1 -1
  184. package/dist/multistream/remoteMediaGroup.js +66 -43
  185. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  186. package/dist/multistream/remoteMediaManager.js +502 -442
  187. package/dist/multistream/remoteMediaManager.js.map +1 -1
  188. package/dist/networkQualityMonitor/index.js +40 -59
  189. package/dist/networkQualityMonitor/index.js.map +1 -1
  190. package/dist/personal-meeting-room/index.js +21 -45
  191. package/dist/personal-meeting-room/index.js.map +1 -1
  192. package/dist/personal-meeting-room/request.js +1 -31
  193. package/dist/personal-meeting-room/request.js.map +1 -1
  194. package/dist/personal-meeting-room/util.js +0 -13
  195. package/dist/personal-meeting-room/util.js.map +1 -1
  196. package/dist/reachability/index.js +192 -191
  197. package/dist/reachability/index.js.map +1 -1
  198. package/dist/reachability/request.js +15 -23
  199. package/dist/reachability/request.js.map +1 -1
  200. package/dist/reactions/constants.js +13 -0
  201. package/dist/reactions/constants.js.map +1 -0
  202. package/dist/reactions/reactions.js +109 -0
  203. package/dist/reactions/reactions.js.map +1 -0
  204. package/dist/reactions/reactions.type.js +36 -0
  205. package/dist/reactions/reactions.type.js.map +1 -0
  206. package/dist/reconnection-manager/index.js +384 -476
  207. package/dist/reconnection-manager/index.js.map +1 -1
  208. package/dist/recording-controller/enums.js +17 -0
  209. package/dist/recording-controller/enums.js.map +1 -0
  210. package/dist/recording-controller/index.js +363 -0
  211. package/dist/recording-controller/index.js.map +1 -0
  212. package/dist/recording-controller/util.js +64 -0
  213. package/dist/recording-controller/util.js.map +1 -0
  214. package/dist/roap/index.js +58 -91
  215. package/dist/roap/index.js.map +1 -1
  216. package/dist/roap/request.js +137 -135
  217. package/dist/roap/request.js.map +1 -1
  218. package/dist/roap/turnDiscovery.js +148 -100
  219. package/dist/roap/turnDiscovery.js.map +1 -1
  220. package/dist/rtcMetrics/constants.js +12 -0
  221. package/dist/rtcMetrics/constants.js.map +1 -0
  222. package/dist/rtcMetrics/index.js +115 -0
  223. package/dist/rtcMetrics/index.js.map +1 -0
  224. package/dist/statsAnalyzer/global.js +1 -95
  225. package/dist/statsAnalyzer/global.js.map +1 -1
  226. package/dist/statsAnalyzer/index.js +385 -460
  227. package/dist/statsAnalyzer/index.js.map +1 -1
  228. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  229. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  230. package/dist/transcription/index.js +22 -47
  231. package/dist/transcription/index.js.map +1 -1
  232. package/dist/types/annotation/annotation.types.d.ts +42 -0
  233. package/dist/types/annotation/constants.d.ts +31 -0
  234. package/dist/types/annotation/index.d.ts +117 -0
  235. package/dist/types/breakouts/breakout.d.ts +8 -0
  236. package/dist/types/breakouts/collection.d.ts +5 -0
  237. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  238. package/dist/types/breakouts/events.d.ts +8 -0
  239. package/dist/types/breakouts/index.d.ts +5 -0
  240. package/dist/types/breakouts/request.d.ts +22 -0
  241. package/dist/types/breakouts/utils.d.ts +15 -0
  242. package/dist/types/common/browser-detection.d.ts +9 -0
  243. package/dist/types/common/collection.d.ts +48 -0
  244. package/dist/types/common/config.d.ts +2 -0
  245. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  246. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  247. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  248. package/dist/types/common/errors/media.d.ts +15 -0
  249. package/dist/types/common/errors/parameter.d.ts +15 -0
  250. package/dist/types/common/errors/password-error.d.ts +15 -0
  251. package/dist/types/common/errors/permission.d.ts +14 -0
  252. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  253. package/dist/types/common/errors/reconnection.d.ts +15 -0
  254. package/dist/types/common/errors/stats.d.ts +15 -0
  255. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  256. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  257. package/dist/types/common/events/events-scope.d.ts +17 -0
  258. package/dist/types/common/events/events.d.ts +12 -0
  259. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  260. package/dist/types/common/events/util.d.ts +2 -0
  261. package/dist/types/common/logs/logger-config.d.ts +2 -0
  262. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  263. package/dist/types/common/logs/request.d.ts +34 -0
  264. package/dist/types/common/queue.d.ts +34 -0
  265. package/dist/types/config.d.ts +72 -0
  266. package/dist/types/constants.d.ts +1016 -0
  267. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  268. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  269. package/dist/types/controls-options-manager/index.d.ts +136 -0
  270. package/dist/types/controls-options-manager/types.d.ts +43 -0
  271. package/dist/types/controls-options-manager/util.d.ts +1 -0
  272. package/dist/types/index.d.ts +7 -0
  273. package/dist/types/interpretation/collection.d.ts +5 -0
  274. package/dist/types/interpretation/index.d.ts +5 -0
  275. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  276. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  277. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  278. package/dist/types/locus-info/fullState.d.ts +2 -0
  279. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  280. package/dist/types/locus-info/index.d.ts +322 -0
  281. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  282. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  283. package/dist/types/locus-info/parser.d.ts +271 -0
  284. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  285. package/dist/types/media/index.d.ts +34 -0
  286. package/dist/types/media/properties.d.ts +93 -0
  287. package/dist/types/media/util.d.ts +2 -0
  288. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  289. package/dist/types/meeting/in-meeting-actions.d.ts +153 -0
  290. package/dist/types/meeting/index.d.ts +1471 -0
  291. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  292. package/dist/types/meeting/muteState.d.ts +184 -0
  293. package/dist/types/meeting/request.d.ts +257 -0
  294. package/dist/types/meeting/request.type.d.ts +11 -0
  295. package/dist/types/meeting/state.d.ts +9 -0
  296. package/dist/types/meeting/util.d.ts +78 -0
  297. package/dist/types/meeting-info/collection.d.ts +20 -0
  298. package/dist/types/meeting-info/index.d.ts +62 -0
  299. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  300. package/dist/types/meeting-info/request.d.ts +22 -0
  301. package/dist/types/meeting-info/util.d.ts +2 -0
  302. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  303. package/dist/types/meetings/collection.d.ts +31 -0
  304. package/dist/types/meetings/index.d.ts +367 -0
  305. package/dist/types/meetings/meetings.types.d.ts +4 -0
  306. package/dist/types/meetings/request.d.ts +27 -0
  307. package/dist/types/meetings/util.d.ts +18 -0
  308. package/dist/types/member/index.d.ts +159 -0
  309. package/dist/types/member/types.d.ts +32 -0
  310. package/dist/types/member/util.d.ts +2 -0
  311. package/dist/types/members/collection.d.ts +29 -0
  312. package/dist/types/members/index.d.ts +353 -0
  313. package/dist/types/members/request.d.ts +114 -0
  314. package/dist/types/members/types.d.ts +24 -0
  315. package/dist/types/members/util.d.ts +210 -0
  316. package/dist/types/metrics/constants.d.ts +55 -0
  317. package/dist/types/metrics/index.d.ts +45 -0
  318. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  319. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  320. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  321. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  322. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  323. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  324. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  325. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  326. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  327. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  328. package/dist/types/reachability/index.d.ts +152 -0
  329. package/dist/types/reachability/request.d.ts +37 -0
  330. package/dist/types/reactions/constants.d.ts +3 -0
  331. package/dist/types/reactions/reactions.d.ts +4 -0
  332. package/dist/types/reactions/reactions.type.d.ts +52 -0
  333. package/dist/types/reconnection-manager/index.d.ts +126 -0
  334. package/dist/types/recording-controller/enums.d.ts +7 -0
  335. package/dist/types/recording-controller/index.d.ts +208 -0
  336. package/dist/types/recording-controller/util.d.ts +14 -0
  337. package/dist/types/roap/index.d.ts +77 -0
  338. package/dist/types/roap/request.d.ts +36 -0
  339. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  340. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  341. package/dist/types/rtcMetrics/index.d.ts +46 -0
  342. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  343. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  344. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  345. package/dist/types/transcription/index.d.ts +64 -0
  346. package/internal-README.md +7 -6
  347. package/package.json +29 -21
  348. package/src/annotation/annotation.types.ts +50 -0
  349. package/src/annotation/constants.ts +36 -0
  350. package/src/annotation/index.ts +328 -0
  351. package/src/breakouts/README.md +220 -0
  352. package/src/breakouts/breakout.ts +188 -0
  353. package/src/breakouts/collection.ts +19 -0
  354. package/src/breakouts/edit-lock-error.ts +25 -0
  355. package/src/breakouts/events.ts +56 -0
  356. package/src/breakouts/index.ts +925 -0
  357. package/src/breakouts/request.ts +55 -0
  358. package/src/breakouts/utils.ts +57 -0
  359. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  360. package/src/common/collection.ts +9 -7
  361. package/src/common/{config.js → config.ts} +1 -1
  362. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  363. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  364. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  365. package/src/common/errors/{media.js → media.ts} +11 -7
  366. package/src/common/errors/parameter.ts +11 -7
  367. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  368. package/src/common/errors/{permission.js → permission.ts} +10 -6
  369. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  370. package/src/common/errors/{stats.js → stats.ts} +11 -7
  371. package/src/common/errors/{webex-errors.js → webex-errors.ts} +14 -9
  372. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  373. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  374. package/src/common/events/{events.js → events.ts} +5 -1
  375. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  376. package/src/common/events/{util.js → util.ts} +2 -3
  377. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  378. package/src/common/logs/logger-proxy.ts +44 -0
  379. package/src/common/logs/{request.js → request.ts} +22 -9
  380. package/src/common/queue.ts +22 -9
  381. package/src/{config.js → config.ts} +17 -17
  382. package/src/constants.ts +197 -22
  383. package/src/controls-options-manager/constants.ts +5 -0
  384. package/src/controls-options-manager/enums.ts +18 -0
  385. package/src/controls-options-manager/index.ts +278 -0
  386. package/src/controls-options-manager/types.ts +59 -0
  387. package/src/controls-options-manager/util.ts +300 -0
  388. package/src/index.ts +39 -0
  389. package/src/interpretation/README.md +60 -0
  390. package/src/interpretation/collection.ts +19 -0
  391. package/src/interpretation/index.ts +332 -0
  392. package/src/interpretation/siLanguage.ts +18 -0
  393. package/src/locus-info/controlsUtils.ts +222 -0
  394. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  395. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  396. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  397. package/src/locus-info/{index.js → index.ts} +518 -111
  398. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  399. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +65 -17
  400. package/src/locus-info/{parser.js → parser.ts} +271 -98
  401. package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
  402. package/src/media/index.ts +456 -0
  403. package/src/media/{properties.js → properties.ts} +80 -102
  404. package/src/media/{util.js → util.ts} +2 -2
  405. package/src/mediaQualityMetrics/config.ts +384 -0
  406. package/src/meeting/in-meeting-actions.ts +171 -3
  407. package/src/meeting/index.ts +7070 -0
  408. package/src/meeting/locusMediaRequest.ts +309 -0
  409. package/src/meeting/muteState.ts +450 -0
  410. package/src/meeting/{request.js → request.ts} +354 -214
  411. package/src/meeting/request.type.ts +13 -0
  412. package/src/meeting/{state.js → state.ts} +50 -35
  413. package/src/meeting/util.ts +615 -0
  414. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  415. package/src/meeting-info/index.ts +183 -0
  416. package/src/meeting-info/meeting-info-v2.ts +407 -0
  417. package/src/meeting-info/{request.js → request.ts} +14 -4
  418. package/src/meeting-info/{util.js → util.ts} +60 -51
  419. package/src/meeting-info/{utilv2.js → utilv2.ts} +77 -60
  420. package/src/meetings/{collection.js → collection.ts} +26 -3
  421. package/src/meetings/index.ts +1467 -0
  422. package/src/meetings/meetings.types.ts +12 -0
  423. package/src/meetings/{request.js → request.ts} +34 -25
  424. package/src/meetings/{util.js → util.ts} +137 -36
  425. package/src/member/{index.js → index.ts} +151 -56
  426. package/src/member/types.ts +38 -0
  427. package/src/member/util.ts +383 -0
  428. package/src/members/{collection.js → collection.ts} +10 -2
  429. package/src/members/{index.js → index.ts} +323 -145
  430. package/src/members/request.ts +255 -0
  431. package/src/members/types.ts +28 -0
  432. package/src/members/util.ts +339 -0
  433. package/src/metrics/{constants.js → constants.ts} +2 -6
  434. package/src/metrics/index.ts +73 -0
  435. package/src/multistream/mediaRequestManager.ts +337 -61
  436. package/src/multistream/receiveSlot.ts +69 -26
  437. package/src/multistream/receiveSlotManager.ts +66 -42
  438. package/src/multistream/remoteMedia.ts +40 -5
  439. package/src/multistream/remoteMediaGroup.ts +63 -3
  440. package/src/multistream/remoteMediaManager.ts +263 -66
  441. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  442. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  443. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  444. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  445. package/src/reachability/{index.js → index.ts} +157 -94
  446. package/src/reachability/request.ts +46 -35
  447. package/src/reactions/constants.ts +4 -0
  448. package/src/reactions/reactions.ts +104 -0
  449. package/src/reactions/reactions.type.ts +62 -0
  450. package/src/reconnection-manager/{index.js → index.ts} +254 -136
  451. package/src/recording-controller/enums.ts +8 -0
  452. package/src/recording-controller/index.ts +333 -0
  453. package/src/recording-controller/util.ts +75 -0
  454. package/src/roap/{index.js → index.ts} +86 -78
  455. package/src/roap/request.ts +163 -0
  456. package/src/roap/turnDiscovery.ts +111 -49
  457. package/src/rtcMetrics/constants.ts +3 -0
  458. package/src/rtcMetrics/index.ts +96 -0
  459. package/src/statsAnalyzer/global.ts +37 -0
  460. package/src/statsAnalyzer/index.ts +1272 -0
  461. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  462. package/src/transcription/{index.js → index.ts} +46 -39
  463. package/test/integration/spec/converged-space-meetings.js +233 -0
  464. package/test/integration/spec/journey.js +804 -526
  465. package/test/integration/spec/space-meeting.js +391 -204
  466. package/test/integration/spec/transcription.js +7 -8
  467. package/test/unit/spec/annotation/index.ts +418 -0
  468. package/test/unit/spec/breakouts/breakout.ts +237 -0
  469. package/test/unit/spec/breakouts/collection.ts +15 -0
  470. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  471. package/test/unit/spec/breakouts/events.ts +89 -0
  472. package/test/unit/spec/breakouts/index.ts +1790 -0
  473. package/test/unit/spec/breakouts/request.ts +104 -0
  474. package/test/unit/spec/breakouts/utils.js +72 -0
  475. package/test/unit/spec/common/browser-detection.js +9 -28
  476. package/test/unit/spec/common/queue.js +31 -2
  477. package/test/unit/spec/controls-options-manager/index.js +287 -0
  478. package/test/unit/spec/controls-options-manager/util.js +582 -0
  479. package/test/unit/spec/fixture/locus.js +93 -90
  480. package/test/unit/spec/interpretation/collection.ts +15 -0
  481. package/test/unit/spec/interpretation/index.ts +589 -0
  482. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  483. package/test/unit/spec/locus-info/controlsUtils.js +325 -32
  484. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  485. package/test/unit/spec/locus-info/index.js +1176 -18
  486. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  487. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  488. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  489. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  490. package/test/unit/spec/locus-info/parser.js +65 -31
  491. package/test/unit/spec/locus-info/selfConstant.js +120 -103
  492. package/test/unit/spec/locus-info/selfUtils.js +296 -12
  493. package/test/unit/spec/media/index.ts +162 -68
  494. package/test/unit/spec/media/properties.ts +9 -9
  495. package/test/unit/spec/meeting/in-meeting-actions.ts +82 -3
  496. package/test/unit/spec/meeting/index.js +4569 -1773
  497. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  498. package/test/unit/spec/meeting/muteState.js +382 -211
  499. package/test/unit/spec/meeting/request.js +444 -78
  500. package/test/unit/spec/meeting/utils.js +517 -192
  501. package/test/unit/spec/meeting-info/index.js +181 -0
  502. package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
  503. package/test/unit/spec/meeting-info/request.js +7 -9
  504. package/test/unit/spec/meeting-info/util.js +11 -12
  505. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  506. package/test/unit/spec/meetings/collection.js +15 -1
  507. package/test/unit/spec/meetings/index.js +1254 -330
  508. package/test/unit/spec/meetings/utils.js +220 -14
  509. package/test/unit/spec/member/index.js +58 -5
  510. package/test/unit/spec/member/util.js +494 -26
  511. package/test/unit/spec/members/index.js +423 -55
  512. package/test/unit/spec/members/request.js +228 -40
  513. package/test/unit/spec/members/utils.js +191 -4
  514. package/test/unit/spec/metrics/index.js +12 -66
  515. package/test/unit/spec/multistream/mediaRequestManager.ts +1013 -106
  516. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  517. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  518. package/test/unit/spec/multistream/remoteMedia.ts +40 -2
  519. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  520. package/test/unit/spec/multistream/remoteMediaManager.ts +730 -65
  521. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  522. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  523. package/test/unit/spec/reachability/index.ts +176 -27
  524. package/test/unit/spec/reachability/request.js +66 -0
  525. package/test/unit/spec/reconnection-manager/index.js +155 -9
  526. package/test/unit/spec/recording-controller/index.js +307 -0
  527. package/test/unit/spec/recording-controller/util.js +229 -0
  528. package/test/unit/spec/roap/index.ts +28 -52
  529. package/test/unit/spec/roap/request.ts +225 -0
  530. package/test/unit/spec/roap/turnDiscovery.ts +92 -50
  531. package/test/unit/spec/rtcMetrics/index.ts +60 -0
  532. package/test/unit/spec/stats-analyzer/index.js +116 -60
  533. package/test/utils/cmr.js +44 -42
  534. package/test/utils/constants.js +9 -0
  535. package/test/utils/integrationTestUtils.js +46 -0
  536. package/test/utils/testUtils.js +63 -99
  537. package/test/utils/webex-config.js +22 -18
  538. package/test/utils/webex-test-users.js +57 -50
  539. package/tsconfig.json +6 -0
  540. package/dist/media/internal-media-core-wrapper.js +0 -22
  541. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  542. package/dist/meeting/effectsState.js +0 -327
  543. package/dist/meeting/effectsState.js.map +0 -1
  544. package/dist/metrics/config.js +0 -301
  545. package/dist/metrics/config.js.map +0 -1
  546. package/dist/multistream/multistreamMedia.js +0 -116
  547. package/dist/multistream/multistreamMedia.js.map +0 -1
  548. package/dist/peer-connection-manager/util.js +0 -124
  549. package/dist/peer-connection-manager/util.js.map +0 -1
  550. package/src/common/logs/logger-proxy.js +0 -33
  551. package/src/index.js +0 -15
  552. package/src/locus-info/controlsUtils.js +0 -102
  553. package/src/media/index.js +0 -459
  554. package/src/media/internal-media-core-wrapper.ts +0 -9
  555. package/src/mediaQualityMetrics/config.js +0 -382
  556. package/src/meeting/effectsState.js +0 -205
  557. package/src/meeting/index.js +0 -6284
  558. package/src/meeting/muteState.js +0 -318
  559. package/src/meeting/util.js +0 -506
  560. package/src/meeting-info/index.js +0 -131
  561. package/src/meeting-info/meeting-info-v2.js +0 -255
  562. package/src/meetings/index.js +0 -1015
  563. package/src/member/util.js +0 -254
  564. package/src/members/request.js +0 -131
  565. package/src/members/util.js +0 -258
  566. package/src/metrics/config.js +0 -324
  567. package/src/metrics/index.js +0 -530
  568. package/src/multistream/multistreamMedia.ts +0 -92
  569. package/src/peer-connection-manager/util.ts +0 -117
  570. package/src/roap/request.js +0 -127
  571. package/src/statsAnalyzer/global.js +0 -133
  572. package/src/statsAnalyzer/index.js +0 -1006
  573. package/src/statsAnalyzer/mqaUtil.js +0 -173
  574. package/test/unit/spec/meeting/effectsState.js +0 -291
  575. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  576. /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;