@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.200

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