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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +41 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +357 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +215 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +22 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +51 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +44 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1047 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +77 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +64 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/browser-detection.js +1 -2
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +1 -2
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.js +50 -0
  37. package/dist/common/errors/no-meeting-info.js.map +1 -0
  38. package/dist/common/errors/parameter.js +3 -4
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +1 -2
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +1 -2
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  45. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  46. package/dist/common/errors/reconnection-in-progress.js +1 -2
  47. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  48. package/dist/common/errors/reconnection.js +1 -2
  49. package/dist/common/errors/reconnection.js.map +1 -1
  50. package/dist/common/errors/stats.js +1 -2
  51. package/dist/common/errors/stats.js.map +1 -1
  52. package/dist/common/errors/webex-errors.js +48 -28
  53. package/dist/common/errors/webex-errors.js.map +1 -1
  54. package/dist/common/errors/webex-meetings-error.js +1 -2
  55. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  56. package/dist/common/events/events-scope.js +1 -2
  57. package/dist/common/events/events-scope.js.map +1 -1
  58. package/dist/common/events/events.js +1 -2
  59. package/dist/common/events/events.js.map +1 -1
  60. package/dist/common/events/trigger-proxy.js +1 -2
  61. package/dist/common/events/trigger-proxy.js.map +1 -1
  62. package/dist/common/events/util.js +1 -2
  63. package/dist/common/events/util.js.map +1 -1
  64. package/dist/common/logs/logger-config.js +1 -2
  65. package/dist/common/logs/logger-config.js.map +1 -1
  66. package/dist/common/logs/logger-proxy.js +2 -3
  67. package/dist/common/logs/logger-proxy.js.map +1 -1
  68. package/dist/common/logs/request.js +8 -5
  69. package/dist/common/logs/request.js.map +1 -1
  70. package/dist/common/queue.js +22 -9
  71. package/dist/common/queue.js.map +1 -1
  72. package/dist/config.js +9 -12
  73. package/dist/config.js.map +1 -1
  74. package/dist/constants.js +437 -433
  75. package/dist/constants.js.map +1 -1
  76. package/dist/controls-options-manager/constants.js +3 -6
  77. package/dist/controls-options-manager/constants.js.map +1 -1
  78. package/dist/controls-options-manager/enums.js +14 -6
  79. package/dist/controls-options-manager/enums.js.map +1 -1
  80. package/dist/controls-options-manager/index.js +126 -37
  81. package/dist/controls-options-manager/index.js.map +1 -1
  82. package/dist/controls-options-manager/types.js +7 -0
  83. package/dist/controls-options-manager/types.js.map +1 -0
  84. package/dist/controls-options-manager/util.js +309 -19
  85. package/dist/controls-options-manager/util.js.map +1 -1
  86. package/dist/index.js +116 -4
  87. package/dist/index.js.map +1 -1
  88. package/dist/interpretation/collection.js +22 -0
  89. package/dist/interpretation/collection.js.map +1 -0
  90. package/dist/interpretation/index.js +365 -0
  91. package/dist/interpretation/index.js.map +1 -0
  92. package/dist/interpretation/siLanguage.js +24 -0
  93. package/dist/interpretation/siLanguage.js.map +1 -0
  94. package/dist/locus-info/controlsUtils.js +95 -6
  95. package/dist/locus-info/controlsUtils.js.map +1 -1
  96. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  97. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  98. package/dist/locus-info/fullState.js +1 -2
  99. package/dist/locus-info/fullState.js.map +1 -1
  100. package/dist/locus-info/hostUtils.js +1 -2
  101. package/dist/locus-info/hostUtils.js.map +1 -1
  102. package/dist/locus-info/index.js +408 -67
  103. package/dist/locus-info/index.js.map +1 -1
  104. package/dist/locus-info/infoUtils.js +13 -5
  105. package/dist/locus-info/infoUtils.js.map +1 -1
  106. package/dist/locus-info/mediaSharesUtils.js +58 -3
  107. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  108. package/dist/locus-info/parser.js +251 -78
  109. package/dist/locus-info/parser.js.map +1 -1
  110. package/dist/locus-info/selfUtils.js +97 -13
  111. package/dist/locus-info/selfUtils.js.map +1 -1
  112. package/dist/media/index.js +106 -319
  113. package/dist/media/index.js.map +1 -1
  114. package/dist/media/properties.js +96 -153
  115. package/dist/media/properties.js.map +1 -1
  116. package/dist/media/util.js +1 -22
  117. package/dist/media/util.js.map +1 -1
  118. package/dist/mediaQualityMetrics/config.js +498 -493
  119. package/dist/mediaQualityMetrics/config.js.map +1 -1
  120. package/dist/meeting/in-meeting-actions.js +90 -3
  121. package/dist/meeting/in-meeting-actions.js.map +1 -1
  122. package/dist/meeting/index.js +4579 -2951
  123. package/dist/meeting/index.js.map +1 -1
  124. package/dist/meeting/locusMediaRequest.js +291 -0
  125. package/dist/meeting/locusMediaRequest.js.map +1 -0
  126. package/dist/meeting/muteState.js +224 -133
  127. package/dist/meeting/muteState.js.map +1 -1
  128. package/dist/meeting/request.js +295 -197
  129. package/dist/meeting/request.js.map +1 -1
  130. package/dist/meeting/request.type.js +7 -0
  131. package/dist/meeting/request.type.js.map +1 -0
  132. package/dist/meeting/state.js +1 -2
  133. package/dist/meeting/state.js.map +1 -1
  134. package/dist/meeting/util.js +602 -432
  135. package/dist/meeting/util.js.map +1 -1
  136. package/dist/meeting-info/collection.js +1 -2
  137. package/dist/meeting-info/collection.js.map +1 -1
  138. package/dist/meeting-info/index.js +74 -7
  139. package/dist/meeting-info/index.js.map +1 -1
  140. package/dist/meeting-info/meeting-info-v2.js +197 -63
  141. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  142. package/dist/meeting-info/request.js +1 -2
  143. package/dist/meeting-info/request.js.map +1 -1
  144. package/dist/meeting-info/util.js +2 -3
  145. package/dist/meeting-info/util.js.map +1 -1
  146. package/dist/meeting-info/utilv2.js +25 -12
  147. package/dist/meeting-info/utilv2.js.map +1 -1
  148. package/dist/meetings/collection.js +23 -2
  149. package/dist/meetings/collection.js.map +1 -1
  150. package/dist/meetings/index.js +464 -123
  151. package/dist/meetings/index.js.map +1 -1
  152. package/dist/meetings/meetings.types.js +7 -0
  153. package/dist/meetings/meetings.types.js.map +1 -0
  154. package/dist/meetings/request.js +4 -3
  155. package/dist/meetings/request.js.map +1 -1
  156. package/dist/meetings/util.js +107 -6
  157. package/dist/meetings/util.js.map +1 -1
  158. package/dist/member/index.js +54 -2
  159. package/dist/member/index.js.map +1 -1
  160. package/dist/member/member.types.js +3 -4
  161. package/dist/member/member.types.js.map +1 -1
  162. package/dist/member/types.js +23 -0
  163. package/dist/member/types.js.map +1 -0
  164. package/dist/member/util.js +131 -29
  165. package/dist/member/util.js.map +1 -1
  166. package/dist/members/collection.js +11 -2
  167. package/dist/members/collection.js.map +1 -1
  168. package/dist/members/index.js +172 -8
  169. package/dist/members/index.js.map +1 -1
  170. package/dist/members/request.js +108 -41
  171. package/dist/members/request.js.map +1 -1
  172. package/dist/members/types.js +14 -0
  173. package/dist/members/types.js.map +1 -0
  174. package/dist/members/util.js +327 -234
  175. package/dist/members/util.js.map +1 -1
  176. package/dist/metrics/constants.js +14 -7
  177. package/dist/metrics/constants.js.map +1 -1
  178. package/dist/metrics/index.js +4 -452
  179. package/dist/metrics/index.js.map +1 -1
  180. package/dist/multistream/mediaRequestManager.js +344 -0
  181. package/dist/multistream/mediaRequestManager.js.map +1 -0
  182. package/dist/multistream/receiveSlot.js +200 -0
  183. package/dist/multistream/receiveSlot.js.map +1 -0
  184. package/dist/multistream/receiveSlotManager.js +174 -0
  185. package/dist/multistream/receiveSlotManager.js.map +1 -0
  186. package/dist/multistream/remoteMedia.js +268 -0
  187. package/dist/multistream/remoteMedia.js.map +1 -0
  188. package/dist/multistream/remoteMediaGroup.js +267 -0
  189. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  190. package/dist/multistream/remoteMediaManager.js +1211 -0
  191. package/dist/multistream/remoteMediaManager.js.map +1 -0
  192. package/dist/multistream/sendSlotManager.js +236 -0
  193. package/dist/multistream/sendSlotManager.js.map +1 -0
  194. package/dist/networkQualityMonitor/index.js +5 -4
  195. package/dist/networkQualityMonitor/index.js.map +1 -1
  196. package/dist/personal-meeting-room/index.js +2 -3
  197. package/dist/personal-meeting-room/index.js.map +1 -1
  198. package/dist/personal-meeting-room/request.js +2 -3
  199. package/dist/personal-meeting-room/request.js.map +1 -1
  200. package/dist/personal-meeting-room/util.js +1 -2
  201. package/dist/personal-meeting-room/util.js.map +1 -1
  202. package/dist/reachability/index.js +258 -72
  203. package/dist/reachability/index.js.map +1 -1
  204. package/dist/reachability/request.js +18 -10
  205. package/dist/reachability/request.js.map +1 -1
  206. package/dist/reactions/constants.js +12 -0
  207. package/dist/reactions/constants.js.map +1 -0
  208. package/dist/reactions/reactions.js +4 -6
  209. package/dist/reactions/reactions.js.map +1 -1
  210. package/dist/reactions/reactions.type.js +21 -23
  211. package/dist/reactions/reactions.type.js.map +1 -1
  212. package/dist/reconnection-manager/index.js +272 -220
  213. package/dist/reconnection-manager/index.js.map +1 -1
  214. package/dist/recording-controller/enums.js +4 -5
  215. package/dist/recording-controller/enums.js.map +1 -1
  216. package/dist/recording-controller/index.js +57 -46
  217. package/dist/recording-controller/index.js.map +1 -1
  218. package/dist/recording-controller/util.js +10 -10
  219. package/dist/recording-controller/util.js.map +1 -1
  220. package/dist/roap/index.js +101 -235
  221. package/dist/roap/index.js.map +1 -1
  222. package/dist/roap/request.js +126 -180
  223. package/dist/roap/request.js.map +1 -1
  224. package/dist/roap/turnDiscovery.js +115 -105
  225. package/dist/roap/turnDiscovery.js.map +1 -1
  226. package/dist/rtcMetrics/constants.js +11 -0
  227. package/dist/rtcMetrics/constants.js.map +1 -0
  228. package/dist/rtcMetrics/index.js +115 -0
  229. package/dist/rtcMetrics/index.js.map +1 -0
  230. package/dist/statsAnalyzer/global.js +2 -93
  231. package/dist/statsAnalyzer/global.js.map +1 -1
  232. package/dist/statsAnalyzer/index.js +374 -374
  233. package/dist/statsAnalyzer/index.js.map +1 -1
  234. package/dist/statsAnalyzer/mqaUtil.js +100 -66
  235. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  236. package/dist/transcription/index.js +1 -2
  237. package/dist/transcription/index.js.map +1 -1
  238. package/dist/webinar/collection.js +43 -0
  239. package/dist/webinar/collection.js.map +1 -0
  240. package/dist/webinar/index.js +68 -0
  241. package/dist/webinar/index.js.map +1 -0
  242. package/package.json +27 -18
  243. package/src/annotation/annotation.types.ts +50 -0
  244. package/src/annotation/constants.ts +36 -0
  245. package/src/annotation/index.ts +328 -0
  246. package/src/breakouts/README.md +220 -0
  247. package/src/breakouts/breakout.ts +188 -0
  248. package/src/breakouts/collection.ts +19 -0
  249. package/src/breakouts/edit-lock-error.ts +25 -0
  250. package/src/breakouts/events.ts +56 -0
  251. package/src/breakouts/index.ts +925 -0
  252. package/src/breakouts/request.ts +55 -0
  253. package/src/breakouts/utils.ts +57 -0
  254. package/src/common/errors/no-meeting-info.ts +24 -0
  255. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  256. package/src/common/errors/webex-errors.ts +36 -12
  257. package/src/common/logs/logger-proxy.ts +1 -1
  258. package/src/common/logs/request.ts +5 -1
  259. package/src/common/queue.ts +22 -8
  260. package/src/config.ts +7 -9
  261. package/src/constants.ts +263 -89
  262. package/src/controls-options-manager/enums.ts +11 -1
  263. package/src/controls-options-manager/index.ts +116 -21
  264. package/src/controls-options-manager/types.ts +59 -0
  265. package/src/controls-options-manager/util.ts +294 -14
  266. package/src/index.ts +40 -0
  267. package/src/interpretation/README.md +60 -0
  268. package/src/interpretation/collection.ts +19 -0
  269. package/src/interpretation/index.ts +332 -0
  270. package/src/interpretation/siLanguage.ts +18 -0
  271. package/src/locus-info/controlsUtils.ts +110 -0
  272. package/src/locus-info/index.ts +449 -61
  273. package/src/locus-info/infoUtils.ts +14 -2
  274. package/src/locus-info/mediaSharesUtils.ts +64 -0
  275. package/src/locus-info/parser.ts +258 -47
  276. package/src/locus-info/selfUtils.ts +85 -2
  277. package/src/media/index.ts +153 -370
  278. package/src/media/properties.ts +106 -136
  279. package/src/media/util.ts +0 -21
  280. package/src/mediaQualityMetrics/config.ts +379 -377
  281. package/src/meeting/in-meeting-actions.ts +168 -0
  282. package/src/meeting/index.ts +3801 -2457
  283. package/src/meeting/locusMediaRequest.ts +313 -0
  284. package/src/meeting/muteState.ts +224 -138
  285. package/src/meeting/request.ts +207 -127
  286. package/src/meeting/request.type.ts +13 -0
  287. package/src/meeting/util.ts +590 -423
  288. package/src/meeting-info/index.ts +81 -8
  289. package/src/meeting-info/meeting-info-v2.ts +159 -13
  290. package/src/meeting-info/util.ts +1 -1
  291. package/src/meeting-info/utilv2.ts +22 -9
  292. package/src/meetings/collection.ts +20 -0
  293. package/src/meetings/index.ts +466 -124
  294. package/src/meetings/meetings.types.ts +12 -0
  295. package/src/meetings/request.ts +2 -0
  296. package/src/meetings/util.ts +116 -5
  297. package/src/member/index.ts +52 -1
  298. package/src/member/types.ts +38 -0
  299. package/src/member/util.ts +139 -28
  300. package/src/members/collection.ts +8 -0
  301. package/src/members/index.ts +196 -7
  302. package/src/members/request.ts +97 -17
  303. package/src/members/types.ts +29 -0
  304. package/src/members/util.ts +333 -240
  305. package/src/metrics/constants.ts +12 -4
  306. package/src/metrics/index.ts +1 -471
  307. package/src/multistream/mediaRequestManager.ts +440 -0
  308. package/src/multistream/receiveSlot.ts +184 -0
  309. package/src/multistream/receiveSlotManager.ts +166 -0
  310. package/src/multistream/remoteMedia.ts +254 -0
  311. package/src/multistream/remoteMediaGroup.ts +284 -0
  312. package/src/multistream/remoteMediaManager.ts +1145 -0
  313. package/src/multistream/sendSlotManager.ts +170 -0
  314. package/src/networkQualityMonitor/index.ts +6 -6
  315. package/src/reachability/index.ts +238 -45
  316. package/src/reachability/request.ts +17 -8
  317. package/src/reactions/constants.ts +4 -0
  318. package/src/reactions/reactions.ts +4 -4
  319. package/src/reactions/reactions.type.ts +30 -4
  320. package/src/reconnection-manager/index.ts +124 -107
  321. package/src/recording-controller/index.ts +20 -3
  322. package/src/recording-controller/util.ts +26 -9
  323. package/src/roap/index.ts +98 -240
  324. package/src/roap/request.ts +74 -148
  325. package/src/roap/turnDiscovery.ts +62 -56
  326. package/src/rtcMetrics/constants.ts +3 -0
  327. package/src/rtcMetrics/index.ts +100 -0
  328. package/src/statsAnalyzer/global.ts +1 -92
  329. package/src/statsAnalyzer/index.ts +429 -447
  330. package/src/statsAnalyzer/mqaUtil.ts +105 -103
  331. package/src/webinar/collection.ts +31 -0
  332. package/src/webinar/index.ts +62 -0
  333. package/test/integration/spec/converged-space-meetings.js +233 -0
  334. package/test/integration/spec/journey.js +320 -264
  335. package/test/integration/spec/space-meeting.js +77 -4
  336. package/test/unit/spec/annotation/index.ts +418 -0
  337. package/test/unit/spec/breakouts/breakout.ts +237 -0
  338. package/test/unit/spec/breakouts/collection.ts +15 -0
  339. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  340. package/test/unit/spec/breakouts/events.ts +89 -0
  341. package/test/unit/spec/breakouts/index.ts +1790 -0
  342. package/test/unit/spec/breakouts/request.ts +104 -0
  343. package/test/unit/spec/breakouts/utils.js +72 -0
  344. package/test/unit/spec/common/queue.js +31 -2
  345. package/test/unit/spec/controls-options-manager/index.js +163 -0
  346. package/test/unit/spec/controls-options-manager/util.js +576 -60
  347. package/test/unit/spec/fixture/locus.js +1 -0
  348. package/test/unit/spec/interpretation/collection.ts +15 -0
  349. package/test/unit/spec/interpretation/index.ts +589 -0
  350. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  351. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  352. package/test/unit/spec/locus-info/index.js +1390 -16
  353. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  354. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  355. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  356. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  357. package/test/unit/spec/locus-info/parser.js +116 -35
  358. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  359. package/test/unit/spec/media/index.ts +274 -0
  360. package/test/unit/spec/media/properties.ts +75 -84
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +82 -0
  362. package/test/unit/spec/meeting/index.js +7420 -3125
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  364. package/test/unit/spec/meeting/muteState.js +407 -212
  365. package/test/unit/spec/meeting/request.js +512 -42
  366. package/test/unit/spec/meeting/utils.js +741 -24
  367. package/test/unit/spec/meeting-info/index.js +300 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +500 -6
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +14 -0
  371. package/test/unit/spec/meetings/index.js +1012 -209
  372. package/test/unit/spec/meetings/utils.js +202 -2
  373. package/test/unit/spec/member/index.js +38 -8
  374. package/test/unit/spec/member/util.js +528 -27
  375. package/test/unit/spec/members/index.js +597 -3
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +210 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  380. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  382. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  385. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  386. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  387. package/test/unit/spec/reachability/index.ts +598 -24
  388. package/test/unit/spec/reachability/request.js +68 -0
  389. package/test/unit/spec/reconnection-manager/index.js +130 -22
  390. package/test/unit/spec/recording-controller/index.js +293 -218
  391. package/test/unit/spec/recording-controller/util.js +223 -96
  392. package/test/unit/spec/roap/index.ts +200 -77
  393. package/test/unit/spec/roap/request.ts +232 -0
  394. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  395. package/test/unit/spec/rtcMetrics/index.ts +73 -0
  396. package/test/unit/spec/stats-analyzer/index.js +205 -50
  397. package/test/unit/spec/webinar/collection.ts +13 -0
  398. package/test/unit/spec/webinar/index.ts +60 -0
  399. package/test/utils/constants.js +9 -0
  400. package/test/utils/integrationTestUtils.js +46 -0
  401. package/test/utils/testUtils.js +0 -45
  402. package/test/utils/webex-config.js +4 -0
  403. package/test/utils/webex-test-users.js +7 -3
  404. package/dist/meeting/effectsState.js +0 -260
  405. package/dist/meeting/effectsState.js.map +0 -1
  406. package/dist/metrics/config.js +0 -289
  407. package/dist/metrics/config.js.map +0 -1
  408. package/dist/peer-connection-manager/index.js +0 -671
  409. package/dist/peer-connection-manager/index.js.map +0 -1
  410. package/dist/peer-connection-manager/util.js +0 -110
  411. package/dist/peer-connection-manager/util.js.map +0 -1
  412. package/dist/roap/collection.js +0 -63
  413. package/dist/roap/collection.js.map +0 -1
  414. package/dist/roap/handler.js +0 -279
  415. package/dist/roap/handler.js.map +0 -1
  416. package/dist/roap/state.js +0 -127
  417. package/dist/roap/state.js.map +0 -1
  418. package/dist/roap/util.js +0 -76
  419. package/dist/roap/util.js.map +0 -1
  420. package/src/index.js +0 -15
  421. package/src/meeting/effectsState.ts +0 -209
  422. package/src/metrics/config.ts +0 -485
  423. package/src/peer-connection-manager/index.ts +0 -847
  424. package/src/peer-connection-manager/util.ts +0 -119
  425. package/src/roap/collection.ts +0 -62
  426. package/src/roap/handler.ts +0 -294
  427. package/src/roap/state.ts +0 -156
  428. package/src/roap/util.ts +0 -100
  429. package/test/unit/spec/meeting/effectsState.js +0 -281
  430. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  431. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  432. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  433. package/test/unit/spec/roap/util.js +0 -30
@@ -1,118 +1,45 @@
1
- /* global window */
2
1
  // @ts-ignore
3
2
  import {StatelessWebexPlugin} from '@webex/webex-core';
4
3
 
5
4
  import LoggerProxy from '../common/logs/logger-proxy';
6
- import {PARTICIPANT, LOCI, CALL, MEDIA, HTTP_VERBS, REACHABILITY} from '../constants';
7
- import Metrics from '../metrics';
8
- import {eventType} from '../metrics/config';
9
- import ParameterError from '../common/errors/parameter';
5
+ import {IP_VERSION, REACHABILITY} from '../constants';
6
+ import {LocusMediaRequest} from '../meeting/locusMediaRequest';
7
+
10
8
  /**
11
9
  * @class RoapRequest
12
10
  */
13
11
  export default class RoapRequest extends StatelessWebexPlugin {
14
12
  /**
15
- * Joins a meeting via ROAP
16
- * @param {Object} options
17
- * @returns {Promise} returns a promise that resolves/rejects whatever the request does
13
+ * Returns reachability data.
14
+ * @param {Object} localSdp
15
+ * @returns {Object}
18
16
  */
17
+ async attachReachabilityData(localSdp) {
18
+ let joinCookie;
19
19
 
20
- attachRechabilityData(localSdp) {
21
- const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);
20
+ // @ts-ignore
21
+ const reachabilityResult = await this.webex.meetings.reachability.getReachabilityResults();
22
22
 
23
- if (reachabilityData) {
24
- try {
25
- const reachabilityResult = JSON.parse(reachabilityData);
23
+ if (reachabilityResult && Object.keys(reachabilityResult).length) {
24
+ localSdp.reachability = reachabilityResult;
25
+ }
26
+
27
+ // @ts-ignore
28
+ const joinCookieRaw = await this.webex.boundedStorage
29
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
30
+ .catch(() => {});
26
31
 
27
- /* istanbul ignore else */
28
- if (reachabilityResult && Object.keys(reachabilityResult).length) {
29
- localSdp.reachability = reachabilityResult;
30
- }
32
+ if (joinCookieRaw) {
33
+ try {
34
+ joinCookie = JSON.parse(joinCookieRaw);
31
35
  } catch (e) {
32
36
  LoggerProxy.logger.error(
33
- `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
37
+ `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`
34
38
  );
35
39
  }
36
40
  }
37
41
 
38
- return localSdp;
39
- }
40
-
41
- joinMeetingWithRoap(options) {
42
- LoggerProxy.logger.info('Roap:request#joinMeetingWithRoap --> Join locus with roap');
43
- LoggerProxy.logger.info(
44
- `Roap:request#joinMeetingWithRoap --> Local SDP: ${options.roapMessage}`
45
- );
46
-
47
- return Promise.resolve().then(async () => {
48
- // @ts-ignore
49
- const deviceUrl = this.webex.internal.device.url;
50
- let url = '';
51
-
52
- const body: any = {
53
- deviceUrl,
54
- usingResource: options.resourceId || null,
55
- correlationId: options.correlationId,
56
- localMedias: [
57
- {
58
- localSdp: JSON.stringify(
59
- this.attachRechabilityData({
60
- roapMessage: options.roapMessage,
61
- audioMuted: false,
62
- videoMuted: false,
63
- })
64
- ),
65
- },
66
- ],
67
- clientMediaPreferences: {
68
- preferTranscoding: options.preferTranscoding ?? true,
69
- },
70
- };
71
-
72
- if (options.locusUrl) {
73
- url = `${options.locusUrl}/${PARTICIPANT}`;
74
- } else if (options.sipUrl) {
75
- try {
76
- // @ts-ignore
77
- await this.webex.internal.services.waitForCatalog('postauth');
78
- // @ts-ignore
79
- url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;
80
- body.invitee = {
81
- address: options.sipTarget,
82
- };
83
- } catch (e) {
84
- LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> ${e}`);
85
- throw e;
86
- }
87
- } else {
88
- throw new ParameterError('Must provide a locusUrl or sipTarget');
89
- }
90
-
91
- // @ts-ignore
92
- return this.webex
93
- .request({
94
- method: HTTP_VERBS.POST,
95
- uri: url,
96
- body,
97
- })
98
- .then((res) => {
99
- const {locus} = res.body;
100
-
101
- locus.roapSeq = options.roapMessage.seq;
102
- locus.id = locus.url.split('/').pop();
103
- LoggerProxy.logger.info(
104
- `Roap:request#joinMeetingWithRoap --> Joined locus [${locus.id}][${locus.fullState.lastActive}]`
105
- );
106
-
107
- return locus;
108
- })
109
- .catch((err) => {
110
- LoggerProxy.logger.error(
111
- `Roap:request#joinMeetingWithRoap --> failed with error: ${err}`
112
- );
113
- throw err;
114
- });
115
- });
42
+ return {localSdp, joinCookie};
116
43
  }
117
44
 
118
45
  /**
@@ -122,78 +49,74 @@ export default class RoapRequest extends StatelessWebexPlugin {
122
49
  * @param {String} options.locusSelfUrl
123
50
  * @param {String} options.mediaId
124
51
  * @param {String} options.correlationId
125
- * @param {Boolean} options.audioMuted
126
- * @param {Boolean} options.videoMuted
127
52
  * @param {String} options.meetingId
53
+ * @param {IP_VERSION} options.ipVersion only required for offers
128
54
  * @returns {Promise} returns the response/failure of the request
129
55
  */
130
- sendRoap(options: {
56
+ async sendRoap(options: {
131
57
  roapMessage: any;
132
58
  locusSelfUrl: string;
133
59
  mediaId: string;
134
- correlationId: string;
135
- audioMuted: boolean;
136
- videoMuted: boolean;
137
60
  meetingId: string;
138
- preferTranscoding?: boolean;
61
+ ipVersion?: IP_VERSION;
62
+ locusMediaRequest?: LocusMediaRequest;
63
+ audioMuted?: boolean;
64
+ videoMuted?: boolean;
139
65
  }) {
140
- const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;
66
+ const {roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest, ipVersion} = options;
141
67
 
142
68
  if (!mediaId) {
143
- LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
69
+ LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');
144
70
  }
145
71
 
146
- const mediaUrl = `${locusSelfUrl}/${MEDIA}`;
147
- // @ts-ignore
148
- const deviceUrl = this.webex.internal.device.url;
72
+ if (!locusMediaRequest) {
73
+ LoggerProxy.logger.warn(
74
+ 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'
75
+ );
76
+
77
+ return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));
78
+ }
79
+ const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({
80
+ roapMessage,
81
+ });
149
82
 
150
83
  LoggerProxy.logger.info(
151
- `Roap:request#sendRoap --> ${mediaUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
84
+ `Roap:request#sendRoap --> ${locusSelfUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
152
85
  );
153
86
 
154
- Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});
155
-
156
87
  // @ts-ignore
157
- return this.webex
158
- .request({
159
- uri: mediaUrl,
160
- method: HTTP_VERBS.PUT,
161
- body: {
162
- device: {
163
- url: deviceUrl,
164
- // @ts-ignore
165
- deviceType: this.config.meetings.deviceType,
166
- },
167
- correlationId,
168
- localMedias: [
169
- {
170
- localSdp: JSON.stringify(
171
- this.attachRechabilityData({
172
- roapMessage,
173
- // eslint-disable-next-line no-warning-comments
174
- // TODO: check whats the need for video and audiomute
175
- audioMuted: !!options.audioMuted,
176
- videoMuted: !!options.videoMuted,
177
- })
178
- ),
179
- mediaId: options.mediaId,
180
- },
181
- ],
182
- clientMediaPreferences: {
183
- preferTranscoding: options.preferTranscoding ?? true,
184
- },
185
- },
88
+ this.webex.internal.newMetrics.submitClientEvent({
89
+ name: 'client.locus.media.request',
90
+ options: {
91
+ meetingId,
92
+ },
93
+ });
94
+
95
+ return locusMediaRequest
96
+ .send({
97
+ type: 'RoapMessage',
98
+ selfUrl: locusSelfUrl,
99
+ joinCookie,
100
+ mediaId,
101
+ roapMessage,
102
+ reachability: localSdpWithReachabilityData.reachability,
103
+ ipVersion,
186
104
  })
187
105
  .then((res) => {
188
- Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});
189
-
106
+ // @ts-ignore
107
+ this.webex.internal.newMetrics.submitClientEvent({
108
+ name: 'client.locus.media.response',
109
+ options: {
110
+ meetingId,
111
+ },
112
+ });
190
113
  // always it will be the first mediaConnection Object
191
114
  const mediaConnections =
192
115
  res.body.mediaConnections &&
193
116
  res.body.mediaConnections.length > 0 &&
194
117
  res.body.mediaConnections[0];
195
118
 
196
- LoggerProxy.logger.info(
119
+ LoggerProxy.logger.debug(
197
120
  `Roap:request#sendRoap --> response:${JSON.stringify(
198
121
  mediaConnections,
199
122
  null,
@@ -202,7 +125,7 @@ export default class RoapRequest extends StatelessWebexPlugin {
202
125
  );
203
126
  const {locus} = res.body;
204
127
 
205
- locus.roapSeq = options.roapMessage.seq;
128
+ locus.roapSeq = roapMessage.seq;
206
129
 
207
130
  return {
208
131
  locus,
@@ -210,10 +133,13 @@ export default class RoapRequest extends StatelessWebexPlugin {
210
133
  };
211
134
  })
212
135
  .catch((err) => {
213
- Metrics.postEvent({
214
- event: eventType.MEDIA_RESPONSE,
215
- meetingId,
216
- data: {error: Metrics.parseLocusError(err, true)},
136
+ // @ts-ignore
137
+ this.webex.internal.newMetrics.submitClientEvent({
138
+ name: 'client.locus.media.response',
139
+ options: {
140
+ meetingId,
141
+ rawError: err,
142
+ },
217
143
  });
218
144
  LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);
219
145
  LoggerProxy.logger.error(
@@ -8,9 +8,16 @@ import {ROAP} from '../constants';
8
8
 
9
9
  import RoapRequest from './request';
10
10
  import Meeting from '../meeting';
11
+ import MeetingUtil from '../meeting/util';
11
12
 
12
13
  const TURN_DISCOVERY_TIMEOUT = 10; // in seconds
13
14
 
15
+ // Roap spec says that seq should start from 1, but TURN discovery works fine with seq=0
16
+ // and this is handy for us, because TURN discovery is always done before the first SDP exchange,
17
+ // so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection
18
+ // and do the SDP offer with seq=1
19
+ const TURN_DISCOVERY_SEQ = 0;
20
+
14
21
  /**
15
22
  * Handles the process of finding out TURN server information from Linus.
16
23
  * This is achieved by sending a TURN_DISCOVERY_REQUEST.
@@ -146,9 +153,7 @@ export default class TurnDiscovery {
146
153
  * @private
147
154
  * @memberof Roap
148
155
  */
149
- private sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {
150
- const seq = meeting.roapSeq + 1;
151
-
156
+ sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {
152
157
  if (this.defer) {
153
158
  LoggerProxy.logger.warn(
154
159
  'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'
@@ -162,7 +167,7 @@ export default class TurnDiscovery {
162
167
  const roapMessage = {
163
168
  messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,
164
169
  version: ROAP.ROAP_VERSION,
165
- seq,
170
+ seq: TURN_DISCOVERY_SEQ,
166
171
  };
167
172
 
168
173
  LoggerProxy.logger.info(
@@ -172,7 +177,6 @@ export default class TurnDiscovery {
172
177
  return this.roapRequest
173
178
  .sendRoap({
174
179
  roapMessage,
175
- correlationId: meeting.correlationId,
176
180
  // @ts-ignore - Fix missing type
177
181
  locusSelfUrl: meeting.selfUrl,
178
182
  // @ts-ignore - Fix missing type
@@ -180,10 +184,11 @@ export default class TurnDiscovery {
180
184
  audioMuted: meeting.audio?.isLocallyMuted(),
181
185
  videoMuted: meeting.video?.isLocallyMuted(),
182
186
  meetingId: meeting.id,
187
+ locusMediaRequest: meeting.locusMediaRequest,
188
+ // @ts-ignore - because of meeting.webex
189
+ ipVersion: MeetingUtil.getIpVersion(meeting.webex),
183
190
  })
184
191
  .then(({mediaConnections}) => {
185
- meeting.setRoapSeq(seq);
186
-
187
192
  if (mediaConnections) {
188
193
  meeting.updateMediaConnections(mediaConnections);
189
194
  }
@@ -204,19 +209,53 @@ export default class TurnDiscovery {
204
209
  roapMessage: {
205
210
  messageType: ROAP.ROAP_TYPES.OK,
206
211
  version: ROAP.ROAP_VERSION,
207
- seq: meeting.roapSeq,
212
+ seq: TURN_DISCOVERY_SEQ,
208
213
  },
209
214
  // @ts-ignore - fix type
210
215
  locusSelfUrl: meeting.selfUrl,
211
216
  // @ts-ignore - fix type
212
217
  mediaId: meeting.mediaId,
213
- correlationId: meeting.correlationId,
218
+ meetingId: meeting.id,
214
219
  audioMuted: meeting.audio?.isLocallyMuted(),
215
220
  videoMuted: meeting.video?.isLocallyMuted(),
216
- meetingId: meeting.id,
221
+ locusMediaRequest: meeting.locusMediaRequest,
217
222
  });
218
223
  }
219
224
 
225
+ /**
226
+ * Gets the reason why reachability is skipped.
227
+ *
228
+ * @param {Meeting} meeting
229
+ * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
230
+ */
231
+ private async getSkipReason(meeting: Meeting): Promise<string> {
232
+ const isAnyPublicClusterReachable =
233
+ // @ts-ignore - fix type
234
+ await meeting.webex.meetings.reachability.isAnyPublicClusterReachable();
235
+
236
+ if (isAnyPublicClusterReachable) {
237
+ LoggerProxy.logger.info(
238
+ 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
239
+ );
240
+
241
+ return 'reachability';
242
+ }
243
+
244
+ return '';
245
+ }
246
+
247
+ /**
248
+ * Checks if TURN discovery is skipped.
249
+ *
250
+ * @param {Meeting} meeting
251
+ * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
252
+ */
253
+ async isSkipped(meeting) {
254
+ const skipReason = await this.getSkipReason(meeting);
255
+
256
+ return !!skipReason;
257
+ }
258
+
220
259
  /**
221
260
  * Retrieves TURN server information from the backend by doing
222
261
  * a roap message exchange:
@@ -225,13 +264,22 @@ export default class TurnDiscovery {
225
264
  * | <----TURN_DISCOVERY_RESPONSE----- |
226
265
  * | --------------OK----------------> |
227
266
  *
267
+ * This TURN discovery roap exchange is always done with seq=0.
268
+ * The RoapMediaConnection SDP exchange always starts with seq=1,
269
+ * so it works fine no matter if TURN discovery is done or not.
270
+ *
228
271
  * @param {Meeting} meeting
229
- * @param {Boolean} isReconnecting should be set to true if this is a new
272
+ * @param {Boolean} [isReconnecting] should be set to true if this is a new
230
273
  * media connection just after a reconnection
274
+ * @param {Boolean} [isForced]
231
275
  * @returns {Promise}
232
276
  */
233
- async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
234
- const turnDiscoverySkippedReason = await this.getSkipReason(meeting);
277
+ async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean, isForced?: boolean) {
278
+ let turnDiscoverySkippedReason: string;
279
+
280
+ if (!isForced) {
281
+ turnDiscoverySkippedReason = await this.getSkipReason(meeting);
282
+ }
235
283
 
236
284
  if (turnDiscoverySkippedReason) {
237
285
  return {
@@ -263,49 +311,7 @@ export default class TurnDiscovery {
263
311
  stack: e.stack,
264
312
  });
265
313
 
266
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: undefined});
314
+ return {turnServerInfo: undefined, turnDiscoverySkippedReason: undefined};
267
315
  });
268
316
  }
269
-
270
- /**
271
- * Gets the reason why reachability is skipped.
272
- *
273
- * @param {Meeting} meeting
274
- * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
275
- */
276
- private async getSkipReason(meeting: Meeting): Promise<string> {
277
- // @ts-ignore - fix type
278
- const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
279
-
280
- if (isAnyClusterReachable) {
281
- LoggerProxy.logger.info(
282
- 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
283
- );
284
-
285
- return 'reachability';
286
- }
287
-
288
- // @ts-ignore - fix type
289
- if (!meeting.config.experimental.enableTurnDiscovery) {
290
- LoggerProxy.logger.info(
291
- 'Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it'
292
- );
293
-
294
- return 'config';
295
- }
296
-
297
- return '';
298
- }
299
-
300
- /**
301
- * Checks if TURN discovery is skipped.
302
- *
303
- * @param {Meeting} meeting
304
- * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
305
- */
306
- async isSkipped(meeting) {
307
- const skipReason = await this.getSkipReason(meeting);
308
-
309
- return !!skipReason;
310
- }
311
317
  }
@@ -0,0 +1,3 @@
1
+ const RTC_METRICS = {APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'};
2
+
3
+ export {RTC_METRICS as default};
@@ -0,0 +1,100 @@
1
+ import RTC_METRICS from './constants';
2
+
3
+ /**
4
+ * Rtc Metrics
5
+ */
6
+ export default class RtcMetrics {
7
+ /**
8
+ * Array of MetricData items to be sent to the metrics service.
9
+ */
10
+ metricsQueue = [];
11
+
12
+ intervalId: number;
13
+
14
+ webex: any;
15
+
16
+ meetingId: string;
17
+
18
+ correlationId: string;
19
+
20
+ /**
21
+ * Initialize the interval.
22
+ *
23
+ * @param {object} webex - The main `webex` object.
24
+ * @param {string} meetingId - The meeting id.
25
+ * @param {string} correlationId - The correlation id.
26
+ */
27
+ constructor(webex, meetingId, correlationId) {
28
+ // `window` is used to prevent typescript from returning a NodeJS.Timer.
29
+ this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);
30
+ this.meetingId = meetingId;
31
+ this.webex = webex;
32
+ this.correlationId = correlationId;
33
+ // Send the first set of metrics at 5 seconds in the case of a user leaving the call shortly after joining.
34
+ setTimeout(this.sendMetricsInQueue.bind(this), 5 * 1000);
35
+ }
36
+
37
+ /**
38
+ * Check to see if the metrics queue has any items.
39
+ *
40
+ * @returns {void}
41
+ */
42
+ public sendMetricsInQueue() {
43
+ if (this.metricsQueue.length) {
44
+ this.sendMetrics();
45
+ this.metricsQueue = [];
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Add metrics items to the metrics queue.
51
+ *
52
+ * @param {object} data - An object with a payload array of metrics items.
53
+ *
54
+ * @returns {void}
55
+ */
56
+ addMetrics(data) {
57
+ if (data.payload.length) {
58
+ this.metricsQueue.push(data);
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Clear the metrics interval.
64
+ *
65
+ * @returns {void}
66
+ */
67
+ closeMetrics() {
68
+ this.sendMetricsInQueue();
69
+ clearInterval(this.intervalId);
70
+ }
71
+
72
+ /**
73
+ * Send metrics to the metrics service.
74
+ *
75
+ * @returns {void}
76
+ */
77
+ private sendMetrics() {
78
+ this.webex.request({
79
+ method: 'POST',
80
+ service: 'unifiedTelemetry',
81
+ resource: 'metric/v2',
82
+ headers: {
83
+ type: 'webrtcMedia',
84
+ appId: RTC_METRICS.APP_ID,
85
+ },
86
+ body: {
87
+ metrics: [
88
+ {
89
+ type: 'webrtc',
90
+ version: '1.0.1',
91
+ userId: this.webex.internal.device.userId,
92
+ meetingId: this.meetingId,
93
+ correlationId: this.correlationId,
94
+ data: this.metricsQueue,
95
+ },
96
+ ],
97
+ },
98
+ });
99
+ }
100
+ }
@@ -1,53 +1,5 @@
1
1
  const STATS_DEFAULT = {
2
2
  encryption: 'sha-256',
3
- audio: {
4
- send: {
5
- maxPacketLossRatio: 0,
6
- availableBandwidth: 0,
7
- bytesSent: 0,
8
- meanRemoteJitter: [],
9
- meanRoundTripTime: [],
10
- },
11
- recv: {
12
- availableBandwidth: 0,
13
- bytesReceived: 0,
14
- meanRtpJitter: [],
15
- meanRoundTripTime: [],
16
- },
17
- },
18
- video: {
19
- send: {
20
- maxPacketLossRatio: 0,
21
- availableBandwidth: 0,
22
- meanRemoteJitter: [],
23
- meanRoundTripTime: [],
24
- },
25
- recv: {
26
- availableBandwidth: 0,
27
- totalPacketsLost: 0,
28
- meanRtpJitter: [],
29
- meanRoundTripTime: [],
30
- },
31
- latency: 0,
32
- packetsLost: 0,
33
- },
34
- share: {
35
- send: {
36
- maxPacketLossRatio: 0,
37
- availableBandwidth: 0,
38
- totalPacketsLost: 0,
39
- meanRemoteJitter: [],
40
- meanRoundTripTime: [],
41
- },
42
- recv: {
43
- availableBandwidth: 0,
44
- meanRtpJitter: [],
45
- meanRoundTripTime: [],
46
- },
47
-
48
- latency: 0,
49
- packetsLost: 0,
50
- },
51
3
  bandwidth: {
52
4
  systemBandwidth: 0,
53
5
  sentPerSecond: 0,
@@ -75,51 +27,8 @@ const STATS_DEFAULT = {
75
27
  networkType: [],
76
28
  },
77
29
  },
78
- resolutions: {
79
- audio: {
80
- send: {
81
- width: 0,
82
- height: 0,
83
- },
84
- recv: {
85
- width: 0,
86
- height: 0,
87
- },
88
- },
89
- video: {
90
- send: {
91
- width: 0,
92
- height: 0,
93
- },
94
- recv: {
95
- width: 0,
96
- height: 0,
97
- },
98
- },
99
- share: {
100
- send: {
101
- width: 0,
102
- height: 0,
103
- },
104
- recv: {
105
- width: 0,
106
- height: 0,
107
- },
108
- },
109
- },
30
+ resolutions: {},
110
31
  internal: {
111
- audio: {
112
- send: {},
113
- recv: {},
114
- },
115
- video: {
116
- send: {},
117
- recv: {},
118
- },
119
- share: {
120
- send: {},
121
- recv: {},
122
- },
123
32
  remote: {},
124
33
  candidates: {},
125
34
  },