@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.40

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 (498) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +137 -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 +546 -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 +48 -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 +109 -49
  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 +15 -0
  68. package/dist/controls-options-manager/enums.js.map +1 -0
  69. package/dist/controls-options-manager/index.js +203 -0
  70. package/dist/controls-options-manager/index.js.map +1 -0
  71. package/dist/controls-options-manager/util.js +28 -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 +12 -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 +186 -192
  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 +34 -91
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.js +66 -153
  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 +13 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2141 -2210
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +59 -82
  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 +45 -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 +5 -20
  128. package/dist/meetings/collection.js.map +1 -1
  129. package/dist/meetings/index.js +490 -560
  130. package/dist/meetings/index.js.map +1 -1
  131. package/dist/meetings/request.js +24 -41
  132. package/dist/meetings/request.js.map +1 -1
  133. package/dist/meetings/util.js +116 -155
  134. package/dist/meetings/util.js.map +1 -1
  135. package/dist/member/index.js +78 -86
  136. package/dist/member/index.js.map +1 -1
  137. package/dist/member/util.js +31 -68
  138. package/dist/member/util.js.map +1 -1
  139. package/dist/members/collection.js +3 -12
  140. package/dist/members/collection.js.map +1 -1
  141. package/dist/members/index.js +95 -200
  142. package/dist/members/index.js.map +1 -1
  143. package/dist/members/request.js +16 -39
  144. package/dist/members/request.js.map +1 -1
  145. package/dist/members/util.js +9 -38
  146. package/dist/members/util.js.map +1 -1
  147. package/dist/metrics/config.js +1 -13
  148. package/dist/metrics/config.js.map +1 -1
  149. package/dist/metrics/constants.js +1 -6
  150. package/dist/metrics/constants.js.map +1 -1
  151. package/dist/metrics/index.js +54 -156
  152. package/dist/metrics/index.js.map +1 -1
  153. package/dist/multistream/mediaRequestManager.js +74 -52
  154. package/dist/multistream/mediaRequestManager.js.map +1 -1
  155. package/dist/multistream/receiveSlot.js +48 -65
  156. package/dist/multistream/receiveSlot.js.map +1 -1
  157. package/dist/multistream/receiveSlotManager.js +60 -82
  158. package/dist/multistream/receiveSlotManager.js.map +1 -1
  159. package/dist/multistream/remoteMedia.js +60 -76
  160. package/dist/multistream/remoteMedia.js.map +1 -1
  161. package/dist/multistream/remoteMediaGroup.js +6 -40
  162. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  163. package/dist/multistream/remoteMediaManager.js +360 -413
  164. package/dist/multistream/remoteMediaManager.js.map +1 -1
  165. package/dist/networkQualityMonitor/index.js +40 -59
  166. package/dist/networkQualityMonitor/index.js.map +1 -1
  167. package/dist/personal-meeting-room/index.js +21 -45
  168. package/dist/personal-meeting-room/index.js.map +1 -1
  169. package/dist/personal-meeting-room/request.js +1 -31
  170. package/dist/personal-meeting-room/request.js.map +1 -1
  171. package/dist/personal-meeting-room/util.js +0 -13
  172. package/dist/personal-meeting-room/util.js.map +1 -1
  173. package/dist/reachability/index.js +147 -183
  174. package/dist/reachability/index.js.map +1 -1
  175. package/dist/reachability/request.js +15 -23
  176. package/dist/reachability/request.js.map +1 -1
  177. package/dist/reactions/constants.js +13 -0
  178. package/dist/reactions/constants.js.map +1 -0
  179. package/dist/reactions/reactions.js +109 -0
  180. package/dist/reactions/reactions.js.map +1 -0
  181. package/dist/reactions/reactions.type.js +36 -0
  182. package/dist/reactions/reactions.type.js.map +1 -0
  183. package/dist/reconnection-manager/index.js +322 -456
  184. package/dist/reconnection-manager/index.js.map +1 -1
  185. package/dist/recording-controller/enums.js +17 -0
  186. package/dist/recording-controller/enums.js.map +1 -0
  187. package/dist/recording-controller/index.js +343 -0
  188. package/dist/recording-controller/index.js.map +1 -0
  189. package/dist/recording-controller/util.js +63 -0
  190. package/dist/recording-controller/util.js.map +1 -0
  191. package/dist/roap/index.js +48 -70
  192. package/dist/roap/index.js.map +1 -1
  193. package/dist/roap/request.js +143 -131
  194. package/dist/roap/request.js.map +1 -1
  195. package/dist/roap/turnDiscovery.js +91 -98
  196. package/dist/roap/turnDiscovery.js.map +1 -1
  197. package/dist/statsAnalyzer/global.js +1 -95
  198. package/dist/statsAnalyzer/global.js.map +1 -1
  199. package/dist/statsAnalyzer/index.js +361 -449
  200. package/dist/statsAnalyzer/index.js.map +1 -1
  201. package/dist/statsAnalyzer/mqaUtil.js +137 -81
  202. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  203. package/dist/transcription/index.js +22 -47
  204. package/dist/transcription/index.js.map +1 -1
  205. package/dist/types/breakouts/breakout.d.ts +8 -0
  206. package/dist/types/breakouts/collection.d.ts +5 -0
  207. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  208. package/dist/types/breakouts/index.d.ts +5 -0
  209. package/dist/types/breakouts/request.d.ts +22 -0
  210. package/dist/types/breakouts/utils.d.ts +8 -0
  211. package/dist/types/common/browser-detection.d.ts +9 -0
  212. package/dist/types/common/collection.d.ts +48 -0
  213. package/dist/types/common/config.d.ts +2 -0
  214. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  215. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  216. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  217. package/dist/types/common/errors/media.d.ts +15 -0
  218. package/dist/types/common/errors/parameter.d.ts +15 -0
  219. package/dist/types/common/errors/password-error.d.ts +15 -0
  220. package/dist/types/common/errors/permission.d.ts +14 -0
  221. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  222. package/dist/types/common/errors/reconnection.d.ts +15 -0
  223. package/dist/types/common/errors/stats.d.ts +15 -0
  224. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  225. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  226. package/dist/types/common/events/events-scope.d.ts +17 -0
  227. package/dist/types/common/events/events.d.ts +12 -0
  228. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  229. package/dist/types/common/events/util.d.ts +2 -0
  230. package/dist/types/common/logs/logger-config.d.ts +2 -0
  231. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  232. package/dist/types/common/logs/request.d.ts +34 -0
  233. package/dist/types/common/queue.d.ts +32 -0
  234. package/dist/types/config.d.ts +77 -0
  235. package/dist/types/constants.d.ts +916 -0
  236. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  237. package/dist/types/controls-options-manager/enums.d.ts +5 -0
  238. package/dist/types/controls-options-manager/index.d.ts +120 -0
  239. package/dist/types/controls-options-manager/util.d.ts +7 -0
  240. package/dist/types/index.d.ts +6 -0
  241. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  242. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  243. package/dist/types/locus-info/fullState.d.ts +2 -0
  244. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  245. package/dist/types/locus-info/index.d.ts +269 -0
  246. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  247. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  248. package/dist/types/locus-info/parser.d.ts +212 -0
  249. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  250. package/dist/types/media/index.d.ts +32 -0
  251. package/dist/types/media/properties.d.ts +108 -0
  252. package/dist/types/media/util.d.ts +2 -0
  253. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  254. package/dist/types/meeting/in-meeting-actions.d.ts +83 -0
  255. package/dist/types/meeting/index.d.ts +1699 -0
  256. package/dist/types/meeting/muteState.d.ts +116 -0
  257. package/dist/types/meeting/request.d.ts +271 -0
  258. package/dist/types/meeting/request.type.d.ts +11 -0
  259. package/dist/types/meeting/state.d.ts +9 -0
  260. package/dist/types/meeting/util.d.ts +2 -0
  261. package/dist/types/meeting-info/collection.d.ts +20 -0
  262. package/dist/types/meeting-info/index.d.ts +57 -0
  263. package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
  264. package/dist/types/meeting-info/request.d.ts +22 -0
  265. package/dist/types/meeting-info/util.d.ts +2 -0
  266. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  267. package/dist/types/meetings/collection.d.ts +23 -0
  268. package/dist/types/meetings/index.d.ts +297 -0
  269. package/dist/types/meetings/request.d.ts +27 -0
  270. package/dist/types/meetings/util.d.ts +18 -0
  271. package/dist/types/member/index.d.ts +146 -0
  272. package/dist/types/member/util.d.ts +2 -0
  273. package/dist/types/members/collection.d.ts +24 -0
  274. package/dist/types/members/index.d.ts +320 -0
  275. package/dist/types/members/request.d.ts +50 -0
  276. package/dist/types/members/util.d.ts +2 -0
  277. package/dist/types/metrics/config.d.ts +169 -0
  278. package/dist/types/metrics/constants.d.ts +53 -0
  279. package/dist/types/metrics/index.d.ts +152 -0
  280. package/dist/types/multistream/mediaRequestManager.d.ts +51 -0
  281. package/dist/types/multistream/receiveSlot.d.ts +64 -0
  282. package/dist/types/multistream/receiveSlotManager.d.ts +46 -0
  283. package/dist/types/multistream/remoteMedia.d.ts +100 -0
  284. package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
  285. package/dist/types/multistream/remoteMediaManager.d.ts +241 -0
  286. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  287. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  288. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  289. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  290. package/dist/types/reachability/index.d.ts +140 -0
  291. package/dist/types/reachability/request.d.ts +37 -0
  292. package/dist/types/reactions/constants.d.ts +3 -0
  293. package/dist/types/reactions/reactions.d.ts +4 -0
  294. package/dist/types/reactions/reactions.type.d.ts +52 -0
  295. package/dist/types/reconnection-manager/index.d.ts +117 -0
  296. package/dist/types/recording-controller/enums.d.ts +7 -0
  297. package/dist/types/recording-controller/index.d.ts +193 -0
  298. package/dist/types/recording-controller/util.d.ts +13 -0
  299. package/dist/types/roap/index.d.ts +77 -0
  300. package/dist/types/roap/request.d.ts +38 -0
  301. package/dist/types/roap/turnDiscovery.d.ts +74 -0
  302. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  303. package/dist/types/statsAnalyzer/index.d.ts +195 -0
  304. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  305. package/dist/types/transcription/index.d.ts +64 -0
  306. package/internal-README.md +7 -6
  307. package/package.json +27 -21
  308. package/src/breakouts/README.md +199 -0
  309. package/src/breakouts/breakout.ts +130 -0
  310. package/src/breakouts/collection.ts +19 -0
  311. package/src/breakouts/edit-lock-error.ts +25 -0
  312. package/src/breakouts/index.ts +504 -0
  313. package/src/breakouts/request.ts +55 -0
  314. package/src/breakouts/utils.ts +39 -0
  315. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  316. package/src/common/collection.ts +9 -7
  317. package/src/common/{config.js → config.ts} +1 -1
  318. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  319. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  320. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  321. package/src/common/errors/{media.js → media.ts} +11 -7
  322. package/src/common/errors/parameter.ts +11 -7
  323. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  324. package/src/common/errors/{permission.js → permission.ts} +10 -6
  325. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  326. package/src/common/errors/{stats.js → stats.ts} +11 -7
  327. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  328. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  329. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  330. package/src/common/events/{events.js → events.ts} +5 -1
  331. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  332. package/src/common/events/{util.js → util.ts} +2 -3
  333. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  334. package/src/common/logs/logger-proxy.ts +44 -0
  335. package/src/common/logs/{request.js → request.ts} +22 -9
  336. package/src/common/queue.ts +1 -2
  337. package/src/{config.js → config.ts} +17 -12
  338. package/src/constants.ts +62 -5
  339. package/src/controls-options-manager/constants.ts +5 -0
  340. package/src/controls-options-manager/enums.ts +6 -0
  341. package/src/controls-options-manager/index.ts +183 -0
  342. package/src/controls-options-manager/util.ts +20 -0
  343. package/src/index.js +4 -1
  344. package/src/locus-info/controlsUtils.ts +114 -0
  345. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  346. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  347. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  348. package/src/locus-info/{index.js → index.ts} +150 -66
  349. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  350. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  351. package/src/locus-info/{parser.js → parser.ts} +67 -79
  352. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  353. package/src/media/{index.js → index.ts} +182 -173
  354. package/src/media/{properties.js → properties.ts} +60 -37
  355. package/src/media/{util.js → util.ts} +2 -2
  356. package/src/mediaQualityMetrics/config.ts +384 -0
  357. package/src/meeting/in-meeting-actions.ts +31 -3
  358. package/src/meeting/{index.js → index.ts} +2512 -1579
  359. package/src/meeting/{muteState.js → muteState.ts} +95 -49
  360. package/src/meeting/{request.js → request.ts} +326 -142
  361. package/src/meeting/request.type.ts +13 -0
  362. package/src/meeting/{state.js → state.ts} +50 -35
  363. package/src/meeting/{util.js → util.ts} +117 -119
  364. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  365. package/src/meeting-info/{index.js → index.ts} +42 -36
  366. package/src/meeting-info/meeting-info-v2.ts +273 -0
  367. package/src/meeting-info/{request.js → request.ts} +14 -4
  368. package/src/meeting-info/{util.js → util.ts} +60 -51
  369. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  370. package/src/meetings/{collection.js → collection.ts} +6 -3
  371. package/src/meetings/index.ts +1159 -0
  372. package/src/meetings/{request.js → request.ts} +32 -25
  373. package/src/meetings/{util.js → util.ts} +58 -32
  374. package/src/member/{index.js → index.ts} +102 -56
  375. package/src/member/{util.js → util.ts} +52 -25
  376. package/src/members/{collection.js → collection.ts} +2 -2
  377. package/src/members/{index.js → index.ts} +221 -142
  378. package/src/members/{request.js → request.ts} +60 -16
  379. package/src/members/{util.js → util.ts} +50 -48
  380. package/src/metrics/{config.js → config.ts} +253 -92
  381. package/src/metrics/{constants.js → constants.ts} +0 -6
  382. package/src/metrics/{index.js → index.ts} +105 -94
  383. package/src/multistream/mediaRequestManager.ts +101 -39
  384. package/src/multistream/receiveSlot.ts +62 -26
  385. package/src/multistream/receiveSlotManager.ts +35 -21
  386. package/src/multistream/remoteMedia.ts +38 -5
  387. package/src/multistream/remoteMediaGroup.ts +4 -3
  388. package/src/multistream/remoteMediaManager.ts +152 -36
  389. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  390. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  391. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  392. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  393. package/src/reachability/{index.js → index.ts} +109 -85
  394. package/src/reachability/request.ts +46 -35
  395. package/src/reactions/constants.ts +4 -0
  396. package/src/reactions/reactions.ts +104 -0
  397. package/src/reactions/reactions.type.ts +62 -0
  398. package/src/reconnection-manager/{index.js → index.ts} +196 -103
  399. package/src/recording-controller/enums.ts +8 -0
  400. package/src/recording-controller/index.ts +315 -0
  401. package/src/recording-controller/util.ts +58 -0
  402. package/src/roap/{index.js → index.ts} +77 -60
  403. package/src/roap/request.ts +172 -0
  404. package/src/roap/turnDiscovery.ts +81 -41
  405. package/src/statsAnalyzer/global.ts +37 -0
  406. package/src/statsAnalyzer/index.ts +1234 -0
  407. package/src/statsAnalyzer/mqaUtil.ts +293 -0
  408. package/src/transcription/{index.js → index.ts} +46 -39
  409. package/test/integration/spec/converged-space-meetings.js +176 -0
  410. package/test/integration/spec/journey.js +665 -464
  411. package/test/integration/spec/space-meeting.js +320 -206
  412. package/test/integration/spec/transcription.js +7 -8
  413. package/test/unit/spec/breakouts/breakout.ts +147 -0
  414. package/test/unit/spec/breakouts/collection.ts +15 -0
  415. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  416. package/test/unit/spec/breakouts/index.ts +707 -0
  417. package/test/unit/spec/breakouts/request.ts +104 -0
  418. package/test/unit/spec/breakouts/utils.js +47 -0
  419. package/test/unit/spec/common/browser-detection.js +9 -28
  420. package/test/unit/spec/controls-options-manager/index.js +124 -0
  421. package/test/unit/spec/controls-options-manager/util.js +66 -0
  422. package/test/unit/spec/fixture/locus.js +92 -90
  423. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  424. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  425. package/test/unit/spec/locus-info/index.js +104 -2
  426. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  427. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  428. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  429. package/test/unit/spec/locus-info/parser.js +3 -9
  430. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  431. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  432. package/test/unit/spec/media/index.ts +39 -53
  433. package/test/unit/spec/media/properties.ts +9 -9
  434. package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
  435. package/test/unit/spec/meeting/index.js +2253 -811
  436. package/test/unit/spec/meeting/muteState.js +74 -55
  437. package/test/unit/spec/meeting/request.js +141 -43
  438. package/test/unit/spec/meeting/utils.js +106 -171
  439. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  440. package/test/unit/spec/meeting-info/request.js +7 -9
  441. package/test/unit/spec/meeting-info/util.js +11 -12
  442. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  443. package/test/unit/spec/meetings/collection.js +1 -1
  444. package/test/unit/spec/meetings/index.js +439 -257
  445. package/test/unit/spec/meetings/utils.js +14 -12
  446. package/test/unit/spec/member/index.js +0 -1
  447. package/test/unit/spec/member/util.js +31 -7
  448. package/test/unit/spec/members/index.js +104 -54
  449. package/test/unit/spec/members/request.js +29 -20
  450. package/test/unit/spec/members/utils.js +8 -5
  451. package/test/unit/spec/metrics/index.js +16 -21
  452. package/test/unit/spec/multistream/mediaRequestManager.ts +318 -64
  453. package/test/unit/spec/multistream/receiveSlot.ts +68 -17
  454. package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
  455. package/test/unit/spec/multistream/remoteMedia.ts +38 -2
  456. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  457. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  458. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  459. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  460. package/test/unit/spec/reachability/index.ts +70 -27
  461. package/test/unit/spec/reachability/request.js +66 -0
  462. package/test/unit/spec/reconnection-manager/index.js +58 -30
  463. package/test/unit/spec/recording-controller/index.js +231 -0
  464. package/test/unit/spec/recording-controller/util.js +102 -0
  465. package/test/unit/spec/roap/index.ts +12 -8
  466. package/test/unit/spec/roap/request.ts +217 -0
  467. package/test/unit/spec/roap/turnDiscovery.ts +72 -49
  468. package/test/unit/spec/stats-analyzer/index.js +86 -57
  469. package/test/utils/cmr.js +44 -42
  470. package/test/utils/constants.js +9 -0
  471. package/test/utils/testUtils.js +98 -77
  472. package/test/utils/webex-config.js +22 -18
  473. package/test/utils/webex-test-users.js +57 -50
  474. package/tsconfig.json +6 -0
  475. package/dist/media/internal-media-core-wrapper.js +0 -22
  476. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  477. package/dist/meeting/effectsState.js +0 -327
  478. package/dist/meeting/effectsState.js.map +0 -1
  479. package/dist/multistream/multistreamMedia.js +0 -116
  480. package/dist/multistream/multistreamMedia.js.map +0 -1
  481. package/dist/peer-connection-manager/util.js +0 -124
  482. package/dist/peer-connection-manager/util.js.map +0 -1
  483. package/src/common/logs/logger-proxy.js +0 -33
  484. package/src/locus-info/controlsUtils.js +0 -102
  485. package/src/media/internal-media-core-wrapper.ts +0 -9
  486. package/src/mediaQualityMetrics/config.js +0 -382
  487. package/src/meeting/effectsState.js +0 -205
  488. package/src/meeting-info/meeting-info-v2.js +0 -255
  489. package/src/meetings/index.js +0 -1015
  490. package/src/multistream/multistreamMedia.ts +0 -92
  491. package/src/peer-connection-manager/util.ts +0 -117
  492. package/src/roap/request.js +0 -127
  493. package/src/statsAnalyzer/global.js +0 -133
  494. package/src/statsAnalyzer/index.js +0 -1006
  495. package/src/statsAnalyzer/mqaUtil.js +0 -173
  496. package/test/unit/spec/meeting/effectsState.js +0 -291
  497. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  498. /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,86 @@ 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
-
824
756
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
825
757
  this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
826
758
  }
827
-
828
759
  if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {
829
760
  this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
830
761
  }
831
-
832
762
  if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
833
763
  this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
834
764
  }
835
-
836
765
  var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
837
766
  this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
838
767
  kilobytes = bytes / 1024;
@@ -841,13 +770,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
841
770
  this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
842
771
  this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
843
772
  this.statsResults.internal[mediaType].outboundRtpId = result.id;
844
-
845
773
  if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
846
774
  this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
847
775
  }
848
-
849
776
  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
777
+ this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
778
+
779
+ // Data saved to send MQA metrics
851
780
 
852
781
  this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;
853
782
  this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
@@ -865,43 +794,35 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
865
794
  this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
866
795
  }
867
796
  }
797
+
868
798
  /**
869
799
  * Processes InboundRTP stats result and stores
870
800
  * @private
871
801
  * @param {*} result
872
- * @param {*} type
802
+ * @param {*} mediaType
873
803
  * @returns {void}
874
804
  */
875
-
876
805
  }, {
877
806
  key: "processInboundRTPResult",
878
- value: function processInboundRTPResult(result, type) {
879
- var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
807
+ value: function processInboundRTPResult(result, mediaType) {
880
808
  var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
881
-
882
809
  if (result.bytesReceived) {
883
810
  var kilobytes = 0;
884
-
885
811
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
886
812
  this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
887
813
  }
888
-
889
814
  if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
890
815
  this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;
891
816
  }
892
-
893
817
  if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {
894
818
  this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;
895
819
  }
896
-
897
820
  if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
898
821
  this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
899
822
  }
900
-
901
823
  if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
902
824
  this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
903
825
  }
904
-
905
826
  var bytes = result.bytesReceived - this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
906
827
  this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
907
828
  kilobytes = bytes / 1024;
@@ -909,34 +830,31 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
909
830
  this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
910
831
  this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
911
832
  this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
912
-
913
833
  if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
914
834
  this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
915
835
  }
916
-
917
836
  this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
918
837
  this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
919
-
920
838
  if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
921
839
  _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
-
840
+ }
924
841
 
842
+ // Check the over all packet Lost ratio
925
843
  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
844
  if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
928
845
  _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
846
+ }
930
847
 
848
+ // TODO: check the packet loss value is negative values here
931
849
 
932
850
  if (result.packetsLost) {
933
851
  this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
934
852
  } else {
935
853
  this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
936
854
  }
855
+ this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
937
856
 
938
- this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp; // From Thin
939
-
857
+ // From Thin
940
858
  this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
941
859
  this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
942
860
  this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
@@ -947,7 +865,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
947
865
  this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
948
866
  this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
949
867
  this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
950
- this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter); // Audio stats
868
+ this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
869
+
870
+ // Audio stats
951
871
 
952
872
  this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
953
873
  this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
@@ -956,6 +876,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
956
876
  this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
957
877
  }
958
878
  }
879
+
959
880
  /**
960
881
  * Processes remote and local candidate result and stores
961
882
  * @private
@@ -966,7 +887,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
966
887
  *
967
888
  * @returns {void}
968
889
  */
969
-
970
890
  }, {
971
891
  key: "processTrackResult",
972
892
  value:
@@ -983,33 +903,30 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
983
903
  if (!result || result.type !== 'track') {
984
904
  return;
985
905
  }
986
-
987
- if (result.type !== 'track') return;
988
906
  var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
989
-
990
907
  if (result.frameWidth && result.frameHeight) {
991
908
  this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
992
909
  this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
993
910
  this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
994
911
  this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
995
912
  }
996
-
997
913
  if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
998
914
  this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
999
915
  this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
1000
916
  this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
1001
917
  }
1002
-
1003
- if (result.trackIdentifier && mediaType !== _constants.STATS.AUDIO_CORRELATE) {
918
+ if (result.trackIdentifier && !mediaType.includes('audio')) {
1004
919
  this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
1005
920
  var jitterBufferDelay = result && result.jitterBufferDelay;
1006
921
  var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
1007
- this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount; // Used to calculate the jitter
922
+ this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
1008
923
 
924
+ // Used to calculate the jitter
1009
925
  this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
1010
926
  this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
1011
927
  }
1012
928
  }
929
+
1013
930
  /**
1014
931
  *
1015
932
  * @private
@@ -1018,20 +935,17 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
1018
935
  * @returns {void}
1019
936
  * @memberof StatsAnalyzer
1020
937
  */
1021
-
1022
938
  }, {
1023
939
  key: "compareSentAndReceived",
1024
940
  value: function compareSentAndReceived(result, type) {
1025
- if (!type) {
941
+ // Don't compare on transceivers without a sender.
942
+ if (!type || !this.statsResults.internal[type].send) {
1026
943
  return;
1027
944
  }
1028
-
1029
945
  var mediaType = type;
1030
-
1031
946
  if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
1032
947
  this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
1033
948
  }
1034
-
1035
949
  var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
1036
950
  this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
1037
951
  this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
@@ -1040,15 +954,14 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
1040
954
  this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);
1041
955
  this.statsResults[mediaType].send.timestamp = result.timestamp;
1042
956
  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
957
+ this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
1044
958
 
959
+ // Total packloss ratio on this video section of the call
1045
960
  this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
1046
961
  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
962
  if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
1049
963
  this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
1050
964
  }
1051
-
1052
965
  if (result.type === 'remote-inbound-rtp') {
1053
966
  this.networkQualityMonitor.determineUplinkNetworkQuality({
1054
967
  mediaType: mediaType,
@@ -1060,6 +973,5 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
1060
973
  }]);
1061
974
  return StatsAnalyzer;
1062
975
  }(_eventsScope.default);
1063
-
1064
976
  exports.StatsAnalyzer = StatsAnalyzer;
1065
977
  //# sourceMappingURL=index.js.map