@webex/plugin-meetings 3.0.0-beta.23 → 3.0.0-beta.231

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 (412) 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 +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +28 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/queue.js +24 -9
  25. package/dist/common/queue.js.map +1 -1
  26. package/dist/config.js +5 -10
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +188 -27
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +319 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +106 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +366 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +357 -62
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +43 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +219 -63
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +49 -106
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +29 -90
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +90 -2
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +2583 -2557
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +292 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +228 -123
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +244 -194
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/util.js +568 -414
  75. package/dist/meeting/util.js.map +1 -1
  76. package/dist/meeting-info/index.js +48 -7
  77. package/dist/meeting-info/index.js.map +1 -1
  78. package/dist/meeting-info/meeting-info-v2.js +171 -51
  79. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  80. package/dist/meeting-info/util.js +1 -1
  81. package/dist/meeting-info/util.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +36 -36
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +367 -86
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +88 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -5
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +3 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +49 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +52 -34
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +173 -59
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/reachability/index.js +90 -30
  127. package/dist/reachability/index.js.map +1 -1
  128. package/dist/reachability/request.js +16 -7
  129. package/dist/reachability/request.js.map +1 -1
  130. package/dist/reconnection-manager/index.js +196 -155
  131. package/dist/reconnection-manager/index.js.map +1 -1
  132. package/dist/recording-controller/index.js +21 -2
  133. package/dist/recording-controller/index.js.map +1 -1
  134. package/dist/recording-controller/util.js +9 -8
  135. package/dist/recording-controller/util.js.map +1 -1
  136. package/dist/roap/index.js +25 -29
  137. package/dist/roap/index.js.map +1 -1
  138. package/dist/roap/request.js +111 -89
  139. package/dist/roap/request.js.map +1 -1
  140. package/dist/roap/turnDiscovery.js +97 -36
  141. package/dist/roap/turnDiscovery.js.map +1 -1
  142. package/dist/rtcMetrics/constants.js +12 -0
  143. package/dist/rtcMetrics/constants.js.map +1 -0
  144. package/dist/rtcMetrics/index.js +117 -0
  145. package/dist/rtcMetrics/index.js.map +1 -0
  146. package/dist/statsAnalyzer/index.js +51 -34
  147. package/dist/statsAnalyzer/index.js.map +1 -1
  148. package/dist/statsAnalyzer/mqaUtil.js +6 -6
  149. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  150. package/dist/types/annotation/annotation.types.d.ts +42 -0
  151. package/dist/types/annotation/constants.d.ts +31 -0
  152. package/dist/types/annotation/index.d.ts +117 -0
  153. package/dist/types/breakouts/breakout.d.ts +8 -0
  154. package/dist/types/breakouts/collection.d.ts +5 -0
  155. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  156. package/dist/types/breakouts/events.d.ts +8 -0
  157. package/dist/types/breakouts/index.d.ts +5 -0
  158. package/dist/types/breakouts/request.d.ts +22 -0
  159. package/dist/types/breakouts/utils.d.ts +15 -0
  160. package/dist/types/common/browser-detection.d.ts +9 -0
  161. package/dist/types/common/collection.d.ts +48 -0
  162. package/dist/types/common/config.d.ts +2 -0
  163. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  164. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  165. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  166. package/dist/types/common/errors/media.d.ts +15 -0
  167. package/dist/types/common/errors/parameter.d.ts +15 -0
  168. package/dist/types/common/errors/password-error.d.ts +15 -0
  169. package/dist/types/common/errors/permission.d.ts +14 -0
  170. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  171. package/dist/types/common/errors/reconnection.d.ts +15 -0
  172. package/dist/types/common/errors/stats.d.ts +15 -0
  173. package/dist/types/common/errors/webex-errors.d.ts +81 -0
  174. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  175. package/dist/types/common/events/events-scope.d.ts +17 -0
  176. package/dist/types/common/events/events.d.ts +12 -0
  177. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  178. package/dist/types/common/events/util.d.ts +2 -0
  179. package/dist/types/common/logs/logger-config.d.ts +2 -0
  180. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  181. package/dist/types/common/logs/request.d.ts +34 -0
  182. package/dist/types/common/queue.d.ts +34 -0
  183. package/dist/types/config.d.ts +72 -0
  184. package/dist/types/constants.d.ts +1028 -0
  185. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  186. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  187. package/dist/types/controls-options-manager/index.d.ts +136 -0
  188. package/dist/types/controls-options-manager/types.d.ts +43 -0
  189. package/dist/types/controls-options-manager/util.d.ts +1 -0
  190. package/dist/types/index.d.ts +7 -0
  191. package/dist/types/interpretation/collection.d.ts +5 -0
  192. package/dist/types/interpretation/index.d.ts +5 -0
  193. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  194. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  195. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  196. package/dist/types/locus-info/fullState.d.ts +2 -0
  197. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  198. package/dist/types/locus-info/index.d.ts +322 -0
  199. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  200. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  201. package/dist/types/locus-info/parser.d.ts +271 -0
  202. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  203. package/dist/types/media/index.d.ts +34 -0
  204. package/dist/types/media/properties.d.ts +93 -0
  205. package/dist/types/media/util.d.ts +2 -0
  206. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  207. package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
  208. package/dist/types/meeting/index.d.ts +1512 -0
  209. package/dist/types/meeting/locusMediaRequest.d.ts +75 -0
  210. package/dist/types/meeting/muteState.d.ts +184 -0
  211. package/dist/types/meeting/request.d.ts +289 -0
  212. package/dist/types/meeting/request.type.d.ts +11 -0
  213. package/dist/types/meeting/state.d.ts +9 -0
  214. package/dist/types/meeting/util.d.ts +94 -0
  215. package/dist/types/meeting-info/collection.d.ts +20 -0
  216. package/dist/types/meeting-info/index.d.ts +62 -0
  217. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  218. package/dist/types/meeting-info/request.d.ts +22 -0
  219. package/dist/types/meeting-info/util.d.ts +2 -0
  220. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  221. package/dist/types/meetings/collection.d.ts +31 -0
  222. package/dist/types/meetings/index.d.ts +361 -0
  223. package/dist/types/meetings/meetings.types.d.ts +4 -0
  224. package/dist/types/meetings/request.d.ts +27 -0
  225. package/dist/types/meetings/util.d.ts +18 -0
  226. package/dist/types/member/index.d.ts +159 -0
  227. package/dist/types/member/types.d.ts +32 -0
  228. package/dist/types/member/util.d.ts +2 -0
  229. package/dist/types/members/collection.d.ts +29 -0
  230. package/dist/types/members/index.d.ts +353 -0
  231. package/dist/types/members/request.d.ts +114 -0
  232. package/dist/types/members/types.d.ts +24 -0
  233. package/dist/types/members/util.d.ts +210 -0
  234. package/dist/types/metrics/constants.d.ts +55 -0
  235. package/dist/types/metrics/index.d.ts +45 -0
  236. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  237. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  238. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  239. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  240. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  241. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  242. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  243. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  244. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  245. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  246. package/dist/types/reachability/index.d.ts +158 -0
  247. package/dist/types/reachability/request.d.ts +39 -0
  248. package/dist/types/reactions/constants.d.ts +3 -0
  249. package/dist/types/reactions/reactions.d.ts +4 -0
  250. package/dist/types/reactions/reactions.type.d.ts +52 -0
  251. package/dist/types/reconnection-manager/index.d.ts +126 -0
  252. package/dist/types/recording-controller/enums.d.ts +7 -0
  253. package/dist/types/recording-controller/index.d.ts +207 -0
  254. package/dist/types/recording-controller/util.d.ts +14 -0
  255. package/dist/types/roap/index.d.ts +77 -0
  256. package/dist/types/roap/request.d.ts +38 -0
  257. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  258. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  259. package/dist/types/rtcMetrics/index.d.ts +47 -0
  260. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  261. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  262. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  263. package/dist/types/transcription/index.d.ts +64 -0
  264. package/package.json +23 -20
  265. package/src/annotation/annotation.types.ts +50 -0
  266. package/src/annotation/constants.ts +36 -0
  267. package/src/annotation/index.ts +328 -0
  268. package/src/breakouts/README.md +44 -14
  269. package/src/breakouts/breakout.ts +87 -9
  270. package/src/breakouts/edit-lock-error.ts +25 -0
  271. package/src/breakouts/events.ts +56 -0
  272. package/src/breakouts/index.ts +710 -10
  273. package/src/breakouts/request.ts +55 -0
  274. package/src/breakouts/utils.ts +57 -0
  275. package/src/common/errors/webex-errors.ts +27 -2
  276. package/src/common/logs/logger-proxy.ts +1 -1
  277. package/src/common/queue.ts +22 -8
  278. package/src/config.ts +4 -9
  279. package/src/constants.ts +175 -18
  280. package/src/controls-options-manager/constants.ts +5 -0
  281. package/src/controls-options-manager/enums.ts +18 -0
  282. package/src/controls-options-manager/index.ts +278 -0
  283. package/src/controls-options-manager/types.ts +59 -0
  284. package/src/controls-options-manager/util.ts +300 -0
  285. package/src/index.ts +39 -0
  286. package/src/interpretation/README.md +60 -0
  287. package/src/interpretation/collection.ts +19 -0
  288. package/src/interpretation/index.ts +332 -0
  289. package/src/interpretation/siLanguage.ts +18 -0
  290. package/src/locus-info/controlsUtils.ts +108 -0
  291. package/src/locus-info/index.ts +381 -59
  292. package/src/locus-info/infoUtils.ts +10 -2
  293. package/src/locus-info/mediaSharesUtils.ts +48 -0
  294. package/src/locus-info/parser.ts +224 -39
  295. package/src/locus-info/selfUtils.ts +81 -5
  296. package/src/media/index.ts +89 -109
  297. package/src/media/properties.ts +48 -87
  298. package/src/meeting/in-meeting-actions.ts +179 -3
  299. package/src/meeting/index.ts +2061 -2133
  300. package/src/meeting/locusMediaRequest.ts +314 -0
  301. package/src/meeting/muteState.ts +227 -130
  302. package/src/meeting/request.ts +157 -116
  303. package/src/meeting/util.ts +555 -396
  304. package/src/meeting-info/index.ts +54 -8
  305. package/src/meeting-info/meeting-info-v2.ts +148 -14
  306. package/src/meeting-info/util.ts +1 -1
  307. package/src/meeting-info/utilv2.ts +23 -23
  308. package/src/meetings/collection.ts +20 -0
  309. package/src/meetings/index.ts +405 -106
  310. package/src/meetings/meetings.types.ts +12 -0
  311. package/src/meetings/request.ts +2 -0
  312. package/src/meetings/util.ts +103 -4
  313. package/src/member/index.ts +49 -0
  314. package/src/member/types.ts +38 -0
  315. package/src/member/util.ts +127 -25
  316. package/src/members/collection.ts +8 -0
  317. package/src/members/index.ts +107 -6
  318. package/src/members/request.ts +97 -17
  319. package/src/members/types.ts +28 -0
  320. package/src/members/util.ts +319 -240
  321. package/src/metrics/constants.ts +2 -4
  322. package/src/metrics/index.ts +1 -490
  323. package/src/multistream/mediaRequestManager.ts +289 -79
  324. package/src/multistream/receiveSlot.ts +55 -18
  325. package/src/multistream/receiveSlotManager.ts +46 -24
  326. package/src/multistream/remoteMedia.ts +27 -2
  327. package/src/multistream/remoteMediaGroup.ts +59 -0
  328. package/src/multistream/remoteMediaManager.ts +113 -32
  329. package/src/reachability/index.ts +76 -18
  330. package/src/reachability/request.ts +16 -7
  331. package/src/reconnection-manager/index.ts +68 -43
  332. package/src/recording-controller/index.ts +20 -3
  333. package/src/recording-controller/util.ts +26 -9
  334. package/src/roap/index.ts +25 -30
  335. package/src/roap/request.ts +103 -95
  336. package/src/roap/turnDiscovery.ts +51 -25
  337. package/src/rtcMetrics/constants.ts +3 -0
  338. package/src/rtcMetrics/index.ts +100 -0
  339. package/src/statsAnalyzer/index.ts +73 -35
  340. package/src/statsAnalyzer/mqaUtil.ts +8 -10
  341. package/test/integration/spec/converged-space-meetings.js +233 -0
  342. package/test/integration/spec/journey.js +336 -259
  343. package/test/integration/spec/space-meeting.js +76 -3
  344. package/test/unit/spec/annotation/index.ts +418 -0
  345. package/test/unit/spec/breakouts/breakout.ts +142 -24
  346. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  347. package/test/unit/spec/breakouts/events.ts +89 -0
  348. package/test/unit/spec/breakouts/index.ts +1545 -48
  349. package/test/unit/spec/breakouts/request.ts +104 -0
  350. package/test/unit/spec/breakouts/utils.js +72 -0
  351. package/test/unit/spec/common/queue.js +31 -2
  352. package/test/unit/spec/controls-options-manager/index.js +287 -0
  353. package/test/unit/spec/controls-options-manager/util.js +582 -0
  354. package/test/unit/spec/fixture/locus.js +1 -0
  355. package/test/unit/spec/interpretation/collection.ts +15 -0
  356. package/test/unit/spec/interpretation/index.ts +589 -0
  357. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  358. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  359. package/test/unit/spec/locus-info/index.js +1169 -36
  360. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  361. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  362. package/test/unit/spec/locus-info/parser.js +62 -22
  363. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  364. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  365. package/test/unit/spec/media/index.ts +138 -28
  366. package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
  367. package/test/unit/spec/meeting/index.js +3510 -1747
  368. package/test/unit/spec/meeting/locusMediaRequest.ts +443 -0
  369. package/test/unit/spec/meeting/muteState.js +370 -208
  370. package/test/unit/spec/meeting/request.js +417 -45
  371. package/test/unit/spec/meeting/utils.js +601 -53
  372. package/test/unit/spec/meeting-info/index.js +181 -0
  373. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  374. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  375. package/test/unit/spec/meetings/collection.js +14 -0
  376. package/test/unit/spec/meetings/index.js +874 -150
  377. package/test/unit/spec/meetings/utils.js +206 -2
  378. package/test/unit/spec/member/index.js +58 -4
  379. package/test/unit/spec/member/util.js +479 -35
  380. package/test/unit/spec/members/index.js +319 -1
  381. package/test/unit/spec/members/request.js +206 -27
  382. package/test/unit/spec/members/utils.js +184 -0
  383. package/test/unit/spec/metrics/index.js +1 -50
  384. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  385. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  386. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  387. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  388. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  389. package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
  390. package/test/unit/spec/reachability/index.ts +185 -7
  391. package/test/unit/spec/reachability/request.js +68 -0
  392. package/test/unit/spec/reconnection-manager/index.js +59 -6
  393. package/test/unit/spec/recording-controller/index.js +294 -218
  394. package/test/unit/spec/recording-controller/util.js +223 -96
  395. package/test/unit/spec/roap/index.ts +27 -51
  396. package/test/unit/spec/roap/request.ts +202 -85
  397. package/test/unit/spec/roap/turnDiscovery.ts +36 -8
  398. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  399. package/test/unit/spec/stats-analyzer/index.js +29 -2
  400. package/test/utils/constants.js +9 -0
  401. package/test/utils/integrationTestUtils.js +46 -0
  402. package/test/utils/testUtils.js +0 -45
  403. package/test/utils/webex-config.js +4 -0
  404. package/test/utils/webex-test-users.js +6 -3
  405. package/dist/meeting/effectsState.js +0 -262
  406. package/dist/meeting/effectsState.js.map +0 -1
  407. package/dist/metrics/config.js +0 -299
  408. package/dist/metrics/config.js.map +0 -1
  409. package/src/index.js +0 -16
  410. package/src/meeting/effectsState.ts +0 -211
  411. package/src/metrics/config.ts +0 -495
  412. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -176,15 +176,14 @@ export default class TurnDiscovery {
176
176
  return this.roapRequest
177
177
  .sendRoap({
178
178
  roapMessage,
179
- correlationId: meeting.correlationId,
180
179
  // @ts-ignore - Fix missing type
181
180
  locusSelfUrl: meeting.selfUrl,
182
181
  // @ts-ignore - Fix missing type
183
182
  mediaId: isReconnecting ? '' : meeting.mediaId,
184
- audioMuted: meeting.isAudioMuted(),
185
- videoMuted: meeting.isVideoMuted(),
186
183
  meetingId: meeting.id,
187
- preferTranscoding: !meeting.isMultistream,
184
+ locusMediaRequest: meeting.locusMediaRequest,
185
+ // @ts-ignore - because of meeting.webex
186
+ ipVersion: meeting.webex.meetings.reachability.getIpVersion(),
188
187
  })
189
188
  .then(({mediaConnections}) => {
190
189
  if (mediaConnections) {
@@ -213,14 +212,55 @@ export default class TurnDiscovery {
213
212
  locusSelfUrl: meeting.selfUrl,
214
213
  // @ts-ignore - fix type
215
214
  mediaId: meeting.mediaId,
216
- correlationId: meeting.correlationId,
217
- audioMuted: meeting.isAudioMuted(),
218
- videoMuted: meeting.isVideoMuted(),
219
215
  meetingId: meeting.id,
220
- preferTranscoding: !meeting.isMultistream,
216
+ locusMediaRequest: meeting.locusMediaRequest,
217
+ // @ts-ignore - because of meeting.webex
218
+ ipVersion: meeting.webex.meetings.reachability.getIpVersion(),
221
219
  });
222
220
  }
223
221
 
222
+ /**
223
+ * Gets the reason why reachability is skipped.
224
+ *
225
+ * @param {Meeting} meeting
226
+ * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
227
+ */
228
+ private async getSkipReason(meeting: Meeting): Promise<string> {
229
+ // @ts-ignore - fix type
230
+ const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
231
+
232
+ if (isAnyClusterReachable) {
233
+ LoggerProxy.logger.info(
234
+ 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
235
+ );
236
+
237
+ return 'reachability';
238
+ }
239
+
240
+ // @ts-ignore - fix type
241
+ if (!meeting.config.experimental.enableTurnDiscovery) {
242
+ LoggerProxy.logger.info(
243
+ 'Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it'
244
+ );
245
+
246
+ return 'config';
247
+ }
248
+
249
+ return '';
250
+ }
251
+
252
+ /**
253
+ * Checks if TURN discovery is skipped.
254
+ *
255
+ * @param {Meeting} meeting
256
+ * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
257
+ */
258
+ async isSkipped(meeting) {
259
+ const skipReason = await this.getSkipReason(meeting);
260
+
261
+ return !!skipReason;
262
+ }
263
+
224
264
  /**
225
265
  * Retrieves TURN server information from the backend by doing
226
266
  * a roap message exchange:
@@ -239,29 +279,15 @@ export default class TurnDiscovery {
239
279
  * @returns {Promise}
240
280
  */
241
281
  async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
242
- // @ts-ignore - fix type
243
- const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
244
-
245
- if (isAnyClusterReachable) {
246
- LoggerProxy.logger.info(
247
- 'Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery'
248
- );
282
+ const turnDiscoverySkippedReason = await this.getSkipReason(meeting);
249
283
 
284
+ if (turnDiscoverySkippedReason) {
250
285
  return {
251
286
  turnServerInfo: undefined,
252
- turnDiscoverySkippedReason: 'reachability',
287
+ turnDiscoverySkippedReason,
253
288
  };
254
289
  }
255
290
 
256
- // @ts-ignore - fix type
257
- if (!meeting.config.experimental.enableTurnDiscovery) {
258
- LoggerProxy.logger.info(
259
- 'Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it'
260
- );
261
-
262
- return {turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'};
263
- }
264
-
265
291
  return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)
266
292
  .then(() => this.waitForTurnDiscoveryResponse())
267
293
  .then(() => this.sendRoapOK(meeting))
@@ -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.checkMetrics.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.checkMetrics.bind(this), 5 * 1000);
35
+ }
36
+
37
+ /**
38
+ * Check to see if the metrics queue has any items.
39
+ *
40
+ * @returns {void}
41
+ */
42
+ private checkMetrics() {
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.checkMetrics();
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
+ }
@@ -28,6 +28,7 @@ import {
28
28
  getVideoSenderMqa,
29
29
  getVideoReceiverMqa,
30
30
  } from './mqaUtil';
31
+ import {ReceiveSlot} from '../multistream/receiveSlot';
31
32
 
32
33
  export const EVENTS = {
33
34
  MEDIA_QUALITY: 'MEDIA_QUALITY',
@@ -53,6 +54,8 @@ const emptyReceiver = {
53
54
  meanRoundTripTime: [],
54
55
  };
55
56
 
57
+ type ReceiveSlotCallback = (csi: number) => ReceiveSlot | undefined;
58
+
56
59
  /**
57
60
  * Stats Analyzer class that will emit events based on detected quality
58
61
  *
@@ -74,17 +77,20 @@ export class StatsAnalyzer extends EventsScope {
74
77
  statsInterval: NodeJS.Timeout;
75
78
  statsResults: any;
76
79
  statsStarted: any;
80
+ receiveSlotCallback: ReceiveSlotCallback;
77
81
 
78
82
  /**
79
83
  * Creates a new instance of StatsAnalyzer
80
84
  * @constructor
81
85
  * @public
82
86
  * @param {Object} config SDK Configuration Object
87
+ * @param {Function} receiveSlotCallback Callback used to access receive slots.
83
88
  * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
84
89
  * @param {Object} statsResults Default properties for stats
85
90
  */
86
91
  constructor(
87
92
  config: any,
93
+ receiveSlotCallback: ReceiveSlotCallback = () => undefined,
88
94
  networkQualityMonitor: object = {},
89
95
  statsResults: object = defaultStats
90
96
  ) {
@@ -98,6 +104,7 @@ export class StatsAnalyzer extends EventsScope {
98
104
  this.mqaSentCount = -1;
99
105
  this.lastMqaDataSent = {};
100
106
  this.lastEmittedStartStopEvent = {};
107
+ this.receiveSlotCallback = receiveSlotCallback;
101
108
  }
102
109
 
103
110
  /**
@@ -293,7 +300,6 @@ export class StatsAnalyzer extends EventsScope {
293
300
  this.mediaConnection = null;
294
301
  });
295
302
  }
296
- this.mediaConnection = null;
297
303
 
298
304
  return Promise.resolve();
299
305
  }
@@ -492,23 +498,23 @@ export class StatsAnalyzer extends EventsScope {
492
498
  const getCurrentStatsTotals = (keyPrefix: string, value: string): number =>
493
499
  Object.keys(this.statsResults)
494
500
  .filter((key) => key.startsWith(keyPrefix))
495
- .reduce((prev, cur) => prev + (this.statsResults[cur].recv[value] || 0), 0);
501
+ .reduce((prev, cur) => prev + (this.statsResults[cur]?.recv[value] || 0), 0);
496
502
 
497
503
  const getPreviousStatsTotals = (keyPrefix: string, value: string): number =>
498
504
  Object.keys(this.statsResults)
499
505
  .filter((key) => key.startsWith(keyPrefix))
500
- .reduce((prev, cur) => prev + (this.lastStatsResults[cur].recv[value] || 0), 0);
506
+ .reduce((prev, cur) => prev + (this.lastStatsResults[cur]?.recv[value] || 0), 0);
501
507
 
502
508
  const getCurrentResolutionsStatsTotals = (keyPrefix: string, value: string): number =>
503
509
  Object.keys(this.statsResults)
504
510
  .filter((key) => key.startsWith(keyPrefix))
505
- .reduce((prev, cur) => prev + (this.statsResults.resolutions[cur].recv[value] || 0), 0);
511
+ .reduce((prev, cur) => prev + (this.statsResults.resolutions[cur]?.recv[value] || 0), 0);
506
512
 
507
513
  const getPreviousResolutionsStatsTotals = (keyPrefix: string, value: string): number =>
508
514
  Object.keys(this.statsResults)
509
515
  .filter((key) => key.startsWith(keyPrefix))
510
516
  .reduce(
511
- (prev, cur) => prev + (this.lastStatsResults.resolutions[cur].recv[value] || 0),
517
+ (prev, cur) => prev + (this.lastStatsResults.resolutions[cur]?.recv[value] || 0),
512
518
  0
513
519
  );
514
520
 
@@ -523,7 +529,8 @@ export class StatsAnalyzer extends EventsScope {
523
529
  currentStats.totalPacketsSent === 0
524
530
  ) {
525
531
  LoggerProxy.logger.info(
526
- `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent`
532
+ `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent`,
533
+ currentStats.totalPacketsSent
527
534
  );
528
535
  } else {
529
536
  if (
@@ -531,7 +538,8 @@ export class StatsAnalyzer extends EventsScope {
531
538
  currentStats.totalAudioEnergy === 0
532
539
  ) {
533
540
  LoggerProxy.logger.info(
534
- `StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present`
541
+ `StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present`,
542
+ currentStats.totalAudioEnergy
535
543
  );
536
544
  }
537
545
 
@@ -565,14 +573,16 @@ export class StatsAnalyzer extends EventsScope {
565
573
 
566
574
  if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
567
575
  LoggerProxy.logger.info(
568
- `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received`
576
+ `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received`,
577
+ currentPacketsReceived
569
578
  );
570
579
  } else if (
571
580
  currentSamplesReceived === previousSamplesReceived ||
572
581
  currentSamplesReceived === 0
573
582
  ) {
574
583
  LoggerProxy.logger.info(
575
- `StatsAnalyzer:index#compareLastStatsResult --> No audio samples received`
584
+ `StatsAnalyzer:index#compareLastStatsResult --> No audio samples received`,
585
+ currentSamplesReceived
576
586
  );
577
587
  }
578
588
 
@@ -589,7 +599,8 @@ export class StatsAnalyzer extends EventsScope {
589
599
  currentStats.totalPacketsSent === 0
590
600
  ) {
591
601
  LoggerProxy.logger.info(
592
- `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent`
602
+ `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent`,
603
+ currentStats.totalPacketsSent
593
604
  );
594
605
  } else {
595
606
  if (
@@ -597,7 +608,8 @@ export class StatsAnalyzer extends EventsScope {
597
608
  currentStats.framesEncoded === 0
598
609
  ) {
599
610
  LoggerProxy.logger.info(
600
- `StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded`
611
+ `StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded`,
612
+ currentStats.framesEncoded
601
613
  );
602
614
  }
603
615
 
@@ -607,7 +619,8 @@ export class StatsAnalyzer extends EventsScope {
607
619
  this.statsResults.resolutions['video-send'].send.framesSent === 0
608
620
  ) {
609
621
  LoggerProxy.logger.info(
610
- `StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent`
622
+ `StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent`,
623
+ this.statsResults.resolutions['video-send'].send.framesSent
611
624
  );
612
625
  }
613
626
  }
@@ -643,24 +656,28 @@ export class StatsAnalyzer extends EventsScope {
643
656
 
644
657
  if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
645
658
  LoggerProxy.logger.info(
646
- `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received`
659
+ `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received`,
660
+ currentPacketsReceived
647
661
  );
648
662
  } else {
649
663
  if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
650
664
  LoggerProxy.logger.info(
651
- `StatsAnalyzer:index#compareLastStatsResult --> No video frames received`
665
+ `StatsAnalyzer:index#compareLastStatsResult --> No video frames received`,
666
+ currentFramesReceived
652
667
  );
653
668
  }
654
669
 
655
670
  if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
656
671
  LoggerProxy.logger.info(
657
- `StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded`
672
+ `StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded`,
673
+ currentFramesDecoded
658
674
  );
659
675
  }
660
676
 
661
677
  if (currentFramesDropped - previousFramesDropped > 10) {
662
678
  LoggerProxy.logger.info(
663
- `StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped`
679
+ `StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped`,
680
+ currentFramesDropped - previousFramesDropped
664
681
  );
665
682
  }
666
683
  }
@@ -679,7 +696,8 @@ export class StatsAnalyzer extends EventsScope {
679
696
  currentStats.totalPacketsSent === 0
680
697
  ) {
681
698
  LoggerProxy.logger.info(
682
- `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent`
699
+ `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent`,
700
+ currentStats.totalPacketsSent
683
701
  );
684
702
  } else {
685
703
  if (
@@ -687,7 +705,8 @@ export class StatsAnalyzer extends EventsScope {
687
705
  currentStats.framesEncoded === 0
688
706
  ) {
689
707
  LoggerProxy.logger.info(
690
- `StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded`
708
+ `StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded`,
709
+ currentStats.framesEncoded
691
710
  );
692
711
  }
693
712
 
@@ -697,7 +716,8 @@ export class StatsAnalyzer extends EventsScope {
697
716
  this.statsResults.resolutions['video-share-send'].send.framesSent === 0
698
717
  ) {
699
718
  LoggerProxy.logger.info(
700
- `StatsAnalyzer:index#compareLastStatsResult --> No share frames sent`
719
+ `StatsAnalyzer:index#compareLastStatsResult --> No share frames sent`,
720
+ this.statsResults.resolutions['video-share-send'].send.framesSent
701
721
  );
702
722
  }
703
723
  }
@@ -735,24 +755,28 @@ export class StatsAnalyzer extends EventsScope {
735
755
 
736
756
  if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
737
757
  LoggerProxy.logger.info(
738
- `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received`
758
+ `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received`,
759
+ currentPacketsReceived
739
760
  );
740
761
  } else {
741
762
  if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
742
763
  LoggerProxy.logger.info(
743
- `StatsAnalyzer:index#compareLastStatsResult --> No share frames received`
764
+ `StatsAnalyzer:index#compareLastStatsResult --> No share frames received`,
765
+ currentFramesReceived
744
766
  );
745
767
  }
746
768
 
747
769
  if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
748
770
  LoggerProxy.logger.info(
749
- `StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded`
771
+ `StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded`,
772
+ currentFramesDecoded
750
773
  );
751
774
  }
752
775
 
753
776
  if (currentFramesDropped - previousFramesDropped > 10) {
754
777
  LoggerProxy.logger.info(
755
- `StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped`
778
+ `StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped`,
779
+ currentFramesDropped - previousFramesDropped
756
780
  );
757
781
  }
758
782
  }
@@ -853,6 +877,14 @@ export class StatsAnalyzer extends EventsScope {
853
877
  if (result.bytesSent) {
854
878
  let kilobytes = 0;
855
879
 
880
+ if (result.frameWidth && result.frameHeight) {
881
+ this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
882
+ this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
883
+ this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
884
+ this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent =
885
+ result.hugeFramesSent;
886
+ }
887
+
856
888
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
857
889
  this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
858
890
  }
@@ -925,6 +957,17 @@ export class StatsAnalyzer extends EventsScope {
925
957
 
926
958
  if (result.bytesReceived) {
927
959
  let kilobytes = 0;
960
+ const receiveSlot = this.receiveSlotCallback(result.ssrc);
961
+ const idAndCsi = receiveSlot
962
+ ? `id: "${receiveSlot.id || ''}"${receiveSlot.csi ? ` and csi: ${receiveSlot.csi}` : ''}`
963
+ : '';
964
+
965
+ if (result.frameWidth && result.frameHeight) {
966
+ this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
967
+ this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
968
+ this.statsResults.resolutions[mediaType][sendrecvType].framesReceived =
969
+ result.framesReceived;
970
+ }
928
971
 
929
972
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
930
973
  this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived =
@@ -974,10 +1017,12 @@ export class StatsAnalyzer extends EventsScope {
974
1017
  result.packetsReceived;
975
1018
 
976
1019
  if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
977
- LoggerProxy.logger.info(
978
- `StatsAnalyzer:index#processInboundRTPResult --> No packets received for ${mediaType} `,
979
- this.statsResults[mediaType][sendrecvType].packetsReceived
980
- );
1020
+ if (receiveSlot) {
1021
+ LoggerProxy.logger.info(
1022
+ `StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ${idAndCsi}`,
1023
+ this.statsResults[mediaType][sendrecvType].packetsReceived
1024
+ );
1025
+ }
981
1026
  }
982
1027
 
983
1028
  // Check the over all packet Lost ratio
@@ -989,7 +1034,7 @@ export class StatsAnalyzer extends EventsScope {
989
1034
  : 0;
990
1035
  if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
991
1036
  LoggerProxy.logger.info(
992
- 'StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ',
1037
+ `StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ${idAndCsi}`,
993
1038
  this.statsResults[mediaType][sendrecvType].currentPacketLossRatio
994
1039
  );
995
1040
  }
@@ -1137,13 +1182,6 @@ export class StatsAnalyzer extends EventsScope {
1137
1182
  const sendrecvType =
1138
1183
  result.remoteSource === true ? STATS.RECEIVE_DIRECTION : STATS.SEND_DIRECTION;
1139
1184
 
1140
- if (result.frameWidth && result.frameHeight) {
1141
- this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
1142
- this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
1143
- this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
1144
- this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
1145
- }
1146
-
1147
1185
  if (sendrecvType === STATS.RECEIVE_DIRECTION) {
1148
1186
  this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
1149
1187
  this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
@@ -199,12 +199,11 @@ export const getVideoReceiverMqa = ({videoReceiver, statsResults, lastMqaDataSen
199
199
  videoReceiver.streams[0].common.framesDropped =
200
200
  statsResults.resolutions[mediaType][sendrecvType].framesDropped - lastFramesDropped;
201
201
  videoReceiver.streams[0].receivedHeight =
202
- statsResults.resolutions[mediaType][sendrecvType].height;
203
- videoReceiver.streams[0].receivedWidth = statsResults.resolutions[mediaType][sendrecvType].width;
202
+ statsResults.resolutions[mediaType][sendrecvType].height || 0;
203
+ videoReceiver.streams[0].receivedWidth =
204
+ statsResults.resolutions[mediaType][sendrecvType].width || 0;
204
205
  videoReceiver.streams[0].receivedFrameSize =
205
- (statsResults.resolutions[mediaType][sendrecvType].height *
206
- statsResults.resolutions[mediaType][sendrecvType].height) /
207
- 256;
206
+ (videoReceiver.streams[0].receivedHeight * videoReceiver.streams[0].receivedWidth) / 256;
208
207
 
209
208
  videoReceiver.streams[0].receivedKeyFrames =
210
209
  statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;
@@ -284,10 +283,9 @@ export const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, m
284
283
  ? (totalFrameSentInaMin * 100) / 60
285
284
  : 0;
286
285
  videoSender.streams[0].transmittedHeight =
287
- statsResults.resolutions[mediaType][sendrecvType].height;
288
- videoSender.streams[0].transmittedWidth = statsResults.resolutions[mediaType][sendrecvType].width;
286
+ statsResults.resolutions[mediaType][sendrecvType].height || 0;
287
+ videoSender.streams[0].transmittedWidth =
288
+ statsResults.resolutions[mediaType][sendrecvType].width || 0;
289
289
  videoSender.streams[0].transmittedFrameSize =
290
- (statsResults.resolutions[mediaType][sendrecvType].height *
291
- statsResults.resolutions[mediaType][sendrecvType].width) /
292
- 254;
290
+ (videoSender.streams[0].transmittedHeight * videoSender.streams[0].transmittedWidth) / 256;
293
291
  };