@webex/plugin-meetings 3.0.0-beta.33 → 3.0.0-beta.331

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 (378) 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 +4 -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 +61 -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/meeting/in-meeting-actions.js +86 -2
  67. package/dist/meeting/in-meeting-actions.js.map +1 -1
  68. package/dist/meeting/index.js +3917 -2960
  69. package/dist/meeting/index.js.map +1 -1
  70. package/dist/meeting/locusMediaRequest.js +292 -0
  71. package/dist/meeting/locusMediaRequest.js.map +1 -0
  72. package/dist/meeting/muteState.js +230 -124
  73. package/dist/meeting/muteState.js.map +1 -1
  74. package/dist/meeting/request.js +260 -196
  75. package/dist/meeting/request.js.map +1 -1
  76. package/dist/meeting/util.js +601 -417
  77. package/dist/meeting/util.js.map +1 -1
  78. package/dist/meeting-info/index.js +73 -7
  79. package/dist/meeting-info/index.js.map +1 -1
  80. package/dist/meeting-info/meeting-info-v2.js +192 -51
  81. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  82. package/dist/meeting-info/util.js +1 -1
  83. package/dist/meeting-info/util.js.map +1 -1
  84. package/dist/meeting-info/utilv2.js +36 -36
  85. package/dist/meeting-info/utilv2.js.map +1 -1
  86. package/dist/meetings/collection.js +39 -0
  87. package/dist/meetings/collection.js.map +1 -1
  88. package/dist/meetings/index.js +424 -116
  89. package/dist/meetings/index.js.map +1 -1
  90. package/dist/meetings/meetings.types.js +7 -0
  91. package/dist/meetings/meetings.types.js.map +1 -0
  92. package/dist/meetings/request.js +2 -0
  93. package/dist/meetings/request.js.map +1 -1
  94. package/dist/meetings/util.js +72 -6
  95. package/dist/meetings/util.js.map +1 -1
  96. package/dist/member/index.js +58 -0
  97. package/dist/member/index.js.map +1 -1
  98. package/dist/member/types.js +25 -0
  99. package/dist/member/types.js.map +1 -0
  100. package/dist/member/util.js +132 -25
  101. package/dist/member/util.js.map +1 -1
  102. package/dist/members/collection.js +10 -0
  103. package/dist/members/collection.js.map +1 -1
  104. package/dist/members/index.js +102 -6
  105. package/dist/members/index.js.map +1 -1
  106. package/dist/members/request.js +106 -38
  107. package/dist/members/request.js.map +1 -1
  108. package/dist/members/types.js +15 -0
  109. package/dist/members/types.js.map +1 -0
  110. package/dist/members/util.js +326 -232
  111. package/dist/members/util.js.map +1 -1
  112. package/dist/metrics/constants.js +16 -5
  113. package/dist/metrics/constants.js.map +1 -1
  114. package/dist/metrics/index.js +1 -468
  115. package/dist/metrics/index.js.map +1 -1
  116. package/dist/multistream/mediaRequestManager.js +228 -58
  117. package/dist/multistream/mediaRequestManager.js.map +1 -1
  118. package/dist/multistream/receiveSlot.js +29 -16
  119. package/dist/multistream/receiveSlot.js.map +1 -1
  120. package/dist/multistream/receiveSlotManager.js +39 -36
  121. package/dist/multistream/receiveSlotManager.js.map +1 -1
  122. package/dist/multistream/remoteMedia.js +44 -18
  123. package/dist/multistream/remoteMedia.js.map +1 -1
  124. package/dist/multistream/remoteMediaGroup.js +60 -3
  125. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  126. package/dist/multistream/remoteMediaManager.js +209 -59
  127. package/dist/multistream/remoteMediaManager.js.map +1 -1
  128. package/dist/multistream/sendSlotManager.js +233 -0
  129. package/dist/multistream/sendSlotManager.js.map +1 -0
  130. package/dist/reachability/index.js +225 -59
  131. package/dist/reachability/index.js.map +1 -1
  132. package/dist/reachability/request.js +17 -8
  133. package/dist/reachability/request.js.map +1 -1
  134. package/dist/reconnection-manager/index.js +214 -170
  135. package/dist/reconnection-manager/index.js.map +1 -1
  136. package/dist/recording-controller/index.js +21 -2
  137. package/dist/recording-controller/index.js.map +1 -1
  138. package/dist/recording-controller/util.js +9 -8
  139. package/dist/recording-controller/util.js.map +1 -1
  140. package/dist/roap/index.js +62 -32
  141. package/dist/roap/index.js.map +1 -1
  142. package/dist/roap/request.js +112 -97
  143. package/dist/roap/request.js.map +1 -1
  144. package/dist/roap/turnDiscovery.js +95 -36
  145. package/dist/roap/turnDiscovery.js.map +1 -1
  146. package/dist/rtcMetrics/constants.js +12 -0
  147. package/dist/rtcMetrics/constants.js.map +1 -0
  148. package/dist/rtcMetrics/index.js +142 -0
  149. package/dist/rtcMetrics/index.js.map +1 -0
  150. package/dist/statsAnalyzer/index.js +107 -79
  151. package/dist/statsAnalyzer/index.js.map +1 -1
  152. package/dist/statsAnalyzer/mqaUtil.js +27 -26
  153. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  154. package/dist/types/annotation/annotation.types.d.ts +42 -0
  155. package/dist/types/annotation/constants.d.ts +31 -0
  156. package/dist/types/annotation/index.d.ts +117 -0
  157. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  158. package/dist/types/breakouts/events.d.ts +8 -0
  159. package/dist/types/breakouts/utils.d.ts +14 -0
  160. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  161. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  162. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  163. package/dist/types/common/logs/request.d.ts +2 -0
  164. package/dist/types/common/queue.d.ts +9 -7
  165. package/dist/types/config.d.ts +1 -7
  166. package/dist/types/constants.d.ts +201 -30
  167. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  168. package/dist/types/controls-options-manager/index.d.ts +17 -1
  169. package/dist/types/controls-options-manager/types.d.ts +43 -0
  170. package/dist/types/controls-options-manager/util.d.ts +1 -7
  171. package/dist/types/index.d.ts +6 -4
  172. package/dist/types/interpretation/collection.d.ts +5 -0
  173. package/dist/types/interpretation/index.d.ts +5 -0
  174. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  175. package/dist/types/locus-info/index.d.ts +57 -4
  176. package/dist/types/locus-info/parser.d.ts +67 -6
  177. package/dist/types/media/index.d.ts +2 -0
  178. package/dist/types/media/properties.d.ts +34 -48
  179. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  180. package/dist/types/meeting/index.d.ts +502 -512
  181. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  182. package/dist/types/meeting/muteState.d.ts +99 -23
  183. package/dist/types/meeting/request.d.ts +72 -43
  184. package/dist/types/meeting/util.d.ts +101 -1
  185. package/dist/types/meeting-info/index.d.ts +13 -1
  186. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  187. package/dist/types/meetings/collection.d.ts +17 -0
  188. package/dist/types/meetings/index.d.ts +101 -21
  189. package/dist/types/meetings/meetings.types.d.ts +4 -0
  190. package/dist/types/member/index.d.ts +14 -0
  191. package/dist/types/member/types.d.ts +32 -0
  192. package/dist/types/members/collection.d.ts +5 -0
  193. package/dist/types/members/index.d.ts +35 -2
  194. package/dist/types/members/request.d.ts +73 -9
  195. package/dist/types/members/types.d.ts +25 -0
  196. package/dist/types/members/util.d.ts +214 -1
  197. package/dist/types/metrics/constants.d.ts +15 -4
  198. package/dist/types/metrics/index.d.ts +4 -119
  199. package/dist/types/multistream/mediaRequestManager.d.ts +72 -5
  200. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  201. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  202. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  203. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  204. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  205. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  206. package/dist/types/reachability/index.d.ts +61 -7
  207. package/dist/types/reachability/request.d.ts +7 -3
  208. package/dist/types/reconnection-manager/index.d.ts +19 -0
  209. package/dist/types/recording-controller/index.d.ts +15 -1
  210. package/dist/types/recording-controller/util.d.ts +5 -4
  211. package/dist/types/roap/index.d.ts +2 -1
  212. package/dist/types/roap/request.d.ts +15 -11
  213. package/dist/types/roap/turnDiscovery.d.ts +21 -3
  214. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  215. package/dist/types/rtcMetrics/index.d.ts +54 -0
  216. package/dist/types/statsAnalyzer/index.d.ts +7 -1
  217. package/dist/types/webinar/collection.d.ts +16 -0
  218. package/dist/types/webinar/index.d.ts +5 -0
  219. package/dist/webinar/collection.js +44 -0
  220. package/dist/webinar/collection.js.map +1 -0
  221. package/dist/webinar/index.js +69 -0
  222. package/dist/webinar/index.js.map +1 -0
  223. package/package.json +24 -20
  224. package/src/annotation/annotation.types.ts +50 -0
  225. package/src/annotation/constants.ts +36 -0
  226. package/src/annotation/index.ts +328 -0
  227. package/src/breakouts/README.md +42 -12
  228. package/src/breakouts/breakout.ts +67 -9
  229. package/src/breakouts/edit-lock-error.ts +25 -0
  230. package/src/breakouts/events.ts +56 -0
  231. package/src/breakouts/index.ts +592 -20
  232. package/src/breakouts/utils.ts +42 -0
  233. package/src/common/errors/no-meeting-info.ts +24 -0
  234. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  235. package/src/common/errors/webex-errors.ts +44 -2
  236. package/src/common/logs/logger-proxy.ts +1 -1
  237. package/src/common/logs/request.ts +5 -1
  238. package/src/common/queue.ts +22 -8
  239. package/src/config.ts +3 -9
  240. package/src/constants.ts +224 -20
  241. package/src/controls-options-manager/enums.ts +12 -0
  242. package/src/controls-options-manager/index.ts +116 -21
  243. package/src/controls-options-manager/types.ts +59 -0
  244. package/src/controls-options-manager/util.ts +294 -14
  245. package/src/index.ts +40 -0
  246. package/src/interpretation/README.md +60 -0
  247. package/src/interpretation/collection.ts +19 -0
  248. package/src/interpretation/index.ts +332 -0
  249. package/src/interpretation/siLanguage.ts +18 -0
  250. package/src/locus-info/controlsUtils.ts +108 -0
  251. package/src/locus-info/index.ts +413 -59
  252. package/src/locus-info/infoUtils.ts +10 -2
  253. package/src/locus-info/mediaSharesUtils.ts +64 -0
  254. package/src/locus-info/parser.ts +258 -47
  255. package/src/locus-info/selfUtils.ts +81 -5
  256. package/src/media/index.ts +102 -122
  257. package/src/media/properties.ts +87 -110
  258. package/src/meeting/in-meeting-actions.ts +171 -3
  259. package/src/meeting/index.ts +3267 -2555
  260. package/src/meeting/locusMediaRequest.ts +313 -0
  261. package/src/meeting/muteState.ts +229 -131
  262. package/src/meeting/request.ts +177 -121
  263. package/src/meeting/util.ts +588 -394
  264. package/src/meeting-info/index.ts +81 -8
  265. package/src/meeting-info/meeting-info-v2.ts +170 -14
  266. package/src/meeting-info/util.ts +1 -1
  267. package/src/meeting-info/utilv2.ts +23 -23
  268. package/src/meetings/collection.ts +33 -0
  269. package/src/meetings/index.ts +454 -125
  270. package/src/meetings/meetings.types.ts +12 -0
  271. package/src/meetings/request.ts +2 -0
  272. package/src/meetings/util.ts +80 -11
  273. package/src/member/index.ts +58 -0
  274. package/src/member/types.ts +38 -0
  275. package/src/member/util.ts +141 -25
  276. package/src/members/collection.ts +8 -0
  277. package/src/members/index.ts +134 -8
  278. package/src/members/request.ts +97 -17
  279. package/src/members/types.ts +29 -0
  280. package/src/members/util.ts +333 -240
  281. package/src/metrics/constants.ts +15 -4
  282. package/src/metrics/index.ts +1 -490
  283. package/src/multistream/mediaRequestManager.ts +277 -82
  284. package/src/multistream/receiveSlot.ts +31 -17
  285. package/src/multistream/receiveSlotManager.ts +34 -24
  286. package/src/multistream/remoteMedia.ts +27 -2
  287. package/src/multistream/remoteMediaGroup.ts +59 -0
  288. package/src/multistream/remoteMediaManager.ts +148 -30
  289. package/src/multistream/sendSlotManager.ts +170 -0
  290. package/src/reachability/index.ts +228 -37
  291. package/src/reachability/request.ts +17 -8
  292. package/src/reconnection-manager/index.ts +128 -106
  293. package/src/recording-controller/index.ts +20 -3
  294. package/src/recording-controller/util.ts +26 -9
  295. package/src/roap/index.ts +63 -32
  296. package/src/roap/request.ts +100 -104
  297. package/src/roap/turnDiscovery.ts +48 -26
  298. package/src/rtcMetrics/constants.ts +3 -0
  299. package/src/rtcMetrics/index.ts +124 -0
  300. package/src/statsAnalyzer/index.ts +135 -92
  301. package/src/statsAnalyzer/mqaUtil.ts +30 -28
  302. package/src/webinar/collection.ts +31 -0
  303. package/src/webinar/index.ts +62 -0
  304. package/test/integration/spec/converged-space-meetings.js +60 -3
  305. package/test/integration/spec/journey.js +320 -261
  306. package/test/integration/spec/space-meeting.js +76 -3
  307. package/test/unit/spec/annotation/index.ts +418 -0
  308. package/test/unit/spec/breakouts/breakout.ts +118 -28
  309. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  310. package/test/unit/spec/breakouts/events.ts +89 -0
  311. package/test/unit/spec/breakouts/index.ts +1395 -69
  312. package/test/unit/spec/breakouts/utils.js +52 -1
  313. package/test/unit/spec/common/queue.js +31 -2
  314. package/test/unit/spec/controls-options-manager/index.js +163 -0
  315. package/test/unit/spec/controls-options-manager/util.js +576 -60
  316. package/test/unit/spec/fixture/locus.js +1 -0
  317. package/test/unit/spec/interpretation/collection.ts +15 -0
  318. package/test/unit/spec/interpretation/index.ts +589 -0
  319. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  320. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  321. package/test/unit/spec/locus-info/index.js +1304 -33
  322. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  323. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  324. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  325. package/test/unit/spec/locus-info/parser.js +116 -35
  326. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  327. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  328. package/test/unit/spec/media/index.ts +104 -37
  329. package/test/unit/spec/media/properties.ts +2 -2
  330. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  331. package/test/unit/spec/meeting/index.js +5750 -2023
  332. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  333. package/test/unit/spec/meeting/muteState.js +408 -208
  334. package/test/unit/spec/meeting/request.js +483 -49
  335. package/test/unit/spec/meeting/utils.js +679 -64
  336. package/test/unit/spec/meeting-info/index.js +300 -0
  337. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  338. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  339. package/test/unit/spec/meetings/collection.js +26 -0
  340. package/test/unit/spec/meetings/index.js +1231 -212
  341. package/test/unit/spec/meetings/utils.js +202 -2
  342. package/test/unit/spec/member/index.js +61 -6
  343. package/test/unit/spec/member/util.js +510 -34
  344. package/test/unit/spec/members/index.js +432 -1
  345. package/test/unit/spec/members/request.js +206 -27
  346. package/test/unit/spec/members/utils.js +210 -0
  347. package/test/unit/spec/metrics/index.js +1 -50
  348. package/test/unit/spec/multistream/mediaRequestManager.ts +776 -162
  349. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  350. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  351. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  352. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  353. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  354. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  355. package/test/unit/spec/reachability/index.ts +549 -9
  356. package/test/unit/spec/reachability/request.js +68 -0
  357. package/test/unit/spec/reconnection-manager/index.js +117 -11
  358. package/test/unit/spec/recording-controller/index.js +294 -218
  359. package/test/unit/spec/recording-controller/util.js +223 -96
  360. package/test/unit/spec/roap/index.ts +178 -64
  361. package/test/unit/spec/roap/request.ts +203 -85
  362. package/test/unit/spec/roap/turnDiscovery.ts +82 -36
  363. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  364. package/test/unit/spec/stats-analyzer/index.js +147 -3
  365. package/test/unit/spec/webinar/collection.ts +13 -0
  366. package/test/unit/spec/webinar/index.ts +60 -0
  367. package/test/utils/integrationTestUtils.js +46 -0
  368. package/test/utils/testUtils.js +0 -52
  369. package/dist/meeting/effectsState.js +0 -262
  370. package/dist/meeting/effectsState.js.map +0 -1
  371. package/dist/metrics/config.js +0 -299
  372. package/dist/metrics/config.js.map +0 -1
  373. package/dist/types/meeting/effectsState.d.ts +0 -42
  374. package/dist/types/metrics/config.d.ts +0 -178
  375. package/src/index.js +0 -16
  376. package/src/meeting/effectsState.ts +0 -211
  377. package/src/metrics/config.ts +0 -495
  378. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
13
+ var _internalPluginMetrics = require("@webex/internal-plugin-metrics");
14
+ var _constants = _interopRequireDefault(require("./constants"));
15
+ /* eslint-disable class-methods-use-this */
16
+ /**
17
+ * Rtc Metrics
18
+ */
19
+ var RtcMetrics = /*#__PURE__*/function () {
20
+ /**
21
+ * Array of MetricData items to be sent to the metrics service.
22
+ */
23
+
24
+ /**
25
+ * Initialize the interval.
26
+ *
27
+ * @param {object} webex - The main `webex` object.
28
+ * @param {string} meetingId - The meeting id.
29
+ * @param {string} correlationId - The correlation id.
30
+ */
31
+ function RtcMetrics(webex, meetingId, correlationId) {
32
+ (0, _classCallCheck2.default)(this, RtcMetrics);
33
+ (0, _defineProperty2.default)(this, "metricsQueue", []);
34
+ (0, _defineProperty2.default)(this, "intervalId", void 0);
35
+ (0, _defineProperty2.default)(this, "webex", void 0);
36
+ (0, _defineProperty2.default)(this, "meetingId", void 0);
37
+ (0, _defineProperty2.default)(this, "correlationId", void 0);
38
+ // `window` is used to prevent typescript from returning a NodeJS.Timer.
39
+ this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);
40
+ this.meetingId = meetingId;
41
+ this.webex = webex;
42
+ this.correlationId = correlationId;
43
+ // Send the first set of metrics at 5 seconds in the case of a user leaving the call shortly after joining.
44
+ setTimeout(this.sendMetricsInQueue.bind(this), 5 * 1000);
45
+ }
46
+
47
+ /**
48
+ * Check to see if the metrics queue has any items.
49
+ *
50
+ * @returns {void}
51
+ */
52
+ (0, _createClass2.default)(RtcMetrics, [{
53
+ key: "sendMetricsInQueue",
54
+ value: function sendMetricsInQueue() {
55
+ if (this.metricsQueue.length) {
56
+ this.sendMetrics();
57
+ this.metricsQueue = [];
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Add metrics items to the metrics queue.
63
+ *
64
+ * @param {object} data - An object with a payload array of metrics items.
65
+ *
66
+ * @returns {void}
67
+ */
68
+ }, {
69
+ key: "addMetrics",
70
+ value: function addMetrics(data) {
71
+ if (data.payload.length) {
72
+ if (data.name === 'stats-report') {
73
+ data.payload = data.payload.map(this.anonymizeIp);
74
+ }
75
+ this.metricsQueue.push(data);
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Clear the metrics interval.
81
+ *
82
+ * @returns {void}
83
+ */
84
+ }, {
85
+ key: "closeMetrics",
86
+ value: function closeMetrics() {
87
+ this.sendMetricsInQueue();
88
+ clearInterval(this.intervalId);
89
+ }
90
+
91
+ /**
92
+ * Anonymize IP addresses.
93
+ *
94
+ * @param {array} stats - An RTCStatsReport organized into an array of strings.
95
+ * @returns {string}
96
+ */
97
+ }, {
98
+ key: "anonymizeIp",
99
+ value: function anonymizeIp(stats) {
100
+ var data = JSON.parse(stats);
101
+ // on local and remote candidates, anonymize the last 4 bits.
102
+ if (data.type === 'local-candidate' || data.type === 'remote-candidate') {
103
+ data.ip = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(data.ip) || undefined;
104
+ data.address = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(data.address) || undefined;
105
+ data.relatedAddress = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(data.relatedAddress) || undefined;
106
+ }
107
+ return (0, _stringify.default)(data);
108
+ }
109
+
110
+ /**
111
+ * Send metrics to the metrics service.
112
+ *
113
+ * @returns {void}
114
+ */
115
+ }, {
116
+ key: "sendMetrics",
117
+ value: function sendMetrics() {
118
+ this.webex.request({
119
+ method: 'POST',
120
+ service: 'unifiedTelemetry',
121
+ resource: 'metric/v2',
122
+ headers: {
123
+ type: 'webrtcMedia',
124
+ appId: _constants.default.APP_ID
125
+ },
126
+ body: {
127
+ metrics: [{
128
+ type: 'webrtc',
129
+ version: '1.0.1',
130
+ userId: this.webex.internal.device.userId,
131
+ meetingId: this.meetingId,
132
+ correlationId: this.correlationId,
133
+ data: this.metricsQueue
134
+ }]
135
+ }
136
+ });
137
+ }
138
+ }]);
139
+ return RtcMetrics;
140
+ }();
141
+ exports.default = RtcMetrics;
142
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RtcMetrics","webex","meetingId","correlationId","intervalId","window","setInterval","sendMetricsInQueue","bind","setTimeout","metricsQueue","length","sendMetrics","data","payload","name","map","anonymizeIp","push","clearInterval","stats","JSON","parse","type","ip","CallDiagnosticUtils","anonymizeIPAddress","undefined","address","relatedAddress","request","method","service","resource","headers","appId","RTC_METRICS","APP_ID","body","metrics","version","userId","internal","device"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';\nimport RTC_METRICS from './constants';\n\n/**\n * Rtc Metrics\n */\nexport default class RtcMetrics {\n /**\n * Array of MetricData items to be sent to the metrics service.\n */\n metricsQueue = [];\n\n intervalId: number;\n\n webex: any;\n\n meetingId: string;\n\n correlationId: string;\n\n /**\n * Initialize the interval.\n *\n * @param {object} webex - The main `webex` object.\n * @param {string} meetingId - The meeting id.\n * @param {string} correlationId - The correlation id.\n */\n constructor(webex, meetingId, correlationId) {\n // `window` is used to prevent typescript from returning a NodeJS.Timer.\n this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);\n this.meetingId = meetingId;\n this.webex = webex;\n this.correlationId = correlationId;\n // Send the first set of metrics at 5 seconds in the case of a user leaving the call shortly after joining.\n setTimeout(this.sendMetricsInQueue.bind(this), 5 * 1000);\n }\n\n /**\n * Check to see if the metrics queue has any items.\n *\n * @returns {void}\n */\n public sendMetricsInQueue() {\n if (this.metricsQueue.length) {\n this.sendMetrics();\n this.metricsQueue = [];\n }\n }\n\n /**\n * Add metrics items to the metrics queue.\n *\n * @param {object} data - An object with a payload array of metrics items.\n *\n * @returns {void}\n */\n addMetrics(data) {\n if (data.payload.length) {\n if (data.name === 'stats-report') {\n data.payload = data.payload.map(this.anonymizeIp);\n }\n this.metricsQueue.push(data);\n }\n }\n\n /**\n * Clear the metrics interval.\n *\n * @returns {void}\n */\n closeMetrics() {\n this.sendMetricsInQueue();\n clearInterval(this.intervalId);\n }\n\n /**\n * Anonymize IP addresses.\n *\n * @param {array} stats - An RTCStatsReport organized into an array of strings.\n * @returns {string}\n */\n anonymizeIp(stats: string): string {\n const data = JSON.parse(stats);\n // on local and remote candidates, anonymize the last 4 bits.\n if (data.type === 'local-candidate' || data.type === 'remote-candidate') {\n data.ip = CallDiagnosticUtils.anonymizeIPAddress(data.ip) || undefined;\n data.address = CallDiagnosticUtils.anonymizeIPAddress(data.address) || undefined;\n data.relatedAddress =\n CallDiagnosticUtils.anonymizeIPAddress(data.relatedAddress) || undefined;\n }\n\n return JSON.stringify(data);\n }\n\n /**\n * Send metrics to the metrics service.\n *\n * @returns {void}\n */\n private sendMetrics() {\n this.webex.request({\n method: 'POST',\n service: 'unifiedTelemetry',\n resource: 'metric/v2',\n headers: {\n type: 'webrtcMedia',\n appId: RTC_METRICS.APP_ID,\n },\n body: {\n metrics: [\n {\n type: 'webrtc',\n version: '1.0.1',\n userId: this.webex.internal.device.userId,\n meetingId: this.meetingId,\n correlationId: this.correlationId,\n data: this.metricsQueue,\n },\n ],\n },\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;AACA;AACA;AAFA;AAIA;AACA;AACA;AAFA,IAGqBA,UAAU;EAC7B;AACF;AACA;;EAWE;AACF;AACA;AACA;AACA;AACA;AACA;EACE,oBAAYC,KAAK,EAAEC,SAAS,EAAEC,aAAa,EAAE;IAAA;IAAA,oDAjB9B,EAAE;IAAA;IAAA;IAAA;IAAA;IAkBf;IACA,IAAI,CAACC,UAAU,GAAGC,MAAM,CAACC,WAAW,CAAC,IAAI,CAACC,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IACnF,IAAI,CAACN,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACD,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACE,aAAa,GAAGA,aAAa;IAClC;IACAM,UAAU,CAAC,IAAI,CAACF,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;EAC1D;;EAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,8BAA4B;MAC1B,IAAI,IAAI,CAACE,YAAY,CAACC,MAAM,EAAE;QAC5B,IAAI,CAACC,WAAW,EAAE;QAClB,IAAI,CAACF,YAAY,GAAG,EAAE;MACxB;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,oBAAWG,IAAI,EAAE;MACf,IAAIA,IAAI,CAACC,OAAO,CAACH,MAAM,EAAE;QACvB,IAAIE,IAAI,CAACE,IAAI,KAAK,cAAc,EAAE;UAChCF,IAAI,CAACC,OAAO,GAAGD,IAAI,CAACC,OAAO,CAACE,GAAG,CAAC,IAAI,CAACC,WAAW,CAAC;QACnD;QACA,IAAI,CAACP,YAAY,CAACQ,IAAI,CAACL,IAAI,CAAC;MAC9B;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,wBAAe;MACb,IAAI,CAACN,kBAAkB,EAAE;MACzBY,aAAa,CAAC,IAAI,CAACf,UAAU,CAAC;IAChC;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,qBAAYgB,KAAa,EAAU;MACjC,IAAMP,IAAI,GAAGQ,IAAI,CAACC,KAAK,CAACF,KAAK,CAAC;MAC9B;MACA,IAAIP,IAAI,CAACU,IAAI,KAAK,iBAAiB,IAAIV,IAAI,CAACU,IAAI,KAAK,kBAAkB,EAAE;QACvEV,IAAI,CAACW,EAAE,GAAGC,0CAAmB,CAACC,kBAAkB,CAACb,IAAI,CAACW,EAAE,CAAC,IAAIG,SAAS;QACtEd,IAAI,CAACe,OAAO,GAAGH,0CAAmB,CAACC,kBAAkB,CAACb,IAAI,CAACe,OAAO,CAAC,IAAID,SAAS;QAChFd,IAAI,CAACgB,cAAc,GACjBJ,0CAAmB,CAACC,kBAAkB,CAACb,IAAI,CAACgB,cAAc,CAAC,IAAIF,SAAS;MAC5E;MAEA,OAAO,wBAAed,IAAI,CAAC;IAC7B;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,uBAAsB;MACpB,IAAI,CAACZ,KAAK,CAAC6B,OAAO,CAAC;QACjBC,MAAM,EAAE,MAAM;QACdC,OAAO,EAAE,kBAAkB;QAC3BC,QAAQ,EAAE,WAAW;QACrBC,OAAO,EAAE;UACPX,IAAI,EAAE,aAAa;UACnBY,KAAK,EAAEC,kBAAW,CAACC;QACrB,CAAC;QACDC,IAAI,EAAE;UACJC,OAAO,EAAE,CACP;YACEhB,IAAI,EAAE,QAAQ;YACdiB,OAAO,EAAE,OAAO;YAChBC,MAAM,EAAE,IAAI,CAACxC,KAAK,CAACyC,QAAQ,CAACC,MAAM,CAACF,MAAM;YACzCvC,SAAS,EAAE,IAAI,CAACA,SAAS;YACzBC,aAAa,EAAE,IAAI,CAACA,aAAa;YACjCU,IAAI,EAAE,IAAI,CAACH;UACb,CAAC;QAEL;MACF,CAAC,CAAC;IACJ;EAAC;EAAA;AAAA;AAAA"}
@@ -49,7 +49,6 @@ var emptyReceiver = {
49
49
  meanRtpJitter: [],
50
50
  meanRoundTripTime: []
51
51
  };
52
-
53
52
  /**
54
53
  * Stats Analyzer class that will emit events based on detected quality
55
54
  *
@@ -65,13 +64,17 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
65
64
  * @constructor
66
65
  * @public
67
66
  * @param {Object} config SDK Configuration Object
67
+ * @param {Function} receiveSlotCallback Callback used to access receive slots.
68
68
  * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
69
69
  * @param {Object} statsResults Default properties for stats
70
70
  */
71
71
  function StatsAnalyzer(config) {
72
72
  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;
73
+ var receiveSlotCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
74
+ return undefined;
75
+ };
76
+ var networkQualityMonitor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
77
+ var statsResults = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _global.default;
75
78
  (0, _classCallCheck2.default)(this, StatsAnalyzer);
76
79
  _this = _super.call(this);
77
80
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "config", void 0);
@@ -87,6 +90,8 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
87
90
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsInterval", void 0);
88
91
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsResults", void 0);
89
92
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsStarted", void 0);
93
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "successfulCandidatePair", void 0);
94
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "receiveSlotCallback", void 0);
90
95
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "emitStartStopEvents", function (mediaType, previousValue, currentValue, isLocal) {
91
96
  if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
92
97
  throw new Error("Unsupported mediaType: ".concat(mediaType));
@@ -121,56 +126,39 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
121
126
  }
122
127
  });
123
128
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "parseCandidate", function (result, type, isSender, isRemote) {
129
+ var _this$successfulCandi;
124
130
  if (!result || !result.id) {
125
131
  return;
126
132
  }
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
133
 
156
- if (result.networkType && RemoteNetworkType[result.id].indexOf(result.networkType) === -1) {
157
- RemoteNetworkType[result.id].push(result.networkType);
134
+ // We only care about the successful local candidate
135
+ if (((_this$successfulCandi = _this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {
136
+ return;
137
+ }
138
+ var transport;
139
+ if (result.relayProtocol) {
140
+ transport = result.relayProtocol.toUpperCase();
141
+ } else if (result.protocol) {
142
+ transport = result.protocol.toUpperCase();
158
143
  }
144
+ var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
145
+ var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
159
146
  _this.statsResults.internal.candidates[result.id] = {
160
- candidateType: RemoteCandidateType[result.id],
161
- ipAddress: RemoteIpAddress[result.id],
147
+ candidateType: result.candidateType,
148
+ ipAddress: result.ip,
149
+ // TODO: add ports
162
150
  portNumber: result.port,
163
- networkType: RemoteNetworkType[result.id],
151
+ networkType: result.networkType,
164
152
  priority: result.priority,
165
- transport: RemoteTransport[result.id],
153
+ transport: transport,
166
154
  timestamp: result.time,
167
155
  id: result.id,
168
156
  type: result.type
169
157
  };
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];
158
+ _this.statsResults.connectionType[ipType].candidateType = result.candidateType;
159
+ _this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;
160
+ _this.statsResults.connectionType[ipType].networkType = result.networkType === _constants.NETWORK_TYPE.VPN ? _constants.NETWORK_TYPE.UNKNOWN : result.networkType;
161
+ _this.statsResults.connectionType[ipType].transport = transport;
174
162
  _this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
175
163
  });
176
164
  _this.statsStarted = false;
@@ -180,8 +168,12 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
180
168
  _this.networkQualityMonitor = networkQualityMonitor;
181
169
  _this.correlationId = config.correlationId;
182
170
  _this.mqaSentCount = -1;
183
- _this.lastMqaDataSent = {};
171
+ _this.lastMqaDataSent = {
172
+ resolutions: {}
173
+ };
184
174
  _this.lastEmittedStartStopEvent = {};
175
+ _this.receiveSlotCallback = receiveSlotCallback;
176
+ _this.successfulCandidatePair = {};
185
177
  return _this;
186
178
  }
187
179
 
@@ -234,6 +226,18 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
234
226
  var _this3 = this;
235
227
  var newMqa = (0, _cloneDeep2.default)(_config.emptyMqaInterval);
236
228
  (0, _keys.default)(this.statsResults).forEach(function (mediaType) {
229
+ if (!_this3.lastMqaDataSent[mediaType]) {
230
+ _this3.lastMqaDataSent[mediaType] = {};
231
+ _this3.lastMqaDataSent.resolutions[mediaType] = {};
232
+ }
233
+ if (!_this3.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {
234
+ _this3.lastMqaDataSent[mediaType].send = {};
235
+ _this3.lastMqaDataSent.resolutions[mediaType].send = {};
236
+ }
237
+ if (!_this3.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {
238
+ _this3.lastMqaDataSent[mediaType].recv = {};
239
+ _this3.lastMqaDataSent.resolutions[mediaType].recv = {};
240
+ }
237
241
  if (mediaType.includes('audio-send') || mediaType.includes('audio-share-send')) {
238
242
  var audioSender = (0, _cloneDeep2.default)(_config.emptyAudioTransmit);
239
243
  (0, _mqaUtil.getAudioSenderMqa)({
@@ -243,6 +247,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
243
247
  mediaType: mediaType
244
248
  });
245
249
  newMqa.audioTransmit.push(audioSender);
250
+ _this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
246
251
  } else if (mediaType.includes('audio-recv') || mediaType.includes('audio-share-recv')) {
247
252
  var audioReceiver = (0, _cloneDeep2.default)(_config.emptyAudioReceive);
248
253
  (0, _mqaUtil.getAudioReceiverMqa)({
@@ -252,6 +257,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
252
257
  mediaType: mediaType
253
258
  });
254
259
  newMqa.audioReceive.push(audioReceiver);
260
+ _this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
255
261
  } else if (mediaType.includes('video-send') || mediaType.includes('video-share-send')) {
256
262
  var videoSender = (0, _cloneDeep2.default)(_config.emptyVideoTransmit);
257
263
  (0, _mqaUtil.getVideoSenderMqa)({
@@ -261,6 +267,8 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
261
267
  mediaType: mediaType
262
268
  });
263
269
  newMqa.videoTransmit.push(videoSender);
270
+ _this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
271
+ _this3.lastMqaDataSent.resolutions[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults.resolutions[mediaType].send);
264
272
  } else if (mediaType.includes('video-recv') || mediaType.includes('video-share-recv')) {
265
273
  var videoReceiver = (0, _cloneDeep2.default)(_config.emptyVideoReceive);
266
274
  (0, _mqaUtil.getVideoReceiverMqa)({
@@ -270,27 +278,26 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
270
278
  mediaType: mediaType
271
279
  });
272
280
  newMqa.videoReceive.push(videoReceiver);
281
+ _this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
282
+ _this3.lastMqaDataSent.resolutions[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults.resolutions[mediaType].recv);
273
283
  }
274
284
  });
275
- newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];
285
+ newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
276
286
 
277
287
  // Adding peripheral information
278
- newMqa.intervalMetadata.peripherals = [];
279
288
  newMqa.intervalMetadata.peripherals.push({
280
289
  information: _constants._UNKNOWN_,
281
290
  name: _constants.MEDIA_DEVICES.SPEAKER
282
291
  });
283
292
  if (this.statsResults['audio-send']) {
284
- var _this$statsResults$au;
285
293
  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,
294
+ information: this.statsResults['audio-send'].trackLabel || _constants._UNKNOWN_,
287
295
  name: _constants.MEDIA_DEVICES.MICROPHONE
288
296
  });
289
297
  }
290
298
  if (this.statsResults['video-send']) {
291
- var _this$statsResults$vi;
292
299
  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,
300
+ information: this.statsResults['video-send'].trackLabel || _constants._UNKNOWN_,
294
301
  name: _constants.MEDIA_DEVICES.CAMERA
295
302
  });
296
303
  }
@@ -377,7 +384,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
377
384
  _this5.mediaConnection = null;
378
385
  });
379
386
  }
380
- this.mediaConnection = null;
381
387
  return _promise.default.resolve();
382
388
  }
383
389
 
@@ -467,6 +473,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
467
473
  value: function filterAndParseGetStatsResults(statsItem, type, isSender) {
468
474
  var _this6 = this;
469
475
  var types = _constants.DEFAULT_GET_STATS_FILTER.types;
476
+
477
+ // get the successful candidate pair before parsing stats.
478
+ statsItem.report.forEach(function (report) {
479
+ if (report.type === 'candidate-pair' && report.state === 'succeeded') {
480
+ _this6.successfulCandidatePair = report;
481
+ }
482
+ });
470
483
  statsItem.report.forEach(function (result) {
471
484
  if (types.includes(result.type)) {
472
485
  _this6.parseGetStatsResult(result, type, isSender);
@@ -476,6 +489,8 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
476
489
  this.statsResults[type].direction = statsItem.currentDirection;
477
490
  this.statsResults[type].trackLabel = statsItem.localTrackLabel;
478
491
  this.statsResults[type].csi = statsItem.csi;
492
+ // reset the successful candidate pair.
493
+ this.successfulCandidatePair = {};
479
494
  }
480
495
  }
481
496
 
@@ -528,28 +543,32 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
528
543
  return (0, _keys.default)(_this7.statsResults).filter(function (key) {
529
544
  return key.startsWith(keyPrefix);
530
545
  }).reduce(function (prev, cur) {
531
- return prev + (_this7.statsResults[cur].recv[value] || 0);
546
+ var _this7$statsResults$c;
547
+ return prev + (((_this7$statsResults$c = _this7.statsResults[cur]) === null || _this7$statsResults$c === void 0 ? void 0 : _this7$statsResults$c.recv[value]) || 0);
532
548
  }, 0);
533
549
  };
534
550
  var getPreviousStatsTotals = function getPreviousStatsTotals(keyPrefix, value) {
535
551
  return (0, _keys.default)(_this7.statsResults).filter(function (key) {
536
552
  return key.startsWith(keyPrefix);
537
553
  }).reduce(function (prev, cur) {
538
- return prev + (_this7.lastStatsResults[cur].recv[value] || 0);
554
+ var _this7$lastStatsResul;
555
+ return prev + (((_this7$lastStatsResul = _this7.lastStatsResults[cur]) === null || _this7$lastStatsResul === void 0 ? void 0 : _this7$lastStatsResul.recv[value]) || 0);
539
556
  }, 0);
540
557
  };
541
558
  var getCurrentResolutionsStatsTotals = function getCurrentResolutionsStatsTotals(keyPrefix, value) {
542
559
  return (0, _keys.default)(_this7.statsResults).filter(function (key) {
543
560
  return key.startsWith(keyPrefix);
544
561
  }).reduce(function (prev, cur) {
545
- return prev + (_this7.statsResults.resolutions[cur].recv[value] || 0);
562
+ var _this7$statsResults$r;
563
+ return prev + (((_this7$statsResults$r = _this7.statsResults.resolutions[cur]) === null || _this7$statsResults$r === void 0 ? void 0 : _this7$statsResults$r.recv[value]) || 0);
546
564
  }, 0);
547
565
  };
548
566
  var getPreviousResolutionsStatsTotals = function getPreviousResolutionsStatsTotals(keyPrefix, value) {
549
567
  return (0, _keys.default)(_this7.statsResults).filter(function (key) {
550
568
  return key.startsWith(keyPrefix);
551
569
  }).reduce(function (prev, cur) {
552
- return prev + (_this7.lastStatsResults.resolutions[cur].recv[value] || 0);
570
+ var _this7$lastStatsResul2;
571
+ return prev + (((_this7$lastStatsResul2 = _this7.lastStatsResults.resolutions[cur]) === null || _this7$lastStatsResul2 === void 0 ? void 0 : _this7$lastStatsResul2.recv[value]) || 0);
553
572
  }, 0);
554
573
  };
555
574
  if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
@@ -558,10 +577,10 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
558
577
  var currentStats = this.statsResults['audio-send'].send;
559
578
  var previousStats = this.lastStatsResults['audio-send'].send;
560
579
  if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
561
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent");
580
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent", currentStats.totalPacketsSent);
562
581
  } else {
563
582
  if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
564
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present");
583
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present", currentStats.totalAudioEnergy);
565
584
  }
566
585
  if (currentStats.audioLevel === 0) {
567
586
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
@@ -576,9 +595,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
576
595
  var currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');
577
596
  var previousSamplesReceived = getPreviousStatsTotals('audio-recv', 'totalSamplesReceived');
578
597
  if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
579
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received");
598
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received", currentPacketsReceived);
580
599
  } else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
581
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received");
600
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received", currentSamplesReceived);
582
601
  }
583
602
  this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
584
603
  }
@@ -587,13 +606,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
587
606
  var _currentStats = this.statsResults['video-send'].send;
588
607
  var _previousStats = this.lastStatsResults['video-send'].send;
589
608
  if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
590
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent");
609
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent", _currentStats.totalPacketsSent);
591
610
  } else {
592
611
  if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
593
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded");
612
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded", _currentStats.framesEncoded);
594
613
  }
595
614
  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");
615
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", this.statsResults.resolutions['video-send'].send.framesSent);
597
616
  }
598
617
  }
599
618
  this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
@@ -609,16 +628,16 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
609
628
  var currentFramesDropped = getCurrentResolutionsStatsTotals('video-recv', 'framesDropped');
610
629
  var previousFramesDropped = getPreviousResolutionsStatsTotals('video-recv', 'framesDropped');
611
630
  if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
612
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received");
631
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received", _currentPacketsReceived);
613
632
  } else {
614
633
  if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
615
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received");
634
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received", currentFramesReceived);
616
635
  }
617
636
  if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
618
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded");
637
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded", currentFramesDecoded);
619
638
  }
620
639
  if (currentFramesDropped - previousFramesDropped > 10) {
621
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped");
640
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped", currentFramesDropped - previousFramesDropped);
622
641
  }
623
642
  }
624
643
  this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
@@ -629,13 +648,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
629
648
  var _currentStats2 = this.statsResults['video-share-send'].send;
630
649
  var _previousStats2 = this.lastStatsResults['video-share-send'].send;
631
650
  if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
632
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent");
651
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats2.totalPacketsSent);
633
652
  } else {
634
653
  if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
635
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded");
654
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats2.framesEncoded);
636
655
  }
637
656
  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");
657
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults.resolutions['video-share-send'].send.framesSent);
639
658
  }
640
659
  }
641
660
  }
@@ -651,16 +670,16 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
651
670
  var _currentFramesDropped = getCurrentResolutionsStatsTotals('video-share-recv', 'framesDropped');
652
671
  var _previousFramesDropped = getPreviousResolutionsStatsTotals('video-share-recv', 'framesDropped');
653
672
  if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
654
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received");
673
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received", _currentPacketsReceived2);
655
674
  } else {
656
675
  if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
657
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received");
676
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received", _currentFramesReceived);
658
677
  }
659
678
  if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
660
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded");
679
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded", _currentFramesDecoded);
661
680
  }
662
681
  if (_currentFramesDropped - _previousFramesDropped > 10) {
663
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped");
682
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped", _currentFramesDropped - _previousFramesDropped);
664
683
  }
665
684
  }
666
685
 
@@ -749,6 +768,12 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
749
768
  var sendrecvType = _constants.STATS.SEND_DIRECTION;
750
769
  if (result.bytesSent) {
751
770
  var kilobytes = 0;
771
+ if (result.frameWidth && result.frameHeight) {
772
+ this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
773
+ this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
774
+ this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
775
+ this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
776
+ }
752
777
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
753
778
  this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
754
779
  }
@@ -804,6 +829,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
804
829
  var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
805
830
  if (result.bytesReceived) {
806
831
  var kilobytes = 0;
832
+ var receiveSlot = this.receiveSlotCallback(result.ssrc);
833
+ var idAndCsi = receiveSlot ? "id: \"".concat(receiveSlot.id || '', "\"").concat(receiveSlot.csi ? " and csi: ".concat(receiveSlot.csi) : '') : '';
834
+ if (result.frameWidth && result.frameHeight) {
835
+ this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
836
+ this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
837
+ this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
838
+ }
807
839
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
808
840
  this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
809
841
  }
@@ -832,13 +864,15 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
832
864
  this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
833
865
  this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
834
866
  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);
867
+ if (receiveSlot) {
868
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].packetsReceived);
869
+ }
836
870
  }
837
871
 
838
872
  // Check the over all packet Lost ratio
839
873
  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;
840
874
  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);
875
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
842
876
  }
843
877
 
844
878
  // TODO: check the packet loss value is negative values here
@@ -900,12 +934,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
900
934
  return;
901
935
  }
902
936
  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
937
  if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
910
938
  this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
911
939
  this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;