@webex/plugin-meetings 2.60.0 → 2.60.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 (539) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.d.ts +42 -0
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.d.ts +31 -0
  6. package/dist/annotation/constants.js +41 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.d.ts +117 -0
  9. package/dist/annotation/index.js +357 -0
  10. package/dist/annotation/index.js.map +1 -0
  11. package/dist/breakouts/breakout.d.ts +8 -0
  12. package/dist/breakouts/breakout.js +215 -0
  13. package/dist/breakouts/breakout.js.map +1 -0
  14. package/dist/breakouts/collection.d.ts +5 -0
  15. package/dist/breakouts/collection.js +22 -0
  16. package/dist/breakouts/collection.js.map +1 -0
  17. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  18. package/dist/breakouts/edit-lock-error.js +51 -0
  19. package/dist/breakouts/edit-lock-error.js.map +1 -0
  20. package/dist/breakouts/events.d.ts +8 -0
  21. package/dist/breakouts/events.js +44 -0
  22. package/dist/breakouts/events.js.map +1 -0
  23. package/dist/breakouts/index.d.ts +5 -0
  24. package/dist/breakouts/index.js +1047 -0
  25. package/dist/breakouts/index.js.map +1 -0
  26. package/dist/breakouts/request.d.ts +22 -0
  27. package/dist/breakouts/request.js +77 -0
  28. package/dist/breakouts/request.js.map +1 -0
  29. package/dist/breakouts/utils.d.ts +15 -0
  30. package/dist/breakouts/utils.js +64 -0
  31. package/dist/breakouts/utils.js.map +1 -0
  32. package/dist/common/browser-detection.js +2 -3
  33. package/dist/common/browser-detection.js.map +1 -1
  34. package/dist/common/collection.js +3 -4
  35. package/dist/common/collection.js.map +1 -1
  36. package/dist/common/config.js +1 -2
  37. package/dist/common/config.js.map +1 -1
  38. package/dist/common/errors/captcha-error.js +1 -2
  39. package/dist/common/errors/captcha-error.js.map +1 -1
  40. package/dist/common/errors/intent-to-join.js +1 -2
  41. package/dist/common/errors/intent-to-join.js.map +1 -1
  42. package/dist/common/errors/join-meeting.js +1 -2
  43. package/dist/common/errors/join-meeting.js.map +1 -1
  44. package/dist/common/errors/media.js +1 -2
  45. package/dist/common/errors/media.js.map +1 -1
  46. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  47. package/dist/common/errors/no-meeting-info.js +50 -0
  48. package/dist/common/errors/no-meeting-info.js.map +1 -0
  49. package/dist/common/errors/parameter.js +3 -4
  50. package/dist/common/errors/parameter.js.map +1 -1
  51. package/dist/common/errors/password-error.js +1 -2
  52. package/dist/common/errors/password-error.js.map +1 -1
  53. package/dist/common/errors/permission.js +1 -2
  54. package/dist/common/errors/permission.js.map +1 -1
  55. package/dist/common/errors/{reclaim-host-role-error.js → reclaim-host-role-errors.js} +7 -11
  56. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  57. package/dist/common/errors/reconnection-in-progress.js +1 -2
  58. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  59. package/dist/common/errors/reconnection.js +1 -2
  60. package/dist/common/errors/reconnection.js.map +1 -1
  61. package/dist/common/errors/stats.js +1 -2
  62. package/dist/common/errors/stats.js.map +1 -1
  63. package/dist/common/errors/webex-errors.d.ts +20 -8
  64. package/dist/common/errors/webex-errors.js +48 -28
  65. package/dist/common/errors/webex-errors.js.map +1 -1
  66. package/dist/common/errors/webex-meetings-error.js +1 -2
  67. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  68. package/dist/common/events/events-scope.js +1 -2
  69. package/dist/common/events/events-scope.js.map +1 -1
  70. package/dist/common/events/events.js +1 -2
  71. package/dist/common/events/events.js.map +1 -1
  72. package/dist/common/events/trigger-proxy.js +1 -2
  73. package/dist/common/events/trigger-proxy.js.map +1 -1
  74. package/dist/common/events/util.js +1 -2
  75. package/dist/common/events/util.js.map +1 -1
  76. package/dist/common/logs/logger-config.js +1 -2
  77. package/dist/common/logs/logger-config.js.map +1 -1
  78. package/dist/common/logs/logger-proxy.js +2 -3
  79. package/dist/common/logs/logger-proxy.js.map +1 -1
  80. package/dist/common/logs/request.d.ts +3 -1
  81. package/dist/common/logs/request.js +8 -5
  82. package/dist/common/logs/request.js.map +1 -1
  83. package/dist/common/queue.d.ts +9 -7
  84. package/dist/common/queue.js +22 -9
  85. package/dist/common/queue.js.map +1 -1
  86. package/dist/config.d.ts +6 -7
  87. package/dist/config.js +8 -10
  88. package/dist/config.js.map +1 -1
  89. package/dist/constants.d.ts +234 -100
  90. package/dist/constants.js +433 -444
  91. package/dist/constants.js.map +1 -1
  92. package/dist/controls-options-manager/constants.js +3 -6
  93. package/dist/controls-options-manager/constants.js.map +1 -1
  94. package/dist/controls-options-manager/enums.d.ts +11 -1
  95. package/dist/controls-options-manager/enums.js +15 -6
  96. package/dist/controls-options-manager/enums.js.map +1 -1
  97. package/dist/controls-options-manager/index.d.ts +17 -1
  98. package/dist/controls-options-manager/index.js +127 -38
  99. package/dist/controls-options-manager/index.js.map +1 -1
  100. package/dist/controls-options-manager/types.d.ts +43 -0
  101. package/dist/controls-options-manager/types.js +7 -0
  102. package/dist/controls-options-manager/types.js.map +1 -0
  103. package/dist/controls-options-manager/util.d.ts +1 -7
  104. package/dist/controls-options-manager/util.js +309 -19
  105. package/dist/controls-options-manager/util.js.map +1 -1
  106. package/dist/index.d.ts +6 -3
  107. package/dist/index.js +121 -5
  108. package/dist/index.js.map +1 -1
  109. package/dist/interceptors/index.d.ts +2 -0
  110. package/dist/interceptors/index.js +15 -0
  111. package/dist/interceptors/index.js.map +1 -0
  112. package/dist/interceptors/locusRetry.d.ts +27 -0
  113. package/dist/interceptors/locusRetry.js +94 -0
  114. package/dist/interceptors/locusRetry.js.map +1 -0
  115. package/dist/interpretation/collection.d.ts +5 -0
  116. package/dist/interpretation/collection.js +22 -0
  117. package/dist/interpretation/collection.js.map +1 -0
  118. package/dist/interpretation/index.d.ts +5 -0
  119. package/dist/interpretation/index.js +365 -0
  120. package/dist/interpretation/index.js.map +1 -0
  121. package/dist/interpretation/siLanguage.d.ts +5 -0
  122. package/dist/interpretation/siLanguage.js +24 -0
  123. package/dist/interpretation/siLanguage.js.map +1 -0
  124. package/dist/locus-info/controlsUtils.js +100 -11
  125. package/dist/locus-info/controlsUtils.js.map +1 -1
  126. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  127. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  128. package/dist/locus-info/fullState.js +1 -2
  129. package/dist/locus-info/fullState.js.map +1 -1
  130. package/dist/locus-info/hostUtils.js +1 -2
  131. package/dist/locus-info/hostUtils.js.map +1 -1
  132. package/dist/locus-info/index.d.ts +57 -4
  133. package/dist/locus-info/index.js +425 -84
  134. package/dist/locus-info/index.js.map +1 -1
  135. package/dist/locus-info/infoUtils.js +13 -5
  136. package/dist/locus-info/infoUtils.js.map +1 -1
  137. package/dist/locus-info/mediaSharesUtils.js +58 -3
  138. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  139. package/dist/locus-info/parser.d.ts +66 -6
  140. package/dist/locus-info/parser.js +253 -80
  141. package/dist/locus-info/parser.js.map +1 -1
  142. package/dist/locus-info/selfUtils.js +97 -13
  143. package/dist/locus-info/selfUtils.js.map +1 -1
  144. package/dist/media/index.d.ts +2 -0
  145. package/dist/media/index.js +107 -319
  146. package/dist/media/index.js.map +1 -1
  147. package/dist/media/properties.d.ts +38 -53
  148. package/dist/media/properties.js +96 -153
  149. package/dist/media/properties.js.map +1 -1
  150. package/dist/media/util.js +1 -22
  151. package/dist/media/util.js.map +1 -1
  152. package/dist/mediaQualityMetrics/config.d.ts +234 -230
  153. package/dist/mediaQualityMetrics/config.js +302 -498
  154. package/dist/mediaQualityMetrics/config.js.map +1 -1
  155. package/dist/meeting/in-meeting-actions.d.ts +88 -0
  156. package/dist/meeting/in-meeting-actions.js +94 -3
  157. package/dist/meeting/in-meeting-actions.js.map +1 -1
  158. package/dist/meeting/index.d.ts +705 -520
  159. package/dist/meeting/index.js +5047 -3089
  160. package/dist/meeting/index.js.map +1 -1
  161. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  162. package/dist/meeting/locusMediaRequest.js +291 -0
  163. package/dist/meeting/locusMediaRequest.js.map +1 -0
  164. package/dist/meeting/muteState.d.ts +93 -25
  165. package/dist/meeting/muteState.js +224 -133
  166. package/dist/meeting/muteState.js.map +1 -1
  167. package/dist/meeting/request.d.ts +82 -47
  168. package/dist/meeting/request.js +304 -199
  169. package/dist/meeting/request.js.map +1 -1
  170. package/dist/meeting/request.type.d.ts +11 -0
  171. package/dist/meeting/request.type.js +7 -0
  172. package/dist/meeting/request.type.js.map +1 -0
  173. package/dist/meeting/state.js +1 -2
  174. package/dist/meeting/state.js.map +1 -1
  175. package/dist/meeting/util.d.ts +118 -1
  176. package/dist/meeting/util.js +676 -435
  177. package/dist/meeting/util.js.map +1 -1
  178. package/dist/meeting/voicea-meeting.d.ts +20 -0
  179. package/dist/meeting/voicea-meeting.js +201 -0
  180. package/dist/meeting/voicea-meeting.js.map +1 -0
  181. package/dist/meeting-info/collection.js +3 -4
  182. package/dist/meeting-info/collection.js.map +1 -1
  183. package/dist/meeting-info/index.d.ts +13 -1
  184. package/dist/meeting-info/index.js +74 -7
  185. package/dist/meeting-info/index.js.map +1 -1
  186. package/dist/meeting-info/meeting-info-v2.d.ts +31 -1
  187. package/dist/meeting-info/meeting-info-v2.js +200 -63
  188. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  189. package/dist/meeting-info/request.js +1 -2
  190. package/dist/meeting-info/request.js.map +1 -1
  191. package/dist/meeting-info/util.js +2 -3
  192. package/dist/meeting-info/util.js.map +1 -1
  193. package/dist/meeting-info/utilv2.js +39 -41
  194. package/dist/meeting-info/utilv2.js.map +1 -1
  195. package/dist/meetings/collection.d.ts +17 -0
  196. package/dist/meetings/collection.js +42 -4
  197. package/dist/meetings/collection.js.map +1 -1
  198. package/dist/meetings/index.d.ts +114 -20
  199. package/dist/meetings/index.js +540 -126
  200. package/dist/meetings/index.js.map +1 -1
  201. package/dist/meetings/meetings.types.d.ts +4 -0
  202. package/dist/meetings/meetings.types.js +7 -0
  203. package/dist/meetings/meetings.types.js.map +1 -0
  204. package/dist/meetings/request.js +4 -3
  205. package/dist/meetings/request.js.map +1 -1
  206. package/dist/meetings/util.js +107 -6
  207. package/dist/meetings/util.js.map +1 -1
  208. package/dist/member/index.d.ts +13 -1
  209. package/dist/member/index.js +45 -2
  210. package/dist/member/index.js.map +1 -1
  211. package/dist/member/member.types.js +3 -4
  212. package/dist/member/member.types.js.map +1 -1
  213. package/dist/member/types.d.ts +32 -0
  214. package/dist/member/types.js +23 -0
  215. package/dist/member/types.js.map +1 -0
  216. package/dist/member/util.js +120 -29
  217. package/dist/member/util.js.map +1 -1
  218. package/dist/members/collection.d.ts +5 -0
  219. package/dist/members/collection.js +11 -2
  220. package/dist/members/collection.js.map +1 -1
  221. package/dist/members/index.d.ts +56 -11
  222. package/dist/members/index.js +174 -47
  223. package/dist/members/index.js.map +1 -1
  224. package/dist/members/request.d.ts +67 -11
  225. package/dist/members/request.js +102 -54
  226. package/dist/members/request.js.map +1 -1
  227. package/dist/members/types.js +3 -4
  228. package/dist/members/types.js.map +1 -1
  229. package/dist/members/util.d.ts +214 -1
  230. package/dist/members/util.js +327 -284
  231. package/dist/members/util.js.map +1 -1
  232. package/dist/metrics/constants.d.ts +15 -6
  233. package/dist/metrics/constants.js +17 -9
  234. package/dist/metrics/constants.js.map +1 -1
  235. package/dist/metrics/index.d.ts +4 -111
  236. package/dist/metrics/index.js +4 -452
  237. package/dist/metrics/index.js.map +1 -1
  238. package/dist/multistream/mediaRequestManager.d.ts +118 -0
  239. package/dist/multistream/mediaRequestManager.js +344 -0
  240. package/dist/multistream/mediaRequestManager.js.map +1 -0
  241. package/dist/multistream/receiveSlot.d.ts +68 -0
  242. package/dist/multistream/receiveSlot.js +200 -0
  243. package/dist/multistream/receiveSlot.js.map +1 -0
  244. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  245. package/dist/multistream/receiveSlotManager.js +174 -0
  246. package/dist/multistream/receiveSlotManager.js.map +1 -0
  247. package/dist/multistream/remoteMedia.d.ts +72 -0
  248. package/dist/multistream/remoteMedia.js +268 -0
  249. package/dist/multistream/remoteMedia.js.map +1 -0
  250. package/dist/multistream/remoteMediaGroup.d.ts +47 -0
  251. package/dist/multistream/remoteMediaGroup.js +267 -0
  252. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  253. package/dist/multistream/remoteMediaManager.d.ts +285 -0
  254. package/dist/multistream/remoteMediaManager.js +1211 -0
  255. package/dist/multistream/remoteMediaManager.js.map +1 -0
  256. package/dist/multistream/sendSlotManager.d.ts +61 -0
  257. package/dist/multistream/sendSlotManager.js +236 -0
  258. package/dist/multistream/sendSlotManager.js.map +1 -0
  259. package/dist/networkQualityMonitor/index.js +5 -4
  260. package/dist/networkQualityMonitor/index.js.map +1 -1
  261. package/dist/personal-meeting-room/index.js +2 -3
  262. package/dist/personal-meeting-room/index.js.map +1 -1
  263. package/dist/personal-meeting-room/request.js +2 -3
  264. package/dist/personal-meeting-room/request.js.map +1 -1
  265. package/dist/personal-meeting-room/util.js +1 -2
  266. package/dist/personal-meeting-room/util.js.map +1 -1
  267. package/dist/reachability/clusterReachability.d.ts +109 -0
  268. package/dist/reachability/clusterReachability.js +357 -0
  269. package/dist/reachability/clusterReachability.js.map +1 -0
  270. package/dist/reachability/index.d.ts +61 -95
  271. package/dist/reachability/index.js +304 -392
  272. package/dist/reachability/index.js.map +1 -1
  273. package/dist/reachability/request.d.ts +7 -3
  274. package/dist/reachability/request.js +18 -10
  275. package/dist/reachability/request.js.map +1 -1
  276. package/dist/reachability/util.d.ts +8 -0
  277. package/dist/reachability/util.js +29 -0
  278. package/dist/reachability/util.js.map +1 -0
  279. package/dist/reactions/constants.d.ts +3 -0
  280. package/dist/reactions/constants.js +12 -0
  281. package/dist/reactions/constants.js.map +1 -0
  282. package/dist/reactions/reactions.d.ts +2 -2
  283. package/dist/reactions/reactions.js +4 -6
  284. package/dist/reactions/reactions.js.map +1 -1
  285. package/dist/reactions/reactions.type.d.ts +23 -3
  286. package/dist/reactions/reactions.type.js +21 -23
  287. package/dist/reactions/reactions.type.js.map +1 -1
  288. package/dist/reconnection-manager/index.d.ts +32 -8
  289. package/dist/reconnection-manager/index.js +285 -232
  290. package/dist/reconnection-manager/index.js.map +1 -1
  291. package/dist/recording-controller/enums.js +4 -5
  292. package/dist/recording-controller/enums.js.map +1 -1
  293. package/dist/recording-controller/index.d.ts +15 -1
  294. package/dist/recording-controller/index.js +57 -46
  295. package/dist/recording-controller/index.js.map +1 -1
  296. package/dist/recording-controller/util.d.ts +5 -4
  297. package/dist/recording-controller/util.js +10 -10
  298. package/dist/recording-controller/util.js.map +1 -1
  299. package/dist/roap/index.d.ts +9 -47
  300. package/dist/roap/index.js +100 -238
  301. package/dist/roap/index.js.map +1 -1
  302. package/dist/roap/request.d.ts +18 -12
  303. package/dist/roap/request.js +126 -180
  304. package/dist/roap/request.js.map +1 -1
  305. package/dist/roap/turnDiscovery.d.ts +27 -16
  306. package/dist/roap/turnDiscovery.js +115 -105
  307. package/dist/roap/turnDiscovery.js.map +1 -1
  308. package/dist/rtcMetrics/constants.d.ts +4 -0
  309. package/dist/rtcMetrics/constants.js +11 -0
  310. package/dist/rtcMetrics/constants.js.map +1 -0
  311. package/dist/rtcMetrics/index.d.ts +54 -0
  312. package/dist/rtcMetrics/index.js +140 -0
  313. package/dist/rtcMetrics/index.js.map +1 -0
  314. package/dist/statsAnalyzer/global.d.ts +1 -83
  315. package/dist/statsAnalyzer/global.js +2 -85
  316. package/dist/statsAnalyzer/global.js.map +1 -1
  317. package/dist/statsAnalyzer/index.d.ts +50 -30
  318. package/dist/statsAnalyzer/index.js +436 -511
  319. package/dist/statsAnalyzer/index.js.map +1 -1
  320. package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
  321. package/dist/statsAnalyzer/mqaUtil.js +130 -90
  322. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  323. package/dist/transcription/index.js +1 -2
  324. package/dist/transcription/index.js.map +1 -1
  325. package/dist/webinar/collection.d.ts +16 -0
  326. package/dist/webinar/collection.js +43 -0
  327. package/dist/webinar/collection.js.map +1 -0
  328. package/dist/webinar/index.d.ts +5 -0
  329. package/dist/webinar/index.js +68 -0
  330. package/dist/webinar/index.js.map +1 -0
  331. package/package.json +39 -26
  332. package/src/annotation/annotation.types.ts +50 -0
  333. package/src/annotation/constants.ts +36 -0
  334. package/src/annotation/index.ts +328 -0
  335. package/src/breakouts/README.md +220 -0
  336. package/src/breakouts/breakout.ts +188 -0
  337. package/src/breakouts/collection.ts +19 -0
  338. package/src/breakouts/edit-lock-error.ts +25 -0
  339. package/src/breakouts/events.ts +56 -0
  340. package/src/breakouts/index.ts +925 -0
  341. package/src/breakouts/request.ts +55 -0
  342. package/src/breakouts/utils.ts +57 -0
  343. package/src/common/errors/no-meeting-info.ts +24 -0
  344. package/src/common/errors/webex-errors.ts +36 -12
  345. package/src/common/logs/logger-proxy.ts +1 -1
  346. package/src/common/logs/request.ts +5 -1
  347. package/src/common/queue.ts +22 -8
  348. package/src/config.ts +6 -7
  349. package/src/constants.ts +265 -100
  350. package/src/controls-options-manager/enums.ts +12 -0
  351. package/src/controls-options-manager/index.ts +116 -21
  352. package/src/controls-options-manager/types.ts +59 -0
  353. package/src/controls-options-manager/util.ts +294 -14
  354. package/src/index.ts +44 -0
  355. package/src/interceptors/index.ts +3 -0
  356. package/src/interceptors/locusRetry.ts +67 -0
  357. package/src/interpretation/README.md +60 -0
  358. package/src/interpretation/collection.ts +19 -0
  359. package/src/interpretation/index.ts +332 -0
  360. package/src/interpretation/siLanguage.ts +18 -0
  361. package/src/locus-info/controlsUtils.ts +110 -0
  362. package/src/locus-info/index.ts +450 -61
  363. package/src/locus-info/infoUtils.ts +14 -2
  364. package/src/locus-info/mediaSharesUtils.ts +64 -0
  365. package/src/locus-info/parser.ts +258 -47
  366. package/src/locus-info/selfUtils.ts +85 -2
  367. package/src/media/index.ts +153 -370
  368. package/src/media/properties.ts +106 -136
  369. package/src/media/util.ts +0 -21
  370. package/src/mediaQualityMetrics/config.ts +244 -377
  371. package/src/meeting/in-meeting-actions.ts +176 -0
  372. package/src/meeting/index.ts +4306 -2581
  373. package/src/meeting/locusMediaRequest.ts +313 -0
  374. package/src/meeting/muteState.ts +224 -138
  375. package/src/meeting/request.ts +214 -127
  376. package/src/meeting/request.type.ts +13 -0
  377. package/src/meeting/util.ts +687 -423
  378. package/src/meeting/voicea-meeting.ts +161 -0
  379. package/src/meeting-info/index.ts +81 -8
  380. package/src/meeting-info/meeting-info-v2.ts +163 -13
  381. package/src/meeting-info/util.ts +1 -1
  382. package/src/meeting-info/utilv2.ts +28 -28
  383. package/src/meetings/collection.ts +33 -0
  384. package/src/meetings/index.ts +529 -127
  385. package/src/meetings/meetings.types.ts +12 -0
  386. package/src/meetings/request.ts +2 -0
  387. package/src/meetings/util.ts +116 -5
  388. package/src/member/index.ts +43 -1
  389. package/src/member/types.ts +38 -0
  390. package/src/member/util.ts +125 -28
  391. package/src/members/collection.ts +8 -0
  392. package/src/members/index.ts +187 -52
  393. package/src/members/request.ts +87 -27
  394. package/src/members/util.ts +332 -291
  395. package/src/metrics/constants.ts +15 -6
  396. package/src/metrics/index.ts +1 -471
  397. package/src/multistream/mediaRequestManager.ts +440 -0
  398. package/src/multistream/receiveSlot.ts +184 -0
  399. package/src/multistream/receiveSlotManager.ts +166 -0
  400. package/src/multistream/remoteMedia.ts +254 -0
  401. package/src/multistream/remoteMediaGroup.ts +284 -0
  402. package/src/multistream/remoteMediaManager.ts +1145 -0
  403. package/src/multistream/sendSlotManager.ts +170 -0
  404. package/src/networkQualityMonitor/index.ts +6 -6
  405. package/src/reachability/clusterReachability.ts +320 -0
  406. package/src/reachability/index.ts +246 -347
  407. package/src/reachability/request.ts +17 -8
  408. package/src/reachability/util.ts +24 -0
  409. package/src/reactions/constants.ts +4 -0
  410. package/src/reactions/reactions.ts +4 -4
  411. package/src/reactions/reactions.type.ts +30 -4
  412. package/src/reconnection-manager/index.ts +168 -156
  413. package/src/recording-controller/index.ts +20 -3
  414. package/src/recording-controller/util.ts +26 -9
  415. package/src/roap/index.ts +96 -241
  416. package/src/roap/request.ts +74 -148
  417. package/src/roap/turnDiscovery.ts +62 -56
  418. package/src/rtcMetrics/constants.ts +3 -0
  419. package/src/rtcMetrics/index.ts +124 -0
  420. package/src/statsAnalyzer/global.ts +1 -84
  421. package/src/statsAnalyzer/index.ts +479 -645
  422. package/src/statsAnalyzer/mqaUtil.ts +128 -126
  423. package/src/webinar/collection.ts +31 -0
  424. package/src/webinar/index.ts +62 -0
  425. package/test/integration/spec/converged-space-meetings.js +233 -0
  426. package/test/integration/spec/journey.js +320 -264
  427. package/test/integration/spec/space-meeting.js +77 -4
  428. package/test/unit/spec/annotation/index.ts +418 -0
  429. package/test/unit/spec/breakouts/breakout.ts +237 -0
  430. package/test/unit/spec/breakouts/collection.ts +15 -0
  431. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  432. package/test/unit/spec/breakouts/events.ts +89 -0
  433. package/test/unit/spec/breakouts/index.ts +1790 -0
  434. package/test/unit/spec/breakouts/request.ts +104 -0
  435. package/test/unit/spec/breakouts/utils.js +72 -0
  436. package/test/unit/spec/common/queue.js +31 -2
  437. package/test/unit/spec/controls-options-manager/index.js +163 -0
  438. package/test/unit/spec/controls-options-manager/util.js +576 -60
  439. package/test/unit/spec/fixture/locus.js +1 -0
  440. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  441. package/test/unit/spec/interpretation/collection.ts +15 -0
  442. package/test/unit/spec/interpretation/index.ts +589 -0
  443. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  444. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  445. package/test/unit/spec/locus-info/index.js +1438 -16
  446. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  447. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  448. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  449. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  450. package/test/unit/spec/locus-info/parser.js +116 -35
  451. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  452. package/test/unit/spec/media/index.ts +290 -0
  453. package/test/unit/spec/media/properties.ts +75 -84
  454. package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
  455. package/test/unit/spec/meeting/index.js +8886 -2815
  456. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  457. package/test/unit/spec/meeting/muteState.js +409 -213
  458. package/test/unit/spec/meeting/request.js +523 -43
  459. package/test/unit/spec/meeting/utils.js +834 -24
  460. package/test/unit/spec/meeting-info/index.js +300 -0
  461. package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
  462. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  463. package/test/unit/spec/meetings/collection.js +26 -0
  464. package/test/unit/spec/meetings/index.js +1446 -217
  465. package/test/unit/spec/meetings/utils.js +202 -2
  466. package/test/unit/spec/member/index.js +32 -9
  467. package/test/unit/spec/member/util.js +499 -61
  468. package/test/unit/spec/members/index.js +394 -5
  469. package/test/unit/spec/members/request.js +206 -27
  470. package/test/unit/spec/members/utils.js +173 -38
  471. package/test/unit/spec/metrics/index.js +1 -50
  472. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  473. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  474. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  475. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  476. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  477. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  478. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  479. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  480. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  481. package/test/unit/spec/reachability/index.ts +532 -24
  482. package/test/unit/spec/reachability/request.js +68 -0
  483. package/test/unit/spec/reachability/util.ts +40 -0
  484. package/test/unit/spec/reconnection-manager/index.js +163 -24
  485. package/test/unit/spec/recording-controller/index.js +293 -218
  486. package/test/unit/spec/recording-controller/util.js +223 -96
  487. package/test/unit/spec/roap/index.ts +187 -77
  488. package/test/unit/spec/roap/request.ts +255 -0
  489. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  490. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  491. package/test/unit/spec/stats-analyzer/index.js +644 -165
  492. package/test/unit/spec/webinar/collection.ts +13 -0
  493. package/test/unit/spec/webinar/index.ts +60 -0
  494. package/test/utils/constants.js +9 -0
  495. package/test/utils/integrationTestUtils.js +46 -0
  496. package/test/utils/testUtils.js +0 -45
  497. package/test/utils/webex-config.js +4 -0
  498. package/test/utils/webex-test-users.js +7 -3
  499. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  500. package/dist/meeting/effectsState.d.ts +0 -42
  501. package/dist/meeting/effectsState.js +0 -260
  502. package/dist/meeting/effectsState.js.map +0 -1
  503. package/dist/metrics/config.d.ts +0 -169
  504. package/dist/metrics/config.js +0 -289
  505. package/dist/metrics/config.js.map +0 -1
  506. package/dist/peer-connection-manager/index.d.ts +0 -6
  507. package/dist/peer-connection-manager/index.js +0 -671
  508. package/dist/peer-connection-manager/index.js.map +0 -1
  509. package/dist/peer-connection-manager/util.d.ts +0 -6
  510. package/dist/peer-connection-manager/util.js +0 -110
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.d.ts +0 -10
  513. package/dist/roap/collection.js +0 -63
  514. package/dist/roap/collection.js.map +0 -1
  515. package/dist/roap/handler.d.ts +0 -47
  516. package/dist/roap/handler.js +0 -279
  517. package/dist/roap/handler.js.map +0 -1
  518. package/dist/roap/state.d.ts +0 -9
  519. package/dist/roap/state.js +0 -127
  520. package/dist/roap/state.js.map +0 -1
  521. package/dist/roap/util.d.ts +0 -2
  522. package/dist/roap/util.js +0 -76
  523. package/dist/roap/util.js.map +0 -1
  524. package/src/index.js +0 -15
  525. package/src/meeting/effectsState.ts +0 -209
  526. package/src/metrics/config.ts +0 -485
  527. package/src/peer-connection-manager/index.ts +0 -847
  528. package/src/peer-connection-manager/util.ts +0 -119
  529. package/src/roap/collection.ts +0 -62
  530. package/src/roap/handler.ts +0 -294
  531. package/src/roap/state.ts +0 -156
  532. package/src/roap/util.ts +0 -100
  533. package/test/unit/spec/meeting/effectsState.js +0 -281
  534. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  535. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  536. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  537. package/test/unit/spec/roap/util.js +0 -30
  538. /package/dist/common/errors/{reclaim-host-role-error.d.ts → reclaim-host-role-errors.d.ts} +0 -0
  539. /package/src/common/errors/{reclaim-host-role-error.ts → reclaim-host-role-errors.ts} +0 -0
@@ -1,17 +1,34 @@
1
- import {DISPLAY_HINTS} from '../constants';
1
+ import {DISPLAY_HINTS, SELF_POLICY} from '../constants';
2
2
  import RecordingAction from './enums';
3
+ import MeetingUtil from '../meeting/util';
3
4
 
4
- const canUserStart = (displayHints: Array<string>): boolean =>
5
- displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);
5
+ const canUserStart = (
6
+ displayHints: Array<string>,
7
+ userPolicies: Record<SELF_POLICY, boolean>
8
+ ): boolean =>
9
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START) &&
10
+ MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
6
11
 
7
- const canUserPause = (displayHints: Array<string>): boolean =>
8
- displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);
12
+ const canUserPause = (
13
+ displayHints: Array<string>,
14
+ userPolicies: Record<SELF_POLICY, boolean>
15
+ ): boolean =>
16
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE) &&
17
+ MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
9
18
 
10
- const canUserResume = (displayHints: Array<string>): boolean =>
11
- displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME);
19
+ const canUserResume = (
20
+ displayHints: Array<string>,
21
+ userPolicies: Record<SELF_POLICY, boolean>
22
+ ): boolean =>
23
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME) &&
24
+ MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
12
25
 
13
- const canUserStop = (displayHints: Array<string>): boolean =>
14
- displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP);
26
+ const canUserStop = (
27
+ displayHints: Array<string>,
28
+ userPolicies: Record<SELF_POLICY, boolean>
29
+ ): boolean =>
30
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP) &&
31
+ MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
15
32
 
16
33
  const extractLocusId = (url: string) => {
17
34
  return url?.split('/').pop();
package/src/roap/index.ts CHANGED
@@ -3,21 +3,22 @@ import {StatelessWebexPlugin} from '@webex/webex-core';
3
3
 
4
4
  import {ROAP} from '../constants';
5
5
  import LoggerProxy from '../common/logs/logger-proxy';
6
- import MeetingUtil from '../meeting/util';
7
6
 
8
- import RoapHandler from './handler';
9
7
  import RoapRequest from './request';
10
- import RoapCollection from './collection';
11
8
  import TurnDiscovery from './turnDiscovery';
12
9
  import Meeting from '../meeting';
10
+ import MeetingUtil from '../meeting/util';
11
+ import Metrics from '../metrics';
12
+ import BEHAVIORAL_METRICS from '../metrics/constants';
13
13
 
14
14
  /**
15
15
  * Roap options
16
16
  * @typedef {Object} RoapOptions
17
17
  * @property {String} sdp
18
18
  * @property {Meeting} meeting
19
- * @property {Number} roapSeq
20
- * @property {Boolean} reconnect
19
+ * @property {Number} seq
20
+ * @property {Number} tieBreaker
21
+ * @property {Boolean} reconnect
21
22
  */
22
23
 
23
24
  /**
@@ -61,20 +62,6 @@ export default class Roap extends StatelessWebexPlugin {
61
62
  * @memberof Roap
62
63
  */
63
64
  this.options = options;
64
- /**
65
- * The Roap Process State Handler
66
- * @instance
67
- * @type {RoapHandler}
68
- * @private
69
- * @memberof Roap
70
- */
71
- this.roapHandler = new RoapHandler(
72
- this.attrs,
73
- this.options,
74
- this.sendRoapOK.bind(this),
75
- this.sendRoapAnswer.bind(this),
76
- this.roapFinished.bind(this)
77
- );
78
65
  /**
79
66
  * The Roap Request Server Proxy Object
80
67
  * @instance
@@ -84,72 +71,17 @@ export default class Roap extends StatelessWebexPlugin {
84
71
  */
85
72
  // @ts-ignore
86
73
  this.roapRequest = new RoapRequest({}, options);
87
- /**
88
- * The last roap offer sent to server and acked
89
- * @instance
90
- * @type {Object}
91
- * @private
92
- * @memberof Roap
93
- */
94
- this.lastRoapOffer = {};
95
74
 
96
75
  this.turnDiscovery = new TurnDiscovery(this.roapRequest);
97
76
  }
98
77
 
99
- /**
100
- * Starts listening to mercury events for Roap messages
101
- * @param {object} data event object
102
- * @returns {Promise}
103
- * @private
104
- * @memberof Roap
105
- */
106
- private roapEvent(data: any) {
107
- const msg = data.message;
108
- const {correlationId} = data;
109
-
110
- LoggerProxy.logger.log(
111
- `Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`
112
- );
113
-
114
- if (msg.messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
115
- // turn discovery is not part of normal roap protocol and so we are not handling it
116
- // through the usual roap state machine
117
- this.turnDiscovery.handleTurnDiscoveryResponse(msg);
118
- } else {
119
- this.roapHandler.submit({
120
- type: ROAP.RECEIVE_ROAP_MSG,
121
- msg,
122
- correlationId,
123
- });
124
- }
125
- }
126
-
127
- /**
128
- *
129
- * @param {String} correlationId correlation id of a meeting
130
- * @param {Number} seq ROAP sequence number
131
- * @returns {Promise}
132
- * @private
133
- * @memberof Roap
134
- */
135
- private stop(correlationId: string, seq: number) {
136
- this.roapHandler.submit({
137
- type: ROAP.RECEIVE_CALL_LEAVE,
138
- seq,
139
- correlationId,
140
- });
141
-
142
- return Promise.resolve();
143
- }
144
-
145
78
  /**
146
79
  *
147
80
  * @param {SeqOptions} options
148
81
  * @returns {null}
149
- * @private
150
82
  * @memberof Roap
151
83
  */
152
- private sendRoapOK(options: any) {
84
+ public sendRoapOK(options: any) {
153
85
  return Promise.resolve().then(() => {
154
86
  // @ts-ignore
155
87
  const meeting = this.webex.meetings.meetingCollection.getByKey(
@@ -169,35 +101,26 @@ export default class Roap extends StatelessWebexPlugin {
169
101
  roapMessage,
170
102
  locusSelfUrl: meeting.selfUrl,
171
103
  mediaId: options.mediaId,
172
- correlationId: options.correlationId,
173
104
  audioMuted: meeting.audio?.isLocallyMuted(),
174
105
  videoMuted: meeting.video?.isLocallyMuted(),
175
106
  meetingId: meeting.id,
107
+ locusMediaRequest: meeting.locusMediaRequest,
176
108
  })
177
109
  .then(() => {
178
- this.roapHandler.submit({
179
- type: ROAP.SEND_ROAP_MSG,
180
- msg: roapMessage,
181
- correlationId: options.correlationId,
182
- });
183
110
  LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);
184
- meeting.setRoapSeq(options.seq);
185
111
  });
186
112
  });
187
113
  }
188
114
 
189
- // eslint-disable-next-line no-warning-comments
190
- // TODO: try to merge sendRoapOk and roapAnswer
191
115
  /**
192
116
  * Sends a ROAP answer...
193
117
  * @param {SeqOptions} options
194
118
  * @param {Boolean} options.audioMuted
195
119
  * @param {Boolean} options.videoMuted
196
120
  * @returns {Promise}
197
- * @private
198
121
  * @memberof Roap
199
122
  */
200
- private sendRoapAnswer(options: any) {
123
+ public sendRoapAnswer(options: any) {
201
124
  // @ts-ignore
202
125
  const meeting = this.webex.meetings.meetingCollection.getByKey(
203
126
  'correlationId',
@@ -205,200 +128,131 @@ export default class Roap extends StatelessWebexPlugin {
205
128
  );
206
129
  const roapMessage = {
207
130
  messageType: ROAP.ROAP_TYPES.ANSWER,
208
- sdps: options.sdps,
131
+ sdps: [options.sdp],
209
132
  version: ROAP.ROAP_VERSION,
210
133
  seq: options.seq,
211
134
  };
212
135
 
213
- this.roapHandler.submit({
214
- type: ROAP.SEND_ROAP_MSG,
215
- msg: roapMessage,
216
- correlationId: options.correlationId,
136
+ return this.roapRequest.sendRoap({
137
+ roapMessage,
138
+ locusSelfUrl: meeting.selfUrl,
139
+ mediaId: options.mediaId,
140
+ meetingId: meeting.id,
141
+ audioMuted: meeting.audio?.isLocallyMuted(),
142
+ videoMuted: meeting.video?.isLocallyMuted(),
143
+ locusMediaRequest: meeting.locusMediaRequest,
217
144
  });
145
+ }
146
+
147
+ /**
148
+ * Sends a ROAP error...
149
+ * @param {Object} options
150
+ * @returns {Promise}
151
+ * @memberof Roap
152
+ */
153
+ sendRoapError(options) {
154
+ // @ts-ignore
155
+ const meeting = this.webex.meetings.meetingCollection.getByKey(
156
+ 'correlationId',
157
+ options.correlationId
158
+ );
159
+ const roapMessage = {
160
+ messageType: ROAP.ROAP_TYPES.ERROR,
161
+ version: ROAP.ROAP_VERSION,
162
+ errorType: options.errorType,
163
+ seq: options.seq,
164
+ };
218
165
 
219
166
  return this.roapRequest
220
167
  .sendRoap({
221
168
  roapMessage,
222
169
  locusSelfUrl: meeting.selfUrl,
223
170
  mediaId: options.mediaId,
224
- correlationId: options.correlationId,
225
171
  audioMuted: meeting.audio?.isLocallyMuted(),
226
172
  videoMuted: meeting.video?.isLocallyMuted(),
227
173
  meetingId: meeting.id,
174
+ locusMediaRequest: meeting.locusMediaRequest,
228
175
  })
229
176
  .then(() => {
230
- meeting.setRoapSeq(options.seq);
231
-
232
- this.roapHandler.submit({
233
- type: ROAP.SEND_ROAP_MSG_SUCCESS,
234
- seq: roapMessage.seq,
235
- correlationId: meeting.correlationId,
236
- });
177
+ LoggerProxy.logger.log(
178
+ `Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`
179
+ );
237
180
  });
238
181
  }
239
182
 
240
- /**
241
- * Sends a ROAP error...
242
- * @param {Object} session
243
- * @param {Object} locus
244
- * @param {String} errorType
245
- * @returns {Promise}
246
- * @private
247
- * @memberof Roap
248
- */
249
- private sendRoapError(session: any, locus: object, errorType: string) {
250
- const msg = {
251
- messageType: ROAP.ROAP_TYPES.ERROR,
252
- version: ROAP.ROAP_VERSION,
253
- errorType,
254
- seq: session.OFFER.seq,
255
- };
256
-
257
- return this.roapRequest.sendRoap(msg, locus);
258
- }
259
-
260
183
  /**
261
184
  * sends a roap media request
262
185
  * @param {RoapOptions} options
263
186
  * @returns {Promise}
264
- * @private
265
187
  * @memberof Roap
266
188
  */
267
189
  sendRoapMediaRequest(options: any) {
268
- const {meeting, reconnect} = options;
190
+ const {meeting, seq, sdp, tieBreaker} = options;
269
191
  const roapMessage = {
270
192
  messageType: ROAP.ROAP_TYPES.OFFER,
271
- sdps: [options.sdp],
272
- // sdps: [options.sdp],
193
+ sdps: [sdp],
273
194
  version: ROAP.ROAP_VERSION,
274
- seq:
275
- typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))
276
- ? 0
277
- : options.roapSeq + 1,
278
- tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario
195
+ seq,
196
+ tieBreaker,
197
+ headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],
279
198
  };
280
199
 
281
- this.roapHandler.submit({
282
- type: ROAP.SEND_ROAP_MSG,
283
- msg: roapMessage,
284
- correlationId: meeting.correlationId,
285
- });
286
-
287
- // When reconnecting, it's important that the first roap message being sent out has empty media id.
288
- // Normally this is the roap offer, but when TURN discovery is enabled,
289
- // then this is the TURN discovery request message
290
- return this.turnDiscovery
291
- .isSkipped(meeting)
292
- .then((isTurnDiscoverySkipped) => {
293
- const sendEmptyMediaId = reconnect && isTurnDiscoverySkipped;
200
+ // The only time we want to send an empty media id is when we are reconnecting, because this way we tell Locus
201
+ // that it needs to create a new confluence, but when reconnecting we always send TURN_DISCOVERY_REQUEST first,
202
+ // so we don't need to ever send an empty media id here
203
+ const sendEmptyMediaId = false;
294
204
 
295
- return this.roapRequest.sendRoap({
296
- roapMessage,
297
- correlationId: meeting.correlationId,
298
- locusSelfUrl: meeting.selfUrl,
299
- mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
300
- audioMuted: meeting.audio?.isLocallyMuted(),
301
- videoMuted: meeting.video?.isLocallyMuted(),
302
- meetingId: meeting.id,
303
- });
205
+ return this.roapRequest
206
+ .sendRoap({
207
+ roapMessage,
208
+ locusSelfUrl: meeting.selfUrl,
209
+ mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
210
+ meetingId: meeting.id,
211
+ preferTranscoding: !meeting.isMultistream,
212
+ locusMediaRequest: meeting.locusMediaRequest,
213
+ ipVersion: MeetingUtil.getIpVersion(meeting.webex),
304
214
  })
305
-
306
215
  .then(({locus, mediaConnections}) => {
307
- this.roapHandler.submit({
308
- type: ROAP.SEND_ROAP_MSG_SUCCESS,
309
- seq: roapMessage.seq,
310
- correlationId: meeting.correlationId,
311
- });
312
- meeting.setRoapSeq(roapMessage.seq);
313
-
314
216
  if (mediaConnections) {
315
217
  meeting.updateMediaConnections(mediaConnections);
316
218
  }
317
219
 
318
- // eslint-disable-next-line no-warning-comments
319
- // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here
320
- return locus;
321
- // eslint-disable-next-line no-warning-comments
322
- // TODO: check where to update the sequence number
323
- });
324
- }
325
-
326
- /**
327
- * sends a roap media request
328
- * @param {RoapOptions} options
329
- * @returns {Promise}
330
- * @private
331
- * @memberof Roap
332
- */
333
- sendRoapCallRequest = (options: any) => {
334
- const {meeting} = options;
335
- const roapMessage = {
336
- messageType: ROAP.ROAP_TYPES.OFFER,
337
- sdps: [options.sdp],
338
- version: ROAP.ROAP_VERSION,
339
- seq:
340
- typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))
341
- ? 0
342
- : options.roapSeq + 1,
343
- tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario
344
- };
345
-
346
- this.roapHandler.submit({
347
- type: ROAP.SEND_ROAP_MSG,
348
- msg: roapMessage,
349
- correlationId: meeting.correlationId,
350
- });
220
+ let roapAnswer;
221
+
222
+ if (mediaConnections?.[0]?.remoteSdp) {
223
+ const remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);
224
+
225
+ if (remoteSdp.roapMessage) {
226
+ const {
227
+ seq: answerSeq,
228
+ messageType,
229
+ sdps,
230
+ errorType,
231
+ errorCause,
232
+ headers,
233
+ } = remoteSdp.roapMessage;
234
+
235
+ roapAnswer = {
236
+ seq: answerSeq,
237
+ messageType,
238
+ sdp: sdps[0],
239
+ errorType,
240
+ errorCause,
241
+ headers,
242
+ };
243
+ }
244
+ }
351
245
 
352
- const roapBody = {
353
- localMedias: [
354
- {
355
- localSdp: JSON.stringify(
356
- this.roapRequest.attachRechabilityData({
357
- roapMessage,
358
- // eslint-disable-next-line no-warning-comments
359
- // TODO: check whats the need for video and audiomute
360
- audioMuted: meeting.audio?.isLocallyMuted(),
361
- videoMuted: meeting.video?.isLocallyMuted(),
362
- })
363
- ),
364
- // mediaId: meeting.mediaId
365
- },
366
- ],
367
- };
246
+ if (!roapAnswer) {
247
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {
248
+ correlationId: meeting.correlationId,
249
+ messageType: 'ANSWER',
250
+ isMultistream: meeting.isMultistream,
251
+ });
252
+ }
368
253
 
369
- return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody}).then((locus) => {
370
- this.roapHandler.submit({
371
- type: ROAP.SEND_ROAP_MSG_SUCCESS,
372
- seq: roapMessage.seq,
373
- correlationId: meeting.correlationId,
254
+ return {locus, roapAnswer};
374
255
  });
375
- meeting.setRoapSeq(roapMessage.seq);
376
-
377
- // eslint-disable-next-line no-warning-comments
378
- // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here
379
- return locus;
380
- // eslint-disable-next-line no-warning-comments
381
- // TODO: check where to update the sequence number
382
- });
383
- };
384
-
385
- /**
386
- * Called when the roap sequence is finished (completed successfully or failed)
387
- * @param {String} correlationId id of the meeting affected
388
- * @param {String} sequenceId the id of the finished sequence
389
- * @returns {undefined}
390
- * @private
391
- * @memberof Roap
392
- */
393
- private roapFinished(correlationId: string, sequenceId: string) {
394
- RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);
395
- // @ts-ignore
396
- const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);
397
-
398
- meeting.mediaNegotiatedEvent();
399
- if (!RoapCollection.isBusy(correlationId)) {
400
- meeting.processNextQueuedMediaUpdate();
401
- }
402
256
  }
403
257
 
404
258
  /**
@@ -409,9 +263,10 @@ export default class Roap extends StatelessWebexPlugin {
409
263
  * @param {Meeting} meeting
410
264
  * @param {Boolean} isReconnecting should be set to true if this is a new
411
265
  * media connection just after a reconnection
266
+ * @param {Boolean} [isForced]
412
267
  * @returns {Promise}
413
268
  */
414
- doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {
415
- return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);
269
+ doTurnDiscovery(meeting: Meeting, isReconnecting: boolean, isForced?: boolean) {
270
+ return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting, isForced);
416
271
  }
417
272
  }