@webex/plugin-meetings 3.0.0-beta.39 → 3.0.0-beta.391

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