@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.104

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