@webex/plugin-meetings 3.0.0-beta.34 → 3.0.0-beta.340

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 (392) hide show
  1. package/README.md +46 -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/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +709 -35
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/utils.js +45 -1
  17. package/dist/breakouts/utils.js.map +1 -1
  18. package/dist/common/errors/no-meeting-info.js +51 -0
  19. package/dist/common/errors/no-meeting-info.js.map +1 -0
  20. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  21. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +48 -7
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/common/logs/request.js +5 -1
  27. package/dist/common/logs/request.js.map +1 -1
  28. package/dist/common/queue.js +24 -9
  29. package/dist/common/queue.js.map +1 -1
  30. package/dist/config.js +5 -10
  31. package/dist/config.js.map +1 -1
  32. package/dist/constants.js +233 -29
  33. package/dist/constants.js.map +1 -1
  34. package/dist/controls-options-manager/enums.js +14 -2
  35. package/dist/controls-options-manager/enums.js.map +1 -1
  36. package/dist/controls-options-manager/index.js +109 -15
  37. package/dist/controls-options-manager/index.js.map +1 -1
  38. package/dist/controls-options-manager/types.js +7 -0
  39. package/dist/controls-options-manager/types.js.map +1 -0
  40. package/dist/controls-options-manager/util.js +309 -18
  41. package/dist/controls-options-manager/util.js.map +1 -1
  42. package/dist/index.js +112 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/interpretation/collection.js +23 -0
  45. package/dist/interpretation/collection.js.map +1 -0
  46. package/dist/interpretation/index.js +366 -0
  47. package/dist/interpretation/index.js.map +1 -0
  48. package/dist/interpretation/siLanguage.js +25 -0
  49. package/dist/interpretation/siLanguage.js.map +1 -0
  50. package/dist/locus-info/controlsUtils.js +91 -2
  51. package/dist/locus-info/controlsUtils.js.map +1 -1
  52. package/dist/locus-info/index.js +383 -62
  53. package/dist/locus-info/index.js.map +1 -1
  54. package/dist/locus-info/infoUtils.js +7 -1
  55. package/dist/locus-info/infoUtils.js.map +1 -1
  56. package/dist/locus-info/mediaSharesUtils.js +57 -1
  57. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  58. package/dist/locus-info/parser.js +249 -72
  59. package/dist/locus-info/parser.js.map +1 -1
  60. package/dist/locus-info/selfUtils.js +89 -14
  61. package/dist/locus-info/selfUtils.js.map +1 -1
  62. package/dist/media/index.js +62 -116
  63. package/dist/media/index.js.map +1 -1
  64. package/dist/media/properties.js +73 -124
  65. package/dist/media/properties.js.map +1 -1
  66. package/dist/mediaQualityMetrics/config.js +1 -204
  67. package/dist/mediaQualityMetrics/config.js.map +1 -1
  68. package/dist/meeting/in-meeting-actions.js +86 -2
  69. package/dist/meeting/in-meeting-actions.js.map +1 -1
  70. package/dist/meeting/index.js +3927 -2960
  71. package/dist/meeting/index.js.map +1 -1
  72. package/dist/meeting/locusMediaRequest.js +292 -0
  73. package/dist/meeting/locusMediaRequest.js.map +1 -0
  74. package/dist/meeting/muteState.js +224 -131
  75. package/dist/meeting/muteState.js.map +1 -1
  76. package/dist/meeting/request.js +260 -196
  77. package/dist/meeting/request.js.map +1 -1
  78. package/dist/meeting/util.js +601 -417
  79. package/dist/meeting/util.js.map +1 -1
  80. package/dist/meeting-info/index.js +73 -7
  81. package/dist/meeting-info/index.js.map +1 -1
  82. package/dist/meeting-info/meeting-info-v2.js +192 -51
  83. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  84. package/dist/meeting-info/util.js +1 -1
  85. package/dist/meeting-info/util.js.map +1 -1
  86. package/dist/meeting-info/utilv2.js +36 -36
  87. package/dist/meeting-info/utilv2.js.map +1 -1
  88. package/dist/meetings/collection.js +39 -0
  89. package/dist/meetings/collection.js.map +1 -1
  90. package/dist/meetings/index.js +424 -116
  91. package/dist/meetings/index.js.map +1 -1
  92. package/dist/meetings/meetings.types.js +7 -0
  93. package/dist/meetings/meetings.types.js.map +1 -0
  94. package/dist/meetings/request.js +2 -0
  95. package/dist/meetings/request.js.map +1 -1
  96. package/dist/meetings/util.js +72 -6
  97. package/dist/meetings/util.js.map +1 -1
  98. package/dist/member/index.js +58 -0
  99. package/dist/member/index.js.map +1 -1
  100. package/dist/member/types.js +25 -0
  101. package/dist/member/types.js.map +1 -0
  102. package/dist/member/util.js +132 -25
  103. package/dist/member/util.js.map +1 -1
  104. package/dist/members/collection.js +10 -0
  105. package/dist/members/collection.js.map +1 -1
  106. package/dist/members/index.js +102 -6
  107. package/dist/members/index.js.map +1 -1
  108. package/dist/members/request.js +106 -38
  109. package/dist/members/request.js.map +1 -1
  110. package/dist/members/types.js +15 -0
  111. package/dist/members/types.js.map +1 -0
  112. package/dist/members/util.js +326 -232
  113. package/dist/members/util.js.map +1 -1
  114. package/dist/metrics/constants.js +16 -5
  115. package/dist/metrics/constants.js.map +1 -1
  116. package/dist/metrics/index.js +1 -446
  117. package/dist/metrics/index.js.map +1 -1
  118. package/dist/multistream/mediaRequestManager.js +228 -58
  119. package/dist/multistream/mediaRequestManager.js.map +1 -1
  120. package/dist/multistream/receiveSlot.js +29 -16
  121. package/dist/multistream/receiveSlot.js.map +1 -1
  122. package/dist/multistream/receiveSlotManager.js +39 -36
  123. package/dist/multistream/receiveSlotManager.js.map +1 -1
  124. package/dist/multistream/remoteMedia.js +44 -18
  125. package/dist/multistream/remoteMedia.js.map +1 -1
  126. package/dist/multistream/remoteMediaGroup.js +60 -3
  127. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  128. package/dist/multistream/remoteMediaManager.js +209 -59
  129. package/dist/multistream/remoteMediaManager.js.map +1 -1
  130. package/dist/multistream/sendSlotManager.js +233 -0
  131. package/dist/multistream/sendSlotManager.js.map +1 -0
  132. package/dist/reachability/clusterReachability.js +356 -0
  133. package/dist/reachability/clusterReachability.js.map +1 -0
  134. package/dist/reachability/index.js +273 -391
  135. package/dist/reachability/index.js.map +1 -1
  136. package/dist/reachability/request.js +17 -8
  137. package/dist/reachability/request.js.map +1 -1
  138. package/dist/reachability/util.js +29 -0
  139. package/dist/reachability/util.js.map +1 -0
  140. package/dist/reconnection-manager/index.js +214 -170
  141. package/dist/reconnection-manager/index.js.map +1 -1
  142. package/dist/recording-controller/index.js +21 -2
  143. package/dist/recording-controller/index.js.map +1 -1
  144. package/dist/recording-controller/util.js +9 -8
  145. package/dist/recording-controller/util.js.map +1 -1
  146. package/dist/roap/index.js +62 -35
  147. package/dist/roap/index.js.map +1 -1
  148. package/dist/roap/request.js +112 -97
  149. package/dist/roap/request.js.map +1 -1
  150. package/dist/roap/turnDiscovery.js +95 -38
  151. package/dist/roap/turnDiscovery.js.map +1 -1
  152. package/dist/rtcMetrics/constants.js +12 -0
  153. package/dist/rtcMetrics/constants.js.map +1 -0
  154. package/dist/rtcMetrics/index.js +142 -0
  155. package/dist/rtcMetrics/index.js.map +1 -0
  156. package/dist/statsAnalyzer/index.js +181 -214
  157. package/dist/statsAnalyzer/index.js.map +1 -1
  158. package/dist/statsAnalyzer/mqaUtil.js +22 -18
  159. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  160. package/dist/types/annotation/annotation.types.d.ts +42 -0
  161. package/dist/types/annotation/constants.d.ts +31 -0
  162. package/dist/types/annotation/index.d.ts +117 -0
  163. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  164. package/dist/types/breakouts/events.d.ts +8 -0
  165. package/dist/types/breakouts/utils.d.ts +14 -0
  166. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  167. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  168. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  169. package/dist/types/common/logs/request.d.ts +2 -0
  170. package/dist/types/common/queue.d.ts +9 -7
  171. package/dist/types/config.d.ts +2 -7
  172. package/dist/types/constants.d.ts +201 -30
  173. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  174. package/dist/types/controls-options-manager/index.d.ts +17 -1
  175. package/dist/types/controls-options-manager/types.d.ts +43 -0
  176. package/dist/types/controls-options-manager/util.d.ts +1 -7
  177. package/dist/types/index.d.ts +6 -4
  178. package/dist/types/interpretation/collection.d.ts +5 -0
  179. package/dist/types/interpretation/index.d.ts +5 -0
  180. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  181. package/dist/types/locus-info/index.d.ts +57 -4
  182. package/dist/types/locus-info/parser.d.ts +66 -6
  183. package/dist/types/media/index.d.ts +2 -0
  184. package/dist/types/media/properties.d.ts +34 -48
  185. package/dist/types/mediaQualityMetrics/config.d.ts +0 -128
  186. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  187. package/dist/types/meeting/index.d.ts +506 -512
  188. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  189. package/dist/types/meeting/muteState.d.ts +93 -25
  190. package/dist/types/meeting/request.d.ts +72 -43
  191. package/dist/types/meeting/util.d.ts +101 -1
  192. package/dist/types/meeting-info/index.d.ts +13 -1
  193. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  194. package/dist/types/meetings/collection.d.ts +17 -0
  195. package/dist/types/meetings/index.d.ts +91 -21
  196. package/dist/types/meetings/meetings.types.d.ts +4 -0
  197. package/dist/types/member/index.d.ts +14 -0
  198. package/dist/types/member/types.d.ts +32 -0
  199. package/dist/types/members/collection.d.ts +5 -0
  200. package/dist/types/members/index.d.ts +35 -2
  201. package/dist/types/members/request.d.ts +73 -9
  202. package/dist/types/members/types.d.ts +25 -0
  203. package/dist/types/members/util.d.ts +214 -1
  204. package/dist/types/metrics/constants.d.ts +15 -4
  205. package/dist/types/metrics/index.d.ts +4 -111
  206. package/dist/types/multistream/mediaRequestManager.d.ts +72 -5
  207. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  208. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  209. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  210. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  211. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  212. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  213. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  214. package/dist/types/reachability/index.d.ts +60 -95
  215. package/dist/types/reachability/request.d.ts +7 -3
  216. package/dist/types/reachability/util.d.ts +8 -0
  217. package/dist/types/reconnection-manager/index.d.ts +19 -0
  218. package/dist/types/recording-controller/index.d.ts +15 -1
  219. package/dist/types/recording-controller/util.d.ts +5 -4
  220. package/dist/types/roap/index.d.ts +2 -1
  221. package/dist/types/roap/request.d.ts +15 -11
  222. package/dist/types/roap/turnDiscovery.d.ts +21 -3
  223. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  224. package/dist/types/rtcMetrics/index.d.ts +54 -0
  225. package/dist/types/statsAnalyzer/index.d.ts +29 -11
  226. package/dist/types/webinar/collection.d.ts +16 -0
  227. package/dist/types/webinar/index.d.ts +5 -0
  228. package/dist/webinar/collection.js +44 -0
  229. package/dist/webinar/collection.js.map +1 -0
  230. package/dist/webinar/index.js +69 -0
  231. package/dist/webinar/index.js.map +1 -0
  232. package/package.json +22 -19
  233. package/src/annotation/annotation.types.ts +50 -0
  234. package/src/annotation/constants.ts +36 -0
  235. package/src/annotation/index.ts +328 -0
  236. package/src/breakouts/README.md +42 -12
  237. package/src/breakouts/breakout.ts +67 -9
  238. package/src/breakouts/edit-lock-error.ts +25 -0
  239. package/src/breakouts/events.ts +56 -0
  240. package/src/breakouts/index.ts +592 -20
  241. package/src/breakouts/utils.ts +42 -0
  242. package/src/common/errors/no-meeting-info.ts +24 -0
  243. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  244. package/src/common/errors/webex-errors.ts +44 -2
  245. package/src/common/logs/logger-proxy.ts +1 -1
  246. package/src/common/logs/request.ts +5 -1
  247. package/src/common/queue.ts +22 -8
  248. package/src/config.ts +4 -9
  249. package/src/constants.ts +224 -20
  250. package/src/controls-options-manager/enums.ts +12 -0
  251. package/src/controls-options-manager/index.ts +116 -21
  252. package/src/controls-options-manager/types.ts +59 -0
  253. package/src/controls-options-manager/util.ts +294 -14
  254. package/src/index.ts +40 -0
  255. package/src/interpretation/README.md +60 -0
  256. package/src/interpretation/collection.ts +19 -0
  257. package/src/interpretation/index.ts +332 -0
  258. package/src/interpretation/siLanguage.ts +18 -0
  259. package/src/locus-info/controlsUtils.ts +108 -0
  260. package/src/locus-info/index.ts +413 -59
  261. package/src/locus-info/infoUtils.ts +10 -2
  262. package/src/locus-info/mediaSharesUtils.ts +64 -0
  263. package/src/locus-info/parser.ts +258 -47
  264. package/src/locus-info/selfUtils.ts +81 -5
  265. package/src/media/index.ts +102 -122
  266. package/src/media/properties.ts +87 -110
  267. package/src/mediaQualityMetrics/config.ts +0 -135
  268. package/src/meeting/in-meeting-actions.ts +171 -3
  269. package/src/meeting/index.ts +3276 -2555
  270. package/src/meeting/locusMediaRequest.ts +313 -0
  271. package/src/meeting/muteState.ts +223 -136
  272. package/src/meeting/request.ts +177 -121
  273. package/src/meeting/util.ts +588 -394
  274. package/src/meeting-info/index.ts +81 -8
  275. package/src/meeting-info/meeting-info-v2.ts +170 -14
  276. package/src/meeting-info/util.ts +1 -1
  277. package/src/meeting-info/utilv2.ts +23 -23
  278. package/src/meetings/collection.ts +33 -0
  279. package/src/meetings/index.ts +454 -125
  280. package/src/meetings/meetings.types.ts +12 -0
  281. package/src/meetings/request.ts +2 -0
  282. package/src/meetings/util.ts +80 -11
  283. package/src/member/index.ts +58 -0
  284. package/src/member/types.ts +38 -0
  285. package/src/member/util.ts +141 -25
  286. package/src/members/collection.ts +8 -0
  287. package/src/members/index.ts +134 -8
  288. package/src/members/request.ts +97 -17
  289. package/src/members/types.ts +29 -0
  290. package/src/members/util.ts +333 -240
  291. package/src/metrics/constants.ts +15 -4
  292. package/src/metrics/index.ts +1 -469
  293. package/src/multistream/mediaRequestManager.ts +277 -82
  294. package/src/multistream/receiveSlot.ts +31 -17
  295. package/src/multistream/receiveSlotManager.ts +34 -24
  296. package/src/multistream/remoteMedia.ts +27 -2
  297. package/src/multistream/remoteMediaGroup.ts +59 -0
  298. package/src/multistream/remoteMediaManager.ts +148 -30
  299. package/src/multistream/sendSlotManager.ts +170 -0
  300. package/src/reachability/clusterReachability.ts +320 -0
  301. package/src/reachability/index.ts +236 -342
  302. package/src/reachability/request.ts +17 -8
  303. package/src/reachability/util.ts +24 -0
  304. package/src/reconnection-manager/index.ts +128 -106
  305. package/src/recording-controller/index.ts +20 -3
  306. package/src/recording-controller/util.ts +26 -9
  307. package/src/roap/index.ts +63 -32
  308. package/src/roap/request.ts +100 -104
  309. package/src/roap/turnDiscovery.ts +48 -26
  310. package/src/rtcMetrics/constants.ts +3 -0
  311. package/src/rtcMetrics/index.ts +124 -0
  312. package/src/statsAnalyzer/index.ts +218 -289
  313. package/src/statsAnalyzer/mqaUtil.ts +28 -30
  314. package/src/webinar/collection.ts +31 -0
  315. package/src/webinar/index.ts +62 -0
  316. package/test/integration/spec/converged-space-meetings.js +60 -3
  317. package/test/integration/spec/journey.js +320 -261
  318. package/test/integration/spec/space-meeting.js +76 -3
  319. package/test/unit/spec/annotation/index.ts +418 -0
  320. package/test/unit/spec/breakouts/breakout.ts +118 -28
  321. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  322. package/test/unit/spec/breakouts/events.ts +89 -0
  323. package/test/unit/spec/breakouts/index.ts +1395 -69
  324. package/test/unit/spec/breakouts/utils.js +52 -1
  325. package/test/unit/spec/common/queue.js +31 -2
  326. package/test/unit/spec/controls-options-manager/index.js +163 -0
  327. package/test/unit/spec/controls-options-manager/util.js +576 -60
  328. package/test/unit/spec/fixture/locus.js +1 -0
  329. package/test/unit/spec/interpretation/collection.ts +15 -0
  330. package/test/unit/spec/interpretation/index.ts +589 -0
  331. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  332. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  333. package/test/unit/spec/locus-info/index.js +1304 -33
  334. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  335. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  336. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  337. package/test/unit/spec/locus-info/parser.js +116 -35
  338. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  339. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  340. package/test/unit/spec/media/index.ts +120 -37
  341. package/test/unit/spec/media/properties.ts +2 -2
  342. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  343. package/test/unit/spec/meeting/index.js +5849 -2014
  344. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  345. package/test/unit/spec/meeting/muteState.js +402 -213
  346. package/test/unit/spec/meeting/request.js +483 -49
  347. package/test/unit/spec/meeting/utils.js +679 -64
  348. package/test/unit/spec/meeting-info/index.js +300 -0
  349. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  350. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  351. package/test/unit/spec/meetings/collection.js +26 -0
  352. package/test/unit/spec/meetings/index.js +1231 -212
  353. package/test/unit/spec/meetings/utils.js +202 -2
  354. package/test/unit/spec/member/index.js +61 -6
  355. package/test/unit/spec/member/util.js +510 -34
  356. package/test/unit/spec/members/index.js +432 -1
  357. package/test/unit/spec/members/request.js +206 -27
  358. package/test/unit/spec/members/utils.js +210 -0
  359. package/test/unit/spec/metrics/index.js +1 -50
  360. package/test/unit/spec/multistream/mediaRequestManager.ts +776 -162
  361. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  362. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  363. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  364. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  365. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  366. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  367. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  368. package/test/unit/spec/reachability/index.ts +486 -13
  369. package/test/unit/spec/reachability/request.js +68 -0
  370. package/test/unit/spec/reachability/util.ts +40 -0
  371. package/test/unit/spec/reconnection-manager/index.js +117 -11
  372. package/test/unit/spec/recording-controller/index.js +294 -218
  373. package/test/unit/spec/recording-controller/util.js +223 -96
  374. package/test/unit/spec/roap/index.ts +174 -63
  375. package/test/unit/spec/roap/request.ts +226 -85
  376. package/test/unit/spec/roap/turnDiscovery.ts +76 -34
  377. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  378. package/test/unit/spec/stats-analyzer/index.js +231 -7
  379. package/test/unit/spec/webinar/collection.ts +13 -0
  380. package/test/unit/spec/webinar/index.ts +60 -0
  381. package/test/utils/integrationTestUtils.js +46 -0
  382. package/test/utils/testUtils.js +0 -52
  383. package/dist/meeting/effectsState.js +0 -262
  384. package/dist/meeting/effectsState.js.map +0 -1
  385. package/dist/metrics/config.js +0 -289
  386. package/dist/metrics/config.js.map +0 -1
  387. package/dist/types/meeting/effectsState.d.ts +0 -42
  388. package/dist/types/metrics/config.d.ts +0 -169
  389. package/src/index.js +0 -16
  390. package/src/meeting/effectsState.ts +0 -211
  391. package/src/metrics/config.ts +0 -485
  392. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -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
  *
@@ -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
 
@@ -528,28 +570,16 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
528
570
  return (0, _keys.default)(_this7.statsResults).filter(function (key) {
529
571
  return key.startsWith(keyPrefix);
530
572
  }).reduce(function (prev, cur) {
531
- return prev + (_this7.statsResults[cur].recv[value] || 0);
573
+ var _this7$statsResults$c;
574
+ return prev + (((_this7$statsResults$c = _this7.statsResults[cur]) === null || _this7$statsResults$c === void 0 ? void 0 : _this7$statsResults$c.recv[value]) || 0);
532
575
  }, 0);
533
576
  };
534
577
  var getPreviousStatsTotals = function getPreviousStatsTotals(keyPrefix, value) {
535
578
  return (0, _keys.default)(_this7.statsResults).filter(function (key) {
536
579
  return key.startsWith(keyPrefix);
537
580
  }).reduce(function (prev, cur) {
538
- return prev + (_this7.lastStatsResults[cur].recv[value] || 0);
539
- }, 0);
540
- };
541
- var getCurrentResolutionsStatsTotals = function getCurrentResolutionsStatsTotals(keyPrefix, value) {
542
- return (0, _keys.default)(_this7.statsResults).filter(function (key) {
543
- return key.startsWith(keyPrefix);
544
- }).reduce(function (prev, cur) {
545
- return prev + (_this7.statsResults.resolutions[cur].recv[value] || 0);
546
- }, 0);
547
- };
548
- var getPreviousResolutionsStatsTotals = function getPreviousResolutionsStatsTotals(keyPrefix, value) {
549
- return (0, _keys.default)(_this7.statsResults).filter(function (key) {
550
- return key.startsWith(keyPrefix);
551
- }).reduce(function (prev, cur) {
552
- return prev + (_this7.lastStatsResults.resolutions[cur].recv[value] || 0);
581
+ var _this7$lastStatsResul;
582
+ return prev + (((_this7$lastStatsResul = _this7.lastStatsResults[cur]) === null || _this7$lastStatsResul === void 0 ? void 0 : _this7$lastStatsResul.recv[value]) || 0);
553
583
  }, 0);
554
584
  };
555
585
  if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
@@ -558,10 +588,10 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
558
588
  var currentStats = this.statsResults['audio-send'].send;
559
589
  var previousStats = this.lastStatsResults['audio-send'].send;
560
590
  if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
561
- _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);
562
592
  } else {
563
593
  if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
564
- _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);
565
595
  }
566
596
  if (currentStats.audioLevel === 0) {
567
597
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
@@ -576,9 +606,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
576
606
  var currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');
577
607
  var previousSamplesReceived = getPreviousStatsTotals('audio-recv', 'totalSamplesReceived');
578
608
  if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
579
- _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);
580
610
  } else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
581
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received");
611
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received", currentSamplesReceived);
582
612
  }
583
613
  this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
584
614
  }
@@ -587,13 +617,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
587
617
  var _currentStats = this.statsResults['video-send'].send;
588
618
  var _previousStats = this.lastStatsResults['video-send'].send;
589
619
  if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
590
- _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);
591
621
  } else {
592
622
  if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
593
- _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);
594
624
  }
595
- if (this.statsResults.resolutions['video-send'].send.framesSent === this.lastStatsResults.resolutions['video-send'].send.framesSent || this.statsResults.resolutions['video-send'].send.framesSent === 0) {
596
- _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);
597
627
  }
598
628
  }
599
629
  this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
@@ -602,23 +632,23 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
602
632
  // compare video stats received
603
633
  var _currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');
604
634
  var _previousPacketsReceived = getPreviousStatsTotals('video-recv', 'totalPacketsReceived');
605
- var currentFramesReceived = getCurrentResolutionsStatsTotals('video-recv', 'framesReceived');
606
- var previousFramesReceived = getPreviousResolutionsStatsTotals('video-recv', 'framesReceived');
635
+ var currentFramesReceived = getCurrentStatsTotals('video-recv', 'framesReceived');
636
+ var previousFramesReceived = getPreviousStatsTotals('video-recv', 'framesReceived');
607
637
  var currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
608
638
  var previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
609
- var currentFramesDropped = getCurrentResolutionsStatsTotals('video-recv', 'framesDropped');
610
- var previousFramesDropped = getPreviousResolutionsStatsTotals('video-recv', 'framesDropped');
639
+ var currentFramesDropped = getCurrentStatsTotals('video-recv', 'framesDropped');
640
+ var previousFramesDropped = getPreviousStatsTotals('video-recv', 'framesDropped');
611
641
  if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
612
- _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);
613
643
  } else {
614
644
  if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
615
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received");
645
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received", currentFramesReceived);
616
646
  }
617
647
  if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
618
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded");
648
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded", currentFramesDecoded);
619
649
  }
620
650
  if (currentFramesDropped - previousFramesDropped > 10) {
621
- _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);
622
652
  }
623
653
  }
624
654
  this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
@@ -629,13 +659,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
629
659
  var _currentStats2 = this.statsResults['video-share-send'].send;
630
660
  var _previousStats2 = this.lastStatsResults['video-share-send'].send;
631
661
  if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
632
- _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);
633
663
  } else {
634
664
  if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
635
- _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);
636
666
  }
637
- 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) {
638
- _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);
639
669
  }
640
670
  }
641
671
  }
@@ -644,23 +674,23 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
644
674
  // compare share stats received
645
675
  var _currentPacketsReceived2 = getCurrentStatsTotals('video-share-recv', 'totalPacketsReceived');
646
676
  var _previousPacketsReceived2 = getPreviousStatsTotals('video-share-recv', 'totalPacketsReceived');
647
- var _currentFramesReceived = getCurrentResolutionsStatsTotals('video-share-recv', 'framesReceived');
648
- var _previousFramesReceived = getPreviousResolutionsStatsTotals('video-share-recv', 'framesReceived');
677
+ var _currentFramesReceived = getCurrentStatsTotals('video-share-recv', 'framesReceived');
678
+ var _previousFramesReceived = getPreviousStatsTotals('video-share-recv', 'framesReceived');
649
679
  var _currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
650
680
  var _previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
651
- var _currentFramesDropped = getCurrentResolutionsStatsTotals('video-share-recv', 'framesDropped');
652
- var _previousFramesDropped = getPreviousResolutionsStatsTotals('video-share-recv', 'framesDropped');
681
+ var _currentFramesDropped = getCurrentStatsTotals('video-share-recv', 'framesDropped');
682
+ var _previousFramesDropped = getPreviousStatsTotals('video-share-recv', 'framesDropped');
653
683
  if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
654
- _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);
655
685
  } else {
656
686
  if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
657
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received");
687
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received", _currentFramesReceived);
658
688
  }
659
689
  if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
660
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded");
690
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded", _currentFramesDecoded);
661
691
  }
662
692
  if (_currentFramesDropped - _previousFramesDropped > 10) {
663
- _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);
664
694
  }
665
695
  }
666
696
 
@@ -749,28 +779,16 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
749
779
  var sendrecvType = _constants.STATS.SEND_DIRECTION;
750
780
  if (result.bytesSent) {
751
781
  var kilobytes = 0;
752
- if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
753
- this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
754
- }
755
- if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {
756
- this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
757
- }
758
- if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
759
- 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;
760
787
  }
761
- var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
762
- this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
763
- kilobytes = bytes / 1024;
764
788
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
765
- this.statsResults[mediaType].bytesSent = kilobytes;
766
- this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
767
- this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
768
- this.statsResults.internal[mediaType].outboundRtpId = result.id;
769
- if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
770
- this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
771
- }
772
- this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
773
- 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;
774
792
 
775
793
  // Data saved to send MQA metrics
776
794
 
@@ -804,41 +822,32 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
804
822
  var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
805
823
  if (result.bytesReceived) {
806
824
  var kilobytes = 0;
807
- if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
808
- this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
809
- }
810
- if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
811
- this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;
812
- }
813
- if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {
814
- this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;
815
- }
816
- if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
817
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
818
- }
819
- if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
820
- this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
825
+ var receiveSlot = this.receiveSlotCallback(result.ssrc);
826
+ var idAndCsi = receiveSlot ? "id: \"".concat(receiveSlot.id || '', "\"").concat(receiveSlot.csi ? " and csi: ".concat(receiveSlot.csi) : '') : '';
827
+ if (result.frameWidth && result.frameHeight) {
828
+ this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
829
+ this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
830
+ this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
821
831
  }
822
- var bytes = result.bytesReceived - this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
823
- this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
832
+ var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
824
833
  kilobytes = bytes / 1024;
825
834
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
826
- this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
827
- this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
828
- this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
829
- if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
830
- this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
835
+ var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
836
+ if (currentPacketsLost < 0) {
837
+ currentPacketsLost = 0;
831
838
  }
832
- this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
833
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
834
- if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
835
- _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for ".concat(mediaType, " "), this.statsResults[mediaType][sendrecvType].packetsReceived);
839
+ var currentPacketsReceived = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
840
+ this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
841
+ if (currentPacketsReceived === 0) {
842
+ if (receiveSlot) {
843
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ".concat(idAndCsi), currentPacketsReceived);
844
+ }
836
845
  }
837
846
 
838
847
  // Check the over all packet Lost ratio
839
- 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;
848
+ this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (currentPacketsReceived + currentPacketsLost) : 0;
840
849
  if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
841
- _loggerProxy.default.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
850
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
842
851
  }
843
852
 
844
853
  // TODO: check the packet loss value is negative values here
@@ -874,55 +883,19 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
874
883
  }
875
884
 
876
885
  /**
877
- * Processes remote and local candidate result and stores
886
+ * extracts the local Ip address from the statsResult object by looking at stats results candidates
887
+ * and matches that ID with the successful candidate pair. It looks at the type of local candidate it is
888
+ * and then extracts the IP address from the relatedAddress or address property based on conditions known in webrtc
889
+ * 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
890
+ * for example, firefox does not set the relayProtocol, and if the user is behind a NAT it might be the public IP
878
891
  * @private
879
- * @param {*} result
880
- * @param {*} type
881
- * @param {boolean} isSender
882
- * @param {boolean} isRemote
883
- *
892
+ * @param {string} successfulCandidatePairId - The ID of the successful candidate pair.
893
+ * @param {Object} candidates - the stats result candidates
884
894
  * @returns {void}
885
895
  */
886
896
  }, {
887
- key: "processTrackResult",
897
+ key: "compareSentAndReceived",
888
898
  value:
889
- /**
890
- * Process Track results
891
- *
892
- * @private
893
- * @param {*} result
894
- * @param {*} mediaType
895
- * @returns {void}
896
- * @memberof StatsAnalyzer
897
- */
898
- function processTrackResult(result, mediaType) {
899
- if (!result || result.type !== 'track') {
900
- return;
901
- }
902
- var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
903
- if (result.frameWidth && result.frameHeight) {
904
- this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
905
- this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
906
- this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
907
- this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
908
- }
909
- if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
910
- this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
911
- this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
912
- this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
913
- }
914
- if (result.trackIdentifier && !mediaType.includes('audio')) {
915
- this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
916
- var jitterBufferDelay = result && result.jitterBufferDelay;
917
- var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
918
- this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
919
-
920
- // Used to calculate the jitter
921
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
922
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
923
- }
924
- }
925
-
926
899
  /**
927
900
  *
928
901
  * @private
@@ -931,19 +904,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
931
904
  * @returns {void}
932
905
  * @memberof StatsAnalyzer
933
906
  */
934
- }, {
935
- key: "compareSentAndReceived",
936
- value: function compareSentAndReceived(result, type) {
907
+ function compareSentAndReceived(result, type) {
937
908
  // Don't compare on transceivers without a sender.
938
- if (!type || !this.statsResults.internal[type].send) {
909
+ if (!type || !this.statsResults[type].send) {
939
910
  return;
940
911
  }
941
912
  var mediaType = type;
942
- if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
943
- this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
944
- }
945
- var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
946
- this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
913
+ var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
947
914
  this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
948
915
  this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
949
916
  this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);