@webex/plugin-meetings 3.8.0 → 3.8.1-next.10

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 (361) hide show
  1. package/README.md +26 -13
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +70 -6
  4. package/dist/breakouts/index.js.map +1 -1
  5. package/dist/common/errors/webex-errors.js +12 -2
  6. package/dist/common/errors/webex-errors.js.map +1 -1
  7. package/dist/config.js +5 -1
  8. package/dist/config.js.map +1 -1
  9. package/dist/constants.js +28 -123
  10. package/dist/constants.js.map +1 -1
  11. package/dist/controls-options-manager/enums.js +3 -0
  12. package/dist/controls-options-manager/enums.js.map +1 -1
  13. package/dist/controls-options-manager/types.js.map +1 -1
  14. package/dist/controls-options-manager/util.js +78 -0
  15. package/dist/controls-options-manager/util.js.map +1 -1
  16. package/dist/interpretation/index.js +4 -4
  17. package/dist/interpretation/index.js.map +1 -1
  18. package/dist/interpretation/siLanguage.js +1 -1
  19. package/dist/locus-info/controlsUtils.js +37 -11
  20. package/dist/locus-info/controlsUtils.js.map +1 -1
  21. package/dist/locus-info/index.js +92 -12
  22. package/dist/locus-info/index.js.map +1 -1
  23. package/dist/locus-info/selfUtils.js +432 -418
  24. package/dist/locus-info/selfUtils.js.map +1 -1
  25. package/dist/media/index.js +17 -17
  26. package/dist/media/index.js.map +1 -1
  27. package/dist/media/properties.js +94 -6
  28. package/dist/media/properties.js.map +1 -1
  29. package/dist/meeting/brbState.js +9 -2
  30. package/dist/meeting/brbState.js.map +1 -1
  31. package/dist/meeting/in-meeting-actions.js +21 -1
  32. package/dist/meeting/in-meeting-actions.js.map +1 -1
  33. package/dist/meeting/index.js +678 -344
  34. package/dist/meeting/index.js.map +1 -1
  35. package/dist/meeting/locusMediaRequest.js +21 -22
  36. package/dist/meeting/locusMediaRequest.js.map +1 -1
  37. package/dist/meeting/muteState.js +4 -4
  38. package/dist/meeting/muteState.js.map +1 -1
  39. package/dist/meeting/request.js +30 -0
  40. package/dist/meeting/request.js.map +1 -1
  41. package/dist/meeting/request.type.js.map +1 -1
  42. package/dist/meeting/util.js +13 -2
  43. package/dist/meeting/util.js.map +1 -1
  44. package/dist/meeting-info/meeting-info-v2.js +373 -68
  45. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  46. package/dist/meeting-info/utilv2.js +5 -1
  47. package/dist/meeting-info/utilv2.js.map +1 -1
  48. package/dist/meetings/index.js +136 -1
  49. package/dist/meetings/index.js.map +1 -1
  50. package/dist/meetings/util.js +14 -0
  51. package/dist/meetings/util.js.map +1 -1
  52. package/dist/member/index.js +55 -9
  53. package/dist/member/index.js.map +1 -1
  54. package/dist/member/types.js +3 -0
  55. package/dist/member/types.js.map +1 -1
  56. package/dist/member/util.js +335 -353
  57. package/dist/member/util.js.map +1 -1
  58. package/dist/members/collection.js.map +1 -1
  59. package/dist/members/index.js +137 -29
  60. package/dist/members/index.js.map +1 -1
  61. package/dist/members/request.js +38 -0
  62. package/dist/members/request.js.map +1 -1
  63. package/dist/members/util.js +36 -1
  64. package/dist/members/util.js.map +1 -1
  65. package/dist/metrics/constants.js +10 -0
  66. package/dist/metrics/constants.js.map +1 -1
  67. package/dist/multistream/remoteMediaManager.js +40 -8
  68. package/dist/multistream/remoteMediaManager.js.map +1 -1
  69. package/dist/reachability/clusterReachability.js +63 -27
  70. package/dist/reachability/clusterReachability.js.map +1 -1
  71. package/dist/reachability/index.js +107 -47
  72. package/dist/reachability/index.js.map +1 -1
  73. package/dist/reachability/reachability.types.js +14 -0
  74. package/dist/reachability/reachability.types.js.map +1 -1
  75. package/dist/reachability/request.js +19 -3
  76. package/dist/reachability/request.js.map +1 -1
  77. package/dist/reconnection-manager/index.js +2 -2
  78. package/dist/reconnection-manager/index.js.map +1 -1
  79. package/dist/recording-controller/util.js +5 -5
  80. package/dist/recording-controller/util.js.map +1 -1
  81. package/dist/roap/index.js.map +1 -1
  82. package/dist/roap/turnDiscovery.js +45 -27
  83. package/dist/roap/turnDiscovery.js.map +1 -1
  84. package/dist/roap/types.js +17 -0
  85. package/dist/roap/types.js.map +1 -0
  86. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  87. package/dist/types/config.d.ts +3 -0
  88. package/dist/types/constants.d.ts +20 -85
  89. package/dist/types/controls-options-manager/enums.d.ts +4 -1
  90. package/dist/types/controls-options-manager/types.d.ts +10 -1
  91. package/dist/types/locus-info/index.d.ts +3 -3
  92. package/dist/types/locus-info/selfUtils.d.ts +216 -1
  93. package/dist/types/media/properties.d.ts +15 -0
  94. package/dist/types/meeting/in-meeting-actions.d.ts +20 -0
  95. package/dist/types/meeting/index.d.ts +65 -1
  96. package/dist/types/meeting/muteState.d.ts +0 -1
  97. package/dist/types/meeting/request.d.ts +12 -1
  98. package/dist/types/meeting/request.type.d.ts +6 -0
  99. package/dist/types/meeting/util.d.ts +3 -1
  100. package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
  101. package/dist/types/meetings/index.d.ts +57 -0
  102. package/dist/types/member/index.d.ts +21 -6
  103. package/dist/types/member/types.d.ts +73 -14
  104. package/dist/types/member/util.d.ts +156 -1
  105. package/dist/types/members/collection.d.ts +6 -5
  106. package/dist/types/members/index.d.ts +32 -43
  107. package/dist/types/members/request.d.ts +26 -0
  108. package/dist/types/members/util.d.ts +27 -0
  109. package/dist/types/metrics/constants.d.ts +10 -0
  110. package/dist/types/multistream/remoteMediaManager.d.ts +10 -1
  111. package/dist/types/reachability/clusterReachability.d.ts +15 -7
  112. package/dist/types/reachability/index.d.ts +10 -1
  113. package/dist/types/reachability/reachability.types.d.ts +5 -0
  114. package/dist/types/roap/index.d.ts +3 -2
  115. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  116. package/dist/types/roap/types.d.ts +16 -0
  117. package/dist/webinar/index.js +2 -2
  118. package/dist/webinar/index.js.map +1 -1
  119. package/package.json +24 -23
  120. package/src/breakouts/index.ts +69 -0
  121. package/src/common/errors/webex-errors.ts +8 -1
  122. package/src/config.ts +3 -0
  123. package/src/constants.ts +30 -90
  124. package/src/controls-options-manager/enums.ts +3 -0
  125. package/src/controls-options-manager/types.ts +16 -1
  126. package/src/controls-options-manager/util.ts +93 -0
  127. package/src/interpretation/index.ts +3 -3
  128. package/src/locus-info/controlsUtils.ts +59 -14
  129. package/src/locus-info/index.ts +97 -13
  130. package/src/locus-info/selfUtils.ts +496 -442
  131. package/src/media/index.ts +23 -21
  132. package/src/media/properties.ts +96 -0
  133. package/src/meeting/brbState.ts +11 -2
  134. package/src/meeting/in-meeting-actions.ts +40 -0
  135. package/src/meeting/index.ts +470 -105
  136. package/src/meeting/locusMediaRequest.ts +27 -22
  137. package/src/meeting/muteState.ts +4 -4
  138. package/src/meeting/request.ts +36 -1
  139. package/src/meeting/request.type.ts +7 -0
  140. package/src/meeting/util.ts +11 -2
  141. package/src/meeting-info/meeting-info-v2.ts +254 -8
  142. package/src/meeting-info/utilv2.ts +5 -0
  143. package/src/meetings/index.ts +148 -1
  144. package/src/meetings/util.ts +18 -0
  145. package/src/member/index.ts +68 -22
  146. package/src/member/types.ts +82 -16
  147. package/src/member/util.ts +357 -350
  148. package/src/members/collection.ts +4 -3
  149. package/src/members/index.ts +137 -18
  150. package/src/members/request.ts +44 -0
  151. package/src/members/util.ts +43 -1
  152. package/src/metrics/constants.ts +10 -0
  153. package/src/multistream/remoteMediaManager.ts +32 -10
  154. package/src/reachability/clusterReachability.ts +73 -26
  155. package/src/reachability/index.ts +62 -1
  156. package/src/reachability/reachability.types.ts +6 -0
  157. package/src/reachability/request.ts +7 -0
  158. package/src/reconnection-manager/index.ts +2 -2
  159. package/src/recording-controller/util.ts +17 -13
  160. package/src/roap/index.ts +3 -7
  161. package/src/roap/turnDiscovery.ts +34 -39
  162. package/src/roap/types.ts +23 -0
  163. package/src/webinar/index.ts +1 -1
  164. package/test/unit/spec/breakouts/index.ts +167 -95
  165. package/test/unit/spec/controls-options-manager/util.js +178 -0
  166. package/test/unit/spec/interpretation/index.ts +39 -1
  167. package/test/unit/spec/locus-info/controlsUtils.js +155 -9
  168. package/test/unit/spec/locus-info/index.js +209 -73
  169. package/test/unit/spec/locus-info/selfUtils.js +98 -24
  170. package/test/unit/spec/media/index.ts +150 -18
  171. package/test/unit/spec/media/properties.ts +130 -0
  172. package/test/unit/spec/meeting/brbState.ts +40 -2
  173. package/test/unit/spec/meeting/in-meeting-actions.ts +23 -4
  174. package/test/unit/spec/meeting/index.js +804 -139
  175. package/test/unit/spec/meeting/locusMediaRequest.ts +95 -87
  176. package/test/unit/spec/meeting/muteState.js +73 -2
  177. package/test/unit/spec/meeting/request.js +32 -1
  178. package/test/unit/spec/meeting/utils.js +119 -18
  179. package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
  180. package/test/unit/spec/meeting-info/utilv2.js +19 -0
  181. package/test/unit/spec/meetings/index.js +146 -2
  182. package/test/unit/spec/member/index.js +7 -0
  183. package/test/unit/spec/member/util.js +24 -0
  184. package/test/unit/spec/members/index.js +304 -78
  185. package/test/unit/spec/members/request.js +68 -22
  186. package/test/unit/spec/members/utils.js +75 -0
  187. package/test/unit/spec/multistream/remoteMediaManager.ts +397 -118
  188. package/test/unit/spec/reachability/clusterReachability.ts +88 -56
  189. package/test/unit/spec/reachability/index.ts +97 -0
  190. package/test/unit/spec/reachability/request.js +47 -2
  191. package/test/unit/spec/reconnection-manager/index.js +4 -4
  192. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
  193. package/test/unit/spec/webinar/index.ts +5 -0
  194. package/dist/annotation/annotation.types.d.ts +0 -42
  195. package/dist/annotation/constants.d.ts +0 -31
  196. package/dist/annotation/index.d.ts +0 -117
  197. package/dist/breakouts/breakout.d.ts +0 -8
  198. package/dist/breakouts/collection.d.ts +0 -5
  199. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  200. package/dist/breakouts/events.d.ts +0 -8
  201. package/dist/breakouts/index.d.ts +0 -5
  202. package/dist/breakouts/request.d.ts +0 -22
  203. package/dist/breakouts/utils.d.ts +0 -15
  204. package/dist/common/browser-detection.d.ts +0 -9
  205. package/dist/common/collection.d.ts +0 -48
  206. package/dist/common/config.d.ts +0 -2
  207. package/dist/common/errors/captcha-error.d.ts +0 -15
  208. package/dist/common/errors/intent-to-join.d.ts +0 -16
  209. package/dist/common/errors/join-meeting.d.ts +0 -17
  210. package/dist/common/errors/media.d.ts +0 -15
  211. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  212. package/dist/common/errors/parameter.d.ts +0 -15
  213. package/dist/common/errors/password-error.d.ts +0 -15
  214. package/dist/common/errors/permission.d.ts +0 -14
  215. package/dist/common/errors/reclaim-host-role-error.js +0 -149
  216. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  217. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  218. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  219. package/dist/common/errors/reconnection-in-progress.js +0 -33
  220. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  221. package/dist/common/errors/reconnection.d.ts +0 -15
  222. package/dist/common/errors/stats.d.ts +0 -15
  223. package/dist/common/errors/webex-errors.d.ts +0 -93
  224. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  225. package/dist/common/events/events-scope.d.ts +0 -17
  226. package/dist/common/events/events.d.ts +0 -12
  227. package/dist/common/events/trigger-proxy.d.ts +0 -2
  228. package/dist/common/events/util.d.ts +0 -2
  229. package/dist/common/logs/logger-config.d.ts +0 -2
  230. package/dist/common/logs/logger-proxy.d.ts +0 -2
  231. package/dist/common/logs/request.d.ts +0 -36
  232. package/dist/common/queue.d.ts +0 -34
  233. package/dist/config.d.ts +0 -72
  234. package/dist/constants.d.ts +0 -1088
  235. package/dist/controls-options-manager/constants.d.ts +0 -4
  236. package/dist/controls-options-manager/enums.d.ts +0 -15
  237. package/dist/controls-options-manager/index.d.ts +0 -136
  238. package/dist/controls-options-manager/types.d.ts +0 -43
  239. package/dist/controls-options-manager/util.d.ts +0 -1
  240. package/dist/index.d.ts +0 -7
  241. package/dist/interceptors/index.d.ts +0 -2
  242. package/dist/interceptors/locusRetry.d.ts +0 -27
  243. package/dist/interpretation/collection.d.ts +0 -5
  244. package/dist/interpretation/index.d.ts +0 -5
  245. package/dist/interpretation/siLanguage.d.ts +0 -5
  246. package/dist/locus-info/controlsUtils.d.ts +0 -2
  247. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  248. package/dist/locus-info/fullState.d.ts +0 -2
  249. package/dist/locus-info/hostUtils.d.ts +0 -2
  250. package/dist/locus-info/index.d.ts +0 -322
  251. package/dist/locus-info/infoUtils.d.ts +0 -2
  252. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  253. package/dist/locus-info/parser.d.ts +0 -272
  254. package/dist/locus-info/selfUtils.d.ts +0 -2
  255. package/dist/media/index.d.ts +0 -34
  256. package/dist/media/properties.d.ts +0 -93
  257. package/dist/media/util.d.ts +0 -2
  258. package/dist/mediaQualityMetrics/config.d.ts +0 -241
  259. package/dist/mediaQualityMetrics/config.js +0 -502
  260. package/dist/mediaQualityMetrics/config.js.map +0 -1
  261. package/dist/meeting/effectsState.js +0 -260
  262. package/dist/meeting/effectsState.js.map +0 -1
  263. package/dist/meeting/in-meeting-actions.d.ts +0 -167
  264. package/dist/meeting/index.d.ts +0 -1825
  265. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  266. package/dist/meeting/muteState.d.ts +0 -178
  267. package/dist/meeting/request.d.ts +0 -295
  268. package/dist/meeting/request.type.d.ts +0 -11
  269. package/dist/meeting/state.d.ts +0 -9
  270. package/dist/meeting/util.d.ts +0 -119
  271. package/dist/meeting/voicea-meeting.d.ts +0 -16
  272. package/dist/meeting-info/collection.d.ts +0 -20
  273. package/dist/meeting-info/index.d.ts +0 -69
  274. package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
  275. package/dist/meeting-info/request.d.ts +0 -22
  276. package/dist/meeting-info/util.d.ts +0 -2
  277. package/dist/meeting-info/utilv2.d.ts +0 -2
  278. package/dist/meetings/collection.d.ts +0 -40
  279. package/dist/meetings/index.d.ts +0 -390
  280. package/dist/meetings/meetings.types.d.ts +0 -4
  281. package/dist/meetings/request.d.ts +0 -27
  282. package/dist/meetings/util.d.ts +0 -18
  283. package/dist/member/index.d.ts +0 -160
  284. package/dist/member/member.types.js +0 -17
  285. package/dist/member/member.types.js.map +0 -1
  286. package/dist/member/types.d.ts +0 -32
  287. package/dist/member/util.d.ts +0 -2
  288. package/dist/members/collection.d.ts +0 -29
  289. package/dist/members/index.d.ts +0 -353
  290. package/dist/members/request.d.ts +0 -114
  291. package/dist/members/types.d.ts +0 -25
  292. package/dist/members/util.d.ts +0 -215
  293. package/dist/metrics/config.js +0 -276
  294. package/dist/metrics/config.js.map +0 -1
  295. package/dist/metrics/constants.d.ts +0 -70
  296. package/dist/metrics/index.d.ts +0 -45
  297. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  298. package/dist/multistream/receiveSlot.d.ts +0 -68
  299. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  300. package/dist/multistream/remoteMedia.d.ts +0 -72
  301. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  302. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  303. package/dist/multistream/sendSlotManager.d.ts +0 -69
  304. package/dist/networkQualityMonitor/index.d.ts +0 -70
  305. package/dist/networkQualityMonitor/index.js +0 -221
  306. package/dist/networkQualityMonitor/index.js.map +0 -1
  307. package/dist/peer-connection-manager/index.js +0 -671
  308. package/dist/peer-connection-manager/index.js.map +0 -1
  309. package/dist/peer-connection-manager/util.js +0 -109
  310. package/dist/peer-connection-manager/util.js.map +0 -1
  311. package/dist/personal-meeting-room/index.d.ts +0 -47
  312. package/dist/personal-meeting-room/request.d.ts +0 -14
  313. package/dist/personal-meeting-room/util.d.ts +0 -2
  314. package/dist/reachability/clusterReachability.d.ts +0 -109
  315. package/dist/reachability/index.d.ts +0 -105
  316. package/dist/reachability/request.d.ts +0 -39
  317. package/dist/reachability/util.d.ts +0 -8
  318. package/dist/reactions/constants.d.ts +0 -3
  319. package/dist/reactions/reactions.d.ts +0 -4
  320. package/dist/reactions/reactions.type.d.ts +0 -52
  321. package/dist/reconnection-manager/index.d.ts +0 -136
  322. package/dist/recording-controller/enums.d.ts +0 -7
  323. package/dist/recording-controller/index.d.ts +0 -207
  324. package/dist/recording-controller/util.d.ts +0 -14
  325. package/dist/roap/collection.js +0 -62
  326. package/dist/roap/collection.js.map +0 -1
  327. package/dist/roap/handler.js +0 -275
  328. package/dist/roap/handler.js.map +0 -1
  329. package/dist/roap/index.d.ts +0 -86
  330. package/dist/roap/request.d.ts +0 -39
  331. package/dist/roap/state.js +0 -126
  332. package/dist/roap/state.js.map +0 -1
  333. package/dist/roap/turnDiscovery.d.ts +0 -155
  334. package/dist/roap/util.js +0 -75
  335. package/dist/roap/util.js.map +0 -1
  336. package/dist/rtcMetrics/constants.d.ts +0 -4
  337. package/dist/rtcMetrics/constants.js +0 -11
  338. package/dist/rtcMetrics/constants.js.map +0 -1
  339. package/dist/rtcMetrics/index.d.ts +0 -61
  340. package/dist/rtcMetrics/index.js +0 -197
  341. package/dist/rtcMetrics/index.js.map +0 -1
  342. package/dist/statsAnalyzer/global.d.ts +0 -36
  343. package/dist/statsAnalyzer/global.js +0 -126
  344. package/dist/statsAnalyzer/global.js.map +0 -1
  345. package/dist/statsAnalyzer/index.d.ts +0 -217
  346. package/dist/statsAnalyzer/index.js +0 -1013
  347. package/dist/statsAnalyzer/index.js.map +0 -1
  348. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
  349. package/dist/statsAnalyzer/mqaUtil.js +0 -179
  350. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  351. package/dist/transcription/index.d.ts +0 -64
  352. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  353. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  354. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  355. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  356. package/dist/types/rtcMetrics/index.d.ts +0 -71
  357. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  358. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  359. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  360. package/dist/webinar/collection.d.ts +0 -16
  361. package/dist/webinar/index.d.ts +0 -5
@@ -16,11 +16,13 @@ import {
16
16
  LocalMicrophoneStream,
17
17
  } from '@webex/media-helpers';
18
18
  import {RtcMetrics} from '@webex/internal-plugin-metrics';
19
+ import {BrowserInfo} from '@webex/web-capabilities';
19
20
  import LoggerProxy from '../common/logs/logger-proxy';
20
21
  import {MEDIA_TRACK_CONSTRAINT} from '../constants';
21
22
  import Config from '../config';
22
23
  import StaticConfig from '../common/config';
23
24
  import BrowserDetection from '../common/browser-detection';
25
+ import {TurnServerInfo} from '../roap/types';
24
26
 
25
27
  const {isBrowser} = BrowserDetection();
26
28
 
@@ -138,13 +140,12 @@ Media.createMediaConnection = (
138
140
  remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
139
141
  enableRtx?: boolean;
140
142
  enableExtmap?: boolean;
141
- turnServerInfo?: {
142
- url: string;
143
- username: string;
144
- password: string;
145
- };
143
+ turnServerInfo?: TurnServerInfo;
146
144
  bundlePolicy?: BundlePolicy;
147
145
  iceCandidatesTimeout?: number;
146
+ disableAudioMainDtx?: boolean;
147
+ enableAudioTwcc?: boolean;
148
+ stopIceGatheringAfterFirstRelayCandidate?: boolean;
148
149
  }
149
150
  ) => {
150
151
  const {
@@ -156,28 +157,18 @@ Media.createMediaConnection = (
156
157
  turnServerInfo,
157
158
  bundlePolicy,
158
159
  iceCandidatesTimeout,
160
+ disableAudioMainDtx,
161
+ enableAudioTwcc,
162
+ stopIceGatheringAfterFirstRelayCandidate,
159
163
  } = options;
160
164
 
161
165
  const iceServers = [];
162
166
 
163
- // we might not have any TURN server if TURN discovery failed or wasn't done or
164
- // we might get an empty TURN url if we land on a video mesh node
165
- if (turnServerInfo?.url) {
166
- if (!isBrowser('firefox')) {
167
- let bareTurnServer = turnServerInfo.url;
168
- bareTurnServer = bareTurnServer.replace('turns:', 'turn:');
169
- bareTurnServer = bareTurnServer.replace('443', '5004');
170
-
171
- iceServers.push({
172
- urls: bareTurnServer,
173
- username: turnServerInfo.username || '',
174
- credential: turnServerInfo.password || '',
175
- });
176
- }
177
-
167
+ // we might not have any TURN server if TURN discovery failed or wasn't done or we land on a video mesh node
168
+ if (turnServerInfo?.urls.length > 0) {
178
169
  // TURN-TLS server
179
170
  iceServers.push({
180
- urls: turnServerInfo.url,
171
+ urls: turnServerInfo.urls,
181
172
  username: turnServerInfo.username || '',
182
173
  credential: turnServerInfo.password || '',
183
174
  });
@@ -186,12 +177,23 @@ Media.createMediaConnection = (
186
177
  if (isMultistream) {
187
178
  const config: MultistreamConnectionConfig = {
188
179
  iceServers,
180
+ disableAudioTwcc: !enableAudioTwcc,
189
181
  };
190
182
 
191
183
  if (bundlePolicy) {
192
184
  config.bundlePolicy = bundlePolicy;
193
185
  }
194
186
 
187
+ if (disableAudioMainDtx !== undefined) {
188
+ config.disableAudioMainDtx = disableAudioMainDtx;
189
+ }
190
+
191
+ if (BrowserInfo.isFirefox()) {
192
+ config.doFullIce = true;
193
+
194
+ config.stopIceGatheringAfterFirstRelayCandidate = stopIceGatheringAfterFirstRelayCandidate;
195
+ }
196
+
195
197
  return new MultistreamRoapMediaConnection(
196
198
  config,
197
199
  meetingId,
@@ -7,6 +7,8 @@ import {
7
7
  RemoteStream,
8
8
  } from '@webex/media-helpers';
9
9
 
10
+ import {parse} from '@webex/ts-sdp';
11
+ import {ClientEvent} from '@webex/internal-plugin-metrics';
10
12
  import {MEETINGS, QUALITY_LEVELS} from '../constants';
11
13
  import LoggerProxy from '../common/logs/logger-proxy';
12
14
  import MediaConnectionAwaiter from './MediaConnectionAwaiter';
@@ -20,6 +22,8 @@ export type MediaDirection = {
20
22
  receiveShare: boolean;
21
23
  };
22
24
 
25
+ export type IPVersion = ClientEvent['payload']['ipVersion'];
26
+
23
27
  /**
24
28
  * @class MediaProperties
25
29
  */
@@ -212,6 +216,91 @@ export default class MediaProperties {
212
216
  };
213
217
  }
214
218
 
219
+ /**
220
+ * Checks if the given IP address is IPv6
221
+ * @param {string} ip address to check
222
+ * @returns {boolean} true if the address is IPv6, false otherwise
223
+ */
224
+ private isIPv6(ip: string): boolean {
225
+ return ip.includes(':');
226
+ }
227
+
228
+ /** Finds out if we connected using IPv4 or IPv6
229
+ * @param {RTCPeerConnection} webrtcMediaConnection
230
+ * @param {Array<any>} allStatsReports array of RTC stats reports
231
+ * @returns {string} IPVersion
232
+ */
233
+ private getConnectionIpVersion(
234
+ webrtcMediaConnection: RTCPeerConnection,
235
+ allStatsReports: any[]
236
+ ): IPVersion | undefined {
237
+ const transports = allStatsReports.filter((report) => report.type === 'transport');
238
+
239
+ let selectedCandidatePair;
240
+
241
+ if (transports.length > 0 && transports[0].selectedCandidatePairId) {
242
+ selectedCandidatePair = allStatsReports.find(
243
+ (report) =>
244
+ report.type === 'candidate-pair' && report.id === transports[0].selectedCandidatePairId
245
+ );
246
+ } else {
247
+ // Firefox doesn't have selectedCandidatePairId, but has selected property on the candidate pair
248
+ selectedCandidatePair = allStatsReports.find(
249
+ (report) => report.type === 'candidate-pair' && report.selected
250
+ );
251
+ }
252
+
253
+ if (selectedCandidatePair) {
254
+ const localCandidate = allStatsReports.find(
255
+ (report) =>
256
+ report.type === 'local-candidate' && report.id === selectedCandidatePair.localCandidateId
257
+ );
258
+
259
+ if (localCandidate) {
260
+ if (localCandidate.address) {
261
+ return this.isIPv6(localCandidate.address) ? 'IPv6' : 'IPv4';
262
+ }
263
+
264
+ try {
265
+ // safari doesn't have address field on the candidate, so we have to use the port to look up the candidate in the SDP
266
+ const localSdp = webrtcMediaConnection.localDescription.sdp;
267
+
268
+ const parsedSdp = parse(localSdp);
269
+
270
+ for (const mediaLine of parsedSdp.avMedia) {
271
+ const matchingCandidate = mediaLine.iceInfo.candidates.find(
272
+ (candidate) => candidate.port === localCandidate.port
273
+ );
274
+ if (matchingCandidate) {
275
+ return this.isIPv6(matchingCandidate.connectionAddress) ? 'IPv6' : 'IPv4';
276
+ }
277
+ }
278
+
279
+ LoggerProxy.logger.warn(
280
+ `Media:properties#getConnectionIpVersion --> failed to find local candidate in the SDP for port ${localCandidate.port}`
281
+ );
282
+ } catch (error) {
283
+ LoggerProxy.logger.warn(
284
+ `Media:properties#getConnectionIpVersion --> error while trying to find candidate in local SDP:`,
285
+ error
286
+ );
287
+
288
+ return undefined;
289
+ }
290
+ } else {
291
+ LoggerProxy.logger.warn(
292
+ `Media:properties#getConnectionIpVersion --> failed to find local candidate "${selectedCandidatePair.localCandidateId}" in getStats() results`
293
+ );
294
+ }
295
+ } else {
296
+ LoggerProxy.logger.warn(
297
+ `Media:properties#getConnectionIpVersion --> failed to find selected candidate pair in getStats() results (transports.length=${transports.length}, selectedCandidatePairId=${transports[0]?.selectedCandidatePairId})`
298
+ );
299
+ }
300
+
301
+ return undefined;
302
+ }
303
+
215
304
  /**
216
305
  * Returns the type of a connection that has been established
217
306
  * It should be 'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'
@@ -284,6 +373,7 @@ export default class MediaProperties {
284
373
  */
285
374
  async getCurrentConnectionInfo(): Promise<{
286
375
  connectionType: string;
376
+ ipVersion?: IPVersion;
287
377
  selectedCandidatePairChanges: number;
288
378
  numTransports: number;
289
379
  }> {
@@ -309,10 +399,15 @@ export default class MediaProperties {
309
399
  });
310
400
 
311
401
  const connectionType = this.getConnectionType(allStatsReports);
402
+ const rtcPeerconnection =
403
+ this.webrtcMediaConnection.multistreamConnection?.pc.pc ||
404
+ this.webrtcMediaConnection.mediaConnection?.pc;
405
+ const ipVersion = this.getConnectionIpVersion(rtcPeerconnection, allStatsReports);
312
406
  const {selectedCandidatePairChanges, numTransports} = this.getTransportInfo(allStatsReports);
313
407
 
314
408
  return {
315
409
  connectionType,
410
+ ipVersion,
316
411
  selectedCandidatePairChanges,
317
412
  numTransports,
318
413
  };
@@ -323,6 +418,7 @@ export default class MediaProperties {
323
418
 
324
419
  return {
325
420
  connectionType: 'unknown',
421
+ ipVersion: undefined,
326
422
  selectedCandidatePairChanges: -1,
327
423
  numTransports: 0,
328
424
  };
@@ -95,6 +95,13 @@ export class BrbState {
95
95
  return this.sendLocalBrbStateToServer(sendSlotManager)
96
96
  .then(() => {
97
97
  this.state.syncToServerInProgress = false;
98
+
99
+ // This is a workaround for the fact that the server does not send the brb state
100
+ // in the locus update when a user joins from multiple devices but not all devices are requested brb.
101
+ // In the future, this could be improved with a new brb locus update handler
102
+ // https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-655626
103
+ this.handleServerBrbUpdate(this.state.client.enabled);
104
+
98
105
  LoggerProxy.logger.info(
99
106
  `Meeting:brbState#applyClientStateToServer: sync with server completed`
100
107
  );
@@ -102,9 +109,11 @@ export class BrbState {
102
109
  // need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
103
110
  this.applyClientStateToServer(sendSlotManager);
104
111
  })
105
- .catch((e) => {
112
+ .catch((error) => {
106
113
  this.state.syncToServerInProgress = false;
107
- LoggerProxy.logger.warn(`Meeting:brbState#applyClientStateToServer: error: ${e}`);
114
+ LoggerProxy.logger.warn(`Meeting:brbState#applyClientStateToServer: Error: ${error}`);
115
+
116
+ return Promise.reject(error);
108
117
  });
109
118
  }
110
119
 
@@ -81,6 +81,8 @@ interface IInMeetingActions {
81
81
  canShareDesktop?: boolean;
82
82
  canShareContent?: boolean;
83
83
  canTransferFile?: boolean;
84
+ canRealtimeCloseCaption?: boolean;
85
+ canRealtimeCloseCaptionManual?: boolean;
84
86
  canChat?: boolean;
85
87
  canDoVideo?: boolean;
86
88
  canAnnotate?: boolean;
@@ -99,6 +101,14 @@ interface IInMeetingActions {
99
101
  isPracticeSessionOff?: boolean;
100
102
  canStartPracticeSession?: boolean;
101
103
  canStopPracticeSession?: boolean;
104
+ requiresPostMeetingDataConsentPrompt?: boolean;
105
+ canEnableAnnotation?: boolean;
106
+ canDisableAnnotation?: boolean;
107
+ canEnableRemoteDesktopControl?: boolean;
108
+ canDisableRemoteDesktopControl?: boolean;
109
+ canMoveToLobby?: boolean;
110
+ canEnablePollingQA?: boolean;
111
+ canDisablePollingQA?: boolean;
102
112
  }
103
113
 
104
114
  /**
@@ -249,6 +259,10 @@ export default class InMeetingActions implements IInMeetingActions {
249
259
 
250
260
  canTransferFile = null;
251
261
 
262
+ canRealtimeCloseCaption = null;
263
+
264
+ canRealtimeCloseCaptionManual = null;
265
+
252
266
  canChat = null;
253
267
 
254
268
  canDoVideo = null;
@@ -285,6 +299,22 @@ export default class InMeetingActions implements IInMeetingActions {
285
299
 
286
300
  canStopPracticeSession = null;
287
301
 
302
+ requiresPostMeetingDataConsentPrompt = null;
303
+
304
+ canEnableAnnotation = null;
305
+
306
+ canDisableAnnotation = null;
307
+
308
+ canEnableRemoteDesktopControl = null;
309
+
310
+ canDisableRemoteDesktopControl = null;
311
+
312
+ canMoveToLobby = null;
313
+
314
+ canEnablePollingQA = null;
315
+
316
+ canDisablePollingQA = null;
317
+
288
318
  /**
289
319
  * Returns all meeting action options
290
320
  * @returns {Object}
@@ -361,6 +391,8 @@ export default class InMeetingActions implements IInMeetingActions {
361
391
  canShareDesktop: this.canShareDesktop,
362
392
  canShareContent: this.canShareContent,
363
393
  canTransferFile: this.canTransferFile,
394
+ canRealtimeCloseCaption: this.canRealtimeCloseCaption,
395
+ canRealtimeCloseCaptionManual: this.canRealtimeCloseCaptionManual,
364
396
  canChat: this.canChat,
365
397
  canDoVideo: this.canDoVideo,
366
398
  canAnnotate: this.canAnnotate,
@@ -379,6 +411,14 @@ export default class InMeetingActions implements IInMeetingActions {
379
411
  isPracticeSessionOff: this.isPracticeSessionOff,
380
412
  canStartPracticeSession: this.canStartPracticeSession,
381
413
  canStopPracticeSession: this.canStopPracticeSession,
414
+ requiresPostMeetingDataConsentPrompt: this.requiresPostMeetingDataConsentPrompt,
415
+ canEnableAnnotation: this.canEnableAnnotation,
416
+ canDisableAnnotation: this.canDisableAnnotation,
417
+ canEnableRemoteDesktopControl: this.canEnableRemoteDesktopControl,
418
+ canDisableRemoteDesktopControl: this.canDisableRemoteDesktopControl,
419
+ canMoveToLobby: this.canMoveToLobby,
420
+ canEnablePollingQA: this.canEnablePollingQA,
421
+ canDisablePollingQA: this.canDisablePollingQA,
382
422
  });
383
423
 
384
424
  /**