@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.131

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 (519) hide show
  1. package/README.md +45 -1
  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 +48 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +355 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +193 -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 +43 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +994 -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 +5 -26
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +5 -26
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +6 -27
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +5 -26
  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 +5 -26
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +4 -25
  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 +5 -26
  47. package/dist/common/errors/reconnection.js.map +1 -1
  48. package/dist/common/errors/stats.js +5 -26
  49. package/dist/common/errors/stats.js.map +1 -1
  50. package/dist/common/errors/webex-errors.js +6 -41
  51. package/dist/common/errors/webex-errors.js.map +1 -1
  52. package/dist/common/errors/webex-meetings-error.js +1 -24
  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 +35 -61
  67. package/dist/common/logs/request.js.map +1 -1
  68. package/dist/common/queue.js +4 -14
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.js +6 -6
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.js +203 -53
  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 +294 -0
  83. package/dist/controls-options-manager/util.js.map +1 -0
  84. package/dist/index.js +72 -17
  85. package/dist/index.js.map +1 -1
  86. package/dist/locus-info/controlsUtils.js +100 -29
  87. package/dist/locus-info/controlsUtils.js.map +1 -1
  88. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  89. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  90. package/dist/locus-info/fullState.js +0 -15
  91. package/dist/locus-info/fullState.js.map +1 -1
  92. package/dist/locus-info/hostUtils.js +4 -12
  93. package/dist/locus-info/hostUtils.js.map +1 -1
  94. package/dist/locus-info/index.js +406 -216
  95. package/dist/locus-info/index.js.map +1 -1
  96. package/dist/locus-info/infoUtils.js +0 -38
  97. package/dist/locus-info/infoUtils.js.map +1 -1
  98. package/dist/locus-info/mediaSharesUtils.js +54 -38
  99. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  100. package/dist/locus-info/parser.js +88 -123
  101. package/dist/locus-info/parser.js.map +1 -1
  102. package/dist/locus-info/selfUtils.js +105 -91
  103. package/dist/locus-info/selfUtils.js.map +1 -1
  104. package/dist/media/index.js +55 -165
  105. package/dist/media/index.js.map +1 -1
  106. package/dist/media/properties.js +71 -117
  107. package/dist/media/properties.js.map +1 -1
  108. package/dist/media/util.js +2 -9
  109. package/dist/media/util.js.map +1 -1
  110. package/dist/mediaQualityMetrics/config.js +505 -495
  111. package/dist/mediaQualityMetrics/config.js.map +1 -1
  112. package/dist/meeting/in-meeting-actions.js +77 -14
  113. package/dist/meeting/in-meeting-actions.js.map +1 -1
  114. package/dist/meeting/index.js +2603 -2462
  115. package/dist/meeting/index.js.map +1 -1
  116. package/dist/meeting/locusMediaRequest.js +291 -0
  117. package/dist/meeting/locusMediaRequest.js.map +1 -0
  118. package/dist/meeting/muteState.js +292 -138
  119. package/dist/meeting/muteState.js.map +1 -1
  120. package/dist/meeting/request.js +315 -336
  121. package/dist/meeting/request.js.map +1 -1
  122. package/dist/meeting/request.type.js +7 -0
  123. package/dist/meeting/request.type.js.map +1 -0
  124. package/dist/meeting/state.js +21 -31
  125. package/dist/meeting/state.js.map +1 -1
  126. package/dist/meeting/util.js +463 -583
  127. package/dist/meeting/util.js.map +1 -1
  128. package/dist/meeting-info/collection.js +3 -25
  129. package/dist/meeting-info/collection.js.map +1 -1
  130. package/dist/meeting-info/index.js +10 -33
  131. package/dist/meeting-info/index.js.map +1 -1
  132. package/dist/meeting-info/meeting-info-v2.js +305 -286
  133. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  134. package/dist/meeting-info/request.js +1 -16
  135. package/dist/meeting-info/request.js.map +1 -1
  136. package/dist/meeting-info/util.js +98 -183
  137. package/dist/meeting-info/util.js.map +1 -1
  138. package/dist/meeting-info/utilv2.js +156 -232
  139. package/dist/meeting-info/utilv2.js.map +1 -1
  140. package/dist/meetings/collection.js +24 -20
  141. package/dist/meetings/collection.js.map +1 -1
  142. package/dist/meetings/index.js +692 -593
  143. package/dist/meetings/index.js.map +1 -1
  144. package/dist/meetings/request.js +23 -42
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +186 -155
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.js +89 -88
  149. package/dist/member/index.js.map +1 -1
  150. package/dist/member/types.js +15 -0
  151. package/dist/member/types.js.map +1 -0
  152. package/dist/member/util.js +101 -69
  153. package/dist/member/util.js.map +1 -1
  154. package/dist/members/collection.js +12 -12
  155. package/dist/members/collection.js.map +1 -1
  156. package/dist/members/index.js +166 -205
  157. package/dist/members/index.js.map +1 -1
  158. package/dist/members/request.js +120 -85
  159. package/dist/members/request.js.map +1 -1
  160. package/dist/members/types.js +15 -0
  161. package/dist/members/types.js.map +1 -0
  162. package/dist/members/util.js +314 -260
  163. package/dist/members/util.js.map +1 -1
  164. package/dist/metrics/config.js +50 -16
  165. package/dist/metrics/config.js.map +1 -1
  166. package/dist/metrics/constants.js +4 -7
  167. package/dist/metrics/constants.js.map +1 -1
  168. package/dist/metrics/index.js +93 -162
  169. package/dist/metrics/index.js.map +1 -1
  170. package/dist/multistream/mediaRequestManager.js +167 -50
  171. package/dist/multistream/mediaRequestManager.js.map +1 -1
  172. package/dist/multistream/receiveSlot.js +58 -65
  173. package/dist/multistream/receiveSlot.js.map +1 -1
  174. package/dist/multistream/receiveSlotManager.js +74 -93
  175. package/dist/multistream/receiveSlotManager.js.map +1 -1
  176. package/dist/multistream/remoteMedia.js +55 -74
  177. package/dist/multistream/remoteMedia.js.map +1 -1
  178. package/dist/multistream/remoteMediaGroup.js +6 -40
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +466 -442
  181. package/dist/multistream/remoteMediaManager.js.map +1 -1
  182. package/dist/networkQualityMonitor/index.js +32 -59
  183. package/dist/networkQualityMonitor/index.js.map +1 -1
  184. package/dist/personal-meeting-room/index.js +10 -45
  185. package/dist/personal-meeting-room/index.js.map +1 -1
  186. package/dist/personal-meeting-room/request.js +2 -33
  187. package/dist/personal-meeting-room/request.js.map +1 -1
  188. package/dist/personal-meeting-room/util.js +0 -13
  189. package/dist/personal-meeting-room/util.js.map +1 -1
  190. package/dist/reachability/index.js +190 -199
  191. package/dist/reachability/index.js.map +1 -1
  192. package/dist/reachability/request.js +14 -23
  193. package/dist/reachability/request.js.map +1 -1
  194. package/dist/reactions/constants.js +13 -0
  195. package/dist/reactions/constants.js.map +1 -0
  196. package/dist/reactions/reactions.js +2 -4
  197. package/dist/reactions/reactions.js.map +1 -1
  198. package/dist/reactions/reactions.type.js +19 -23
  199. package/dist/reactions/reactions.type.js.map +1 -1
  200. package/dist/reconnection-manager/index.js +326 -465
  201. package/dist/reconnection-manager/index.js.map +1 -1
  202. package/dist/recording-controller/enums.js +17 -0
  203. package/dist/recording-controller/enums.js.map +1 -0
  204. package/dist/recording-controller/index.js +343 -0
  205. package/dist/recording-controller/index.js.map +1 -0
  206. package/dist/recording-controller/util.js +63 -0
  207. package/dist/recording-controller/util.js.map +1 -0
  208. package/dist/roap/index.js +31 -75
  209. package/dist/roap/index.js.map +1 -1
  210. package/dist/roap/request.js +129 -136
  211. package/dist/roap/request.js.map +1 -1
  212. package/dist/roap/turnDiscovery.js +143 -103
  213. package/dist/roap/turnDiscovery.js.map +1 -1
  214. package/dist/statsAnalyzer/global.js +1 -95
  215. package/dist/statsAnalyzer/global.js.map +1 -1
  216. package/dist/statsAnalyzer/index.js +369 -461
  217. package/dist/statsAnalyzer/index.js.map +1 -1
  218. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  219. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  220. package/dist/transcription/index.js +13 -45
  221. package/dist/transcription/index.js.map +1 -1
  222. package/dist/types/annotation/annotation.types.d.ts +35 -0
  223. package/dist/types/annotation/constants.d.ts +31 -0
  224. package/dist/types/annotation/index.d.ts +124 -0
  225. package/dist/types/breakouts/breakout.d.ts +8 -0
  226. package/dist/types/breakouts/collection.d.ts +5 -0
  227. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  228. package/dist/types/breakouts/events.d.ts +2 -0
  229. package/dist/types/breakouts/index.d.ts +5 -0
  230. package/dist/types/breakouts/request.d.ts +22 -0
  231. package/dist/types/breakouts/utils.d.ts +15 -0
  232. package/dist/types/common/browser-detection.d.ts +9 -0
  233. package/dist/types/common/collection.d.ts +48 -0
  234. package/dist/types/common/config.d.ts +2 -0
  235. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  236. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  237. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  238. package/dist/types/common/errors/media.d.ts +15 -0
  239. package/dist/types/common/errors/parameter.d.ts +15 -0
  240. package/dist/types/common/errors/password-error.d.ts +15 -0
  241. package/dist/types/common/errors/permission.d.ts +14 -0
  242. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  243. package/dist/types/common/errors/reconnection.d.ts +15 -0
  244. package/dist/types/common/errors/stats.d.ts +15 -0
  245. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  246. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  247. package/dist/types/common/events/events-scope.d.ts +17 -0
  248. package/dist/types/common/events/events.d.ts +12 -0
  249. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  250. package/dist/types/common/events/util.d.ts +2 -0
  251. package/dist/types/common/logs/logger-config.d.ts +2 -0
  252. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  253. package/dist/types/common/logs/request.d.ts +34 -0
  254. package/dist/types/common/queue.d.ts +32 -0
  255. package/dist/types/config.d.ts +78 -0
  256. package/dist/types/constants.d.ts +993 -0
  257. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  258. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  259. package/dist/types/controls-options-manager/index.d.ts +136 -0
  260. package/dist/types/controls-options-manager/types.d.ts +43 -0
  261. package/dist/types/controls-options-manager/util.d.ts +1 -0
  262. package/dist/types/index.d.ts +7 -0
  263. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  264. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  265. package/dist/types/locus-info/fullState.d.ts +2 -0
  266. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  267. package/dist/types/locus-info/index.d.ts +315 -0
  268. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  269. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  270. package/dist/types/locus-info/parser.d.ts +212 -0
  271. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  272. package/dist/types/media/index.d.ts +34 -0
  273. package/dist/types/media/properties.d.ts +108 -0
  274. package/dist/types/media/util.d.ts +2 -0
  275. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  276. package/dist/types/meeting/in-meeting-actions.d.ts +147 -0
  277. package/dist/types/meeting/index.d.ts +1762 -0
  278. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  279. package/dist/types/meeting/muteState.d.ts +186 -0
  280. package/dist/types/meeting/request.d.ts +269 -0
  281. package/dist/types/meeting/request.type.d.ts +11 -0
  282. package/dist/types/meeting/state.d.ts +9 -0
  283. package/dist/types/meeting/util.d.ts +76 -0
  284. package/dist/types/meeting-info/collection.d.ts +20 -0
  285. package/dist/types/meeting-info/index.d.ts +57 -0
  286. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  287. package/dist/types/meeting-info/request.d.ts +22 -0
  288. package/dist/types/meeting-info/util.d.ts +2 -0
  289. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  290. package/dist/types/meetings/collection.d.ts +31 -0
  291. package/dist/types/meetings/index.d.ts +345 -0
  292. package/dist/types/meetings/request.d.ts +27 -0
  293. package/dist/types/meetings/util.d.ts +18 -0
  294. package/dist/types/member/index.d.ts +157 -0
  295. package/dist/types/member/types.d.ts +21 -0
  296. package/dist/types/member/util.d.ts +2 -0
  297. package/dist/types/members/collection.d.ts +29 -0
  298. package/dist/types/members/index.d.ts +353 -0
  299. package/dist/types/members/request.d.ts +114 -0
  300. package/dist/types/members/types.d.ts +24 -0
  301. package/dist/types/members/util.d.ts +210 -0
  302. package/dist/types/metrics/config.d.ts +195 -0
  303. package/dist/types/metrics/constants.d.ts +55 -0
  304. package/dist/types/metrics/index.d.ts +169 -0
  305. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  306. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  307. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  308. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  309. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  310. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  311. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  312. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  313. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  314. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  315. package/dist/types/reachability/index.d.ts +152 -0
  316. package/dist/types/reachability/request.d.ts +37 -0
  317. package/dist/types/reactions/constants.d.ts +3 -0
  318. package/dist/types/reactions/reactions.d.ts +4 -0
  319. package/dist/types/reactions/reactions.type.d.ts +52 -0
  320. package/dist/types/reconnection-manager/index.d.ts +126 -0
  321. package/dist/types/recording-controller/enums.d.ts +7 -0
  322. package/dist/types/recording-controller/index.d.ts +193 -0
  323. package/dist/types/recording-controller/util.d.ts +13 -0
  324. package/dist/types/roap/index.d.ts +77 -0
  325. package/dist/types/roap/request.d.ts +36 -0
  326. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  327. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  328. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  329. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  330. package/dist/types/transcription/index.d.ts +64 -0
  331. package/internal-README.md +7 -6
  332. package/package.json +28 -21
  333. package/src/annotation/annotation.types.ts +42 -0
  334. package/src/annotation/constants.ts +36 -0
  335. package/src/annotation/index.ts +339 -0
  336. package/src/breakouts/README.md +220 -0
  337. package/src/breakouts/breakout.ts +163 -0
  338. package/src/breakouts/collection.ts +19 -0
  339. package/src/breakouts/edit-lock-error.ts +25 -0
  340. package/src/breakouts/events.ts +37 -0
  341. package/src/breakouts/index.ts +860 -0
  342. package/src/breakouts/request.ts +55 -0
  343. package/src/breakouts/utils.ts +57 -0
  344. package/src/common/browser-detection.ts +9 -6
  345. package/src/common/collection.ts +3 -1
  346. package/src/common/errors/captcha-error.ts +6 -6
  347. package/src/common/errors/intent-to-join.ts +6 -6
  348. package/src/common/errors/join-meeting.ts +12 -8
  349. package/src/common/errors/media.ts +6 -6
  350. package/src/common/errors/parameter.ts +9 -6
  351. package/src/common/errors/password-error.ts +6 -6
  352. package/src/common/errors/permission.ts +5 -5
  353. package/src/common/errors/reconnection.ts +6 -6
  354. package/src/common/errors/stats.ts +6 -6
  355. package/src/common/errors/webex-errors.ts +7 -5
  356. package/src/common/errors/webex-meetings-error.ts +1 -1
  357. package/src/common/events/events-scope.ts +5 -1
  358. package/src/common/events/events.ts +5 -1
  359. package/src/common/events/trigger-proxy.ts +8 -3
  360. package/src/common/events/util.ts +1 -2
  361. package/src/common/logs/logger-proxy.ts +21 -10
  362. package/src/common/logs/request.ts +11 -8
  363. package/src/config.ts +16 -12
  364. package/src/constants.ts +153 -7
  365. package/src/controls-options-manager/constants.ts +5 -0
  366. package/src/controls-options-manager/enums.ts +18 -0
  367. package/src/controls-options-manager/index.ts +278 -0
  368. package/src/controls-options-manager/types.ts +59 -0
  369. package/src/controls-options-manager/util.ts +281 -0
  370. package/src/index.ts +33 -0
  371. package/src/locus-info/controlsUtils.ts +142 -24
  372. package/src/locus-info/fullState.ts +15 -11
  373. package/src/locus-info/hostUtils.ts +4 -3
  374. package/src/locus-info/index.ts +346 -55
  375. package/src/locus-info/infoUtils.ts +12 -4
  376. package/src/locus-info/mediaSharesUtils.ts +52 -4
  377. package/src/locus-info/parser.ts +46 -68
  378. package/src/locus-info/selfUtils.ts +195 -56
  379. package/src/media/index.ts +139 -196
  380. package/src/media/properties.ts +43 -36
  381. package/src/media/util.ts +1 -1
  382. package/src/mediaQualityMetrics/config.ts +380 -378
  383. package/src/meeting/in-meeting-actions.ts +159 -3
  384. package/src/meeting/index.ts +2803 -1584
  385. package/src/meeting/locusMediaRequest.ts +309 -0
  386. package/src/meeting/muteState.ts +290 -72
  387. package/src/meeting/request.ts +247 -178
  388. package/src/meeting/request.type.ts +13 -0
  389. package/src/meeting/state.ts +45 -30
  390. package/src/meeting/util.ts +445 -395
  391. package/src/meeting-info/collection.ts +2 -1
  392. package/src/meeting-info/index.ts +32 -30
  393. package/src/meeting-info/meeting-info-v2.ts +235 -116
  394. package/src/meeting-info/request.ts +9 -3
  395. package/src/meeting-info/util.ts +54 -46
  396. package/src/meeting-info/utilv2.ts +71 -55
  397. package/src/meetings/collection.ts +21 -1
  398. package/src/meetings/index.ts +772 -437
  399. package/src/meetings/request.ts +29 -25
  400. package/src/meetings/util.ts +132 -33
  401. package/src/member/index.ts +95 -49
  402. package/src/member/types.ts +24 -0
  403. package/src/member/util.ts +106 -13
  404. package/src/members/collection.ts +8 -1
  405. package/src/members/index.ts +288 -130
  406. package/src/members/request.ts +144 -31
  407. package/src/members/types.ts +28 -0
  408. package/src/members/util.ts +316 -235
  409. package/src/metrics/config.ts +302 -90
  410. package/src/metrics/constants.ts +2 -6
  411. package/src/metrics/index.ts +124 -95
  412. package/src/multistream/mediaRequestManager.ts +203 -45
  413. package/src/multistream/receiveSlot.ts +69 -26
  414. package/src/multistream/receiveSlotManager.ts +62 -38
  415. package/src/multistream/remoteMedia.ts +30 -4
  416. package/src/multistream/remoteMediaGroup.ts +4 -3
  417. package/src/multistream/remoteMediaManager.ts +230 -66
  418. package/src/networkQualityMonitor/index.ts +24 -27
  419. package/src/personal-meeting-room/index.ts +12 -16
  420. package/src/personal-meeting-room/request.ts +10 -3
  421. package/src/personal-meeting-room/util.ts +3 -3
  422. package/src/reachability/index.ts +131 -79
  423. package/src/reachability/request.ts +43 -34
  424. package/src/reactions/constants.ts +4 -0
  425. package/src/reactions/reactions.ts +8 -8
  426. package/src/reactions/reactions.type.ts +31 -5
  427. package/src/reconnection-manager/index.ts +193 -111
  428. package/src/recording-controller/enums.ts +8 -0
  429. package/src/recording-controller/index.ts +315 -0
  430. package/src/recording-controller/util.ts +58 -0
  431. package/src/roap/index.ts +53 -53
  432. package/src/roap/request.ts +77 -64
  433. package/src/roap/turnDiscovery.ts +101 -48
  434. package/src/statsAnalyzer/global.ts +8 -104
  435. package/src/statsAnalyzer/index.ts +624 -376
  436. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  437. package/src/transcription/index.ts +34 -32
  438. package/test/integration/spec/converged-space-meetings.js +177 -0
  439. package/test/integration/spec/journey.js +670 -466
  440. package/test/integration/spec/space-meeting.js +320 -204
  441. package/test/integration/spec/transcription.js +7 -8
  442. package/test/unit/spec/annotation/index.ts +433 -0
  443. package/test/unit/spec/breakouts/breakout.ts +203 -0
  444. package/test/unit/spec/breakouts/collection.ts +15 -0
  445. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  446. package/test/unit/spec/breakouts/events.ts +77 -0
  447. package/test/unit/spec/breakouts/index.ts +1609 -0
  448. package/test/unit/spec/breakouts/request.ts +104 -0
  449. package/test/unit/spec/breakouts/utils.js +72 -0
  450. package/test/unit/spec/common/browser-detection.js +9 -28
  451. package/test/unit/spec/controls-options-manager/index.js +287 -0
  452. package/test/unit/spec/controls-options-manager/util.js +504 -0
  453. package/test/unit/spec/fixture/locus.js +93 -90
  454. package/test/unit/spec/locus-info/controlsUtils.js +305 -32
  455. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  456. package/test/unit/spec/locus-info/index.js +636 -5
  457. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  458. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  459. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  460. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  461. package/test/unit/spec/locus-info/parser.js +3 -9
  462. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  463. package/test/unit/spec/locus-info/selfUtils.js +252 -12
  464. package/test/unit/spec/media/index.ts +104 -8
  465. package/test/unit/spec/media/properties.ts +9 -9
  466. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -3
  467. package/test/unit/spec/meeting/index.js +3112 -921
  468. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  469. package/test/unit/spec/meeting/muteState.js +421 -94
  470. package/test/unit/spec/meeting/request.js +421 -79
  471. package/test/unit/spec/meeting/utils.js +326 -189
  472. package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
  473. package/test/unit/spec/meeting-info/request.js +7 -9
  474. package/test/unit/spec/meeting-info/util.js +11 -12
  475. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  476. package/test/unit/spec/meetings/collection.js +15 -1
  477. package/test/unit/spec/meetings/index.js +1126 -328
  478. package/test/unit/spec/meetings/utils.js +220 -14
  479. package/test/unit/spec/member/index.js +24 -1
  480. package/test/unit/spec/member/util.js +383 -32
  481. package/test/unit/spec/members/index.js +424 -55
  482. package/test/unit/spec/members/request.js +228 -40
  483. package/test/unit/spec/members/utils.js +191 -4
  484. package/test/unit/spec/metrics/index.js +113 -20
  485. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  486. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  487. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  488. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  489. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  490. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  491. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  492. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  493. package/test/unit/spec/reachability/index.ts +176 -27
  494. package/test/unit/spec/reachability/request.js +66 -0
  495. package/test/unit/spec/reconnection-manager/index.js +62 -31
  496. package/test/unit/spec/recording-controller/index.js +231 -0
  497. package/test/unit/spec/recording-controller/util.js +102 -0
  498. package/test/unit/spec/roap/index.ts +19 -49
  499. package/test/unit/spec/roap/request.ts +187 -0
  500. package/test/unit/spec/roap/turnDiscovery.ts +92 -50
  501. package/test/unit/spec/stats-analyzer/index.js +116 -60
  502. package/test/utils/cmr.js +44 -42
  503. package/test/utils/constants.js +9 -0
  504. package/test/utils/integrationTestUtils.js +64 -0
  505. package/test/utils/testUtils.js +63 -99
  506. package/test/utils/webex-config.js +22 -18
  507. package/test/utils/webex-test-users.js +57 -50
  508. package/tsconfig.json +6 -0
  509. package/dist/media/internal-media-core-wrapper.js +0 -22
  510. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  511. package/dist/meeting/effectsState.js +0 -334
  512. package/dist/meeting/effectsState.js.map +0 -1
  513. package/dist/multistream/multistreamMedia.js +0 -116
  514. package/dist/multistream/multistreamMedia.js.map +0 -1
  515. package/src/index.js +0 -15
  516. package/src/media/internal-media-core-wrapper.ts +0 -9
  517. package/src/meeting/effectsState.ts +0 -211
  518. package/src/multistream/multistreamMedia.ts +0 -92
  519. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -3,27 +3,27 @@
3
3
  import {StatelessWebexPlugin} from '@webex/webex-core';
4
4
 
5
5
  import LoggerProxy from '../common/logs/logger-proxy';
6
- import {
7
- MEDIA,
8
- HTTP_VERBS,
9
- REACHABILITY
10
- } from '../constants';
6
+ import {REACHABILITY} from '../constants';
11
7
  import Metrics from '../metrics';
12
8
  import {eventType} from '../metrics/config';
9
+ import {LocusMediaRequest} from '../meeting/locusMediaRequest';
13
10
 
14
11
  /**
15
12
  * @class RoapRequest
16
13
  */
17
14
  export default class RoapRequest extends StatelessWebexPlugin {
18
15
  /**
19
- * Joins a meeting via ROAP
20
- * @param {Object} options
21
- * @returns {Promise} returns a promise that resolves/rejects whatever the request does
16
+ * Returns reachability data.
17
+ * @param {Object} localSdp
18
+ * @returns {Object}
22
19
  */
20
+ async attachReachabilityData(localSdp) {
21
+ let joinCookie;
23
22
 
24
-
25
- attachRechabilityData(localSdp) {
26
- const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);
23
+ // @ts-ignore
24
+ const reachabilityData = await this.webex.boundedStorage
25
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageResult)
26
+ .catch(() => {});
27
27
 
28
28
  if (reachabilityData) {
29
29
  try {
@@ -33,13 +33,29 @@ export default class RoapRequest extends StatelessWebexPlugin {
33
33
  if (reachabilityResult && Object.keys(reachabilityResult).length) {
34
34
  localSdp.reachability = reachabilityResult;
35
35
  }
36
+ } catch (e) {
37
+ LoggerProxy.logger.error(
38
+ `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
39
+ );
36
40
  }
37
- catch (e) {
38
- LoggerProxy.logger.error(`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`);
41
+ }
42
+
43
+ // @ts-ignore
44
+ const joinCookieRaw = await this.webex.boundedStorage
45
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
46
+ .catch(() => {});
47
+
48
+ if (joinCookieRaw) {
49
+ try {
50
+ joinCookie = JSON.parse(joinCookieRaw);
51
+ } catch (e) {
52
+ LoggerProxy.logger.error(
53
+ `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`
54
+ );
39
55
  }
40
56
  }
41
57
 
42
- return localSdp;
58
+ return {localSdp, joinCookie};
43
59
  }
44
60
 
45
61
  /**
@@ -49,74 +65,63 @@ export default class RoapRequest extends StatelessWebexPlugin {
49
65
  * @param {String} options.locusSelfUrl
50
66
  * @param {String} options.mediaId
51
67
  * @param {String} options.correlationId
52
- * @param {Boolean} options.audioMuted
53
- * @param {Boolean} options.videoMuted
54
68
  * @param {String} options.meetingId
55
69
  * @returns {Promise} returns the response/failure of the request
56
70
  */
57
- sendRoap(options: {
71
+ async sendRoap(options: {
58
72
  roapMessage: any;
59
73
  locusSelfUrl: string;
60
74
  mediaId: string;
61
- correlationId: string;
62
- audioMuted: boolean;
63
- videoMuted: boolean;
64
75
  meetingId: string;
65
- preferTranscoding?: boolean;
76
+ locusMediaRequest?: LocusMediaRequest;
66
77
  }) {
67
- const {
68
- roapMessage, locusSelfUrl, mediaId, correlationId, meetingId
69
- } = options;
78
+ const {roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest} = options;
70
79
 
71
80
  if (!mediaId) {
72
- LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
81
+ LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');
73
82
  }
74
83
 
75
- const mediaUrl = `${locusSelfUrl}/${MEDIA}`;
76
- // @ts-ignore
77
- const deviceUrl = this.webex.internal.device.url;
84
+ if (!locusMediaRequest) {
85
+ LoggerProxy.logger.warn(
86
+ 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'
87
+ );
78
88
 
79
- LoggerProxy.logger.info(`Roap:request#sendRoap --> ${mediaUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`);
89
+ return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));
90
+ }
91
+ const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({
92
+ roapMessage,
93
+ });
94
+
95
+ LoggerProxy.logger.info(
96
+ `Roap:request#sendRoap --> ${locusSelfUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
97
+ );
80
98
 
81
99
  Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});
82
100
 
83
- // @ts-ignore
84
- return this.webex
85
- .request({
86
- uri: mediaUrl,
87
- method: HTTP_VERBS.PUT,
88
- body: {
89
- device: {
90
- url: deviceUrl,
91
- // @ts-ignore
92
- deviceType: this.config.meetings.deviceType
93
- },
94
- correlationId,
95
- localMedias: [
96
- {
97
- localSdp: JSON.stringify(this.attachRechabilityData({
98
- roapMessage,
99
- // eslint-disable-next-line no-warning-comments
100
- // TODO: check whats the need for video and audiomute
101
- audioMuted: !!options.audioMuted,
102
- videoMuted: !!options.videoMuted
103
- })),
104
- mediaId: options.mediaId
105
- }
106
- ],
107
- clientMediaPreferences: {
108
- preferTranscoding: options.preferTranscoding ?? true
109
- }
110
- }
101
+ return locusMediaRequest
102
+ .send({
103
+ type: 'RoapMessage',
104
+ selfUrl: locusSelfUrl,
105
+ joinCookie,
106
+ mediaId,
107
+ roapMessage,
108
+ reachability: localSdpWithReachabilityData.reachability,
111
109
  })
112
110
  .then((res) => {
113
111
  Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});
114
112
 
115
113
  // always it will be the first mediaConnection Object
116
- const mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];
117
-
118
- LoggerProxy.logger.info(
119
- `Roap:request#sendRoap --> response:${JSON.stringify(mediaConnections, null, 2)}'\n StatusCode:'${res.statusCode}`
114
+ const mediaConnections =
115
+ res.body.mediaConnections &&
116
+ res.body.mediaConnections.length > 0 &&
117
+ res.body.mediaConnections[0];
118
+
119
+ LoggerProxy.logger.debug(
120
+ `Roap:request#sendRoap --> response:${JSON.stringify(
121
+ mediaConnections,
122
+ null,
123
+ 2
124
+ )}'\n StatusCode:'${res.statusCode}`
120
125
  );
121
126
  const {locus} = res.body;
122
127
 
@@ -124,14 +129,22 @@ export default class RoapRequest extends StatelessWebexPlugin {
124
129
 
125
130
  return {
126
131
  locus,
127
- ...(mediaConnections && {mediaConnections: res.body.mediaConnections})
132
+ ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),
128
133
  };
129
134
  })
130
135
  .catch((err) => {
131
- Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId, data: {error: Metrics.parseLocusError(err, true)}});
136
+ Metrics.postEvent({
137
+ event: eventType.MEDIA_RESPONSE,
138
+ meetingId,
139
+ data: {error: Metrics.parseLocusError(err, true)},
140
+ });
132
141
  LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);
133
142
  LoggerProxy.logger.error(
134
- `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(roapMessage, null, 2)} + '\\n mediaId:'${options.mediaId}`
143
+ `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(
144
+ roapMessage,
145
+ null,
146
+ 2
147
+ )} + '\\n mediaId:'${options.mediaId}`
135
148
  );
136
149
  throw err;
137
150
  });
@@ -48,7 +48,6 @@ export default class TurnDiscovery {
48
48
  };
49
49
  }
50
50
 
51
-
52
51
  /**
53
52
  * waits for TURN_DISCOVERY_RESPONSE message to arrive
54
53
  *
@@ -58,20 +57,28 @@ export default class TurnDiscovery {
58
57
  */
59
58
  private waitForTurnDiscoveryResponse() {
60
59
  if (!this.defer) {
61
- LoggerProxy.logger.warn('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress');
60
+ LoggerProxy.logger.warn(
61
+ 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress'
62
+ );
62
63
 
63
- return Promise.reject(new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()'));
64
+ return Promise.reject(
65
+ new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()')
66
+ );
64
67
  }
65
68
 
66
69
  const {defer} = this;
67
70
 
68
71
  this.responseTimer = setTimeout(() => {
69
- LoggerProxy.logger.warn(`Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`);
72
+ LoggerProxy.logger.warn(
73
+ `Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`
74
+ );
70
75
 
71
76
  defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));
72
77
  }, TURN_DISCOVERY_TIMEOUT * 1000);
73
78
 
74
- LoggerProxy.logger.info('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...');
79
+ LoggerProxy.logger.info(
80
+ 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...'
81
+ );
75
82
 
76
83
  return defer.promise;
77
84
  }
@@ -89,7 +96,9 @@ export default class TurnDiscovery {
89
96
  const {headers} = roapMessage;
90
97
 
91
98
  if (!this.defer) {
92
- LoggerProxy.logger.warn('Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response');
99
+ LoggerProxy.logger.warn(
100
+ 'Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response'
101
+ );
93
102
 
94
103
  return;
95
104
  }
@@ -106,7 +115,9 @@ export default class TurnDiscovery {
106
115
  // check if it matches any of our expected headers
107
116
  expectedHeaders.forEach((expectedHeader) => {
108
117
  if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {
109
- this.turnInfo[expectedHeader.field] = receivedHeader.substring(expectedHeader.headerName.length + 1);
118
+ this.turnInfo[expectedHeader.field] = receivedHeader.substring(
119
+ expectedHeader.headerName.length + 1
120
+ );
110
121
  foundHeaders += 1;
111
122
  }
112
123
  });
@@ -116,11 +127,18 @@ export default class TurnDiscovery {
116
127
  this.responseTimer = undefined;
117
128
 
118
129
  if (foundHeaders !== expectedHeaders.length) {
119
- LoggerProxy.logger.warn(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(headers)}`);
120
- this.defer.reject(new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`));
121
- }
122
- else {
123
- LoggerProxy.logger.info(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=${this.turnInfo.url}`);
130
+ LoggerProxy.logger.warn(
131
+ `Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(
132
+ headers
133
+ )}`
134
+ );
135
+ this.defer.reject(
136
+ new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`)
137
+ );
138
+ } else {
139
+ LoggerProxy.logger.info(
140
+ `Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=${this.turnInfo.url}`
141
+ );
124
142
  this.defer.resolve();
125
143
  }
126
144
  }
@@ -136,7 +154,9 @@ export default class TurnDiscovery {
136
154
  */
137
155
  sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {
138
156
  if (this.defer) {
139
- LoggerProxy.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
157
+ LoggerProxy.logger.warn(
158
+ 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'
159
+ );
140
160
 
141
161
  return Promise.resolve();
142
162
  }
@@ -149,19 +169,19 @@ export default class TurnDiscovery {
149
169
  seq: TURN_DISCOVERY_SEQ,
150
170
  };
151
171
 
152
- LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');
172
+ LoggerProxy.logger.info(
173
+ 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST'
174
+ );
153
175
 
154
176
  return this.roapRequest
155
177
  .sendRoap({
156
178
  roapMessage,
157
- correlationId: meeting.correlationId,
158
- // @ts-ignore - Fix missing type
179
+ // @ts-ignore - Fix missing type
159
180
  locusSelfUrl: meeting.selfUrl,
160
181
  // @ts-ignore - Fix missing type
161
182
  mediaId: isReconnecting ? '' : meeting.mediaId,
162
- audioMuted: meeting.isAudioMuted(),
163
- videoMuted: meeting.isVideoMuted(),
164
- meetingId: meeting.id
183
+ meetingId: meeting.id,
184
+ locusMediaRequest: meeting.locusMediaRequest,
165
185
  })
166
186
  .then(({mediaConnections}) => {
167
187
  if (mediaConnections) {
@@ -190,13 +210,53 @@ export default class TurnDiscovery {
190
210
  locusSelfUrl: meeting.selfUrl,
191
211
  // @ts-ignore - fix type
192
212
  mediaId: meeting.mediaId,
193
- correlationId: meeting.correlationId,
194
- audioMuted: meeting.isAudioMuted(),
195
- videoMuted: meeting.isVideoMuted(),
196
- meetingId: meeting.id
213
+ meetingId: meeting.id,
214
+ locusMediaRequest: meeting.locusMediaRequest,
197
215
  });
198
216
  }
199
217
 
218
+ /**
219
+ * Gets the reason why reachability is skipped.
220
+ *
221
+ * @param {Meeting} meeting
222
+ * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
223
+ */
224
+ private async getSkipReason(meeting: Meeting): Promise<string> {
225
+ // @ts-ignore - fix type
226
+ const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
227
+
228
+ if (isAnyClusterReachable) {
229
+ LoggerProxy.logger.info(
230
+ 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
231
+ );
232
+
233
+ return 'reachability';
234
+ }
235
+
236
+ // @ts-ignore - fix type
237
+ if (!meeting.config.experimental.enableTurnDiscovery) {
238
+ LoggerProxy.logger.info(
239
+ 'Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it'
240
+ );
241
+
242
+ return 'config';
243
+ }
244
+
245
+ return '';
246
+ }
247
+
248
+ /**
249
+ * Checks if TURN discovery is skipped.
250
+ *
251
+ * @param {Meeting} meeting
252
+ * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
253
+ */
254
+ async isSkipped(meeting) {
255
+ const skipReason = await this.getSkipReason(meeting);
256
+
257
+ return !!skipReason;
258
+ }
259
+
200
260
  /**
201
261
  * Retrieves TURN server information from the backend by doing
202
262
  * a roap message exchange:
@@ -214,20 +274,14 @@ export default class TurnDiscovery {
214
274
  * media connection just after a reconnection
215
275
  * @returns {Promise}
216
276
  */
217
- doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {
218
- // @ts-ignore - fix type
219
- const isAnyClusterReachable = meeting.webex.meetings.reachability.isAnyClusterReachable();
220
-
221
- if (isAnyClusterReachable) {
222
- LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery');
223
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'reachability'});
224
- }
225
-
226
- // @ts-ignore - fix type
227
- if (!meeting.config.experimental.enableTurnDiscovery) {
228
- LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it');
229
-
230
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'});
277
+ async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
278
+ const turnDiscoverySkippedReason = await this.getSkipReason(meeting);
279
+
280
+ if (turnDiscoverySkippedReason) {
281
+ return {
282
+ turnServerInfo: undefined,
283
+ turnDiscoverySkippedReason,
284
+ };
231
285
  }
232
286
 
233
287
  return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)
@@ -242,19 +296,18 @@ export default class TurnDiscovery {
242
296
  })
243
297
  .catch((e) => {
244
298
  // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
245
- LoggerProxy.logger.info(`Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`);
246
-
247
- Metrics.sendBehavioralMetric(
248
- BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE,
249
- {
250
- correlation_id: meeting.correlationId,
251
- locus_id: meeting.locusUrl.split('/').pop(),
252
- reason: e.message,
253
- stack: e.stack
254
- }
299
+ LoggerProxy.logger.info(
300
+ `Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`
255
301
  );
256
302
 
257
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: undefined});
303
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE, {
304
+ correlation_id: meeting.correlationId,
305
+ locus_id: meeting.locusUrl.split('/').pop(),
306
+ reason: e.message,
307
+ stack: e.stack,
308
+ });
309
+
310
+ return {turnServerInfo: undefined, turnDiscoverySkippedReason: undefined};
258
311
  });
259
312
  }
260
313
  }
@@ -1,65 +1,14 @@
1
1
  const STATS_DEFAULT = {
2
2
  encryption: 'sha-256',
3
- audio: {
4
- send: {
5
- trackLabel: '',
6
- maxPacketLossRatio: 0,
7
- availableBandwidth: 0,
8
- bytesSent: 0,
9
- meanRemoteJitter: [],
10
- meanRoundTripTime: []
11
- },
12
- recv: {
13
- availableBandwidth: 0,
14
- bytesReceived: 0,
15
- meanRtpJitter: [],
16
- meanRoundTripTime: []
17
- }
18
- },
19
- video: {
20
- send: {
21
- trackLabel: '',
22
- maxPacketLossRatio: 0,
23
- availableBandwidth: 0,
24
- meanRemoteJitter: [],
25
- meanRoundTripTime: []
26
- },
27
- recv: {
28
- availableBandwidth: 0,
29
- totalPacketsLost: 0,
30
- meanRtpJitter: [],
31
- meanRoundTripTime: []
32
-
33
- },
34
- latency: 0,
35
- packetsLost: 0
36
- },
37
- share: {
38
- send: {
39
- maxPacketLossRatio: 0,
40
- availableBandwidth: 0,
41
- totalPacketsLost: 0,
42
- meanRemoteJitter: [],
43
- meanRoundTripTime: []
44
- },
45
- recv: {
46
- availableBandwidth: 0,
47
- meanRtpJitter: [],
48
- meanRoundTripTime: []
49
- },
50
-
51
- latency: 0,
52
- packetsLost: 0
53
- },
54
3
  bandwidth: {
55
4
  systemBandwidth: 0,
56
5
  sentPerSecond: 0,
57
6
  encodedPerSecond: 0,
58
7
  helper: {
59
8
  audioBytesSent: 0,
60
- videoBytestSent: 0
9
+ videoBytestSent: 0,
61
10
  },
62
- speed: 0
11
+ speed: 0,
63
12
  },
64
13
  results: {},
65
14
  connectionType: {
@@ -69,65 +18,20 @@ const STATS_DEFAULT = {
69
18
  candidateType: [],
70
19
  transport: [],
71
20
  ipAddress: [],
72
- networkType: []
21
+ networkType: [],
73
22
  },
74
23
  remote: {
75
24
  candidateType: [],
76
25
  transport: [],
77
26
  ipAddress: [],
78
- networkType: []
79
- }
80
- },
81
- resolutions: {
82
- audio: {
83
- send: {
84
- width: 0,
85
- height: 0
86
- },
87
- recv: {
88
- width: 0,
89
- height: 0
90
- }
91
- },
92
- video: {
93
- send: {
94
- width: 0,
95
- height: 0
96
- },
97
- recv: {
98
- width: 0,
99
- height: 0
100
- }
27
+ networkType: [],
101
28
  },
102
- share: {
103
- send: {
104
- width: 0,
105
- height: 0
106
- },
107
- recv: {
108
- width: 0,
109
- height: 0
110
- }
111
- }
112
29
  },
30
+ resolutions: {},
113
31
  internal: {
114
- audio: {
115
- send: {},
116
- recv: {}
117
- },
118
- video: {
119
- send: {},
120
- recv: {}
121
- },
122
- share: {
123
- send: {},
124
- recv: {}
125
- },
126
- remote: {
127
-
128
- },
129
- candidates: {}
130
- }
32
+ remote: {},
33
+ candidates: {},
34
+ },
131
35
  };
132
36
 
133
37
  export default STATS_DEFAULT;