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

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 +14 -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 +90 -3
  121. package/dist/meeting/in-meeting-actions.js.map +1 -1
  122. package/dist/meeting/index.js +4578 -2973
  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 +197 -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 +25 -12
  147. package/dist/meeting-info/utilv2.js.map +1 -1
  148. package/dist/meetings/collection.js +25 -4
  149. package/dist/meetings/collection.js.map +1 -1
  150. package/dist/meetings/index.js +464 -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 +14 -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 +272 -220
  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 +115 -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 +384 -426
  233. package/dist/statsAnalyzer/index.js.map +1 -1
  234. package/dist/statsAnalyzer/mqaUtil.js +114 -80
  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 -24
  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 +263 -91
  262. package/src/controls-options-manager/enums.ts +11 -1
  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 +168 -0
  282. package/src/meeting/index.ts +3800 -2491
  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 +159 -13
  290. package/src/meeting-info/util.ts +1 -1
  291. package/src/meeting-info/utilv2.ts +22 -9
  292. package/src/meetings/collection.ts +20 -0
  293. package/src/meetings/index.ts +466 -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 +12 -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 +124 -107
  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 +100 -0
  328. package/src/statsAnalyzer/global.ts +1 -84
  329. package/src/statsAnalyzer/index.ts +442 -523
  330. package/src/statsAnalyzer/mqaUtil.ts +105 -103
  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 +82 -0
  362. package/test/unit/spec/meeting/index.js +7395 -3171
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  364. package/test/unit/spec/meeting/muteState.js +407 -212
  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 +500 -6
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +14 -0
  371. package/test/unit/spec/meetings/index.js +1012 -209
  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 +528 -27
  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 +130 -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 +73 -0
  396. package/test/unit/spec/stats-analyzer/index.js +181 -177
  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
package/src/roap/util.ts DELETED
@@ -1,100 +0,0 @@
1
- import PeerConnectionManager from '../peer-connection-manager';
2
- import {_ANSWER_, _ERROR_, _CONFLICT_, ROAP, SDP} from '../constants';
3
- import LoggerProxy from '../common/logs/logger-proxy';
4
- import ParameterError from '../common/errors/parameter';
5
-
6
- const RoapUtil: any = {};
7
- const ROAP_ANSWER = _ANSWER_.toLowerCase();
8
-
9
- RoapUtil.shouldHandleMedia = (meeting) => {
10
- const offer =
11
- meeting.mediaProperties.peerConnection &&
12
- meeting.mediaProperties.peerConnection.signalingState === SDP.HAVE_LOCAL_OFFER;
13
-
14
- if (offer) {
15
- return false;
16
- }
17
-
18
- return true;
19
- };
20
-
21
- RoapUtil.handleError = (pc) =>
22
- PeerConnectionManager.rollBackLocalDescription({peerConnection: pc})
23
- .then(() => Promise.resolve(true))
24
- .catch((err) => {
25
- LoggerProxy.logger.error(`Roap:util#handleError --> ${err}`);
26
-
27
- return Promise.reject(err);
28
- });
29
-
30
- RoapUtil.findError = (messageType, errorType, type) =>
31
- (type === ROAP.RECEIVE_ROAP_MSG || type === ROAP.SEND_ROAP_MSG) &&
32
- messageType === _ERROR_ &&
33
- errorType === _CONFLICT_;
34
-
35
- RoapUtil.ensureMeeting = (meeting, type) => {
36
- if (
37
- type === ROAP.RECEIVE_ROAP_MSG ||
38
- type === ROAP.SEND_ROAP_MSG ||
39
- type === ROAP.SEND_ROAP_MSG_SUCCESS
40
- ) {
41
- if (!meeting) {
42
- return false;
43
- }
44
- }
45
-
46
- return true;
47
- };
48
-
49
- RoapUtil.updatePeerConnection = (meeting, session) =>
50
- PeerConnectionManager.updatePeerConnection(
51
- {
52
- offerSdp: session.OFFER.sdps,
53
- peerConnection: meeting.mediaProperties.peerConnection,
54
- },
55
- {
56
- meetingId: meeting.id,
57
- remoteQualityLevel: meeting.mediaProperties.remoteQualityLevel,
58
- }
59
- ).then((res) => {
60
- meeting.roap.lastRoapOffer = session.OFFER.sdps;
61
-
62
- return res;
63
- });
64
-
65
- RoapUtil.setRemoteDescription = (meeting, session) => {
66
- LoggerProxy.logger.info(
67
- `Roap:util#setRemoteDescription --> Transmit WAIT_TX_OK, correlationId: ${meeting.correlationId}`
68
- );
69
- if (!(meeting && meeting.mediaProperties.peerConnection)) {
70
- LoggerProxy.logger.error(
71
- `Roap:util#setRemoteDescription --> DANGER no media or screen peer connection, correlationId: ${meeting.correlationId}`
72
- );
73
-
74
- return Promise.reject(new ParameterError('Must provide a media or screen peer connection'));
75
- }
76
-
77
- return PeerConnectionManager.setRemoteSessionDetails(
78
- meeting.mediaProperties.peerConnection,
79
- ROAP_ANSWER,
80
- session.ANSWER.sdps[0],
81
- meeting.id
82
- )
83
- .then(() => {
84
- LoggerProxy.logger.info(
85
- `Roap:util#setRemoteDescription --> Success for correlationId: ${meeting.correlationId}`
86
- );
87
-
88
- return {
89
- seq: session.ANSWER.seq,
90
- mediaId: meeting.mediaId,
91
- correlationId: meeting.correlationId,
92
- };
93
- })
94
- .catch((err) => {
95
- LoggerProxy.logger.error(`Roap:util#setRemoteDescription --> ${err}`);
96
- throw err;
97
- });
98
- };
99
-
100
- export default RoapUtil;
@@ -1,281 +0,0 @@
1
- /* eslint-disable camelcase */
2
- import {assert} from '@webex/test-helper-chai';
3
- import sinon from 'sinon';
4
- import MockWebex from '@webex/test-helper-mock-webex';
5
- import {BNR_STATUS} from '@webex/plugin-meetings/src/constants';
6
-
7
- import BEHAVIORAL_METRICS from '@webex/plugin-meetings/src/metrics/constants';
8
- import Meeting from '@webex/plugin-meetings/src/meeting';
9
- import Meetings from '@webex/plugin-meetings';
10
- import Metrics from '@webex/plugin-meetings/src/metrics';
11
- import MediaUtil from '@webex/plugin-meetings/src/media/util';
12
- import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
13
- import createEffectsState from '@webex/plugin-meetings/src/meeting/effectsState';
14
- import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
15
- import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
16
-
17
- describe('plugin-meetings', () => {
18
- const logger = {
19
- info: () => {},
20
- log: () => {},
21
- error: () => {},
22
- warn: () => {},
23
- trace: () => {},
24
- debug: () => {},
25
- };
26
-
27
- beforeEach(() => {
28
- sinon.stub(Metrics, 'sendBehavioralMetric');
29
- });
30
- afterEach(() => {
31
- sinon.restore();
32
- });
33
-
34
- Object.defineProperty(global.window.navigator, 'mediaDevices', {
35
- writable: true,
36
- value: {
37
- getSupportedConstraints: sinon.stub().returns({
38
- sampleRate: true,
39
- }),
40
- },
41
- });
42
- LoggerConfig.set({verboseEvents: true, enable: false});
43
- LoggerProxy.set(logger);
44
-
45
- let webex;
46
- let meeting;
47
- let uuid1;
48
-
49
- const fakeMediaTrack = () => ({
50
- id: Date.now().toString(),
51
- stop: () => {},
52
- readyState: 'live',
53
- enabled: true,
54
- getSettings: () => ({
55
- sampleRate: 48000,
56
- }),
57
- });
58
-
59
- class FakeMediaStream {
60
- constructor(tracks) {
61
- this.active = false;
62
- this.id = '5146425f-c240-48cc-b86b-27d422988fb7';
63
- this.tracks = tracks;
64
- }
65
-
66
- addTrack = () => undefined;
67
-
68
- getAudioTracks = () => this.tracks;
69
- }
70
-
71
- class FakeAudioContext {
72
- constructor() {
73
- this.state = 'running';
74
- this.baseLatency = 0.005333333333333333;
75
- this.currentTime = 2.7946666666666666;
76
- this.sampleRate = 48000;
77
- this.audioWorklet = {
78
- addModule: async () => undefined,
79
- };
80
- }
81
-
82
- onstatechange = null;
83
-
84
- createMediaStreamSource() {
85
- return {
86
- connect: () => undefined,
87
- mediaStream: {
88
- getAudioTracks() {
89
- // eslint-disable-next-line no-undef
90
- return [new MediaStreamTrack()];
91
- },
92
- },
93
- };
94
- }
95
-
96
- createMediaStreamDestination() {
97
- return {
98
- stream: {
99
- getAudioTracks() {
100
- // eslint-disable-next-line no-undef
101
- return [new MediaStreamTrack()];
102
- },
103
- },
104
- };
105
- }
106
- }
107
-
108
- class FakeAudioWorkletNode {
109
- constructor() {
110
- this.port = {
111
- postMessage: () => undefined,
112
- };
113
- }
114
-
115
- connect() {
116
- /* placeholder method */
117
- }
118
- }
119
-
120
- class FakeMediaStreamTrack {
121
- constructor() {
122
- this.kind = 'audio';
123
- this.enabled = true;
124
- this.label = 'Default - MacBook Pro Microphone (Built-in)';
125
- this.muted = false;
126
- this.readyState = 'live';
127
- this.contentHint = '';
128
- }
129
-
130
- getSettings() {
131
- return {
132
- sampleRate: 48000,
133
- };
134
- }
135
- }
136
- Object.defineProperty(global, 'MediaStream', {
137
- writable: true,
138
- value: FakeMediaStream,
139
- });
140
-
141
- Object.defineProperty(global, 'AudioContext', {
142
- writable: true,
143
- value: FakeAudioContext,
144
- });
145
-
146
- Object.defineProperty(global, 'AudioWorkletNode', {
147
- writable: true,
148
- value: FakeAudioWorkletNode,
149
- });
150
-
151
- Object.defineProperty(global, 'MediaStreamTrack', {
152
- writable: true,
153
- value: FakeMediaStreamTrack,
154
- });
155
-
156
- let effects;
157
-
158
- beforeEach(() => {
159
- webex = new MockWebex({
160
- children: {
161
- meetings: Meetings,
162
- },
163
- });
164
- MediaUtil.createPeerConnection = sinon.stub().returns({});
165
- meeting = new Meeting(
166
- {
167
- userId: uuid1,
168
- },
169
- {
170
- parent: webex,
171
- }
172
- );
173
-
174
- effects = createEffectsState('BNR');
175
- meeting.canUpdateMedia = sinon.stub().returns(true);
176
- MeetingUtil.validateOptions = sinon.stub().returns(Promise.resolve());
177
- MeetingUtil.updateTransceiver = sinon.stub();
178
-
179
- meeting.addMedia = sinon.stub().returns(Promise.resolve());
180
- meeting.getMediaStreams = sinon.stub().returns(Promise.resolve());
181
- sinon.stub(meeting, 'effects').value(effects);
182
- sinon.replace(meeting, 'addMedia', () => {
183
- sinon.stub(meeting.mediaProperties, 'audioTrack').value(fakeMediaTrack());
184
- sinon.stub(meeting.mediaProperties, 'mediaDirection').value({
185
- receiveAudio: true,
186
- });
187
- });
188
- });
189
-
190
- describe('bnr effect library', () => {
191
- beforeEach(async () => {
192
- await meeting.getMediaStreams();
193
- await meeting.addMedia();
194
- });
195
- describe('#enableBNR', () => {
196
- it('should have #enableBnr', () => {
197
- assert.exists(effects.enableBNR);
198
- });
199
-
200
- it('does bnr effect enable on audio track', async () => {
201
- assert.isTrue(await effects.handleClientRequest(true, meeting));
202
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.ENABLED);
203
-
204
- assert(Metrics.sendBehavioralMetric.calledOnce);
205
- assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ENABLE_BNR_SUCCESS);
206
- });
207
-
208
- it('does resolve request if bnr is already enabled', async () => {
209
- effects.state.bnr.enabled = BNR_STATUS.ENABLED;
210
- assert.isTrue(await effects.handleClientRequest(true, meeting));
211
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.ENABLED);
212
- });
213
-
214
- it('if called twice, does bnr effect enable on audio track for the first request and resolves second', async () => {
215
- Promise.all([
216
- effects.handleClientRequest(true, meeting),
217
- effects.handleClientRequest(true, meeting),
218
- ]).then((resolveFirst, resolveSecond) => {
219
- assert.isTrue(resolveFirst);
220
- assert.isTrue(resolveSecond);
221
- assert.calledOnce(MediaUtil.createMediaStream);
222
- });
223
- });
224
-
225
- it('should throw error for inappropriate sample rate and send error metrics', async () => {
226
- const fakeMediaTrack1 = () => ({
227
- id: Date.now().toString(),
228
- stop: () => {},
229
- readyState: 'live',
230
- getSettings: () => ({
231
- sampleRate: 49000,
232
- }),
233
- });
234
-
235
- sinon.stub(meeting.mediaProperties, 'audioTrack').value(fakeMediaTrack1());
236
-
237
- // eslint-disable-next-line no-undef
238
- MediaUtil.createMediaStream = sinon.stub().returns(new MediaStream([fakeMediaTrack1()]));
239
- try {
240
- await effects.handleClientRequest(true, meeting);
241
- } catch (err) {
242
- assert(Metrics.sendBehavioralMetric.calledOnce);
243
- assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ENABLE_BNR_FAILURE, {
244
- reason: err.message,
245
- stack: err.stack,
246
- });
247
- assert.equal(err.message, 'Sample rate of 49000 is not supported.');
248
- }
249
- });
250
- });
251
-
252
- describe('#disableBNR', () => {
253
- beforeEach(() => {
254
- effects.state.bnr.enabled = BNR_STATUS.ENABLED;
255
- });
256
- it('should have #disableBnr', () => {
257
- assert.exists(effects.disableBNR);
258
- });
259
-
260
- it('does bnr disable on audio track', async () => {
261
- assert.isTrue(await effects.handleClientRequest(false, meeting));
262
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.NOT_ENABLED);
263
-
264
- assert(Metrics.sendBehavioralMetric.calledOnce);
265
- assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.DISABLE_BNR_SUCCESS);
266
- });
267
-
268
- it('reject request for disable bnr if not enabled', async () => {
269
- try {
270
- await effects.handleClientRequest(false, meeting);
271
- } catch (e) {
272
- assert.equal(e.message, 'Can not disable as BNR is not enabled');
273
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.ENABLED);
274
-
275
- assert(Metrics.sendBehavioralMetric.calledOnce);
276
- assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.DISABLE_BNR_FAILURE);
277
- }
278
- });
279
- });
280
- });
281
- });
@@ -1,218 +0,0 @@
1
- import 'jsdom-global/register';
2
- import {assert} from '@webex/test-helper-chai';
3
- import sinon from 'sinon';
4
-
5
- import PeerConnectionManager from '@webex/plugin-meetings/src/peer-connection-manager/index';
6
- import StaticConfig from '@webex/plugin-meetings/src/common/config';
7
- import {InvalidSdpError} from '@webex/plugin-meetings/src/common/errors/webex-errors';
8
-
9
- describe('Peerconnection Manager', () => {
10
- describe('Methods', () => {
11
- let peerConnection = null;
12
- let sdp = null;
13
-
14
- beforeEach(() => {
15
- sdp =
16
- 'v=0\r\no=- 1026633665396855335 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\nr\na=msid-semantic: WMS\r\nm=audio 40903 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nb=TIAS:64000\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 47974 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 41234 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\nm=video 43875 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 41619 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 47098 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=video 49298 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 37670 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 37790 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;\r\na=content:slides\r\n';
17
-
18
- peerConnection = {
19
- iceGatheringState: 'new',
20
- onicecandidate: null,
21
- onicecandidateerror: null,
22
- localDescription: {sdp},
23
- };
24
-
25
- Object.defineProperty(global.window, 'RTCSessionDescription', {
26
- writable: true,
27
- value: class {
28
- constructor(options) {
29
- this.type = options.type;
30
- this.sdp = options.sdp;
31
- }
32
- },
33
- });
34
- });
35
- describe('setRemoteSessionDetails', () => {
36
- it('change the start bitrate on remoteSDP and remove extmap', async () => {
37
- StaticConfig.set({bandwidth: {audio: 50, video: 500, startBitrate: 2000}});
38
- let result = null;
39
- const setRemoteDescription = sinon.stub().callsFake((args) => {
40
- result = args;
41
-
42
- return Promise.resolve();
43
- });
44
- const remoteSdp =
45
- 'v=0\r\n' +
46
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
47
- 'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n' +
48
- 'a=rtpmap:127 H264/90000\r\n' +
49
- 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
50
- 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
51
-
52
- const resultSdp =
53
- 'v=0\r\n' +
54
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
55
- 'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1;x-google-start-bitrate=2000\r\n' +
56
- 'a=rtpmap:127 H264/90000\r\r\n' +
57
- 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1;x-google-start-bitrate=2000\r\n';
58
- const peerConnection = {
59
- signalingState: 'have-local-offer',
60
- setRemoteDescription,
61
- enableExtmap: false,
62
- };
63
-
64
- await PeerConnectionManager.setRemoteSessionDetails(
65
- peerConnection,
66
- 'answer',
67
- remoteSdp,
68
- {}
69
- );
70
-
71
- assert.equal(result.sdp, resultSdp);
72
- });
73
-
74
- it('dont change the start bitrate on remoteSDP if default value is 0', async () => {
75
- StaticConfig.set({bandwidth: {audio: 50, video: 500, startBitrate: 0}});
76
- let result = null;
77
- const setRemoteDescription = sinon.stub().callsFake((args) => {
78
- result = args;
79
-
80
- return Promise.resolve();
81
- });
82
- const remoteSdp =
83
- 'v=0\r\n' +
84
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
85
- 'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n' +
86
- 'a=rtpmap:127 H264/90000\r\n' +
87
- 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
88
-
89
- const peerConnection = {
90
- signalingState: 'have-local-offer',
91
- setRemoteDescription,
92
- };
93
-
94
- await PeerConnectionManager.setRemoteSessionDetails(
95
- peerConnection,
96
- 'answer',
97
- remoteSdp,
98
- {}
99
- );
100
-
101
- assert.equal(result.sdp, remoteSdp);
102
- });
103
-
104
- it('removes xTLS candidates from the remote sdp', async () => {
105
- StaticConfig.set({bandwidth: {}});
106
-
107
- const remoteSdpWithXtlsCandidates =
108
- 'v=0\r\n' +
109
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
110
- 'a=candidate:1 1 UDP 2130706175 18.206.82.54 9000 typ host\r\n' +
111
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
112
- 'a=candidate:3 1 TCP 1962934015 18.206.82.54 9000 typ host tcptype passive\r\n' +
113
- 'a=candidate:4 1 xTLS 1795162111 external-media2.aintm-a-6.int.infra.webex.com 443 typ host tcptype passive fingerprint sha-1;55:B8:1D:94:BC:9D:B2:A5:5E:82:E7:84:C6:C8:10:AC:D3:FD:96:26\r\n' +
114
- 'a=rtpmap:127 H264/90000\r\n' +
115
- 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
116
- 'm=video 9000 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
117
- 'a=candidate:1 1 xTLS 1795162111 external-media2.aintm-a-6.int.infra.webex.com 443 typ host tcptype passive fingerprint sha-1;55:B8:1D:94:BC:9D:B2:A5:5E:82:E7:84:C6:C8:10:AC:D3:FD:96:26\r\n' +
118
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
119
- 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
120
-
121
- // same as remoteSdpWithXtlsCandidates but without the xtls candidates
122
- const resultSdp =
123
- 'v=0\r\n' +
124
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
125
- 'a=candidate:1 1 UDP 2130706175 18.206.82.54 9000 typ host\r\n' +
126
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
127
- 'a=candidate:3 1 TCP 1962934015 18.206.82.54 9000 typ host tcptype passive\r\n' +
128
- 'a=rtpmap:127 H264/90000\r\n' +
129
- 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
130
- 'm=video 9000 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
131
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
132
- 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
133
-
134
- const peerConnection = {
135
- signalingState: 'have-local-offer',
136
- setRemoteDescription: sinon.stub().resolves(),
137
- enableExtmap: true,
138
- };
139
-
140
- await PeerConnectionManager.setRemoteSessionDetails(
141
- peerConnection,
142
- 'answer',
143
- remoteSdpWithXtlsCandidates,
144
- ''
145
- );
146
-
147
- assert.calledWith(
148
- peerConnection.setRemoteDescription,
149
- new global.window.RTCSessionDescription({sdp: resultSdp, type: 'answer'})
150
- );
151
- });
152
- });
153
-
154
- describe('iceCandidate', () => {
155
- beforeEach(() => {
156
- StaticConfig.set({bandwidth: {audio: 50, video: 500, startBitrate: 0}});
157
- peerConnection.sdp = null;
158
- });
159
- it('ice gathering already completed', async () => {
160
- peerConnection.iceGatheringState = 'complete';
161
-
162
- await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'});
163
- console.error('Came her with sdp resolved');
164
- assert(peerConnection.sdp.search('max-fs:8192'), true);
165
- });
166
-
167
- it('listen onIceCandidate,onicecandidateerror and onIceGatheringStateChange', async () => {
168
- peerConnection.iceGatheringState = 'none';
169
- setTimeout(() => {
170
- peerConnection.onicecandidate({candidate: null});
171
- }, 1000);
172
- await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'});
173
- assert.isFunction(peerConnection.onIceGatheringStateChange);
174
- assert.isFunction(peerConnection.onicecandidate);
175
- assert.isFunction(peerConnection.onicecandidateerror);
176
- });
177
-
178
- it('generate sdp with iceGatheringstate is `complet`', async () => {
179
- peerConnection.iceGatheringState = 'none';
180
- setTimeout(() => {
181
- peerConnection.iceGatheringState = 'complete';
182
- peerConnection.onIceGatheringStateChange();
183
- }, 1000);
184
- await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}).then(
185
- () => {
186
- assert(peerConnection.sdp.search('max-fs:8192'), true);
187
- }
188
- );
189
- });
190
-
191
- it('should still generate sdp even if onicecandidateerror is called ', async () => {
192
- peerConnection.iceGatheringState = 'none';
193
- setTimeout(() => {
194
- peerConnection.onicecandidateerror();
195
- peerConnection.onicecandidate({candidate: null});
196
- }, 1000);
197
- await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}).then(
198
- () => {
199
- assert(peerConnection.sdp.search('max-fs:8192'), true);
200
- }
201
- );
202
- });
203
-
204
- it('should throw generated SDP does not have candidates ', async () => {
205
- peerConnection.iceGatheringState = 'none';
206
- peerConnection.localDescription.sdp =
207
- 'v=0\r\no=- 1026633665396855335 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\nr\na=msid-semantic: WMS\r\nm=audio 40903 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nb=TIAS:64000\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\nm=video 43875 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=video 49298 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;\r\na=content:slides\r\n';
208
- setTimeout(() => {
209
- peerConnection.onicecandidate({candidate: null});
210
- }, 1000);
211
- await assert.isRejected(
212
- PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}),
213
- InvalidSdpError
214
- );
215
- });
216
- });
217
- });
218
- });
@@ -1,49 +0,0 @@
1
- import {assert} from '@webex/test-helper-chai';
2
- import PeerConnectionUtils from '@webex/plugin-meetings/src/peer-connection-manager/util';
3
-
4
- import {
5
- SDP_MULTIPLE_VIDEO_CODECS,
6
- SDP_MULTIPLE_VIDEO_CODECS_WITH_LOWERED_H264_PROFILE_LEVEL,
7
- SDP_MULTIPLE_VIDEO_CODECS_WITH_MAX_FS,
8
- } from './utils.test-fixtures';
9
-
10
- describe('Peerconnection Manager', () => {
11
- describe('Utils', () => {
12
- describe('convertCLineToIpv4', () => {
13
- it('changes ipv6 to ipv4 default', () => {
14
- const localSdp =
15
- 'v=0\r\n' +
16
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
17
- 'c=IN IP6 2607:fb90:d27c:b314:211a:32dd:c47f:ffe\r\n' +
18
- 'a=rtpmap:127 H264/90000\r\n';
19
- const resultSdp =
20
- 'v=0\r\n' +
21
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
22
- 'c=IN IP4 0.0.0.0\r\n' +
23
- 'a=rtpmap:127 H264/90000\r\n';
24
-
25
- const temp = PeerConnectionUtils.convertCLineToIpv4(localSdp);
26
-
27
- assert.equal(temp, resultSdp);
28
- });
29
- });
30
-
31
- describe('adjustH264Profile', () => {
32
- it('appends max-fs and max-mbps to h264 fmtp lines when h264MaxFs value is higher than the value from the profile', () => {
33
- const modifiedSdp = PeerConnectionUtils.adjustH264Profile(SDP_MULTIPLE_VIDEO_CODECS, 8192);
34
-
35
- assert.equal(modifiedSdp, SDP_MULTIPLE_VIDEO_CODECS_WITH_MAX_FS);
36
- });
37
- it('keeps fmtp lines the same when h264MaxFs value matches the value from the profile', () => {
38
- const modifiedSdp = PeerConnectionUtils.adjustH264Profile(SDP_MULTIPLE_VIDEO_CODECS, 3600);
39
-
40
- assert.equal(modifiedSdp, SDP_MULTIPLE_VIDEO_CODECS);
41
- });
42
- it('changes the profile level in h264 fmtp lines when h264MaxFs value is lower than the value from the profile', () => {
43
- const modifiedSdp = PeerConnectionUtils.adjustH264Profile(SDP_MULTIPLE_VIDEO_CODECS, 1620);
44
-
45
- assert.equal(modifiedSdp, SDP_MULTIPLE_VIDEO_CODECS_WITH_LOWERED_H264_PROFILE_LEVEL);
46
- });
47
- });
48
- });
49
- });