@webex/plugin-meetings 3.0.0-beta.21 → 3.0.0-beta.211

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 (422) hide show
  1. package/README.md +45 -7
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +3 -2
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/queue.js +24 -9
  25. package/dist/common/queue.js.map +1 -1
  26. package/dist/config.js +3 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +179 -30
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +319 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +106 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +366 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +359 -64
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +43 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +219 -63
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +48 -135
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +29 -90
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/mediaQualityMetrics/config.js +505 -493
  65. package/dist/mediaQualityMetrics/config.js.map +1 -1
  66. package/dist/meeting/in-meeting-actions.js +90 -2
  67. package/dist/meeting/in-meeting-actions.js.map +1 -1
  68. package/dist/meeting/index.js +2770 -2547
  69. package/dist/meeting/index.js.map +1 -1
  70. package/dist/meeting/locusMediaRequest.js +291 -0
  71. package/dist/meeting/locusMediaRequest.js.map +1 -0
  72. package/dist/meeting/muteState.js +229 -124
  73. package/dist/meeting/muteState.js.map +1 -1
  74. package/dist/meeting/request.js +199 -193
  75. package/dist/meeting/request.js.map +1 -1
  76. package/dist/meeting/util.js +532 -414
  77. package/dist/meeting/util.js.map +1 -1
  78. package/dist/meeting-info/index.js +48 -7
  79. package/dist/meeting-info/index.js.map +1 -1
  80. package/dist/meeting-info/meeting-info-v2.js +171 -51
  81. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +20 -5
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +357 -66
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +88 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -5
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +3 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +49 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +52 -34
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +173 -59
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/networkQualityMonitor/index.js +4 -2
  127. package/dist/networkQualityMonitor/index.js.map +1 -1
  128. package/dist/reachability/index.js +72 -27
  129. package/dist/reachability/index.js.map +1 -1
  130. package/dist/reachability/request.js +12 -5
  131. package/dist/reachability/request.js.map +1 -1
  132. package/dist/reconnection-manager/index.js +196 -155
  133. package/dist/reconnection-manager/index.js.map +1 -1
  134. package/dist/recording-controller/index.js +21 -2
  135. package/dist/recording-controller/index.js.map +1 -1
  136. package/dist/recording-controller/util.js +9 -8
  137. package/dist/recording-controller/util.js.map +1 -1
  138. package/dist/roap/index.js +21 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +110 -89
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +93 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/rtcMetrics/constants.js +12 -0
  145. package/dist/rtcMetrics/constants.js.map +1 -0
  146. package/dist/rtcMetrics/index.js +117 -0
  147. package/dist/rtcMetrics/index.js.map +1 -0
  148. package/dist/statsAnalyzer/global.js +1 -93
  149. package/dist/statsAnalyzer/global.js.map +1 -1
  150. package/dist/statsAnalyzer/index.js +326 -311
  151. package/dist/statsAnalyzer/index.js.map +1 -1
  152. package/dist/statsAnalyzer/mqaUtil.js +90 -53
  153. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  154. package/dist/types/annotation/annotation.types.d.ts +42 -0
  155. package/dist/types/annotation/constants.d.ts +31 -0
  156. package/dist/types/annotation/index.d.ts +117 -0
  157. package/dist/types/breakouts/breakout.d.ts +8 -0
  158. package/dist/types/breakouts/collection.d.ts +5 -0
  159. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  160. package/dist/types/breakouts/events.d.ts +8 -0
  161. package/dist/types/breakouts/index.d.ts +5 -0
  162. package/dist/types/breakouts/request.d.ts +22 -0
  163. package/dist/types/breakouts/utils.d.ts +15 -0
  164. package/dist/types/common/browser-detection.d.ts +9 -0
  165. package/dist/types/common/collection.d.ts +48 -0
  166. package/dist/types/common/config.d.ts +2 -0
  167. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  168. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  169. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  170. package/dist/types/common/errors/media.d.ts +15 -0
  171. package/dist/types/common/errors/parameter.d.ts +15 -0
  172. package/dist/types/common/errors/password-error.d.ts +15 -0
  173. package/dist/types/common/errors/permission.d.ts +14 -0
  174. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  175. package/dist/types/common/errors/reconnection.d.ts +15 -0
  176. package/dist/types/common/errors/stats.d.ts +15 -0
  177. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  178. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  179. package/dist/types/common/events/events-scope.d.ts +17 -0
  180. package/dist/types/common/events/events.d.ts +12 -0
  181. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  182. package/dist/types/common/events/util.d.ts +2 -0
  183. package/dist/types/common/logs/logger-config.d.ts +2 -0
  184. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  185. package/dist/types/common/logs/request.d.ts +34 -0
  186. package/dist/types/common/queue.d.ts +34 -0
  187. package/dist/types/config.d.ts +72 -0
  188. package/dist/types/constants.d.ts +1020 -0
  189. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  190. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  191. package/dist/types/controls-options-manager/index.d.ts +136 -0
  192. package/dist/types/controls-options-manager/types.d.ts +43 -0
  193. package/dist/types/controls-options-manager/util.d.ts +1 -0
  194. package/dist/types/index.d.ts +7 -0
  195. package/dist/types/interpretation/collection.d.ts +5 -0
  196. package/dist/types/interpretation/index.d.ts +5 -0
  197. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  198. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  199. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  200. package/dist/types/locus-info/fullState.d.ts +2 -0
  201. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  202. package/dist/types/locus-info/index.d.ts +322 -0
  203. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  204. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  205. package/dist/types/locus-info/parser.d.ts +271 -0
  206. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  207. package/dist/types/media/index.d.ts +34 -0
  208. package/dist/types/media/properties.d.ts +93 -0
  209. package/dist/types/media/util.d.ts +2 -0
  210. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  211. package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
  212. package/dist/types/meeting/index.d.ts +1482 -0
  213. package/dist/types/meeting/locusMediaRequest.d.ts +72 -0
  214. package/dist/types/meeting/muteState.d.ts +184 -0
  215. package/dist/types/meeting/request.d.ts +257 -0
  216. package/dist/types/meeting/request.type.d.ts +11 -0
  217. package/dist/types/meeting/state.d.ts +9 -0
  218. package/dist/types/meeting/util.d.ts +79 -0
  219. package/dist/types/meeting-info/collection.d.ts +20 -0
  220. package/dist/types/meeting-info/index.d.ts +62 -0
  221. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  222. package/dist/types/meeting-info/request.d.ts +22 -0
  223. package/dist/types/meeting-info/util.d.ts +2 -0
  224. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  225. package/dist/types/meetings/collection.d.ts +31 -0
  226. package/dist/types/meetings/index.d.ts +367 -0
  227. package/dist/types/meetings/meetings.types.d.ts +4 -0
  228. package/dist/types/meetings/request.d.ts +27 -0
  229. package/dist/types/meetings/util.d.ts +18 -0
  230. package/dist/types/member/index.d.ts +159 -0
  231. package/dist/types/member/types.d.ts +32 -0
  232. package/dist/types/member/util.d.ts +2 -0
  233. package/dist/types/members/collection.d.ts +29 -0
  234. package/dist/types/members/index.d.ts +353 -0
  235. package/dist/types/members/request.d.ts +114 -0
  236. package/dist/types/members/types.d.ts +24 -0
  237. package/dist/types/members/util.d.ts +210 -0
  238. package/dist/types/metrics/constants.d.ts +55 -0
  239. package/dist/types/metrics/index.d.ts +45 -0
  240. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  241. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  242. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  243. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  244. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  245. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  246. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  247. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  248. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  249. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  250. package/dist/types/reachability/index.d.ts +152 -0
  251. package/dist/types/reachability/request.d.ts +37 -0
  252. package/dist/types/reactions/constants.d.ts +3 -0
  253. package/dist/types/reactions/reactions.d.ts +4 -0
  254. package/dist/types/reactions/reactions.type.d.ts +52 -0
  255. package/dist/types/reconnection-manager/index.d.ts +126 -0
  256. package/dist/types/recording-controller/enums.d.ts +7 -0
  257. package/dist/types/recording-controller/index.d.ts +207 -0
  258. package/dist/types/recording-controller/util.d.ts +14 -0
  259. package/dist/types/roap/index.d.ts +77 -0
  260. package/dist/types/roap/request.d.ts +36 -0
  261. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  262. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  263. package/dist/types/rtcMetrics/index.d.ts +46 -0
  264. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  265. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  266. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  267. package/dist/types/transcription/index.d.ts +64 -0
  268. package/package.json +23 -20
  269. package/src/annotation/annotation.types.ts +50 -0
  270. package/src/annotation/constants.ts +36 -0
  271. package/src/annotation/index.ts +328 -0
  272. package/src/breakouts/README.md +44 -14
  273. package/src/breakouts/breakout.ts +87 -9
  274. package/src/breakouts/edit-lock-error.ts +25 -0
  275. package/src/breakouts/events.ts +56 -0
  276. package/src/breakouts/index.ts +710 -10
  277. package/src/breakouts/request.ts +55 -0
  278. package/src/breakouts/utils.ts +57 -0
  279. package/src/common/errors/webex-errors.ts +6 -2
  280. package/src/common/logs/logger-proxy.ts +1 -1
  281. package/src/common/queue.ts +22 -8
  282. package/src/config.ts +2 -7
  283. package/src/constants.ts +165 -21
  284. package/src/controls-options-manager/constants.ts +5 -0
  285. package/src/controls-options-manager/enums.ts +18 -0
  286. package/src/controls-options-manager/index.ts +278 -0
  287. package/src/controls-options-manager/types.ts +59 -0
  288. package/src/controls-options-manager/util.ts +300 -0
  289. package/src/index.ts +39 -0
  290. package/src/interpretation/README.md +60 -0
  291. package/src/interpretation/collection.ts +19 -0
  292. package/src/interpretation/index.ts +332 -0
  293. package/src/interpretation/siLanguage.ts +18 -0
  294. package/src/locus-info/controlsUtils.ts +108 -0
  295. package/src/locus-info/index.ts +383 -61
  296. package/src/locus-info/infoUtils.ts +10 -2
  297. package/src/locus-info/mediaSharesUtils.ts +48 -0
  298. package/src/locus-info/parser.ts +224 -39
  299. package/src/locus-info/selfUtils.ts +81 -5
  300. package/src/media/index.ts +87 -140
  301. package/src/media/properties.ts +49 -90
  302. package/src/mediaQualityMetrics/config.ts +379 -377
  303. package/src/meeting/in-meeting-actions.ts +179 -3
  304. package/src/meeting/index.ts +2099 -2083
  305. package/src/meeting/locusMediaRequest.ts +311 -0
  306. package/src/meeting/muteState.ts +228 -132
  307. package/src/meeting/request.ts +105 -115
  308. package/src/meeting/util.ts +511 -397
  309. package/src/meeting-info/index.ts +54 -8
  310. package/src/meeting-info/meeting-info-v2.ts +148 -14
  311. package/src/meeting-info/utilv2.ts +13 -3
  312. package/src/meetings/collection.ts +20 -0
  313. package/src/meetings/index.ts +392 -84
  314. package/src/meetings/meetings.types.ts +12 -0
  315. package/src/meetings/request.ts +2 -0
  316. package/src/meetings/util.ts +103 -4
  317. package/src/member/index.ts +49 -0
  318. package/src/member/types.ts +38 -0
  319. package/src/member/util.ts +127 -25
  320. package/src/members/collection.ts +8 -0
  321. package/src/members/index.ts +107 -6
  322. package/src/members/request.ts +97 -17
  323. package/src/members/types.ts +28 -0
  324. package/src/members/util.ts +319 -240
  325. package/src/metrics/constants.ts +2 -4
  326. package/src/metrics/index.ts +1 -490
  327. package/src/multistream/mediaRequestManager.ts +289 -79
  328. package/src/multistream/receiveSlot.ts +55 -18
  329. package/src/multistream/receiveSlotManager.ts +46 -24
  330. package/src/multistream/remoteMedia.ts +27 -2
  331. package/src/multistream/remoteMediaGroup.ts +59 -0
  332. package/src/multistream/remoteMediaManager.ts +113 -32
  333. package/src/networkQualityMonitor/index.ts +6 -6
  334. package/src/reachability/index.ts +62 -15
  335. package/src/reachability/request.ts +10 -5
  336. package/src/reconnection-manager/index.ts +68 -43
  337. package/src/recording-controller/index.ts +20 -3
  338. package/src/recording-controller/util.ts +26 -9
  339. package/src/roap/index.ts +21 -30
  340. package/src/roap/request.ts +101 -95
  341. package/src/roap/turnDiscovery.ts +47 -25
  342. package/src/rtcMetrics/constants.ts +3 -0
  343. package/src/rtcMetrics/index.ts +100 -0
  344. package/src/statsAnalyzer/global.ts +1 -94
  345. package/src/statsAnalyzer/index.ts +376 -386
  346. package/src/statsAnalyzer/mqaUtil.ts +100 -99
  347. package/test/integration/spec/converged-space-meetings.js +233 -0
  348. package/test/integration/spec/journey.js +336 -259
  349. package/test/integration/spec/space-meeting.js +77 -4
  350. package/test/unit/spec/annotation/index.ts +418 -0
  351. package/test/unit/spec/breakouts/breakout.ts +142 -24
  352. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  353. package/test/unit/spec/breakouts/events.ts +89 -0
  354. package/test/unit/spec/breakouts/index.ts +1545 -48
  355. package/test/unit/spec/breakouts/request.ts +104 -0
  356. package/test/unit/spec/breakouts/utils.js +72 -0
  357. package/test/unit/spec/common/queue.js +31 -2
  358. package/test/unit/spec/controls-options-manager/index.js +287 -0
  359. package/test/unit/spec/controls-options-manager/util.js +582 -0
  360. package/test/unit/spec/fixture/locus.js +1 -0
  361. package/test/unit/spec/interpretation/collection.ts +15 -0
  362. package/test/unit/spec/interpretation/index.ts +589 -0
  363. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  364. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  365. package/test/unit/spec/locus-info/index.js +1169 -36
  366. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  367. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  368. package/test/unit/spec/locus-info/parser.js +62 -22
  369. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  370. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  371. package/test/unit/spec/media/index.ts +138 -28
  372. package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
  373. package/test/unit/spec/meeting/index.js +3573 -1663
  374. package/test/unit/spec/meeting/locusMediaRequest.ts +438 -0
  375. package/test/unit/spec/meeting/muteState.js +370 -208
  376. package/test/unit/spec/meeting/request.js +339 -44
  377. package/test/unit/spec/meeting/utils.js +456 -53
  378. package/test/unit/spec/meeting-info/index.js +181 -0
  379. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  380. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  381. package/test/unit/spec/meetings/collection.js +14 -0
  382. package/test/unit/spec/meetings/index.js +867 -125
  383. package/test/unit/spec/meetings/utils.js +206 -2
  384. package/test/unit/spec/member/index.js +58 -4
  385. package/test/unit/spec/member/util.js +479 -35
  386. package/test/unit/spec/members/index.js +319 -1
  387. package/test/unit/spec/members/request.js +206 -27
  388. package/test/unit/spec/members/utils.js +184 -0
  389. package/test/unit/spec/metrics/index.js +1 -50
  390. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  391. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  392. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  393. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  394. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  395. package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
  396. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  397. package/test/unit/spec/reachability/index.ts +125 -8
  398. package/test/unit/spec/reachability/request.js +66 -0
  399. package/test/unit/spec/reconnection-manager/index.js +59 -6
  400. package/test/unit/spec/recording-controller/index.js +294 -218
  401. package/test/unit/spec/recording-controller/util.js +223 -96
  402. package/test/unit/spec/roap/index.ts +26 -51
  403. package/test/unit/spec/roap/request.ts +196 -85
  404. package/test/unit/spec/roap/turnDiscovery.ts +30 -7
  405. package/test/unit/spec/rtcMetrics/index.ts +60 -0
  406. package/test/unit/spec/stats-analyzer/index.js +92 -41
  407. package/test/utils/constants.js +9 -0
  408. package/test/utils/integrationTestUtils.js +46 -0
  409. package/test/utils/testUtils.js +0 -45
  410. package/test/utils/webex-config.js +4 -0
  411. package/test/utils/webex-test-users.js +6 -3
  412. package/dist/meeting/effectsState.js +0 -262
  413. package/dist/meeting/effectsState.js.map +0 -1
  414. package/dist/metrics/config.js +0 -299
  415. package/dist/metrics/config.js.map +0 -1
  416. package/dist/multistream/multistreamMedia.js +0 -110
  417. package/dist/multistream/multistreamMedia.js.map +0 -1
  418. package/src/index.js +0 -16
  419. package/src/meeting/effectsState.ts +0 -211
  420. package/src/metrics/config.ts +0 -495
  421. package/src/multistream/multistreamMedia.ts +0 -97
  422. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -1,75 +1,6 @@
1
1
  /*!
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
- import util from 'util';
5
-
6
- import {includes} from 'lodash';
7
- import uuid from 'uuid';
8
- import window from 'global/window';
9
- import anonymize from 'ip-anonymize';
10
-
11
- import LoggerProxy from '../common/logs/logger-proxy';
12
- import {MEETING_ERRORS} from '../constants';
13
- import BrowserDetection from '../common/browser-detection';
14
-
15
- import {
16
- error,
17
- eventType,
18
- errorCodes as ERROR_CODE,
19
- OS_NAME,
20
- UNKNOWN,
21
- CLIENT_NAME,
22
- mediaType,
23
- } from './config';
24
-
25
- const OSMap = {
26
- // @ts-ignore
27
- 'Chrome OS': OS_NAME.chrome,
28
- macOS: OS_NAME.MAC,
29
- Windows: OS_NAME.WINDOWS,
30
- iOS: OS_NAME.IOS,
31
- Android: OS_NAME.ANDROID,
32
- Linux: OS_NAME.LINUX,
33
- };
34
-
35
- const {getOSName, getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();
36
-
37
- // Apply a CIDR /28 format to the IPV4 and /96 to the IPV6 addresses
38
- // For reference : https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing
39
- const anonymizeIPAddress = (localIp) => anonymize(localIp, 28, 96);
40
-
41
- const triggerTimers = ({event, meeting, data}) => {
42
- switch (event) {
43
- case eventType.CALL_INITIATED:
44
- meeting.setStartCallInitiateJoinReq();
45
- break;
46
- case eventType.LOCUS_JOIN_REQUEST:
47
- meeting.setEndCallInitiateJoinReq();
48
- meeting.setStartJoinReqResp();
49
- break;
50
- case eventType.LOCUS_JOIN_RESPONSE:
51
- meeting.setEndJoinReqResp();
52
- meeting.setStartSetupDelay(mediaType.AUDIO);
53
- meeting.setStartSetupDelay(mediaType.VIDEO);
54
- meeting.setStartSendingMediaDelay(mediaType.AUDIO);
55
- meeting.setStartSendingMediaDelay(mediaType.VIDEO);
56
- break;
57
- case eventType.RECEIVING_MEDIA_START:
58
- meeting.setEndSetupDelay(data.mediaType);
59
- break;
60
- case eventType.SENDING_MEDIA_START:
61
- meeting.setEndSendingMediaDelay(data.mediaType);
62
- break;
63
- case eventType.LOCAL_SDP_GENERATED:
64
- meeting.setStartLocalSDPGenRemoteSDPRecvDelay();
65
- break;
66
- case eventType.REMOTE_SDP_RECEIVED:
67
- meeting.setEndLocalSDPGenRemoteSDPRecvDelay();
68
- break;
69
- default:
70
- break;
71
- }
72
- };
73
4
 
74
5
  /**
75
6
  * @description Metrics handles all the call metrics events
@@ -78,10 +9,6 @@ const triggerTimers = ({event, meeting, data}) => {
78
9
  */
79
10
  class Metrics {
80
11
  static instance: Metrics;
81
-
82
- _events: any;
83
- keys: any;
84
- meetingCollection: any;
85
12
  webex: any;
86
13
 
87
14
  /**
@@ -92,27 +19,6 @@ class Metrics {
92
19
  */
93
20
  constructor() {
94
21
  if (!Metrics.instance) {
95
- /**
96
- * @instance
97
- * @type {Array}
98
- * @private
99
- * @memberof Metrics
100
- */
101
- this._events = [];
102
- /**
103
- * @instance
104
- * @type {MeetingCollection}
105
- * @private
106
- * @memberof Metrics
107
- */
108
- this.meetingCollection = null;
109
- /**
110
- * @instance
111
- * @type {MeetingCollection}
112
- * @private
113
- * @memberof Metrics
114
- */
115
- this.keys = Object.values(eventType);
116
22
  /**
117
23
  * @instance
118
24
  * @type {Metrics}
@@ -129,409 +35,14 @@ class Metrics {
129
35
  /**
130
36
  * Initializes the Metrics singleton with a meeting Collection.
131
37
  *
132
- * @param {Object} meetingCollection meetings object
133
38
  * @param {Object} webex webex SDK object
134
39
  *
135
40
  * @returns {void}
136
41
  */
137
- initialSetup(meetingCollection: object, webex: object) {
138
- this.meetingCollection = meetingCollection;
42
+ initialSetup(webex: object) {
139
43
  this.webex = webex;
140
44
  }
141
45
 
142
- /**
143
- * poste Meeting event metrics
144
- * @param {object} options {meetingId/meeting} as a json object
145
- * @param {Meeting} options.meeting Meeting object
146
- * @param {String} options.meetingId
147
- * @param {object} options.data
148
- * @param {object} options.event
149
- * @returns {object} null
150
- */
151
- postEvent(options: {meeting?: any; meetingId?: string; data?: object; event?: any} | any) {
152
- const {meetingId, data = {}, event} = options;
153
- let {meeting} = options;
154
-
155
- if (this.keys.indexOf(event) === -1) {
156
- LoggerProxy.logger.error(
157
- `Metrics:index#postEvent --> Event ${event} doesn't exist in dictionary`
158
- );
159
- }
160
-
161
- if (!meeting && meetingId) {
162
- meeting = this.meetingCollection.get(meetingId);
163
- options.meeting = meeting;
164
- }
165
-
166
- if (meeting) {
167
- triggerTimers(options);
168
-
169
- if (!meeting.callEvents) {
170
- meeting.callEvents = [];
171
- }
172
- if (event === eventType.MEDIA_QUALITY) {
173
- data.event = event;
174
- meeting.sendMediaQualityAnalyzerMetrics(data);
175
- } else {
176
- meeting.callEvents.push(event);
177
- data.event = event;
178
- meeting.sendCallAnalyzerMetrics(data);
179
- }
180
- } else {
181
- LoggerProxy.logger.info(
182
- `Metrics:index#postEvent --> Event received for meetingId:${meetingId}, but meeting not found in collection.`
183
- );
184
- }
185
- }
186
-
187
- /**
188
- * Docs for Call analyzer metrics
189
- * https://sqbu-github.cisco.com/WebExSquared/call-analyzer/wiki
190
- * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/master/diagnostic-events.raml
191
- */
192
-
193
- // eslint-disable-next-line @typescript-eslint/no-shadow
194
- initPayload(eventType, identifiers, options) {
195
- const payload: any = {
196
- eventId: uuid.v4(),
197
- version: 1,
198
- origin: {
199
- name: 'endpoint',
200
- networkType: 'unknown',
201
- userAgent: this.userAgentToString(),
202
- clientInfo: {
203
- clientType: options.clientType,
204
- clientVersion: `${CLIENT_NAME}/${this.webex.version}`,
205
- localNetworkPrefix: anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress),
206
- osVersion: getOSVersion() || 'unknown',
207
- subClientType: options.subClientType,
208
- os: this.getOsName(),
209
- browser: getBrowserName(),
210
- browserVersion: getBrowserVersion(),
211
- },
212
- },
213
- originTime: {
214
- triggered: new Date().toISOString(),
215
- },
216
- senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,
217
- event: {
218
- name: eventType,
219
- canProceed: true,
220
- identifiers,
221
- eventData: {webClientDomain: window.location.hostname},
222
- },
223
- };
224
-
225
- // TODO: more options should be checked and some of them should be mandatory in certain conditions
226
- if (options) {
227
- if (Object.prototype.hasOwnProperty.call(options, 'canProceed')) {
228
- payload.event.canProceed = options.canProceed;
229
- }
230
- if (options.errors) {
231
- payload.event.errors = options.errors;
232
- }
233
- if (options.mediaType) {
234
- payload.event.mediaType = options.mediaType;
235
- }
236
- if (options.trigger) {
237
- payload.event.trigger = options.trigger;
238
- }
239
- if (options.pstnAudioType) {
240
- payload.event.pstnAudioType = options.pstnAudioType;
241
- }
242
- if (options.mediaCapabilities) {
243
- payload.event.mediaCapabilities = options.mediaCapabilities;
244
- }
245
- if (options.recoveredBy) {
246
- payload.event.recoveredBy = options.recoveredBy;
247
- }
248
- if (options.joinTimes) {
249
- payload.event.joinTimes = options.joinTimes;
250
- }
251
- if (options.isRoapCallEnabled) {
252
- payload.event.isRoapCallEnabled = options.isRoapCallEnabled;
253
- }
254
- }
255
-
256
- return payload;
257
- }
258
-
259
- /**
260
- * returns metrics friendly OS versions
261
- * @param {String} osName Os name
262
- * @returns {String}
263
- * @private
264
- * @memberof Metrics
265
- */
266
- private getOsName() {
267
- return OSMap[getOSName()] ?? OS_NAME.OTHERS;
268
- }
269
-
270
- /**
271
- * get the payload specific for a media quality event through call analyzer
272
- * @param {String} eventType the event name
273
- * @param {Object} identifiers contains the identifiers needed for CA
274
- * @param {String} identifiers.correlationId
275
- * @param {String} identifiers.locusUrl
276
- * @param {String} identifiers.locusId
277
- * @param {Object} options
278
- * @param {Object} options.intervalData
279
- * @param {String} options.clientType
280
- * @returns {Object}
281
- * @public
282
- * @memberof Metrics
283
- */
284
- public initMediaPayload(
285
- // eslint-disable-next-line @typescript-eslint/no-shadow
286
- eventType: string,
287
- identifiers: {
288
- correlationId: string;
289
- locusUrl: string;
290
- locusId: string;
291
- },
292
- options:
293
- | {
294
- intervalData: object;
295
- clientType: string;
296
- }
297
- | any = {}
298
- ) {
299
- const {audioSetupDelay, videoSetupDelay, joinTimes} = options;
300
-
301
- const payload = {
302
- eventId: uuid.v4(),
303
- version: 1,
304
- origin: {
305
- audioSetupDelay,
306
- videoSetupDelay,
307
- name: 'endpoint',
308
- networkType: options.networkType || UNKNOWN,
309
- userAgent: this.userAgentToString(),
310
- clientInfo: {
311
- clientType: options.clientType, // TODO: Only clientType: 'TEAMS_CLIENT' is whitelisted
312
- clientVersion: `${CLIENT_NAME}/${this.webex.version}`,
313
- localNetworkPrefix: anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress),
314
- os: this.getOsName(),
315
- osVersion: getOSVersion() || UNKNOWN,
316
- subClientType: options.subClientType,
317
- browser: getBrowserName(),
318
- browserVersion: getBrowserVersion(),
319
- },
320
- },
321
- originTime: {
322
- triggered: new Date().toISOString(),
323
- },
324
- senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,
325
- event: {
326
- name: eventType,
327
- canProceed: true,
328
- identifiers,
329
- intervals: [options.intervalData],
330
- joinTimes,
331
- eventData: {
332
- webClientDomain: window.location.hostname,
333
- },
334
- sourceMetadata: {
335
- applicationSoftwareType: CLIENT_NAME,
336
- applicationSoftwareVersion: this.webex.version,
337
- mediaEngineSoftwareType: getBrowserName() || 'browser',
338
- mediaEngineSoftwareVersion: getOSVersion() || UNKNOWN,
339
- startTime: new Date().toISOString(),
340
- },
341
- },
342
- };
343
-
344
- return payload;
345
- }
346
-
347
- /**
348
- * This function Parses a Locus error and returns a diagnostic event payload.
349
- * It should keep updating from:
350
- * https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Adapters/TelephonyAdapter/TelephonyAdapter.cpp#L920
351
- *
352
- * @param {Object} err the error Object from Locus response
353
- * @param {boolean} showToUser true if a toast is shown to user
354
- * @returns {{showToUser: boolean, category: string, errorDescription: string,
355
- * errorCode: number, errorData: *, fatal: boolean, name: string}}
356
- */
357
- parseLocusError(err: any, showToUser: boolean) {
358
- let errorCode;
359
-
360
- if (err && err.statusCode && err.statusCode >= 500) {
361
- errorCode = 1003;
362
- } else if (err && err.body && err.body.errorCode) {
363
- // locus error codes: https://sqbu-github.cisco.com/WebExSquared/locus/blob/master/server/src/main/resources/locus-error-codes.properties
364
- switch (ERROR_CODE[err.body.errorCode]) {
365
- case MEETING_ERRORS.FREE_USER_MAX_PARTICIPANTS_EXCEEDED:
366
- errorCode = 3007;
367
- break;
368
- case MEETING_ERRORS.PAID_USER_MAX_PARTICIPANTS_EXCEEDED:
369
- case MEETING_ERRORS.SERVICE_MAX_PARTICIPANTS_EXCEEDED:
370
- errorCode = 3002;
371
- break;
372
- case MEETING_ERRORS.INACTIVE:
373
- errorCode = 4001;
374
- break;
375
- case MEETING_ERRORS.EXCEEDED_MAX_JOINED_PARTICIPANTS:
376
- case MEETING_ERRORS.EXCEEDED_SERVICE_MAX_PARTICIPANTS:
377
- errorCode = 3001;
378
- break;
379
- case MEETING_ERRORS.MEETING_IS_LOCKED:
380
- errorCode = 4002;
381
- break;
382
- case MEETING_ERRORS.MEETING_IS_TERMINATING:
383
- errorCode = 4003;
384
- break;
385
- case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN_INTENT:
386
- errorCode = 4004;
387
- break;
388
- case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN:
389
- errorCode = 4005;
390
- break;
391
- case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_ROLE:
392
- errorCode = 4006;
393
- break;
394
- case MEETING_ERRORS.JOIN_RESTRICTED_USER:
395
- case MEETING_ERRORS.GET_RESTRICTED_USER:
396
- case MEETING_ERRORS.CREATE_MEDIA_RESTRICTED_USER:
397
- errorCode = 3005;
398
- break;
399
- case MEETING_ERRORS.JOIN_RESTRICTED_USER_NOT_IN_ROOM:
400
- errorCode = 4007;
401
- break;
402
- case MEETING_ERRORS.MEETING_NOT_FOUND:
403
- errorCode = 4011;
404
- break;
405
- case MEETING_ERRORS.NOT_WEBEX_SITE:
406
- errorCode = 4012;
407
- break;
408
- case MEETING_ERRORS.INVALID_JOIN_TIME:
409
- errorCode = 4013;
410
- break;
411
- case MEETING_ERRORS.PHONE_NUMBER_NOT_A_NUMBER:
412
- errorCode = 4016;
413
- break;
414
- case MEETING_ERRORS.PHONE_NUMBER_TOO_LONG:
415
- errorCode = 4017;
416
- break;
417
- case MEETING_ERRORS.INVALID_DIALABLE_KEY:
418
- errorCode = 4018;
419
- break;
420
- case MEETING_ERRORS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED:
421
- errorCode = 4019;
422
- break;
423
- case MEETING_ERRORS.REMOVED_PARTICIPANT:
424
- errorCode = 4020;
425
- break;
426
- case MEETING_ERRORS.MEETING_LINK_NOT_FOUND:
427
- errorCode = 4021;
428
- break;
429
- case MEETING_ERRORS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD:
430
- errorCode = 4022;
431
- break;
432
- case MEETING_ERRORS.INVALID_INVITEE_ADDRESS:
433
- errorCode = 4023;
434
- break;
435
- case MEETING_ERRORS.PMR_ACCOUNT_LOCKED:
436
- errorCode = 4024;
437
- break;
438
- case MEETING_ERRORS.RESOURCE_GUEST_FORBIDDEN:
439
- errorCode = 4025;
440
- break;
441
- case MEETING_ERRORS.PMR_ACCOUNT_SUSPENDED:
442
- errorCode = 4026;
443
- break;
444
- case MEETING_ERRORS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE:
445
- errorCode = 4027;
446
- break;
447
- case MEETING_ERRORS.INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST:
448
- errorCode = 1006;
449
- break;
450
- case MEETING_ERRORS.CONVERSATION_NOT_FOUND:
451
- errorCode = 4028;
452
- break;
453
- case MEETING_ERRORS.RECORDING_CONTROL_NOT_SUPPORTED:
454
- case MEETING_ERRORS.RECORDING_NOT_STARTED:
455
- case MEETING_ERRORS.RECORDING_NOT_ENABLED:
456
- errorCode = 4029;
457
- break;
458
- default:
459
- errorCode = 4008;
460
- }
461
- } else {
462
- errorCode = 4008;
463
- }
464
-
465
- return this.generateErrorPayload(errorCode, showToUser, error.name.LOCUS_RESPONSE, err);
466
- }
467
-
468
- generateErrorPayload(errorCode, shownToUser, name, err) {
469
- if (error.errors[errorCode]) {
470
- const errorPayload: any = {
471
- shownToUser: shownToUser || false,
472
- category: error.errors[errorCode][2],
473
- errorDescription: error.errors[errorCode][0],
474
- errorCode,
475
- fatal: !includes(error.notFatalErrorList, errorCode),
476
- name: name || error.name.OTHER,
477
- };
478
-
479
- if (err && err.body) {
480
- errorPayload.errorData = err.body;
481
- }
482
-
483
- if (err && err.statusCode) {
484
- errorPayload.httpCode = err.statusCode;
485
- }
486
-
487
- return errorPayload;
488
- }
489
-
490
- return null;
491
- }
492
-
493
- /**
494
- * Returns a formated string of the user agent.
495
- *
496
- * @returns {string} formatted user agent information
497
- */
498
- userAgentToString() {
499
- let userAgentOption;
500
- let browserInfo;
501
- const clientInfo = util.format('client=%s', `${this.webex.meetings?.metrics?.clientName}`);
502
-
503
- if (
504
- ['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !==
505
- -1
506
- ) {
507
- browserInfo = util.format(
508
- 'browser=%s',
509
- `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`
510
- );
511
- }
512
- const osInfo = util.format('os=%s', `${getOSName()}/${getOSVersion().split('.')[0]}`);
513
-
514
- if (browserInfo) {
515
- userAgentOption = `(${browserInfo}`;
516
- }
517
- if (osInfo) {
518
- userAgentOption = userAgentOption
519
- ? `${userAgentOption}; ${clientInfo}; ${osInfo}`
520
- : `${clientInfo}; (${osInfo}`;
521
- }
522
- if (userAgentOption) {
523
- userAgentOption += ')';
524
-
525
- return util.format(
526
- 'webex-js-sdk/%s %s',
527
- `${process.env.NODE_ENV}-${this.webex.version}`,
528
- userAgentOption
529
- );
530
- }
531
-
532
- return util.format('webex-js-sdk/%s', `${process.env.NODE_ENV}-${this.webex.version}`);
533
- }
534
-
535
46
  /**
536
47
  * Uploads given metric to the Metrics service as an Behavioral metric.
537
48
  * Metadata about the environment such as browser, OS, SDK and their versions