@webex/plugin-meetings 3.0.0-beta.11 → 3.0.0-beta.111

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