@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.104

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 (548) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +10 -24
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +11 -24
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +12 -25
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +10 -24
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +10 -24
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +9 -23
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +10 -24
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +10 -24
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +10 -69
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +5 -25
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +37 -60
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +7 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +184 -122
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +362 -208
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +3 -37
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +92 -118
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +113 -337
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +96 -135
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +1 -35
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2909 -2398
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +257 -112
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +330 -264
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +63 -261
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +6 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +14 -32
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +273 -280
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +3 -15
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +26 -19
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +741 -548
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +26 -41
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +194 -149
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +100 -85
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -68
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +13 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +227 -188
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +54 -39
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +67 -159
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +250 -0
  168. package/dist/multistream/mediaRequestManager.js.map +1 -0
  169. package/dist/multistream/receiveSlot.js +202 -0
  170. package/dist/multistream/receiveSlot.js.map +1 -0
  171. package/dist/multistream/receiveSlotManager.js +176 -0
  172. package/dist/multistream/receiveSlotManager.js.map +1 -0
  173. package/dist/multistream/remoteMedia.js +270 -0
  174. package/dist/multistream/remoteMedia.js.map +1 -0
  175. package/dist/multistream/remoteMediaGroup.js +209 -0
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  177. package/dist/multistream/remoteMediaManager.js +1137 -0
  178. package/dist/multistream/remoteMediaManager.js.map +1 -0
  179. package/dist/networkQualityMonitor/index.js +40 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +21 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +1 -31
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +192 -191
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +15 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +386 -527
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +84 -286
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +138 -238
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +164 -102
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -93
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +399 -470
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +22 -47
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +29 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  341. package/src/common/collection.ts +9 -7
  342. package/src/common/{config.js → config.ts} +1 -1
  343. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  344. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  345. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  346. package/src/common/errors/{media.js → media.ts} +11 -7
  347. package/src/common/errors/parameter.ts +11 -7
  348. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  349. package/src/common/errors/{permission.js → permission.ts} +10 -6
  350. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  351. package/src/common/errors/{stats.js → stats.ts} +11 -7
  352. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -25
  353. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  354. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  355. package/src/common/events/{events.js → events.ts} +5 -1
  356. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  357. package/src/common/events/{util.js → util.ts} +2 -3
  358. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  359. package/src/common/logs/logger-proxy.ts +44 -0
  360. package/src/common/logs/{request.js → request.ts} +22 -9
  361. package/src/common/queue.ts +1 -2
  362. package/src/{config.js → config.ts} +18 -12
  363. package/src/constants.ts +256 -183
  364. package/src/controls-options-manager/constants.ts +5 -0
  365. package/src/controls-options-manager/enums.ts +16 -0
  366. package/src/controls-options-manager/index.ts +278 -0
  367. package/src/controls-options-manager/types.ts +49 -0
  368. package/src/controls-options-manager/util.ts +229 -0
  369. package/src/index.ts +33 -0
  370. package/src/locus-info/controlsUtils.ts +169 -0
  371. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  372. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  373. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  374. package/src/locus-info/{index.js → index.ts} +331 -80
  375. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  376. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  377. package/src/locus-info/{parser.js → parser.ts} +67 -79
  378. package/src/locus-info/{selfUtils.js → selfUtils.ts} +196 -67
  379. package/src/media/index.ts +488 -0
  380. package/src/media/{properties.js → properties.ts} +67 -54
  381. package/src/media/util.ts +16 -0
  382. package/src/mediaQualityMetrics/config.ts +384 -0
  383. package/src/meeting/in-meeting-actions.ts +123 -3
  384. package/src/meeting/{index.js → index.ts} +3334 -1775
  385. package/src/meeting/muteState.ts +526 -0
  386. package/src/meeting/{request.js → request.ts} +350 -142
  387. package/src/meeting/request.type.ts +13 -0
  388. package/src/meeting/{state.js → state.ts} +50 -35
  389. package/src/meeting/{util.js → util.ts} +126 -159
  390. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  391. package/src/meeting-info/{index.js → index.ts} +42 -36
  392. package/src/meeting-info/meeting-info-v2.ts +345 -0
  393. package/src/meeting-info/{request.js → request.ts} +14 -4
  394. package/src/meeting-info/{util.js → util.ts} +60 -51
  395. package/src/meeting-info/{utilv2.js → utilv2.ts} +76 -60
  396. package/src/meetings/{collection.js → collection.ts} +26 -3
  397. package/src/meetings/index.ts +1394 -0
  398. package/src/meetings/{request.js → request.ts} +34 -25
  399. package/src/meetings/util.ts +288 -0
  400. package/src/member/{index.js → index.ts} +124 -56
  401. package/src/member/types.ts +24 -0
  402. package/src/member/{util.js → util.ts} +105 -25
  403. package/src/members/{collection.js → collection.ts} +10 -2
  404. package/src/members/{index.js → index.ts} +359 -139
  405. package/src/members/request.ts +215 -0
  406. package/src/members/types.ts +28 -0
  407. package/src/members/{util.js → util.ts} +145 -54
  408. package/src/metrics/{config.js → config.ts} +256 -92
  409. package/src/metrics/{constants.js → constants.ts} +1 -6
  410. package/src/metrics/{index.js → index.ts} +116 -97
  411. package/src/multistream/mediaRequestManager.ts +324 -0
  412. package/src/multistream/receiveSlot.ts +184 -0
  413. package/src/multistream/receiveSlotManager.ts +166 -0
  414. package/src/multistream/remoteMedia.ts +254 -0
  415. package/src/multistream/remoteMediaGroup.ts +225 -0
  416. package/src/multistream/remoteMediaManager.ts +1075 -0
  417. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  418. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  419. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  420. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  421. package/src/reachability/{index.js → index.ts} +157 -94
  422. package/src/reachability/request.ts +46 -35
  423. package/src/reactions/constants.ts +4 -0
  424. package/src/reactions/reactions.ts +104 -0
  425. package/src/reactions/reactions.type.ts +62 -0
  426. package/src/reconnection-manager/{index.js → index.ts} +261 -163
  427. package/src/recording-controller/enums.ts +8 -0
  428. package/src/recording-controller/index.ts +315 -0
  429. package/src/recording-controller/util.ts +58 -0
  430. package/src/roap/index.ts +241 -0
  431. package/src/roap/request.ts +172 -0
  432. package/src/roap/turnDiscovery.ts +127 -53
  433. package/src/statsAnalyzer/global.ts +37 -0
  434. package/src/statsAnalyzer/index.ts +1273 -0
  435. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  436. package/src/transcription/{index.js → index.ts} +46 -39
  437. package/test/integration/spec/converged-space-meetings.js +177 -0
  438. package/test/integration/spec/journey.js +666 -464
  439. package/test/integration/spec/space-meeting.js +321 -206
  440. package/test/integration/spec/transcription.js +7 -8
  441. package/test/unit/spec/annotation/index.ts +435 -0
  442. package/test/unit/spec/breakouts/breakout.ts +184 -0
  443. package/test/unit/spec/breakouts/collection.ts +15 -0
  444. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  445. package/test/unit/spec/breakouts/events.ts +77 -0
  446. package/test/unit/spec/breakouts/index.ts +1504 -0
  447. package/test/unit/spec/breakouts/request.ts +104 -0
  448. package/test/unit/spec/breakouts/utils.js +72 -0
  449. package/test/unit/spec/common/browser-detection.js +9 -28
  450. package/test/unit/spec/controls-options-manager/index.js +287 -0
  451. package/test/unit/spec/controls-options-manager/util.js +403 -0
  452. package/test/unit/spec/fixture/locus.js +92 -90
  453. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  454. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  455. package/test/unit/spec/locus-info/index.js +493 -3
  456. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  457. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  458. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  459. package/test/unit/spec/locus-info/parser.js +3 -9
  460. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  461. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  462. package/test/unit/spec/media/index.ts +303 -0
  463. package/test/unit/spec/media/properties.ts +73 -82
  464. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  465. package/test/unit/spec/meeting/index.js +3127 -975
  466. package/test/unit/spec/meeting/muteState.js +375 -70
  467. package/test/unit/spec/meeting/request.js +217 -43
  468. package/test/unit/spec/meeting/utils.js +205 -163
  469. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  470. package/test/unit/spec/meeting-info/request.js +7 -9
  471. package/test/unit/spec/meeting-info/util.js +11 -12
  472. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  473. package/test/unit/spec/meetings/collection.js +15 -1
  474. package/test/unit/spec/meetings/index.js +1052 -333
  475. package/test/unit/spec/meetings/utils.js +163 -14
  476. package/test/unit/spec/member/index.js +24 -1
  477. package/test/unit/spec/member/util.js +359 -32
  478. package/test/unit/spec/members/index.js +547 -37
  479. package/test/unit/spec/members/request.js +76 -20
  480. package/test/unit/spec/members/utils.js +191 -4
  481. package/test/unit/spec/metrics/index.js +46 -20
  482. package/test/unit/spec/multistream/mediaRequestManager.ts +1060 -0
  483. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  484. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  485. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  486. package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
  487. package/test/unit/spec/multistream/remoteMediaManager.ts +1793 -0
  488. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  489. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  490. package/test/unit/spec/reachability/index.ts +176 -27
  491. package/test/unit/spec/reachability/request.js +66 -0
  492. package/test/unit/spec/reconnection-manager/index.js +106 -9
  493. package/test/unit/spec/recording-controller/index.js +231 -0
  494. package/test/unit/spec/recording-controller/util.js +102 -0
  495. package/test/unit/spec/roap/index.ts +78 -45
  496. package/test/unit/spec/roap/request.ts +217 -0
  497. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  498. package/test/unit/spec/stats-analyzer/index.js +118 -65
  499. package/test/utils/cmr.js +44 -42
  500. package/test/utils/constants.js +9 -0
  501. package/test/utils/integrationTestUtils.js +64 -0
  502. package/test/utils/testUtils.js +63 -99
  503. package/test/utils/webex-config.js +22 -18
  504. package/test/utils/webex-test-users.js +57 -50
  505. package/tsconfig.json +6 -0
  506. package/dist/meeting/effectsState.js +0 -327
  507. package/dist/meeting/effectsState.js.map +0 -1
  508. package/dist/peer-connection-manager/index.js +0 -794
  509. package/dist/peer-connection-manager/index.js.map +0 -1
  510. package/dist/peer-connection-manager/util.js +0 -124
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.js +0 -73
  513. package/dist/roap/collection.js.map +0 -1
  514. package/dist/roap/handler.js +0 -337
  515. package/dist/roap/handler.js.map +0 -1
  516. package/dist/roap/state.js +0 -164
  517. package/dist/roap/state.js.map +0 -1
  518. package/dist/roap/util.js +0 -102
  519. package/dist/roap/util.js.map +0 -1
  520. package/src/common/logs/logger-proxy.js +0 -33
  521. package/src/index.js +0 -15
  522. package/src/locus-info/controlsUtils.js +0 -102
  523. package/src/media/index.js +0 -593
  524. package/src/media/util.js +0 -38
  525. package/src/mediaQualityMetrics/config.js +0 -382
  526. package/src/meeting/effectsState.js +0 -205
  527. package/src/meeting/muteState.js +0 -318
  528. package/src/meeting-info/meeting-info-v2.js +0 -255
  529. package/src/meetings/index.js +0 -986
  530. package/src/meetings/util.js +0 -176
  531. package/src/members/request.js +0 -131
  532. package/src/peer-connection-manager/index.js +0 -723
  533. package/src/peer-connection-manager/util.ts +0 -117
  534. package/src/roap/collection.js +0 -63
  535. package/src/roap/handler.js +0 -252
  536. package/src/roap/index.js +0 -380
  537. package/src/roap/request.js +0 -198
  538. package/src/roap/state.js +0 -149
  539. package/src/roap/util.js +0 -93
  540. package/src/statsAnalyzer/global.js +0 -131
  541. package/src/statsAnalyzer/index.js +0 -1020
  542. package/src/statsAnalyzer/mqaUtil.js +0 -173
  543. package/test/unit/spec/meeting/effectsState.js +0 -293
  544. package/test/unit/spec/peerconnection-manager/index.js +0 -188
  545. package/test/unit/spec/peerconnection-manager/utils.js +0 -48
  546. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  547. package/test/unit/spec/roap/util.js +0 -30
  548. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -1,173 +0,0 @@
1
-
2
- import {mean, max} from 'lodash';
3
-
4
- import {STATS} from '../constants';
5
-
6
- export const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSent}) => {
7
- const mediaType = STATS.AUDIO_CORRELATE;
8
- const sendrecvType = STATS.RECEIVE_DIRECTION;
9
-
10
- audioReceiver.common.common.direction = statsResults[mediaType].direction;
11
- audioReceiver.common.transportType = statsResults.connectionType.remote.transport[0];
12
- // add rtpPacket info inside common as also for call analyzer
13
- audioReceiver.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;
14
- // Hop by hop are numbers and not percentage so we compare on what we sent the last min
15
- // collect the packets received for the last min
16
- audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;
17
- audioReceiver.common.mediaHopByHopLost = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) || 0;
18
- audioReceiver.common.rtpHopByHopLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;
19
-
20
- audioReceiver.streams[0].common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
21
- audioReceiver.streams[0].common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
22
- audioReceiver.streams[0].common.rtpJitter = audioReceiver.streams[0].common.maxRtpJitter;
23
-
24
- // Fec packets do come in as part of the FEC only for audio
25
- const fecRecovered = (statsResults[mediaType][sendrecvType].fecPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].fecPacketsReceived) - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastMqaDataSent[mediaType][sendrecvType].fecPacketsDiscarded);
26
-
27
- audioReceiver.streams[0].common.rtpEndToEndLost = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) - fecRecovered || 0;
28
-
29
- audioReceiver.streams[0].common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastMqaDataSent[mediaType][sendrecvType].totalSamplesDecoded || 0;
30
- audioReceiver.streams[0].common.renderedFrameRate = audioReceiver.streams[0].common.framesDropped * 100 / 60 || 0;
31
- audioReceiver.streams[0].common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastMqaDataSent[mediaType][sendrecvType].totalSamplesReceived || 0;
32
- audioReceiver.streams[0].common.concealedFrames = statsResults[mediaType][sendrecvType].concealedSamples - lastMqaDataSent[mediaType][sendrecvType].concealedSamples || 0;
33
- audioReceiver.streams[0].common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived) * 8 / 60 || 0;
34
-
35
- audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;
36
- };
37
-
38
-
39
- export const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent}) => {
40
- const mediaType = STATS.AUDIO_CORRELATE;
41
- const sendrecvType = STATS.SEND_DIRECTION;
42
-
43
- audioSender.common.common.direction = statsResults[mediaType].direction;
44
- audioSender.common.transportType = statsResults.connectionType.local.transport[0];
45
-
46
- audioSender.common.maxRemoteJitter = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
47
- audioSender.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
48
-
49
- audioSender.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
50
- audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;
51
- // From candidate-pair
52
- audioSender.common.availableBitrate = statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;
53
- // Calculate based on how much packets lost of received compated to how to the client sent
54
-
55
- const totalpacketsLostForaMin = statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;
56
-
57
- audioSender.common.remoteLossRate = totalpacketsLostForaMin > 0 ? (totalpacketsLostForaMin * 100 / audioSender.common.rtpPackets) : 0; // This is the packets sent with in last min || 0;
58
-
59
- audioSender.common.maxRoundTripTime = max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
60
- audioSender.common.meanRoundTripTime = mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
61
- audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;
62
-
63
-
64
- // Calculate the outgoing bitrate
65
- const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;
66
-
67
- audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin) * 8 / 60 : 0;
68
- audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;
69
-
70
-
71
- audioSender.streams[0].transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;
72
- audioSender.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;
73
- };
74
-
75
-
76
- export const getVideoReceiverMqa = ({
77
- videoReceiver, statsResults, lastMqaDataSent, isShareStream = false
78
- }) => {
79
- const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;
80
- const sendrecvType = STATS.RECEIVE_DIRECTION;
81
-
82
- videoReceiver.common.common.direction = statsResults[mediaType].direction;
83
- videoReceiver.common.transportType = statsResults.connectionType.remote.transport[0];
84
- // collect the packets received for the last min
85
- videoReceiver.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;
86
- videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;
87
-
88
- const totalPacketLoss = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) || 0;
89
-
90
- // Hope by hop are numbers and not percentage so we compare on what we sent the last min
91
- // this is including packet lost
92
- videoReceiver.common.mediaHopByHopLost = totalPacketLoss;
93
- videoReceiver.common.rtpHopByHopLost = totalPacketLoss;
94
-
95
- // End to end packetloss is after recovery
96
- videoReceiver.streams[0].common.rtpEndToEndLost = totalPacketLoss;
97
-
98
- // calculate this values
99
-
100
- videoReceiver.common.maxRemoteJitter = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
101
- videoReceiver.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
102
-
103
- videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;
104
- // videoReceiver.streams[0].common.rtpJitter = (statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferDelay) / (statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount) * 1000 || 0;
105
-
106
- // Calculate the outgoing bitrate
107
- const totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived;
108
-
109
- videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin ? (totalBytesReceivedInaMin) * 8 / 60 : 0;
110
- videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;
111
-
112
- // From tracks //TODO: calculate a proper one
113
- const totalFrameReceivedInaMin = statsResults.resolutions[mediaType][sendrecvType].framesReceived - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesReceived;
114
- const totalFrameDecodedInaMin = statsResults.resolutions[mediaType][sendrecvType].framesDecoded - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDecoded;
115
-
116
- videoReceiver.streams[0].common.receivedFrameRate = totalFrameReceivedInaMin ? totalFrameReceivedInaMin * 100 / 60 : 0;
117
- videoReceiver.streams[0].common.renderedFrameRate = totalFrameDecodedInaMin ? totalFrameDecodedInaMin * 100 / 60 : 0;
118
-
119
- videoReceiver.streams[0].common.framesDropped = statsResults.resolutions[mediaType][sendrecvType].framesDropped - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDropped;
120
- videoReceiver.streams[0].receivedHeight = statsResults.resolutions[mediaType][sendrecvType].height;
121
- videoReceiver.streams[0].receivedWidth = statsResults.resolutions[mediaType][sendrecvType].width;
122
- videoReceiver.streams[0].receivedFrameSize = statsResults.resolutions[mediaType][sendrecvType].height * statsResults.resolutions[mediaType][sendrecvType].height / 256;
123
-
124
- videoReceiver.streams[0].receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastMqaDataSent[mediaType][sendrecvType].keyFramesDecoded || 0;
125
- videoReceiver.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastMqaDataSent[mediaType][sendrecvType].totalPliCount || 0;
126
- };
127
-
128
- export const getVideoSenderMqa = ({
129
- videoSender, statsResults, lastMqaDataSent, isShareStream = false
130
- }) => {
131
- const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;
132
- const sendrecvType = STATS.SEND_DIRECTION;
133
-
134
- videoSender.common.common.direction = statsResults[mediaType].direction;
135
- videoSender.common.transportType = statsResults.connectionType.local.transport[0];
136
-
137
- videoSender.common.maxRemoteJitter = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
138
- videoSender.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
139
-
140
-
141
- videoSender.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
142
- videoSender.common.availableBitrate = statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;
143
- // Calculate based on how much packets lost of received compated to how to the client sent
144
-
145
- const totalpacketsLostForaMin = statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;
146
-
147
- videoSender.common.remoteLossRate = totalpacketsLostForaMin > 0 ? (totalpacketsLostForaMin) * 100 / (videoSender.common.rtpPackets + totalpacketsLostForaMin) : 0; // This is the packets sent with in last min || 0;
148
-
149
- videoSender.common.maxRoundTripTime = max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
150
- videoSender.common.meanRoundTripTime = mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
151
- videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;
152
-
153
- videoSender.streams[0].common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
154
-
155
- // Calculate the outgoing bitrate
156
- const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;
157
-
158
- videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin) * 8 / 60 : 0;
159
-
160
- videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;
161
-
162
-
163
- videoSender.streams[0].transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;
164
- videoSender.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;
165
-
166
- // From tracks //TODO: calculate a proper one
167
- const totalFrameSentInaMin = statsResults.resolutions[mediaType][sendrecvType].framesSent - (lastMqaDataSent.resolutions[mediaType][sendrecvType].framesSent || 0);
168
-
169
- videoSender.streams[0].common.transmittedFrameRate = totalFrameSentInaMin ? totalFrameSentInaMin * 100 / 60 : 0;
170
- videoSender.streams[0].transmittedHeight = statsResults.resolutions[mediaType][sendrecvType].height;
171
- videoSender.streams[0].transmittedWidth = statsResults.resolutions[mediaType][sendrecvType].width;
172
- videoSender.streams[0].transmittedFrameSize = statsResults.resolutions[mediaType][sendrecvType].height * statsResults.resolutions[mediaType][sendrecvType].width / 254;
173
- };
@@ -1,293 +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(
206
- Metrics.sendBehavioralMetric,
207
- BEHAVIORAL_METRICS.ENABLE_BNR_SUCCESS,
208
- );
209
- });
210
-
211
- it('does resolve request if bnr is already enabled', async () => {
212
- effects.state.bnr.enabled = BNR_STATUS.ENABLED;
213
- assert.isTrue(await effects.handleClientRequest(true, meeting));
214
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.ENABLED);
215
- });
216
-
217
- it('if called twice, does bnr effect enable on audio track for the first request and resolves second', async () => {
218
- Promise.all([effects.handleClientRequest(true, meeting), effects.handleClientRequest(true, meeting)])
219
- .then((resolveFirst, resolveSecond) => {
220
- assert.isTrue(resolveFirst);
221
- assert.isTrue(resolveSecond);
222
- assert.calledOnce(MediaUtil.createMediaStream);
223
- });
224
- });
225
-
226
- it('should throw error for inappropriate sample rate and send error metrics', async () => {
227
- const fakeMediaTrack1 = () => ({
228
- id: Date.now().toString(),
229
- stop: () => {},
230
- readyState: 'live',
231
- getSettings: () => ({
232
- sampleRate: 49000
233
- })
234
- });
235
-
236
- sinon.stub(meeting.mediaProperties, 'audioTrack').value(fakeMediaTrack1());
237
-
238
- // eslint-disable-next-line no-undef
239
- MediaUtil.createMediaStream = sinon.stub().returns(new MediaStream([fakeMediaTrack1()]));
240
- try {
241
- await effects.handleClientRequest(true, meeting);
242
- }
243
- catch (err) {
244
- assert(Metrics.sendBehavioralMetric.calledOnce);
245
- assert.calledWith(
246
- Metrics.sendBehavioralMetric,
247
- BEHAVIORAL_METRICS.ENABLE_BNR_FAILURE, {
248
- reason: err.message,
249
- stack: err.stack
250
- }
251
- );
252
- assert.equal(err.message, 'Sample rate of 49000 is not supported.');
253
- }
254
- });
255
- });
256
-
257
- describe('#disableBNR', () => {
258
- beforeEach(() => {
259
- effects.state.bnr.enabled = BNR_STATUS.ENABLED;
260
- });
261
- it('should have #disableBnr', () => {
262
- assert.exists(effects.disableBNR);
263
- });
264
-
265
- it('does bnr disable on audio track', async () => {
266
- assert.isTrue(await effects.handleClientRequest(false, meeting));
267
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.NOT_ENABLED);
268
-
269
- assert(Metrics.sendBehavioralMetric.calledOnce);
270
- assert.calledWith(
271
- Metrics.sendBehavioralMetric,
272
- BEHAVIORAL_METRICS.DISABLE_BNR_SUCCESS,
273
- );
274
- });
275
-
276
- it('reject request for disable bnr if not enabled', async () => {
277
- try {
278
- await effects.handleClientRequest(false, meeting);
279
- }
280
- catch (e) {
281
- assert.equal(e.message, 'Can not disable as BNR is not enabled');
282
- assert.equal(effects.state.bnr.enabled, BNR_STATUS.ENABLED);
283
-
284
- assert(Metrics.sendBehavioralMetric.calledOnce);
285
- assert.calledWith(
286
- Metrics.sendBehavioralMetric,
287
- BEHAVIORAL_METRICS.DISABLE_BNR_FAILURE,
288
- );
289
- }
290
- });
291
- });
292
- });
293
- });
@@ -1,188 +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 = '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';
16
-
17
- peerConnection = {
18
- iceGatheringState: 'new',
19
- onicecandidate: null,
20
- onicecandidateerror: null,
21
- localDescription: {sdp}
22
- };
23
-
24
- Object.defineProperty(global.window, 'RTCSessionDescription', {
25
- writable: true,
26
- value: class {
27
- constructor(options) {
28
- this.type = options.type;
29
- this.sdp = options.sdp;
30
- }
31
- }
32
- });
33
- });
34
- describe('setRemoteSessionDetails', () => {
35
- it('change the start bitrate on remoteSDP and remove extmap', async () => {
36
- StaticConfig.set({bandwidth: {audio: 50, video: 500, startBitrate: 2000}});
37
- let result = null;
38
- const setRemoteDescription = sinon.stub().callsFake((args) => {
39
- result = args;
40
-
41
- return Promise.resolve();
42
- });
43
- const remoteSdp = 'v=0\r\n' +
44
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
45
- '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' +
46
- 'a=rtpmap:127 H264/90000\r\n' +
47
- 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
48
- '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';
49
-
50
- const resultSdp = 'v=0\r\n' +
51
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
52
- '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' +
53
- 'a=rtpmap:127 H264/90000\r\r\n' +
54
- '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';
55
- const peerConnection = {
56
- signalingState: 'have-local-offer',
57
- setRemoteDescription,
58
- enableExtmap: false
59
- };
60
-
61
- await PeerConnectionManager.setRemoteSessionDetails(peerConnection, 'answer', remoteSdp, {});
62
-
63
- assert.equal(result.sdp, resultSdp);
64
- });
65
-
66
- it('dont change the start bitrate on remoteSDP if default value is 0', async () => {
67
- StaticConfig.set({bandwidth: {audio: 50, video: 500, startBitrate: 0}});
68
- let result = null;
69
- const setRemoteDescription = sinon.stub().callsFake((args) => {
70
- result = args;
71
-
72
- return Promise.resolve();
73
- });
74
- const remoteSdp = 'v=0\r\n' +
75
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
76
- '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' +
77
- 'a=rtpmap:127 H264/90000\r\n' +
78
- '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';
79
-
80
- const peerConnection = {
81
- signalingState: 'have-local-offer',
82
- setRemoteDescription
83
- };
84
-
85
- await PeerConnectionManager.setRemoteSessionDetails(peerConnection, 'answer', remoteSdp, {});
86
-
87
- assert.equal(result.sdp, remoteSdp);
88
- });
89
-
90
- it('removes xTLS candidates from the remote sdp', async () => {
91
- StaticConfig.set({bandwidth: {}});
92
-
93
- const remoteSdpWithXtlsCandidates = 'v=0\r\n' +
94
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
95
- 'a=candidate:1 1 UDP 2130706175 18.206.82.54 9000 typ host\r\n' +
96
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
97
- 'a=candidate:3 1 TCP 1962934015 18.206.82.54 9000 typ host tcptype passive\r\n' +
98
- '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' +
99
- 'a=rtpmap:127 H264/90000\r\n' +
100
- 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
101
- 'm=video 9000 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
102
- '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' +
103
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
104
- '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';
105
-
106
- // same as remoteSdpWithXtlsCandidates but without the xtls candidates
107
- const resultSdp = 'v=0\r\n' +
108
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
109
- 'a=candidate:1 1 UDP 2130706175 18.206.82.54 9000 typ host\r\n' +
110
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
111
- 'a=candidate:3 1 TCP 1962934015 18.206.82.54 9000 typ host tcptype passive\r\n' +
112
- 'a=rtpmap:127 H264/90000\r\n' +
113
- 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
114
- 'm=video 9000 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
115
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
116
- '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';
117
-
118
- const peerConnection = {
119
- signalingState: 'have-local-offer',
120
- setRemoteDescription: sinon.stub().resolves(),
121
- enableExtmap: true
122
- };
123
-
124
- await PeerConnectionManager.setRemoteSessionDetails(peerConnection, 'answer', remoteSdpWithXtlsCandidates, '');
125
-
126
- assert.calledWith(peerConnection.setRemoteDescription, new global.window.RTCSessionDescription({sdp: resultSdp, type: 'answer'}));
127
- });
128
- });
129
-
130
- describe('iceCandidate', () => {
131
- beforeEach(() => {
132
- StaticConfig.set({bandwidth: {audio: 50, video: 500, startBitrate: 0}});
133
- peerConnection.sdp = null;
134
- });
135
- it('ice gathering already completed', async () => {
136
- peerConnection.iceGatheringState = 'complete';
137
-
138
- await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'});
139
- console.error('Came her with sdp resolved');
140
- assert(peerConnection.sdp.search('max-fs:8192'), true);
141
- });
142
-
143
- it('listen onIceCandidate,onicecandidateerror and onIceGatheringStateChange', async () => {
144
- peerConnection.iceGatheringState = 'none';
145
- setTimeout(() => {
146
- peerConnection.onicecandidate({candidate: null});
147
- }, 1000);
148
- await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'});
149
- assert.isFunction(peerConnection.onIceGatheringStateChange);
150
- assert.isFunction(peerConnection.onicecandidate);
151
- assert.isFunction(peerConnection.onicecandidateerror);
152
- });
153
-
154
- it('generate sdp with iceGatheringstate is `complet`', async () => {
155
- peerConnection.iceGatheringState = 'none';
156
- setTimeout(() => {
157
- peerConnection.iceGatheringState = 'complete';
158
- peerConnection.onIceGatheringStateChange();
159
- }, 1000);
160
- await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'})
161
- .then(() => {
162
- assert(peerConnection.sdp.search('max-fs:8192'), true);
163
- });
164
- });
165
-
166
- it('should still generate sdp even if onicecandidateerror is called ', async () => {
167
- peerConnection.iceGatheringState = 'none';
168
- setTimeout(() => {
169
- peerConnection.onicecandidateerror();
170
- peerConnection.onicecandidate({candidate: null});
171
- }, 1000);
172
- await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'})
173
- .then(() => {
174
- assert(peerConnection.sdp.search('max-fs:8192'), true);
175
- });
176
- });
177
-
178
- it('should throw generated SDP does not have candidates ', async () => {
179
- peerConnection.iceGatheringState = 'none';
180
- peerConnection.localDescription.sdp = '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';
181
- setTimeout(() => {
182
- peerConnection.onicecandidate({candidate: null});
183
- }, 1000);
184
- await assert.isRejected(PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}), InvalidSdpError);
185
- });
186
- });
187
- });
188
- });