@webex/plugin-meetings 3.0.0-beta.7 → 3.0.0-beta.71

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 (506) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +178 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/edit-lock-error.js +52 -0
  8. package/dist/breakouts/edit-lock-error.js.map +1 -0
  9. package/dist/breakouts/index.js +843 -0
  10. package/dist/breakouts/index.js.map +1 -0
  11. package/dist/breakouts/request.js +78 -0
  12. package/dist/breakouts/request.js.map +1 -0
  13. package/dist/breakouts/utils.js +56 -0
  14. package/dist/breakouts/utils.js.map +1 -0
  15. package/dist/common/browser-detection.js +1 -20
  16. package/dist/common/browser-detection.js.map +1 -1
  17. package/dist/common/collection.js +5 -20
  18. package/dist/common/collection.js.map +1 -1
  19. package/dist/common/config.js +0 -7
  20. package/dist/common/config.js.map +1 -1
  21. package/dist/common/errors/captcha-error.js +10 -24
  22. package/dist/common/errors/captcha-error.js.map +1 -1
  23. package/dist/common/errors/intent-to-join.js +11 -24
  24. package/dist/common/errors/intent-to-join.js.map +1 -1
  25. package/dist/common/errors/join-meeting.js +12 -25
  26. package/dist/common/errors/join-meeting.js.map +1 -1
  27. package/dist/common/errors/media.js +10 -24
  28. package/dist/common/errors/media.js.map +1 -1
  29. package/dist/common/errors/parameter.js +5 -33
  30. package/dist/common/errors/parameter.js.map +1 -1
  31. package/dist/common/errors/password-error.js +10 -24
  32. package/dist/common/errors/password-error.js.map +1 -1
  33. package/dist/common/errors/permission.js +9 -23
  34. package/dist/common/errors/permission.js.map +1 -1
  35. package/dist/common/errors/reconnection-in-progress.js +0 -17
  36. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  37. package/dist/common/errors/reconnection.js +10 -24
  38. package/dist/common/errors/reconnection.js.map +1 -1
  39. package/dist/common/errors/stats.js +10 -24
  40. package/dist/common/errors/stats.js.map +1 -1
  41. package/dist/common/errors/webex-errors.js +6 -41
  42. package/dist/common/errors/webex-errors.js.map +1 -1
  43. package/dist/common/errors/webex-meetings-error.js +5 -25
  44. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  45. package/dist/common/events/events-scope.js +0 -22
  46. package/dist/common/events/events-scope.js.map +1 -1
  47. package/dist/common/events/events.js +0 -23
  48. package/dist/common/events/events.js.map +1 -1
  49. package/dist/common/events/trigger-proxy.js +0 -12
  50. package/dist/common/events/trigger-proxy.js.map +1 -1
  51. package/dist/common/events/util.js +0 -15
  52. package/dist/common/events/util.js.map +1 -1
  53. package/dist/common/logs/logger-config.js +0 -4
  54. package/dist/common/logs/logger-config.js.map +1 -1
  55. package/dist/common/logs/logger-proxy.js +1 -8
  56. package/dist/common/logs/logger-proxy.js.map +1 -1
  57. package/dist/common/logs/request.js +37 -60
  58. package/dist/common/logs/request.js.map +1 -1
  59. package/dist/common/queue.js +4 -14
  60. package/dist/common/queue.js.map +1 -1
  61. package/dist/config.js +6 -6
  62. package/dist/config.js.map +1 -1
  63. package/dist/constants.js +143 -52
  64. package/dist/constants.js.map +1 -1
  65. package/dist/controls-options-manager/constants.js +14 -0
  66. package/dist/controls-options-manager/constants.js.map +1 -0
  67. package/dist/controls-options-manager/enums.js +16 -0
  68. package/dist/controls-options-manager/enums.js.map +1 -0
  69. package/dist/controls-options-manager/index.js +261 -0
  70. package/dist/controls-options-manager/index.js.map +1 -0
  71. package/dist/controls-options-manager/util.js +39 -0
  72. package/dist/controls-options-manager/util.js.map +1 -0
  73. package/dist/index.js +11 -18
  74. package/dist/index.js.map +1 -1
  75. package/dist/locus-info/controlsUtils.js +31 -29
  76. package/dist/locus-info/controlsUtils.js.map +1 -1
  77. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  78. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  79. package/dist/locus-info/fullState.js +0 -15
  80. package/dist/locus-info/fullState.js.map +1 -1
  81. package/dist/locus-info/hostUtils.js +4 -12
  82. package/dist/locus-info/hostUtils.js.map +1 -1
  83. package/dist/locus-info/index.js +237 -198
  84. package/dist/locus-info/index.js.map +1 -1
  85. package/dist/locus-info/infoUtils.js +3 -37
  86. package/dist/locus-info/infoUtils.js.map +1 -1
  87. package/dist/locus-info/mediaSharesUtils.js +12 -38
  88. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  89. package/dist/locus-info/parser.js +92 -118
  90. package/dist/locus-info/parser.js.map +1 -1
  91. package/dist/locus-info/selfUtils.js +80 -89
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.js +56 -146
  94. package/dist/media/index.js.map +1 -1
  95. package/dist/media/properties.js +83 -117
  96. package/dist/media/properties.js.map +1 -1
  97. package/dist/media/util.js +2 -9
  98. package/dist/media/util.js.map +1 -1
  99. package/dist/mediaQualityMetrics/config.js +505 -495
  100. package/dist/mediaQualityMetrics/config.js.map +1 -1
  101. package/dist/meeting/in-meeting-actions.js +31 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2225 -2244
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +102 -100
  106. package/dist/meeting/muteState.js.map +1 -1
  107. package/dist/meeting/request.js +308 -264
  108. package/dist/meeting/request.js.map +1 -1
  109. package/dist/meeting/request.type.js +7 -0
  110. package/dist/meeting/request.type.js.map +1 -0
  111. package/dist/meeting/state.js +21 -31
  112. package/dist/meeting/state.js.map +1 -1
  113. package/dist/meeting/util.js +63 -217
  114. package/dist/meeting/util.js.map +1 -1
  115. package/dist/meeting-info/collection.js +6 -25
  116. package/dist/meeting-info/collection.js.map +1 -1
  117. package/dist/meeting-info/index.js +14 -32
  118. package/dist/meeting-info/index.js.map +1 -1
  119. package/dist/meeting-info/meeting-info-v2.js +193 -268
  120. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  121. package/dist/meeting-info/request.js +3 -15
  122. package/dist/meeting-info/request.js.map +1 -1
  123. package/dist/meeting-info/util.js +98 -183
  124. package/dist/meeting-info/util.js.map +1 -1
  125. package/dist/meeting-info/utilv2.js +137 -228
  126. package/dist/meeting-info/utilv2.js.map +1 -1
  127. package/dist/meetings/collection.js +26 -19
  128. package/dist/meetings/collection.js.map +1 -1
  129. package/dist/meetings/index.js +565 -552
  130. package/dist/meetings/index.js.map +1 -1
  131. package/dist/meetings/request.js +26 -41
  132. package/dist/meetings/request.js.map +1 -1
  133. package/dist/meetings/util.js +151 -155
  134. package/dist/meetings/util.js.map +1 -1
  135. package/dist/member/index.js +100 -85
  136. package/dist/member/index.js.map +1 -1
  137. package/dist/member/types.js +15 -0
  138. package/dist/member/types.js.map +1 -0
  139. package/dist/member/util.js +90 -68
  140. package/dist/member/util.js.map +1 -1
  141. package/dist/members/collection.js +13 -12
  142. package/dist/members/collection.js.map +1 -1
  143. package/dist/members/index.js +152 -204
  144. package/dist/members/index.js.map +1 -1
  145. package/dist/members/request.js +35 -39
  146. package/dist/members/request.js.map +1 -1
  147. package/dist/members/types.js +15 -0
  148. package/dist/members/types.js.map +1 -0
  149. package/dist/members/util.js +76 -46
  150. package/dist/members/util.js.map +1 -1
  151. package/dist/metrics/config.js +4 -14
  152. package/dist/metrics/config.js.map +1 -1
  153. package/dist/metrics/constants.js +1 -6
  154. package/dist/metrics/constants.js.map +1 -1
  155. package/dist/metrics/index.js +59 -156
  156. package/dist/metrics/index.js.map +1 -1
  157. package/dist/multistream/mediaRequestManager.js +116 -52
  158. package/dist/multistream/mediaRequestManager.js.map +1 -1
  159. package/dist/multistream/receiveSlot.js +58 -65
  160. package/dist/multistream/receiveSlot.js.map +1 -1
  161. package/dist/multistream/receiveSlotManager.js +58 -93
  162. package/dist/multistream/receiveSlotManager.js.map +1 -1
  163. package/dist/multistream/remoteMedia.js +55 -74
  164. package/dist/multistream/remoteMedia.js.map +1 -1
  165. package/dist/multistream/remoteMediaGroup.js +6 -40
  166. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  167. package/dist/multistream/remoteMediaManager.js +466 -442
  168. package/dist/multistream/remoteMediaManager.js.map +1 -1
  169. package/dist/networkQualityMonitor/index.js +40 -59
  170. package/dist/networkQualityMonitor/index.js.map +1 -1
  171. package/dist/personal-meeting-room/index.js +21 -45
  172. package/dist/personal-meeting-room/index.js.map +1 -1
  173. package/dist/personal-meeting-room/request.js +1 -31
  174. package/dist/personal-meeting-room/request.js.map +1 -1
  175. package/dist/personal-meeting-room/util.js +0 -13
  176. package/dist/personal-meeting-room/util.js.map +1 -1
  177. package/dist/reachability/index.js +192 -191
  178. package/dist/reachability/index.js.map +1 -1
  179. package/dist/reachability/request.js +15 -23
  180. package/dist/reachability/request.js.map +1 -1
  181. package/dist/reactions/constants.js +13 -0
  182. package/dist/reactions/constants.js.map +1 -0
  183. package/dist/reactions/reactions.js +109 -0
  184. package/dist/reactions/reactions.js.map +1 -0
  185. package/dist/reactions/reactions.type.js +36 -0
  186. package/dist/reactions/reactions.type.js.map +1 -0
  187. package/dist/reconnection-manager/index.js +342 -460
  188. package/dist/reconnection-manager/index.js.map +1 -1
  189. package/dist/recording-controller/enums.js +17 -0
  190. package/dist/recording-controller/enums.js.map +1 -0
  191. package/dist/recording-controller/index.js +343 -0
  192. package/dist/recording-controller/index.js.map +1 -0
  193. package/dist/recording-controller/util.js +63 -0
  194. package/dist/recording-controller/util.js.map +1 -0
  195. package/dist/roap/index.js +48 -70
  196. package/dist/roap/index.js.map +1 -1
  197. package/dist/roap/request.js +143 -131
  198. package/dist/roap/request.js.map +1 -1
  199. package/dist/roap/turnDiscovery.js +91 -98
  200. package/dist/roap/turnDiscovery.js.map +1 -1
  201. package/dist/statsAnalyzer/global.js +1 -95
  202. package/dist/statsAnalyzer/global.js.map +1 -1
  203. package/dist/statsAnalyzer/index.js +372 -455
  204. package/dist/statsAnalyzer/index.js.map +1 -1
  205. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  206. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  207. package/dist/transcription/index.js +22 -47
  208. package/dist/transcription/index.js.map +1 -1
  209. package/dist/types/breakouts/breakout.d.ts +8 -0
  210. package/dist/types/breakouts/collection.d.ts +5 -0
  211. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  212. package/dist/types/breakouts/index.d.ts +5 -0
  213. package/dist/types/breakouts/request.d.ts +22 -0
  214. package/dist/types/breakouts/utils.d.ts +8 -0
  215. package/dist/types/common/browser-detection.d.ts +9 -0
  216. package/dist/types/common/collection.d.ts +48 -0
  217. package/dist/types/common/config.d.ts +2 -0
  218. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  219. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  220. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  221. package/dist/types/common/errors/media.d.ts +15 -0
  222. package/dist/types/common/errors/parameter.d.ts +15 -0
  223. package/dist/types/common/errors/password-error.d.ts +15 -0
  224. package/dist/types/common/errors/permission.d.ts +14 -0
  225. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  226. package/dist/types/common/errors/reconnection.d.ts +15 -0
  227. package/dist/types/common/errors/stats.d.ts +15 -0
  228. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  229. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  230. package/dist/types/common/events/events-scope.d.ts +17 -0
  231. package/dist/types/common/events/events.d.ts +12 -0
  232. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  233. package/dist/types/common/events/util.d.ts +2 -0
  234. package/dist/types/common/logs/logger-config.d.ts +2 -0
  235. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  236. package/dist/types/common/logs/request.d.ts +34 -0
  237. package/dist/types/common/queue.d.ts +32 -0
  238. package/dist/types/config.d.ts +77 -0
  239. package/dist/types/constants.d.ts +944 -0
  240. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  241. package/dist/types/controls-options-manager/enums.d.ts +6 -0
  242. package/dist/types/controls-options-manager/index.d.ts +128 -0
  243. package/dist/types/controls-options-manager/util.d.ts +9 -0
  244. package/dist/types/index.d.ts +6 -0
  245. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  246. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  247. package/dist/types/locus-info/fullState.d.ts +2 -0
  248. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  249. package/dist/types/locus-info/index.d.ts +276 -0
  250. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  251. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  252. package/dist/types/locus-info/parser.d.ts +212 -0
  253. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  254. package/dist/types/media/index.d.ts +32 -0
  255. package/dist/types/media/properties.d.ts +108 -0
  256. package/dist/types/media/util.d.ts +2 -0
  257. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  258. package/dist/types/meeting/in-meeting-actions.d.ts +101 -0
  259. package/dist/types/meeting/index.d.ts +1720 -0
  260. package/dist/types/meeting/muteState.d.ts +132 -0
  261. package/dist/types/meeting/request.d.ts +271 -0
  262. package/dist/types/meeting/request.type.d.ts +11 -0
  263. package/dist/types/meeting/state.d.ts +9 -0
  264. package/dist/types/meeting/util.d.ts +2 -0
  265. package/dist/types/meeting-info/collection.d.ts +20 -0
  266. package/dist/types/meeting-info/index.d.ts +57 -0
  267. package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
  268. package/dist/types/meeting-info/request.d.ts +22 -0
  269. package/dist/types/meeting-info/util.d.ts +2 -0
  270. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  271. package/dist/types/meetings/collection.d.ts +31 -0
  272. package/dist/types/meetings/index.d.ts +315 -0
  273. package/dist/types/meetings/request.d.ts +27 -0
  274. package/dist/types/meetings/util.d.ts +18 -0
  275. package/dist/types/member/index.d.ts +156 -0
  276. package/dist/types/member/types.d.ts +21 -0
  277. package/dist/types/member/util.d.ts +2 -0
  278. package/dist/types/members/collection.d.ts +29 -0
  279. package/dist/types/members/index.d.ts +343 -0
  280. package/dist/types/members/request.d.ts +58 -0
  281. package/dist/types/members/types.d.ts +24 -0
  282. package/dist/types/members/util.d.ts +2 -0
  283. package/dist/types/metrics/config.d.ts +171 -0
  284. package/dist/types/metrics/constants.d.ts +53 -0
  285. package/dist/types/metrics/index.d.ts +152 -0
  286. package/dist/types/multistream/mediaRequestManager.d.ts +68 -0
  287. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  288. package/dist/types/multistream/receiveSlotManager.d.ts +49 -0
  289. package/dist/types/multistream/remoteMedia.d.ts +100 -0
  290. package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
  291. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  292. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  293. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  294. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  295. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  296. package/dist/types/reachability/index.d.ts +152 -0
  297. package/dist/types/reachability/request.d.ts +37 -0
  298. package/dist/types/reactions/constants.d.ts +3 -0
  299. package/dist/types/reactions/reactions.d.ts +4 -0
  300. package/dist/types/reactions/reactions.type.d.ts +52 -0
  301. package/dist/types/reconnection-manager/index.d.ts +126 -0
  302. package/dist/types/recording-controller/enums.d.ts +7 -0
  303. package/dist/types/recording-controller/index.d.ts +193 -0
  304. package/dist/types/recording-controller/util.d.ts +13 -0
  305. package/dist/types/roap/index.d.ts +77 -0
  306. package/dist/types/roap/request.d.ts +38 -0
  307. package/dist/types/roap/turnDiscovery.d.ts +74 -0
  308. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  309. package/dist/types/statsAnalyzer/index.d.ts +195 -0
  310. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  311. package/dist/types/transcription/index.d.ts +64 -0
  312. package/internal-README.md +7 -6
  313. package/package.json +27 -21
  314. package/src/breakouts/README.md +219 -0
  315. package/src/breakouts/breakout.ts +153 -0
  316. package/src/breakouts/collection.ts +19 -0
  317. package/src/breakouts/edit-lock-error.ts +25 -0
  318. package/src/breakouts/index.ts +745 -0
  319. package/src/breakouts/request.ts +55 -0
  320. package/src/breakouts/utils.ts +44 -0
  321. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  322. package/src/common/collection.ts +9 -7
  323. package/src/common/{config.js → config.ts} +1 -1
  324. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  325. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  326. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  327. package/src/common/errors/{media.js → media.ts} +11 -7
  328. package/src/common/errors/parameter.ts +11 -7
  329. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  330. package/src/common/errors/{permission.js → permission.ts} +10 -6
  331. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  332. package/src/common/errors/{stats.js → stats.ts} +11 -7
  333. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  334. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  335. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  336. package/src/common/events/{events.js → events.ts} +5 -1
  337. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  338. package/src/common/events/{util.js → util.ts} +2 -3
  339. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  340. package/src/common/logs/logger-proxy.ts +44 -0
  341. package/src/common/logs/{request.js → request.ts} +22 -9
  342. package/src/common/queue.ts +1 -2
  343. package/src/{config.js → config.ts} +17 -12
  344. package/src/constants.ts +92 -5
  345. package/src/controls-options-manager/constants.ts +5 -0
  346. package/src/controls-options-manager/enums.ts +7 -0
  347. package/src/controls-options-manager/index.ts +240 -0
  348. package/src/controls-options-manager/util.ts +30 -0
  349. package/src/index.js +4 -1
  350. package/src/locus-info/controlsUtils.ts +141 -0
  351. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  352. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  353. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  354. package/src/locus-info/{index.js → index.ts} +211 -71
  355. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  356. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  357. package/src/locus-info/{parser.js → parser.ts} +67 -79
  358. package/src/locus-info/{selfUtils.js → selfUtils.ts} +183 -67
  359. package/src/media/{index.js → index.ts} +179 -176
  360. package/src/media/{properties.js → properties.ts} +60 -37
  361. package/src/media/{util.js → util.ts} +2 -2
  362. package/src/mediaQualityMetrics/config.ts +384 -0
  363. package/src/meeting/in-meeting-actions.ts +67 -3
  364. package/src/meeting/{index.js → index.ts} +2605 -1605
  365. package/src/meeting/{muteState.js → muteState.ts} +138 -73
  366. package/src/meeting/{request.js → request.ts} +326 -142
  367. package/src/meeting/request.type.ts +13 -0
  368. package/src/meeting/{state.js → state.ts} +50 -35
  369. package/src/meeting/{util.js → util.ts} +131 -115
  370. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  371. package/src/meeting-info/{index.js → index.ts} +42 -36
  372. package/src/meeting-info/meeting-info-v2.ts +273 -0
  373. package/src/meeting-info/{request.js → request.ts} +14 -4
  374. package/src/meeting-info/{util.js → util.ts} +60 -51
  375. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  376. package/src/meetings/{collection.js → collection.ts} +26 -3
  377. package/src/meetings/index.ts +1275 -0
  378. package/src/meetings/{request.js → request.ts} +34 -25
  379. package/src/meetings/{util.js → util.ts} +99 -33
  380. package/src/member/{index.js → index.ts} +124 -56
  381. package/src/member/types.ts +24 -0
  382. package/src/member/{util.js → util.ts} +105 -25
  383. package/src/members/{collection.js → collection.ts} +10 -2
  384. package/src/members/{index.js → index.ts} +281 -144
  385. package/src/members/{request.js → request.ts} +80 -16
  386. package/src/members/types.ts +28 -0
  387. package/src/members/{util.js → util.ts} +108 -55
  388. package/src/metrics/{config.js → config.ts} +255 -92
  389. package/src/metrics/{constants.js → constants.ts} +0 -6
  390. package/src/metrics/{index.js → index.ts} +110 -94
  391. package/src/multistream/mediaRequestManager.ts +144 -40
  392. package/src/multistream/receiveSlot.ts +69 -26
  393. package/src/multistream/receiveSlotManager.ts +50 -38
  394. package/src/multistream/remoteMedia.ts +30 -4
  395. package/src/multistream/remoteMediaGroup.ts +4 -3
  396. package/src/multistream/remoteMediaManager.ts +230 -66
  397. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  398. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  399. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  400. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  401. package/src/reachability/{index.js → index.ts} +157 -94
  402. package/src/reachability/request.ts +46 -35
  403. package/src/reactions/constants.ts +4 -0
  404. package/src/reactions/reactions.ts +104 -0
  405. package/src/reactions/reactions.type.ts +62 -0
  406. package/src/reconnection-manager/{index.js → index.ts} +228 -120
  407. package/src/recording-controller/enums.ts +8 -0
  408. package/src/recording-controller/index.ts +315 -0
  409. package/src/recording-controller/util.ts +58 -0
  410. package/src/roap/{index.js → index.ts} +77 -60
  411. package/src/roap/request.ts +172 -0
  412. package/src/roap/turnDiscovery.ts +81 -41
  413. package/src/statsAnalyzer/global.ts +37 -0
  414. package/src/statsAnalyzer/index.ts +1242 -0
  415. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  416. package/src/transcription/{index.js → index.ts} +46 -39
  417. package/test/integration/spec/converged-space-meetings.js +176 -0
  418. package/test/integration/spec/journey.js +665 -464
  419. package/test/integration/spec/space-meeting.js +320 -206
  420. package/test/integration/spec/transcription.js +7 -8
  421. package/test/unit/spec/breakouts/breakout.ts +178 -0
  422. package/test/unit/spec/breakouts/collection.ts +15 -0
  423. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  424. package/test/unit/spec/breakouts/index.ts +1252 -0
  425. package/test/unit/spec/breakouts/request.ts +104 -0
  426. package/test/unit/spec/breakouts/utils.js +54 -0
  427. package/test/unit/spec/common/browser-detection.js +9 -28
  428. package/test/unit/spec/controls-options-manager/index.js +204 -0
  429. package/test/unit/spec/controls-options-manager/util.js +86 -0
  430. package/test/unit/spec/fixture/locus.js +92 -90
  431. package/test/unit/spec/locus-info/controlsUtils.js +133 -34
  432. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  433. package/test/unit/spec/locus-info/index.js +303 -2
  434. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  435. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  436. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  437. package/test/unit/spec/locus-info/parser.js +3 -9
  438. package/test/unit/spec/locus-info/selfConstant.js +101 -103
  439. package/test/unit/spec/locus-info/selfUtils.js +165 -12
  440. package/test/unit/spec/media/index.ts +72 -8
  441. package/test/unit/spec/media/properties.ts +9 -9
  442. package/test/unit/spec/meeting/in-meeting-actions.ts +29 -2
  443. package/test/unit/spec/meeting/index.js +2503 -802
  444. package/test/unit/spec/meeting/muteState.js +146 -61
  445. package/test/unit/spec/meeting/request.js +141 -43
  446. package/test/unit/spec/meeting/utils.js +135 -164
  447. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  448. package/test/unit/spec/meeting-info/request.js +7 -9
  449. package/test/unit/spec/meeting-info/util.js +11 -12
  450. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  451. package/test/unit/spec/meetings/collection.js +15 -1
  452. package/test/unit/spec/meetings/index.js +622 -263
  453. package/test/unit/spec/meetings/utils.js +65 -14
  454. package/test/unit/spec/member/index.js +24 -1
  455. package/test/unit/spec/member/util.js +359 -32
  456. package/test/unit/spec/members/index.js +294 -54
  457. package/test/unit/spec/members/request.js +50 -20
  458. package/test/unit/spec/members/utils.js +147 -4
  459. package/test/unit/spec/metrics/index.js +16 -21
  460. package/test/unit/spec/multistream/mediaRequestManager.ts +369 -68
  461. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  462. package/test/unit/spec/multistream/receiveSlotManager.ts +60 -38
  463. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  464. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  465. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  466. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  467. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  468. package/test/unit/spec/reachability/index.ts +176 -27
  469. package/test/unit/spec/reachability/request.js +66 -0
  470. package/test/unit/spec/reconnection-manager/index.js +58 -30
  471. package/test/unit/spec/recording-controller/index.js +231 -0
  472. package/test/unit/spec/recording-controller/util.js +102 -0
  473. package/test/unit/spec/roap/index.ts +12 -8
  474. package/test/unit/spec/roap/request.ts +217 -0
  475. package/test/unit/spec/roap/turnDiscovery.ts +72 -49
  476. package/test/unit/spec/stats-analyzer/index.js +108 -57
  477. package/test/utils/cmr.js +44 -42
  478. package/test/utils/constants.js +9 -0
  479. package/test/utils/testUtils.js +98 -77
  480. package/test/utils/webex-config.js +22 -18
  481. package/test/utils/webex-test-users.js +57 -50
  482. package/tsconfig.json +6 -0
  483. package/dist/media/internal-media-core-wrapper.js +0 -22
  484. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  485. package/dist/meeting/effectsState.js +0 -327
  486. package/dist/meeting/effectsState.js.map +0 -1
  487. package/dist/multistream/multistreamMedia.js +0 -116
  488. package/dist/multistream/multistreamMedia.js.map +0 -1
  489. package/dist/peer-connection-manager/util.js +0 -124
  490. package/dist/peer-connection-manager/util.js.map +0 -1
  491. package/src/common/logs/logger-proxy.js +0 -33
  492. package/src/locus-info/controlsUtils.js +0 -102
  493. package/src/media/internal-media-core-wrapper.ts +0 -9
  494. package/src/mediaQualityMetrics/config.js +0 -382
  495. package/src/meeting/effectsState.js +0 -205
  496. package/src/meeting-info/meeting-info-v2.js +0 -255
  497. package/src/meetings/index.js +0 -1015
  498. package/src/multistream/multistreamMedia.ts +0 -92
  499. package/src/peer-connection-manager/util.ts +0 -117
  500. package/src/roap/request.js +0 -127
  501. package/src/statsAnalyzer/global.js +0 -133
  502. package/src/statsAnalyzer/index.js +0 -1006
  503. package/src/statsAnalyzer/mqaUtil.js +0 -173
  504. package/test/unit/spec/meeting/effectsState.js +0 -291
  505. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  506. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -1,55 +1,32 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
-
5
4
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
-
7
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
-
9
6
  _Object$defineProperty(exports, "__esModule", {
10
7
  value: true
11
8
  });
12
-
13
9
  exports.StatsAnalyzer = exports.EVENTS = void 0;
14
-
10
+ var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
15
11
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
-
17
12
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
18
-
19
13
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
20
-
21
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
22
-
23
15
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
24
-
25
16
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
26
-
27
17
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
28
-
29
18
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
30
-
31
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
32
-
33
20
  var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
34
-
35
21
  var _internalMediaCore = require("@webex/internal-media-core");
36
-
37
22
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
38
-
39
23
  var _constants = require("../constants");
40
-
41
- var _config = _interopRequireDefault(require("../mediaQualityMetrics/config"));
42
-
24
+ var _config = require("../mediaQualityMetrics/config");
43
25
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
44
-
45
26
  var _global = _interopRequireDefault(require("./global"));
46
-
47
27
  var _mqaUtil = require("./mqaUtil");
48
-
49
28
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
50
-
51
29
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
52
-
53
30
  var EVENTS = {
54
31
  MEDIA_QUALITY: 'MEDIA_QUALITY',
55
32
  LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',
@@ -57,6 +34,22 @@ var EVENTS = {
57
34
  REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',
58
35
  REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED'
59
36
  };
37
+ exports.EVENTS = EVENTS;
38
+ var emptySender = {
39
+ trackLabel: '',
40
+ maxPacketLossRatio: 0,
41
+ availableBandwidth: 0,
42
+ bytesSent: 0,
43
+ meanRemoteJitter: [],
44
+ meanRoundTripTime: []
45
+ };
46
+ var emptyReceiver = {
47
+ availableBandwidth: 0,
48
+ bytesReceived: 0,
49
+ meanRtpJitter: [],
50
+ meanRoundTripTime: []
51
+ };
52
+
60
53
  /**
61
54
  * Stats Analyzer class that will emit events based on detected quality
62
55
  *
@@ -64,14 +57,9 @@ var EVENTS = {
64
57
  * @class StatsAnalyzer
65
58
  * @extends {EventsScope}
66
59
  */
67
-
68
- exports.EVENTS = EVENTS;
69
-
70
60
  var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
71
61
  (0, _inherits2.default)(StatsAnalyzer, _EventsScope);
72
-
73
62
  var _super = _createSuper(StatsAnalyzer);
74
-
75
63
  /**
76
64
  * Creates a new instance of StatsAnalyzer
77
65
  * @constructor
@@ -82,36 +70,48 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
82
70
  */
83
71
  function StatsAnalyzer(config) {
84
72
  var _this;
85
-
86
73
  var networkQualityMonitor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
87
74
  var statsResults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _global.default;
88
75
  (0, _classCallCheck2.default)(this, StatsAnalyzer);
89
76
  _this = _super.call(this);
77
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "config", void 0);
78
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "correlationId", void 0);
79
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastEmittedStartStopEvent", void 0);
80
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastMqaDataSent", void 0);
81
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastStatsResults", void 0);
82
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meetingMediaStatus", void 0);
83
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mqaInterval", void 0);
84
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mqaSentCount", void 0);
85
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "networkQualityMonitor", void 0);
86
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaConnection", void 0);
87
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsInterval", void 0);
88
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsResults", void 0);
89
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsStarted", void 0);
90
90
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "emitStartStopEvents", function (mediaType, previousValue, currentValue, isLocal) {
91
91
  if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
92
92
  throw new Error("Unsupported mediaType: ".concat(mediaType));
93
- } // eslint-disable-next-line no-param-reassign
94
-
95
-
96
- if (previousValue === undefined) previousValue = 0; // eslint-disable-next-line no-param-reassign
93
+ }
97
94
 
95
+ // eslint-disable-next-line no-param-reassign
96
+ if (previousValue === undefined) previousValue = 0;
97
+ // eslint-disable-next-line no-param-reassign
98
98
  if (currentValue === undefined) currentValue = 0;
99
+ if (!_this.lastEmittedStartStopEvent[mediaType]) {
100
+ _this.lastEmittedStartStopEvent[mediaType] = {};
101
+ }
99
102
  var lastEmittedEvent = isLocal ? _this.lastEmittedStartStopEvent[mediaType].local : _this.lastEmittedStartStopEvent[mediaType].remote;
100
103
  var newEvent;
101
-
102
104
  if (currentValue - previousValue > 0) {
103
105
  newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;
104
106
  } else if (currentValue === previousValue && currentValue > 0) {
105
107
  newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;
106
108
  }
107
-
108
109
  if (newEvent && lastEmittedEvent !== newEvent) {
109
110
  if (isLocal) {
110
111
  _this.lastEmittedStartStopEvent[mediaType].local = newEvent;
111
112
  } else {
112
113
  _this.lastEmittedStartStopEvent[mediaType].remote = newEvent;
113
114
  }
114
-
115
115
  _this.emit({
116
116
  file: 'statsAnalyzer/index',
117
117
  function: 'compareLastStatsResult'
@@ -124,7 +124,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
124
124
  if (!result || !result.id) {
125
125
  return;
126
126
  }
127
-
128
127
  var RemoteCandidateType = {};
129
128
  var RemoteTransport = {};
130
129
  var RemoteIpAddress = {};
@@ -132,31 +131,24 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
132
131
  if (!result.id) return;
133
132
  var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
134
133
  var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
135
-
136
134
  if (!RemoteCandidateType[result.id]) {
137
135
  RemoteCandidateType[result.id] = [];
138
136
  }
139
-
140
137
  if (!RemoteTransport[result.id]) {
141
138
  RemoteTransport[result.id] = [];
142
139
  }
143
-
144
140
  if (!RemoteIpAddress[result.id]) {
145
141
  RemoteIpAddress[result.id] = [];
146
142
  }
147
-
148
143
  if (!RemoteNetworkType[result.id]) {
149
144
  RemoteNetworkType[result.id] = [];
150
145
  }
151
-
152
146
  if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {
153
147
  RemoteCandidateType[result.id].push(result.candidateType);
154
148
  }
155
-
156
149
  if (result.protocol && RemoteTransport[result.id].indexOf(result.protocol) === -1) {
157
150
  RemoteTransport[result.id].push(result.protocol.toUpperCase());
158
151
  }
159
-
160
152
  if (result.ip && RemoteIpAddress[result.id].indexOf("".concat(result.ip, ":").concat(result.portNumber)) === -1) {
161
153
  RemoteIpAddress[result.id].push("".concat(result.ip)); // TODO: Add ports
162
154
  }
@@ -164,7 +156,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
164
156
  if (result.networkType && RemoteNetworkType[result.id].indexOf(result.networkType) === -1) {
165
157
  RemoteNetworkType[result.id].push(result.networkType);
166
158
  }
167
-
168
159
  _this.statsResults.internal.candidates[result.id] = {
169
160
  candidateType: RemoteCandidateType[result.id],
170
161
  ipAddress: RemoteIpAddress[result.id],
@@ -189,138 +180,33 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
189
180
  _this.networkQualityMonitor = networkQualityMonitor;
190
181
  _this.correlationId = config.correlationId;
191
182
  _this.mqaSentCount = -1;
192
- _this.lastMqaDataSent = {
193
- resolutions: {
194
- video: {
195
- send: {},
196
- recv: {}
197
- },
198
- audio: {
199
- send: {},
200
- recv: {}
201
- },
202
- share: {
203
- send: {},
204
- recv: {}
205
- }
206
- },
207
- video: {
208
- send: {},
209
- recv: {}
210
- },
211
- audio: {
212
- send: {},
213
- recv: {}
214
- },
215
- share: {
216
- send: {},
217
- recv: {}
218
- }
219
- };
220
- _this.localMQEStats = {
221
- audio: {
222
- RX: {
223
- packetsLost: [],
224
- jitter: [],
225
- latency: [],
226
- bitRate: []
227
- },
228
- TX: {
229
- packetsLost: [],
230
- jitter: [],
231
- latency: [],
232
- bitRate: []
233
- }
234
- },
235
- video: {
236
- RX: {
237
- packetsLost: [],
238
- jitter: [],
239
- latency: [],
240
- bitRate: [],
241
- frameRate: [],
242
- resolutionWidth: [],
243
- resolutionHeight: [],
244
- requestedKeyFrame: [],
245
- receivedKeyFrame: []
246
- },
247
- TX: {
248
- packetsLost: [],
249
- jitter: [],
250
- latency: [],
251
- bitRate: [],
252
- frameRate: [],
253
- resolutionWidth: [],
254
- resolutionHeight: [],
255
- requestedKeyFrame: [],
256
- receivedKeyFrame: []
257
- }
258
- }
259
- };
260
- _this.lastEmittedStartStopEvent = {
261
- audio: {
262
- local: undefined,
263
- remote: undefined
264
- },
265
- video: {
266
- local: undefined,
267
- remote: undefined
268
- },
269
- share: {
270
- local: undefined,
271
- remote: undefined
272
- }
273
- };
183
+ _this.lastMqaDataSent = {};
184
+ _this.lastEmittedStartStopEvent = {};
274
185
  return _this;
275
186
  }
276
187
 
188
+ /**
189
+ * Resets cumulative stats arrays.
190
+ *
191
+ * @public
192
+ * @memberof StatsAnalyzer
193
+ * @returns {void}
194
+ */
277
195
  (0, _createClass2.default)(StatsAnalyzer, [{
278
- key: "populateResults",
279
- value: function populateResults(lastMqa) {
280
- // Audio
281
- this.localMQEStats.audio.RX.packetsLost.push(lastMqa.audioReceive[0].common.mediaHopByHopLost);
282
- this.localMQEStats.audio.RX.jitter.push(lastMqa.audioReceive[0].streams[0].common.rtpJitter);
283
- this.localMQEStats.audio.RX.latency.push(lastMqa.audioReceive[0].common.roundTripTime);
284
- this.localMQEStats.audio.RX.bitRate.push(lastMqa.audioReceive[0].streams[0].common.receivedBitrate);
285
- this.localMQEStats.audio.TX.packetsLost.push(lastMqa.audioTransmit[0].common.remoteLossRate);
286
- this.localMQEStats.audio.TX.jitter.push(lastMqa.audioTransmit[0].common.remoteJitter);
287
- this.localMQEStats.audio.TX.latency.push(lastMqa.audioTransmit[0].common.roundTripTime);
288
- this.localMQEStats.audio.TX.bitRate.push(lastMqa.audioTransmit[0].streams[0].common.transmittedBitrate); // Video
289
-
290
- this.localMQEStats.video.RX.packetsLost.push(lastMqa.videoReceive[0].common.mediaHopByHopLost);
291
- this.localMQEStats.video.RX.jitter.push(lastMqa.videoReceive[0].streams[0].common.rtpJitter);
292
- this.localMQEStats.video.RX.latency.push(lastMqa.videoReceive[0].streams[0].common.roundTripTime);
293
- this.localMQEStats.video.RX.bitRate.push(lastMqa.videoReceive[0].streams[0].common.receivedBitrate);
294
- this.localMQEStats.video.RX.frameRate.push(lastMqa.videoReceive[0].streams[0].common.receivedFrameRate);
295
- this.localMQEStats.video.RX.resolutionWidth.push(lastMqa.videoReceive[0].streams[0].receivedWidth);
296
- this.localMQEStats.video.RX.resolutionHeight.push(lastMqa.videoReceive[0].streams[0].receivedHeight);
297
- this.localMQEStats.video.RX.requestedKeyFrame.push();
298
- this.localMQEStats.video.RX.receivedKeyFrame.push();
299
- this.localMQEStats.video.TX.packetsLost.push(lastMqa.videoTransmit[0].common.remoteLossRate);
300
- this.localMQEStats.video.TX.jitter.push(lastMqa.videoTransmit[0].common.remoteJitter);
301
- this.localMQEStats.video.TX.latency.push(lastMqa.videoTransmit[0].common.roundTripTime);
302
- this.localMQEStats.video.TX.bitRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedBitrate);
303
- this.localMQEStats.video.TX.frameRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedFrameRate);
304
- this.localMQEStats.video.TX.resolutionWidth.push(lastMqa.videoTransmit[0].streams[0].transmittedWidth);
305
- this.localMQEStats.video.TX.resolutionHeight.push(lastMqa.videoTransmit[0].streams[0].transmittedHeight);
306
- this.localMQEStats.video.TX.requestedKeyFrame.push(lastMqa.videoTransmit[0].streams[0].requestedKeyFrames);
307
- this.localMQEStats.video.TX.receivedKeyFrame.push();
308
- }
309
- }, {
310
196
  key: "resetStatsResults",
311
197
  value: function resetStatsResults() {
312
- this.statsResults.audio.send.meanRemoteJitter = [];
313
- this.statsResults.video.send.meanRemoteJitter = [];
314
- this.statsResults.share.send.meanRemoteJitter = [];
315
- this.statsResults.audio.recv.meanRtpJitter = []; // TODO: currently no values are present
316
-
317
- this.statsResults.video.recv.meanRtpJitter = [];
318
- this.statsResults.share.recv.meanRtpJitter = []; // Reset the roundTripTime
319
-
320
- this.statsResults.audio.send.meanRoundTripTime = [];
321
- this.statsResults.video.send.meanRoundTripTime = [];
322
- this.statsResults.share.send.meanRoundTripTime = [];
198
+ var _this2 = this;
199
+ (0, _keys.default)(this.statsResults).forEach(function (mediaType) {
200
+ if (mediaType.includes('recv')) {
201
+ _this2.statsResults[mediaType].recv.meanRtpJitter = [];
202
+ }
203
+ if (mediaType.includes('send')) {
204
+ _this2.statsResults[mediaType].send.meanRemoteJitter = [];
205
+ _this2.statsResults[mediaType].send.meanRoundTripTime = [];
206
+ }
207
+ });
323
208
  }
209
+
324
210
  /**
325
211
  * sets mediaStatus status for analyzing metrics
326
212
  *
@@ -329,12 +215,12 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
329
215
  * @memberof StatsAnalyzer
330
216
  * @returns {void}
331
217
  */
332
-
333
218
  }, {
334
219
  key: "updateMediaStatus",
335
220
  value: function updateMediaStatus(status) {
336
221
  this.meetingMediaStatus = status;
337
222
  }
223
+
338
224
  /**
339
225
  * captures MQA data from media connection
340
226
  *
@@ -342,129 +228,129 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
342
228
  * @memberof StatsAnalyzer
343
229
  * @returns {void}
344
230
  */
345
-
346
231
  }, {
347
232
  key: "sendMqaData",
348
233
  value: function sendMqaData() {
349
- var audioReceiver = _config.default.intervals[0].audioReceive[0];
350
- var audioSender = _config.default.intervals[0].audioTransmit[0];
351
- var videoReceiver = _config.default.intervals[0].videoReceive[0];
352
- var videoSender = _config.default.intervals[0].videoTransmit[0];
353
- var shareSender = _config.default.intervals[0].videoTransmit[1];
354
- var shareReceiver = _config.default.intervals[0].videoReceive[1];
355
- (0, _mqaUtil.getAudioSenderMqa)({
356
- audioSender: audioSender,
357
- statsResults: this.statsResults,
358
- lastMqaDataSent: this.lastMqaDataSent
359
- });
360
- (0, _mqaUtil.getAudioReceiverMqa)({
361
- audioReceiver: audioReceiver,
362
- statsResults: this.statsResults,
363
- lastMqaDataSent: this.lastMqaDataSent
364
- });
365
- (0, _mqaUtil.getVideoReceiverMqa)({
366
- videoReceiver: videoReceiver,
367
- statsResults: this.statsResults,
368
- lastMqaDataSent: this.lastMqaDataSent
369
- });
370
- (0, _mqaUtil.getVideoSenderMqa)({
371
- videoSender: videoSender,
372
- statsResults: this.statsResults,
373
- lastMqaDataSent: this.lastMqaDataSent
374
- }); // Capture mqa for share scenario
375
-
376
- (0, _mqaUtil.getVideoSenderMqa)({
377
- videoSender: shareSender,
378
- statsResults: this.statsResults,
379
- lastMqaDataSent: this.lastMqaDataSent,
380
- isShareStream: true
381
- });
382
- (0, _mqaUtil.getVideoReceiverMqa)({
383
- videoReceiver: shareReceiver,
384
- statsResults: this.statsResults,
385
- lastMqaDataSent: this.lastMqaDataSent,
386
- isShareStream: true
234
+ var _this3 = this;
235
+ var newMqa = (0, _cloneDeep2.default)(_config.emptyMqaInterval);
236
+ (0, _keys.default)(this.statsResults).forEach(function (mediaType) {
237
+ if (mediaType.includes('audio-send') || mediaType.includes('audio-share-send')) {
238
+ var audioSender = (0, _cloneDeep2.default)(_config.emptyAudioTransmit);
239
+ (0, _mqaUtil.getAudioSenderMqa)({
240
+ audioSender: audioSender,
241
+ statsResults: _this3.statsResults,
242
+ lastMqaDataSent: _this3.lastMqaDataSent,
243
+ mediaType: mediaType
244
+ });
245
+ newMqa.audioTransmit.push(audioSender);
246
+ } else if (mediaType.includes('audio-recv') || mediaType.includes('audio-share-recv')) {
247
+ var audioReceiver = (0, _cloneDeep2.default)(_config.emptyAudioReceive);
248
+ (0, _mqaUtil.getAudioReceiverMqa)({
249
+ audioReceiver: audioReceiver,
250
+ statsResults: _this3.statsResults,
251
+ lastMqaDataSent: _this3.lastMqaDataSent,
252
+ mediaType: mediaType
253
+ });
254
+ newMqa.audioReceive.push(audioReceiver);
255
+ } else if (mediaType.includes('video-send') || mediaType.includes('video-share-send')) {
256
+ var videoSender = (0, _cloneDeep2.default)(_config.emptyVideoTransmit);
257
+ (0, _mqaUtil.getVideoSenderMqa)({
258
+ videoSender: videoSender,
259
+ statsResults: _this3.statsResults,
260
+ lastMqaDataSent: _this3.lastMqaDataSent,
261
+ mediaType: mediaType
262
+ });
263
+ newMqa.videoTransmit.push(videoSender);
264
+ } else if (mediaType.includes('video-recv') || mediaType.includes('video-share-recv')) {
265
+ var videoReceiver = (0, _cloneDeep2.default)(_config.emptyVideoReceive);
266
+ (0, _mqaUtil.getVideoReceiverMqa)({
267
+ videoReceiver: videoReceiver,
268
+ statsResults: _this3.statsResults,
269
+ lastMqaDataSent: _this3.lastMqaDataSent,
270
+ mediaType: mediaType
271
+ });
272
+ newMqa.videoReceive.push(videoReceiver);
273
+ }
387
274
  });
388
- _config.default.intervals[0].intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0]; // Adding peripheral information
389
-
390
- _config.default.intervals[0].intervalMetadata.peripherals = [];
275
+ newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];
391
276
 
392
- _config.default.intervals[0].intervalMetadata.peripherals.push({
277
+ // Adding peripheral information
278
+ newMqa.intervalMetadata.peripherals = [];
279
+ newMqa.intervalMetadata.peripherals.push({
393
280
  information: _constants._UNKNOWN_,
394
281
  name: _constants.MEDIA_DEVICES.SPEAKER
395
282
  });
396
-
397
- _config.default.intervals[0].intervalMetadata.peripherals.push({
398
- information: this.statsResults[_constants.STATS.AUDIO_CORRELATE][_constants.STATS.SEND_DIRECTION].trackLabel || _constants._UNKNOWN_,
399
- name: _constants.MEDIA_DEVICES.MICROPHONE
400
- });
401
-
402
- _config.default.intervals[0].intervalMetadata.peripherals.push({
403
- information: this.statsResults[_constants.STATS.VIDEO_CORRELATE][_constants.STATS.SEND_DIRECTION].trackLabel || _constants._UNKNOWN_,
404
- name: _constants.MEDIA_DEVICES.CAMERA
405
- });
406
-
407
- _config.default.networkType = this.statsResults.connectionType.local.networkType;
283
+ if (this.statsResults['audio-send']) {
284
+ var _this$statsResults$au;
285
+ newMqa.intervalMetadata.peripherals.push({
286
+ information: (_this$statsResults$au = this.statsResults['audio-send']) === null || _this$statsResults$au === void 0 ? void 0 : _this$statsResults$au.trackLabel,
287
+ name: _constants.MEDIA_DEVICES.MICROPHONE
288
+ });
289
+ }
290
+ if (this.statsResults['video-send']) {
291
+ var _this$statsResults$vi;
292
+ newMqa.intervalMetadata.peripherals.push({
293
+ information: (_this$statsResults$vi = this.statsResults['video-send']) === null || _this$statsResults$vi === void 0 ? void 0 : _this$statsResults$vi.trackLabel,
294
+ name: _constants.MEDIA_DEVICES.CAMERA
295
+ });
296
+ }
297
+ newMqa.networkType = this.statsResults.connectionType.local.networkType;
408
298
  this.mqaSentCount += 1;
409
- _config.default.intervals[0].intervalNumber = this.mqaSentCount; // DO Deep copy, for some reason it takes the reference all the time rather then old value set
410
-
411
- this.lastMqaDataSent = (0, _cloneDeep2.default)(this.statsResults);
412
- this.populateResults(_config.default.intervals[0]);
299
+ newMqa.intervalNumber = this.mqaSentCount;
413
300
  this.resetStatsResults();
414
301
  this.emit({
415
302
  file: 'statsAnalyzer',
416
303
  function: 'sendMqaData'
417
304
  }, EVENTS.MEDIA_QUALITY, {
418
- data: _config.default.intervals[0],
419
- networkType: _config.default.networkType
305
+ data: newMqa,
306
+ // @ts-ignore
307
+ networkType: newMqa.networkType
420
308
  });
421
309
  }
310
+
422
311
  /**
423
312
  * updated the media connection when changed
424
313
  *
425
314
  * @private
426
315
  * @memberof StatsAnalyzer
427
- * @param {MC.RoapMediaConnection} mediaConnection
316
+ * @param {RoapMediaConnection} mediaConnection
428
317
  * @returns {void}
429
318
  */
430
-
431
319
  }, {
432
320
  key: "updateMediaConnection",
433
321
  value: function updateMediaConnection(mediaConnection) {
434
322
  this.mediaConnection = mediaConnection;
435
323
  }
324
+
436
325
  /**
437
326
  * Starts the stats analyzer on interval
438
327
  *
439
328
  * @public
440
329
  * @memberof StatsAnalyzer
441
- * @param {MC.RoapMediaConnection} mediaConnection
330
+ * @param {RoapMediaConnection} mediaConnection
442
331
  * @returns {Promise}
443
332
  */
444
-
445
333
  }, {
446
334
  key: "startAnalyzer",
447
335
  value: function startAnalyzer(mediaConnection) {
448
- var _this2 = this;
449
-
336
+ var _this4 = this;
450
337
  if (!this.statsStarted) {
451
338
  this.statsStarted = true;
452
339
  this.mediaConnection = mediaConnection;
453
340
  return this.getStatsAndParse().then(function () {
454
- _this2.statsInterval = setInterval(function () {
455
- _this2.getStatsAndParse();
456
- }, _this2.config.analyzerInterval); // Trigger initial fetch
457
-
458
- _this2.sendMqaData();
459
-
460
- _this2.mqaInterval = setInterval(function () {
461
- _this2.sendMqaData();
341
+ _this4.statsInterval = setInterval(function () {
342
+ _this4.getStatsAndParse();
343
+ }, _this4.config.analyzerInterval);
344
+ // Trigger initial fetch
345
+ _this4.sendMqaData();
346
+ _this4.mqaInterval = setInterval(function () {
347
+ _this4.sendMqaData();
462
348
  }, _constants.MQA_INTEVAL);
463
349
  });
464
350
  }
465
-
466
351
  return _promise.default.resolve();
467
352
  }
353
+
468
354
  /**
469
355
  * Cleans up the analyzer when done
470
356
  *
@@ -472,35 +358,29 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
472
358
  * @memberof StatsAnalyzer
473
359
  * @returns {void}
474
360
  */
475
-
476
361
  }, {
477
362
  key: "stopAnalyzer",
478
363
  value: function stopAnalyzer() {
479
- var _this3 = this;
480
-
364
+ var _this5 = this;
481
365
  var sendOneLastMqa = this.mqaInterval && this.statsInterval;
482
-
483
366
  if (this.statsInterval) {
484
367
  clearInterval(this.statsInterval);
485
368
  this.statsInterval = undefined;
486
369
  }
487
-
488
370
  if (this.mqaInterval) {
489
371
  clearInterval(this.mqaInterval);
490
372
  this.mqaInterval = undefined;
491
373
  }
492
-
493
374
  if (sendOneLastMqa) {
494
375
  return this.getStatsAndParse().then(function () {
495
- _this3.sendMqaData();
496
-
497
- _this3.mediaConnection = null;
376
+ _this5.sendMqaData();
377
+ _this5.mediaConnection = null;
498
378
  });
499
379
  }
500
-
501
380
  this.mediaConnection = null;
502
381
  return _promise.default.resolve();
503
382
  }
383
+
504
384
  /**
505
385
  * Parse a single result of get stats
506
386
  *
@@ -511,7 +391,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
511
391
  * @returns {void}
512
392
  * @memberof StatsAnalyzer
513
393
  */
514
-
515
394
  }, {
516
395
  key: "parseGetStatsResult",
517
396
  value: function parseGetStatsResult(getStatsResult, type, isSender) {
@@ -519,81 +398,105 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
519
398
  return;
520
399
  }
521
400
 
401
+ // Generate empty stats results
402
+ if (!this.statsResults[type]) {
403
+ this.statsResults[type] = {};
404
+ }
405
+ if (isSender && !this.statsResults[type].send) {
406
+ this.statsResults[type].send = (0, _cloneDeep2.default)(emptySender);
407
+ } else if (!isSender && !this.statsResults[type].recv) {
408
+ this.statsResults[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
409
+ }
410
+ if (!this.statsResults.resolutions[type]) {
411
+ this.statsResults.resolutions[type] = {};
412
+ }
413
+ if (isSender && !this.statsResults.resolutions[type].send) {
414
+ this.statsResults.resolutions[type].send = (0, _cloneDeep2.default)(emptySender);
415
+ } else if (!isSender && !this.statsResults.resolutions[type].recv) {
416
+ this.statsResults.resolutions[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
417
+ }
418
+ if (!this.statsResults.internal[type]) {
419
+ this.statsResults.internal[type] = {};
420
+ }
421
+ if (isSender && !this.statsResults.internal[type].send) {
422
+ this.statsResults.internal[type].send = (0, _cloneDeep2.default)(emptySender);
423
+ } else if (!isSender && !this.statsResults.internal[type].recv) {
424
+ this.statsResults.internal[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
425
+ }
522
426
  switch (getStatsResult.type) {
523
427
  case 'outbound-rtp':
524
428
  this.processOutboundRTPResult(getStatsResult, type);
525
429
  break;
526
-
527
430
  case 'inbound-rtp':
528
431
  this.processInboundRTPResult(getStatsResult, type);
529
432
  break;
530
-
531
433
  case 'track':
532
434
  this.processTrackResult(getStatsResult, type);
533
435
  break;
534
-
535
436
  case 'remote-inbound-rtp':
536
437
  case 'remote-outbound-rtp':
438
+ // @ts-ignore
537
439
  this.compareSentAndReceived(getStatsResult, type, isSender);
538
440
  break;
539
-
540
441
  case 'remotecandidate':
541
442
  case 'remote-candidate':
542
443
  this.parseCandidate(getStatsResult, type, isSender, true);
543
444
  break;
544
-
545
445
  case 'local-candidate':
546
446
  this.parseCandidate(getStatsResult, type, isSender, false);
547
447
  break;
548
-
549
448
  case 'media-source':
449
+ // @ts-ignore
550
450
  this.parseAudioSource(getStatsResult, type);
551
451
  break;
552
-
553
452
  default:
554
453
  break;
555
454
  }
556
455
  }
456
+
557
457
  /**
558
458
  * Filters the get stats results for types
559
459
  * @private
560
- * @param {Array} getStatsResults
460
+ * @param {Array} statsItem
561
461
  * @param {String} type
562
462
  * @param {boolean} isSender
563
463
  * @returns {void}
564
464
  */
565
-
566
465
  }, {
567
466
  key: "filterAndParseGetStatsResults",
568
- value: function filterAndParseGetStatsResults(getStatsResults, type, isSender) {
569
- var _this4 = this;
570
-
467
+ value: function filterAndParseGetStatsResults(statsItem, type, isSender) {
468
+ var _this6 = this;
571
469
  var types = _constants.DEFAULT_GET_STATS_FILTER.types;
572
- getStatsResults.forEach(function (result) {
470
+ statsItem.report.forEach(function (result) {
573
471
  if (types.includes(result.type)) {
574
- _this4.parseGetStatsResult(result, type, isSender);
472
+ _this6.parseGetStatsResult(result, type, isSender);
575
473
  }
576
474
  });
475
+ if (this.statsResults[type]) {
476
+ this.statsResults[type].direction = statsItem.currentDirection;
477
+ this.statsResults[type].trackLabel = statsItem.localTrackLabel;
478
+ this.statsResults[type].csi = statsItem.csi;
479
+ }
577
480
  }
481
+
578
482
  /**
579
483
  * parse the audio
580
484
  * @param {String} result
581
485
  * @param {boolean} type
582
486
  * @returns {void}
583
487
  */
584
-
585
488
  }, {
586
489
  key: "parseAudioSource",
587
490
  value: function parseAudioSource(result, type) {
588
491
  if (!result) {
589
492
  return;
590
493
  }
591
-
592
- if (type === _constants.STATS.AUDIO_CORRELATE) {
494
+ if (type.includes('audio-send')) {
593
495
  this.statsResults[type].send.audioLevel = result.audioLevel;
594
496
  this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;
595
497
  }
596
498
  }
499
+
597
500
  /**
598
501
  * emits started/stopped events for local/remote media by checking
599
502
  * if given values are increasing or not. The previousValue, currentValue
@@ -608,7 +511,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
608
511
  * @memberof StatsAnalyzer
609
512
  * @returns {void}
610
513
  */
611
-
612
514
  }, {
613
515
  key: "compareLastStatsResult",
614
516
  value:
@@ -620,136 +522,159 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
620
522
  * @returns {void}
621
523
  */
622
524
  function compareLastStatsResult() {
525
+ var _this7 = this;
623
526
  if (this.lastStatsResults !== null && this.meetingMediaStatus) {
624
- // compare audio stats sent
625
- var mediaType = _constants.STATS.AUDIO_CORRELATE;
626
- var currentStats = null;
627
- var previousStats = null;
628
-
629
- if (this.meetingMediaStatus.expected.sendAudio) {
630
- currentStats = this.statsResults[mediaType].send;
631
- previousStats = this.lastStatsResults[mediaType].send;
632
-
527
+ var getCurrentStatsTotals = function getCurrentStatsTotals(keyPrefix, value) {
528
+ return (0, _keys.default)(_this7.statsResults).filter(function (key) {
529
+ return key.startsWith(keyPrefix);
530
+ }).reduce(function (prev, cur) {
531
+ var _this7$statsResults$c;
532
+ return prev + (((_this7$statsResults$c = _this7.statsResults[cur]) === null || _this7$statsResults$c === void 0 ? void 0 : _this7$statsResults$c.recv[value]) || 0);
533
+ }, 0);
534
+ };
535
+ var getPreviousStatsTotals = function getPreviousStatsTotals(keyPrefix, value) {
536
+ return (0, _keys.default)(_this7.statsResults).filter(function (key) {
537
+ return key.startsWith(keyPrefix);
538
+ }).reduce(function (prev, cur) {
539
+ var _this7$lastStatsResul;
540
+ return prev + (((_this7$lastStatsResul = _this7.lastStatsResults[cur]) === null || _this7$lastStatsResul === void 0 ? void 0 : _this7$lastStatsResul.recv[value]) || 0);
541
+ }, 0);
542
+ };
543
+ var getCurrentResolutionsStatsTotals = function getCurrentResolutionsStatsTotals(keyPrefix, value) {
544
+ return (0, _keys.default)(_this7.statsResults).filter(function (key) {
545
+ return key.startsWith(keyPrefix);
546
+ }).reduce(function (prev, cur) {
547
+ var _this7$statsResults$r;
548
+ return prev + (((_this7$statsResults$r = _this7.statsResults.resolutions[cur]) === null || _this7$statsResults$r === void 0 ? void 0 : _this7$statsResults$r.recv[value]) || 0);
549
+ }, 0);
550
+ };
551
+ var getPreviousResolutionsStatsTotals = function getPreviousResolutionsStatsTotals(keyPrefix, value) {
552
+ return (0, _keys.default)(_this7.statsResults).filter(function (key) {
553
+ return key.startsWith(keyPrefix);
554
+ }).reduce(function (prev, cur) {
555
+ var _this7$lastStatsResul2;
556
+ return prev + (((_this7$lastStatsResul2 = _this7.lastStatsResults.resolutions[cur]) === null || _this7$lastStatsResul2 === void 0 ? void 0 : _this7$lastStatsResul2.recv[value]) || 0);
557
+ }, 0);
558
+ };
559
+ if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
560
+ // compare audio stats sent
561
+ // NOTE: relies on there being only one sender.
562
+ var currentStats = this.statsResults['audio-send'].send;
563
+ var previousStats = this.lastStatsResults['audio-send'].send;
633
564
  if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
634
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
565
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent");
635
566
  } else {
636
567
  if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
637
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Energy present"));
568
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present");
638
569
  }
639
-
640
570
  if (currentStats.audioLevel === 0) {
641
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " level is 0 for the user"));
571
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
642
572
  }
643
573
  }
644
-
645
- this.emitStartStopEvents(mediaType, previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
574
+ this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
646
575
  }
647
-
648
576
  if (this.meetingMediaStatus.expected.receiveAudio) {
649
577
  // compare audio stats received
650
- currentStats = this.statsResults[mediaType].recv;
651
- previousStats = this.lastStatsResults[mediaType].recv;
652
-
653
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {
654
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets received"));
655
- } else if (currentStats.totalSamplesReceived === previousStats.totalSamplesReceived || currentStats.totalSamplesReceived === 0) {
656
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " samples received"));
578
+ var currentPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
579
+ var previousPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
580
+ var currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');
581
+ var previousSamplesReceived = getPreviousStatsTotals('audio-recv', 'totalSamplesReceived');
582
+ if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
583
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received");
584
+ } else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
585
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received");
657
586
  }
658
-
659
- this.emitStartStopEvents(mediaType, previousStats.totalPacketsReceived, currentStats.totalPacketsReceived, false);
587
+ this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
660
588
  }
661
-
662
- mediaType = _constants.STATS.VIDEO_CORRELATE;
663
-
664
- if (this.meetingMediaStatus.expected.sendVideo) {
589
+ if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {
665
590
  // compare video stats sent
666
- currentStats = this.statsResults[mediaType].send;
667
- previousStats = this.lastStatsResults[mediaType].send;
668
-
669
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
670
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
591
+ var _currentStats = this.statsResults['video-send'].send;
592
+ var _previousStats = this.lastStatsResults['video-send'].send;
593
+ if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
594
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent");
671
595
  } else {
672
- if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
673
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames Encoded"));
596
+ if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
597
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded");
674
598
  }
675
-
676
- if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
677
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames sent"));
599
+ if (this.statsResults.resolutions['video-send'].send.framesSent === this.lastStatsResults.resolutions['video-send'].send.framesSent || this.statsResults.resolutions['video-send'].send.framesSent === 0) {
600
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent");
678
601
  }
679
602
  }
680
-
681
- this.emitStartStopEvents(mediaType, previousStats.framesSent, currentStats.framesSent, true);
603
+ this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
682
604
  }
683
-
684
605
  if (this.meetingMediaStatus.expected.receiveVideo) {
685
- // compare video stats reveived
686
- currentStats = this.statsResults[mediaType].recv;
687
- previousStats = this.lastStatsResults[mediaType].recv;
688
-
689
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {
690
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets received"));
606
+ // compare video stats received
607
+ var _currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');
608
+ var _previousPacketsReceived = getPreviousStatsTotals('video-recv', 'totalPacketsReceived');
609
+ var currentFramesReceived = getCurrentResolutionsStatsTotals('video-recv', 'framesReceived');
610
+ var previousFramesReceived = getPreviousResolutionsStatsTotals('video-recv', 'framesReceived');
611
+ var currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
612
+ var previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
613
+ var currentFramesDropped = getCurrentResolutionsStatsTotals('video-recv', 'framesDropped');
614
+ var previousFramesDropped = getPreviousResolutionsStatsTotals('video-recv', 'framesDropped');
615
+ if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
616
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received");
691
617
  } else {
692
- if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {
693
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames received"));
618
+ if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
619
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received");
694
620
  }
695
-
696
- if (this.statsResults[mediaType].recv.framesDecoded === this.lastStatsResults[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {
697
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames decoded"));
621
+ if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
622
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded");
698
623
  }
699
-
700
- if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {
701
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " frames are getting dropped"));
624
+ if (currentFramesDropped - previousFramesDropped > 10) {
625
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped");
702
626
  }
703
627
  }
704
-
705
- this.emitStartStopEvents(mediaType, previousStats.framesDecoded, currentStats.framesDecoded, false);
628
+ this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
706
629
  }
707
-
708
- mediaType = _constants.STATS.SHARE_CORRELATE;
709
-
710
- if (this.meetingMediaStatus.expected.sendShare) {
630
+ if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {
711
631
  // compare share stats sent
712
- currentStats = this.statsResults[mediaType].send;
713
- previousStats = this.lastStatsResults[mediaType].send;
714
632
 
715
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
716
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
633
+ var _currentStats2 = this.statsResults['video-share-send'].send;
634
+ var _previousStats2 = this.lastStatsResults['video-share-send'].send;
635
+ if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
636
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent");
717
637
  } else {
718
- if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
719
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames getting encoded"));
638
+ if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
639
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded");
720
640
  }
721
-
722
- if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
723
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames sent"));
641
+ if (this.statsResults.resolutions['video-share-send'].send.framesSent === this.lastStatsResults.resolutions['video-share-send'].send.framesSent || this.statsResults.resolutions['video-share-send'].send.framesSent === 0) {
642
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent");
724
643
  }
725
- } // TODO:need to check receive share value
726
- // compare share stats reveived
727
-
728
-
729
- currentStats = this.statsResults[mediaType].recv;
730
- previousStats = this.lastStatsResults[mediaType].recv;
731
-
732
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsSent === 0) {
733
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets received"));
644
+ }
645
+ }
646
+ if (this.meetingMediaStatus.expected.sendShare) {
647
+ // TODO:need to check receive share value
648
+ // compare share stats received
649
+ var _currentPacketsReceived2 = getCurrentStatsTotals('video-share-recv', 'totalPacketsReceived');
650
+ var _previousPacketsReceived2 = getPreviousStatsTotals('video-share-recv', 'totalPacketsReceived');
651
+ var _currentFramesReceived = getCurrentResolutionsStatsTotals('video-share-recv', 'framesReceived');
652
+ var _previousFramesReceived = getPreviousResolutionsStatsTotals('video-share-recv', 'framesReceived');
653
+ var _currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
654
+ var _previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
655
+ var _currentFramesDropped = getCurrentResolutionsStatsTotals('video-share-recv', 'framesDropped');
656
+ var _previousFramesDropped = getPreviousResolutionsStatsTotals('video-share-recv', 'framesDropped');
657
+ if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
658
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received");
734
659
  } else {
735
- if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {
736
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames received"));
660
+ if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
661
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received");
737
662
  }
738
-
739
- if (this.statsResults[mediaType].recv.framesDecoded === this.lastStatsResults[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {
740
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames decoded"));
663
+ if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
664
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded");
741
665
  }
742
-
743
- if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {
744
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " frames are getting dropped"));
666
+ if (_currentFramesDropped - _previousFramesDropped > 10) {
667
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped");
745
668
  }
746
- } // we are not calling emitStartStopEvents() for sending or receiving share because sharing is often started and stopped
669
+ }
670
+
671
+ // we are not calling emitStartStopEvents() for sending or receiving share because sharing is often started and stopped
747
672
  // in meetings and this.meetingMediaStatus.expected values can be out of sync with the actual packet flow
748
673
  // so we would send "sharing stopped" events incorrectly
749
-
750
674
  }
751
675
  }
752
676
  }
677
+
753
678
  /**
754
679
  * Does a `getStats` on all the transceivers and parses the results
755
680
  *
@@ -757,82 +682,92 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
757
682
  * @memberof StatsAnalyzer
758
683
  * @returns {Promise}
759
684
  */
760
-
761
685
  }, {
762
686
  key: "getStatsAndParse",
763
687
  value: function getStatsAndParse() {
764
- var _this5 = this;
765
-
688
+ var _this8 = this;
766
689
  if (!this.mediaConnection) {
767
690
  return _promise.default.resolve();
768
691
  }
769
-
770
- if (this.mediaConnection && this.mediaConnection.getConnectionState() === _internalMediaCore.MediaConnection.ConnectionState.Failed) {
692
+ if (this.mediaConnection && this.mediaConnection.getConnectionState() === _internalMediaCore.ConnectionState.Failed) {
771
693
  _loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state');
772
-
773
694
  return _promise.default.resolve();
774
695
  }
775
-
776
696
  _loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
777
-
778
697
  return this.mediaConnection.getTransceiverStats().then(function (transceiverStats) {
779
- _this5.filterAndParseGetStatsResults(transceiverStats.video.sender, _constants.STATS.VIDEO_CORRELATE, true);
780
-
781
- _this5.filterAndParseGetStatsResults(transceiverStats.video.receiver, _constants.STATS.VIDEO_CORRELATE, false);
782
-
783
- _this5.filterAndParseGetStatsResults(transceiverStats.audio.sender, _constants.STATS.AUDIO_CORRELATE, true);
784
-
785
- _this5.filterAndParseGetStatsResults(transceiverStats.audio.receiver, _constants.STATS.AUDIO_CORRELATE, false);
786
-
787
- _this5.filterAndParseGetStatsResults(transceiverStats.screenShareVideo.sender, _constants.STATS.SHARE_CORRELATE, true);
788
-
789
- _this5.filterAndParseGetStatsResults(transceiverStats.screenShareVideo.receiver, _constants.STATS.SHARE_CORRELATE, false); // updates the current direction of media
790
-
791
-
792
- _this5.statsResults[_constants.STATS.AUDIO_CORRELATE].direction = transceiverStats.audio.currentDirection;
793
- _this5.statsResults[_constants.STATS.VIDEO_CORRELATE].direction = transceiverStats.video.currentDirection;
794
- _this5.statsResults[_constants.STATS.SHARE_CORRELATE].direction = transceiverStats.screenShareVideo.currentDirection;
795
- _this5.statsResults[_constants.STATS.AUDIO_CORRELATE][_constants.STATS.SEND_DIRECTION].trackLabel = transceiverStats.audio.localTrackLabel;
796
- _this5.statsResults[_constants.STATS.VIDEO_CORRELATE][_constants.STATS.SEND_DIRECTION].trackLabel = transceiverStats.video.localTrackLabel;
698
+ transceiverStats.video.receivers.forEach(function (receiver, i) {
699
+ return _this8.filterAndParseGetStatsResults(receiver, "video-recv-".concat(i), false);
700
+ });
701
+ transceiverStats.audio.receivers.forEach(function (receiver, i) {
702
+ return _this8.filterAndParseGetStatsResults(receiver, "audio-recv-".concat(i), false);
703
+ });
704
+ transceiverStats.screenShareVideo.receivers.forEach(function (receiver, i) {
705
+ return _this8.filterAndParseGetStatsResults(receiver, "video-share-recv-".concat(i), false);
706
+ });
707
+ transceiverStats.screenShareAudio.receivers.forEach(function (receiver, i) {
708
+ return _this8.filterAndParseGetStatsResults(receiver, "audio-share-recv-".concat(i), false);
709
+ });
710
+ transceiverStats.video.senders.forEach(function (sender, i) {
711
+ if (i > 0) {
712
+ throw new Error('Stats Analyzer does not support multiple senders.');
713
+ }
714
+ _this8.filterAndParseGetStatsResults(sender, 'video-send', true);
715
+ });
716
+ transceiverStats.audio.senders.forEach(function (sender, i) {
717
+ if (i > 0) {
718
+ throw new Error('Stats Analyzer does not support multiple senders.');
719
+ }
720
+ _this8.filterAndParseGetStatsResults(sender, 'audio-send', true);
721
+ });
722
+ transceiverStats.screenShareVideo.senders.forEach(function (sender, i) {
723
+ if (i > 0) {
724
+ throw new Error('Stats Analyzer does not support multiple senders.');
725
+ }
726
+ _this8.filterAndParseGetStatsResults(sender, 'video-share-send', true);
727
+ });
728
+ transceiverStats.screenShareAudio.senders.forEach(function (sender, i) {
729
+ if (i > 0) {
730
+ throw new Error('Stats Analyzer does not support multiple senders.');
731
+ }
732
+ _this8.filterAndParseGetStatsResults(sender, 'audio-share-send', true);
733
+ });
734
+ _this8.compareLastStatsResult();
797
735
 
798
- _this5.compareLastStatsResult(); // Save the last results to compare with the current
736
+ // Save the last results to compare with the current
799
737
  // DO Deep copy, for some reason it takes the reference all the time rather then old value set
800
-
801
-
802
- _this5.lastStatsResults = JSON.parse((0, _stringify.default)(_this5.statsResults));
803
-
738
+ _this8.lastStatsResults = JSON.parse((0, _stringify.default)(_this8.statsResults));
804
739
  _loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
805
740
  });
806
741
  }
742
+
807
743
  /**
808
744
  * Processes OutboundRTP stats result and stores
809
745
  * @private
810
746
  * @param {*} result
811
- * @param {*} type
747
+ * @param {*} mediaType
812
748
  * @returns {void}
813
749
  */
814
-
815
750
  }, {
816
751
  key: "processOutboundRTPResult",
817
- value: function processOutboundRTPResult(result, type) {
818
- var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
752
+ value: function processOutboundRTPResult(result, mediaType) {
819
753
  var sendrecvType = _constants.STATS.SEND_DIRECTION;
820
-
821
754
  if (result.bytesSent) {
822
755
  var kilobytes = 0;
823
-
756
+ if (result.frameWidth && result.frameHeight) {
757
+ this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
758
+ this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
759
+ this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
760
+ this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
761
+ }
824
762
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
825
763
  this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
826
764
  }
827
-
828
765
  if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {
829
766
  this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
830
767
  }
831
-
832
768
  if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
833
769
  this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
834
770
  }
835
-
836
771
  var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
837
772
  this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
838
773
  kilobytes = bytes / 1024;
@@ -841,13 +776,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
841
776
  this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
842
777
  this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
843
778
  this.statsResults.internal[mediaType].outboundRtpId = result.id;
844
-
845
779
  if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
846
780
  this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
847
781
  }
848
-
849
782
  this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
850
- this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent; // Data saved to send MQA metrics
783
+ this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
784
+
785
+ // Data saved to send MQA metrics
851
786
 
852
787
  this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;
853
788
  this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
@@ -865,43 +800,40 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
865
800
  this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
866
801
  }
867
802
  }
803
+
868
804
  /**
869
805
  * Processes InboundRTP stats result and stores
870
806
  * @private
871
807
  * @param {*} result
872
- * @param {*} type
808
+ * @param {*} mediaType
873
809
  * @returns {void}
874
810
  */
875
-
876
811
  }, {
877
812
  key: "processInboundRTPResult",
878
- value: function processInboundRTPResult(result, type) {
879
- var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
813
+ value: function processInboundRTPResult(result, mediaType) {
880
814
  var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
881
-
882
815
  if (result.bytesReceived) {
883
816
  var kilobytes = 0;
884
-
817
+ if (result.frameWidth && result.frameHeight) {
818
+ this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
819
+ this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
820
+ this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
821
+ }
885
822
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
886
823
  this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
887
824
  }
888
-
889
825
  if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
890
826
  this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;
891
827
  }
892
-
893
828
  if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {
894
829
  this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;
895
830
  }
896
-
897
831
  if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
898
832
  this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
899
833
  }
900
-
901
834
  if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
902
835
  this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
903
836
  }
904
-
905
837
  var bytes = result.bytesReceived - this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
906
838
  this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
907
839
  kilobytes = bytes / 1024;
@@ -909,34 +841,31 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
909
841
  this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
910
842
  this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
911
843
  this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
912
-
913
844
  if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
914
845
  this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
915
846
  }
916
-
917
847
  this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
918
848
  this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
919
-
920
849
  if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
921
850
  _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for ".concat(mediaType, " "), this.statsResults[mediaType][sendrecvType].packetsReceived);
922
- } // Check the over all packet Lost ratio
923
-
851
+ }
924
852
 
853
+ // Check the over all packet Lost ratio
925
854
  this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0 ? this.statsResults[mediaType][sendrecvType].currentPacketsLost / (this.statsResults[mediaType][sendrecvType].packetsReceived + this.statsResults[mediaType][sendrecvType].currentPacketsLost) : 0;
926
-
927
855
  if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
928
856
  _loggerProxy.default.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
929
- } // TODO: check the packet loss value is negative values here
857
+ }
930
858
 
859
+ // TODO: check the packet loss value is negative values here
931
860
 
932
861
  if (result.packetsLost) {
933
862
  this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
934
863
  } else {
935
864
  this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
936
865
  }
866
+ this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
937
867
 
938
- this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp; // From Thin
939
-
868
+ // From Thin
940
869
  this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
941
870
  this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
942
871
  this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
@@ -947,7 +876,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
947
876
  this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
948
877
  this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
949
878
  this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
950
- this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter); // Audio stats
879
+ this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
880
+
881
+ // Audio stats
951
882
 
952
883
  this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
953
884
  this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
@@ -956,6 +887,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
956
887
  this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
957
888
  }
958
889
  }
890
+
959
891
  /**
960
892
  * Processes remote and local candidate result and stores
961
893
  * @private
@@ -966,7 +898,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
966
898
  *
967
899
  * @returns {void}
968
900
  */
969
-
970
901
  }, {
971
902
  key: "processTrackResult",
972
903
  value:
@@ -983,33 +914,24 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
983
914
  if (!result || result.type !== 'track') {
984
915
  return;
985
916
  }
986
-
987
- if (result.type !== 'track') return;
988
917
  var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
989
-
990
- if (result.frameWidth && result.frameHeight) {
991
- this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
992
- this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
993
- this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
994
- this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
995
- }
996
-
997
918
  if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
998
919
  this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
999
920
  this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
1000
921
  this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
1001
922
  }
1002
-
1003
- if (result.trackIdentifier && mediaType !== _constants.STATS.AUDIO_CORRELATE) {
923
+ if (result.trackIdentifier && !mediaType.includes('audio')) {
1004
924
  this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
1005
925
  var jitterBufferDelay = result && result.jitterBufferDelay;
1006
926
  var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
1007
- this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount; // Used to calculate the jitter
927
+ this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
1008
928
 
929
+ // Used to calculate the jitter
1009
930
  this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
1010
931
  this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
1011
932
  }
1012
933
  }
934
+
1013
935
  /**
1014
936
  *
1015
937
  * @private
@@ -1018,20 +940,17 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
1018
940
  * @returns {void}
1019
941
  * @memberof StatsAnalyzer
1020
942
  */
1021
-
1022
943
  }, {
1023
944
  key: "compareSentAndReceived",
1024
945
  value: function compareSentAndReceived(result, type) {
1025
- if (!type) {
946
+ // Don't compare on transceivers without a sender.
947
+ if (!type || !this.statsResults.internal[type].send) {
1026
948
  return;
1027
949
  }
1028
-
1029
950
  var mediaType = type;
1030
-
1031
951
  if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
1032
952
  this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
1033
953
  }
1034
-
1035
954
  var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
1036
955
  this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
1037
956
  this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
@@ -1040,15 +959,14 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
1040
959
  this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);
1041
960
  this.statsResults[mediaType].send.timestamp = result.timestamp;
1042
961
  this.statsResults[mediaType].send.ssrc = result.ssrc;
1043
- this.statsResults[mediaType].send.reportsReceived = result.reportsReceived; // Total packloss ratio on this video section of the call
962
+ this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
1044
963
 
964
+ // Total packloss ratio on this video section of the call
1045
965
  this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
1046
966
  this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;
1047
-
1048
967
  if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
1049
968
  this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
1050
969
  }
1051
-
1052
970
  if (result.type === 'remote-inbound-rtp') {
1053
971
  this.networkQualityMonitor.determineUplinkNetworkQuality({
1054
972
  mediaType: mediaType,
@@ -1060,6 +978,5 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
1060
978
  }]);
1061
979
  return StatsAnalyzer;
1062
980
  }(_eventsScope.default);
1063
-
1064
981
  exports.StatsAnalyzer = StatsAnalyzer;
1065
982
  //# sourceMappingURL=index.js.map