@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.20

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 (365) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +116 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/index.js +226 -0
  8. package/dist/breakouts/index.js.map +1 -0
  9. package/dist/common/browser-detection.js +1 -20
  10. package/dist/common/browser-detection.js.map +1 -1
  11. package/dist/common/collection.js +5 -20
  12. package/dist/common/collection.js.map +1 -1
  13. package/dist/common/config.js +0 -7
  14. package/dist/common/config.js.map +1 -1
  15. package/dist/common/errors/captcha-error.js +10 -24
  16. package/dist/common/errors/captcha-error.js.map +1 -1
  17. package/dist/common/errors/intent-to-join.js +11 -24
  18. package/dist/common/errors/intent-to-join.js.map +1 -1
  19. package/dist/common/errors/join-meeting.js +12 -25
  20. package/dist/common/errors/join-meeting.js.map +1 -1
  21. package/dist/common/errors/media.js +10 -24
  22. package/dist/common/errors/media.js.map +1 -1
  23. package/dist/common/errors/parameter.js +5 -33
  24. package/dist/common/errors/parameter.js.map +1 -1
  25. package/dist/common/errors/password-error.js +10 -24
  26. package/dist/common/errors/password-error.js.map +1 -1
  27. package/dist/common/errors/permission.js +9 -23
  28. package/dist/common/errors/permission.js.map +1 -1
  29. package/dist/common/errors/reconnection-in-progress.js +0 -17
  30. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  31. package/dist/common/errors/reconnection.js +10 -24
  32. package/dist/common/errors/reconnection.js.map +1 -1
  33. package/dist/common/errors/stats.js +10 -24
  34. package/dist/common/errors/stats.js.map +1 -1
  35. package/dist/common/errors/webex-errors.js +6 -41
  36. package/dist/common/errors/webex-errors.js.map +1 -1
  37. package/dist/common/errors/webex-meetings-error.js +5 -25
  38. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  39. package/dist/common/events/events-scope.js +0 -22
  40. package/dist/common/events/events-scope.js.map +1 -1
  41. package/dist/common/events/events.js +0 -23
  42. package/dist/common/events/events.js.map +1 -1
  43. package/dist/common/events/trigger-proxy.js +0 -12
  44. package/dist/common/events/trigger-proxy.js.map +1 -1
  45. package/dist/common/events/util.js +0 -15
  46. package/dist/common/events/util.js.map +1 -1
  47. package/dist/common/logs/logger-config.js +0 -4
  48. package/dist/common/logs/logger-config.js.map +1 -1
  49. package/dist/common/logs/logger-proxy.js +1 -8
  50. package/dist/common/logs/logger-proxy.js.map +1 -1
  51. package/dist/common/logs/request.js +37 -60
  52. package/dist/common/logs/request.js.map +1 -1
  53. package/dist/common/queue.js +4 -14
  54. package/dist/common/queue.js.map +1 -1
  55. package/dist/config.js +6 -6
  56. package/dist/config.js.map +1 -1
  57. package/dist/constants.js +88 -46
  58. package/dist/constants.js.map +1 -1
  59. package/dist/index.js +1 -17
  60. package/dist/index.js.map +1 -1
  61. package/dist/locus-info/controlsUtils.js +12 -29
  62. package/dist/locus-info/controlsUtils.js.map +1 -1
  63. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  64. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  65. package/dist/locus-info/fullState.js +0 -15
  66. package/dist/locus-info/fullState.js.map +1 -1
  67. package/dist/locus-info/hostUtils.js +4 -12
  68. package/dist/locus-info/hostUtils.js.map +1 -1
  69. package/dist/locus-info/index.js +184 -190
  70. package/dist/locus-info/index.js.map +1 -1
  71. package/dist/locus-info/infoUtils.js +3 -37
  72. package/dist/locus-info/infoUtils.js.map +1 -1
  73. package/dist/locus-info/mediaSharesUtils.js +12 -38
  74. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  75. package/dist/locus-info/parser.js +92 -118
  76. package/dist/locus-info/parser.js.map +1 -1
  77. package/dist/locus-info/selfUtils.js +34 -91
  78. package/dist/locus-info/selfUtils.js.map +1 -1
  79. package/dist/media/index.js +67 -111
  80. package/dist/media/index.js.map +1 -1
  81. package/dist/media/properties.js +80 -114
  82. package/dist/media/properties.js.map +1 -1
  83. package/dist/media/util.js +2 -9
  84. package/dist/media/util.js.map +1 -1
  85. package/dist/mediaQualityMetrics/config.js +10 -12
  86. package/dist/mediaQualityMetrics/config.js.map +1 -1
  87. package/dist/meeting/effectsState.js +125 -190
  88. package/dist/meeting/effectsState.js.map +1 -1
  89. package/dist/meeting/in-meeting-actions.js +5 -14
  90. package/dist/meeting/in-meeting-actions.js.map +1 -1
  91. package/dist/meeting/index.js +1692 -1925
  92. package/dist/meeting/index.js.map +1 -1
  93. package/dist/meeting/muteState.js +36 -77
  94. package/dist/meeting/muteState.js.map +1 -1
  95. package/dist/meeting/request.js +224 -230
  96. package/dist/meeting/request.js.map +1 -1
  97. package/dist/meeting/request.type.js +7 -0
  98. package/dist/meeting/request.type.js.map +1 -0
  99. package/dist/meeting/state.js +21 -31
  100. package/dist/meeting/state.js.map +1 -1
  101. package/dist/meeting/util.js +43 -215
  102. package/dist/meeting/util.js.map +1 -1
  103. package/dist/meeting-info/collection.js +6 -25
  104. package/dist/meeting-info/collection.js.map +1 -1
  105. package/dist/meeting-info/index.js +14 -32
  106. package/dist/meeting-info/index.js.map +1 -1
  107. package/dist/meeting-info/meeting-info-v2.js +193 -268
  108. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  109. package/dist/meeting-info/request.js +3 -15
  110. package/dist/meeting-info/request.js.map +1 -1
  111. package/dist/meeting-info/util.js +98 -183
  112. package/dist/meeting-info/util.js.map +1 -1
  113. package/dist/meeting-info/utilv2.js +137 -228
  114. package/dist/meeting-info/utilv2.js.map +1 -1
  115. package/dist/meetings/collection.js +5 -20
  116. package/dist/meetings/collection.js.map +1 -1
  117. package/dist/meetings/index.js +490 -560
  118. package/dist/meetings/index.js.map +1 -1
  119. package/dist/meetings/request.js +24 -41
  120. package/dist/meetings/request.js.map +1 -1
  121. package/dist/meetings/util.js +99 -155
  122. package/dist/meetings/util.js.map +1 -1
  123. package/dist/member/index.js +78 -86
  124. package/dist/member/index.js.map +1 -1
  125. package/dist/member/util.js +31 -68
  126. package/dist/member/util.js.map +1 -1
  127. package/dist/members/collection.js +3 -12
  128. package/dist/members/collection.js.map +1 -1
  129. package/dist/members/index.js +93 -200
  130. package/dist/members/index.js.map +1 -1
  131. package/dist/members/request.js +16 -39
  132. package/dist/members/request.js.map +1 -1
  133. package/dist/members/util.js +9 -38
  134. package/dist/members/util.js.map +1 -1
  135. package/dist/metrics/config.js +0 -2
  136. package/dist/metrics/config.js.map +1 -1
  137. package/dist/metrics/constants.js +1 -2
  138. package/dist/metrics/constants.js.map +1 -1
  139. package/dist/metrics/index.js +55 -135
  140. package/dist/metrics/index.js.map +1 -1
  141. package/dist/multistream/mediaRequestManager.js +57 -32
  142. package/dist/multistream/mediaRequestManager.js.map +1 -1
  143. package/dist/multistream/multistreamMedia.js +15 -21
  144. package/dist/multistream/multistreamMedia.js.map +1 -1
  145. package/dist/multistream/receiveSlot.js +10 -50
  146. package/dist/multistream/receiveSlot.js.map +1 -1
  147. package/dist/multistream/receiveSlotManager.js +45 -82
  148. package/dist/multistream/receiveSlotManager.js.map +1 -1
  149. package/dist/multistream/remoteMedia.js +18 -58
  150. package/dist/multistream/remoteMedia.js.map +1 -1
  151. package/dist/multistream/remoteMediaGroup.js +6 -40
  152. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  153. package/dist/multistream/remoteMediaManager.js +362 -416
  154. package/dist/multistream/remoteMediaManager.js.map +1 -1
  155. package/dist/networkQualityMonitor/index.js +36 -57
  156. package/dist/networkQualityMonitor/index.js.map +1 -1
  157. package/dist/personal-meeting-room/index.js +21 -45
  158. package/dist/personal-meeting-room/index.js.map +1 -1
  159. package/dist/personal-meeting-room/request.js +1 -31
  160. package/dist/personal-meeting-room/request.js.map +1 -1
  161. package/dist/personal-meeting-room/util.js +0 -13
  162. package/dist/personal-meeting-room/util.js.map +1 -1
  163. package/dist/reachability/index.js +138 -182
  164. package/dist/reachability/index.js.map +1 -1
  165. package/dist/reachability/request.js +3 -18
  166. package/dist/reachability/request.js.map +1 -1
  167. package/dist/reactions/constants.js +13 -0
  168. package/dist/reactions/constants.js.map +1 -0
  169. package/dist/reactions/reactions.js +109 -0
  170. package/dist/reactions/reactions.js.map +1 -0
  171. package/dist/reactions/reactions.type.js +36 -0
  172. package/dist/reactions/reactions.type.js.map +1 -0
  173. package/dist/reconnection-manager/index.js +322 -455
  174. package/dist/reconnection-manager/index.js.map +1 -1
  175. package/dist/recording-controller/enums.js +17 -0
  176. package/dist/recording-controller/enums.js.map +1 -0
  177. package/dist/recording-controller/index.js +343 -0
  178. package/dist/recording-controller/index.js.map +1 -0
  179. package/dist/recording-controller/util.js +63 -0
  180. package/dist/recording-controller/util.js.map +1 -0
  181. package/dist/roap/index.js +39 -64
  182. package/dist/roap/index.js.map +1 -1
  183. package/dist/roap/request.js +94 -113
  184. package/dist/roap/request.js.map +1 -1
  185. package/dist/roap/turnDiscovery.js +85 -94
  186. package/dist/roap/turnDiscovery.js.map +1 -1
  187. package/dist/statsAnalyzer/global.js +0 -2
  188. package/dist/statsAnalyzer/global.js.map +1 -1
  189. package/dist/statsAnalyzer/index.js +85 -175
  190. package/dist/statsAnalyzer/index.js.map +1 -1
  191. package/dist/statsAnalyzer/mqaUtil.js +72 -53
  192. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  193. package/dist/transcription/index.js +22 -47
  194. package/dist/transcription/index.js.map +1 -1
  195. package/internal-README.md +7 -6
  196. package/package.json +25 -20
  197. package/src/breakouts/README.md +190 -0
  198. package/src/breakouts/breakout.ts +110 -0
  199. package/src/breakouts/collection.ts +19 -0
  200. package/src/breakouts/index.ts +225 -0
  201. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  202. package/src/common/collection.ts +9 -7
  203. package/src/common/{config.js → config.ts} +1 -1
  204. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  205. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  206. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  207. package/src/common/errors/{media.js → media.ts} +11 -7
  208. package/src/common/errors/parameter.ts +11 -7
  209. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  210. package/src/common/errors/{permission.js → permission.ts} +10 -6
  211. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  212. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  213. package/src/common/errors/{stats.js → stats.ts} +11 -7
  214. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  215. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  216. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  217. package/src/common/events/{events.js → events.ts} +5 -1
  218. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  219. package/src/common/events/{util.js → util.ts} +2 -3
  220. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  221. package/src/common/logs/logger-proxy.ts +44 -0
  222. package/src/common/logs/{request.js → request.ts} +22 -9
  223. package/src/common/queue.ts +1 -2
  224. package/src/{config.js → config.ts} +17 -12
  225. package/src/constants.ts +40 -1
  226. package/src/index.js +1 -1
  227. package/src/locus-info/controlsUtils.ts +114 -0
  228. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  229. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  230. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  231. package/src/locus-info/{index.js → index.ts} +148 -64
  232. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  233. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  234. package/src/locus-info/{parser.js → parser.ts} +67 -79
  235. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  236. package/src/media/{index.js → index.ts} +181 -131
  237. package/src/media/{properties.js → properties.ts} +47 -28
  238. package/src/media/{util.js → util.ts} +2 -2
  239. package/src/mediaQualityMetrics/{config.js → config.ts} +46 -46
  240. package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
  241. package/src/meeting/in-meeting-actions.ts +15 -3
  242. package/src/meeting/{index.js → index.ts} +2263 -1427
  243. package/src/meeting/{muteState.js → muteState.ts} +78 -42
  244. package/src/meeting/{request.js → request.ts} +292 -142
  245. package/src/meeting/request.type.ts +13 -0
  246. package/src/meeting/{state.js → state.ts} +50 -35
  247. package/src/meeting/{util.js → util.ts} +112 -115
  248. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  249. package/src/meeting-info/{index.js → index.ts} +42 -36
  250. package/src/meeting-info/meeting-info-v2.ts +273 -0
  251. package/src/meeting-info/{request.js → request.ts} +14 -4
  252. package/src/meeting-info/{util.js → util.ts} +60 -51
  253. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  254. package/src/meetings/{collection.js → collection.ts} +6 -3
  255. package/src/meetings/index.ts +1159 -0
  256. package/src/meetings/{request.js → request.ts} +32 -25
  257. package/src/meetings/{util.js → util.ts} +34 -32
  258. package/src/member/{index.js → index.ts} +102 -56
  259. package/src/member/{util.js → util.ts} +52 -25
  260. package/src/members/{collection.js → collection.ts} +2 -2
  261. package/src/members/{index.js → index.ts} +219 -142
  262. package/src/members/{request.js → request.ts} +60 -16
  263. package/src/members/{util.js → util.ts} +50 -48
  264. package/src/metrics/{config.js → config.ts} +254 -83
  265. package/src/metrics/{constants.js → constants.ts} +0 -2
  266. package/src/metrics/{index.js → index.ts} +106 -74
  267. package/src/multistream/mediaRequestManager.ts +81 -15
  268. package/src/multistream/multistreamMedia.ts +5 -0
  269. package/src/multistream/receiveSlot.ts +18 -12
  270. package/src/multistream/receiveSlotManager.ts +23 -21
  271. package/src/multistream/remoteMedia.ts +15 -5
  272. package/src/multistream/remoteMediaGroup.ts +4 -3
  273. package/src/multistream/remoteMediaManager.ts +153 -37
  274. package/src/networkQualityMonitor/{index.js → index.ts} +37 -25
  275. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  276. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  277. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  278. package/src/reachability/{index.js → index.ts} +99 -83
  279. package/src/reachability/request.ts +39 -33
  280. package/src/reactions/constants.ts +4 -0
  281. package/src/reactions/reactions.ts +104 -0
  282. package/src/reactions/reactions.type.ts +62 -0
  283. package/src/reconnection-manager/{index.js → index.ts} +195 -102
  284. package/src/recording-controller/enums.ts +8 -0
  285. package/src/recording-controller/index.ts +315 -0
  286. package/src/recording-controller/util.ts +58 -0
  287. package/src/roap/{index.js → index.ts} +73 -56
  288. package/src/roap/request.ts +157 -0
  289. package/src/roap/turnDiscovery.ts +77 -37
  290. package/src/statsAnalyzer/{global.js → global.ts} +30 -33
  291. package/src/statsAnalyzer/{index.js → index.ts} +468 -192
  292. package/src/statsAnalyzer/mqaUtil.ts +290 -0
  293. package/src/transcription/{index.js → index.ts} +46 -39
  294. package/test/integration/spec/journey.js +664 -463
  295. package/test/integration/spec/space-meeting.js +320 -206
  296. package/test/integration/spec/transcription.js +7 -8
  297. package/test/unit/spec/breakouts/breakout.ts +119 -0
  298. package/test/unit/spec/breakouts/collection.ts +15 -0
  299. package/test/unit/spec/breakouts/index.ts +293 -0
  300. package/test/unit/spec/common/browser-detection.js +9 -28
  301. package/test/unit/spec/fixture/locus.js +92 -90
  302. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  303. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  304. package/test/unit/spec/locus-info/index.js +104 -2
  305. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  306. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  307. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  308. package/test/unit/spec/locus-info/parser.js +3 -9
  309. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  310. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  311. package/test/unit/spec/media/index.ts +31 -47
  312. package/test/unit/spec/media/properties.ts +9 -9
  313. package/test/unit/spec/meeting/effectsState.js +39 -45
  314. package/test/unit/spec/meeting/in-meeting-actions.ts +5 -2
  315. package/test/unit/spec/meeting/index.js +2017 -742
  316. package/test/unit/spec/meeting/muteState.js +42 -33
  317. package/test/unit/spec/meeting/request.js +115 -44
  318. package/test/unit/spec/meeting/utils.js +104 -171
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  320. package/test/unit/spec/meeting-info/request.js +7 -9
  321. package/test/unit/spec/meeting-info/util.js +11 -12
  322. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  323. package/test/unit/spec/meetings/collection.js +1 -1
  324. package/test/unit/spec/meetings/index.js +439 -257
  325. package/test/unit/spec/meetings/utils.js +14 -12
  326. package/test/unit/spec/member/index.js +0 -1
  327. package/test/unit/spec/member/util.js +31 -7
  328. package/test/unit/spec/members/index.js +104 -54
  329. package/test/unit/spec/members/request.js +29 -20
  330. package/test/unit/spec/members/utils.js +8 -5
  331. package/test/unit/spec/metrics/index.js +16 -21
  332. package/test/unit/spec/multistream/mediaRequestManager.ts +316 -50
  333. package/test/unit/spec/multistream/receiveSlot.ts +6 -6
  334. package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
  335. package/test/unit/spec/multistream/remoteMedia.ts +10 -2
  336. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  337. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  338. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  339. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  340. package/test/unit/spec/reachability/index.ts +58 -26
  341. package/test/unit/spec/reconnection-manager/index.js +102 -9
  342. package/test/unit/spec/recording-controller/index.js +231 -0
  343. package/test/unit/spec/recording-controller/util.js +102 -0
  344. package/test/unit/spec/roap/index.ts +2 -1
  345. package/test/unit/spec/roap/request.ts +114 -0
  346. package/test/unit/spec/roap/turnDiscovery.ts +64 -45
  347. package/test/unit/spec/stats-analyzer/index.js +27 -22
  348. package/test/utils/cmr.js +44 -42
  349. package/test/utils/testUtils.js +83 -74
  350. package/test/utils/webex-config.js +18 -18
  351. package/test/utils/webex-test-users.js +54 -50
  352. package/tsconfig.json +6 -0
  353. package/dist/media/internal-media-core-wrapper.js +0 -22
  354. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  355. package/dist/peer-connection-manager/util.js +0 -124
  356. package/dist/peer-connection-manager/util.js.map +0 -1
  357. package/src/common/logs/logger-proxy.js +0 -33
  358. package/src/locus-info/controlsUtils.js +0 -102
  359. package/src/media/internal-media-core-wrapper.ts +0 -9
  360. package/src/meeting-info/meeting-info-v2.js +0 -255
  361. package/src/meetings/index.js +0 -1015
  362. package/src/peer-connection-manager/util.ts +0 -117
  363. package/src/roap/request.js +0 -127
  364. package/src/statsAnalyzer/mqaUtil.js +0 -173
  365. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
@@ -0,0 +1,290 @@
1
+ /* eslint-disable prefer-destructuring */
2
+
3
+ import {mean, max} from 'lodash';
4
+
5
+ import {STATS} from '../constants';
6
+
7
+ export const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSent}) => {
8
+ const mediaType = STATS.AUDIO_CORRELATE;
9
+ const sendrecvType = STATS.RECEIVE_DIRECTION;
10
+
11
+ audioReceiver.common.common.direction = statsResults[mediaType].direction;
12
+ audioReceiver.common.transportType = statsResults.connectionType.remote.transport[0];
13
+ // add rtpPacket info inside common as also for call analyzer
14
+ audioReceiver.common.rtpPackets =
15
+ statsResults[mediaType][sendrecvType].totalPacketsReceived -
16
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;
17
+ // Hop by hop are numbers and not percentage so we compare on what we sent the last min
18
+ // collect the packets received for the last min
19
+ audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;
20
+ audioReceiver.common.mediaHopByHopLost =
21
+ statsResults[mediaType][sendrecvType].totalPacketsLost -
22
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;
23
+ audioReceiver.common.rtpHopByHopLost =
24
+ statsResults[mediaType][sendrecvType].totalPacketsLost -
25
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;
26
+
27
+ // @ts-ignore
28
+ audioReceiver.streams[0].common.maxRtpJitter =
29
+ // @ts-ignore
30
+ max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
31
+ audioReceiver.streams[0].common.meanRtpJitter =
32
+ mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
33
+ audioReceiver.streams[0].common.rtpJitter = audioReceiver.streams[0].common.maxRtpJitter;
34
+
35
+ // Fec packets do come in as part of the FEC only for audio
36
+ const fecRecovered =
37
+ statsResults[mediaType][sendrecvType].fecPacketsReceived -
38
+ lastMqaDataSent[mediaType][sendrecvType].fecPacketsReceived -
39
+ (statsResults[mediaType][sendrecvType].fecPacketsDiscarded -
40
+ lastMqaDataSent[mediaType][sendrecvType].fecPacketsDiscarded);
41
+
42
+ audioReceiver.streams[0].common.rtpEndToEndLost =
43
+ statsResults[mediaType][sendrecvType].totalPacketsLost -
44
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost -
45
+ fecRecovered || 0;
46
+
47
+ audioReceiver.streams[0].common.framesDropped =
48
+ statsResults[mediaType][sendrecvType].totalSamplesDecoded -
49
+ lastMqaDataSent[mediaType][sendrecvType].totalSamplesDecoded || 0;
50
+ audioReceiver.streams[0].common.renderedFrameRate =
51
+ (audioReceiver.streams[0].common.framesDropped * 100) / 60 || 0;
52
+ audioReceiver.streams[0].common.framesReceived =
53
+ statsResults[mediaType][sendrecvType].totalSamplesReceived -
54
+ lastMqaDataSent[mediaType][sendrecvType].totalSamplesReceived || 0;
55
+ audioReceiver.streams[0].common.concealedFrames =
56
+ statsResults[mediaType][sendrecvType].concealedSamples -
57
+ lastMqaDataSent[mediaType][sendrecvType].concealedSamples || 0;
58
+ audioReceiver.streams[0].common.receivedBitrate =
59
+ ((statsResults[mediaType][sendrecvType].totalBytesReceived -
60
+ lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived) *
61
+ 8) /
62
+ 60 || 0;
63
+
64
+ audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;
65
+ };
66
+
67
+ export const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent}) => {
68
+ const mediaType = STATS.AUDIO_CORRELATE;
69
+ const sendrecvType = STATS.SEND_DIRECTION;
70
+
71
+ audioSender.common.common.direction = statsResults[mediaType].direction;
72
+ audioSender.common.transportType = statsResults.connectionType.local.transport[0];
73
+
74
+ // @ts-ignore
75
+ audioSender.common.maxRemoteJitter =
76
+ // @ts-ignore
77
+ max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
78
+ audioSender.common.meanRemoteJitter =
79
+ mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
80
+
81
+ audioSender.common.rtpPackets =
82
+ statsResults[mediaType][sendrecvType].totalPacketsSent -
83
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
84
+ audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;
85
+ // From candidate-pair
86
+ audioSender.common.availableBitrate =
87
+ statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;
88
+ // Calculate based on how much packets lost of received compated to how to the client sent
89
+
90
+ const totalpacketsLostForaMin =
91
+ statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver -
92
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;
93
+
94
+ audioSender.common.remoteLossRate =
95
+ totalpacketsLostForaMin > 0
96
+ ? (totalpacketsLostForaMin * 100) / audioSender.common.rtpPackets
97
+ : 0; // This is the packets sent with in last min || 0;
98
+
99
+ // @ts-ignore
100
+ audioSender.common.maxRoundTripTime =
101
+ // @ts-ignore
102
+ max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
103
+ audioSender.common.meanRoundTripTime =
104
+ mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
105
+ audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;
106
+
107
+ // Calculate the outgoing bitrate
108
+ const totalBytesSentInaMin =
109
+ statsResults[mediaType][sendrecvType].totalBytesSent -
110
+ lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;
111
+
112
+ audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin
113
+ ? (totalBytesSentInaMin * 8) / 60
114
+ : 0;
115
+ audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;
116
+
117
+ audioSender.streams[0].transmittedKeyFrames =
118
+ statsResults[mediaType][sendrecvType].totalKeyFramesEncoded -
119
+ lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;
120
+ audioSender.streams[0].requestedKeyFrames =
121
+ statsResults[mediaType][sendrecvType].totalFirCount -
122
+ lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;
123
+ };
124
+
125
+ export const getVideoReceiverMqa = ({
126
+ videoReceiver,
127
+ statsResults,
128
+ lastMqaDataSent,
129
+ isShareStream = false,
130
+ }) => {
131
+ const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;
132
+ const sendrecvType = STATS.RECEIVE_DIRECTION;
133
+
134
+ videoReceiver.common.common.direction = statsResults[mediaType].direction;
135
+ videoReceiver.common.transportType = statsResults.connectionType.remote.transport[0];
136
+ // collect the packets received for the last min
137
+ videoReceiver.common.rtpPackets =
138
+ statsResults[mediaType][sendrecvType].totalPacketsReceived -
139
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;
140
+ videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;
141
+
142
+ const totalPacketLoss =
143
+ statsResults[mediaType][sendrecvType].totalPacketsLost -
144
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;
145
+
146
+ // Hope by hop are numbers and not percentage so we compare on what we sent the last min
147
+ // this is including packet lost
148
+ videoReceiver.common.mediaHopByHopLost = totalPacketLoss;
149
+ videoReceiver.common.rtpHopByHopLost = totalPacketLoss;
150
+
151
+ // End to end packetloss is after recovery
152
+ videoReceiver.streams[0].common.rtpEndToEndLost = totalPacketLoss;
153
+
154
+ // calculate this values
155
+
156
+ // @ts-ignore
157
+ videoReceiver.common.maxRemoteJitter =
158
+ // @ts-ignore
159
+ max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
160
+ videoReceiver.common.meanRemoteJitter =
161
+ mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
162
+
163
+ videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;
164
+ // videoReceiver.streams[0].common.rtpJitter = (statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferDelay) / (statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount) * 1000 || 0;
165
+
166
+ // Calculate the outgoing bitrate
167
+ const totalBytesReceivedInaMin =
168
+ statsResults[mediaType][sendrecvType].totalBytesReceived -
169
+ lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived;
170
+
171
+ videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin
172
+ ? (totalBytesReceivedInaMin * 8) / 60
173
+ : 0;
174
+ videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;
175
+
176
+ // From tracks //TODO: calculate a proper one
177
+ const totalFrameReceivedInaMin =
178
+ statsResults.resolutions[mediaType][sendrecvType].framesReceived -
179
+ lastMqaDataSent.resolutions[mediaType][sendrecvType].framesReceived;
180
+ const totalFrameDecodedInaMin =
181
+ statsResults.resolutions[mediaType][sendrecvType].framesDecoded -
182
+ lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDecoded;
183
+
184
+ videoReceiver.streams[0].common.receivedFrameRate = totalFrameReceivedInaMin
185
+ ? (totalFrameReceivedInaMin * 100) / 60
186
+ : 0;
187
+ videoReceiver.streams[0].common.renderedFrameRate = totalFrameDecodedInaMin
188
+ ? (totalFrameDecodedInaMin * 100) / 60
189
+ : 0;
190
+
191
+ videoReceiver.streams[0].common.framesDropped =
192
+ statsResults.resolutions[mediaType][sendrecvType].framesDropped -
193
+ lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDropped;
194
+ videoReceiver.streams[0].receivedHeight =
195
+ statsResults.resolutions[mediaType][sendrecvType].height;
196
+ videoReceiver.streams[0].receivedWidth = statsResults.resolutions[mediaType][sendrecvType].width;
197
+ videoReceiver.streams[0].receivedFrameSize =
198
+ (statsResults.resolutions[mediaType][sendrecvType].height *
199
+ statsResults.resolutions[mediaType][sendrecvType].height) /
200
+ 256;
201
+
202
+ videoReceiver.streams[0].receivedKeyFrames =
203
+ statsResults[mediaType][sendrecvType].keyFramesDecoded -
204
+ lastMqaDataSent[mediaType][sendrecvType].keyFramesDecoded || 0;
205
+ videoReceiver.streams[0].requestedKeyFrames =
206
+ statsResults[mediaType][sendrecvType].totalPliCount -
207
+ lastMqaDataSent[mediaType][sendrecvType].totalPliCount || 0;
208
+ };
209
+
210
+ export const getVideoSenderMqa = ({
211
+ videoSender,
212
+ statsResults,
213
+ lastMqaDataSent,
214
+ isShareStream = false,
215
+ }) => {
216
+ const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;
217
+ const sendrecvType = STATS.SEND_DIRECTION;
218
+
219
+ videoSender.common.common.direction = statsResults[mediaType].direction;
220
+ videoSender.common.transportType = statsResults.connectionType.local.transport[0];
221
+
222
+ // @ts-ignore
223
+ videoSender.common.maxRemoteJitter =
224
+ // @ts-ignore
225
+ max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
226
+ videoSender.common.meanRemoteJitter =
227
+ mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
228
+
229
+ videoSender.common.rtpPackets =
230
+ statsResults[mediaType][sendrecvType].totalPacketsSent -
231
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
232
+ videoSender.common.availableBitrate =
233
+ statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;
234
+ // Calculate based on how much packets lost of received compated to how to the client sent
235
+
236
+ const totalpacketsLostForaMin =
237
+ statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver -
238
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;
239
+
240
+ videoSender.common.remoteLossRate =
241
+ totalpacketsLostForaMin > 0
242
+ ? (totalpacketsLostForaMin * 100) / (videoSender.common.rtpPackets + totalpacketsLostForaMin)
243
+ : 0; // This is the packets sent with in last min || 0;
244
+
245
+ // @ts-ignore
246
+ videoSender.common.maxRoundTripTime =
247
+ // @ts-ignore
248
+ max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
249
+ videoSender.common.meanRoundTripTime =
250
+ mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
251
+ videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;
252
+
253
+ videoSender.streams[0].common.rtpPackets =
254
+ statsResults[mediaType][sendrecvType].totalPacketsSent -
255
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
256
+
257
+ // Calculate the outgoing bitrate
258
+ const totalBytesSentInaMin =
259
+ statsResults[mediaType][sendrecvType].totalBytesSent -
260
+ lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;
261
+
262
+ videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin
263
+ ? (totalBytesSentInaMin * 8) / 60
264
+ : 0;
265
+
266
+ videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;
267
+
268
+ videoSender.streams[0].transmittedKeyFrames =
269
+ statsResults[mediaType][sendrecvType].totalKeyFramesEncoded -
270
+ lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;
271
+ videoSender.streams[0].requestedKeyFrames =
272
+ statsResults[mediaType][sendrecvType].totalFirCount -
273
+ lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;
274
+
275
+ // From tracks //TODO: calculate a proper one
276
+ const totalFrameSentInaMin =
277
+ statsResults.resolutions[mediaType][sendrecvType].framesSent -
278
+ (lastMqaDataSent.resolutions[mediaType][sendrecvType].framesSent || 0);
279
+
280
+ videoSender.streams[0].common.transmittedFrameRate = totalFrameSentInaMin
281
+ ? (totalFrameSentInaMin * 100) / 60
282
+ : 0;
283
+ videoSender.streams[0].transmittedHeight =
284
+ statsResults.resolutions[mediaType][sendrecvType].height;
285
+ videoSender.streams[0].transmittedWidth = statsResults.resolutions[mediaType][sendrecvType].width;
286
+ videoSender.streams[0].transmittedFrameSize =
287
+ (statsResults.resolutions[mediaType][sendrecvType].height *
288
+ statsResults.resolutions[mediaType][sendrecvType].width) /
289
+ 254;
290
+ };
@@ -6,6 +6,12 @@ import {v4 as uuidv4} from 'uuid';
6
6
  * @class Transcription
7
7
  */
8
8
  export default class Transcription {
9
+ webSocketUrl: any;
10
+ sessionID: any;
11
+ members: any;
12
+ memberCSIs: any;
13
+ webSocket: any;
14
+
9
15
  /**
10
16
  * @param {string} webSocketUrl
11
17
  * @param {sessionID} sessionId
@@ -13,7 +19,7 @@ export default class Transcription {
13
19
  * @constructor
14
20
  * @memberof Transcription
15
21
  */
16
- constructor(webSocketUrl, sessionId, members) {
22
+ constructor(webSocketUrl: string, sessionId: any, members: object) {
17
23
  this.webSocketUrl = webSocketUrl;
18
24
  this.sessionID = sessionId;
19
25
  this.members = members;
@@ -32,24 +38,26 @@ export default class Transcription {
32
38
  * @param {string} sessionID
33
39
  * @returns {void}
34
40
  */
35
- connect(token) {
41
+ connect(token: string) {
36
42
  this.webSocket.onopen = () => {
37
- this.webSocket.send(JSON.stringify({
38
- id: uuidv4(),
39
- type: 'authorization',
40
- data: {token: `Bearer ${token}`},
41
- trackingId: `webex-js-sdk_${this.sessionID}${Date.now.toString()}`
42
- }));
43
+ this.webSocket.send(
44
+ JSON.stringify({
45
+ id: uuidv4(),
46
+ type: 'authorization',
47
+ data: {token: `Bearer ${token}`},
48
+ trackingId: `webex-js-sdk_${this.sessionID}${Date.now.toString()}`,
49
+ })
50
+ );
43
51
  };
44
52
  }
45
53
 
46
54
  /**
47
55
  * Sets callback to invoke when the web socket connection is closed.
48
56
  *
49
- * @param {function} callback
57
+ * @param {Function} callback
50
58
  * @returns {void}
51
59
  */
52
- onCloseSocket(callback) {
60
+ onCloseSocket(callback: any) {
53
61
  if (callback) {
54
62
  this.webSocket.onclose = (event) => {
55
63
  callback(event);
@@ -61,10 +69,10 @@ export default class Transcription {
61
69
  * Sets callback to invoke when a web socket connection error occurs.
62
70
  * An event parameter will be send to the callback.
63
71
  *
64
- * @param {function} callback
72
+ * @param {Function} callback
65
73
  * @returns {void}
66
74
  */
67
- onErrorSocket(callback) {
75
+ onErrorSocket(callback: any) {
68
76
  if (callback) {
69
77
  this.webSocket.onerror = (event) => {
70
78
  callback(event);
@@ -79,7 +87,7 @@ export default class Transcription {
79
87
  * @param {object} csis
80
88
  * @returns {object}
81
89
  */
82
- getSpeaker(csis) {
90
+ private getSpeaker(csis: any) {
83
91
  for (const csi of csis) {
84
92
  const member = this.memberCSIs[csi];
85
93
 
@@ -88,31 +96,33 @@ export default class Transcription {
88
96
  }
89
97
  }
90
98
 
91
- return Object.values(this.members.membersCollection.members)
92
- .find((member) => {
93
- const memberCSIs = member.participant.status.csis;
94
- let selfIsSpeaking = false;
95
-
96
- for (const csi of csis) {
97
- if (memberCSIs.includes(csi)) {
98
- this.memberCSIs[csi] = member;
99
- selfIsSpeaking = true;
100
- break;
101
- }
99
+ return Object.values(this.members.membersCollection.members).find((member: any) => {
100
+ const memberCSIs = member.participant.status.csis;
101
+ let selfIsSpeaking = false;
102
+
103
+ for (const csi of csis) {
104
+ if (memberCSIs.includes(csi)) {
105
+ this.memberCSIs[csi] = member;
106
+ selfIsSpeaking = true;
107
+ break;
102
108
  }
109
+ }
103
110
 
104
- return selfIsSpeaking;
105
- });
111
+ return selfIsSpeaking;
112
+ });
106
113
  }
107
114
 
108
115
  /**
109
116
  * Sends transcription data to given callback as it arrives.
110
117
  *
111
- * @param {function} callback
118
+ * @param {Function} callback
112
119
  * @returns {void}
113
120
  */
114
- subscribe(callback) {
115
- let data, csis, speaker, transcription;
121
+ subscribe(callback: any) {
122
+ let data;
123
+ let csis;
124
+ let speaker;
125
+ let transcription;
116
126
 
117
127
  this.webSocket.onmessage = (event) => {
118
128
  data = JSON.parse(event.data);
@@ -123,15 +133,13 @@ export default class Transcription {
123
133
  this.webSocket.send(JSON.stringify({messageID: data.id, type: 'ack'}));
124
134
 
125
135
  if (transcription) {
126
- callback(
127
- {
128
- id: data.data?.voiceaPayload?.transcript_id,
129
- personID: speaker?.id,
130
- transcription,
131
- timestamp: data.timestamp,
132
- type: data?.data?.voiceaPayload?.type
133
- }
134
- );
136
+ callback({
137
+ id: data.data?.voiceaPayload?.transcript_id,
138
+ personID: speaker?.id,
139
+ transcription,
140
+ timestamp: data.timestamp,
141
+ type: data?.data?.voiceaPayload?.type,
142
+ });
135
143
  }
136
144
  };
137
145
  }
@@ -144,4 +152,3 @@ export default class Transcription {
144
152
  this.webSocket.close();
145
153
  }
146
154
  }
147
-