@webex/plugin-meetings 2.59.8 → 2.60.0-next.1

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 (528) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +41 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +357 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +215 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +22 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +51 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +44 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1047 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +77 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +64 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/browser-detection.js +2 -3
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +3 -4
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.js +50 -0
  37. package/dist/common/errors/no-meeting-info.js.map +1 -0
  38. package/dist/common/errors/parameter.js +3 -4
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +1 -2
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +1 -2
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  45. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  46. package/dist/common/errors/reconnection-in-progress.js +1 -2
  47. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  48. package/dist/common/errors/reconnection.js +1 -2
  49. package/dist/common/errors/reconnection.js.map +1 -1
  50. package/dist/common/errors/stats.js +1 -2
  51. package/dist/common/errors/stats.js.map +1 -1
  52. package/dist/common/errors/webex-errors.js +48 -28
  53. package/dist/common/errors/webex-errors.js.map +1 -1
  54. package/dist/common/errors/webex-meetings-error.js +1 -2
  55. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  56. package/dist/common/events/events-scope.js +1 -2
  57. package/dist/common/events/events-scope.js.map +1 -1
  58. package/dist/common/events/events.js +1 -2
  59. package/dist/common/events/events.js.map +1 -1
  60. package/dist/common/events/trigger-proxy.js +1 -2
  61. package/dist/common/events/trigger-proxy.js.map +1 -1
  62. package/dist/common/events/util.js +1 -2
  63. package/dist/common/events/util.js.map +1 -1
  64. package/dist/common/logs/logger-config.js +1 -2
  65. package/dist/common/logs/logger-config.js.map +1 -1
  66. package/dist/common/logs/logger-proxy.js +2 -3
  67. package/dist/common/logs/logger-proxy.js.map +1 -1
  68. package/dist/common/logs/request.js +8 -5
  69. package/dist/common/logs/request.js.map +1 -1
  70. package/dist/common/queue.js +22 -9
  71. package/dist/common/queue.js.map +1 -1
  72. package/dist/config.js +8 -11
  73. package/dist/config.js.map +1 -1
  74. package/dist/constants.js +437 -435
  75. package/dist/constants.js.map +1 -1
  76. package/dist/controls-options-manager/constants.js +3 -6
  77. package/dist/controls-options-manager/constants.js.map +1 -1
  78. package/dist/controls-options-manager/enums.js +14 -6
  79. package/dist/controls-options-manager/enums.js.map +1 -1
  80. package/dist/controls-options-manager/index.js +127 -38
  81. package/dist/controls-options-manager/index.js.map +1 -1
  82. package/dist/controls-options-manager/types.js +7 -0
  83. package/dist/controls-options-manager/types.js.map +1 -0
  84. package/dist/controls-options-manager/util.js +309 -19
  85. package/dist/controls-options-manager/util.js.map +1 -1
  86. package/dist/index.js +116 -4
  87. package/dist/index.js.map +1 -1
  88. package/dist/interpretation/collection.js +22 -0
  89. package/dist/interpretation/collection.js.map +1 -0
  90. package/dist/interpretation/index.js +365 -0
  91. package/dist/interpretation/index.js.map +1 -0
  92. package/dist/interpretation/siLanguage.js +24 -0
  93. package/dist/interpretation/siLanguage.js.map +1 -0
  94. package/dist/locus-info/controlsUtils.js +100 -11
  95. package/dist/locus-info/controlsUtils.js.map +1 -1
  96. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  97. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  98. package/dist/locus-info/fullState.js +1 -2
  99. package/dist/locus-info/fullState.js.map +1 -1
  100. package/dist/locus-info/hostUtils.js +1 -2
  101. package/dist/locus-info/hostUtils.js.map +1 -1
  102. package/dist/locus-info/index.js +425 -84
  103. package/dist/locus-info/index.js.map +1 -1
  104. package/dist/locus-info/infoUtils.js +13 -5
  105. package/dist/locus-info/infoUtils.js.map +1 -1
  106. package/dist/locus-info/mediaSharesUtils.js +58 -3
  107. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  108. package/dist/locus-info/parser.js +253 -80
  109. package/dist/locus-info/parser.js.map +1 -1
  110. package/dist/locus-info/selfUtils.js +97 -13
  111. package/dist/locus-info/selfUtils.js.map +1 -1
  112. package/dist/media/index.js +106 -319
  113. package/dist/media/index.js.map +1 -1
  114. package/dist/media/properties.js +96 -153
  115. package/dist/media/properties.js.map +1 -1
  116. package/dist/media/util.js +1 -22
  117. package/dist/media/util.js.map +1 -1
  118. package/dist/mediaQualityMetrics/config.js +498 -493
  119. package/dist/mediaQualityMetrics/config.js.map +1 -1
  120. package/dist/meeting/in-meeting-actions.js +90 -3
  121. package/dist/meeting/in-meeting-actions.js.map +1 -1
  122. package/dist/meeting/index.js +4578 -2973
  123. package/dist/meeting/index.js.map +1 -1
  124. package/dist/meeting/locusMediaRequest.js +291 -0
  125. package/dist/meeting/locusMediaRequest.js.map +1 -0
  126. package/dist/meeting/muteState.js +224 -133
  127. package/dist/meeting/muteState.js.map +1 -1
  128. package/dist/meeting/request.js +297 -199
  129. package/dist/meeting/request.js.map +1 -1
  130. package/dist/meeting/request.type.js +7 -0
  131. package/dist/meeting/request.type.js.map +1 -0
  132. package/dist/meeting/state.js +1 -2
  133. package/dist/meeting/state.js.map +1 -1
  134. package/dist/meeting/util.js +605 -435
  135. package/dist/meeting/util.js.map +1 -1
  136. package/dist/meeting-info/collection.js +3 -4
  137. package/dist/meeting-info/collection.js.map +1 -1
  138. package/dist/meeting-info/index.js +74 -7
  139. package/dist/meeting-info/index.js.map +1 -1
  140. package/dist/meeting-info/meeting-info-v2.js +197 -63
  141. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  142. package/dist/meeting-info/request.js +1 -2
  143. package/dist/meeting-info/request.js.map +1 -1
  144. package/dist/meeting-info/util.js +2 -3
  145. package/dist/meeting-info/util.js.map +1 -1
  146. package/dist/meeting-info/utilv2.js +25 -12
  147. package/dist/meeting-info/utilv2.js.map +1 -1
  148. package/dist/meetings/collection.js +25 -4
  149. package/dist/meetings/collection.js.map +1 -1
  150. package/dist/meetings/index.js +464 -123
  151. package/dist/meetings/index.js.map +1 -1
  152. package/dist/meetings/meetings.types.js +7 -0
  153. package/dist/meetings/meetings.types.js.map +1 -0
  154. package/dist/meetings/request.js +4 -3
  155. package/dist/meetings/request.js.map +1 -1
  156. package/dist/meetings/util.js +107 -6
  157. package/dist/meetings/util.js.map +1 -1
  158. package/dist/member/index.js +54 -2
  159. package/dist/member/index.js.map +1 -1
  160. package/dist/member/member.types.js +3 -4
  161. package/dist/member/member.types.js.map +1 -1
  162. package/dist/member/types.js +23 -0
  163. package/dist/member/types.js.map +1 -0
  164. package/dist/member/util.js +131 -29
  165. package/dist/member/util.js.map +1 -1
  166. package/dist/members/collection.js +11 -2
  167. package/dist/members/collection.js.map +1 -1
  168. package/dist/members/index.js +174 -10
  169. package/dist/members/index.js.map +1 -1
  170. package/dist/members/request.js +108 -41
  171. package/dist/members/request.js.map +1 -1
  172. package/dist/members/types.js +14 -0
  173. package/dist/members/types.js.map +1 -0
  174. package/dist/members/util.js +327 -234
  175. package/dist/members/util.js.map +1 -1
  176. package/dist/metrics/constants.js +14 -9
  177. package/dist/metrics/constants.js.map +1 -1
  178. package/dist/metrics/index.js +4 -452
  179. package/dist/metrics/index.js.map +1 -1
  180. package/dist/multistream/mediaRequestManager.js +344 -0
  181. package/dist/multistream/mediaRequestManager.js.map +1 -0
  182. package/dist/multistream/receiveSlot.js +200 -0
  183. package/dist/multistream/receiveSlot.js.map +1 -0
  184. package/dist/multistream/receiveSlotManager.js +174 -0
  185. package/dist/multistream/receiveSlotManager.js.map +1 -0
  186. package/dist/multistream/remoteMedia.js +268 -0
  187. package/dist/multistream/remoteMedia.js.map +1 -0
  188. package/dist/multistream/remoteMediaGroup.js +267 -0
  189. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  190. package/dist/multistream/remoteMediaManager.js +1211 -0
  191. package/dist/multistream/remoteMediaManager.js.map +1 -0
  192. package/dist/multistream/sendSlotManager.js +236 -0
  193. package/dist/multistream/sendSlotManager.js.map +1 -0
  194. package/dist/networkQualityMonitor/index.js +5 -4
  195. package/dist/networkQualityMonitor/index.js.map +1 -1
  196. package/dist/personal-meeting-room/index.js +2 -3
  197. package/dist/personal-meeting-room/index.js.map +1 -1
  198. package/dist/personal-meeting-room/request.js +2 -3
  199. package/dist/personal-meeting-room/request.js.map +1 -1
  200. package/dist/personal-meeting-room/util.js +1 -2
  201. package/dist/personal-meeting-room/util.js.map +1 -1
  202. package/dist/reachability/index.js +265 -72
  203. package/dist/reachability/index.js.map +1 -1
  204. package/dist/reachability/request.js +18 -10
  205. package/dist/reachability/request.js.map +1 -1
  206. package/dist/reactions/constants.js +12 -0
  207. package/dist/reactions/constants.js.map +1 -0
  208. package/dist/reactions/reactions.js +4 -6
  209. package/dist/reactions/reactions.js.map +1 -1
  210. package/dist/reactions/reactions.type.js +21 -23
  211. package/dist/reactions/reactions.type.js.map +1 -1
  212. package/dist/reconnection-manager/index.js +272 -220
  213. package/dist/reconnection-manager/index.js.map +1 -1
  214. package/dist/recording-controller/enums.js +4 -5
  215. package/dist/recording-controller/enums.js.map +1 -1
  216. package/dist/recording-controller/index.js +57 -46
  217. package/dist/recording-controller/index.js.map +1 -1
  218. package/dist/recording-controller/util.js +10 -10
  219. package/dist/recording-controller/util.js.map +1 -1
  220. package/dist/roap/index.js +101 -235
  221. package/dist/roap/index.js.map +1 -1
  222. package/dist/roap/request.js +126 -180
  223. package/dist/roap/request.js.map +1 -1
  224. package/dist/roap/turnDiscovery.js +115 -105
  225. package/dist/roap/turnDiscovery.js.map +1 -1
  226. package/dist/rtcMetrics/constants.js +11 -0
  227. package/dist/rtcMetrics/constants.js.map +1 -0
  228. package/dist/rtcMetrics/index.js +115 -0
  229. package/dist/rtcMetrics/index.js.map +1 -0
  230. package/dist/statsAnalyzer/global.js +2 -85
  231. package/dist/statsAnalyzer/global.js.map +1 -1
  232. package/dist/statsAnalyzer/index.js +384 -426
  233. package/dist/statsAnalyzer/index.js.map +1 -1
  234. package/dist/statsAnalyzer/mqaUtil.js +114 -80
  235. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  236. package/dist/transcription/index.js +1 -2
  237. package/dist/transcription/index.js.map +1 -1
  238. package/dist/webinar/collection.js +43 -0
  239. package/dist/webinar/collection.js.map +1 -0
  240. package/dist/webinar/index.js +68 -0
  241. package/dist/webinar/index.js.map +1 -0
  242. package/package.json +34 -24
  243. package/src/annotation/annotation.types.ts +50 -0
  244. package/src/annotation/constants.ts +36 -0
  245. package/src/annotation/index.ts +328 -0
  246. package/src/breakouts/README.md +220 -0
  247. package/src/breakouts/breakout.ts +188 -0
  248. package/src/breakouts/collection.ts +19 -0
  249. package/src/breakouts/edit-lock-error.ts +25 -0
  250. package/src/breakouts/events.ts +56 -0
  251. package/src/breakouts/index.ts +925 -0
  252. package/src/breakouts/request.ts +55 -0
  253. package/src/breakouts/utils.ts +57 -0
  254. package/src/common/errors/no-meeting-info.ts +24 -0
  255. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  256. package/src/common/errors/webex-errors.ts +36 -12
  257. package/src/common/logs/logger-proxy.ts +1 -1
  258. package/src/common/logs/request.ts +5 -1
  259. package/src/common/queue.ts +22 -8
  260. package/src/config.ts +5 -7
  261. package/src/constants.ts +263 -91
  262. package/src/controls-options-manager/enums.ts +11 -1
  263. package/src/controls-options-manager/index.ts +116 -21
  264. package/src/controls-options-manager/types.ts +59 -0
  265. package/src/controls-options-manager/util.ts +294 -14
  266. package/src/index.ts +40 -0
  267. package/src/interpretation/README.md +60 -0
  268. package/src/interpretation/collection.ts +19 -0
  269. package/src/interpretation/index.ts +332 -0
  270. package/src/interpretation/siLanguage.ts +18 -0
  271. package/src/locus-info/controlsUtils.ts +110 -0
  272. package/src/locus-info/index.ts +449 -61
  273. package/src/locus-info/infoUtils.ts +14 -2
  274. package/src/locus-info/mediaSharesUtils.ts +64 -0
  275. package/src/locus-info/parser.ts +258 -47
  276. package/src/locus-info/selfUtils.ts +85 -2
  277. package/src/media/index.ts +153 -370
  278. package/src/media/properties.ts +106 -136
  279. package/src/media/util.ts +0 -21
  280. package/src/mediaQualityMetrics/config.ts +379 -377
  281. package/src/meeting/in-meeting-actions.ts +168 -0
  282. package/src/meeting/index.ts +3800 -2491
  283. package/src/meeting/locusMediaRequest.ts +313 -0
  284. package/src/meeting/muteState.ts +224 -138
  285. package/src/meeting/request.ts +207 -127
  286. package/src/meeting/request.type.ts +13 -0
  287. package/src/meeting/util.ts +590 -423
  288. package/src/meeting-info/index.ts +81 -8
  289. package/src/meeting-info/meeting-info-v2.ts +159 -13
  290. package/src/meeting-info/util.ts +1 -1
  291. package/src/meeting-info/utilv2.ts +22 -9
  292. package/src/meetings/collection.ts +20 -0
  293. package/src/meetings/index.ts +466 -124
  294. package/src/meetings/meetings.types.ts +12 -0
  295. package/src/meetings/request.ts +2 -0
  296. package/src/meetings/util.ts +116 -5
  297. package/src/member/index.ts +52 -1
  298. package/src/member/types.ts +38 -0
  299. package/src/member/util.ts +139 -28
  300. package/src/members/collection.ts +8 -0
  301. package/src/members/index.ts +196 -7
  302. package/src/members/request.ts +97 -17
  303. package/src/members/types.ts +29 -0
  304. package/src/members/util.ts +333 -240
  305. package/src/metrics/constants.ts +12 -6
  306. package/src/metrics/index.ts +1 -471
  307. package/src/multistream/mediaRequestManager.ts +440 -0
  308. package/src/multistream/receiveSlot.ts +184 -0
  309. package/src/multistream/receiveSlotManager.ts +166 -0
  310. package/src/multistream/remoteMedia.ts +254 -0
  311. package/src/multistream/remoteMediaGroup.ts +284 -0
  312. package/src/multistream/remoteMediaManager.ts +1145 -0
  313. package/src/multistream/sendSlotManager.ts +170 -0
  314. package/src/networkQualityMonitor/index.ts +6 -6
  315. package/src/reachability/index.ts +238 -45
  316. package/src/reachability/request.ts +17 -8
  317. package/src/reactions/constants.ts +4 -0
  318. package/src/reactions/reactions.ts +4 -4
  319. package/src/reactions/reactions.type.ts +30 -4
  320. package/src/reconnection-manager/index.ts +124 -107
  321. package/src/recording-controller/index.ts +20 -3
  322. package/src/recording-controller/util.ts +26 -9
  323. package/src/roap/index.ts +98 -241
  324. package/src/roap/request.ts +74 -148
  325. package/src/roap/turnDiscovery.ts +62 -56
  326. package/src/rtcMetrics/constants.ts +3 -0
  327. package/src/rtcMetrics/index.ts +100 -0
  328. package/src/statsAnalyzer/global.ts +1 -84
  329. package/src/statsAnalyzer/index.ts +442 -523
  330. package/src/statsAnalyzer/mqaUtil.ts +105 -103
  331. package/src/webinar/collection.ts +31 -0
  332. package/src/webinar/index.ts +62 -0
  333. package/test/integration/spec/converged-space-meetings.js +233 -0
  334. package/test/integration/spec/journey.js +320 -264
  335. package/test/integration/spec/space-meeting.js +77 -4
  336. package/test/unit/spec/annotation/index.ts +418 -0
  337. package/test/unit/spec/breakouts/breakout.ts +237 -0
  338. package/test/unit/spec/breakouts/collection.ts +15 -0
  339. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  340. package/test/unit/spec/breakouts/events.ts +89 -0
  341. package/test/unit/spec/breakouts/index.ts +1790 -0
  342. package/test/unit/spec/breakouts/request.ts +104 -0
  343. package/test/unit/spec/breakouts/utils.js +72 -0
  344. package/test/unit/spec/common/queue.js +31 -2
  345. package/test/unit/spec/controls-options-manager/index.js +163 -0
  346. package/test/unit/spec/controls-options-manager/util.js +576 -60
  347. package/test/unit/spec/fixture/locus.js +1 -0
  348. package/test/unit/spec/interpretation/collection.ts +15 -0
  349. package/test/unit/spec/interpretation/index.ts +589 -0
  350. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  351. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  352. package/test/unit/spec/locus-info/index.js +1390 -16
  353. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  354. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  355. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  356. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  357. package/test/unit/spec/locus-info/parser.js +116 -35
  358. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  359. package/test/unit/spec/media/index.ts +274 -0
  360. package/test/unit/spec/media/properties.ts +75 -84
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +82 -0
  362. package/test/unit/spec/meeting/index.js +7395 -3171
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  364. package/test/unit/spec/meeting/muteState.js +407 -212
  365. package/test/unit/spec/meeting/request.js +512 -42
  366. package/test/unit/spec/meeting/utils.js +741 -24
  367. package/test/unit/spec/meeting-info/index.js +300 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +500 -6
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +14 -0
  371. package/test/unit/spec/meetings/index.js +1012 -209
  372. package/test/unit/spec/meetings/utils.js +202 -2
  373. package/test/unit/spec/member/index.js +38 -8
  374. package/test/unit/spec/member/util.js +528 -27
  375. package/test/unit/spec/members/index.js +597 -3
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +210 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  380. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  382. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  385. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  386. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  387. package/test/unit/spec/reachability/index.ts +598 -24
  388. package/test/unit/spec/reachability/request.js +68 -0
  389. package/test/unit/spec/reconnection-manager/index.js +130 -22
  390. package/test/unit/spec/recording-controller/index.js +293 -218
  391. package/test/unit/spec/recording-controller/util.js +223 -96
  392. package/test/unit/spec/roap/index.ts +200 -76
  393. package/test/unit/spec/roap/request.ts +232 -0
  394. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  395. package/test/unit/spec/rtcMetrics/index.ts +73 -0
  396. package/test/unit/spec/stats-analyzer/index.js +181 -177
  397. package/test/unit/spec/webinar/collection.ts +13 -0
  398. package/test/unit/spec/webinar/index.ts +60 -0
  399. package/test/utils/constants.js +9 -0
  400. package/test/utils/integrationTestUtils.js +46 -0
  401. package/test/utils/testUtils.js +0 -45
  402. package/test/utils/webex-config.js +4 -0
  403. package/test/utils/webex-test-users.js +7 -3
  404. package/dist/common/browser-detection.d.ts +0 -9
  405. package/dist/common/collection.d.ts +0 -48
  406. package/dist/common/config.d.ts +0 -2
  407. package/dist/common/errors/captcha-error.d.ts +0 -15
  408. package/dist/common/errors/intent-to-join.d.ts +0 -16
  409. package/dist/common/errors/join-meeting.d.ts +0 -17
  410. package/dist/common/errors/media.d.ts +0 -15
  411. package/dist/common/errors/parameter.d.ts +0 -15
  412. package/dist/common/errors/password-error.d.ts +0 -15
  413. package/dist/common/errors/permission.d.ts +0 -14
  414. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  415. package/dist/common/errors/reconnection.d.ts +0 -15
  416. package/dist/common/errors/stats.d.ts +0 -15
  417. package/dist/common/errors/webex-errors.d.ts +0 -81
  418. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  419. package/dist/common/events/events-scope.d.ts +0 -17
  420. package/dist/common/events/events.d.ts +0 -12
  421. package/dist/common/events/trigger-proxy.d.ts +0 -2
  422. package/dist/common/events/util.d.ts +0 -2
  423. package/dist/common/logs/logger-config.d.ts +0 -2
  424. package/dist/common/logs/logger-proxy.d.ts +0 -2
  425. package/dist/common/logs/request.d.ts +0 -34
  426. package/dist/common/queue.d.ts +0 -32
  427. package/dist/config.d.ts +0 -73
  428. package/dist/constants.d.ts +0 -926
  429. package/dist/controls-options-manager/constants.d.ts +0 -4
  430. package/dist/controls-options-manager/enums.d.ts +0 -5
  431. package/dist/controls-options-manager/index.d.ts +0 -120
  432. package/dist/controls-options-manager/util.d.ts +0 -7
  433. package/dist/index.d.ts +0 -4
  434. package/dist/locus-info/controlsUtils.d.ts +0 -2
  435. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  436. package/dist/locus-info/fullState.d.ts +0 -2
  437. package/dist/locus-info/hostUtils.d.ts +0 -2
  438. package/dist/locus-info/index.d.ts +0 -269
  439. package/dist/locus-info/infoUtils.d.ts +0 -2
  440. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  441. package/dist/locus-info/parser.d.ts +0 -212
  442. package/dist/locus-info/selfUtils.d.ts +0 -2
  443. package/dist/media/index.d.ts +0 -32
  444. package/dist/media/properties.d.ts +0 -108
  445. package/dist/media/util.d.ts +0 -2
  446. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  447. package/dist/meeting/effectsState.d.ts +0 -42
  448. package/dist/meeting/effectsState.js +0 -260
  449. package/dist/meeting/effectsState.js.map +0 -1
  450. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  451. package/dist/meeting/index.d.ts +0 -1622
  452. package/dist/meeting/muteState.d.ts +0 -116
  453. package/dist/meeting/request.d.ts +0 -255
  454. package/dist/meeting/state.d.ts +0 -9
  455. package/dist/meeting/util.d.ts +0 -2
  456. package/dist/meeting-info/collection.d.ts +0 -20
  457. package/dist/meeting-info/index.d.ts +0 -57
  458. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  459. package/dist/meeting-info/request.d.ts +0 -22
  460. package/dist/meeting-info/util.d.ts +0 -2
  461. package/dist/meeting-info/utilv2.d.ts +0 -2
  462. package/dist/meetings/collection.d.ts +0 -23
  463. package/dist/meetings/index.d.ts +0 -296
  464. package/dist/meetings/request.d.ts +0 -27
  465. package/dist/meetings/util.d.ts +0 -18
  466. package/dist/member/index.d.ts +0 -147
  467. package/dist/member/member.types.d.ts +0 -11
  468. package/dist/member/util.d.ts +0 -2
  469. package/dist/members/collection.d.ts +0 -24
  470. package/dist/members/index.d.ts +0 -298
  471. package/dist/members/request.d.ts +0 -50
  472. package/dist/members/util.d.ts +0 -2
  473. package/dist/metrics/config.d.ts +0 -169
  474. package/dist/metrics/config.js +0 -289
  475. package/dist/metrics/config.js.map +0 -1
  476. package/dist/metrics/constants.d.ts +0 -59
  477. package/dist/metrics/index.d.ts +0 -152
  478. package/dist/networkQualityMonitor/index.d.ts +0 -70
  479. package/dist/peer-connection-manager/index.d.ts +0 -6
  480. package/dist/peer-connection-manager/index.js +0 -671
  481. package/dist/peer-connection-manager/index.js.map +0 -1
  482. package/dist/peer-connection-manager/util.d.ts +0 -6
  483. package/dist/peer-connection-manager/util.js +0 -110
  484. package/dist/peer-connection-manager/util.js.map +0 -1
  485. package/dist/personal-meeting-room/index.d.ts +0 -47
  486. package/dist/personal-meeting-room/request.d.ts +0 -14
  487. package/dist/personal-meeting-room/util.d.ts +0 -2
  488. package/dist/reachability/index.d.ts +0 -139
  489. package/dist/reachability/request.d.ts +0 -35
  490. package/dist/reactions/reactions.d.ts +0 -4
  491. package/dist/reactions/reactions.type.d.ts +0 -32
  492. package/dist/reconnection-manager/index.d.ts +0 -112
  493. package/dist/recording-controller/enums.d.ts +0 -7
  494. package/dist/recording-controller/index.d.ts +0 -193
  495. package/dist/recording-controller/util.d.ts +0 -13
  496. package/dist/roap/collection.d.ts +0 -10
  497. package/dist/roap/collection.js +0 -63
  498. package/dist/roap/collection.js.map +0 -1
  499. package/dist/roap/handler.d.ts +0 -47
  500. package/dist/roap/handler.js +0 -279
  501. package/dist/roap/handler.js.map +0 -1
  502. package/dist/roap/index.d.ts +0 -116
  503. package/dist/roap/request.d.ts +0 -35
  504. package/dist/roap/state.d.ts +0 -9
  505. package/dist/roap/state.js +0 -127
  506. package/dist/roap/state.js.map +0 -1
  507. package/dist/roap/turnDiscovery.d.ts +0 -81
  508. package/dist/roap/util.d.ts +0 -2
  509. package/dist/roap/util.js +0 -76
  510. package/dist/roap/util.js.map +0 -1
  511. package/dist/statsAnalyzer/global.d.ts +0 -118
  512. package/dist/statsAnalyzer/index.d.ts +0 -193
  513. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  514. package/dist/transcription/index.d.ts +0 -64
  515. package/src/index.js +0 -15
  516. package/src/meeting/effectsState.ts +0 -209
  517. package/src/metrics/config.ts +0 -485
  518. package/src/peer-connection-manager/index.ts +0 -847
  519. package/src/peer-connection-manager/util.ts +0 -119
  520. package/src/roap/collection.ts +0 -62
  521. package/src/roap/handler.ts +0 -294
  522. package/src/roap/state.ts +0 -156
  523. package/src/roap/util.ts +0 -100
  524. package/test/unit/spec/meeting/effectsState.js +0 -281
  525. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  526. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  527. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  528. package/test/unit/spec/roap/util.js +0 -30
@@ -1 +1 @@
1
- {"version":3,"names":["_util","_interopRequireDefault","require","_uuid","_window","_ipAnonymize","_internalPluginMetrics","_loggerProxy","_constants","_browserDetection","_config","_BrowserDetection","BrowserDetection","getOSName","getOSVersion","getBrowserName","getBrowserVersion","anonymizeIPAddress","localIp","anonymize","triggerTimers","_ref","event","meeting","data","eventType","CALL_INITIATED","setStartCallInitiateJoinReq","LOCUS_JOIN_REQUEST","setEndCallInitiateJoinReq","setStartJoinReqResp","LOCUS_JOIN_RESPONSE","setEndJoinReqResp","setStartSetupDelay","mediaType","AUDIO","VIDEO","setStartSendingMediaDelay","RECEIVING_MEDIA_START","setEndSetupDelay","SENDING_MEDIA_START","setEndSendingMediaDelay","LOCAL_SDP_GENERATED","setStartLocalSDPGenRemoteSDPRecvDelay","REMOTE_SDP_RECEIVED","setEndLocalSDPGenRemoteSDPRecvDelay","Metrics","_classCallCheck2","default","_defineProperty2","instance","_events","meetingCollection","keys","_values","_createClass2","key","value","initialSetup","webex","postEvent","options","meetingId","_options$data","indexOf","LoggerProxy","logger","error","concat","get","callEvents","MEDIA_QUALITY","sendMediaQualityAnalyzerMetrics","push","sendCallAnalyzerMetrics","info","initPayload","identifiers","_this$webex$meetings$","_this$webex$meetings$2","payload","eventId","uuid","v4","version","origin","name","networkType","userAgent","userAgentToString","clientInfo","clientType","clientVersion","CLIENT_NAME","localNetworkPrefix","meetings","geoHintInfo","clientAddress","osVersion","subClientType","os","getOSNameInternal","browser","browserVersion","originTime","triggered","Date","toISOString","senderCountryCode","countryCode","canProceed","eventData","webClientDomain","window","location","hostname","Object","prototype","hasOwnProperty","call","errors","trigger","pstnAudioType","mediaCapabilities","recoveredBy","joinTimes","isRoapCallEnabled","initMediaPayload","_this$webex$meetings$3","_this$webex$meetings$4","arguments","length","undefined","audioSetupDelay","videoSetupDelay","UNKNOWN","intervals","intervalData","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","parseLocusError","err","showToUser","errorCode","statusCode","body","ERROR_CODE","MEETING_ERRORS","FREE_USER_MAX_PARTICIPANTS_EXCEEDED","PAID_USER_MAX_PARTICIPANTS_EXCEEDED","SERVICE_MAX_PARTICIPANTS_EXCEEDED","INACTIVE","EXCEEDED_MAX_JOINED_PARTICIPANTS","EXCEEDED_SERVICE_MAX_PARTICIPANTS","MEETING_IS_LOCKED","MEETING_IS_TERMINATING","MEETING_REQUIRE_MODERATOR_PIN_INTENT","MEETING_REQUIRE_MODERATOR_PIN","MEETING_REQUIRE_MODERATOR_ROLE","JOIN_RESTRICTED_USER","GET_RESTRICTED_USER","CREATE_MEDIA_RESTRICTED_USER","JOIN_RESTRICTED_USER_NOT_IN_ROOM","MEETING_NOT_FOUND","NOT_WEBEX_SITE","INVALID_JOIN_TIME","PHONE_NUMBER_NOT_A_NUMBER","PHONE_NUMBER_TOO_LONG","INVALID_DIALABLE_KEY","ONE_ON_ONE_TO_SELF_NOT_ALLOWED","REMOVED_PARTICIPANT","MEETING_LINK_NOT_FOUND","PHONE_NUMBER_TOO_SHORT_AFTER_IDD","INVALID_INVITEE_ADDRESS","PMR_ACCOUNT_LOCKED","RESOURCE_GUEST_FORBIDDEN","PMR_ACCOUNT_SUSPENDED","EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE","INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST","CONVERSATION_NOT_FOUND","RECORDING_CONTROL_NOT_SUPPORTED","RECORDING_NOT_STARTED","RECORDING_NOT_ENABLED","generateErrorPayload","LOCUS_RESPONSE","shownToUser","errorPayload","category","errorDescription","fatal","_includes2","notFatalErrorList","OTHER","errorData","httpCode","_this$webex$meetings","_this$webex$meetings$5","userAgentOption","browserInfo","util","format","metrics","clientName","toLowerCase","split","osInfo","process","env","NODE_ENV","sendBehavioralMetric","metricName","metricFields","metricTags","internal","submitClientMetrics","type","config","fields","tags","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport util from 'util';\n\nimport {includes} from 'lodash';\nimport uuid from 'uuid';\n// @ts-ignore\nimport window from 'global/window';\nimport anonymize from 'ip-anonymize';\n\n// @ts-ignore\nimport {getOSNameInternal} from '@webex/internal-plugin-metrics';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEETING_ERRORS} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\n\nimport {\n error,\n eventType,\n errorCodes as ERROR_CODE,\n UNKNOWN,\n CLIENT_NAME,\n mediaType,\n} from './config';\n\nconst {getOSName, getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\n// Apply a CIDR /28 format to the IPV4 and /96 to the IPV6 addresses\n// For reference : https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\nconst anonymizeIPAddress = (localIp) => anonymize(localIp, 28, 96);\n\nconst triggerTimers = ({event, meeting, data}) => {\n switch (event) {\n case eventType.CALL_INITIATED:\n meeting.setStartCallInitiateJoinReq();\n break;\n case eventType.LOCUS_JOIN_REQUEST:\n meeting.setEndCallInitiateJoinReq();\n meeting.setStartJoinReqResp();\n break;\n case eventType.LOCUS_JOIN_RESPONSE:\n meeting.setEndJoinReqResp();\n meeting.setStartSetupDelay(mediaType.AUDIO);\n meeting.setStartSetupDelay(mediaType.VIDEO);\n meeting.setStartSendingMediaDelay(mediaType.AUDIO);\n meeting.setStartSendingMediaDelay(mediaType.VIDEO);\n break;\n case eventType.RECEIVING_MEDIA_START:\n meeting.setEndSetupDelay(data.mediaType);\n break;\n case eventType.SENDING_MEDIA_START:\n meeting.setEndSendingMediaDelay(data.mediaType);\n break;\n case eventType.LOCAL_SDP_GENERATED:\n meeting.setStartLocalSDPGenRemoteSDPRecvDelay();\n break;\n case eventType.REMOTE_SDP_RECEIVED:\n meeting.setEndLocalSDPGenRemoteSDPRecvDelay();\n break;\n default:\n break;\n }\n};\n\n/**\n * @description Metrics handles all the call metrics events\n * @export\n * @class Metrics\n */\nclass Metrics {\n static instance: Metrics;\n\n _events: any;\n keys: any;\n meetingCollection: any;\n webex: any;\n\n /**\n * Create Metrics Object\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor() {\n if (!Metrics.instance) {\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof Metrics\n */\n this._events = [];\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.meetingCollection = null;\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.keys = Object.values(eventType);\n /**\n * @instance\n * @type {Metrics}\n * @private\n * @memberof Metrics\n */\n Metrics.instance = this;\n }\n\n // eslint-disable-next-line no-constructor-return\n return Metrics.instance;\n }\n\n /**\n * Initializes the Metrics singleton with a meeting Collection.\n *\n * @param {Object} meetingCollection meetings object\n * @param {Object} webex webex SDK object\n *\n * @returns {void}\n */\n initialSetup(meetingCollection: object, webex: object) {\n this.meetingCollection = meetingCollection;\n this.webex = webex;\n }\n\n /**\n * poste Meeting event metrics\n * @param {object} options {meetingId/meeting} as a json object\n * @param {Meeting} options.meeting Meeting object\n * @param {String} options.meetingId\n * @param {object} options.data\n * @param {object} options.event\n * @returns {object} null\n */\n postEvent(options: {meeting?: any; meetingId?: string; data?: object; event?: any} | any) {\n const {meetingId, data = {}, event} = options;\n let {meeting} = options;\n\n if (this.keys.indexOf(event) === -1) {\n LoggerProxy.logger.error(\n `Metrics:index#postEvent --> Event ${event} doesn't exist in dictionary`\n );\n }\n\n if (!meeting && meetingId) {\n meeting = this.meetingCollection.get(meetingId);\n options.meeting = meeting;\n }\n\n if (meeting) {\n triggerTimers(options);\n\n if (!meeting.callEvents) {\n meeting.callEvents = [];\n }\n if (event === eventType.MEDIA_QUALITY) {\n data.event = event;\n meeting.sendMediaQualityAnalyzerMetrics(data);\n } else {\n meeting.callEvents.push(event);\n data.event = event;\n meeting.sendCallAnalyzerMetrics(data);\n }\n } else {\n LoggerProxy.logger.info(\n `Metrics:index#postEvent --> Event received for meetingId:${meetingId}, but meeting not found in collection.`\n );\n }\n }\n\n /**\n * Docs for Call analyzer metrics\n * https://sqbu-github.cisco.com/WebExSquared/call-analyzer/wiki\n * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/master/diagnostic-events.raml\n */\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n initPayload(eventType, identifiers, options) {\n const payload: any = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n name: 'endpoint',\n networkType: 'unknown',\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType,\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress),\n osVersion: getOSVersion() || 'unknown',\n subClientType: options.subClientType,\n os: getOSNameInternal(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n },\n originTime: {\n triggered: new Date().toISOString(),\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n eventData: {webClientDomain: window.location.hostname},\n },\n };\n\n // TODO: more options should be checked and some of them should be mandatory in certain conditions\n if (options) {\n if (Object.prototype.hasOwnProperty.call(options, 'canProceed')) {\n payload.event.canProceed = options.canProceed;\n }\n if (options.errors) {\n payload.event.errors = options.errors;\n }\n if (options.mediaType) {\n payload.event.mediaType = options.mediaType;\n }\n if (options.trigger) {\n payload.event.trigger = options.trigger;\n }\n if (options.pstnAudioType) {\n payload.event.pstnAudioType = options.pstnAudioType;\n }\n if (options.mediaCapabilities) {\n payload.event.mediaCapabilities = options.mediaCapabilities;\n }\n if (options.recoveredBy) {\n payload.event.recoveredBy = options.recoveredBy;\n }\n if (options.joinTimes) {\n payload.event.joinTimes = options.joinTimes;\n }\n if (options.isRoapCallEnabled) {\n payload.event.isRoapCallEnabled = options.isRoapCallEnabled;\n }\n }\n\n return payload;\n }\n\n /**\n * get the payload specific for a media quality event through call analyzer\n * @param {String} eventType the event name\n * @param {Object} identifiers contains the identifiers needed for CA\n * @param {String} identifiers.correlationId\n * @param {String} identifiers.locusUrl\n * @param {String} identifiers.locusId\n * @param {Object} options\n * @param {Object} options.intervalData\n * @param {String} options.clientType\n * @returns {Object}\n * @public\n * @memberof Metrics\n */\n public initMediaPayload(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n eventType: string,\n identifiers: {\n correlationId: string;\n locusUrl: string;\n locusId: string;\n },\n options:\n | {\n intervalData: object;\n clientType: string;\n }\n | any = {}\n ) {\n const {audioSetupDelay, videoSetupDelay, joinTimes} = options;\n\n const payload = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n audioSetupDelay,\n videoSetupDelay,\n name: 'endpoint',\n networkType: options.networkType || UNKNOWN,\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType, // TODO: Only clientType: 'TEAMS_CLIENT' is whitelisted\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress),\n os: getOSNameInternal(),\n osVersion: getOSVersion() || UNKNOWN,\n subClientType: options.subClientType,\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n },\n originTime: {\n triggered: new Date().toISOString(),\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n intervals: [options.intervalData],\n joinTimes,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || UNKNOWN,\n startTime: new Date().toISOString(),\n },\n },\n };\n\n return payload;\n }\n\n /**\n * This function Parses a Locus error and returns a diagnostic event payload.\n * It should keep updating from:\n * https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Adapters/TelephonyAdapter/TelephonyAdapter.cpp#L920\n *\n * @param {Object} err the error Object from Locus response\n * @param {boolean} showToUser true if a toast is shown to user\n * @returns {{showToUser: boolean, category: string, errorDescription: string,\n * errorCode: number, errorData: *, fatal: boolean, name: string}}\n */\n parseLocusError(err: any, showToUser: boolean) {\n let errorCode;\n\n if (err && err.statusCode && err.statusCode >= 500) {\n errorCode = 1003;\n } else if (err && err.body && err.body.errorCode) {\n // locus error codes: https://sqbu-github.cisco.com/WebExSquared/locus/blob/master/server/src/main/resources/locus-error-codes.properties\n switch (ERROR_CODE[err.body.errorCode]) {\n case MEETING_ERRORS.FREE_USER_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3007;\n break;\n case MEETING_ERRORS.PAID_USER_MAX_PARTICIPANTS_EXCEEDED:\n case MEETING_ERRORS.SERVICE_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3002;\n break;\n case MEETING_ERRORS.INACTIVE:\n errorCode = 4001;\n break;\n case MEETING_ERRORS.EXCEEDED_MAX_JOINED_PARTICIPANTS:\n case MEETING_ERRORS.EXCEEDED_SERVICE_MAX_PARTICIPANTS:\n errorCode = 3001;\n break;\n case MEETING_ERRORS.MEETING_IS_LOCKED:\n errorCode = 4002;\n break;\n case MEETING_ERRORS.MEETING_IS_TERMINATING:\n errorCode = 4003;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN_INTENT:\n errorCode = 4004;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN:\n errorCode = 4005;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_ROLE:\n errorCode = 4006;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER:\n case MEETING_ERRORS.GET_RESTRICTED_USER:\n case MEETING_ERRORS.CREATE_MEDIA_RESTRICTED_USER:\n errorCode = 3005;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER_NOT_IN_ROOM:\n errorCode = 4007;\n break;\n case MEETING_ERRORS.MEETING_NOT_FOUND:\n errorCode = 4011;\n break;\n case MEETING_ERRORS.NOT_WEBEX_SITE:\n errorCode = 4012;\n break;\n case MEETING_ERRORS.INVALID_JOIN_TIME:\n errorCode = 4013;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_NOT_A_NUMBER:\n errorCode = 4016;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_LONG:\n errorCode = 4017;\n break;\n case MEETING_ERRORS.INVALID_DIALABLE_KEY:\n errorCode = 4018;\n break;\n case MEETING_ERRORS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED:\n errorCode = 4019;\n break;\n case MEETING_ERRORS.REMOVED_PARTICIPANT:\n errorCode = 4020;\n break;\n case MEETING_ERRORS.MEETING_LINK_NOT_FOUND:\n errorCode = 4021;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD:\n errorCode = 4022;\n break;\n case MEETING_ERRORS.INVALID_INVITEE_ADDRESS:\n errorCode = 4023;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_LOCKED:\n errorCode = 4024;\n break;\n case MEETING_ERRORS.RESOURCE_GUEST_FORBIDDEN:\n errorCode = 4025;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_SUSPENDED:\n errorCode = 4026;\n break;\n case MEETING_ERRORS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE:\n errorCode = 4027;\n break;\n case MEETING_ERRORS.INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST:\n errorCode = 1006;\n break;\n case MEETING_ERRORS.CONVERSATION_NOT_FOUND:\n errorCode = 4028;\n break;\n case MEETING_ERRORS.RECORDING_CONTROL_NOT_SUPPORTED:\n case MEETING_ERRORS.RECORDING_NOT_STARTED:\n case MEETING_ERRORS.RECORDING_NOT_ENABLED:\n errorCode = 4029;\n break;\n default:\n errorCode = 4008;\n }\n } else {\n errorCode = 4008;\n }\n\n return this.generateErrorPayload(errorCode, showToUser, error.name.LOCUS_RESPONSE, err);\n }\n\n generateErrorPayload(errorCode, shownToUser, name, err) {\n if (error.errors[errorCode]) {\n const errorPayload: any = {\n shownToUser: shownToUser || false,\n category: error.errors[errorCode][2],\n errorDescription: error.errors[errorCode][0],\n errorCode,\n fatal: !includes(error.notFatalErrorList, errorCode),\n name: name || error.name.OTHER,\n };\n\n if (err && err.body) {\n errorPayload.errorData = err.body;\n }\n\n if (err && err.statusCode) {\n errorPayload.httpCode = err.statusCode;\n }\n\n return errorPayload;\n }\n\n return null;\n }\n\n /**\n * Returns a formated string of the user agent.\n *\n * @returns {string} formatted user agent information\n */\n userAgentToString() {\n let userAgentOption;\n let browserInfo;\n const clientInfo = util.format('client=%s', `${this.webex.meetings?.metrics?.clientName}`);\n\n if (\n ['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !==\n -1\n ) {\n browserInfo = util.format(\n 'browser=%s',\n `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`\n );\n }\n const osInfo = util.format('os=%s', `${getOSName()}/${getOSVersion().split('.')[0]}`);\n\n if (browserInfo) {\n userAgentOption = `(${browserInfo}`;\n }\n if (osInfo) {\n userAgentOption = userAgentOption\n ? `${userAgentOption}; ${clientInfo}; ${osInfo}`\n : `${clientInfo}; (${osInfo}`;\n }\n if (userAgentOption) {\n userAgentOption += ')';\n\n return util.format(\n 'webex-js-sdk/%s %s',\n `${process.env.NODE_ENV}-${this.webex.version}`,\n userAgentOption\n );\n }\n\n return util.format('webex-js-sdk/%s', `${process.env.NODE_ENV}-${this.webex.version}`);\n }\n\n /**\n * Uploads given metric to the Metrics service as an Behavioral metric.\n * Metadata about the environment such as browser, OS, SDK and their versions\n * are automatically added when the metric is sent.\n *\n * The Metrics service will send an Behavioral metric to InfluxDB for\n * aggregation.\n * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.\n *\n * @param {string} metricName Name of the metric (measurement) to send\n * @param {Object} metricFields Key-valye pairs of data or values about this metric\n * @param {Object} metricTags Key-value pairs of metric metadata\n *\n * @returns {void}\n */\n sendBehavioralMetric(metricName: string, metricFields: object = {}, metricTags: object = {}) {\n this.webex.internal.metrics.submitClientMetrics(metricName, {\n type: this.webex.config.metrics.type,\n fields: metricFields,\n tags: metricTags,\n });\n }\n}\n\n// Export Metrics singleton ---------------------------------------------------\nconst instance = new Metrics();\n\nexport default instance;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Metrics","_classCallCheck2","default","_defineProperty2","instance","_createClass2","key","value","initialSetup","webex","sendBehavioralMetric","metricName","metricFields","arguments","length","undefined","metricTags","internal","metrics","submitClientMetrics","type","config","fields","tags","_class","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * @description Metrics handles all the call metrics events\n * @export\n * @class Metrics\n */\nclass Metrics {\n static instance: Metrics;\n webex: any;\n\n /**\n * Create Metrics Object\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor() {\n if (!Metrics.instance) {\n /**\n * @instance\n * @type {Metrics}\n * @private\n * @memberof Metrics\n */\n Metrics.instance = this;\n }\n\n // eslint-disable-next-line no-constructor-return\n return Metrics.instance;\n }\n\n /**\n * Initializes the Metrics singleton with a meeting Collection.\n *\n * @param {Object} webex webex SDK object\n *\n * @returns {void}\n */\n initialSetup(webex: object) {\n this.webex = webex;\n }\n\n /**\n * Uploads given metric to the Metrics service as an Behavioral metric.\n * Metadata about the environment such as browser, OS, SDK and their versions\n * are automatically added when the metric is sent.\n *\n * The Metrics service will send an Behavioral metric to InfluxDB for\n * aggregation.\n * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.\n *\n * @param {string} metricName Name of the metric (measurement) to send\n * @param {Object} metricFields Key-valye pairs of data or values about this metric\n * @param {Object} metricTags Key-value pairs of metric metadata\n *\n * @returns {void}\n */\n sendBehavioralMetric(metricName: string, metricFields: object = {}, metricTags: object = {}) {\n this.webex.internal.metrics.submitClientMetrics(metricName, {\n type: this.webex.config.metrics.type,\n fields: metricFields,\n tags: metricTags,\n });\n }\n}\n\n// Export Metrics singleton ---------------------------------------------------\nconst instance = new Metrics();\n\nexport default instance;\n"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAJA,IAKMA,OAAO;EAIX;AACF;AACA;AACA;AACA;AACA;EACE,SAAAA,QAAA,EAAc;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAF,OAAA;IAAA,IAAAG,gBAAA,CAAAD,OAAA;IACZ,IAAI,CAACF,OAAO,CAACI,QAAQ,EAAE;MACrB;AACN;AACA;AACA;AACA;AACA;MACMJ,OAAO,CAACI,QAAQ,GAAG,IAAI;IACzB;;IAEA;IACA,OAAOJ,OAAO,CAACI,QAAQ;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE,IAAAC,aAAA,CAAAH,OAAA,EAAAF,OAAA;IAAAM,GAAA;IAAAC,KAAA,EAOA,SAAAC,aAAaC,KAAa,EAAE;MAC1B,IAAI,CAACA,KAAK,GAAGA,KAAK;IACpB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAdE;IAAAH,GAAA;IAAAC,KAAA,EAeA,SAAAG,qBAAqBC,UAAkB,EAAsD;MAAA,IAApDC,YAAoB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;MAAA,IAAEG,UAAkB,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;MACzF,IAAI,CAACJ,KAAK,CAACQ,QAAQ,CAACC,OAAO,CAACC,mBAAmB,CAACR,UAAU,EAAE;QAC1DS,IAAI,EAAE,IAAI,CAACX,KAAK,CAACY,MAAM,CAACH,OAAO,CAACE,IAAI;QACpCE,MAAM,EAAEV,YAAY;QACpBW,IAAI,EAAEP;MACR,CAAC,CAAC;IACJ;EAAC;EAAA,OAAAhB,OAAA;AAAA,KAGH;AAAAwB,MAAA,GA5DMxB,OAAO;AAAA,IAAAG,gBAAA,CAAAD,OAAA,EAAPF,OAAO;AA6Db,IAAMI,QAAQ,GAAG,IAAIJ,OAAO,CAAC,CAAC;AAAC,IAAAyB,QAAA,GAAAC,OAAA,CAAAxB,OAAA,GAEhBE,QAAQ"}
@@ -0,0 +1,344 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.MediaRequestManager = void 0;
9
+ var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
10
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
13
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
15
+ var _internalMediaCore = require("@webex/internal-media-core");
16
+ var _lodash = require("lodash");
17
+ var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
18
+ var _receiveSlot = require("./receiveSlot");
19
+ var _remoteMedia = require("./remoteMedia");
20
+ /* eslint-disable require-jsdoc */
21
+
22
+ // we'll add AV1 here in the future when it's available
23
+
24
+ var CODEC_DEFAULTS = {
25
+ h264: {
26
+ maxFs: 8192,
27
+ maxFps: 3000,
28
+ maxMbps: 245760
29
+ }
30
+ };
31
+ var DEBOUNCED_SOURCE_UPDATE_TIME = 1000;
32
+ var MediaRequestManager = exports.MediaRequestManager = /*#__PURE__*/function () {
33
+ function MediaRequestManager(sendMediaRequestsCallback, options) {
34
+ (0, _classCallCheck2.default)(this, MediaRequestManager);
35
+ (0, _defineProperty2.default)(this, "sendMediaRequestsCallback", void 0);
36
+ (0, _defineProperty2.default)(this, "kind", void 0);
37
+ (0, _defineProperty2.default)(this, "counter", void 0);
38
+ (0, _defineProperty2.default)(this, "clientRequests", void 0);
39
+ (0, _defineProperty2.default)(this, "degradationPreferences", void 0);
40
+ (0, _defineProperty2.default)(this, "sourceUpdateListener", void 0);
41
+ (0, _defineProperty2.default)(this, "debouncedSourceUpdateListener", void 0);
42
+ (0, _defineProperty2.default)(this, "previousStreamRequests", []);
43
+ (0, _defineProperty2.default)(this, "trimRequestsToNumOfSources", void 0);
44
+ (0, _defineProperty2.default)(this, "numTotalSources", void 0);
45
+ (0, _defineProperty2.default)(this, "numLiveSources", void 0);
46
+ this.sendMediaRequestsCallback = sendMediaRequestsCallback;
47
+ this.counter = 0;
48
+ this.numLiveSources = 0;
49
+ this.numTotalSources = 0;
50
+ this.clientRequests = {};
51
+ this.degradationPreferences = options.degradationPreferences;
52
+ this.kind = options.kind;
53
+ this.trimRequestsToNumOfSources = options.trimRequestsToNumOfSources;
54
+ this.sourceUpdateListener = this.commit.bind(this);
55
+ this.debouncedSourceUpdateListener = (0, _lodash.debounce)(this.sourceUpdateListener, DEBOUNCED_SOURCE_UPDATE_TIME);
56
+ }
57
+ (0, _createClass2.default)(MediaRequestManager, [{
58
+ key: "setDegradationPreferences",
59
+ value: function setDegradationPreferences(degradationPreferences) {
60
+ this.degradationPreferences = degradationPreferences;
61
+ this.sendRequests(); // re-send requests after preferences are set
62
+ }
63
+ }, {
64
+ key: "getDegradedClientRequests",
65
+ value: function getDegradedClientRequests(clientRequests) {
66
+ var _this = this;
67
+ var maxFsLimits = [(0, _remoteMedia.getMaxFs)('best'), (0, _remoteMedia.getMaxFs)('large'), (0, _remoteMedia.getMaxFs)('medium'), (0, _remoteMedia.getMaxFs)('small'), (0, _remoteMedia.getMaxFs)('very small'), (0, _remoteMedia.getMaxFs)('thumbnail')];
68
+
69
+ // reduce max-fs until total macroblocks is below limit
70
+ var _loop = function _loop(i) {
71
+ var totalMacroblocksRequested = 0;
72
+ (0, _values.default)(clientRequests).forEach(function (mr) {
73
+ if (mr.codecInfo) {
74
+ mr.codecInfo.maxFs = Math.min(mr.preferredMaxFs || CODEC_DEFAULTS.h264.maxFs, mr.codecInfo.maxFs || CODEC_DEFAULTS.h264.maxFs, maxFsLimits[i]);
75
+ // we only consider sources with "live" state
76
+ var slotsWithLiveSource = mr.receiveSlots.filter(function (rs) {
77
+ return rs.sourceState === 'live';
78
+ });
79
+ totalMacroblocksRequested += mr.codecInfo.maxFs * slotsWithLiveSource.length;
80
+ }
81
+ });
82
+ if (totalMacroblocksRequested <= _this.degradationPreferences.maxMacroblocksLimit) {
83
+ if (i !== 0) {
84
+ _loggerProxy.default.logger.warn("multistream:mediaRequestManager --> too many streams with high max-fs, frame size will be limited to ".concat(maxFsLimits[i]));
85
+ }
86
+ return 1; // break
87
+ } else if (i === maxFsLimits.length - 1) {
88
+ _loggerProxy.default.logger.warn("multistream:mediaRequestManager --> even with frame size limited to ".concat(maxFsLimits[i], " you are still requesting too many streams, consider reducing the number of requests"));
89
+ }
90
+ };
91
+ for (var i = 0; i < maxFsLimits.length; i += 1) {
92
+ if (_loop(i)) break;
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Returns true if two stream requests are the same, false otherwise.
98
+ *
99
+ * @param {StreamRequest} streamRequestA - Stream request A for comparison.
100
+ * @param {StreamRequest} streamRequestB - Stream request B for comparison.
101
+ * @returns {boolean} - Whether they are equal.
102
+ */
103
+ // eslint-disable-next-line class-methods-use-this
104
+ }, {
105
+ key: "isEqual",
106
+ value: function isEqual(streamRequestA, streamRequestB) {
107
+ return (0, _stringify.default)(streamRequestA._toJmpStreamRequest()) === (0, _stringify.default)(streamRequestB._toJmpStreamRequest());
108
+ }
109
+
110
+ /**
111
+ * Compares new stream requests to previous ones and determines
112
+ * if they are the same.
113
+ *
114
+ * @param {StreamRequest[]} newRequests - Array with new requests.
115
+ * @returns {boolean} - True if they are equal, false otherwise.
116
+ */
117
+ }, {
118
+ key: "checkIsNewRequestsEqualToPrev",
119
+ value: function checkIsNewRequestsEqualToPrev(newRequests) {
120
+ var _this2 = this;
121
+ return !(0, _lodash.isEmpty)(this.previousStreamRequests) && this.previousStreamRequests.length === newRequests.length && this.previousStreamRequests.every(function (req, idx) {
122
+ return _this2.isEqual(req, newRequests[idx]);
123
+ });
124
+ }
125
+
126
+ /**
127
+ * Returns the maxPayloadBitsPerSecond per Stream
128
+ *
129
+ * If MediaRequestManager kind is "audio", a constant bitrate will be returned.
130
+ * If MediaRequestManager kind is "video", the bitrate will be calculated based
131
+ * on maxFs (default h264 maxFs as fallback if maxFs is not defined)
132
+ *
133
+ * @param {MediaRequest} mediaRequest - mediaRequest to take data from
134
+ * @returns {number} maxPayloadBitsPerSecond
135
+ */
136
+ }, {
137
+ key: "getMaxPayloadBitsPerSecond",
138
+ value: function getMaxPayloadBitsPerSecond(mediaRequest) {
139
+ if (this.kind === 'audio') {
140
+ // return mono_music bitrate default if the kind of mediarequest manager is audio:
141
+ return _internalMediaCore.RecommendedOpusBitrates.FB_MONO_MUSIC;
142
+ }
143
+ return (0, _internalMediaCore.getRecommendedMaxBitrateForFrameSize)(mediaRequest.codecInfo.maxFs || CODEC_DEFAULTS.h264.maxFs);
144
+ }
145
+
146
+ /**
147
+ * Returns the max Macro Blocks per second (maxMbps) per H264 Stream
148
+ *
149
+ * The maxMbps will be calculated based on maxFs and maxFps
150
+ * (default h264 maxFps as fallback if maxFps is not defined)
151
+ *
152
+ * @param {MediaRequest} mediaRequest - mediaRequest to take data from
153
+ * @returns {number} maxMbps
154
+ */
155
+ // eslint-disable-next-line class-methods-use-this
156
+ }, {
157
+ key: "getH264MaxMbps",
158
+ value: function getH264MaxMbps(mediaRequest) {
159
+ // fallback for maxFps (not needed for maxFs, since there is a fallback already in getDegradedClientRequests)
160
+ var maxFps = mediaRequest.codecInfo.maxFps || CODEC_DEFAULTS.h264.maxFps;
161
+
162
+ // divided by 100 since maxFps is 3000 (for 30 frames per seconds)
163
+ return mediaRequest.codecInfo.maxFs * maxFps / 100;
164
+ }
165
+
166
+ /**
167
+ * Clears the previous stream requests.
168
+ *
169
+ * @returns {void}
170
+ */
171
+ }, {
172
+ key: "clearPreviousRequests",
173
+ value: function clearPreviousRequests() {
174
+ this.previousStreamRequests = [];
175
+ }
176
+
177
+ /** Modifies the passed in clientRequests and makes sure that in total they don't ask
178
+ * for more streams than there are available.
179
+ *
180
+ * @param {Object} clientRequests
181
+ * @returns {void}
182
+ */
183
+ }, {
184
+ key: "trimRequests",
185
+ value: function trimRequests(clientRequests) {
186
+ var preferLiveVideo = this.getPreferLiveVideo();
187
+ if (!this.trimRequestsToNumOfSources) {
188
+ return;
189
+ }
190
+
191
+ // preferLiveVideo being undefined means that there are no active-speaker requests so we don't need to do any trimming
192
+ if (preferLiveVideo === undefined) {
193
+ return;
194
+ }
195
+ var numStreamsAvailable = preferLiveVideo ? this.numLiveSources : this.numTotalSources;
196
+ (0, _values.default)(clientRequests).sort(function (a, b) {
197
+ // we have to count how many streams we're asking for
198
+ // and should not ask for more than numStreamsAvailable in total,
199
+ // so we might need to trim active-speaker requests and first ones to trim should be
200
+ // the ones with lowest priority
201
+
202
+ // receiver-selected requests have priority over active-speakers
203
+ if (a.policyInfo.policy === 'receiver-selected') {
204
+ return -1;
205
+ }
206
+ if (b.policyInfo.policy === 'receiver-selected') {
207
+ return 1;
208
+ }
209
+
210
+ // and active-speakers are sorted by descending priority
211
+ return b.policyInfo.priority - a.policyInfo.priority;
212
+ }).forEach(function (request) {
213
+ // we only trim active-speaker requests
214
+ if (request.policyInfo.policy === 'active-speaker') {
215
+ var trimmedCount = Math.min(numStreamsAvailable, request.receiveSlots.length);
216
+ request.receiveSlots.length = trimmedCount;
217
+ numStreamsAvailable -= trimmedCount;
218
+ } else {
219
+ numStreamsAvailable -= request.receiveSlots.length;
220
+ }
221
+ if (numStreamsAvailable < 0) {
222
+ numStreamsAvailable = 0;
223
+ }
224
+ });
225
+ }
226
+ }, {
227
+ key: "getPreferLiveVideo",
228
+ value: function getPreferLiveVideo() {
229
+ var preferLiveVideo;
230
+ (0, _values.default)(this.clientRequests).forEach(function (mr) {
231
+ if (mr.policyInfo.policy === 'active-speaker') {
232
+ // take the value from first encountered active speaker request
233
+ if (preferLiveVideo === undefined) {
234
+ preferLiveVideo = mr.policyInfo.preferLiveVideo;
235
+ }
236
+ if (mr.policyInfo.preferLiveVideo !== preferLiveVideo) {
237
+ throw new Error('a mix of active-speaker groups with different values for preferLiveVideo is not supported');
238
+ }
239
+ }
240
+ });
241
+ return preferLiveVideo;
242
+ }
243
+ }, {
244
+ key: "cloneClientRequests",
245
+ value: function cloneClientRequests() {
246
+ // we clone the client requests but without cloning the ReceiveSlots that they reference
247
+ return (0, _lodash.cloneDeepWith)(this.clientRequests, function (value, key) {
248
+ if (key === 'receiveSlots') {
249
+ return (0, _toConsumableArray2.default)(value);
250
+ }
251
+ return undefined;
252
+ });
253
+ }
254
+ }, {
255
+ key: "sendRequests",
256
+ value: function sendRequests() {
257
+ var _this3 = this;
258
+ var streamRequests = [];
259
+
260
+ // clone the requests so that any modifications we do to them don't affect the original ones
261
+ var clientRequests = this.cloneClientRequests();
262
+ this.trimRequests(clientRequests);
263
+ this.getDegradedClientRequests(clientRequests);
264
+
265
+ // map all the client media requests to wcme stream requests
266
+ (0, _values.default)(clientRequests).forEach(function (mr) {
267
+ if (mr.receiveSlots.length > 0) {
268
+ streamRequests.push(new _internalMediaCore.StreamRequest(mr.policyInfo.policy === 'active-speaker' ? _internalMediaCore.Policy.ActiveSpeaker : _internalMediaCore.Policy.ReceiverSelected, mr.policyInfo.policy === 'active-speaker' ? new _internalMediaCore.ActiveSpeakerInfo(mr.policyInfo.priority, mr.policyInfo.crossPriorityDuplication, mr.policyInfo.crossPolicyDuplication, mr.policyInfo.preferLiveVideo) : new _internalMediaCore.ReceiverSelectedInfo(mr.policyInfo.csi), mr.receiveSlots.map(function (receiveSlot) {
269
+ return receiveSlot.wcmeReceiveSlot;
270
+ }), _this3.getMaxPayloadBitsPerSecond(mr), mr.codecInfo && [new _internalMediaCore.CodecInfo(0x80, new _internalMediaCore.H264Codec(mr.codecInfo.maxFs, mr.codecInfo.maxFps || CODEC_DEFAULTS.h264.maxFps, _this3.getH264MaxMbps(mr), mr.codecInfo.maxWidth, mr.codecInfo.maxHeight))]));
271
+ }
272
+ });
273
+
274
+ //! IMPORTANT: this is only a temporary fix. This will soon be done in the jmp layer (@webex/json-multistream)
275
+ // https://jira-eng-gpk2.cisco.com/jira/browse/WEBEX-326713
276
+ if (!this.checkIsNewRequestsEqualToPrev(streamRequests)) {
277
+ this.sendMediaRequestsCallback(streamRequests);
278
+ this.previousStreamRequests = streamRequests;
279
+ _loggerProxy.default.logger.info("multistream:sendRequests --> media requests sent. ");
280
+ } else {
281
+ _loggerProxy.default.logger.info("multistream:sendRequests --> detected duplicate WCME requests, skipping them... ");
282
+ }
283
+ }
284
+ }, {
285
+ key: "addRequest",
286
+ value: function addRequest(mediaRequest) {
287
+ var _this4 = this;
288
+ var commit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
289
+ // eslint-disable-next-line no-plusplus
290
+ var newId = "".concat(this.counter++);
291
+ this.clientRequests[newId] = mediaRequest;
292
+ var eventHandler = function eventHandler(_ref) {
293
+ var maxFs = _ref.maxFs;
294
+ mediaRequest.preferredMaxFs = maxFs;
295
+ _this4.debouncedSourceUpdateListener();
296
+ };
297
+ mediaRequest.handleMaxFs = eventHandler;
298
+ mediaRequest.receiveSlots.forEach(function (rs) {
299
+ rs.on(_receiveSlot.ReceiveSlotEvents.SourceUpdate, _this4.sourceUpdateListener);
300
+ rs.on(_receiveSlot.ReceiveSlotEvents.MaxFsUpdate, mediaRequest.handleMaxFs);
301
+ });
302
+ if (commit) {
303
+ this.commit();
304
+ }
305
+ return newId;
306
+ }
307
+ }, {
308
+ key: "cancelRequest",
309
+ value: function cancelRequest(requestId) {
310
+ var _this5 = this;
311
+ var commit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
312
+ var mediaRequest = this.clientRequests[requestId];
313
+ mediaRequest === null || mediaRequest === void 0 ? void 0 : mediaRequest.receiveSlots.forEach(function (rs) {
314
+ rs.off(_receiveSlot.ReceiveSlotEvents.SourceUpdate, _this5.sourceUpdateListener);
315
+ rs.off(_receiveSlot.ReceiveSlotEvents.MaxFsUpdate, mediaRequest.handleMaxFs);
316
+ });
317
+ delete this.clientRequests[requestId];
318
+ if (commit) {
319
+ this.commit();
320
+ }
321
+ }
322
+ }, {
323
+ key: "commit",
324
+ value: function commit() {
325
+ return this.sendRequests();
326
+ }
327
+ }, {
328
+ key: "reset",
329
+ value: function reset() {
330
+ this.clientRequests = {};
331
+ this.numTotalSources = 0;
332
+ this.numLiveSources = 0;
333
+ }
334
+ }, {
335
+ key: "setNumCurrentSources",
336
+ value: function setNumCurrentSources(numTotalSources, numLiveSources) {
337
+ this.numTotalSources = numTotalSources;
338
+ this.numLiveSources = numLiveSources;
339
+ this.sendRequests();
340
+ }
341
+ }]);
342
+ return MediaRequestManager;
343
+ }();
344
+ //# sourceMappingURL=mediaRequestManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_internalMediaCore","require","_lodash","_loggerProxy","_interopRequireDefault","_receiveSlot","_remoteMedia","CODEC_DEFAULTS","h264","maxFs","maxFps","maxMbps","DEBOUNCED_SOURCE_UPDATE_TIME","MediaRequestManager","exports","sendMediaRequestsCallback","options","_classCallCheck2","default","_defineProperty2","counter","numLiveSources","numTotalSources","clientRequests","degradationPreferences","kind","trimRequestsToNumOfSources","sourceUpdateListener","commit","bind","debouncedSourceUpdateListener","debounce","_createClass2","key","value","setDegradationPreferences","sendRequests","getDegradedClientRequests","_this","maxFsLimits","getMaxFs","_loop","i","totalMacroblocksRequested","_values","forEach","mr","codecInfo","Math","min","preferredMaxFs","slotsWithLiveSource","receiveSlots","filter","rs","sourceState","length","maxMacroblocksLimit","LoggerProxy","logger","warn","concat","isEqual","streamRequestA","streamRequestB","_stringify","_toJmpStreamRequest","checkIsNewRequestsEqualToPrev","newRequests","_this2","isEmpty","previousStreamRequests","every","req","idx","getMaxPayloadBitsPerSecond","mediaRequest","RecommendedOpusBitrates","FB_MONO_MUSIC","getRecommendedMaxBitrateForFrameSize","getH264MaxMbps","clearPreviousRequests","trimRequests","preferLiveVideo","getPreferLiveVideo","undefined","numStreamsAvailable","sort","a","b","policyInfo","policy","priority","request","trimmedCount","Error","cloneClientRequests","cloneDeepWith","_toConsumableArray2","_this3","streamRequests","push","StreamRequest","Policy","ActiveSpeaker","ReceiverSelected","ActiveSpeakerInfo","crossPriorityDuplication","crossPolicyDuplication","ReceiverSelectedInfo","csi","map","receiveSlot","wcmeReceiveSlot","WcmeCodecInfo","H264Codec","maxWidth","maxHeight","info","addRequest","_this4","arguments","newId","eventHandler","_ref","handleMaxFs","on","ReceiveSlotEvents","SourceUpdate","MaxFsUpdate","cancelRequest","requestId","_this5","off","reset","setNumCurrentSources"],"sources":["mediaRequestManager.ts"],"sourcesContent":["/* eslint-disable require-jsdoc */\nimport {\n StreamRequest,\n Policy,\n ActiveSpeakerInfo,\n ReceiverSelectedInfo,\n CodecInfo as WcmeCodecInfo,\n H264Codec,\n getRecommendedMaxBitrateForFrameSize,\n RecommendedOpusBitrates,\n} from '@webex/internal-media-core';\nimport {cloneDeepWith, debounce, isEmpty} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {ReceiveSlot, ReceiveSlotEvents} from './receiveSlot';\nimport {getMaxFs} from './remoteMedia';\n\nexport interface ActiveSpeakerPolicyInfo {\n policy: 'active-speaker';\n priority: number;\n crossPriorityDuplication: boolean;\n crossPolicyDuplication: boolean;\n preferLiveVideo: boolean;\n}\n\nexport interface ReceiverSelectedPolicyInfo {\n policy: 'receiver-selected';\n csi: number;\n}\n\nexport type PolicyInfo = ActiveSpeakerPolicyInfo | ReceiverSelectedPolicyInfo;\n\nexport interface H264CodecInfo {\n codec: 'h264';\n maxFs?: number;\n maxFps?: number;\n maxMbps?: number;\n maxWidth?: number;\n maxHeight?: number;\n}\n\nexport type CodecInfo = H264CodecInfo; // we'll add AV1 here in the future when it's available\n\nexport interface MediaRequest {\n policyInfo: PolicyInfo;\n receiveSlots: Array<ReceiveSlot>;\n codecInfo?: CodecInfo;\n preferredMaxFs?: number;\n handleMaxFs?: ({maxFs}: {maxFs: number}) => void;\n}\n\nexport type MediaRequestId = string;\n\nconst CODEC_DEFAULTS = {\n h264: {\n maxFs: 8192,\n maxFps: 3000,\n maxMbps: 245760,\n },\n};\n\nconst DEBOUNCED_SOURCE_UPDATE_TIME = 1000;\n\ntype DegradationPreferences = {\n maxMacroblocksLimit: number;\n};\n\ntype SendMediaRequestsCallback = (streamRequests: StreamRequest[]) => void;\ntype Kind = 'audio' | 'video';\n\ntype Options = {\n degradationPreferences: DegradationPreferences;\n kind: Kind;\n trimRequestsToNumOfSources: boolean; // if enabled, AS speaker requests will be trimmed based on the calls to setNumCurrentSources()\n};\n\ntype ClientRequestsMap = {[key: MediaRequestId]: MediaRequest};\n\nexport class MediaRequestManager {\n private sendMediaRequestsCallback: SendMediaRequestsCallback;\n\n private kind: Kind;\n\n private counter: number;\n\n private clientRequests: ClientRequestsMap;\n\n private degradationPreferences: DegradationPreferences;\n\n private sourceUpdateListener: () => void;\n\n private debouncedSourceUpdateListener: () => void;\n\n private previousStreamRequests: Array<StreamRequest> = [];\n\n private trimRequestsToNumOfSources: boolean;\n private numTotalSources: number;\n private numLiveSources: number;\n\n constructor(sendMediaRequestsCallback: SendMediaRequestsCallback, options: Options) {\n this.sendMediaRequestsCallback = sendMediaRequestsCallback;\n this.counter = 0;\n this.numLiveSources = 0;\n this.numTotalSources = 0;\n this.clientRequests = {};\n this.degradationPreferences = options.degradationPreferences;\n this.kind = options.kind;\n this.trimRequestsToNumOfSources = options.trimRequestsToNumOfSources;\n this.sourceUpdateListener = this.commit.bind(this);\n this.debouncedSourceUpdateListener = debounce(\n this.sourceUpdateListener,\n DEBOUNCED_SOURCE_UPDATE_TIME\n );\n }\n\n public setDegradationPreferences(degradationPreferences: DegradationPreferences) {\n this.degradationPreferences = degradationPreferences;\n this.sendRequests(); // re-send requests after preferences are set\n }\n\n private getDegradedClientRequests(clientRequests: ClientRequestsMap) {\n const maxFsLimits = [\n getMaxFs('best'),\n getMaxFs('large'),\n getMaxFs('medium'),\n getMaxFs('small'),\n getMaxFs('very small'),\n getMaxFs('thumbnail'),\n ];\n\n // reduce max-fs until total macroblocks is below limit\n for (let i = 0; i < maxFsLimits.length; i += 1) {\n let totalMacroblocksRequested = 0;\n Object.values(clientRequests).forEach((mr) => {\n if (mr.codecInfo) {\n mr.codecInfo.maxFs = Math.min(\n mr.preferredMaxFs || CODEC_DEFAULTS.h264.maxFs,\n mr.codecInfo.maxFs || CODEC_DEFAULTS.h264.maxFs,\n maxFsLimits[i]\n );\n // we only consider sources with \"live\" state\n const slotsWithLiveSource = mr.receiveSlots.filter((rs) => rs.sourceState === 'live');\n totalMacroblocksRequested += mr.codecInfo.maxFs * slotsWithLiveSource.length;\n }\n });\n if (totalMacroblocksRequested <= this.degradationPreferences.maxMacroblocksLimit) {\n if (i !== 0) {\n LoggerProxy.logger.warn(\n `multistream:mediaRequestManager --> too many streams with high max-fs, frame size will be limited to ${maxFsLimits[i]}`\n );\n }\n break;\n } else if (i === maxFsLimits.length - 1) {\n LoggerProxy.logger.warn(\n `multistream:mediaRequestManager --> even with frame size limited to ${maxFsLimits[i]} you are still requesting too many streams, consider reducing the number of requests`\n );\n }\n }\n }\n\n /**\n * Returns true if two stream requests are the same, false otherwise.\n *\n * @param {StreamRequest} streamRequestA - Stream request A for comparison.\n * @param {StreamRequest} streamRequestB - Stream request B for comparison.\n * @returns {boolean} - Whether they are equal.\n */\n // eslint-disable-next-line class-methods-use-this\n public isEqual(streamRequestA: StreamRequest, streamRequestB: StreamRequest) {\n return (\n JSON.stringify(streamRequestA._toJmpStreamRequest()) ===\n JSON.stringify(streamRequestB._toJmpStreamRequest())\n );\n }\n\n /**\n * Compares new stream requests to previous ones and determines\n * if they are the same.\n *\n * @param {StreamRequest[]} newRequests - Array with new requests.\n * @returns {boolean} - True if they are equal, false otherwise.\n */\n private checkIsNewRequestsEqualToPrev(newRequests: StreamRequest[]) {\n return (\n !isEmpty(this.previousStreamRequests) &&\n this.previousStreamRequests.length === newRequests.length &&\n this.previousStreamRequests.every((req, idx) => this.isEqual(req, newRequests[idx]))\n );\n }\n\n /**\n * Returns the maxPayloadBitsPerSecond per Stream\n *\n * If MediaRequestManager kind is \"audio\", a constant bitrate will be returned.\n * If MediaRequestManager kind is \"video\", the bitrate will be calculated based\n * on maxFs (default h264 maxFs as fallback if maxFs is not defined)\n *\n * @param {MediaRequest} mediaRequest - mediaRequest to take data from\n * @returns {number} maxPayloadBitsPerSecond\n */\n private getMaxPayloadBitsPerSecond(mediaRequest: MediaRequest): number {\n if (this.kind === 'audio') {\n // return mono_music bitrate default if the kind of mediarequest manager is audio:\n return RecommendedOpusBitrates.FB_MONO_MUSIC;\n }\n\n return getRecommendedMaxBitrateForFrameSize(\n mediaRequest.codecInfo.maxFs || CODEC_DEFAULTS.h264.maxFs\n );\n }\n\n /**\n * Returns the max Macro Blocks per second (maxMbps) per H264 Stream\n *\n * The maxMbps will be calculated based on maxFs and maxFps\n * (default h264 maxFps as fallback if maxFps is not defined)\n *\n * @param {MediaRequest} mediaRequest - mediaRequest to take data from\n * @returns {number} maxMbps\n */\n // eslint-disable-next-line class-methods-use-this\n private getH264MaxMbps(mediaRequest: MediaRequest): number {\n // fallback for maxFps (not needed for maxFs, since there is a fallback already in getDegradedClientRequests)\n const maxFps = mediaRequest.codecInfo.maxFps || CODEC_DEFAULTS.h264.maxFps;\n\n // divided by 100 since maxFps is 3000 (for 30 frames per seconds)\n return (mediaRequest.codecInfo.maxFs * maxFps) / 100;\n }\n\n /**\n * Clears the previous stream requests.\n *\n * @returns {void}\n */\n public clearPreviousRequests(): void {\n this.previousStreamRequests = [];\n }\n\n /** Modifies the passed in clientRequests and makes sure that in total they don't ask\n * for more streams than there are available.\n *\n * @param {Object} clientRequests\n * @returns {void}\n */\n private trimRequests(clientRequests: ClientRequestsMap) {\n const preferLiveVideo = this.getPreferLiveVideo();\n\n if (!this.trimRequestsToNumOfSources) {\n return;\n }\n\n // preferLiveVideo being undefined means that there are no active-speaker requests so we don't need to do any trimming\n if (preferLiveVideo === undefined) {\n return;\n }\n\n let numStreamsAvailable = preferLiveVideo ? this.numLiveSources : this.numTotalSources;\n\n Object.values(clientRequests)\n .sort((a, b) => {\n // we have to count how many streams we're asking for\n // and should not ask for more than numStreamsAvailable in total,\n // so we might need to trim active-speaker requests and first ones to trim should be\n // the ones with lowest priority\n\n // receiver-selected requests have priority over active-speakers\n if (a.policyInfo.policy === 'receiver-selected') {\n return -1;\n }\n if (b.policyInfo.policy === 'receiver-selected') {\n return 1;\n }\n\n // and active-speakers are sorted by descending priority\n return b.policyInfo.priority - a.policyInfo.priority;\n })\n .forEach((request) => {\n // we only trim active-speaker requests\n if (request.policyInfo.policy === 'active-speaker') {\n const trimmedCount = Math.min(numStreamsAvailable, request.receiveSlots.length);\n\n request.receiveSlots.length = trimmedCount;\n\n numStreamsAvailable -= trimmedCount;\n } else {\n numStreamsAvailable -= request.receiveSlots.length;\n }\n\n if (numStreamsAvailable < 0) {\n numStreamsAvailable = 0;\n }\n });\n }\n\n private getPreferLiveVideo(): boolean | undefined {\n let preferLiveVideo;\n\n Object.values(this.clientRequests).forEach((mr) => {\n if (mr.policyInfo.policy === 'active-speaker') {\n // take the value from first encountered active speaker request\n if (preferLiveVideo === undefined) {\n preferLiveVideo = mr.policyInfo.preferLiveVideo;\n }\n\n if (mr.policyInfo.preferLiveVideo !== preferLiveVideo) {\n throw new Error(\n 'a mix of active-speaker groups with different values for preferLiveVideo is not supported'\n );\n }\n }\n });\n\n return preferLiveVideo;\n }\n\n private cloneClientRequests(): ClientRequestsMap {\n // we clone the client requests but without cloning the ReceiveSlots that they reference\n return cloneDeepWith(this.clientRequests, (value, key) => {\n if (key === 'receiveSlots') {\n return [...value];\n }\n\n return undefined;\n });\n }\n\n private sendRequests() {\n const streamRequests: StreamRequest[] = [];\n\n // clone the requests so that any modifications we do to them don't affect the original ones\n const clientRequests = this.cloneClientRequests();\n\n this.trimRequests(clientRequests);\n this.getDegradedClientRequests(clientRequests);\n\n // map all the client media requests to wcme stream requests\n Object.values(clientRequests).forEach((mr) => {\n if (mr.receiveSlots.length > 0) {\n streamRequests.push(\n new StreamRequest(\n mr.policyInfo.policy === 'active-speaker'\n ? Policy.ActiveSpeaker\n : Policy.ReceiverSelected,\n mr.policyInfo.policy === 'active-speaker'\n ? new ActiveSpeakerInfo(\n mr.policyInfo.priority,\n mr.policyInfo.crossPriorityDuplication,\n mr.policyInfo.crossPolicyDuplication,\n mr.policyInfo.preferLiveVideo\n )\n : new ReceiverSelectedInfo(mr.policyInfo.csi),\n mr.receiveSlots.map((receiveSlot) => receiveSlot.wcmeReceiveSlot),\n this.getMaxPayloadBitsPerSecond(mr),\n mr.codecInfo && [\n new WcmeCodecInfo(\n 0x80,\n new H264Codec(\n mr.codecInfo.maxFs,\n mr.codecInfo.maxFps || CODEC_DEFAULTS.h264.maxFps,\n this.getH264MaxMbps(mr),\n mr.codecInfo.maxWidth,\n mr.codecInfo.maxHeight\n )\n ),\n ]\n )\n );\n }\n });\n\n //! IMPORTANT: this is only a temporary fix. This will soon be done in the jmp layer (@webex/json-multistream)\n // https://jira-eng-gpk2.cisco.com/jira/browse/WEBEX-326713\n if (!this.checkIsNewRequestsEqualToPrev(streamRequests)) {\n this.sendMediaRequestsCallback(streamRequests);\n this.previousStreamRequests = streamRequests;\n LoggerProxy.logger.info(`multistream:sendRequests --> media requests sent. `);\n } else {\n LoggerProxy.logger.info(\n `multistream:sendRequests --> detected duplicate WCME requests, skipping them... `\n );\n }\n }\n\n public addRequest(mediaRequest: MediaRequest, commit = true): MediaRequestId {\n // eslint-disable-next-line no-plusplus\n const newId = `${this.counter++}`;\n\n this.clientRequests[newId] = mediaRequest;\n\n const eventHandler = ({maxFs}) => {\n mediaRequest.preferredMaxFs = maxFs;\n this.debouncedSourceUpdateListener();\n };\n mediaRequest.handleMaxFs = eventHandler;\n\n mediaRequest.receiveSlots.forEach((rs) => {\n rs.on(ReceiveSlotEvents.SourceUpdate, this.sourceUpdateListener);\n rs.on(ReceiveSlotEvents.MaxFsUpdate, mediaRequest.handleMaxFs);\n });\n\n if (commit) {\n this.commit();\n }\n\n return newId;\n }\n\n public cancelRequest(requestId: MediaRequestId, commit = true) {\n const mediaRequest = this.clientRequests[requestId];\n\n mediaRequest?.receiveSlots.forEach((rs) => {\n rs.off(ReceiveSlotEvents.SourceUpdate, this.sourceUpdateListener);\n rs.off(ReceiveSlotEvents.MaxFsUpdate, mediaRequest.handleMaxFs);\n });\n\n delete this.clientRequests[requestId];\n\n if (commit) {\n this.commit();\n }\n }\n\n public commit() {\n return this.sendRequests();\n }\n\n public reset() {\n this.clientRequests = {};\n this.numTotalSources = 0;\n this.numLiveSources = 0;\n }\n\n public setNumCurrentSources(numTotalSources: number, numLiveSources: number) {\n this.numTotalSources = numTotalSources;\n this.numLiveSources = numLiveSources;\n\n this.sendRequests();\n }\n}\n"],"mappings":"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"}