@webex/plugin-meetings 2.60.1-next.9 → 2.60.2

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