@webex/plugin-meetings 2.59.8 → 2.60.0-next.2

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 (528) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +41 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +357 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +215 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +22 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +51 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +44 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1047 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +77 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +64 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/browser-detection.js +2 -3
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +3 -4
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.js +50 -0
  37. package/dist/common/errors/no-meeting-info.js.map +1 -0
  38. package/dist/common/errors/parameter.js +3 -4
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +1 -2
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +1 -2
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  45. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  46. package/dist/common/errors/reconnection-in-progress.js +1 -2
  47. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  48. package/dist/common/errors/reconnection.js +1 -2
  49. package/dist/common/errors/reconnection.js.map +1 -1
  50. package/dist/common/errors/stats.js +1 -2
  51. package/dist/common/errors/stats.js.map +1 -1
  52. package/dist/common/errors/webex-errors.js +48 -28
  53. package/dist/common/errors/webex-errors.js.map +1 -1
  54. package/dist/common/errors/webex-meetings-error.js +1 -2
  55. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  56. package/dist/common/events/events-scope.js +1 -2
  57. package/dist/common/events/events-scope.js.map +1 -1
  58. package/dist/common/events/events.js +1 -2
  59. package/dist/common/events/events.js.map +1 -1
  60. package/dist/common/events/trigger-proxy.js +1 -2
  61. package/dist/common/events/trigger-proxy.js.map +1 -1
  62. package/dist/common/events/util.js +1 -2
  63. package/dist/common/events/util.js.map +1 -1
  64. package/dist/common/logs/logger-config.js +1 -2
  65. package/dist/common/logs/logger-config.js.map +1 -1
  66. package/dist/common/logs/logger-proxy.js +2 -3
  67. package/dist/common/logs/logger-proxy.js.map +1 -1
  68. package/dist/common/logs/request.js +8 -5
  69. package/dist/common/logs/request.js.map +1 -1
  70. package/dist/common/queue.js +22 -9
  71. package/dist/common/queue.js.map +1 -1
  72. package/dist/config.js +8 -11
  73. package/dist/config.js.map +1 -1
  74. package/dist/constants.js +437 -435
  75. package/dist/constants.js.map +1 -1
  76. package/dist/controls-options-manager/constants.js +3 -6
  77. package/dist/controls-options-manager/constants.js.map +1 -1
  78. package/dist/controls-options-manager/enums.js +15 -6
  79. package/dist/controls-options-manager/enums.js.map +1 -1
  80. package/dist/controls-options-manager/index.js +127 -38
  81. package/dist/controls-options-manager/index.js.map +1 -1
  82. package/dist/controls-options-manager/types.js +7 -0
  83. package/dist/controls-options-manager/types.js.map +1 -0
  84. package/dist/controls-options-manager/util.js +309 -19
  85. package/dist/controls-options-manager/util.js.map +1 -1
  86. package/dist/index.js +116 -4
  87. package/dist/index.js.map +1 -1
  88. package/dist/interpretation/collection.js +22 -0
  89. package/dist/interpretation/collection.js.map +1 -0
  90. package/dist/interpretation/index.js +365 -0
  91. package/dist/interpretation/index.js.map +1 -0
  92. package/dist/interpretation/siLanguage.js +24 -0
  93. package/dist/interpretation/siLanguage.js.map +1 -0
  94. package/dist/locus-info/controlsUtils.js +100 -11
  95. package/dist/locus-info/controlsUtils.js.map +1 -1
  96. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  97. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  98. package/dist/locus-info/fullState.js +1 -2
  99. package/dist/locus-info/fullState.js.map +1 -1
  100. package/dist/locus-info/hostUtils.js +1 -2
  101. package/dist/locus-info/hostUtils.js.map +1 -1
  102. package/dist/locus-info/index.js +425 -84
  103. package/dist/locus-info/index.js.map +1 -1
  104. package/dist/locus-info/infoUtils.js +13 -5
  105. package/dist/locus-info/infoUtils.js.map +1 -1
  106. package/dist/locus-info/mediaSharesUtils.js +58 -3
  107. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  108. package/dist/locus-info/parser.js +253 -80
  109. package/dist/locus-info/parser.js.map +1 -1
  110. package/dist/locus-info/selfUtils.js +97 -13
  111. package/dist/locus-info/selfUtils.js.map +1 -1
  112. package/dist/media/index.js +106 -319
  113. package/dist/media/index.js.map +1 -1
  114. package/dist/media/properties.js +96 -153
  115. package/dist/media/properties.js.map +1 -1
  116. package/dist/media/util.js +1 -22
  117. package/dist/media/util.js.map +1 -1
  118. package/dist/mediaQualityMetrics/config.js +498 -493
  119. package/dist/mediaQualityMetrics/config.js.map +1 -1
  120. package/dist/meeting/in-meeting-actions.js +92 -3
  121. package/dist/meeting/in-meeting-actions.js.map +1 -1
  122. package/dist/meeting/index.js +4628 -2971
  123. package/dist/meeting/index.js.map +1 -1
  124. package/dist/meeting/locusMediaRequest.js +291 -0
  125. package/dist/meeting/locusMediaRequest.js.map +1 -0
  126. package/dist/meeting/muteState.js +224 -133
  127. package/dist/meeting/muteState.js.map +1 -1
  128. package/dist/meeting/request.js +297 -199
  129. package/dist/meeting/request.js.map +1 -1
  130. package/dist/meeting/request.type.js +7 -0
  131. package/dist/meeting/request.type.js.map +1 -0
  132. package/dist/meeting/state.js +1 -2
  133. package/dist/meeting/state.js.map +1 -1
  134. package/dist/meeting/util.js +605 -435
  135. package/dist/meeting/util.js.map +1 -1
  136. package/dist/meeting-info/collection.js +3 -4
  137. package/dist/meeting-info/collection.js.map +1 -1
  138. package/dist/meeting-info/index.js +74 -7
  139. package/dist/meeting-info/index.js.map +1 -1
  140. package/dist/meeting-info/meeting-info-v2.js +200 -63
  141. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  142. package/dist/meeting-info/request.js +1 -2
  143. package/dist/meeting-info/request.js.map +1 -1
  144. package/dist/meeting-info/util.js +2 -3
  145. package/dist/meeting-info/util.js.map +1 -1
  146. package/dist/meeting-info/utilv2.js +39 -41
  147. package/dist/meeting-info/utilv2.js.map +1 -1
  148. package/dist/meetings/collection.js +42 -4
  149. package/dist/meetings/collection.js.map +1 -1
  150. package/dist/meetings/index.js +477 -123
  151. package/dist/meetings/index.js.map +1 -1
  152. package/dist/meetings/meetings.types.js +7 -0
  153. package/dist/meetings/meetings.types.js.map +1 -0
  154. package/dist/meetings/request.js +4 -3
  155. package/dist/meetings/request.js.map +1 -1
  156. package/dist/meetings/util.js +107 -6
  157. package/dist/meetings/util.js.map +1 -1
  158. package/dist/member/index.js +54 -2
  159. package/dist/member/index.js.map +1 -1
  160. package/dist/member/member.types.js +3 -4
  161. package/dist/member/member.types.js.map +1 -1
  162. package/dist/member/types.js +23 -0
  163. package/dist/member/types.js.map +1 -0
  164. package/dist/member/util.js +131 -29
  165. package/dist/member/util.js.map +1 -1
  166. package/dist/members/collection.js +11 -2
  167. package/dist/members/collection.js.map +1 -1
  168. package/dist/members/index.js +174 -10
  169. package/dist/members/index.js.map +1 -1
  170. package/dist/members/request.js +108 -41
  171. package/dist/members/request.js.map +1 -1
  172. package/dist/members/types.js +14 -0
  173. package/dist/members/types.js.map +1 -0
  174. package/dist/members/util.js +327 -234
  175. package/dist/members/util.js.map +1 -1
  176. package/dist/metrics/constants.js +15 -9
  177. package/dist/metrics/constants.js.map +1 -1
  178. package/dist/metrics/index.js +4 -452
  179. package/dist/metrics/index.js.map +1 -1
  180. package/dist/multistream/mediaRequestManager.js +344 -0
  181. package/dist/multistream/mediaRequestManager.js.map +1 -0
  182. package/dist/multistream/receiveSlot.js +200 -0
  183. package/dist/multistream/receiveSlot.js.map +1 -0
  184. package/dist/multistream/receiveSlotManager.js +174 -0
  185. package/dist/multistream/receiveSlotManager.js.map +1 -0
  186. package/dist/multistream/remoteMedia.js +268 -0
  187. package/dist/multistream/remoteMedia.js.map +1 -0
  188. package/dist/multistream/remoteMediaGroup.js +267 -0
  189. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  190. package/dist/multistream/remoteMediaManager.js +1211 -0
  191. package/dist/multistream/remoteMediaManager.js.map +1 -0
  192. package/dist/multistream/sendSlotManager.js +236 -0
  193. package/dist/multistream/sendSlotManager.js.map +1 -0
  194. package/dist/networkQualityMonitor/index.js +5 -4
  195. package/dist/networkQualityMonitor/index.js.map +1 -1
  196. package/dist/personal-meeting-room/index.js +2 -3
  197. package/dist/personal-meeting-room/index.js.map +1 -1
  198. package/dist/personal-meeting-room/request.js +2 -3
  199. package/dist/personal-meeting-room/request.js.map +1 -1
  200. package/dist/personal-meeting-room/util.js +1 -2
  201. package/dist/personal-meeting-room/util.js.map +1 -1
  202. package/dist/reachability/index.js +265 -72
  203. package/dist/reachability/index.js.map +1 -1
  204. package/dist/reachability/request.js +18 -10
  205. package/dist/reachability/request.js.map +1 -1
  206. package/dist/reactions/constants.js +12 -0
  207. package/dist/reactions/constants.js.map +1 -0
  208. package/dist/reactions/reactions.js +4 -6
  209. package/dist/reactions/reactions.js.map +1 -1
  210. package/dist/reactions/reactions.type.js +21 -23
  211. package/dist/reactions/reactions.type.js.map +1 -1
  212. package/dist/reconnection-manager/index.js +281 -229
  213. package/dist/reconnection-manager/index.js.map +1 -1
  214. package/dist/recording-controller/enums.js +4 -5
  215. package/dist/recording-controller/enums.js.map +1 -1
  216. package/dist/recording-controller/index.js +57 -46
  217. package/dist/recording-controller/index.js.map +1 -1
  218. package/dist/recording-controller/util.js +10 -10
  219. package/dist/recording-controller/util.js.map +1 -1
  220. package/dist/roap/index.js +101 -235
  221. package/dist/roap/index.js.map +1 -1
  222. package/dist/roap/request.js +126 -180
  223. package/dist/roap/request.js.map +1 -1
  224. package/dist/roap/turnDiscovery.js +115 -105
  225. package/dist/roap/turnDiscovery.js.map +1 -1
  226. package/dist/rtcMetrics/constants.js +11 -0
  227. package/dist/rtcMetrics/constants.js.map +1 -0
  228. package/dist/rtcMetrics/index.js +140 -0
  229. package/dist/rtcMetrics/index.js.map +1 -0
  230. package/dist/statsAnalyzer/global.js +2 -85
  231. package/dist/statsAnalyzer/global.js.map +1 -1
  232. package/dist/statsAnalyzer/index.js +402 -424
  233. package/dist/statsAnalyzer/index.js.map +1 -1
  234. package/dist/statsAnalyzer/mqaUtil.js +117 -83
  235. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  236. package/dist/transcription/index.js +1 -2
  237. package/dist/transcription/index.js.map +1 -1
  238. package/dist/webinar/collection.js +43 -0
  239. package/dist/webinar/collection.js.map +1 -0
  240. package/dist/webinar/index.js +68 -0
  241. package/dist/webinar/index.js.map +1 -0
  242. package/package.json +34 -25
  243. package/src/annotation/annotation.types.ts +50 -0
  244. package/src/annotation/constants.ts +36 -0
  245. package/src/annotation/index.ts +328 -0
  246. package/src/breakouts/README.md +220 -0
  247. package/src/breakouts/breakout.ts +188 -0
  248. package/src/breakouts/collection.ts +19 -0
  249. package/src/breakouts/edit-lock-error.ts +25 -0
  250. package/src/breakouts/events.ts +56 -0
  251. package/src/breakouts/index.ts +925 -0
  252. package/src/breakouts/request.ts +55 -0
  253. package/src/breakouts/utils.ts +57 -0
  254. package/src/common/errors/no-meeting-info.ts +24 -0
  255. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  256. package/src/common/errors/webex-errors.ts +36 -12
  257. package/src/common/logs/logger-proxy.ts +1 -1
  258. package/src/common/logs/request.ts +5 -1
  259. package/src/common/queue.ts +22 -8
  260. package/src/config.ts +5 -7
  261. package/src/constants.ts +271 -93
  262. package/src/controls-options-manager/enums.ts +12 -0
  263. package/src/controls-options-manager/index.ts +116 -21
  264. package/src/controls-options-manager/types.ts +59 -0
  265. package/src/controls-options-manager/util.ts +294 -14
  266. package/src/index.ts +40 -0
  267. package/src/interpretation/README.md +60 -0
  268. package/src/interpretation/collection.ts +19 -0
  269. package/src/interpretation/index.ts +332 -0
  270. package/src/interpretation/siLanguage.ts +18 -0
  271. package/src/locus-info/controlsUtils.ts +110 -0
  272. package/src/locus-info/index.ts +449 -61
  273. package/src/locus-info/infoUtils.ts +14 -2
  274. package/src/locus-info/mediaSharesUtils.ts +64 -0
  275. package/src/locus-info/parser.ts +258 -47
  276. package/src/locus-info/selfUtils.ts +85 -2
  277. package/src/media/index.ts +153 -370
  278. package/src/media/properties.ts +106 -136
  279. package/src/media/util.ts +0 -21
  280. package/src/mediaQualityMetrics/config.ts +379 -377
  281. package/src/meeting/in-meeting-actions.ts +172 -0
  282. package/src/meeting/index.ts +3861 -2504
  283. package/src/meeting/locusMediaRequest.ts +313 -0
  284. package/src/meeting/muteState.ts +224 -138
  285. package/src/meeting/request.ts +207 -127
  286. package/src/meeting/request.type.ts +13 -0
  287. package/src/meeting/util.ts +590 -423
  288. package/src/meeting-info/index.ts +81 -8
  289. package/src/meeting-info/meeting-info-v2.ts +163 -13
  290. package/src/meeting-info/util.ts +1 -1
  291. package/src/meeting-info/utilv2.ts +28 -28
  292. package/src/meetings/collection.ts +33 -0
  293. package/src/meetings/index.ts +477 -124
  294. package/src/meetings/meetings.types.ts +12 -0
  295. package/src/meetings/request.ts +2 -0
  296. package/src/meetings/util.ts +116 -5
  297. package/src/member/index.ts +52 -1
  298. package/src/member/types.ts +38 -0
  299. package/src/member/util.ts +139 -28
  300. package/src/members/collection.ts +8 -0
  301. package/src/members/index.ts +196 -7
  302. package/src/members/request.ts +97 -17
  303. package/src/members/types.ts +29 -0
  304. package/src/members/util.ts +333 -240
  305. package/src/metrics/constants.ts +13 -6
  306. package/src/metrics/index.ts +1 -471
  307. package/src/multistream/mediaRequestManager.ts +440 -0
  308. package/src/multistream/receiveSlot.ts +184 -0
  309. package/src/multistream/receiveSlotManager.ts +166 -0
  310. package/src/multistream/remoteMedia.ts +254 -0
  311. package/src/multistream/remoteMediaGroup.ts +284 -0
  312. package/src/multistream/remoteMediaManager.ts +1145 -0
  313. package/src/multistream/sendSlotManager.ts +170 -0
  314. package/src/networkQualityMonitor/index.ts +6 -6
  315. package/src/reachability/index.ts +238 -45
  316. package/src/reachability/request.ts +17 -8
  317. package/src/reactions/constants.ts +4 -0
  318. package/src/reactions/reactions.ts +4 -4
  319. package/src/reactions/reactions.type.ts +30 -4
  320. package/src/reconnection-manager/index.ts +167 -154
  321. package/src/recording-controller/index.ts +20 -3
  322. package/src/recording-controller/util.ts +26 -9
  323. package/src/roap/index.ts +98 -241
  324. package/src/roap/request.ts +74 -148
  325. package/src/roap/turnDiscovery.ts +62 -56
  326. package/src/rtcMetrics/constants.ts +3 -0
  327. package/src/rtcMetrics/index.ts +124 -0
  328. package/src/statsAnalyzer/global.ts +1 -84
  329. package/src/statsAnalyzer/index.ts +470 -522
  330. package/src/statsAnalyzer/mqaUtil.ts +117 -112
  331. package/src/webinar/collection.ts +31 -0
  332. package/src/webinar/index.ts +62 -0
  333. package/test/integration/spec/converged-space-meetings.js +233 -0
  334. package/test/integration/spec/journey.js +320 -264
  335. package/test/integration/spec/space-meeting.js +77 -4
  336. package/test/unit/spec/annotation/index.ts +418 -0
  337. package/test/unit/spec/breakouts/breakout.ts +237 -0
  338. package/test/unit/spec/breakouts/collection.ts +15 -0
  339. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  340. package/test/unit/spec/breakouts/events.ts +89 -0
  341. package/test/unit/spec/breakouts/index.ts +1790 -0
  342. package/test/unit/spec/breakouts/request.ts +104 -0
  343. package/test/unit/spec/breakouts/utils.js +72 -0
  344. package/test/unit/spec/common/queue.js +31 -2
  345. package/test/unit/spec/controls-options-manager/index.js +163 -0
  346. package/test/unit/spec/controls-options-manager/util.js +576 -60
  347. package/test/unit/spec/fixture/locus.js +1 -0
  348. package/test/unit/spec/interpretation/collection.ts +15 -0
  349. package/test/unit/spec/interpretation/index.ts +589 -0
  350. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  351. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  352. package/test/unit/spec/locus-info/index.js +1390 -16
  353. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  354. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  355. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  356. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  357. package/test/unit/spec/locus-info/parser.js +116 -35
  358. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  359. package/test/unit/spec/media/index.ts +274 -0
  360. package/test/unit/spec/media/properties.ts +75 -84
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +84 -0
  362. package/test/unit/spec/meeting/index.js +8269 -3145
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  364. package/test/unit/spec/meeting/muteState.js +409 -213
  365. package/test/unit/spec/meeting/request.js +512 -42
  366. package/test/unit/spec/meeting/utils.js +741 -24
  367. package/test/unit/spec/meeting-info/index.js +300 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +26 -0
  371. package/test/unit/spec/meetings/index.js +1201 -210
  372. package/test/unit/spec/meetings/utils.js +202 -2
  373. package/test/unit/spec/member/index.js +38 -8
  374. package/test/unit/spec/member/util.js +499 -29
  375. package/test/unit/spec/members/index.js +597 -3
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +210 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  380. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  382. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  385. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  386. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  387. package/test/unit/spec/reachability/index.ts +598 -24
  388. package/test/unit/spec/reachability/request.js +68 -0
  389. package/test/unit/spec/reconnection-manager/index.js +145 -22
  390. package/test/unit/spec/recording-controller/index.js +293 -218
  391. package/test/unit/spec/recording-controller/util.js +223 -96
  392. package/test/unit/spec/roap/index.ts +200 -76
  393. package/test/unit/spec/roap/request.ts +232 -0
  394. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  395. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  396. package/test/unit/spec/stats-analyzer/index.js +188 -174
  397. package/test/unit/spec/webinar/collection.ts +13 -0
  398. package/test/unit/spec/webinar/index.ts +60 -0
  399. package/test/utils/constants.js +9 -0
  400. package/test/utils/integrationTestUtils.js +46 -0
  401. package/test/utils/testUtils.js +0 -45
  402. package/test/utils/webex-config.js +4 -0
  403. package/test/utils/webex-test-users.js +7 -3
  404. package/dist/common/browser-detection.d.ts +0 -9
  405. package/dist/common/collection.d.ts +0 -48
  406. package/dist/common/config.d.ts +0 -2
  407. package/dist/common/errors/captcha-error.d.ts +0 -15
  408. package/dist/common/errors/intent-to-join.d.ts +0 -16
  409. package/dist/common/errors/join-meeting.d.ts +0 -17
  410. package/dist/common/errors/media.d.ts +0 -15
  411. package/dist/common/errors/parameter.d.ts +0 -15
  412. package/dist/common/errors/password-error.d.ts +0 -15
  413. package/dist/common/errors/permission.d.ts +0 -14
  414. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  415. package/dist/common/errors/reconnection.d.ts +0 -15
  416. package/dist/common/errors/stats.d.ts +0 -15
  417. package/dist/common/errors/webex-errors.d.ts +0 -81
  418. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  419. package/dist/common/events/events-scope.d.ts +0 -17
  420. package/dist/common/events/events.d.ts +0 -12
  421. package/dist/common/events/trigger-proxy.d.ts +0 -2
  422. package/dist/common/events/util.d.ts +0 -2
  423. package/dist/common/logs/logger-config.d.ts +0 -2
  424. package/dist/common/logs/logger-proxy.d.ts +0 -2
  425. package/dist/common/logs/request.d.ts +0 -34
  426. package/dist/common/queue.d.ts +0 -32
  427. package/dist/config.d.ts +0 -73
  428. package/dist/constants.d.ts +0 -926
  429. package/dist/controls-options-manager/constants.d.ts +0 -4
  430. package/dist/controls-options-manager/enums.d.ts +0 -5
  431. package/dist/controls-options-manager/index.d.ts +0 -120
  432. package/dist/controls-options-manager/util.d.ts +0 -7
  433. package/dist/index.d.ts +0 -4
  434. package/dist/locus-info/controlsUtils.d.ts +0 -2
  435. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  436. package/dist/locus-info/fullState.d.ts +0 -2
  437. package/dist/locus-info/hostUtils.d.ts +0 -2
  438. package/dist/locus-info/index.d.ts +0 -269
  439. package/dist/locus-info/infoUtils.d.ts +0 -2
  440. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  441. package/dist/locus-info/parser.d.ts +0 -212
  442. package/dist/locus-info/selfUtils.d.ts +0 -2
  443. package/dist/media/index.d.ts +0 -32
  444. package/dist/media/properties.d.ts +0 -108
  445. package/dist/media/util.d.ts +0 -2
  446. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  447. package/dist/meeting/effectsState.d.ts +0 -42
  448. package/dist/meeting/effectsState.js +0 -260
  449. package/dist/meeting/effectsState.js.map +0 -1
  450. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  451. package/dist/meeting/index.d.ts +0 -1622
  452. package/dist/meeting/muteState.d.ts +0 -116
  453. package/dist/meeting/request.d.ts +0 -255
  454. package/dist/meeting/state.d.ts +0 -9
  455. package/dist/meeting/util.d.ts +0 -2
  456. package/dist/meeting-info/collection.d.ts +0 -20
  457. package/dist/meeting-info/index.d.ts +0 -57
  458. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  459. package/dist/meeting-info/request.d.ts +0 -22
  460. package/dist/meeting-info/util.d.ts +0 -2
  461. package/dist/meeting-info/utilv2.d.ts +0 -2
  462. package/dist/meetings/collection.d.ts +0 -23
  463. package/dist/meetings/index.d.ts +0 -296
  464. package/dist/meetings/request.d.ts +0 -27
  465. package/dist/meetings/util.d.ts +0 -18
  466. package/dist/member/index.d.ts +0 -147
  467. package/dist/member/member.types.d.ts +0 -11
  468. package/dist/member/util.d.ts +0 -2
  469. package/dist/members/collection.d.ts +0 -24
  470. package/dist/members/index.d.ts +0 -298
  471. package/dist/members/request.d.ts +0 -50
  472. package/dist/members/util.d.ts +0 -2
  473. package/dist/metrics/config.d.ts +0 -169
  474. package/dist/metrics/config.js +0 -289
  475. package/dist/metrics/config.js.map +0 -1
  476. package/dist/metrics/constants.d.ts +0 -59
  477. package/dist/metrics/index.d.ts +0 -152
  478. package/dist/networkQualityMonitor/index.d.ts +0 -70
  479. package/dist/peer-connection-manager/index.d.ts +0 -6
  480. package/dist/peer-connection-manager/index.js +0 -671
  481. package/dist/peer-connection-manager/index.js.map +0 -1
  482. package/dist/peer-connection-manager/util.d.ts +0 -6
  483. package/dist/peer-connection-manager/util.js +0 -110
  484. package/dist/peer-connection-manager/util.js.map +0 -1
  485. package/dist/personal-meeting-room/index.d.ts +0 -47
  486. package/dist/personal-meeting-room/request.d.ts +0 -14
  487. package/dist/personal-meeting-room/util.d.ts +0 -2
  488. package/dist/reachability/index.d.ts +0 -139
  489. package/dist/reachability/request.d.ts +0 -35
  490. package/dist/reactions/reactions.d.ts +0 -4
  491. package/dist/reactions/reactions.type.d.ts +0 -32
  492. package/dist/reconnection-manager/index.d.ts +0 -112
  493. package/dist/recording-controller/enums.d.ts +0 -7
  494. package/dist/recording-controller/index.d.ts +0 -193
  495. package/dist/recording-controller/util.d.ts +0 -13
  496. package/dist/roap/collection.d.ts +0 -10
  497. package/dist/roap/collection.js +0 -63
  498. package/dist/roap/collection.js.map +0 -1
  499. package/dist/roap/handler.d.ts +0 -47
  500. package/dist/roap/handler.js +0 -279
  501. package/dist/roap/handler.js.map +0 -1
  502. package/dist/roap/index.d.ts +0 -116
  503. package/dist/roap/request.d.ts +0 -35
  504. package/dist/roap/state.d.ts +0 -9
  505. package/dist/roap/state.js +0 -127
  506. package/dist/roap/state.js.map +0 -1
  507. package/dist/roap/turnDiscovery.d.ts +0 -81
  508. package/dist/roap/util.d.ts +0 -2
  509. package/dist/roap/util.js +0 -76
  510. package/dist/roap/util.js.map +0 -1
  511. package/dist/statsAnalyzer/global.d.ts +0 -118
  512. package/dist/statsAnalyzer/index.d.ts +0 -193
  513. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  514. package/dist/transcription/index.d.ts +0 -64
  515. package/src/index.js +0 -15
  516. package/src/meeting/effectsState.ts +0 -209
  517. package/src/metrics/config.ts +0 -485
  518. package/src/peer-connection-manager/index.ts +0 -847
  519. package/src/peer-connection-manager/util.ts +0 -119
  520. package/src/roap/collection.ts +0 -62
  521. package/src/roap/handler.ts +0 -294
  522. package/src/roap/state.ts +0 -156
  523. package/src/roap/util.ts +0 -100
  524. package/test/unit/spec/meeting/effectsState.js +0 -281
  525. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  526. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  527. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  528. package/test/unit/spec/roap/util.js +0 -30
@@ -1,102 +1,229 @@
1
1
  import RecordingUtil from '@webex/plugin-meetings/src/recording-controller/util';
2
2
  import RecordingAction from '@webex/plugin-meetings/src/recording-controller/enums';
3
- import { assert } from 'chai';
3
+ import {SELF_POLICY} from '@webex/plugin-meetings/src/constants';
4
+
5
+ import {assert} from 'chai';
4
6
 
5
7
  describe('plugin-meetings', () => {
6
- describe('recording-controller tests', () => {
7
- describe('recording util tests', () => {
8
-
9
- let locusInfo;
10
-
11
- beforeEach(() => {
12
- locusInfo = {
13
- parsedLocus: {
14
- info: {
15
- userDisplayHints: [],
16
- },
17
- },
18
- };
19
- });
20
-
21
- describe('canUserStart', () => {
22
- it('can start recording when the correct display hint is present', () => {
23
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
24
-
25
- assert.equal(RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints), true);
26
- });
27
-
28
- it('rejects when correct display hint is not present', () => {
29
- assert.equal(RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints), false);
30
- });
31
- });
32
-
33
- describe('canUserPause', () => {
34
- it('can pause recording when the correct display hint is present', () => {
35
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
36
-
37
- assert.equal(RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints), true);
38
- });
39
-
40
- it('rejects when correct display hint is not present', () => {
41
- assert.equal(RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints), false);
42
- });
43
- });
44
-
45
- describe('canUserStop', () => {
46
- it('can stop recording when the correct display hint is present', () => {
47
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP');
48
-
49
- assert.equal(RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints), true);
50
- });
51
-
52
- it('rejects when correct display hint is not present', () => {
53
- assert.equal(RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints), false);
54
- });
55
- });
56
-
57
- describe('canUserResume', () => {
58
- it('can start recording when the correct display hint is present', () => {
59
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
60
-
61
- assert.equal(RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints), true);
62
- });
63
-
64
- it('rejects when correct display hint is not present', () => {
65
- assert.equal(RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints), false);
66
- });
67
- });
68
-
69
- describe('deriveRecordingStates', () => {
70
- it('gets the correct values for a start recording action', () => {
71
- assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Start), {recording: true, paused: false});
72
- });
73
-
74
- it('gets the correct values for a stop recording action', () => {
75
- assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Stop), {recording: false, paused: false});
76
- });
77
-
78
- it('gets the correct values for a resume recording action', () => {
79
- assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Resume), {recording: true, paused: false});
80
- });
81
-
82
- it('gets the correct values for a paused recording action', () => {
83
- assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Pause), {recording: true, paused: true});
84
- });
85
- });
86
-
87
- describe('extractLocusId', () => {
88
- it('gets the correct id from the url param', () => {
89
- assert.equal(RecordingUtil.extractLocusId('test/id'), 'id');
90
- });
91
-
92
- it('works with empty string parameters passed', () => {
93
- assert.equal(RecordingUtil.extractLocusId(''), '');
94
- });
95
-
96
- it('works with no parameters passed', () => {
97
- assert.isUndefined(RecordingUtil.extractLocusId(undefined));
98
- });
99
- });
8
+ describe('recording-controller tests', () => {
9
+ describe('recording util tests', () => {
10
+ let locusInfo;
11
+
12
+ beforeEach(() => {
13
+ locusInfo = {
14
+ parsedLocus: {
15
+ info: {
16
+ userDisplayHints: [],
17
+ },
18
+ },
19
+ };
20
+ });
21
+
22
+ describe('canUserStart', () => {
23
+ it('can start recording when the correct display hint is present', () => {
24
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
25
+
26
+ assert.equal(
27
+ RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints),
28
+ true
29
+ );
30
+ });
31
+
32
+ it('can start recording when the correct display hint is present and the policy is true', () => {
33
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
34
+
35
+ assert.equal(
36
+ RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints, {
37
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: true,
38
+ }),
39
+ true
40
+ );
41
+ });
42
+
43
+ it('rejects when correct display hint is not present', () => {
44
+ assert.equal(
45
+ RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints),
46
+ false
47
+ );
48
+ });
49
+
50
+ it('rejects when correct display hint is present but policy is false', () => {
51
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
52
+
53
+ assert.equal(
54
+ RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints, {
55
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: false,
56
+ }),
57
+ false
58
+ );
59
+ });
60
+ });
61
+
62
+ describe('canUserPause', () => {
63
+ it('can pause recording when the correct display hint is present', () => {
64
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
65
+
66
+ assert.equal(
67
+ RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints),
68
+ true
69
+ );
70
+ });
71
+
72
+ it('can pause recording when the correct display hint is present and the policy is true', () => {
73
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
74
+
75
+ assert.equal(
76
+ RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints, {
77
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: true,
78
+ }),
79
+ true
80
+ );
81
+ });
82
+
83
+ it('rejects when correct display hint is not present', () => {
84
+ assert.equal(
85
+ RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints),
86
+ false
87
+ );
88
+ });
89
+
90
+ it('rejects when correct display hint is present but the policy is false', () => {
91
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
92
+
93
+ assert.equal(
94
+ RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints, {
95
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: false,
96
+ }),
97
+ false
98
+ );
99
+ });
100
+ });
101
+
102
+ describe('canUserStop', () => {
103
+ it('can stop recording when the correct display hint is present', () => {
104
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP');
105
+
106
+ assert.equal(
107
+ RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints),
108
+ true
109
+ );
110
+ });
111
+
112
+ it('can stop recording when the correct display hint is present and the policy is true', () => {
113
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP', {
114
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: true,
115
+ });
116
+
117
+ assert.equal(
118
+ RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints),
119
+ true
120
+ );
121
+ });
122
+
123
+ it('rejects when correct display hint is not present', () => {
124
+ assert.equal(
125
+ RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints),
126
+ false
127
+ );
128
+ });
129
+
130
+ it('rejects when correct display hint is present but the policy is false', () => {
131
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP', {
132
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: true,
133
+ });
134
+
135
+ assert.equal(
136
+ RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints, {
137
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: false,
138
+ }),
139
+ false
140
+ );
141
+ });
142
+ });
143
+
144
+ describe('canUserResume', () => {
145
+ it('can start recording when the correct display hint is present', () => {
146
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
147
+
148
+ assert.equal(
149
+ RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints),
150
+ true
151
+ );
152
+ });
153
+
154
+ it('can start recording when the correct display hint is present and the policy is true', () => {
155
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
156
+
157
+ assert.equal(
158
+ RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints, {
159
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: true,
160
+ }),
161
+ true
162
+ );
163
+ });
164
+
165
+ it('rejects when correct display hint is not present', () => {
166
+ assert.equal(
167
+ RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints),
168
+ false
169
+ );
170
+ });
171
+
172
+ it('rejects when correct display hint is present but the policy is false', () => {
173
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
174
+
175
+ assert.equal(
176
+ RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints, {
177
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: false,
178
+ }),
179
+ false
180
+ );
181
+ });
182
+ });
183
+
184
+ describe('deriveRecordingStates', () => {
185
+ it('gets the correct values for a start recording action', () => {
186
+ assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Start), {
187
+ recording: true,
188
+ paused: false,
189
+ });
190
+ });
191
+
192
+ it('gets the correct values for a stop recording action', () => {
193
+ assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Stop), {
194
+ recording: false,
195
+ paused: false,
196
+ });
197
+ });
198
+
199
+ it('gets the correct values for a resume recording action', () => {
200
+ assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Resume), {
201
+ recording: true,
202
+ paused: false,
203
+ });
204
+ });
205
+
206
+ it('gets the correct values for a paused recording action', () => {
207
+ assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Pause), {
208
+ recording: true,
209
+ paused: true,
210
+ });
211
+ });
212
+ });
213
+
214
+ describe('extractLocusId', () => {
215
+ it('gets the correct id from the url param', () => {
216
+ assert.equal(RecordingUtil.extractLocusId('test/id'), 'id');
217
+ });
218
+
219
+ it('works with empty string parameters passed', () => {
220
+ assert.equal(RecordingUtil.extractLocusId(''), '');
221
+ });
222
+
223
+ it('works with no parameters passed', () => {
224
+ assert.isUndefined(RecordingUtil.extractLocusId(undefined));
100
225
  });
226
+ });
101
227
  });
102
- });
228
+ });
229
+ });
@@ -1,49 +1,55 @@
1
1
  import {assert} from '@webex/test-helper-chai';
2
2
  import sinon from 'sinon';
3
3
  import TurnDiscovery from '@webex/plugin-meetings/src/roap/turnDiscovery';
4
- import {ROAP} from '@webex/plugin-meetings/src/constants';
4
+ import MockWebex from '@webex/test-helper-mock-webex';
5
5
 
6
6
  import RoapRequest from '@webex/plugin-meetings/src/roap/request';
7
- import RoapHandler from '@webex/plugin-meetings/src/roap/handler';
8
7
  import Roap from '@webex/plugin-meetings/src/roap/';
9
8
  import Meeting from '@webex/plugin-meetings/src/meeting';
9
+ import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
10
+ import Metrics from '@webex/plugin-meetings/src/metrics';
11
+ import BEHAVIORAL_METRICS from '@webex/plugin-meetings/src/metrics/constants';
12
+
13
+ import { IP_VERSION } from '../../../../src/constants';
10
14
 
11
15
  describe('Roap', () => {
12
16
  describe('doTurnDiscovery', () => {
13
- it('calls this.turnDiscovery.doTurnDiscovery() and forwards all the arguments', async () => {
14
- const RESULT = {something: 'some value'};
15
- const meeting = {id: 'some meeting id'} as Meeting;
16
-
17
- const doTurnDiscoveryStub = sinon
18
- .stub(TurnDiscovery.prototype, 'doTurnDiscovery')
19
- .resolves(RESULT);
17
+ [false, true].forEach(function (isReconnecting) {
18
+ [false, true, undefined].forEach(function (isForced) {
19
+ it(`calls this.turnDiscovery.doTurnDiscovery() and forwards all the arguments when isReconnecting = ${isReconnecting} and isForced = ${isForced}`, async () => {
20
+ const webex = new MockWebex({});
20
21
 
21
- const roap = new Roap({}, {parent: 'fake'});
22
+ const RESULT = {something: 'some value'};
23
+ const meeting = {id: 'some meeting id'} as Meeting;
22
24
 
23
- // call with isReconnecting: true
24
- const result = await roap.doTurnDiscovery(meeting, true);
25
+ const doTurnDiscoveryStub = sinon
26
+ .stub(TurnDiscovery.prototype, 'doTurnDiscovery')
27
+ .resolves(RESULT);
25
28
 
26
- assert.calledOnceWithExactly(doTurnDiscoveryStub, meeting, true);
27
- assert.deepEqual(result, RESULT);
29
+ const roap = new Roap({}, {parent: webex});
28
30
 
29
- doTurnDiscoveryStub.resetHistory();
31
+ const result = await roap.doTurnDiscovery(meeting, isReconnecting, isForced);
30
32
 
31
- // and with isReconnecting: false
32
- const result2 = await roap.doTurnDiscovery(meeting, false);
33
+ assert.calledOnceWithExactly(doTurnDiscoveryStub, meeting, isReconnecting, isForced);
34
+ assert.deepEqual(result, RESULT);
33
35
 
34
- assert.calledOnceWithExactly(doTurnDiscoveryStub, meeting, false);
35
- assert.deepEqual(result2, RESULT);
36
-
37
- sinon.restore();
36
+ sinon.restore();
37
+ });
38
+ });
38
39
  });
39
40
  });
40
41
 
41
42
  describe('sendRoapMediaRequest', () => {
42
43
  let sendRoapStub;
43
- let roapHandlerSubmitStub;
44
44
  let meeting;
45
45
 
46
+ let webex;
47
+ let roap;
48
+
49
+ const fakeLocus = {id: 'fake locus'};
50
+
46
51
  beforeEach(() => {
52
+ webex = new MockWebex({});
47
53
  meeting = {
48
54
  id: 'some meeting id',
49
55
  correlationId: 'correlation id',
@@ -55,76 +61,194 @@ describe('Roap', () => {
55
61
  video: {
56
62
  isLocallyMuted: () => false,
57
63
  },
64
+ isMultistream: true,
58
65
  setRoapSeq: sinon.stub(),
59
- config: {experimental: {enableTurnDiscovery: false}},
60
- webex: {meetings: {reachability: {isAnyClusterReachable: () => true}}},
66
+ locusMediaRequest: {fake: true},
67
+ webex: {meetings: {reachability: {isAnyPublicClusterReachable: () => true}}},
68
+ updateMediaConnections: sinon.stub(),
61
69
  };
62
70
 
63
- beforeEach(() => {
64
- sendRoapStub = sinon.stub(RoapRequest.prototype, 'sendRoap').resolves({});
65
- roapHandlerSubmitStub = sinon.stub(RoapHandler.prototype, 'submit');
66
- meeting.setRoapSeq.resetHistory();
67
- });
71
+ sinon.stub(MeetingUtil, 'getIpVersion').returns(IP_VERSION.unknown);
72
+ sinon.stub(Metrics, 'sendBehavioralMetric');
68
73
 
69
- afterEach(() => {
70
- sinon.restore();
71
- });
74
+ sendRoapStub = sinon.stub(RoapRequest.prototype, 'sendRoap').resolves({});
75
+ meeting.setRoapSeq.resetHistory();
72
76
 
73
- [
74
- {reconnect: true, turnDiscoverySkipped: false, expectEmptyMediaId: false},
75
- {reconnect: true, turnDiscoverySkipped: true, expectEmptyMediaId: true},
76
- {reconnect: false, turnDiscoverySkipped: false, expectEmptyMediaId: false},
77
- {reconnect: false, turnDiscoverySkipped: true, expectEmptyMediaId: false},
78
- ].forEach(({reconnect, turnDiscoverySkipped, expectEmptyMediaId}) =>
79
- it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${
80
- reconnect ? '' : 'not '
81
- }reconnecting and TURN discovery is ${
82
- turnDiscoverySkipped ? 'skipped' : 'not skipped'
83
- }`, async () => {
84
- const roap = new Roap({}, {parent: 'fake'});
85
-
86
- sinon.stub(roap.turnDiscovery, 'isSkipped').resolves(turnDiscoverySkipped);
87
-
88
- await roap.sendRoapMediaRequest({
89
- meeting,
90
- sdp: 'sdp',
91
- reconnect,
92
- roapSeq: 1,
93
- });
77
+ roap = new Roap({}, {parent: webex});
78
+ sinon.stub(roap.turnDiscovery, 'isSkipped').resolves(false);
79
+ });
94
80
 
95
- const expectedRoapMessage = {
96
- messageType: 'OFFER',
97
- sdps: ['sdp'],
98
- version: '2',
99
- seq: 2,
100
- tieBreaker: 4294967294,
101
- };
81
+ afterEach(() => {
82
+ sinon.restore();
83
+ });
102
84
 
103
- assert.calledOnce(sendRoapStub);
104
- assert.calledWith(sendRoapStub, {
85
+ [
86
+ {reconnect: true, turnDiscoverySkipped: false, expectEmptyMediaId: false},
87
+ {reconnect: true, turnDiscoverySkipped: true, expectEmptyMediaId: true},
88
+ {reconnect: false, turnDiscoverySkipped: false, expectEmptyMediaId: false},
89
+ {reconnect: false, turnDiscoverySkipped: true, expectEmptyMediaId: false},
90
+ ].forEach(({reconnect, turnDiscoverySkipped, expectEmptyMediaId}) =>
91
+ it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${
92
+ reconnect ? '' : 'not '
93
+ }reconnecting and TURN discovery is ${
94
+ turnDiscoverySkipped ? 'skipped' : 'not skipped'
95
+ }`, async () => {
96
+ roap.turnDiscovery.isSkipped.resolves(turnDiscoverySkipped);
97
+
98
+ await roap.sendRoapMediaRequest({
99
+ meeting,
100
+ sdp: 'sdp',
101
+ reconnect,
102
+ seq: 2,
103
+ tieBreaker: 4294967294,
104
+ });
105
+
106
+ const expectedRoapMessage = {
107
+ messageType: 'OFFER',
108
+ sdps: ['sdp'],
109
+ version: '2',
110
+ seq: 2,
111
+ tieBreaker: 4294967294,
112
+ headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],
113
+ };
114
+
115
+ assert.calledOnce(sendRoapStub);
116
+ assert.calledWith(
117
+ sendRoapStub,
118
+ sinon.match({
105
119
  roapMessage: expectedRoapMessage,
106
- correlationId: meeting.correlationId,
107
120
  locusSelfUrl: meeting.selfUrl,
108
121
  mediaId: expectEmptyMediaId ? '' : meeting.mediaId,
109
- audioMuted: meeting.audio?.isLocallyMuted(),
110
- videoMuted: meeting.video?.isLocallyMuted(),
111
122
  meetingId: meeting.id,
123
+ locusMediaRequest: meeting.locusMediaRequest,
124
+ })
125
+ );
126
+ })
127
+ );
128
+
129
+ it('reads SDP answer from the http response', async () => {
130
+ const roapAnswer = {
131
+ seq: 5,
132
+ messageType: 'ANSWER',
133
+ sdps: ['sdp answer'],
134
+ errorType: 'error type', // normally ANSWER would not have errorType or errorCause (only error messages have these)
135
+ errorCause: 'error cause', // but we're just testing here that all the fields are forwarded to the caller of sendRoapMediaRequest()
136
+ headers: ['header1', 'header2'],
137
+ };
138
+ const fakeMediaConnections = [
139
+ {
140
+ remoteSdp: JSON.stringify({
141
+ roapMessage: roapAnswer,
142
+ }),
143
+ },
144
+ ];
145
+
146
+ sendRoapStub.resolves({
147
+ mediaConnections: fakeMediaConnections,
148
+ locus: fakeLocus,
149
+ });
150
+
151
+ const result = await roap.sendRoapMediaRequest({
152
+ meeting,
153
+ sdp: 'sdp',
154
+ reconnect: false,
155
+ seq: 1,
156
+ tieBreaker: 4294967294,
157
+ });
158
+
159
+ assert.calledOnce(sendRoapStub);
160
+ assert.calledOnceWithExactly(meeting.updateMediaConnections, fakeMediaConnections);
161
+ assert.deepEqual(result, {
162
+ locus: fakeLocus,
163
+ roapAnswer: {
164
+ seq: 5,
165
+ messageType: 'ANSWER',
166
+ sdp: 'sdp answer',
167
+ errorType: 'error type',
168
+ errorCause: 'error cause',
169
+ headers: ['header1', 'header2'],
170
+ },
171
+ });
172
+ });
173
+
174
+ it('handles the case when there is no answer in the http response', async () => {
175
+ const fakeMediaConnections = [
176
+ {
177
+ // this is the actual value Locus returns to us when they don't send Roap ANSWER in the http response
178
+ remoteSdp:
179
+ '{"audioMuted":false,"videoMuted":false,"csis":[],"dtmfReceiveSupported":true,"type":"SDP"}',
180
+ },
181
+ ];
182
+
183
+ sendRoapStub.resolves({
184
+ mediaConnections: fakeMediaConnections,
185
+ locus: fakeLocus,
186
+ });
187
+
188
+ const result = await roap.sendRoapMediaRequest({
189
+ meeting,
190
+ sdp: 'sdp',
191
+ reconnect: false,
192
+ seq: 1,
193
+ tieBreaker: 4294967294,
194
+ });
195
+
196
+ assert.calledOnce(sendRoapStub);
197
+ assert.calledOnceWithExactly(meeting.updateMediaConnections, fakeMediaConnections);
198
+ assert.deepEqual(result, {
199
+ locus: fakeLocus,
200
+ roapAnswer: undefined,
201
+ });
202
+ assert.calledOnceWithExactly(
203
+ Metrics.sendBehavioralMetric,
204
+ BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING,
205
+ {
206
+ correlationId: meeting.correlationId,
207
+ messageType: 'ANSWER',
208
+ isMultistream: meeting.isMultistream,
209
+ }
210
+ );
211
+ });
212
+
213
+ describe('does not crash when http response is missing things', () => {
214
+ [
215
+ {mediaConnections: undefined, title: 'mediaConnections are undefined'},
216
+ {mediaConnections: [], title: 'mediaConnections are empty array'},
217
+ {mediaConnections: [{}], title: 'mediaConnections[0] has no remoteSdp'},
218
+ {
219
+ mediaConnections: [{remoteSdp: '{}'}],
220
+ title: 'mediaConnections[0].remoteSdp is an empty json',
221
+ },
222
+ ].forEach(({mediaConnections, title}) =>
223
+ it(title, async () => {
224
+ sendRoapStub.resolves({
225
+ mediaConnections,
226
+ locus: fakeLocus,
112
227
  });
113
228
 
114
- assert.calledTwice(roapHandlerSubmitStub);
115
- assert.calledWith(roapHandlerSubmitStub, {
116
- type: ROAP.SEND_ROAP_MSG,
117
- msg: expectedRoapMessage,
118
- correlationId: meeting.correlationId,
229
+ const result = await roap.sendRoapMediaRequest({
230
+ meeting,
231
+ sdp: 'sdp',
232
+ reconnect: false,
233
+ seq: 1,
234
+ tieBreaker: 4294967294,
119
235
  });
120
- assert.calledWith(roapHandlerSubmitStub, {
121
- type: ROAP.SEND_ROAP_MSG_SUCCESS,
122
- seq: 2,
123
- correlationId: meeting.correlationId,
236
+
237
+ assert.calledOnce(sendRoapStub);
238
+ assert.deepEqual(result, {
239
+ locus: fakeLocus,
240
+ roapAnswer: undefined,
124
241
  });
125
242
 
126
- assert.calledOnce(meeting.setRoapSeq);
127
- assert.calledWith(meeting.setRoapSeq, 2);
243
+ assert.calledOnceWithExactly(
244
+ Metrics.sendBehavioralMetric,
245
+ BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING,
246
+ {
247
+ correlationId: meeting.correlationId,
248
+ messageType: 'ANSWER',
249
+ isMultistream: meeting.isMultistream,
250
+ }
251
+ );
128
252
  })
129
253
  );
130
254
  });