@webex/plugin-meetings 3.0.0-stream-classes.5 → 3.0.0

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 (465) hide show
  1. package/.eslintrc.js +6 -0
  2. package/README.md +12 -0
  3. package/babel.config.js +3 -0
  4. package/dist/annotation/constants.js +12 -20
  5. package/dist/annotation/constants.js.map +1 -1
  6. package/dist/annotation/index.js +25 -10
  7. package/dist/annotation/index.js.map +1 -1
  8. package/dist/breakouts/breakout.js +2 -3
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/collection.js +1 -2
  11. package/dist/breakouts/collection.js.map +1 -1
  12. package/dist/breakouts/edit-lock-error.js +1 -2
  13. package/dist/breakouts/edit-lock-error.js.map +1 -1
  14. package/dist/breakouts/events.js +1 -2
  15. package/dist/breakouts/events.js.map +1 -1
  16. package/dist/breakouts/index.js +13 -14
  17. package/dist/breakouts/index.js.map +1 -1
  18. package/dist/breakouts/request.js +1 -2
  19. package/dist/breakouts/request.js.map +1 -1
  20. package/dist/breakouts/utils.js +3 -6
  21. package/dist/breakouts/utils.js.map +1 -1
  22. package/dist/common/browser-detection.js +2 -3
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +3 -4
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  37. package/dist/common/errors/no-meeting-info.js +50 -0
  38. package/dist/common/errors/no-meeting-info.js.map +1 -0
  39. package/dist/common/errors/parameter.js +3 -4
  40. package/dist/common/errors/parameter.js.map +1 -1
  41. package/dist/common/errors/password-error.js +1 -2
  42. package/dist/common/errors/password-error.js.map +1 -1
  43. package/dist/common/errors/permission.js +1 -2
  44. package/dist/common/errors/permission.js.map +1 -1
  45. package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
  46. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  47. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  48. package/dist/common/errors/reconnection-in-progress.js +1 -2
  49. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  50. package/dist/common/errors/reconnection.js +1 -2
  51. package/dist/common/errors/reconnection.js.map +1 -1
  52. package/dist/common/errors/stats.js +1 -2
  53. package/dist/common/errors/stats.js.map +1 -1
  54. package/dist/{types/common → common}/errors/webex-errors.d.ts +13 -1
  55. package/dist/common/errors/webex-errors.js +35 -16
  56. package/dist/common/errors/webex-errors.js.map +1 -1
  57. package/dist/common/errors/webex-meetings-error.js +1 -2
  58. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  59. package/dist/common/events/events-scope.js +1 -2
  60. package/dist/common/events/events-scope.js.map +1 -1
  61. package/dist/common/events/events.js +1 -2
  62. package/dist/common/events/events.js.map +1 -1
  63. package/dist/common/events/trigger-proxy.js +1 -2
  64. package/dist/common/events/trigger-proxy.js.map +1 -1
  65. package/dist/common/events/util.js +1 -2
  66. package/dist/common/events/util.js.map +1 -1
  67. package/dist/common/logs/logger-config.js +1 -2
  68. package/dist/common/logs/logger-config.js.map +1 -1
  69. package/dist/common/logs/logger-proxy.js +1 -2
  70. package/dist/common/logs/logger-proxy.js.map +1 -1
  71. package/dist/{types/common → common}/logs/request.d.ts +3 -1
  72. package/dist/common/logs/request.js +8 -5
  73. package/dist/common/logs/request.js.map +1 -1
  74. package/dist/common/queue.js +2 -4
  75. package/dist/common/queue.js.map +1 -1
  76. package/dist/{types/config.d.ts → config.d.ts} +1 -1
  77. package/dist/config.js +3 -3
  78. package/dist/config.js.map +1 -1
  79. package/dist/{types/constants.d.ts → constants.d.ts} +71 -15
  80. package/dist/constants.js +252 -371
  81. package/dist/constants.js.map +1 -1
  82. package/dist/controls-options-manager/constants.js +3 -6
  83. package/dist/controls-options-manager/constants.js.map +1 -1
  84. package/dist/controls-options-manager/enums.js +7 -10
  85. package/dist/controls-options-manager/enums.js.map +1 -1
  86. package/dist/controls-options-manager/index.js +27 -32
  87. package/dist/controls-options-manager/index.js.map +1 -1
  88. package/dist/controls-options-manager/util.js +1 -2
  89. package/dist/controls-options-manager/util.js.map +1 -1
  90. package/dist/index.js +8 -5
  91. package/dist/index.js.map +1 -1
  92. package/dist/interceptors/index.d.ts +2 -0
  93. package/dist/interceptors/index.js +15 -0
  94. package/dist/interceptors/index.js.map +1 -0
  95. package/dist/interceptors/locusRetry.d.ts +27 -0
  96. package/dist/interceptors/locusRetry.js +94 -0
  97. package/dist/interceptors/locusRetry.js.map +1 -0
  98. package/dist/interpretation/collection.js +1 -2
  99. package/dist/interpretation/collection.js.map +1 -1
  100. package/dist/interpretation/index.js +2 -3
  101. package/dist/interpretation/index.js.map +1 -1
  102. package/dist/interpretation/siLanguage.js +2 -3
  103. package/dist/interpretation/siLanguage.js.map +1 -1
  104. package/dist/locus-info/controlsUtils.js +12 -13
  105. package/dist/locus-info/controlsUtils.js.map +1 -1
  106. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  107. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  108. package/dist/locus-info/fullState.js +1 -2
  109. package/dist/locus-info/fullState.js.map +1 -1
  110. package/dist/locus-info/hostUtils.js +1 -2
  111. package/dist/locus-info/hostUtils.js.map +1 -1
  112. package/dist/{types/locus-info → locus-info}/index.d.ts +1 -1
  113. package/dist/locus-info/index.js +38 -37
  114. package/dist/locus-info/index.js.map +1 -1
  115. package/dist/locus-info/infoUtils.js +3 -4
  116. package/dist/locus-info/infoUtils.js.map +1 -1
  117. package/dist/locus-info/mediaSharesUtils.js +16 -3
  118. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  119. package/dist/{types/locus-info → locus-info}/parser.d.ts +3 -2
  120. package/dist/locus-info/parser.js +43 -31
  121. package/dist/locus-info/parser.js.map +1 -1
  122. package/dist/locus-info/selfUtils.js +7 -6
  123. package/dist/locus-info/selfUtils.js.map +1 -1
  124. package/dist/media/index.js +15 -10
  125. package/dist/media/index.js.map +1 -1
  126. package/dist/media/properties.js +16 -7
  127. package/dist/media/properties.js.map +1 -1
  128. package/dist/media/util.js +1 -2
  129. package/dist/media/util.js.map +1 -1
  130. package/dist/mediaQualityMetrics/config.d.ts +241 -0
  131. package/dist/mediaQualityMetrics/config.js +135 -339
  132. package/dist/mediaQualityMetrics/config.js.map +1 -1
  133. package/dist/{types/meeting → meeting}/in-meeting-actions.d.ts +4 -0
  134. package/dist/meeting/in-meeting-actions.js +18 -2
  135. package/dist/meeting/in-meeting-actions.js.map +1 -1
  136. package/dist/{types/meeting → meeting}/index.d.ts +318 -45
  137. package/dist/meeting/index.js +2620 -1405
  138. package/dist/meeting/index.js.map +1 -1
  139. package/dist/meeting/locusMediaRequest.js +4 -5
  140. package/dist/meeting/locusMediaRequest.js.map +1 -1
  141. package/dist/meeting/muteState.js +2 -4
  142. package/dist/meeting/muteState.js.map +1 -1
  143. package/dist/{types/meeting → meeting}/request.d.ts +2 -0
  144. package/dist/meeting/request.js +46 -31
  145. package/dist/meeting/request.js.map +1 -1
  146. package/dist/meeting/state.js +1 -2
  147. package/dist/meeting/state.js.map +1 -1
  148. package/dist/{types/meeting → meeting}/util.d.ts +17 -0
  149. package/dist/meeting/util.js +83 -10
  150. package/dist/meeting/util.js.map +1 -1
  151. package/dist/meeting/voicea-meeting.d.ts +16 -0
  152. package/dist/meeting/voicea-meeting.js +169 -0
  153. package/dist/meeting/voicea-meeting.js.map +1 -0
  154. package/dist/meeting-info/collection.js +3 -4
  155. package/dist/meeting-info/collection.js.map +1 -1
  156. package/dist/{types/meeting-info → meeting-info}/index.d.ts +7 -0
  157. package/dist/meeting-info/index.js +53 -27
  158. package/dist/meeting-info/index.js.map +1 -1
  159. package/dist/{types/meeting-info → meeting-info}/meeting-info-v2.d.ts +1 -0
  160. package/dist/meeting-info/meeting-info-v2.js +52 -33
  161. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  162. package/dist/meeting-info/request.js +1 -2
  163. package/dist/meeting-info/request.js.map +1 -1
  164. package/dist/meeting-info/util.js +8 -8
  165. package/dist/meeting-info/util.js.map +1 -1
  166. package/dist/meeting-info/utilv2.js +12 -9
  167. package/dist/meeting-info/utilv2.js.map +1 -1
  168. package/dist/{types/meetings → meetings}/collection.d.ts +9 -0
  169. package/dist/meetings/collection.js +21 -5
  170. package/dist/meetings/collection.js.map +1 -1
  171. package/dist/{types/meetings → meetings}/index.d.ts +45 -16
  172. package/dist/meetings/index.js +166 -74
  173. package/dist/meetings/index.js.map +1 -1
  174. package/dist/meetings/request.js +2 -3
  175. package/dist/meetings/request.js.map +1 -1
  176. package/dist/meetings/util.js +3 -10
  177. package/dist/meetings/util.js.map +1 -1
  178. package/dist/{types/member → member}/index.d.ts +1 -0
  179. package/dist/member/index.js +10 -3
  180. package/dist/member/index.js.map +1 -1
  181. package/dist/member/member.types.d.ts +11 -0
  182. package/dist/member/member.types.js +17 -0
  183. package/dist/member/member.types.js.map +1 -0
  184. package/dist/member/types.js +6 -8
  185. package/dist/member/types.js.map +1 -1
  186. package/dist/member/util.js +12 -2
  187. package/dist/member/util.js.map +1 -1
  188. package/dist/members/collection.js +1 -2
  189. package/dist/members/collection.js.map +1 -1
  190. package/dist/members/index.js +25 -8
  191. package/dist/members/index.js.map +1 -1
  192. package/dist/members/request.js +2 -3
  193. package/dist/members/request.js.map +1 -1
  194. package/dist/{types/members → members}/types.d.ts +1 -0
  195. package/dist/members/types.js +3 -4
  196. package/dist/members/types.js.map +1 -1
  197. package/dist/{types/members → members}/util.d.ts +6 -1
  198. package/dist/members/util.js +18 -8
  199. package/dist/members/util.js.map +1 -1
  200. package/dist/{types/metrics → metrics}/constants.d.ts +12 -0
  201. package/dist/metrics/constants.js +14 -3
  202. package/dist/metrics/constants.js.map +1 -1
  203. package/dist/metrics/index.js +3 -2
  204. package/dist/metrics/index.js.map +1 -1
  205. package/dist/multistream/mediaRequestManager.js +9 -11
  206. package/dist/multistream/mediaRequestManager.js.map +1 -1
  207. package/dist/multistream/receiveSlot.js +3 -5
  208. package/dist/multistream/receiveSlot.js.map +1 -1
  209. package/dist/multistream/receiveSlotManager.js +7 -9
  210. package/dist/multistream/receiveSlotManager.js.map +1 -1
  211. package/dist/multistream/remoteMedia.js +3 -5
  212. package/dist/multistream/remoteMedia.js.map +1 -1
  213. package/dist/multistream/remoteMediaGroup.js +7 -6
  214. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  215. package/dist/multistream/remoteMediaManager.js +28 -27
  216. package/dist/multistream/remoteMediaManager.js.map +1 -1
  217. package/dist/multistream/sendSlotManager.js +9 -6
  218. package/dist/multistream/sendSlotManager.js.map +1 -1
  219. package/dist/networkQualityMonitor/index.js +1 -2
  220. package/dist/networkQualityMonitor/index.js.map +1 -1
  221. package/dist/personal-meeting-room/index.js +2 -3
  222. package/dist/personal-meeting-room/index.js.map +1 -1
  223. package/dist/personal-meeting-room/request.js +2 -3
  224. package/dist/personal-meeting-room/request.js.map +1 -1
  225. package/dist/personal-meeting-room/util.js +1 -2
  226. package/dist/personal-meeting-room/util.js.map +1 -1
  227. package/dist/reachability/clusterReachability.d.ts +109 -0
  228. package/dist/reachability/clusterReachability.js +357 -0
  229. package/dist/reachability/clusterReachability.js.map +1 -0
  230. package/dist/reachability/index.d.ts +105 -0
  231. package/dist/reachability/index.js +279 -436
  232. package/dist/reachability/index.js.map +1 -1
  233. package/dist/reachability/request.js +14 -11
  234. package/dist/reachability/request.js.map +1 -1
  235. package/dist/reachability/util.d.ts +8 -0
  236. package/dist/reachability/util.js +29 -0
  237. package/dist/reachability/util.js.map +1 -0
  238. package/dist/reactions/constants.js +1 -2
  239. package/dist/reactions/constants.js.map +1 -1
  240. package/dist/reactions/reactions.js +2 -4
  241. package/dist/reactions/reactions.js.map +1 -1
  242. package/dist/reactions/reactions.type.js +6 -8
  243. package/dist/reactions/reactions.type.js.map +1 -1
  244. package/dist/{types/reconnection-manager → reconnection-manager}/index.d.ts +10 -0
  245. package/dist/reconnection-manager/index.js +129 -106
  246. package/dist/reconnection-manager/index.js.map +1 -1
  247. package/dist/recording-controller/enums.js +4 -5
  248. package/dist/recording-controller/enums.js.map +1 -1
  249. package/dist/recording-controller/index.js +43 -51
  250. package/dist/recording-controller/index.js.map +1 -1
  251. package/dist/recording-controller/util.js +1 -2
  252. package/dist/recording-controller/util.js.map +1 -1
  253. package/dist/{types/roap → roap}/index.d.ts +2 -1
  254. package/dist/roap/index.js +59 -28
  255. package/dist/roap/index.js.map +1 -1
  256. package/dist/roap/request.js +14 -22
  257. package/dist/roap/request.js.map +1 -1
  258. package/dist/{types/roap → roap}/turnDiscovery.d.ts +21 -4
  259. package/dist/roap/turnDiscovery.js +182 -89
  260. package/dist/roap/turnDiscovery.js.map +1 -1
  261. package/dist/rtcMetrics/constants.js +1 -2
  262. package/dist/rtcMetrics/constants.js.map +1 -1
  263. package/dist/{types/rtcMetrics → rtcMetrics}/index.d.ts +15 -1
  264. package/dist/rtcMetrics/index.js +72 -12
  265. package/dist/rtcMetrics/index.js.map +1 -1
  266. package/dist/statsAnalyzer/global.js +1 -2
  267. package/dist/statsAnalyzer/global.js.map +1 -1
  268. package/dist/{types/statsAnalyzer → statsAnalyzer}/index.d.ts +28 -11
  269. package/dist/statsAnalyzer/index.js +371 -318
  270. package/dist/statsAnalyzer/index.js.map +1 -1
  271. package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
  272. package/dist/statsAnalyzer/mqaUtil.js +295 -162
  273. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  274. package/dist/transcription/index.js +1 -2
  275. package/dist/transcription/index.js.map +1 -1
  276. package/dist/webinar/collection.d.ts +16 -0
  277. package/dist/webinar/collection.js +43 -0
  278. package/dist/webinar/collection.js.map +1 -0
  279. package/dist/webinar/index.d.ts +5 -0
  280. package/dist/webinar/index.js +68 -0
  281. package/dist/webinar/index.js.map +1 -0
  282. package/jest.config.js +3 -0
  283. package/package.json +44 -24
  284. package/process +1 -0
  285. package/src/common/errors/no-meeting-info.ts +24 -0
  286. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  287. package/src/common/errors/webex-errors.ts +19 -2
  288. package/src/common/logs/request.ts +5 -1
  289. package/src/config.ts +3 -5
  290. package/src/constants.ts +77 -8
  291. package/src/index.ts +4 -0
  292. package/src/interceptors/index.ts +3 -0
  293. package/src/interceptors/locusRetry.ts +67 -0
  294. package/src/locus-info/index.ts +19 -14
  295. package/src/locus-info/mediaSharesUtils.ts +16 -0
  296. package/src/locus-info/parser.ts +40 -21
  297. package/src/media/index.ts +8 -6
  298. package/src/media/properties.ts +17 -2
  299. package/src/mediaQualityMetrics/config.ts +103 -238
  300. package/src/meeting/in-meeting-actions.ts +8 -0
  301. package/src/meeting/index.ts +1664 -642
  302. package/src/meeting/request.ts +18 -0
  303. package/src/meeting/util.ts +102 -1
  304. package/src/meeting/voicea-meeting.ts +122 -0
  305. package/src/meeting-info/index.ts +47 -20
  306. package/src/meeting-info/meeting-info-v2.ts +32 -16
  307. package/src/meeting-info/util.ts +12 -9
  308. package/src/meeting-info/utilv2.ts +25 -15
  309. package/src/meetings/collection.ts +13 -0
  310. package/src/meetings/index.ts +112 -31
  311. package/src/meetings/util.ts +2 -8
  312. package/src/member/index.ts +9 -1
  313. package/src/member/member.types.ts +13 -0
  314. package/src/member/util.ts +14 -0
  315. package/src/members/index.ts +29 -2
  316. package/src/members/types.ts +1 -0
  317. package/src/members/util.ts +15 -1
  318. package/src/metrics/constants.ts +12 -0
  319. package/src/reachability/clusterReachability.ts +320 -0
  320. package/src/reachability/index.ts +221 -382
  321. package/src/reachability/request.ts +1 -1
  322. package/src/reachability/util.ts +24 -0
  323. package/src/reconnection-manager/index.ts +87 -83
  324. package/src/roap/index.ts +60 -24
  325. package/src/roap/request.ts +4 -17
  326. package/src/roap/turnDiscovery.ts +112 -39
  327. package/src/rtcMetrics/index.ts +71 -5
  328. package/src/statsAnalyzer/index.ts +430 -427
  329. package/src/statsAnalyzer/mqaUtil.ts +317 -168
  330. package/src/webinar/collection.ts +31 -0
  331. package/src/webinar/index.ts +62 -0
  332. package/test/integration/spec/journey.js +12 -12
  333. package/test/integration/spec/space-meeting.js +1 -1
  334. package/test/unit/spec/breakouts/breakout.ts +2 -1
  335. package/test/unit/spec/breakouts/index.ts +7 -4
  336. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  337. package/test/unit/spec/locus-info/index.js +88 -12
  338. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  339. package/test/unit/spec/locus-info/mediaSharesUtils.ts +10 -0
  340. package/test/unit/spec/locus-info/parser.js +54 -13
  341. package/test/unit/spec/locus-info/selfUtils.js +1 -1
  342. package/test/unit/spec/media/index.ts +25 -4
  343. package/test/unit/spec/media/properties.ts +2 -2
  344. package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
  345. package/test/unit/spec/meeting/index.js +4388 -1382
  346. package/test/unit/spec/meeting/request.js +63 -12
  347. package/test/unit/spec/meeting/utils.js +145 -10
  348. package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
  349. package/test/unit/spec/meeting-info/index.js +180 -61
  350. package/test/unit/spec/meeting-info/meetinginfov2.js +216 -68
  351. package/test/unit/spec/meetings/collection.js +12 -0
  352. package/test/unit/spec/meetings/index.js +674 -193
  353. package/test/unit/spec/meetings/utils.js +35 -12
  354. package/test/unit/spec/member/index.js +8 -7
  355. package/test/unit/spec/member/util.js +32 -0
  356. package/test/unit/spec/members/index.js +130 -17
  357. package/test/unit/spec/members/utils.js +26 -0
  358. package/test/unit/spec/metrics/index.js +1 -2
  359. package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
  360. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  361. package/test/unit/spec/reachability/index.ts +505 -135
  362. package/test/unit/spec/reachability/util.ts +40 -0
  363. package/test/unit/spec/reconnection-manager/index.js +74 -17
  364. package/test/unit/spec/recording-controller/index.js +0 -1
  365. package/test/unit/spec/roap/index.ts +181 -61
  366. package/test/unit/spec/roap/request.ts +27 -3
  367. package/test/unit/spec/roap/turnDiscovery.ts +363 -102
  368. package/test/unit/spec/rtcMetrics/index.ts +57 -3
  369. package/test/unit/spec/stats-analyzer/index.js +1225 -12
  370. package/test/unit/spec/webinar/collection.ts +13 -0
  371. package/test/unit/spec/webinar/index.ts +60 -0
  372. package/test/utils/webex-test-users.js +12 -4
  373. package/dist/types/mediaQualityMetrics/config.d.ts +0 -365
  374. package/dist/types/reachability/index.d.ts +0 -152
  375. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -24
  376. /package/dist/{types/annotation → annotation}/annotation.types.d.ts +0 -0
  377. /package/dist/{types/annotation → annotation}/constants.d.ts +0 -0
  378. /package/dist/{types/annotation → annotation}/index.d.ts +0 -0
  379. /package/dist/{types/breakouts → breakouts}/breakout.d.ts +0 -0
  380. /package/dist/{types/breakouts → breakouts}/collection.d.ts +0 -0
  381. /package/dist/{types/breakouts → breakouts}/edit-lock-error.d.ts +0 -0
  382. /package/dist/{types/breakouts → breakouts}/events.d.ts +0 -0
  383. /package/dist/{types/breakouts → breakouts}/index.d.ts +0 -0
  384. /package/dist/{types/breakouts → breakouts}/request.d.ts +0 -0
  385. /package/dist/{types/breakouts → breakouts}/utils.d.ts +0 -0
  386. /package/dist/{types/common → common}/browser-detection.d.ts +0 -0
  387. /package/dist/{types/common → common}/collection.d.ts +0 -0
  388. /package/dist/{types/common → common}/config.d.ts +0 -0
  389. /package/dist/{types/common → common}/errors/captcha-error.d.ts +0 -0
  390. /package/dist/{types/common → common}/errors/intent-to-join.d.ts +0 -0
  391. /package/dist/{types/common → common}/errors/join-meeting.d.ts +0 -0
  392. /package/dist/{types/common → common}/errors/media.d.ts +0 -0
  393. /package/dist/{types/common → common}/errors/parameter.d.ts +0 -0
  394. /package/dist/{types/common → common}/errors/password-error.d.ts +0 -0
  395. /package/dist/{types/common → common}/errors/permission.d.ts +0 -0
  396. /package/dist/{types/common → common}/errors/reconnection-in-progress.d.ts +0 -0
  397. /package/dist/{types/common → common}/errors/reconnection.d.ts +0 -0
  398. /package/dist/{types/common → common}/errors/stats.d.ts +0 -0
  399. /package/dist/{types/common → common}/errors/webex-meetings-error.d.ts +0 -0
  400. /package/dist/{types/common → common}/events/events-scope.d.ts +0 -0
  401. /package/dist/{types/common → common}/events/events.d.ts +0 -0
  402. /package/dist/{types/common → common}/events/trigger-proxy.d.ts +0 -0
  403. /package/dist/{types/common → common}/events/util.d.ts +0 -0
  404. /package/dist/{types/common → common}/logs/logger-config.d.ts +0 -0
  405. /package/dist/{types/common → common}/logs/logger-proxy.d.ts +0 -0
  406. /package/dist/{types/common → common}/queue.d.ts +0 -0
  407. /package/dist/{types/controls-options-manager → controls-options-manager}/constants.d.ts +0 -0
  408. /package/dist/{types/controls-options-manager → controls-options-manager}/enums.d.ts +0 -0
  409. /package/dist/{types/controls-options-manager → controls-options-manager}/index.d.ts +0 -0
  410. /package/dist/{types/controls-options-manager → controls-options-manager}/types.d.ts +0 -0
  411. /package/dist/{types/controls-options-manager → controls-options-manager}/util.d.ts +0 -0
  412. /package/dist/{types/index.d.ts → index.d.ts} +0 -0
  413. /package/dist/{types/interpretation → interpretation}/collection.d.ts +0 -0
  414. /package/dist/{types/interpretation → interpretation}/index.d.ts +0 -0
  415. /package/dist/{types/interpretation → interpretation}/siLanguage.d.ts +0 -0
  416. /package/dist/{types/locus-info → locus-info}/controlsUtils.d.ts +0 -0
  417. /package/dist/{types/locus-info → locus-info}/embeddedAppsUtils.d.ts +0 -0
  418. /package/dist/{types/locus-info → locus-info}/fullState.d.ts +0 -0
  419. /package/dist/{types/locus-info → locus-info}/hostUtils.d.ts +0 -0
  420. /package/dist/{types/locus-info → locus-info}/infoUtils.d.ts +0 -0
  421. /package/dist/{types/locus-info → locus-info}/mediaSharesUtils.d.ts +0 -0
  422. /package/dist/{types/locus-info → locus-info}/selfUtils.d.ts +0 -0
  423. /package/dist/{types/media → media}/index.d.ts +0 -0
  424. /package/dist/{types/media → media}/properties.d.ts +0 -0
  425. /package/dist/{types/media → media}/util.d.ts +0 -0
  426. /package/dist/{types/meeting → meeting}/locusMediaRequest.d.ts +0 -0
  427. /package/dist/{types/meeting → meeting}/muteState.d.ts +0 -0
  428. /package/dist/{types/meeting → meeting}/request.type.d.ts +0 -0
  429. /package/dist/{types/meeting → meeting}/state.d.ts +0 -0
  430. /package/dist/{types/meeting-info → meeting-info}/collection.d.ts +0 -0
  431. /package/dist/{types/meeting-info → meeting-info}/request.d.ts +0 -0
  432. /package/dist/{types/meeting-info → meeting-info}/util.d.ts +0 -0
  433. /package/dist/{types/meeting-info → meeting-info}/utilv2.d.ts +0 -0
  434. /package/dist/{types/meetings → meetings}/meetings.types.d.ts +0 -0
  435. /package/dist/{types/meetings → meetings}/request.d.ts +0 -0
  436. /package/dist/{types/meetings → meetings}/util.d.ts +0 -0
  437. /package/dist/{types/member → member}/types.d.ts +0 -0
  438. /package/dist/{types/member → member}/util.d.ts +0 -0
  439. /package/dist/{types/members → members}/collection.d.ts +0 -0
  440. /package/dist/{types/members → members}/index.d.ts +0 -0
  441. /package/dist/{types/members → members}/request.d.ts +0 -0
  442. /package/dist/{types/metrics → metrics}/index.d.ts +0 -0
  443. /package/dist/{types/multistream → multistream}/mediaRequestManager.d.ts +0 -0
  444. /package/dist/{types/multistream → multistream}/receiveSlot.d.ts +0 -0
  445. /package/dist/{types/multistream → multistream}/receiveSlotManager.d.ts +0 -0
  446. /package/dist/{types/multistream → multistream}/remoteMedia.d.ts +0 -0
  447. /package/dist/{types/multistream → multistream}/remoteMediaGroup.d.ts +0 -0
  448. /package/dist/{types/multistream → multistream}/remoteMediaManager.d.ts +0 -0
  449. /package/dist/{types/multistream → multistream}/sendSlotManager.d.ts +0 -0
  450. /package/dist/{types/networkQualityMonitor → networkQualityMonitor}/index.d.ts +0 -0
  451. /package/dist/{types/personal-meeting-room → personal-meeting-room}/index.d.ts +0 -0
  452. /package/dist/{types/personal-meeting-room → personal-meeting-room}/request.d.ts +0 -0
  453. /package/dist/{types/personal-meeting-room → personal-meeting-room}/util.d.ts +0 -0
  454. /package/dist/{types/reachability → reachability}/request.d.ts +0 -0
  455. /package/dist/{types/reactions → reactions}/constants.d.ts +0 -0
  456. /package/dist/{types/reactions → reactions}/reactions.d.ts +0 -0
  457. /package/dist/{types/reactions → reactions}/reactions.type.d.ts +0 -0
  458. /package/dist/{types/recording-controller → recording-controller}/enums.d.ts +0 -0
  459. /package/dist/{types/recording-controller → recording-controller}/index.d.ts +0 -0
  460. /package/dist/{types/recording-controller → recording-controller}/util.d.ts +0 -0
  461. /package/dist/{types/roap → roap}/request.d.ts +0 -0
  462. /package/dist/{types/rtcMetrics → rtcMetrics}/constants.d.ts +0 -0
  463. /package/dist/{types/statsAnalyzer → statsAnalyzer}/global.d.ts +0 -0
  464. /package/dist/{types/transcription → transcription}/index.d.ts +0 -0
  465. /package/test/unit/spec/locus-info/{selfConstant.js → lib/selfConstant.js} +0 -0
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
+ var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
5
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
6
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
7
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
8
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
4
9
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
5
10
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
11
  _Object$defineProperty(exports, "__esModule", {
@@ -17,7 +22,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/
17
22
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
18
23
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
19
24
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
20
- var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
25
+ var _lodash = require("lodash");
21
26
  var _internalMediaCore = require("@webex/internal-media-core");
22
27
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
23
28
  var _constants = require("../constants");
@@ -25,16 +30,17 @@ var _config = require("../mediaQualityMetrics/config");
25
30
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
26
31
  var _global = _interopRequireDefault(require("./global"));
27
32
  var _mqaUtil = require("./mqaUtil");
33
+ function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
34
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
28
35
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
29
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
30
- var EVENTS = {
36
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /* eslint-disable prefer-destructuring */
37
+ var EVENTS = exports.EVENTS = {
31
38
  MEDIA_QUALITY: 'MEDIA_QUALITY',
32
39
  LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',
33
40
  LOCAL_MEDIA_STOPPED: 'LOCAL_MEDIA_STOPPED',
34
41
  REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',
35
42
  REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED'
36
43
  };
37
- exports.EVENTS = EVENTS;
38
44
  var emptySender = {
39
45
  trackLabel: '',
40
46
  maxPacketLossRatio: 0,
@@ -56,7 +62,7 @@ var emptyReceiver = {
56
62
  * @class StatsAnalyzer
57
63
  * @extends {EventsScope}
58
64
  */
59
- var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
65
+ var StatsAnalyzer = exports.StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
60
66
  (0, _inherits2.default)(StatsAnalyzer, _EventsScope);
61
67
  var _super = _createSuper(StatsAnalyzer);
62
68
  /**
@@ -90,7 +96,24 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
90
96
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsInterval", void 0);
91
97
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsResults", void 0);
92
98
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsStarted", void 0);
99
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "successfulCandidatePair", void 0);
100
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "localIpAddress", void 0);
101
+ // 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
93
102
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "receiveSlotCallback", void 0);
103
+ /**
104
+ * emits started/stopped events for local/remote media by checking
105
+ * if given values are increasing or not. The previousValue, currentValue
106
+ * params can be any numerical value like number of receive packets or
107
+ * decoded frames, etc.
108
+ *
109
+ * @private
110
+ * @param {string} mediaType
111
+ * @param {number} previousValue - value to compare
112
+ * @param {number} currentValue - value to compare (must be same type of value as previousValue)
113
+ * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received
114
+ * @memberof StatsAnalyzer
115
+ * @returns {void}
116
+ */
94
117
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "emitStartStopEvents", function (mediaType, previousValue, currentValue, isLocal) {
95
118
  if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
96
119
  throw new Error("Unsupported mediaType: ".concat(mediaType));
@@ -124,57 +147,96 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
124
147
  });
125
148
  }
126
149
  });
150
+ /**
151
+ * extracts the local Ip address from the statsResult object by looking at stats results candidates
152
+ * and matches that ID with the successful candidate pair. It looks at the type of local candidate it is
153
+ * and then extracts the IP address from the relatedAddress or address property based on conditions known in webrtc
154
+ * 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
155
+ * for example, firefox does not set the relayProtocol, and if the user is behind a NAT it might be the public IP
156
+ * @private
157
+ * @param {string} successfulCandidatePairId - The ID of the successful candidate pair.
158
+ * @param {Object} candidates - the stats result candidates
159
+ * @returns {void}
160
+ */
161
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "extractAndSetLocalIpAddressInfoForDiagnostics", function (successfulCandidatePairId, candidates) {
162
+ var newIpAddress = '';
163
+ if (successfulCandidatePairId && !(0, _lodash.isEmpty)(candidates)) {
164
+ var localCandidate = candidates[successfulCandidatePairId];
165
+ if (localCandidate) {
166
+ if (localCandidate.candidateType === 'host') {
167
+ // if it's a host candidate, use the address property - it will be the local IP
168
+ newIpAddress = "".concat(localCandidate.address);
169
+ } else if (localCandidate.candidateType === 'prflx') {
170
+ // if it's a peer reflexive candidate and we're not using a relay (there is no relayProtocol set)
171
+ // then look at the relatedAddress - it will be the local
172
+ //
173
+ // Firefox doesn't populate the relayProtocol property
174
+ if (!localCandidate.relayProtocol) {
175
+ newIpAddress = "".concat(localCandidate.relatedAddress);
176
+ } else {
177
+ // if it's a peer reflexive candidate and we are using a relay -
178
+ // in that case the relatedAddress will be the IP of the TURN server (Linus),
179
+ // so we can only look at the address, but it might be local IP or public IP,
180
+ // depending on if the user is behind a NAT or not
181
+ newIpAddress = "".concat(localCandidate.address);
182
+ }
183
+ }
184
+ }
185
+ }
186
+ _this.localIpAddress = newIpAddress;
187
+ });
188
+ /**
189
+ * Processes remote and local candidate result and stores
190
+ * @private
191
+ * @param {*} result
192
+ * @param {*} type
193
+ * @param {boolean} isSender
194
+ * @param {boolean} isRemote
195
+ *
196
+ * @returns {void}
197
+ */
127
198
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "parseCandidate", function (result, type, isSender, isRemote) {
199
+ var _this$successfulCandi;
128
200
  if (!result || !result.id) {
129
201
  return;
130
202
  }
131
- var RemoteCandidateType = {};
132
- var RemoteTransport = {};
133
- var RemoteIpAddress = {};
134
- var RemoteNetworkType = {};
135
- if (!result.id) return;
136
- var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
137
- var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
138
- if (!RemoteCandidateType[result.id]) {
139
- RemoteCandidateType[result.id] = [];
140
- }
141
- if (!RemoteTransport[result.id]) {
142
- RemoteTransport[result.id] = [];
143
- }
144
- if (!RemoteIpAddress[result.id]) {
145
- RemoteIpAddress[result.id] = [];
146
- }
147
- if (!RemoteNetworkType[result.id]) {
148
- RemoteNetworkType[result.id] = [];
149
- }
150
- if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {
151
- RemoteCandidateType[result.id].push(result.candidateType);
152
- }
153
- if (result.protocol && RemoteTransport[result.id].indexOf(result.protocol) === -1) {
154
- RemoteTransport[result.id].push(result.protocol.toUpperCase());
203
+
204
+ // We only care about the successful local candidate
205
+ if (((_this$successfulCandi = _this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {
206
+ return;
155
207
  }
156
- if (result.ip && RemoteIpAddress[result.id].indexOf("".concat(result.ip, ":").concat(result.portNumber)) === -1) {
157
- RemoteIpAddress[result.id].push("".concat(result.ip)); // TODO: Add ports
208
+ var transport;
209
+ if (result.relayProtocol) {
210
+ transport = result.relayProtocol.toUpperCase();
211
+ } else if (result.protocol) {
212
+ transport = result.protocol.toUpperCase();
158
213
  }
159
-
160
- if (result.networkType && RemoteNetworkType[result.id].indexOf(result.networkType) === -1) {
161
- RemoteNetworkType[result.id].push(result.networkType);
214
+ var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
215
+ var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
216
+ if (!_this.statsResults.candidates) {
217
+ _this.statsResults.candidates = {};
162
218
  }
163
- _this.statsResults.internal.candidates[result.id] = {
164
- candidateType: RemoteCandidateType[result.id],
165
- ipAddress: RemoteIpAddress[result.id],
219
+ _this.statsResults.candidates[result.id] = {
220
+ candidateType: result.candidateType,
221
+ ipAddress: result.ip,
222
+ // TODO: add ports
223
+ relatedAddress: result.relatedAddress,
224
+ relatedPort: result.relatedPort,
225
+ relayProtocol: result.relayProtocol,
226
+ protocol: result.protocol,
227
+ address: result.address,
166
228
  portNumber: result.port,
167
- networkType: RemoteNetworkType[result.id],
229
+ networkType: result.networkType,
168
230
  priority: result.priority,
169
- transport: RemoteTransport[result.id],
231
+ transport: transport,
170
232
  timestamp: result.time,
171
233
  id: result.id,
172
234
  type: result.type
173
235
  };
174
- _this.statsResults.connectionType[ipType].candidateType = RemoteCandidateType[result.id];
175
- _this.statsResults.connectionType[ipType].ipAddress = RemoteIpAddress[result.id];
176
- _this.statsResults.connectionType[ipType].networkType = RemoteNetworkType[result.id][0] === _constants.NETWORK_TYPE.VPN ? _constants.NETWORK_TYPE.UNKNOWN : RemoteNetworkType[result.id][0];
177
- _this.statsResults.connectionType[ipType].transport = RemoteTransport[result.id];
236
+ _this.statsResults.connectionType[ipType].candidateType = result.candidateType;
237
+ _this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;
238
+ _this.statsResults.connectionType[ipType].networkType = result.networkType === _constants.NETWORK_TYPE.VPN ? _constants.NETWORK_TYPE.UNKNOWN : result.networkType;
239
+ _this.statsResults.connectionType[ipType].transport = transport;
178
240
  _this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
179
241
  });
180
242
  _this.statsStarted = false;
@@ -187,6 +249,8 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
187
249
  _this.lastMqaDataSent = {};
188
250
  _this.lastEmittedStartStopEvent = {};
189
251
  _this.receiveSlotCallback = receiveSlotCallback;
252
+ _this.successfulCandidatePair = {};
253
+ _this.localIpAddress = '';
190
254
  return _this;
191
255
  }
192
256
 
@@ -223,7 +287,11 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
223
287
  }, {
224
288
  key: "updateMediaStatus",
225
289
  value: function updateMediaStatus(status) {
226
- this.meetingMediaStatus = status;
290
+ var _this$meetingMediaSta, _this$meetingMediaSta2;
291
+ this.meetingMediaStatus = {
292
+ actual: _objectSpread(_objectSpread({}, (_this$meetingMediaSta = this.meetingMediaStatus) === null || _this$meetingMediaSta === void 0 ? void 0 : _this$meetingMediaSta.actual), status === null || status === void 0 ? void 0 : status.actual),
293
+ expected: _objectSpread(_objectSpread({}, (_this$meetingMediaSta2 = this.meetingMediaStatus) === null || _this$meetingMediaSta2 === void 0 ? void 0 : _this$meetingMediaSta2.expected), status === null || status === void 0 ? void 0 : status.expected)
294
+ };
227
295
  }
228
296
 
229
297
  /**
@@ -237,65 +305,187 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
237
305
  key: "sendMqaData",
238
306
  value: function sendMqaData() {
239
307
  var _this3 = this;
240
- var newMqa = (0, _cloneDeep2.default)(_config.emptyMqaInterval);
308
+ var newMqa = (0, _lodash.cloneDeep)(_config.emptyMqaInterval);
309
+
310
+ // Fill in empty stats items for lastMqaDataSent
241
311
  (0, _keys.default)(this.statsResults).forEach(function (mediaType) {
242
- if (mediaType.includes('audio-send') || mediaType.includes('audio-share-send')) {
243
- var audioSender = (0, _cloneDeep2.default)(_config.emptyAudioTransmit);
244
- (0, _mqaUtil.getAudioSenderMqa)({
245
- audioSender: audioSender,
312
+ if (!_this3.lastMqaDataSent[mediaType]) {
313
+ _this3.lastMqaDataSent[mediaType] = {};
314
+ }
315
+ if (!_this3.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {
316
+ _this3.lastMqaDataSent[mediaType].send = {};
317
+ }
318
+ if (!_this3.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {
319
+ _this3.lastMqaDataSent[mediaType].recv = {};
320
+ }
321
+ });
322
+
323
+ // Create stats the first level, totals for senders and receivers
324
+ var audioSender = (0, _lodash.cloneDeep)(_config.emptyAudioTransmit);
325
+ var audioShareSender = (0, _lodash.cloneDeep)(_config.emptyAudioTransmit);
326
+ var audioReceiver = (0, _lodash.cloneDeep)(_config.emptyAudioReceive);
327
+ var audioShareReceiver = (0, _lodash.cloneDeep)(_config.emptyAudioReceive);
328
+ var videoSender = (0, _lodash.cloneDeep)(_config.emptyVideoTransmit);
329
+ var videoShareSender = (0, _lodash.cloneDeep)(_config.emptyVideoTransmit);
330
+ var videoReceiver = (0, _lodash.cloneDeep)(_config.emptyVideoReceive);
331
+ var videoShareReceiver = (0, _lodash.cloneDeep)(_config.emptyVideoReceive);
332
+ (0, _mqaUtil.getAudioSenderMqa)({
333
+ audioSender: audioSender,
334
+ statsResults: this.statsResults,
335
+ lastMqaDataSent: this.lastMqaDataSent,
336
+ baseMediaType: 'audio-send'
337
+ });
338
+ newMqa.audioTransmit.push(audioSender);
339
+ (0, _mqaUtil.getAudioSenderMqa)({
340
+ audioSender: audioShareSender,
341
+ statsResults: this.statsResults,
342
+ lastMqaDataSent: this.lastMqaDataSent,
343
+ baseMediaType: 'audio-share-send'
344
+ });
345
+ newMqa.audioTransmit.push(audioShareSender);
346
+ (0, _mqaUtil.getAudioReceiverMqa)({
347
+ audioReceiver: audioReceiver,
348
+ statsResults: this.statsResults,
349
+ lastMqaDataSent: this.lastMqaDataSent,
350
+ baseMediaType: 'audio-recv'
351
+ });
352
+ newMqa.audioReceive.push(audioReceiver);
353
+ (0, _mqaUtil.getAudioReceiverMqa)({
354
+ audioReceiver: audioShareReceiver,
355
+ statsResults: this.statsResults,
356
+ lastMqaDataSent: this.lastMqaDataSent,
357
+ baseMediaType: 'audio-share-recv'
358
+ });
359
+ newMqa.audioReceive.push(audioShareReceiver);
360
+ (0, _mqaUtil.getVideoSenderMqa)({
361
+ videoSender: videoSender,
362
+ statsResults: this.statsResults,
363
+ lastMqaDataSent: this.lastMqaDataSent,
364
+ baseMediaType: 'video-send'
365
+ });
366
+ newMqa.videoTransmit.push(videoSender);
367
+ (0, _mqaUtil.getVideoSenderMqa)({
368
+ videoSender: videoShareSender,
369
+ statsResults: this.statsResults,
370
+ lastMqaDataSent: this.lastMqaDataSent,
371
+ baseMediaType: 'video-share-send'
372
+ });
373
+ newMqa.videoTransmit.push(videoShareSender);
374
+ (0, _mqaUtil.getVideoReceiverMqa)({
375
+ videoReceiver: videoReceiver,
376
+ statsResults: this.statsResults,
377
+ lastMqaDataSent: this.lastMqaDataSent,
378
+ baseMediaType: 'video-recv'
379
+ });
380
+ newMqa.videoReceive.push(videoReceiver);
381
+ (0, _mqaUtil.getVideoReceiverMqa)({
382
+ videoReceiver: videoShareReceiver,
383
+ statsResults: this.statsResults,
384
+ lastMqaDataSent: this.lastMqaDataSent,
385
+ baseMediaType: 'video-share-recv'
386
+ });
387
+ newMqa.videoReceive.push(videoShareReceiver);
388
+
389
+ // Add stats for individual streams
390
+ (0, _keys.default)(this.statsResults).forEach(function (mediaType) {
391
+ if (mediaType.includes('audio-send')) {
392
+ var audioSenderStream = (0, _lodash.cloneDeep)(_config.emptyAudioTransmitStream);
393
+ (0, _mqaUtil.getAudioSenderStreamMqa)({
394
+ audioSenderStream: audioSenderStream,
395
+ statsResults: _this3.statsResults,
396
+ lastMqaDataSent: _this3.lastMqaDataSent,
397
+ mediaType: mediaType
398
+ });
399
+ newMqa.audioTransmit[0].streams.push(audioSenderStream);
400
+ _this3.lastMqaDataSent[mediaType].send = (0, _lodash.cloneDeep)(_this3.statsResults[mediaType].send);
401
+ } else if (mediaType.includes('audio-share-send')) {
402
+ var _audioSenderStream = (0, _lodash.cloneDeep)(_config.emptyAudioTransmitStream);
403
+ (0, _mqaUtil.getAudioSenderStreamMqa)({
404
+ audioSenderStream: _audioSenderStream,
405
+ statsResults: _this3.statsResults,
406
+ lastMqaDataSent: _this3.lastMqaDataSent,
407
+ mediaType: mediaType
408
+ });
409
+ newMqa.audioTransmit[1].streams.push(_audioSenderStream);
410
+ _this3.lastMqaDataSent[mediaType].send = (0, _lodash.cloneDeep)(_this3.statsResults[mediaType].send);
411
+ } else if (mediaType.includes('audio-recv')) {
412
+ var audioReceiverStream = (0, _lodash.cloneDeep)(_config.emptyAudioReceiveStream);
413
+ (0, _mqaUtil.getAudioReceiverStreamMqa)({
414
+ audioReceiverStream: audioReceiverStream,
246
415
  statsResults: _this3.statsResults,
247
416
  lastMqaDataSent: _this3.lastMqaDataSent,
248
417
  mediaType: mediaType
249
418
  });
250
- newMqa.audioTransmit.push(audioSender);
251
- } else if (mediaType.includes('audio-recv') || mediaType.includes('audio-share-recv')) {
252
- var audioReceiver = (0, _cloneDeep2.default)(_config.emptyAudioReceive);
253
- (0, _mqaUtil.getAudioReceiverMqa)({
254
- audioReceiver: audioReceiver,
419
+ newMqa.audioReceive[0].streams.push(audioReceiverStream);
420
+ _this3.lastMqaDataSent[mediaType].recv = (0, _lodash.cloneDeep)(_this3.statsResults[mediaType].recv);
421
+ } else if (mediaType.includes('audio-share-recv')) {
422
+ var _audioReceiverStream = (0, _lodash.cloneDeep)(_config.emptyAudioReceiveStream);
423
+ (0, _mqaUtil.getAudioReceiverStreamMqa)({
424
+ audioReceiverStream: _audioReceiverStream,
255
425
  statsResults: _this3.statsResults,
256
426
  lastMqaDataSent: _this3.lastMqaDataSent,
257
427
  mediaType: mediaType
258
428
  });
259
- newMqa.audioReceive.push(audioReceiver);
260
- } else if (mediaType.includes('video-send') || mediaType.includes('video-share-send')) {
261
- var videoSender = (0, _cloneDeep2.default)(_config.emptyVideoTransmit);
262
- (0, _mqaUtil.getVideoSenderMqa)({
263
- videoSender: videoSender,
429
+ newMqa.audioReceive[1].streams.push(_audioReceiverStream);
430
+ _this3.lastMqaDataSent[mediaType].recv = (0, _lodash.cloneDeep)(_this3.statsResults[mediaType].recv);
431
+ } else if (mediaType.includes('video-send')) {
432
+ var videoSenderStream = (0, _lodash.cloneDeep)(_config.emptyVideoTransmitStream);
433
+ (0, _mqaUtil.getVideoSenderStreamMqa)({
434
+ videoSenderStream: videoSenderStream,
264
435
  statsResults: _this3.statsResults,
265
436
  lastMqaDataSent: _this3.lastMqaDataSent,
266
437
  mediaType: mediaType
267
438
  });
268
- newMqa.videoTransmit.push(videoSender);
269
- } else if (mediaType.includes('video-recv') || mediaType.includes('video-share-recv')) {
270
- var videoReceiver = (0, _cloneDeep2.default)(_config.emptyVideoReceive);
271
- (0, _mqaUtil.getVideoReceiverMqa)({
272
- videoReceiver: videoReceiver,
439
+ newMqa.videoTransmit[0].streams.push(videoSenderStream);
440
+ _this3.lastMqaDataSent[mediaType].send = (0, _lodash.cloneDeep)(_this3.statsResults[mediaType].send);
441
+ } else if (mediaType.includes('video-share-send')) {
442
+ var _videoSenderStream = (0, _lodash.cloneDeep)(_config.emptyVideoTransmitStream);
443
+ (0, _mqaUtil.getVideoSenderStreamMqa)({
444
+ videoSenderStream: _videoSenderStream,
273
445
  statsResults: _this3.statsResults,
274
446
  lastMqaDataSent: _this3.lastMqaDataSent,
275
447
  mediaType: mediaType
276
448
  });
277
- newMqa.videoReceive.push(videoReceiver);
449
+ newMqa.videoTransmit[1].streams.push(_videoSenderStream);
450
+ _this3.lastMqaDataSent[mediaType].send = (0, _lodash.cloneDeep)(_this3.statsResults[mediaType].send);
451
+ } else if (mediaType.includes('video-recv')) {
452
+ var videoReceiverStream = (0, _lodash.cloneDeep)(_config.emptyVideoReceiveStream);
453
+ (0, _mqaUtil.getVideoReceiverStreamMqa)({
454
+ videoReceiverStream: videoReceiverStream,
455
+ statsResults: _this3.statsResults,
456
+ lastMqaDataSent: _this3.lastMqaDataSent,
457
+ mediaType: mediaType
458
+ });
459
+ newMqa.videoReceive[0].streams.push(videoReceiverStream);
460
+ _this3.lastMqaDataSent[mediaType].recv = (0, _lodash.cloneDeep)(_this3.statsResults[mediaType].recv);
461
+ } else if (mediaType.includes('video-share-recv')) {
462
+ var _videoReceiverStream = (0, _lodash.cloneDeep)(_config.emptyVideoReceiveStream);
463
+ (0, _mqaUtil.getVideoReceiverStreamMqa)({
464
+ videoReceiverStream: _videoReceiverStream,
465
+ statsResults: _this3.statsResults,
466
+ lastMqaDataSent: _this3.lastMqaDataSent,
467
+ mediaType: mediaType
468
+ });
469
+ newMqa.videoReceive[1].streams.push(_videoReceiverStream);
470
+ _this3.lastMqaDataSent[mediaType].recv = (0, _lodash.cloneDeep)(_this3.statsResults[mediaType].recv);
278
471
  }
279
472
  });
280
- newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];
473
+ newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
281
474
 
282
475
  // Adding peripheral information
283
- newMqa.intervalMetadata.peripherals = [];
284
476
  newMqa.intervalMetadata.peripherals.push({
285
477
  information: _constants._UNKNOWN_,
286
478
  name: _constants.MEDIA_DEVICES.SPEAKER
287
479
  });
288
480
  if (this.statsResults['audio-send']) {
289
- var _this$statsResults$au;
290
481
  newMqa.intervalMetadata.peripherals.push({
291
- information: (_this$statsResults$au = this.statsResults['audio-send']) === null || _this$statsResults$au === void 0 ? void 0 : _this$statsResults$au.trackLabel,
482
+ information: this.statsResults['audio-send'].trackLabel || _constants._UNKNOWN_,
292
483
  name: _constants.MEDIA_DEVICES.MICROPHONE
293
484
  });
294
485
  }
295
486
  if (this.statsResults['video-send']) {
296
- var _this$statsResults$vi;
297
487
  newMqa.intervalMetadata.peripherals.push({
298
- information: (_this$statsResults$vi = this.statsResults['video-send']) === null || _this$statsResults$vi === void 0 ? void 0 : _this$statsResults$vi.trackLabel,
488
+ information: this.statsResults['video-send'].trackLabel || _constants._UNKNOWN_,
299
489
  name: _constants.MEDIA_DEVICES.CAMERA
300
490
  });
301
491
  }
@@ -327,6 +517,18 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
327
517
  this.mediaConnection = mediaConnection;
328
518
  }
329
519
 
520
+ /**
521
+ * Returns the local IP address for diagnostics.
522
+ * this is the local IP of the interface used for the current media connection
523
+ * a host can have many local Ip Addresses
524
+ * @returns {string | undefined} The local IP address.
525
+ */
526
+ }, {
527
+ key: "getLocalIpAddress",
528
+ value: function getLocalIpAddress() {
529
+ return this.localIpAddress;
530
+ }
531
+
330
532
  /**
331
533
  * Starts the stats analyzer on interval
332
534
  *
@@ -350,7 +552,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
350
552
  _this4.sendMqaData();
351
553
  _this4.mqaInterval = setInterval(function () {
352
554
  _this4.sendMqaData();
353
- }, _constants.MQA_INTEVAL);
555
+ }, _constants.MQA_INTERVAL);
354
556
  });
355
557
  }
356
558
  return _promise.default.resolve();
@@ -407,25 +609,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
407
609
  this.statsResults[type] = {};
408
610
  }
409
611
  if (isSender && !this.statsResults[type].send) {
410
- this.statsResults[type].send = (0, _cloneDeep2.default)(emptySender);
612
+ this.statsResults[type].send = (0, _lodash.cloneDeep)(emptySender);
411
613
  } else if (!isSender && !this.statsResults[type].recv) {
412
- this.statsResults[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
413
- }
414
- if (!this.statsResults.resolutions[type]) {
415
- this.statsResults.resolutions[type] = {};
416
- }
417
- if (isSender && !this.statsResults.resolutions[type].send) {
418
- this.statsResults.resolutions[type].send = (0, _cloneDeep2.default)(emptySender);
419
- } else if (!isSender && !this.statsResults.resolutions[type].recv) {
420
- this.statsResults.resolutions[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
421
- }
422
- if (!this.statsResults.internal[type]) {
423
- this.statsResults.internal[type] = {};
424
- }
425
- if (isSender && !this.statsResults.internal[type].send) {
426
- this.statsResults.internal[type].send = (0, _cloneDeep2.default)(emptySender);
427
- } else if (!isSender && !this.statsResults.internal[type].recv) {
428
- this.statsResults.internal[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
614
+ this.statsResults[type].recv = (0, _lodash.cloneDeep)(emptyReceiver);
429
615
  }
430
616
  switch (getStatsResult.type) {
431
617
  case 'outbound-rtp':
@@ -434,13 +620,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
434
620
  case 'inbound-rtp':
435
621
  this.processInboundRTPResult(getStatsResult, type);
436
622
  break;
437
- case 'track':
438
- this.processTrackResult(getStatsResult, type);
439
- break;
440
623
  case 'remote-inbound-rtp':
441
624
  case 'remote-outbound-rtp':
442
- // @ts-ignore
443
- this.compareSentAndReceived(getStatsResult, type, isSender);
625
+ this.compareSentAndReceived(getStatsResult, type);
444
626
  break;
445
627
  case 'remotecandidate':
446
628
  case 'remote-candidate':
@@ -450,7 +632,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
450
632
  this.parseCandidate(getStatsResult, type, isSender, false);
451
633
  break;
452
634
  case 'media-source':
453
- // @ts-ignore
454
635
  this.parseAudioSource(getStatsResult, type);
455
636
  break;
456
637
  default:
@@ -471,15 +652,26 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
471
652
  value: function filterAndParseGetStatsResults(statsItem, type, isSender) {
472
653
  var _this6 = this;
473
654
  var types = _constants.DEFAULT_GET_STATS_FILTER.types;
655
+
656
+ // get the successful candidate pair before parsing stats.
657
+ statsItem.report.forEach(function (report) {
658
+ if (report.type === 'candidate-pair' && report.state === 'succeeded') {
659
+ _this6.successfulCandidatePair = report;
660
+ }
661
+ });
474
662
  statsItem.report.forEach(function (result) {
475
663
  if (types.includes(result.type)) {
476
664
  _this6.parseGetStatsResult(result, type, isSender);
477
665
  }
478
666
  });
479
667
  if (this.statsResults[type]) {
668
+ var _this$successfulCandi2, _this$statsResults;
480
669
  this.statsResults[type].direction = statsItem.currentDirection;
481
670
  this.statsResults[type].trackLabel = statsItem.localTrackLabel;
482
671
  this.statsResults[type].csi = statsItem.csi;
672
+ 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);
673
+ // reset the successful candidate pair.
674
+ this.successfulCandidatePair = {};
483
675
  }
484
676
  }
485
677
 
@@ -500,21 +692,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
500
692
  this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;
501
693
  }
502
694
  }
503
-
504
- /**
505
- * emits started/stopped events for local/remote media by checking
506
- * if given values are increasing or not. The previousValue, currentValue
507
- * params can be any numerical value like number of receive packets or
508
- * decoded frames, etc.
509
- *
510
- * @private
511
- * @param {string} mediaType
512
- * @param {number} previousValue - value to compare
513
- * @param {number} currentValue - value to compare (must be same type of value as previousValue)
514
- * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received
515
- * @memberof StatsAnalyzer
516
- * @returns {void}
517
- */
518
695
  }, {
519
696
  key: "compareLastStatsResult",
520
697
  value:
@@ -544,138 +721,77 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
544
721
  return prev + (((_this7$lastStatsResul = _this7.lastStatsResults[cur]) === null || _this7$lastStatsResul === void 0 ? void 0 : _this7$lastStatsResul.recv[value]) || 0);
545
722
  }, 0);
546
723
  };
547
- var getCurrentResolutionsStatsTotals = function getCurrentResolutionsStatsTotals(keyPrefix, value) {
548
- return (0, _keys.default)(_this7.statsResults).filter(function (key) {
549
- return key.startsWith(keyPrefix);
550
- }).reduce(function (prev, cur) {
551
- var _this7$statsResults$r;
552
- return prev + (((_this7$statsResults$r = _this7.statsResults.resolutions[cur]) === null || _this7$statsResults$r === void 0 ? void 0 : _this7$statsResults$r.recv[value]) || 0);
553
- }, 0);
554
- };
555
- var getPreviousResolutionsStatsTotals = function getPreviousResolutionsStatsTotals(keyPrefix, value) {
556
- return (0, _keys.default)(_this7.statsResults).filter(function (key) {
557
- return key.startsWith(keyPrefix);
558
- }).reduce(function (prev, cur) {
559
- var _this7$lastStatsResul2;
560
- return prev + (((_this7$lastStatsResul2 = _this7.lastStatsResults.resolutions[cur]) === null || _this7$lastStatsResul2 === void 0 ? void 0 : _this7$lastStatsResul2.recv[value]) || 0);
561
- }, 0);
562
- };
563
- if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
724
+
725
+ // Audio Transmit
726
+ if (this.lastStatsResults['audio-send']) {
564
727
  // compare audio stats sent
565
728
  // NOTE: relies on there being only one sender.
566
729
  var currentStats = this.statsResults['audio-send'].send;
567
730
  var previousStats = this.lastStatsResults['audio-send'].send;
568
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
731
+ if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
569
732
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent", currentStats.totalPacketsSent);
570
733
  } else {
571
- if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
734
+ if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
572
735
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present", currentStats.totalAudioEnergy);
573
736
  }
574
- if (currentStats.audioLevel === 0) {
737
+ if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {
575
738
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
576
739
  }
577
740
  }
578
741
  this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
579
742
  }
580
- if (this.meetingMediaStatus.expected.receiveAudio) {
581
- // compare audio stats received
582
- var currentPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
583
- var previousPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
584
- var currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');
585
- var previousSamplesReceived = getPreviousStatsTotals('audio-recv', 'totalSamplesReceived');
586
- if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
587
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received", currentPacketsReceived);
588
- } else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
589
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received", currentSamplesReceived);
590
- }
591
- this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
592
- }
593
- if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {
743
+
744
+ // Audio Receive
745
+ var currentAudioPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
746
+ var previousAudioPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
747
+ this.emitStartStopEvents('audio', previousAudioPacketsReceived, currentAudioPacketsReceived, false);
748
+
749
+ // Video Transmit
750
+ if (this.lastStatsResults['video-send']) {
594
751
  // compare video stats sent
595
752
  var _currentStats = this.statsResults['video-send'].send;
596
753
  var _previousStats = this.lastStatsResults['video-send'].send;
597
- if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
754
+ if (this.meetingMediaStatus.expected.sendVideo && (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0)) {
598
755
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent", _currentStats.totalPacketsSent);
599
756
  } else {
600
- if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
757
+ if (this.meetingMediaStatus.expected.sendVideo && (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0)) {
601
758
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded", _currentStats.framesEncoded);
602
759
  }
603
- if (this.statsResults.resolutions['video-send'].send.framesSent === this.lastStatsResults.resolutions['video-send'].send.framesSent || this.statsResults.resolutions['video-send'].send.framesSent === 0) {
604
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", this.statsResults.resolutions['video-send'].send.framesSent);
760
+ if (this.meetingMediaStatus.expected.sendVideo && (this.statsResults['video-send'].send.framesSent === this.lastStatsResults['video-send'].send.framesSent || this.statsResults['video-send'].send.framesSent === 0)) {
761
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", this.statsResults['video-send'].send.framesSent);
605
762
  }
606
763
  }
607
764
  this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
608
765
  }
609
- if (this.meetingMediaStatus.expected.receiveVideo) {
610
- // compare video stats received
611
- var _currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');
612
- var _previousPacketsReceived = getPreviousStatsTotals('video-recv', 'totalPacketsReceived');
613
- var currentFramesReceived = getCurrentResolutionsStatsTotals('video-recv', 'framesReceived');
614
- var previousFramesReceived = getPreviousResolutionsStatsTotals('video-recv', 'framesReceived');
615
- var currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
616
- var previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
617
- var currentFramesDropped = getCurrentResolutionsStatsTotals('video-recv', 'framesDropped');
618
- var previousFramesDropped = getPreviousResolutionsStatsTotals('video-recv', 'framesDropped');
619
- if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
620
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received", _currentPacketsReceived);
621
- } else {
622
- if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
623
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received", currentFramesReceived);
624
- }
625
- if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
626
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded", currentFramesDecoded);
627
- }
628
- if (currentFramesDropped - previousFramesDropped > 10) {
629
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped", currentFramesDropped - previousFramesDropped);
630
- }
631
- }
632
- this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
633
- }
634
- if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {
766
+
767
+ // Video Receive
768
+ var currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
769
+ var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
770
+ this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);
771
+
772
+ // Share Transmit
773
+ if (this.lastStatsResults['video-share-send']) {
635
774
  // compare share stats sent
636
775
 
637
776
  var _currentStats2 = this.statsResults['video-share-send'].send;
638
777
  var _previousStats2 = this.lastStatsResults['video-share-send'].send;
639
- if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
778
+ if (this.meetingMediaStatus.expected.sendShare && (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0)) {
640
779
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats2.totalPacketsSent);
641
780
  } else {
642
- if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
781
+ if (this.meetingMediaStatus.expected.sendShare && (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0)) {
643
782
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats2.framesEncoded);
644
783
  }
645
- if (this.statsResults.resolutions['video-share-send'].send.framesSent === this.lastStatsResults.resolutions['video-share-send'].send.framesSent || this.statsResults.resolutions['video-share-send'].send.framesSent === 0) {
646
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults.resolutions['video-share-send'].send.framesSent);
784
+ if (this.meetingMediaStatus.expected.sendShare && (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0)) {
785
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults['video-share-send'].send.framesSent);
647
786
  }
648
787
  }
788
+ this.emitStartStopEvents('share', _previousStats2.framesSent, _currentStats2.framesSent, true);
649
789
  }
650
- if (this.meetingMediaStatus.expected.sendShare) {
651
- // TODO:need to check receive share value
652
- // compare share stats received
653
- var _currentPacketsReceived2 = getCurrentStatsTotals('video-share-recv', 'totalPacketsReceived');
654
- var _previousPacketsReceived2 = getPreviousStatsTotals('video-share-recv', 'totalPacketsReceived');
655
- var _currentFramesReceived = getCurrentResolutionsStatsTotals('video-share-recv', 'framesReceived');
656
- var _previousFramesReceived = getPreviousResolutionsStatsTotals('video-share-recv', 'framesReceived');
657
- var _currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
658
- var _previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
659
- var _currentFramesDropped = getCurrentResolutionsStatsTotals('video-share-recv', 'framesDropped');
660
- var _previousFramesDropped = getPreviousResolutionsStatsTotals('video-share-recv', 'framesDropped');
661
- if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
662
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received", _currentPacketsReceived2);
663
- } else {
664
- if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
665
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received", _currentFramesReceived);
666
- }
667
- if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
668
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded", _currentFramesDecoded);
669
- }
670
- if (_currentFramesDropped - _previousFramesDropped > 10) {
671
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped", _currentFramesDropped - _previousFramesDropped);
672
- }
673
- }
674
790
 
675
- // we are not calling emitStartStopEvents() for sending or receiving share because sharing is often started and stopped
676
- // in meetings and this.meetingMediaStatus.expected values can be out of sync with the actual packet flow
677
- // so we would send "sharing stopped" events incorrectly
678
- }
791
+ // Share receive
792
+ var currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
793
+ var previousShareFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
794
+ this.emitStartStopEvents('share', previousShareFramesDecoded, currentShareFramesDecoded, false);
679
795
  }
680
796
  }
681
797
 
@@ -758,33 +874,15 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
758
874
  if (result.bytesSent) {
759
875
  var kilobytes = 0;
760
876
  if (result.frameWidth && result.frameHeight) {
761
- this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
762
- this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
763
- this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
764
- this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
765
- }
766
- if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
767
- this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
877
+ this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
878
+ this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
879
+ this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
880
+ this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
768
881
  }
769
- if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {
770
- this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
771
- }
772
- if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
773
- this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
774
- }
775
- var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
776
- this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
777
- kilobytes = bytes / 1024;
778
882
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
779
- this.statsResults[mediaType].bytesSent = kilobytes;
780
- this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
781
- this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
782
- this.statsResults.internal[mediaType].outboundRtpId = result.id;
783
- if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
784
- this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
785
- }
786
- this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
787
- this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
883
+ this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
884
+ this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
885
+ this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;
788
886
 
789
887
  // Data saved to send MQA metrics
790
888
 
@@ -819,50 +917,53 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
819
917
  if (result.bytesReceived) {
820
918
  var kilobytes = 0;
821
919
  var receiveSlot = this.receiveSlotCallback(result.ssrc);
920
+ var sourceState = receiveSlot === null || receiveSlot === void 0 ? void 0 : receiveSlot.sourceState;
822
921
  var idAndCsi = receiveSlot ? "id: \"".concat(receiveSlot.id || '', "\"").concat(receiveSlot.csi ? " and csi: ".concat(receiveSlot.csi) : '') : '';
823
- if (result.frameWidth && result.frameHeight) {
824
- this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
825
- this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
826
- this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
827
- }
828
- if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
829
- this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
830
- }
831
- if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
832
- this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;
833
- }
834
- if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {
835
- this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;
836
- }
837
- if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
838
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
839
- }
840
- if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
841
- this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
842
- }
843
- var bytes = result.bytesReceived - this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
844
- this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
922
+ var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
845
923
  kilobytes = bytes / 1024;
846
924
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
847
- this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
848
- this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
849
- this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
850
- if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
851
- this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
925
+ var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
926
+ if (currentPacketsLost < 0) {
927
+ currentPacketsLost = 0;
852
928
  }
853
- this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
854
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
855
- if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
856
- if (receiveSlot) {
857
- _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].packetsReceived);
929
+ var packetsReceivedDiff = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
930
+ this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
931
+ if (packetsReceivedDiff === 0) {
932
+ if (receiveSlot && sourceState === 'live') {
933
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total packets received on slot: "), result.packetsReceived);
934
+ }
935
+ }
936
+ if (mediaType.startsWith('video') || mediaType.startsWith('share')) {
937
+ var videoFramesReceivedDiff = result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;
938
+ if (videoFramesReceivedDiff === 0) {
939
+ if (receiveSlot && sourceState === 'live') {
940
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames received on slot: "), result.framesReceived);
941
+ }
942
+ }
943
+ var videoFramesDecodedDiff = result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;
944
+ if (videoFramesDecodedDiff === 0) {
945
+ if (receiveSlot && sourceState === 'live') {
946
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames decoded on slot: "), result.framesDecoded);
947
+ }
948
+ }
949
+ var videoFramesDroppedDiff = result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;
950
+ if (videoFramesDroppedDiff > 10) {
951
+ if (receiveSlot && sourceState === 'live') {
952
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames dropped on slot: "), result.framesDropped);
953
+ }
858
954
  }
859
955
  }
860
956
 
861
957
  // Check the over all packet Lost ratio
862
- this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0 ? this.statsResults[mediaType][sendrecvType].currentPacketsLost / (this.statsResults[mediaType][sendrecvType].packetsReceived + this.statsResults[mediaType][sendrecvType].currentPacketsLost) : 0;
958
+ this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;
863
959
  if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
864
960
  _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
865
961
  }
962
+ if (result.frameWidth && result.frameHeight) {
963
+ this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
964
+ this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
965
+ this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
966
+ }
866
967
 
867
968
  // TODO: check the packet loss value is negative values here
868
969
 
@@ -878,6 +979,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
878
979
  this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
879
980
  this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
880
981
  this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
982
+ this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;
881
983
  this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
882
984
  this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
883
985
  this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
@@ -895,51 +997,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
895
997
  this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
896
998
  }
897
999
  }
898
-
899
- /**
900
- * Processes remote and local candidate result and stores
901
- * @private
902
- * @param {*} result
903
- * @param {*} type
904
- * @param {boolean} isSender
905
- * @param {boolean} isRemote
906
- *
907
- * @returns {void}
908
- */
909
1000
  }, {
910
- key: "processTrackResult",
1001
+ key: "compareSentAndReceived",
911
1002
  value:
912
- /**
913
- * Process Track results
914
- *
915
- * @private
916
- * @param {*} result
917
- * @param {*} mediaType
918
- * @returns {void}
919
- * @memberof StatsAnalyzer
920
- */
921
- function processTrackResult(result, mediaType) {
922
- if (!result || result.type !== 'track') {
923
- return;
924
- }
925
- var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
926
- if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
927
- this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
928
- this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
929
- this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
930
- }
931
- if (result.trackIdentifier && !mediaType.includes('audio')) {
932
- this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
933
- var jitterBufferDelay = result && result.jitterBufferDelay;
934
- var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
935
- this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
936
-
937
- // Used to calculate the jitter
938
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
939
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
940
- }
941
- }
942
-
943
1003
  /**
944
1004
  *
945
1005
  * @private
@@ -948,19 +1008,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
948
1008
  * @returns {void}
949
1009
  * @memberof StatsAnalyzer
950
1010
  */
951
- }, {
952
- key: "compareSentAndReceived",
953
- value: function compareSentAndReceived(result, type) {
1011
+ function compareSentAndReceived(result, type) {
954
1012
  // Don't compare on transceivers without a sender.
955
- if (!type || !this.statsResults.internal[type].send) {
1013
+ if (!type || !this.statsResults[type].send) {
956
1014
  return;
957
1015
  }
958
1016
  var mediaType = type;
959
- if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
960
- this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
961
- }
962
- var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
963
- this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
1017
+ var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
964
1018
  this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
965
1019
  this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
966
1020
  this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);
@@ -986,5 +1040,4 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
986
1040
  }]);
987
1041
  return StatsAnalyzer;
988
1042
  }(_eventsScope.default);
989
- exports.StatsAnalyzer = StatsAnalyzer;
990
1043
  //# sourceMappingURL=index.js.map