@webex/plugin-meetings 3.0.0-beta.9 → 3.0.0-beta.90

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