@webex/plugin-meetings 3.0.0-beta.37 → 3.0.0-beta.371

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 (391) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +671 -81
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +45 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/no-meeting-info.js +51 -0
  17. package/dist/common/errors/no-meeting-info.js.map +1 -0
  18. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  19. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +48 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/logs/request.js +5 -1
  25. package/dist/common/logs/request.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +5 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +236 -33
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +117 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/interceptors/index.js +15 -0
  43. package/dist/interceptors/index.js.map +1 -0
  44. package/dist/interceptors/locusRetry.js +93 -0
  45. package/dist/interceptors/locusRetry.js.map +1 -0
  46. package/dist/interpretation/collection.js +23 -0
  47. package/dist/interpretation/collection.js.map +1 -0
  48. package/dist/interpretation/index.js +366 -0
  49. package/dist/interpretation/index.js.map +1 -0
  50. package/dist/interpretation/siLanguage.js +25 -0
  51. package/dist/interpretation/siLanguage.js.map +1 -0
  52. package/dist/locus-info/controlsUtils.js +91 -2
  53. package/dist/locus-info/controlsUtils.js.map +1 -1
  54. package/dist/locus-info/index.js +383 -62
  55. package/dist/locus-info/index.js.map +1 -1
  56. package/dist/locus-info/infoUtils.js +7 -1
  57. package/dist/locus-info/infoUtils.js.map +1 -1
  58. package/dist/locus-info/mediaSharesUtils.js +57 -1
  59. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  60. package/dist/locus-info/parser.js +249 -72
  61. package/dist/locus-info/parser.js.map +1 -1
  62. package/dist/locus-info/selfUtils.js +89 -14
  63. package/dist/locus-info/selfUtils.js.map +1 -1
  64. package/dist/media/index.js +61 -101
  65. package/dist/media/index.js.map +1 -1
  66. package/dist/media/properties.js +73 -124
  67. package/dist/media/properties.js.map +1 -1
  68. package/dist/mediaQualityMetrics/config.js +1 -204
  69. package/dist/mediaQualityMetrics/config.js.map +1 -1
  70. package/dist/meeting/in-meeting-actions.js +86 -2
  71. package/dist/meeting/in-meeting-actions.js.map +1 -1
  72. package/dist/meeting/index.js +4024 -2829
  73. package/dist/meeting/index.js.map +1 -1
  74. package/dist/meeting/locusMediaRequest.js +292 -0
  75. package/dist/meeting/locusMediaRequest.js.map +1 -0
  76. package/dist/meeting/muteState.js +224 -136
  77. package/dist/meeting/muteState.js.map +1 -1
  78. package/dist/meeting/request.js +177 -152
  79. package/dist/meeting/request.js.map +1 -1
  80. package/dist/meeting/util.js +672 -417
  81. package/dist/meeting/util.js.map +1 -1
  82. package/dist/meeting-info/index.js +73 -7
  83. package/dist/meeting-info/index.js.map +1 -1
  84. package/dist/meeting-info/meeting-info-v2.js +192 -51
  85. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  86. package/dist/meeting-info/util.js +1 -1
  87. package/dist/meeting-info/util.js.map +1 -1
  88. package/dist/meeting-info/utilv2.js +36 -36
  89. package/dist/meeting-info/utilv2.js.map +1 -1
  90. package/dist/meetings/collection.js +39 -0
  91. package/dist/meetings/collection.js.map +1 -1
  92. package/dist/meetings/index.js +478 -118
  93. package/dist/meetings/index.js.map +1 -1
  94. package/dist/meetings/meetings.types.js +7 -0
  95. package/dist/meetings/meetings.types.js.map +1 -0
  96. package/dist/meetings/request.js +2 -0
  97. package/dist/meetings/request.js.map +1 -1
  98. package/dist/meetings/util.js +73 -7
  99. package/dist/meetings/util.js.map +1 -1
  100. package/dist/member/index.js +58 -0
  101. package/dist/member/index.js.map +1 -1
  102. package/dist/member/types.js +25 -0
  103. package/dist/member/types.js.map +1 -0
  104. package/dist/member/util.js +132 -25
  105. package/dist/member/util.js.map +1 -1
  106. package/dist/members/collection.js +10 -0
  107. package/dist/members/collection.js.map +1 -1
  108. package/dist/members/index.js +102 -6
  109. package/dist/members/index.js.map +1 -1
  110. package/dist/members/request.js +106 -38
  111. package/dist/members/request.js.map +1 -1
  112. package/dist/members/types.js +15 -0
  113. package/dist/members/types.js.map +1 -0
  114. package/dist/members/util.js +326 -232
  115. package/dist/members/util.js.map +1 -1
  116. package/dist/metrics/constants.js +17 -1
  117. package/dist/metrics/constants.js.map +1 -1
  118. package/dist/metrics/index.js +1 -446
  119. package/dist/metrics/index.js.map +1 -1
  120. package/dist/multistream/mediaRequestManager.js +228 -58
  121. package/dist/multistream/mediaRequestManager.js.map +1 -1
  122. package/dist/multistream/receiveSlot.js +29 -16
  123. package/dist/multistream/receiveSlot.js.map +1 -1
  124. package/dist/multistream/receiveSlotManager.js +39 -36
  125. package/dist/multistream/receiveSlotManager.js.map +1 -1
  126. package/dist/multistream/remoteMedia.js +44 -18
  127. package/dist/multistream/remoteMedia.js.map +1 -1
  128. package/dist/multistream/remoteMediaGroup.js +60 -3
  129. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  130. package/dist/multistream/remoteMediaManager.js +209 -59
  131. package/dist/multistream/remoteMediaManager.js.map +1 -1
  132. package/dist/multistream/sendSlotManager.js +233 -0
  133. package/dist/multistream/sendSlotManager.js.map +1 -0
  134. package/dist/reachability/clusterReachability.js +356 -0
  135. package/dist/reachability/clusterReachability.js.map +1 -0
  136. package/dist/reachability/index.js +263 -390
  137. package/dist/reachability/index.js.map +1 -1
  138. package/dist/reachability/request.js +6 -4
  139. package/dist/reachability/request.js.map +1 -1
  140. package/dist/reachability/util.js +29 -0
  141. package/dist/reachability/util.js.map +1 -0
  142. package/dist/reconnection-manager/index.js +267 -200
  143. package/dist/reconnection-manager/index.js.map +1 -1
  144. package/dist/recording-controller/index.js +21 -2
  145. package/dist/recording-controller/index.js.map +1 -1
  146. package/dist/recording-controller/util.js +9 -8
  147. package/dist/recording-controller/util.js.map +1 -1
  148. package/dist/roap/index.js +51 -28
  149. package/dist/roap/index.js.map +1 -1
  150. package/dist/roap/request.js +48 -64
  151. package/dist/roap/request.js.map +1 -1
  152. package/dist/roap/turnDiscovery.js +220 -70
  153. package/dist/roap/turnDiscovery.js.map +1 -1
  154. package/dist/rtcMetrics/constants.js +12 -0
  155. package/dist/rtcMetrics/constants.js.map +1 -0
  156. package/dist/rtcMetrics/index.js +179 -0
  157. package/dist/rtcMetrics/index.js.map +1 -0
  158. package/dist/statsAnalyzer/index.js +179 -215
  159. package/dist/statsAnalyzer/index.js.map +1 -1
  160. package/dist/statsAnalyzer/mqaUtil.js +35 -28
  161. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  162. package/dist/types/annotation/annotation.types.d.ts +42 -0
  163. package/dist/types/annotation/constants.d.ts +31 -0
  164. package/dist/types/annotation/index.d.ts +117 -0
  165. package/dist/types/breakouts/events.d.ts +8 -0
  166. package/dist/types/breakouts/utils.d.ts +14 -0
  167. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  168. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  169. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  170. package/dist/types/common/logs/request.d.ts +2 -0
  171. package/dist/types/common/queue.d.ts +9 -7
  172. package/dist/types/config.d.ts +2 -7
  173. package/dist/types/constants.d.ts +200 -31
  174. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  175. package/dist/types/controls-options-manager/index.d.ts +17 -1
  176. package/dist/types/controls-options-manager/types.d.ts +43 -0
  177. package/dist/types/controls-options-manager/util.d.ts +1 -7
  178. package/dist/types/index.d.ts +6 -4
  179. package/dist/types/interceptors/index.d.ts +2 -0
  180. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  181. package/dist/types/interpretation/collection.d.ts +5 -0
  182. package/dist/types/interpretation/index.d.ts +5 -0
  183. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  184. package/dist/types/locus-info/index.d.ts +57 -4
  185. package/dist/types/locus-info/parser.d.ts +66 -6
  186. package/dist/types/media/index.d.ts +2 -0
  187. package/dist/types/media/properties.d.ts +34 -49
  188. package/dist/types/mediaQualityMetrics/config.d.ts +0 -128
  189. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  190. package/dist/types/meeting/index.d.ts +559 -496
  191. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  192. package/dist/types/meeting/muteState.d.ts +93 -25
  193. package/dist/types/meeting/request.d.ts +64 -43
  194. package/dist/types/meeting/util.d.ts +117 -1
  195. package/dist/types/meeting-info/index.d.ts +13 -1
  196. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  197. package/dist/types/meetings/collection.d.ts +17 -0
  198. package/dist/types/meetings/index.d.ts +112 -20
  199. package/dist/types/meetings/meetings.types.d.ts +4 -0
  200. package/dist/types/member/index.d.ts +14 -0
  201. package/dist/types/member/types.d.ts +32 -0
  202. package/dist/types/members/collection.d.ts +5 -0
  203. package/dist/types/members/index.d.ts +35 -2
  204. package/dist/types/members/request.d.ts +73 -9
  205. package/dist/types/members/types.d.ts +25 -0
  206. package/dist/types/members/util.d.ts +214 -1
  207. package/dist/types/metrics/constants.d.ts +16 -0
  208. package/dist/types/metrics/index.d.ts +4 -111
  209. package/dist/types/multistream/mediaRequestManager.d.ts +72 -5
  210. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  211. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  212. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  213. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  214. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  215. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  216. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  217. package/dist/types/reachability/index.d.ts +60 -95
  218. package/dist/types/reachability/request.d.ts +3 -1
  219. package/dist/types/reachability/util.d.ts +8 -0
  220. package/dist/types/reconnection-manager/index.d.ts +19 -0
  221. package/dist/types/recording-controller/index.d.ts +15 -1
  222. package/dist/types/recording-controller/util.d.ts +5 -4
  223. package/dist/types/roap/index.d.ts +2 -1
  224. package/dist/types/roap/request.d.ts +9 -8
  225. package/dist/types/roap/turnDiscovery.d.ts +39 -5
  226. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  227. package/dist/types/rtcMetrics/index.d.ts +61 -0
  228. package/dist/types/statsAnalyzer/index.d.ts +29 -11
  229. package/dist/types/webinar/collection.d.ts +16 -0
  230. package/dist/types/webinar/index.d.ts +5 -0
  231. package/dist/webinar/collection.js +44 -0
  232. package/dist/webinar/collection.js.map +1 -0
  233. package/dist/webinar/index.js +69 -0
  234. package/dist/webinar/index.js.map +1 -0
  235. package/package.json +22 -19
  236. package/src/annotation/annotation.types.ts +50 -0
  237. package/src/annotation/constants.ts +36 -0
  238. package/src/annotation/index.ts +328 -0
  239. package/src/breakouts/README.md +35 -11
  240. package/src/breakouts/breakout.ts +67 -9
  241. package/src/breakouts/events.ts +56 -0
  242. package/src/breakouts/index.ts +558 -59
  243. package/src/breakouts/utils.ts +42 -0
  244. package/src/common/errors/no-meeting-info.ts +24 -0
  245. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  246. package/src/common/errors/webex-errors.ts +44 -2
  247. package/src/common/logs/logger-proxy.ts +1 -1
  248. package/src/common/logs/request.ts +5 -1
  249. package/src/common/queue.ts +22 -8
  250. package/src/config.ts +4 -9
  251. package/src/constants.ts +224 -21
  252. package/src/controls-options-manager/enums.ts +12 -0
  253. package/src/controls-options-manager/index.ts +116 -21
  254. package/src/controls-options-manager/types.ts +59 -0
  255. package/src/controls-options-manager/util.ts +294 -14
  256. package/src/index.ts +44 -0
  257. package/src/interceptors/index.ts +3 -0
  258. package/src/interceptors/locusRetry.ts +67 -0
  259. package/src/interpretation/README.md +60 -0
  260. package/src/interpretation/collection.ts +19 -0
  261. package/src/interpretation/index.ts +332 -0
  262. package/src/interpretation/siLanguage.ts +18 -0
  263. package/src/locus-info/controlsUtils.ts +108 -0
  264. package/src/locus-info/index.ts +414 -59
  265. package/src/locus-info/infoUtils.ts +10 -2
  266. package/src/locus-info/mediaSharesUtils.ts +64 -0
  267. package/src/locus-info/parser.ts +258 -47
  268. package/src/locus-info/selfUtils.ts +81 -5
  269. package/src/media/index.ts +97 -107
  270. package/src/media/properties.ts +88 -117
  271. package/src/mediaQualityMetrics/config.ts +0 -135
  272. package/src/meeting/in-meeting-actions.ts +171 -3
  273. package/src/meeting/index.ts +3365 -2453
  274. package/src/meeting/locusMediaRequest.ts +313 -0
  275. package/src/meeting/muteState.ts +223 -136
  276. package/src/meeting/request.ts +155 -120
  277. package/src/meeting/util.ts +685 -395
  278. package/src/meeting-info/index.ts +81 -8
  279. package/src/meeting-info/meeting-info-v2.ts +170 -14
  280. package/src/meeting-info/util.ts +1 -1
  281. package/src/meeting-info/utilv2.ts +23 -23
  282. package/src/meetings/collection.ts +33 -0
  283. package/src/meetings/index.ts +497 -126
  284. package/src/meetings/meetings.types.ts +12 -0
  285. package/src/meetings/request.ts +2 -0
  286. package/src/meetings/util.ts +81 -12
  287. package/src/member/index.ts +58 -0
  288. package/src/member/types.ts +38 -0
  289. package/src/member/util.ts +141 -25
  290. package/src/members/collection.ts +8 -0
  291. package/src/members/index.ts +134 -8
  292. package/src/members/request.ts +97 -17
  293. package/src/members/types.ts +29 -0
  294. package/src/members/util.ts +333 -240
  295. package/src/metrics/constants.ts +16 -0
  296. package/src/metrics/index.ts +1 -469
  297. package/src/multistream/mediaRequestManager.ts +277 -82
  298. package/src/multistream/receiveSlot.ts +31 -17
  299. package/src/multistream/receiveSlotManager.ts +34 -24
  300. package/src/multistream/remoteMedia.ts +27 -2
  301. package/src/multistream/remoteMediaGroup.ts +59 -0
  302. package/src/multistream/remoteMediaManager.ts +148 -30
  303. package/src/multistream/sendSlotManager.ts +170 -0
  304. package/src/reachability/clusterReachability.ts +320 -0
  305. package/src/reachability/index.ts +229 -346
  306. package/src/reachability/request.ts +8 -4
  307. package/src/reachability/util.ts +24 -0
  308. package/src/reconnection-manager/index.ts +139 -106
  309. package/src/recording-controller/index.ts +20 -3
  310. package/src/recording-controller/util.ts +26 -9
  311. package/src/roap/index.ts +52 -23
  312. package/src/roap/request.ts +48 -67
  313. package/src/roap/turnDiscovery.ts +147 -49
  314. package/src/rtcMetrics/constants.ts +3 -0
  315. package/src/rtcMetrics/index.ts +166 -0
  316. package/src/statsAnalyzer/index.ts +219 -289
  317. package/src/statsAnalyzer/mqaUtil.ts +43 -44
  318. package/src/webinar/collection.ts +31 -0
  319. package/src/webinar/index.ts +62 -0
  320. package/test/integration/spec/converged-space-meetings.js +60 -3
  321. package/test/integration/spec/journey.js +320 -261
  322. package/test/integration/spec/space-meeting.js +76 -3
  323. package/test/unit/spec/annotation/index.ts +418 -0
  324. package/test/unit/spec/breakouts/breakout.ts +118 -28
  325. package/test/unit/spec/breakouts/events.ts +89 -0
  326. package/test/unit/spec/breakouts/index.ts +1349 -114
  327. package/test/unit/spec/breakouts/utils.js +52 -1
  328. package/test/unit/spec/common/queue.js +31 -2
  329. package/test/unit/spec/controls-options-manager/index.js +163 -0
  330. package/test/unit/spec/controls-options-manager/util.js +576 -60
  331. package/test/unit/spec/fixture/locus.js +1 -0
  332. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  333. package/test/unit/spec/interpretation/collection.ts +15 -0
  334. package/test/unit/spec/interpretation/index.ts +589 -0
  335. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  336. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  337. package/test/unit/spec/locus-info/index.js +1352 -33
  338. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  339. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  340. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  341. package/test/unit/spec/locus-info/parser.js +116 -35
  342. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  343. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  344. package/test/unit/spec/media/index.ts +118 -37
  345. package/test/unit/spec/media/properties.ts +2 -2
  346. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  347. package/test/unit/spec/meeting/index.js +6749 -2181
  348. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  349. package/test/unit/spec/meeting/muteState.js +402 -212
  350. package/test/unit/spec/meeting/request.js +473 -54
  351. package/test/unit/spec/meeting/utils.js +773 -67
  352. package/test/unit/spec/meeting-info/index.js +300 -0
  353. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  354. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  355. package/test/unit/spec/meetings/collection.js +26 -0
  356. package/test/unit/spec/meetings/index.js +1393 -212
  357. package/test/unit/spec/meetings/utils.js +229 -2
  358. package/test/unit/spec/member/index.js +61 -6
  359. package/test/unit/spec/member/util.js +510 -34
  360. package/test/unit/spec/members/index.js +432 -1
  361. package/test/unit/spec/members/request.js +206 -27
  362. package/test/unit/spec/members/utils.js +210 -0
  363. package/test/unit/spec/metrics/index.js +1 -50
  364. package/test/unit/spec/multistream/mediaRequestManager.ts +776 -162
  365. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  366. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  367. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  368. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  369. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  370. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  371. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  372. package/test/unit/spec/reachability/index.ts +551 -14
  373. package/test/unit/spec/reachability/request.js +3 -1
  374. package/test/unit/spec/reachability/util.ts +40 -0
  375. package/test/unit/spec/reconnection-manager/index.js +153 -11
  376. package/test/unit/spec/recording-controller/index.js +294 -218
  377. package/test/unit/spec/recording-controller/util.js +223 -96
  378. package/test/unit/spec/roap/index.ts +180 -83
  379. package/test/unit/spec/roap/request.ts +100 -62
  380. package/test/unit/spec/roap/turnDiscovery.ts +388 -96
  381. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  382. package/test/unit/spec/stats-analyzer/index.js +664 -12
  383. package/test/unit/spec/webinar/collection.ts +13 -0
  384. package/test/unit/spec/webinar/index.ts +60 -0
  385. package/test/utils/integrationTestUtils.js +46 -0
  386. package/test/utils/testUtils.js +0 -57
  387. package/dist/metrics/config.js +0 -289
  388. package/dist/metrics/config.js.map +0 -1
  389. package/dist/types/metrics/config.d.ts +0 -169
  390. package/src/index.js +0 -16
  391. package/src/metrics/config.ts +0 -485
@@ -17,6 +17,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/
17
17
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
18
18
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
19
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
20
+ var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
20
21
  var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
21
22
  var _internalMediaCore = require("@webex/internal-media-core");
22
23
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
@@ -49,7 +50,6 @@ var emptyReceiver = {
49
50
  meanRtpJitter: [],
50
51
  meanRoundTripTime: []
51
52
  };
52
-
53
53
  /**
54
54
  * Stats Analyzer class that will emit events based on detected quality
55
55
  *
@@ -60,18 +60,24 @@ var emptyReceiver = {
60
60
  var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
61
61
  (0, _inherits2.default)(StatsAnalyzer, _EventsScope);
62
62
  var _super = _createSuper(StatsAnalyzer);
63
+ // Returns the local IP address for diagnostics. this is the local IP of the interface used for the current media connection a host can have many local Ip Addresses
64
+
63
65
  /**
64
66
  * Creates a new instance of StatsAnalyzer
65
67
  * @constructor
66
68
  * @public
67
69
  * @param {Object} config SDK Configuration Object
70
+ * @param {Function} receiveSlotCallback Callback used to access receive slots.
68
71
  * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
69
72
  * @param {Object} statsResults Default properties for stats
70
73
  */
71
74
  function StatsAnalyzer(config) {
72
75
  var _this;
73
- var networkQualityMonitor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
74
- var statsResults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _global.default;
76
+ var receiveSlotCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
77
+ return undefined;
78
+ };
79
+ var networkQualityMonitor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
80
+ var statsResults = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _global.default;
75
81
  (0, _classCallCheck2.default)(this, StatsAnalyzer);
76
82
  _this = _super.call(this);
77
83
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "config", void 0);
@@ -87,6 +93,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
87
93
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsInterval", void 0);
88
94
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsResults", void 0);
89
95
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsStarted", void 0);
96
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "successfulCandidatePair", void 0);
97
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "localIpAddress", void 0);
98
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "receiveSlotCallback", void 0);
90
99
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "emitStartStopEvents", function (mediaType, previousValue, currentValue, isLocal) {
91
100
  if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
92
101
  throw new Error("Unsupported mediaType: ".concat(mediaType));
@@ -120,57 +129,75 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
120
129
  });
121
130
  }
122
131
  });
132
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "extractAndSetLocalIpAddressInfoForDiagnostics", function (successfulCandidatePairId, candidates) {
133
+ var newIpAddress = '';
134
+ if (successfulCandidatePairId && !(0, _isEmpty2.default)(candidates)) {
135
+ var localCandidate = candidates[successfulCandidatePairId];
136
+ if (localCandidate) {
137
+ if (localCandidate.candidateType === 'host') {
138
+ // if it's a host candidate, use the address property - it will be the local IP
139
+ newIpAddress = "".concat(localCandidate.address);
140
+ } else if (localCandidate.candidateType === 'prflx') {
141
+ // if it's a peer reflexive candidate and we're not using a relay (there is no relayProtocol set)
142
+ // then look at the relatedAddress - it will be the local
143
+ //
144
+ // Firefox doesn't populate the relayProtocol property
145
+ if (!localCandidate.relayProtocol) {
146
+ newIpAddress = "".concat(localCandidate.relatedAddress);
147
+ } else {
148
+ // if it's a peer reflexive candidate and we are using a relay -
149
+ // in that case the relatedAddress will be the IP of the TURN server (Linus),
150
+ // so we can only look at the address, but it might be local IP or public IP,
151
+ // depending on if the user is behind a NAT or not
152
+ newIpAddress = "".concat(localCandidate.address);
153
+ }
154
+ }
155
+ }
156
+ }
157
+ _this.localIpAddress = newIpAddress;
158
+ });
123
159
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "parseCandidate", function (result, type, isSender, isRemote) {
160
+ var _this$successfulCandi;
124
161
  if (!result || !result.id) {
125
162
  return;
126
163
  }
127
- var RemoteCandidateType = {};
128
- var RemoteTransport = {};
129
- var RemoteIpAddress = {};
130
- var RemoteNetworkType = {};
131
- if (!result.id) return;
132
- var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
133
- var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
134
- if (!RemoteCandidateType[result.id]) {
135
- RemoteCandidateType[result.id] = [];
136
- }
137
- if (!RemoteTransport[result.id]) {
138
- RemoteTransport[result.id] = [];
139
- }
140
- if (!RemoteIpAddress[result.id]) {
141
- RemoteIpAddress[result.id] = [];
142
- }
143
- if (!RemoteNetworkType[result.id]) {
144
- RemoteNetworkType[result.id] = [];
145
- }
146
- if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {
147
- RemoteCandidateType[result.id].push(result.candidateType);
148
- }
149
- if (result.protocol && RemoteTransport[result.id].indexOf(result.protocol) === -1) {
150
- RemoteTransport[result.id].push(result.protocol.toUpperCase());
151
- }
152
- if (result.ip && RemoteIpAddress[result.id].indexOf("".concat(result.ip, ":").concat(result.portNumber)) === -1) {
153
- RemoteIpAddress[result.id].push("".concat(result.ip)); // TODO: Add ports
154
- }
155
164
 
156
- if (result.networkType && RemoteNetworkType[result.id].indexOf(result.networkType) === -1) {
157
- RemoteNetworkType[result.id].push(result.networkType);
165
+ // We only care about the successful local candidate
166
+ if (((_this$successfulCandi = _this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {
167
+ return;
168
+ }
169
+ var transport;
170
+ if (result.relayProtocol) {
171
+ transport = result.relayProtocol.toUpperCase();
172
+ } else if (result.protocol) {
173
+ transport = result.protocol.toUpperCase();
158
174
  }
159
- _this.statsResults.internal.candidates[result.id] = {
160
- candidateType: RemoteCandidateType[result.id],
161
- ipAddress: RemoteIpAddress[result.id],
175
+ var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
176
+ var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
177
+ if (!_this.statsResults.candidates) {
178
+ _this.statsResults.candidates = {};
179
+ }
180
+ _this.statsResults.candidates[result.id] = {
181
+ candidateType: result.candidateType,
182
+ ipAddress: result.ip,
183
+ // TODO: add ports
184
+ relatedAddress: result.relatedAddress,
185
+ relatedPort: result.relatedPort,
186
+ relayProtocol: result.relayProtocol,
187
+ protocol: result.protocol,
188
+ address: result.address,
162
189
  portNumber: result.port,
163
- networkType: RemoteNetworkType[result.id],
190
+ networkType: result.networkType,
164
191
  priority: result.priority,
165
- transport: RemoteTransport[result.id],
192
+ transport: transport,
166
193
  timestamp: result.time,
167
194
  id: result.id,
168
195
  type: result.type
169
196
  };
170
- _this.statsResults.connectionType[ipType].candidateType = RemoteCandidateType[result.id];
171
- _this.statsResults.connectionType[ipType].ipAddress = RemoteIpAddress[result.id];
172
- _this.statsResults.connectionType[ipType].networkType = RemoteNetworkType[result.id][0] === _constants.NETWORK_TYPE.VPN ? _constants.NETWORK_TYPE.UNKNOWN : RemoteNetworkType[result.id][0];
173
- _this.statsResults.connectionType[ipType].transport = RemoteTransport[result.id];
197
+ _this.statsResults.connectionType[ipType].candidateType = result.candidateType;
198
+ _this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;
199
+ _this.statsResults.connectionType[ipType].networkType = result.networkType === _constants.NETWORK_TYPE.VPN ? _constants.NETWORK_TYPE.UNKNOWN : result.networkType;
200
+ _this.statsResults.connectionType[ipType].transport = transport;
174
201
  _this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
175
202
  });
176
203
  _this.statsStarted = false;
@@ -182,6 +209,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
182
209
  _this.mqaSentCount = -1;
183
210
  _this.lastMqaDataSent = {};
184
211
  _this.lastEmittedStartStopEvent = {};
212
+ _this.receiveSlotCallback = receiveSlotCallback;
213
+ _this.successfulCandidatePair = {};
214
+ _this.localIpAddress = '';
185
215
  return _this;
186
216
  }
187
217
 
@@ -234,6 +264,15 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
234
264
  var _this3 = this;
235
265
  var newMqa = (0, _cloneDeep2.default)(_config.emptyMqaInterval);
236
266
  (0, _keys.default)(this.statsResults).forEach(function (mediaType) {
267
+ if (!_this3.lastMqaDataSent[mediaType]) {
268
+ _this3.lastMqaDataSent[mediaType] = {};
269
+ }
270
+ if (!_this3.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {
271
+ _this3.lastMqaDataSent[mediaType].send = {};
272
+ }
273
+ if (!_this3.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {
274
+ _this3.lastMqaDataSent[mediaType].recv = {};
275
+ }
237
276
  if (mediaType.includes('audio-send') || mediaType.includes('audio-share-send')) {
238
277
  var audioSender = (0, _cloneDeep2.default)(_config.emptyAudioTransmit);
239
278
  (0, _mqaUtil.getAudioSenderMqa)({
@@ -243,6 +282,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
243
282
  mediaType: mediaType
244
283
  });
245
284
  newMqa.audioTransmit.push(audioSender);
285
+ _this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
246
286
  } else if (mediaType.includes('audio-recv') || mediaType.includes('audio-share-recv')) {
247
287
  var audioReceiver = (0, _cloneDeep2.default)(_config.emptyAudioReceive);
248
288
  (0, _mqaUtil.getAudioReceiverMqa)({
@@ -252,6 +292,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
252
292
  mediaType: mediaType
253
293
  });
254
294
  newMqa.audioReceive.push(audioReceiver);
295
+ _this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
255
296
  } else if (mediaType.includes('video-send') || mediaType.includes('video-share-send')) {
256
297
  var videoSender = (0, _cloneDeep2.default)(_config.emptyVideoTransmit);
257
298
  (0, _mqaUtil.getVideoSenderMqa)({
@@ -261,6 +302,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
261
302
  mediaType: mediaType
262
303
  });
263
304
  newMqa.videoTransmit.push(videoSender);
305
+ _this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
264
306
  } else if (mediaType.includes('video-recv') || mediaType.includes('video-share-recv')) {
265
307
  var videoReceiver = (0, _cloneDeep2.default)(_config.emptyVideoReceive);
266
308
  (0, _mqaUtil.getVideoReceiverMqa)({
@@ -270,27 +312,25 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
270
312
  mediaType: mediaType
271
313
  });
272
314
  newMqa.videoReceive.push(videoReceiver);
315
+ _this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
273
316
  }
274
317
  });
275
- newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];
318
+ newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
276
319
 
277
320
  // Adding peripheral information
278
- newMqa.intervalMetadata.peripherals = [];
279
321
  newMqa.intervalMetadata.peripherals.push({
280
322
  information: _constants._UNKNOWN_,
281
323
  name: _constants.MEDIA_DEVICES.SPEAKER
282
324
  });
283
325
  if (this.statsResults['audio-send']) {
284
- var _this$statsResults$au;
285
326
  newMqa.intervalMetadata.peripherals.push({
286
- information: (_this$statsResults$au = this.statsResults['audio-send']) === null || _this$statsResults$au === void 0 ? void 0 : _this$statsResults$au.trackLabel,
327
+ information: this.statsResults['audio-send'].trackLabel || _constants._UNKNOWN_,
287
328
  name: _constants.MEDIA_DEVICES.MICROPHONE
288
329
  });
289
330
  }
290
331
  if (this.statsResults['video-send']) {
291
- var _this$statsResults$vi;
292
332
  newMqa.intervalMetadata.peripherals.push({
293
- information: (_this$statsResults$vi = this.statsResults['video-send']) === null || _this$statsResults$vi === void 0 ? void 0 : _this$statsResults$vi.trackLabel,
333
+ information: this.statsResults['video-send'].trackLabel || _constants._UNKNOWN_,
294
334
  name: _constants.MEDIA_DEVICES.CAMERA
295
335
  });
296
336
  }
@@ -322,6 +362,18 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
322
362
  this.mediaConnection = mediaConnection;
323
363
  }
324
364
 
365
+ /**
366
+ * Returns the local IP address for diagnostics.
367
+ * this is the local IP of the interface used for the current media connection
368
+ * a host can have many local Ip Addresses
369
+ * @returns {string | undefined} The local IP address.
370
+ */
371
+ }, {
372
+ key: "getLocalIpAddress",
373
+ value: function getLocalIpAddress() {
374
+ return this.localIpAddress;
375
+ }
376
+
325
377
  /**
326
378
  * Starts the stats analyzer on interval
327
379
  *
@@ -345,7 +397,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
345
397
  _this4.sendMqaData();
346
398
  _this4.mqaInterval = setInterval(function () {
347
399
  _this4.sendMqaData();
348
- }, _constants.MQA_INTEVAL);
400
+ }, _constants.MQA_INTERVAL);
349
401
  });
350
402
  }
351
403
  return _promise.default.resolve();
@@ -377,7 +429,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
377
429
  _this5.mediaConnection = null;
378
430
  });
379
431
  }
380
- this.mediaConnection = null;
381
432
  return _promise.default.resolve();
382
433
  }
383
434
 
@@ -407,22 +458,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
407
458
  } else if (!isSender && !this.statsResults[type].recv) {
408
459
  this.statsResults[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
409
460
  }
410
- if (!this.statsResults.resolutions[type]) {
411
- this.statsResults.resolutions[type] = {};
412
- }
413
- if (isSender && !this.statsResults.resolutions[type].send) {
414
- this.statsResults.resolutions[type].send = (0, _cloneDeep2.default)(emptySender);
415
- } else if (!isSender && !this.statsResults.resolutions[type].recv) {
416
- this.statsResults.resolutions[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
417
- }
418
- if (!this.statsResults.internal[type]) {
419
- this.statsResults.internal[type] = {};
420
- }
421
- if (isSender && !this.statsResults.internal[type].send) {
422
- this.statsResults.internal[type].send = (0, _cloneDeep2.default)(emptySender);
423
- } else if (!isSender && !this.statsResults.internal[type].recv) {
424
- this.statsResults.internal[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
425
- }
426
461
  switch (getStatsResult.type) {
427
462
  case 'outbound-rtp':
428
463
  this.processOutboundRTPResult(getStatsResult, type);
@@ -430,13 +465,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
430
465
  case 'inbound-rtp':
431
466
  this.processInboundRTPResult(getStatsResult, type);
432
467
  break;
433
- case 'track':
434
- this.processTrackResult(getStatsResult, type);
435
- break;
436
468
  case 'remote-inbound-rtp':
437
469
  case 'remote-outbound-rtp':
438
- // @ts-ignore
439
- this.compareSentAndReceived(getStatsResult, type, isSender);
470
+ this.compareSentAndReceived(getStatsResult, type);
440
471
  break;
441
472
  case 'remotecandidate':
442
473
  case 'remote-candidate':
@@ -467,15 +498,26 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
467
498
  value: function filterAndParseGetStatsResults(statsItem, type, isSender) {
468
499
  var _this6 = this;
469
500
  var types = _constants.DEFAULT_GET_STATS_FILTER.types;
501
+
502
+ // get the successful candidate pair before parsing stats.
503
+ statsItem.report.forEach(function (report) {
504
+ if (report.type === 'candidate-pair' && report.state === 'succeeded') {
505
+ _this6.successfulCandidatePair = report;
506
+ }
507
+ });
470
508
  statsItem.report.forEach(function (result) {
471
509
  if (types.includes(result.type)) {
472
510
  _this6.parseGetStatsResult(result, type, isSender);
473
511
  }
474
512
  });
475
513
  if (this.statsResults[type]) {
514
+ var _this$successfulCandi2, _this$statsResults;
476
515
  this.statsResults[type].direction = statsItem.currentDirection;
477
516
  this.statsResults[type].trackLabel = statsItem.localTrackLabel;
478
517
  this.statsResults[type].csi = statsItem.csi;
518
+ this.extractAndSetLocalIpAddressInfoForDiagnostics((_this$successfulCandi2 = this.successfulCandidatePair) === null || _this$successfulCandi2 === void 0 ? void 0 : _this$successfulCandi2.localCandidateId, (_this$statsResults = this.statsResults) === null || _this$statsResults === void 0 ? void 0 : _this$statsResults.candidates);
519
+ // reset the successful candidate pair.
520
+ this.successfulCandidatePair = {};
479
521
  }
480
522
  }
481
523
 
@@ -540,32 +582,16 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
540
582
  return prev + (((_this7$lastStatsResul = _this7.lastStatsResults[cur]) === null || _this7$lastStatsResul === void 0 ? void 0 : _this7$lastStatsResul.recv[value]) || 0);
541
583
  }, 0);
542
584
  };
543
- var getCurrentResolutionsStatsTotals = function getCurrentResolutionsStatsTotals(keyPrefix, value) {
544
- return (0, _keys.default)(_this7.statsResults).filter(function (key) {
545
- return key.startsWith(keyPrefix);
546
- }).reduce(function (prev, cur) {
547
- var _this7$statsResults$r;
548
- return prev + (((_this7$statsResults$r = _this7.statsResults.resolutions[cur]) === null || _this7$statsResults$r === void 0 ? void 0 : _this7$statsResults$r.recv[value]) || 0);
549
- }, 0);
550
- };
551
- var getPreviousResolutionsStatsTotals = function getPreviousResolutionsStatsTotals(keyPrefix, value) {
552
- return (0, _keys.default)(_this7.statsResults).filter(function (key) {
553
- return key.startsWith(keyPrefix);
554
- }).reduce(function (prev, cur) {
555
- var _this7$lastStatsResul2;
556
- return prev + (((_this7$lastStatsResul2 = _this7.lastStatsResults.resolutions[cur]) === null || _this7$lastStatsResul2 === void 0 ? void 0 : _this7$lastStatsResul2.recv[value]) || 0);
557
- }, 0);
558
- };
559
585
  if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
560
586
  // compare audio stats sent
561
587
  // NOTE: relies on there being only one sender.
562
588
  var currentStats = this.statsResults['audio-send'].send;
563
589
  var previousStats = this.lastStatsResults['audio-send'].send;
564
590
  if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
565
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent");
591
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent", currentStats.totalPacketsSent);
566
592
  } else {
567
593
  if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
568
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present");
594
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present", currentStats.totalAudioEnergy);
569
595
  }
570
596
  if (currentStats.audioLevel === 0) {
571
597
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
@@ -580,9 +606,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
580
606
  var currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');
581
607
  var previousSamplesReceived = getPreviousStatsTotals('audio-recv', 'totalSamplesReceived');
582
608
  if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
583
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received");
609
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received", currentPacketsReceived);
584
610
  } else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
585
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received");
611
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received", currentSamplesReceived);
586
612
  }
587
613
  this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
588
614
  }
@@ -591,13 +617,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
591
617
  var _currentStats = this.statsResults['video-send'].send;
592
618
  var _previousStats = this.lastStatsResults['video-send'].send;
593
619
  if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
594
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent");
620
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent", _currentStats.totalPacketsSent);
595
621
  } else {
596
622
  if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
597
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded");
623
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded", _currentStats.framesEncoded);
598
624
  }
599
- if (this.statsResults.resolutions['video-send'].send.framesSent === this.lastStatsResults.resolutions['video-send'].send.framesSent || this.statsResults.resolutions['video-send'].send.framesSent === 0) {
600
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent");
625
+ if (this.statsResults['video-send'].send.framesSent === this.lastStatsResults['video-send'].send.framesSent || this.statsResults['video-send'].send.framesSent === 0) {
626
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", this.statsResults['video-send'].send.framesSent);
601
627
  }
602
628
  }
603
629
  this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
@@ -606,23 +632,23 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
606
632
  // compare video stats received
607
633
  var _currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');
608
634
  var _previousPacketsReceived = getPreviousStatsTotals('video-recv', 'totalPacketsReceived');
609
- var currentFramesReceived = getCurrentResolutionsStatsTotals('video-recv', 'framesReceived');
610
- var previousFramesReceived = getPreviousResolutionsStatsTotals('video-recv', 'framesReceived');
635
+ var currentFramesReceived = getCurrentStatsTotals('video-recv', 'framesReceived');
636
+ var previousFramesReceived = getPreviousStatsTotals('video-recv', 'framesReceived');
611
637
  var currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
612
638
  var previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
613
- var currentFramesDropped = getCurrentResolutionsStatsTotals('video-recv', 'framesDropped');
614
- var previousFramesDropped = getPreviousResolutionsStatsTotals('video-recv', 'framesDropped');
639
+ var currentFramesDropped = getCurrentStatsTotals('video-recv', 'framesDropped');
640
+ var previousFramesDropped = getPreviousStatsTotals('video-recv', 'framesDropped');
615
641
  if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
616
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received");
642
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received", _currentPacketsReceived);
617
643
  } else {
618
644
  if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
619
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received");
645
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received", currentFramesReceived);
620
646
  }
621
647
  if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
622
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded");
648
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded", currentFramesDecoded);
623
649
  }
624
650
  if (currentFramesDropped - previousFramesDropped > 10) {
625
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped");
651
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped", currentFramesDropped - previousFramesDropped);
626
652
  }
627
653
  }
628
654
  this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
@@ -633,13 +659,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
633
659
  var _currentStats2 = this.statsResults['video-share-send'].send;
634
660
  var _previousStats2 = this.lastStatsResults['video-share-send'].send;
635
661
  if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
636
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent");
662
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats2.totalPacketsSent);
637
663
  } else {
638
664
  if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
639
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded");
665
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats2.framesEncoded);
640
666
  }
641
- if (this.statsResults.resolutions['video-share-send'].send.framesSent === this.lastStatsResults.resolutions['video-share-send'].send.framesSent || this.statsResults.resolutions['video-share-send'].send.framesSent === 0) {
642
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent");
667
+ if (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0) {
668
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults['video-share-send'].send.framesSent);
643
669
  }
644
670
  }
645
671
  }
@@ -648,23 +674,23 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
648
674
  // compare share stats received
649
675
  var _currentPacketsReceived2 = getCurrentStatsTotals('video-share-recv', 'totalPacketsReceived');
650
676
  var _previousPacketsReceived2 = getPreviousStatsTotals('video-share-recv', 'totalPacketsReceived');
651
- var _currentFramesReceived = getCurrentResolutionsStatsTotals('video-share-recv', 'framesReceived');
652
- var _previousFramesReceived = getPreviousResolutionsStatsTotals('video-share-recv', 'framesReceived');
677
+ var _currentFramesReceived = getCurrentStatsTotals('video-share-recv', 'framesReceived');
678
+ var _previousFramesReceived = getPreviousStatsTotals('video-share-recv', 'framesReceived');
653
679
  var _currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
654
680
  var _previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
655
- var _currentFramesDropped = getCurrentResolutionsStatsTotals('video-share-recv', 'framesDropped');
656
- var _previousFramesDropped = getPreviousResolutionsStatsTotals('video-share-recv', 'framesDropped');
681
+ var _currentFramesDropped = getCurrentStatsTotals('video-share-recv', 'framesDropped');
682
+ var _previousFramesDropped = getPreviousStatsTotals('video-share-recv', 'framesDropped');
657
683
  if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
658
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received");
684
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received", _currentPacketsReceived2);
659
685
  } else {
660
686
  if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
661
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received");
687
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received", _currentFramesReceived);
662
688
  }
663
689
  if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
664
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded");
690
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded", _currentFramesDecoded);
665
691
  }
666
692
  if (_currentFramesDropped - _previousFramesDropped > 10) {
667
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped");
693
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped", _currentFramesDropped - _previousFramesDropped);
668
694
  }
669
695
  }
670
696
 
@@ -753,28 +779,16 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
753
779
  var sendrecvType = _constants.STATS.SEND_DIRECTION;
754
780
  if (result.bytesSent) {
755
781
  var kilobytes = 0;
756
- if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
757
- this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
758
- }
759
- if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {
760
- this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
761
- }
762
- if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
763
- this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
782
+ if (result.frameWidth && result.frameHeight) {
783
+ this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
784
+ this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
785
+ this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
786
+ this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
764
787
  }
765
- var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
766
- this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
767
- kilobytes = bytes / 1024;
768
788
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
769
- this.statsResults[mediaType].bytesSent = kilobytes;
770
- this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
771
- this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
772
- this.statsResults.internal[mediaType].outboundRtpId = result.id;
773
- if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
774
- this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
775
- }
776
- this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
777
- this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
789
+ this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
790
+ this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
791
+ this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;
778
792
 
779
793
  // Data saved to send MQA metrics
780
794
 
@@ -808,41 +822,33 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
808
822
  var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
809
823
  if (result.bytesReceived) {
810
824
  var kilobytes = 0;
811
- if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
812
- this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
813
- }
814
- if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
815
- this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;
816
- }
817
- if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {
818
- this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;
819
- }
820
- if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
821
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
822
- }
823
- if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
824
- this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
825
+ var receiveSlot = this.receiveSlotCallback(result.ssrc);
826
+ var sourceState = receiveSlot === null || receiveSlot === void 0 ? void 0 : receiveSlot.sourceState;
827
+ var idAndCsi = receiveSlot ? "id: \"".concat(receiveSlot.id || '', "\"").concat(receiveSlot.csi ? " and csi: ".concat(receiveSlot.csi) : '') : '';
828
+ if (result.frameWidth && result.frameHeight) {
829
+ this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
830
+ this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
831
+ this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
825
832
  }
826
- var bytes = result.bytesReceived - this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
827
- this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
833
+ var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
828
834
  kilobytes = bytes / 1024;
829
835
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
830
- this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
831
- this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
832
- this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
833
- if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
834
- this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
836
+ var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
837
+ if (currentPacketsLost < 0) {
838
+ currentPacketsLost = 0;
835
839
  }
836
- this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
837
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
838
- if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
839
- _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for ".concat(mediaType, " "), this.statsResults[mediaType][sendrecvType].packetsReceived);
840
+ var currentPacketsReceived = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
841
+ this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
842
+ if (currentPacketsReceived === 0) {
843
+ if (receiveSlot && sourceState === 'live') {
844
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ".concat(idAndCsi, ". Total packets received on slot: "), result.packetsReceived);
845
+ }
840
846
  }
841
847
 
842
848
  // Check the over all packet Lost ratio
843
- this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0 ? this.statsResults[mediaType][sendrecvType].currentPacketsLost / (this.statsResults[mediaType][sendrecvType].packetsReceived + this.statsResults[mediaType][sendrecvType].currentPacketsLost) : 0;
849
+ this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (currentPacketsReceived + currentPacketsLost) : 0;
844
850
  if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
845
- _loggerProxy.default.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
851
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
846
852
  }
847
853
 
848
854
  // TODO: check the packet loss value is negative values here
@@ -878,55 +884,19 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
878
884
  }
879
885
 
880
886
  /**
881
- * Processes remote and local candidate result and stores
887
+ * extracts the local Ip address from the statsResult object by looking at stats results candidates
888
+ * and matches that ID with the successful candidate pair. It looks at the type of local candidate it is
889
+ * and then extracts the IP address from the relatedAddress or address property based on conditions known in webrtc
890
+ * note, there are known incompatibilities and it is possible for this to set undefined, or for the IP address to be the public IP address
891
+ * for example, firefox does not set the relayProtocol, and if the user is behind a NAT it might be the public IP
882
892
  * @private
883
- * @param {*} result
884
- * @param {*} type
885
- * @param {boolean} isSender
886
- * @param {boolean} isRemote
887
- *
893
+ * @param {string} successfulCandidatePairId - The ID of the successful candidate pair.
894
+ * @param {Object} candidates - the stats result candidates
888
895
  * @returns {void}
889
896
  */
890
897
  }, {
891
- key: "processTrackResult",
898
+ key: "compareSentAndReceived",
892
899
  value:
893
- /**
894
- * Process Track results
895
- *
896
- * @private
897
- * @param {*} result
898
- * @param {*} mediaType
899
- * @returns {void}
900
- * @memberof StatsAnalyzer
901
- */
902
- function processTrackResult(result, mediaType) {
903
- if (!result || result.type !== 'track') {
904
- return;
905
- }
906
- var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
907
- if (result.frameWidth && result.frameHeight) {
908
- this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
909
- this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
910
- this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
911
- this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
912
- }
913
- if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
914
- this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
915
- this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
916
- this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
917
- }
918
- if (result.trackIdentifier && !mediaType.includes('audio')) {
919
- this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
920
- var jitterBufferDelay = result && result.jitterBufferDelay;
921
- var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
922
- this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
923
-
924
- // Used to calculate the jitter
925
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
926
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
927
- }
928
- }
929
-
930
900
  /**
931
901
  *
932
902
  * @private
@@ -935,19 +905,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
935
905
  * @returns {void}
936
906
  * @memberof StatsAnalyzer
937
907
  */
938
- }, {
939
- key: "compareSentAndReceived",
940
- value: function compareSentAndReceived(result, type) {
908
+ function compareSentAndReceived(result, type) {
941
909
  // Don't compare on transceivers without a sender.
942
- if (!type || !this.statsResults.internal[type].send) {
910
+ if (!type || !this.statsResults[type].send) {
943
911
  return;
944
912
  }
945
913
  var mediaType = type;
946
- if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
947
- this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
948
- }
949
- var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
950
- this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
914
+ var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
951
915
  this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
952
916
  this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
953
917
  this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);