@webex/plugin-meetings 2.59.3-next.1 → 2.59.4-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 (420) hide show
  1. package/.eslintrc.js +6 -6
  2. package/LICENSE +1 -1
  3. package/README.md +1204 -1204
  4. package/UPGRADING.md +287 -287
  5. package/babel.config.js +3 -3
  6. package/browsers.js +108 -108
  7. package/dist/common/browser-detection.js +2 -2
  8. package/dist/common/browser-detection.js.map +1 -1
  9. package/dist/common/collection.js +45 -45
  10. package/dist/common/collection.js.map +1 -1
  11. package/dist/common/config.js.map +1 -1
  12. package/dist/common/errors/captcha-error.js +7 -7
  13. package/dist/common/errors/captcha-error.js.map +1 -1
  14. package/dist/common/errors/intent-to-join.js +7 -7
  15. package/dist/common/errors/intent-to-join.js.map +1 -1
  16. package/dist/common/errors/join-meeting.js +8 -8
  17. package/dist/common/errors/join-meeting.js.map +1 -1
  18. package/dist/common/errors/media.js +7 -7
  19. package/dist/common/errors/media.js.map +1 -1
  20. package/dist/common/errors/parameter.js +7 -7
  21. package/dist/common/errors/parameter.js.map +1 -1
  22. package/dist/common/errors/password-error.js +7 -7
  23. package/dist/common/errors/password-error.js.map +1 -1
  24. package/dist/common/errors/permission.js +6 -6
  25. package/dist/common/errors/permission.js.map +1 -1
  26. package/dist/common/errors/reconnection-in-progress.js +6 -6
  27. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  28. package/dist/common/errors/reconnection.js +7 -7
  29. package/dist/common/errors/reconnection.js.map +1 -1
  30. package/dist/common/errors/stats.js +7 -7
  31. package/dist/common/errors/stats.js.map +1 -1
  32. package/dist/common/errors/webex-errors.js +42 -42
  33. package/dist/common/errors/webex-errors.js.map +1 -1
  34. package/dist/common/errors/webex-meetings-error.js +12 -12
  35. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  36. package/dist/common/events/events-scope.js +10 -10
  37. package/dist/common/events/events-scope.js.map +1 -1
  38. package/dist/common/events/events.js +4 -4
  39. package/dist/common/events/events.js.map +1 -1
  40. package/dist/common/events/trigger-proxy.js.map +1 -1
  41. package/dist/common/events/util.js.map +1 -1
  42. package/dist/common/logs/logger-config.js.map +1 -1
  43. package/dist/common/logs/logger-proxy.js.map +1 -1
  44. package/dist/common/logs/request.js +18 -18
  45. package/dist/common/logs/request.js.map +1 -1
  46. package/dist/common/queue.js +18 -18
  47. package/dist/common/queue.js.map +1 -1
  48. package/dist/config.js.map +1 -1
  49. package/dist/constants.js +9 -9
  50. package/dist/constants.js.map +1 -1
  51. package/dist/controls-options-manager/constants.js.map +1 -1
  52. package/dist/controls-options-manager/enums.js.map +1 -1
  53. package/dist/controls-options-manager/index.js +83 -83
  54. package/dist/controls-options-manager/index.js.map +1 -1
  55. package/dist/controls-options-manager/util.js.map +1 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/locus-info/controlsUtils.js +27 -27
  58. package/dist/locus-info/controlsUtils.js.map +1 -1
  59. package/dist/locus-info/embeddedAppsUtils.js +14 -14
  60. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  61. package/dist/locus-info/fullState.js.map +1 -1
  62. package/dist/locus-info/hostUtils.js +19 -19
  63. package/dist/locus-info/hostUtils.js.map +1 -1
  64. package/dist/locus-info/index.js +198 -198
  65. package/dist/locus-info/index.js.map +1 -1
  66. package/dist/locus-info/infoUtils.js.map +1 -1
  67. package/dist/locus-info/mediaSharesUtils.js +50 -50
  68. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  69. package/dist/locus-info/parser.js +138 -138
  70. package/dist/locus-info/parser.js.map +1 -1
  71. package/dist/locus-info/selfUtils.js +52 -52
  72. package/dist/locus-info/selfUtils.js.map +1 -1
  73. package/dist/media/index.js +145 -145
  74. package/dist/media/index.js.map +1 -1
  75. package/dist/media/properties.js +49 -49
  76. package/dist/media/properties.js.map +1 -1
  77. package/dist/media/util.js.map +1 -1
  78. package/dist/mediaQualityMetrics/config.js.map +1 -1
  79. package/dist/meeting/effectsState.js +24 -24
  80. package/dist/meeting/effectsState.js.map +1 -1
  81. package/dist/meeting/in-meeting-actions.js +11 -11
  82. package/dist/meeting/in-meeting-actions.js.map +1 -1
  83. package/dist/meeting/index.js +1505 -1508
  84. package/dist/meeting/index.js.map +1 -1
  85. package/dist/meeting/muteState.js +85 -85
  86. package/dist/meeting/muteState.js.map +1 -1
  87. package/dist/meeting/request.js +143 -143
  88. package/dist/meeting/request.js.map +1 -1
  89. package/dist/meeting/state.js +30 -30
  90. package/dist/meeting/state.js.map +1 -1
  91. package/dist/meeting/util.js +4 -4
  92. package/dist/meeting/util.js.map +1 -1
  93. package/dist/meeting-info/collection.js +13 -13
  94. package/dist/meeting-info/collection.js.map +1 -1
  95. package/dist/meeting-info/index.js +50 -50
  96. package/dist/meeting-info/index.js.map +1 -1
  97. package/dist/meeting-info/meeting-info-v2.js +52 -52
  98. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  99. package/dist/meeting-info/request.js +14 -14
  100. package/dist/meeting-info/request.js.map +1 -1
  101. package/dist/meeting-info/util.js +9 -9
  102. package/dist/meeting-info/util.js.map +1 -1
  103. package/dist/meeting-info/utilv2.js +20 -20
  104. package/dist/meeting-info/utilv2.js.map +1 -1
  105. package/dist/meetings/collection.js +16 -16
  106. package/dist/meetings/collection.js.map +1 -1
  107. package/dist/meetings/index.js +259 -259
  108. package/dist/meetings/index.js.map +1 -1
  109. package/dist/meetings/request.js +15 -15
  110. package/dist/meetings/request.js.map +1 -1
  111. package/dist/meetings/util.js +29 -29
  112. package/dist/meetings/util.js.map +1 -1
  113. package/dist/member/index.js +214 -214
  114. package/dist/member/index.js.map +1 -1
  115. package/dist/member/member.types.js.map +1 -1
  116. package/dist/member/util.js +60 -60
  117. package/dist/member/util.js.map +1 -1
  118. package/dist/members/collection.js +11 -11
  119. package/dist/members/collection.js.map +1 -1
  120. package/dist/members/index.js +277 -277
  121. package/dist/members/index.js.map +1 -1
  122. package/dist/members/request.js +27 -27
  123. package/dist/members/request.js.map +1 -1
  124. package/dist/members/util.js +21 -21
  125. package/dist/members/util.js.map +1 -1
  126. package/dist/metrics/config.js.map +1 -1
  127. package/dist/metrics/constants.js.map +1 -1
  128. package/dist/metrics/index.js +92 -92
  129. package/dist/metrics/index.js.map +1 -1
  130. package/dist/networkQualityMonitor/index.js +65 -65
  131. package/dist/networkQualityMonitor/index.js.map +1 -1
  132. package/dist/peer-connection-manager/index.js +87 -87
  133. package/dist/peer-connection-manager/index.js.map +1 -1
  134. package/dist/peer-connection-manager/util.js +9 -9
  135. package/dist/peer-connection-manager/util.js.map +1 -1
  136. package/dist/personal-meeting-room/index.js +67 -67
  137. package/dist/personal-meeting-room/index.js.map +1 -1
  138. package/dist/personal-meeting-room/request.js +7 -7
  139. package/dist/personal-meeting-room/request.js.map +1 -1
  140. package/dist/personal-meeting-room/util.js.map +1 -1
  141. package/dist/reachability/index.js +119 -112
  142. package/dist/reachability/index.js.map +1 -1
  143. package/dist/reachability/request.js +15 -15
  144. package/dist/reachability/request.js.map +1 -1
  145. package/dist/reactions/reactions.js.map +1 -1
  146. package/dist/reactions/reactions.type.js.map +1 -1
  147. package/dist/reconnection-manager/index.js +112 -112
  148. package/dist/reconnection-manager/index.js.map +1 -1
  149. package/dist/recording-controller/enums.js.map +1 -1
  150. package/dist/recording-controller/index.js +127 -127
  151. package/dist/recording-controller/index.js.map +1 -1
  152. package/dist/recording-controller/util.js.map +1 -1
  153. package/dist/roap/collection.js.map +1 -1
  154. package/dist/roap/handler.js +27 -27
  155. package/dist/roap/handler.js.map +1 -1
  156. package/dist/roap/index.js +111 -111
  157. package/dist/roap/index.js.map +1 -1
  158. package/dist/roap/request.js +17 -17
  159. package/dist/roap/request.js.map +1 -1
  160. package/dist/roap/state.js +14 -14
  161. package/dist/roap/state.js.map +1 -1
  162. package/dist/roap/turnDiscovery.js +46 -46
  163. package/dist/roap/turnDiscovery.js.map +1 -1
  164. package/dist/roap/util.js.map +1 -1
  165. package/dist/statsAnalyzer/global.js.map +1 -1
  166. package/dist/statsAnalyzer/index.js +130 -130
  167. package/dist/statsAnalyzer/index.js.map +1 -1
  168. package/dist/statsAnalyzer/mqaUtil.js +15 -15
  169. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  170. package/dist/transcription/index.js +42 -42
  171. package/dist/transcription/index.js.map +1 -1
  172. package/internal-README.md +172 -172
  173. package/jest.config.js +3 -3
  174. package/package.json +15 -15
  175. package/process +1 -1
  176. package/src/common/browser-detection.ts +39 -39
  177. package/src/common/collection.ts +94 -94
  178. package/src/common/config.ts +9 -9
  179. package/src/common/errors/captcha-error.ts +25 -25
  180. package/src/common/errors/intent-to-join.ts +27 -27
  181. package/src/common/errors/join-meeting.ts +32 -32
  182. package/src/common/errors/media.ts +25 -25
  183. package/src/common/errors/parameter.ts +33 -33
  184. package/src/common/errors/password-error.ts +25 -25
  185. package/src/common/errors/permission.ts +24 -24
  186. package/src/common/errors/reconnection-in-progress.ts +8 -8
  187. package/src/common/errors/reconnection.ts +25 -25
  188. package/src/common/errors/stats.ts +25 -25
  189. package/src/common/errors/webex-errors.ts +140 -140
  190. package/src/common/errors/webex-meetings-error.ts +35 -35
  191. package/src/common/events/events-scope.ts +30 -30
  192. package/src/common/events/events.ts +25 -25
  193. package/src/common/events/trigger-proxy.ts +25 -25
  194. package/src/common/events/util.ts +39 -39
  195. package/src/common/logs/logger-config.ts +8 -8
  196. package/src/common/logs/logger-proxy.ts +44 -44
  197. package/src/common/logs/request.ts +65 -65
  198. package/src/common/queue.ts +50 -50
  199. package/src/config.ts +96 -96
  200. package/src/constants.ts +1121 -1121
  201. package/src/controls-options-manager/constants.ts +5 -5
  202. package/src/controls-options-manager/enums.ts +6 -6
  203. package/src/controls-options-manager/index.ts +183 -183
  204. package/src/controls-options-manager/util.ts +20 -20
  205. package/src/index.js +15 -15
  206. package/src/locus-info/controlsUtils.ts +112 -112
  207. package/src/locus-info/embeddedAppsUtils.ts +57 -57
  208. package/src/locus-info/fullState.ts +69 -69
  209. package/src/locus-info/hostUtils.ts +60 -60
  210. package/src/locus-info/index.ts +1303 -1303
  211. package/src/locus-info/infoUtils.ts +101 -101
  212. package/src/locus-info/mediaSharesUtils.ts +173 -173
  213. package/src/locus-info/parser.ts +680 -680
  214. package/src/locus-info/selfUtils.ts +428 -428
  215. package/src/media/index.ts +675 -675
  216. package/src/media/properties.ts +313 -313
  217. package/src/media/util.ts +37 -37
  218. package/src/mediaQualityMetrics/config.ts +382 -382
  219. package/src/meeting/effectsState.ts +209 -209
  220. package/src/meeting/in-meeting-actions.ts +153 -153
  221. package/src/meeting/index.ts +6537 -6537
  222. package/src/meeting/muteState.ts +365 -365
  223. package/src/meeting/request.ts +810 -810
  224. package/src/meeting/state.ts +194 -194
  225. package/src/meeting/util.ts +530 -530
  226. package/src/meeting-info/collection.ts +41 -41
  227. package/src/meeting-info/index.ts +137 -137
  228. package/src/meeting-info/meeting-info-v2.ts +273 -273
  229. package/src/meeting-info/request.ts +46 -46
  230. package/src/meeting-info/util.ts +314 -314
  231. package/src/meeting-info/utilv2.ts +324 -324
  232. package/src/meetings/collection.ts +43 -43
  233. package/src/meetings/index.ts +1128 -1128
  234. package/src/meetings/request.ts +81 -81
  235. package/src/meetings/util.ts +181 -181
  236. package/src/member/index.ts +446 -446
  237. package/src/member/member.types.ts +13 -13
  238. package/src/member/util.ts +286 -286
  239. package/src/members/collection.ts +40 -40
  240. package/src/members/index.ts +900 -900
  241. package/src/members/request.ts +175 -175
  242. package/src/members/util.ts +260 -260
  243. package/src/metrics/config.ts +485 -485
  244. package/src/metrics/constants.ts +61 -61
  245. package/src/metrics/index.ts +543 -543
  246. package/src/networkQualityMonitor/index.ts +211 -211
  247. package/src/peer-connection-manager/index.ts +847 -847
  248. package/src/peer-connection-manager/util.ts +119 -119
  249. package/src/personal-meeting-room/index.ts +157 -157
  250. package/src/personal-meeting-room/request.ts +48 -48
  251. package/src/personal-meeting-room/util.ts +49 -49
  252. package/src/reachability/index.ts +478 -478
  253. package/src/reachability/request.ts +81 -81
  254. package/src/reactions/reactions.ts +104 -104
  255. package/src/reactions/reactions.type.ts +36 -36
  256. package/src/reconnection-manager/index.ts +622 -622
  257. package/src/recording-controller/enums.ts +8 -8
  258. package/src/recording-controller/index.ts +315 -315
  259. package/src/recording-controller/util.ts +58 -58
  260. package/src/roap/collection.ts +62 -62
  261. package/src/roap/handler.ts +294 -294
  262. package/src/roap/index.ts +413 -413
  263. package/src/roap/request.ts +229 -229
  264. package/src/roap/state.ts +156 -156
  265. package/src/roap/turnDiscovery.ts +283 -283
  266. package/src/roap/util.ts +100 -100
  267. package/src/statsAnalyzer/global.ts +128 -128
  268. package/src/statsAnalyzer/index.ts +1266 -1266
  269. package/src/statsAnalyzer/mqaUtil.ts +290 -290
  270. package/src/transcription/index.ts +154 -154
  271. package/test/integration/spec/journey.js +941 -941
  272. package/test/integration/spec/space-meeting.js +457 -457
  273. package/test/integration/spec/transcription.js +55 -55
  274. package/test/unit/spec/common/browser-detection.js +119 -119
  275. package/test/unit/spec/common/queue.js +69 -69
  276. package/test/unit/spec/controls-options-manager/index.js +123 -123
  277. package/test/unit/spec/controls-options-manager/util.js +65 -65
  278. package/test/unit/spec/fixture/locus.js +406 -406
  279. package/test/unit/spec/locus-info/controlsUtils.js +82 -82
  280. package/test/unit/spec/locus-info/embeddedAppsUtils.js +104 -104
  281. package/test/unit/spec/locus-info/index.js +1272 -1272
  282. package/test/unit/spec/locus-info/infoUtils.js +138 -138
  283. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +975 -975
  284. package/test/unit/spec/locus-info/lib/SeqCmp.json +522 -522
  285. package/test/unit/spec/locus-info/lib/selfConstant.js +286 -286
  286. package/test/unit/spec/locus-info/parser.js +298 -298
  287. package/test/unit/spec/locus-info/selfUtils.js +185 -185
  288. package/test/unit/spec/media/properties.ts +305 -305
  289. package/test/unit/spec/meeting/effectsState.js +281 -281
  290. package/test/unit/spec/meeting/in-meeting-actions.ts +90 -90
  291. package/test/unit/spec/meeting/index.js +5227 -5227
  292. package/test/unit/spec/meeting/muteState.js +430 -430
  293. package/test/unit/spec/meeting/request.js +317 -317
  294. package/test/unit/spec/meeting/utils.js +319 -319
  295. package/test/unit/spec/meeting-info/meetinginfov2.js +376 -376
  296. package/test/unit/spec/meeting-info/request.js +64 -64
  297. package/test/unit/spec/meeting-info/util.js +37 -37
  298. package/test/unit/spec/meeting-info/utilv2.js +330 -330
  299. package/test/unit/spec/meetings/collection.js +52 -52
  300. package/test/unit/spec/meetings/index.js +1375 -1375
  301. package/test/unit/spec/meetings/utils.js +66 -66
  302. package/test/unit/spec/member/index.js +47 -47
  303. package/test/unit/spec/member/util.js +80 -80
  304. package/test/unit/spec/members/index.js +364 -364
  305. package/test/unit/spec/members/request.js +200 -200
  306. package/test/unit/spec/members/utils.js +42 -42
  307. package/test/unit/spec/metrics/index.js +111 -111
  308. package/test/unit/spec/networkQualityMonitor/index.js +99 -99
  309. package/test/unit/spec/peerconnection-manager/index.js +218 -218
  310. package/test/unit/spec/peerconnection-manager/utils.js +49 -49
  311. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +388 -388
  312. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +29 -29
  313. package/test/unit/spec/reachability/index.ts +50 -50
  314. package/test/unit/spec/reconnection-manager/index.js +206 -206
  315. package/test/unit/spec/recording-controller/index.js +230 -230
  316. package/test/unit/spec/recording-controller/util.js +101 -101
  317. package/test/unit/spec/roap/index.ts +128 -128
  318. package/test/unit/spec/roap/turnDiscovery.ts +372 -372
  319. package/test/unit/spec/roap/util.js +30 -30
  320. package/test/unit/spec/stats-analyzer/index.js +287 -287
  321. package/test/utils/cmr.js +104 -104
  322. package/test/utils/testUtils.js +287 -287
  323. package/test/utils/webex-config.js +77 -77
  324. package/test/utils/webex-test-users.js +82 -82
  325. package/tsconfig.json +5 -5
  326. package/dist/common/browser-detection.d.ts +0 -9
  327. package/dist/common/collection.d.ts +0 -48
  328. package/dist/common/config.d.ts +0 -2
  329. package/dist/common/errors/captcha-error.d.ts +0 -15
  330. package/dist/common/errors/intent-to-join.d.ts +0 -16
  331. package/dist/common/errors/join-meeting.d.ts +0 -17
  332. package/dist/common/errors/media.d.ts +0 -15
  333. package/dist/common/errors/parameter.d.ts +0 -15
  334. package/dist/common/errors/password-error.d.ts +0 -15
  335. package/dist/common/errors/permission.d.ts +0 -14
  336. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  337. package/dist/common/errors/reconnection.d.ts +0 -15
  338. package/dist/common/errors/stats.d.ts +0 -15
  339. package/dist/common/errors/webex-errors.d.ts +0 -81
  340. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  341. package/dist/common/events/events-scope.d.ts +0 -17
  342. package/dist/common/events/events.d.ts +0 -12
  343. package/dist/common/events/trigger-proxy.d.ts +0 -2
  344. package/dist/common/events/util.d.ts +0 -2
  345. package/dist/common/logs/logger-config.d.ts +0 -2
  346. package/dist/common/logs/logger-proxy.d.ts +0 -2
  347. package/dist/common/logs/request.d.ts +0 -34
  348. package/dist/common/queue.d.ts +0 -32
  349. package/dist/config.d.ts +0 -73
  350. package/dist/constants.d.ts +0 -924
  351. package/dist/controls-options-manager/constants.d.ts +0 -4
  352. package/dist/controls-options-manager/enums.d.ts +0 -5
  353. package/dist/controls-options-manager/index.d.ts +0 -120
  354. package/dist/controls-options-manager/util.d.ts +0 -7
  355. package/dist/index.d.ts +0 -4
  356. package/dist/locus-info/controlsUtils.d.ts +0 -2
  357. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  358. package/dist/locus-info/fullState.d.ts +0 -2
  359. package/dist/locus-info/hostUtils.d.ts +0 -2
  360. package/dist/locus-info/index.d.ts +0 -269
  361. package/dist/locus-info/infoUtils.d.ts +0 -2
  362. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  363. package/dist/locus-info/parser.d.ts +0 -212
  364. package/dist/locus-info/selfUtils.d.ts +0 -2
  365. package/dist/media/index.d.ts +0 -32
  366. package/dist/media/properties.d.ts +0 -108
  367. package/dist/media/util.d.ts +0 -2
  368. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  369. package/dist/meeting/effectsState.d.ts +0 -42
  370. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  371. package/dist/meeting/index.d.ts +0 -1621
  372. package/dist/meeting/muteState.d.ts +0 -116
  373. package/dist/meeting/request.d.ts +0 -255
  374. package/dist/meeting/state.d.ts +0 -9
  375. package/dist/meeting/util.d.ts +0 -2
  376. package/dist/meeting-info/collection.d.ts +0 -20
  377. package/dist/meeting-info/index.d.ts +0 -57
  378. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  379. package/dist/meeting-info/request.d.ts +0 -22
  380. package/dist/meeting-info/util.d.ts +0 -2
  381. package/dist/meeting-info/utilv2.d.ts +0 -2
  382. package/dist/meetings/collection.d.ts +0 -23
  383. package/dist/meetings/index.d.ts +0 -296
  384. package/dist/meetings/request.d.ts +0 -27
  385. package/dist/meetings/util.d.ts +0 -18
  386. package/dist/member/index.d.ts +0 -147
  387. package/dist/member/member.types.d.ts +0 -11
  388. package/dist/member/util.d.ts +0 -2
  389. package/dist/members/collection.d.ts +0 -24
  390. package/dist/members/index.d.ts +0 -298
  391. package/dist/members/request.d.ts +0 -50
  392. package/dist/members/util.d.ts +0 -2
  393. package/dist/metrics/config.d.ts +0 -169
  394. package/dist/metrics/constants.d.ts +0 -57
  395. package/dist/metrics/index.d.ts +0 -152
  396. package/dist/networkQualityMonitor/index.d.ts +0 -70
  397. package/dist/peer-connection-manager/index.d.ts +0 -6
  398. package/dist/peer-connection-manager/util.d.ts +0 -6
  399. package/dist/personal-meeting-room/index.d.ts +0 -47
  400. package/dist/personal-meeting-room/request.d.ts +0 -14
  401. package/dist/personal-meeting-room/util.d.ts +0 -2
  402. package/dist/reachability/index.d.ts +0 -139
  403. package/dist/reachability/request.d.ts +0 -35
  404. package/dist/reactions/reactions.d.ts +0 -4
  405. package/dist/reactions/reactions.type.d.ts +0 -32
  406. package/dist/reconnection-manager/index.d.ts +0 -112
  407. package/dist/recording-controller/enums.d.ts +0 -7
  408. package/dist/recording-controller/index.d.ts +0 -193
  409. package/dist/recording-controller/util.d.ts +0 -13
  410. package/dist/roap/collection.d.ts +0 -10
  411. package/dist/roap/handler.d.ts +0 -47
  412. package/dist/roap/index.d.ts +0 -116
  413. package/dist/roap/request.d.ts +0 -35
  414. package/dist/roap/state.d.ts +0 -9
  415. package/dist/roap/turnDiscovery.d.ts +0 -67
  416. package/dist/roap/util.d.ts +0 -2
  417. package/dist/statsAnalyzer/global.d.ts +0 -126
  418. package/dist/statsAnalyzer/index.d.ts +0 -190
  419. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  420. package/dist/transcription/index.d.ts +0 -64
@@ -1,218 +1,218 @@
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
+ 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 +1,49 @@
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
- });
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
+ });