@webex/plugin-meetings 3.0.0-beta.34 → 3.0.0-beta.340

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 (392) 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 +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/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 +709 -35
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/utils.js +45 -1
  17. package/dist/breakouts/utils.js.map +1 -1
  18. package/dist/common/errors/no-meeting-info.js +51 -0
  19. package/dist/common/errors/no-meeting-info.js.map +1 -0
  20. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  21. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +48 -7
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/common/logs/request.js +5 -1
  27. package/dist/common/logs/request.js.map +1 -1
  28. package/dist/common/queue.js +24 -9
  29. package/dist/common/queue.js.map +1 -1
  30. package/dist/config.js +5 -10
  31. package/dist/config.js.map +1 -1
  32. package/dist/constants.js +233 -29
  33. package/dist/constants.js.map +1 -1
  34. package/dist/controls-options-manager/enums.js +14 -2
  35. package/dist/controls-options-manager/enums.js.map +1 -1
  36. package/dist/controls-options-manager/index.js +109 -15
  37. package/dist/controls-options-manager/index.js.map +1 -1
  38. package/dist/controls-options-manager/types.js +7 -0
  39. package/dist/controls-options-manager/types.js.map +1 -0
  40. package/dist/controls-options-manager/util.js +309 -18
  41. package/dist/controls-options-manager/util.js.map +1 -1
  42. package/dist/index.js +112 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/interpretation/collection.js +23 -0
  45. package/dist/interpretation/collection.js.map +1 -0
  46. package/dist/interpretation/index.js +366 -0
  47. package/dist/interpretation/index.js.map +1 -0
  48. package/dist/interpretation/siLanguage.js +25 -0
  49. package/dist/interpretation/siLanguage.js.map +1 -0
  50. package/dist/locus-info/controlsUtils.js +91 -2
  51. package/dist/locus-info/controlsUtils.js.map +1 -1
  52. package/dist/locus-info/index.js +383 -62
  53. package/dist/locus-info/index.js.map +1 -1
  54. package/dist/locus-info/infoUtils.js +7 -1
  55. package/dist/locus-info/infoUtils.js.map +1 -1
  56. package/dist/locus-info/mediaSharesUtils.js +57 -1
  57. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  58. package/dist/locus-info/parser.js +249 -72
  59. package/dist/locus-info/parser.js.map +1 -1
  60. package/dist/locus-info/selfUtils.js +89 -14
  61. package/dist/locus-info/selfUtils.js.map +1 -1
  62. package/dist/media/index.js +62 -116
  63. package/dist/media/index.js.map +1 -1
  64. package/dist/media/properties.js +73 -124
  65. package/dist/media/properties.js.map +1 -1
  66. package/dist/mediaQualityMetrics/config.js +1 -204
  67. package/dist/mediaQualityMetrics/config.js.map +1 -1
  68. package/dist/meeting/in-meeting-actions.js +86 -2
  69. package/dist/meeting/in-meeting-actions.js.map +1 -1
  70. package/dist/meeting/index.js +3927 -2960
  71. package/dist/meeting/index.js.map +1 -1
  72. package/dist/meeting/locusMediaRequest.js +292 -0
  73. package/dist/meeting/locusMediaRequest.js.map +1 -0
  74. package/dist/meeting/muteState.js +224 -131
  75. package/dist/meeting/muteState.js.map +1 -1
  76. package/dist/meeting/request.js +260 -196
  77. package/dist/meeting/request.js.map +1 -1
  78. package/dist/meeting/util.js +601 -417
  79. package/dist/meeting/util.js.map +1 -1
  80. package/dist/meeting-info/index.js +73 -7
  81. package/dist/meeting-info/index.js.map +1 -1
  82. package/dist/meeting-info/meeting-info-v2.js +192 -51
  83. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  84. package/dist/meeting-info/util.js +1 -1
  85. package/dist/meeting-info/util.js.map +1 -1
  86. package/dist/meeting-info/utilv2.js +36 -36
  87. package/dist/meeting-info/utilv2.js.map +1 -1
  88. package/dist/meetings/collection.js +39 -0
  89. package/dist/meetings/collection.js.map +1 -1
  90. package/dist/meetings/index.js +424 -116
  91. package/dist/meetings/index.js.map +1 -1
  92. package/dist/meetings/meetings.types.js +7 -0
  93. package/dist/meetings/meetings.types.js.map +1 -0
  94. package/dist/meetings/request.js +2 -0
  95. package/dist/meetings/request.js.map +1 -1
  96. package/dist/meetings/util.js +72 -6
  97. package/dist/meetings/util.js.map +1 -1
  98. package/dist/member/index.js +58 -0
  99. package/dist/member/index.js.map +1 -1
  100. package/dist/member/types.js +25 -0
  101. package/dist/member/types.js.map +1 -0
  102. package/dist/member/util.js +132 -25
  103. package/dist/member/util.js.map +1 -1
  104. package/dist/members/collection.js +10 -0
  105. package/dist/members/collection.js.map +1 -1
  106. package/dist/members/index.js +102 -6
  107. package/dist/members/index.js.map +1 -1
  108. package/dist/members/request.js +106 -38
  109. package/dist/members/request.js.map +1 -1
  110. package/dist/members/types.js +15 -0
  111. package/dist/members/types.js.map +1 -0
  112. package/dist/members/util.js +326 -232
  113. package/dist/members/util.js.map +1 -1
  114. package/dist/metrics/constants.js +16 -5
  115. package/dist/metrics/constants.js.map +1 -1
  116. package/dist/metrics/index.js +1 -446
  117. package/dist/metrics/index.js.map +1 -1
  118. package/dist/multistream/mediaRequestManager.js +228 -58
  119. package/dist/multistream/mediaRequestManager.js.map +1 -1
  120. package/dist/multistream/receiveSlot.js +29 -16
  121. package/dist/multistream/receiveSlot.js.map +1 -1
  122. package/dist/multistream/receiveSlotManager.js +39 -36
  123. package/dist/multistream/receiveSlotManager.js.map +1 -1
  124. package/dist/multistream/remoteMedia.js +44 -18
  125. package/dist/multistream/remoteMedia.js.map +1 -1
  126. package/dist/multistream/remoteMediaGroup.js +60 -3
  127. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  128. package/dist/multistream/remoteMediaManager.js +209 -59
  129. package/dist/multistream/remoteMediaManager.js.map +1 -1
  130. package/dist/multistream/sendSlotManager.js +233 -0
  131. package/dist/multistream/sendSlotManager.js.map +1 -0
  132. package/dist/reachability/clusterReachability.js +356 -0
  133. package/dist/reachability/clusterReachability.js.map +1 -0
  134. package/dist/reachability/index.js +273 -391
  135. package/dist/reachability/index.js.map +1 -1
  136. package/dist/reachability/request.js +17 -8
  137. package/dist/reachability/request.js.map +1 -1
  138. package/dist/reachability/util.js +29 -0
  139. package/dist/reachability/util.js.map +1 -0
  140. package/dist/reconnection-manager/index.js +214 -170
  141. package/dist/reconnection-manager/index.js.map +1 -1
  142. package/dist/recording-controller/index.js +21 -2
  143. package/dist/recording-controller/index.js.map +1 -1
  144. package/dist/recording-controller/util.js +9 -8
  145. package/dist/recording-controller/util.js.map +1 -1
  146. package/dist/roap/index.js +62 -35
  147. package/dist/roap/index.js.map +1 -1
  148. package/dist/roap/request.js +112 -97
  149. package/dist/roap/request.js.map +1 -1
  150. package/dist/roap/turnDiscovery.js +95 -38
  151. package/dist/roap/turnDiscovery.js.map +1 -1
  152. package/dist/rtcMetrics/constants.js +12 -0
  153. package/dist/rtcMetrics/constants.js.map +1 -0
  154. package/dist/rtcMetrics/index.js +142 -0
  155. package/dist/rtcMetrics/index.js.map +1 -0
  156. package/dist/statsAnalyzer/index.js +181 -214
  157. package/dist/statsAnalyzer/index.js.map +1 -1
  158. package/dist/statsAnalyzer/mqaUtil.js +22 -18
  159. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  160. package/dist/types/annotation/annotation.types.d.ts +42 -0
  161. package/dist/types/annotation/constants.d.ts +31 -0
  162. package/dist/types/annotation/index.d.ts +117 -0
  163. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  164. package/dist/types/breakouts/events.d.ts +8 -0
  165. package/dist/types/breakouts/utils.d.ts +14 -0
  166. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  167. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  168. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  169. package/dist/types/common/logs/request.d.ts +2 -0
  170. package/dist/types/common/queue.d.ts +9 -7
  171. package/dist/types/config.d.ts +2 -7
  172. package/dist/types/constants.d.ts +201 -30
  173. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  174. package/dist/types/controls-options-manager/index.d.ts +17 -1
  175. package/dist/types/controls-options-manager/types.d.ts +43 -0
  176. package/dist/types/controls-options-manager/util.d.ts +1 -7
  177. package/dist/types/index.d.ts +6 -4
  178. package/dist/types/interpretation/collection.d.ts +5 -0
  179. package/dist/types/interpretation/index.d.ts +5 -0
  180. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  181. package/dist/types/locus-info/index.d.ts +57 -4
  182. package/dist/types/locus-info/parser.d.ts +66 -6
  183. package/dist/types/media/index.d.ts +2 -0
  184. package/dist/types/media/properties.d.ts +34 -48
  185. package/dist/types/mediaQualityMetrics/config.d.ts +0 -128
  186. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  187. package/dist/types/meeting/index.d.ts +506 -512
  188. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  189. package/dist/types/meeting/muteState.d.ts +93 -25
  190. package/dist/types/meeting/request.d.ts +72 -43
  191. package/dist/types/meeting/util.d.ts +101 -1
  192. package/dist/types/meeting-info/index.d.ts +13 -1
  193. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  194. package/dist/types/meetings/collection.d.ts +17 -0
  195. package/dist/types/meetings/index.d.ts +91 -21
  196. package/dist/types/meetings/meetings.types.d.ts +4 -0
  197. package/dist/types/member/index.d.ts +14 -0
  198. package/dist/types/member/types.d.ts +32 -0
  199. package/dist/types/members/collection.d.ts +5 -0
  200. package/dist/types/members/index.d.ts +35 -2
  201. package/dist/types/members/request.d.ts +73 -9
  202. package/dist/types/members/types.d.ts +25 -0
  203. package/dist/types/members/util.d.ts +214 -1
  204. package/dist/types/metrics/constants.d.ts +15 -4
  205. package/dist/types/metrics/index.d.ts +4 -111
  206. package/dist/types/multistream/mediaRequestManager.d.ts +72 -5
  207. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  208. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  209. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  210. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  211. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  212. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  213. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  214. package/dist/types/reachability/index.d.ts +60 -95
  215. package/dist/types/reachability/request.d.ts +7 -3
  216. package/dist/types/reachability/util.d.ts +8 -0
  217. package/dist/types/reconnection-manager/index.d.ts +19 -0
  218. package/dist/types/recording-controller/index.d.ts +15 -1
  219. package/dist/types/recording-controller/util.d.ts +5 -4
  220. package/dist/types/roap/index.d.ts +2 -1
  221. package/dist/types/roap/request.d.ts +15 -11
  222. package/dist/types/roap/turnDiscovery.d.ts +21 -3
  223. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  224. package/dist/types/rtcMetrics/index.d.ts +54 -0
  225. package/dist/types/statsAnalyzer/index.d.ts +29 -11
  226. package/dist/types/webinar/collection.d.ts +16 -0
  227. package/dist/types/webinar/index.d.ts +5 -0
  228. package/dist/webinar/collection.js +44 -0
  229. package/dist/webinar/collection.js.map +1 -0
  230. package/dist/webinar/index.js +69 -0
  231. package/dist/webinar/index.js.map +1 -0
  232. package/package.json +22 -19
  233. package/src/annotation/annotation.types.ts +50 -0
  234. package/src/annotation/constants.ts +36 -0
  235. package/src/annotation/index.ts +328 -0
  236. package/src/breakouts/README.md +42 -12
  237. package/src/breakouts/breakout.ts +67 -9
  238. package/src/breakouts/edit-lock-error.ts +25 -0
  239. package/src/breakouts/events.ts +56 -0
  240. package/src/breakouts/index.ts +592 -20
  241. package/src/breakouts/utils.ts +42 -0
  242. package/src/common/errors/no-meeting-info.ts +24 -0
  243. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  244. package/src/common/errors/webex-errors.ts +44 -2
  245. package/src/common/logs/logger-proxy.ts +1 -1
  246. package/src/common/logs/request.ts +5 -1
  247. package/src/common/queue.ts +22 -8
  248. package/src/config.ts +4 -9
  249. package/src/constants.ts +224 -20
  250. package/src/controls-options-manager/enums.ts +12 -0
  251. package/src/controls-options-manager/index.ts +116 -21
  252. package/src/controls-options-manager/types.ts +59 -0
  253. package/src/controls-options-manager/util.ts +294 -14
  254. package/src/index.ts +40 -0
  255. package/src/interpretation/README.md +60 -0
  256. package/src/interpretation/collection.ts +19 -0
  257. package/src/interpretation/index.ts +332 -0
  258. package/src/interpretation/siLanguage.ts +18 -0
  259. package/src/locus-info/controlsUtils.ts +108 -0
  260. package/src/locus-info/index.ts +413 -59
  261. package/src/locus-info/infoUtils.ts +10 -2
  262. package/src/locus-info/mediaSharesUtils.ts +64 -0
  263. package/src/locus-info/parser.ts +258 -47
  264. package/src/locus-info/selfUtils.ts +81 -5
  265. package/src/media/index.ts +102 -122
  266. package/src/media/properties.ts +87 -110
  267. package/src/mediaQualityMetrics/config.ts +0 -135
  268. package/src/meeting/in-meeting-actions.ts +171 -3
  269. package/src/meeting/index.ts +3276 -2555
  270. package/src/meeting/locusMediaRequest.ts +313 -0
  271. package/src/meeting/muteState.ts +223 -136
  272. package/src/meeting/request.ts +177 -121
  273. package/src/meeting/util.ts +588 -394
  274. package/src/meeting-info/index.ts +81 -8
  275. package/src/meeting-info/meeting-info-v2.ts +170 -14
  276. package/src/meeting-info/util.ts +1 -1
  277. package/src/meeting-info/utilv2.ts +23 -23
  278. package/src/meetings/collection.ts +33 -0
  279. package/src/meetings/index.ts +454 -125
  280. package/src/meetings/meetings.types.ts +12 -0
  281. package/src/meetings/request.ts +2 -0
  282. package/src/meetings/util.ts +80 -11
  283. package/src/member/index.ts +58 -0
  284. package/src/member/types.ts +38 -0
  285. package/src/member/util.ts +141 -25
  286. package/src/members/collection.ts +8 -0
  287. package/src/members/index.ts +134 -8
  288. package/src/members/request.ts +97 -17
  289. package/src/members/types.ts +29 -0
  290. package/src/members/util.ts +333 -240
  291. package/src/metrics/constants.ts +15 -4
  292. package/src/metrics/index.ts +1 -469
  293. package/src/multistream/mediaRequestManager.ts +277 -82
  294. package/src/multistream/receiveSlot.ts +31 -17
  295. package/src/multistream/receiveSlotManager.ts +34 -24
  296. package/src/multistream/remoteMedia.ts +27 -2
  297. package/src/multistream/remoteMediaGroup.ts +59 -0
  298. package/src/multistream/remoteMediaManager.ts +148 -30
  299. package/src/multistream/sendSlotManager.ts +170 -0
  300. package/src/reachability/clusterReachability.ts +320 -0
  301. package/src/reachability/index.ts +236 -342
  302. package/src/reachability/request.ts +17 -8
  303. package/src/reachability/util.ts +24 -0
  304. package/src/reconnection-manager/index.ts +128 -106
  305. package/src/recording-controller/index.ts +20 -3
  306. package/src/recording-controller/util.ts +26 -9
  307. package/src/roap/index.ts +63 -32
  308. package/src/roap/request.ts +100 -104
  309. package/src/roap/turnDiscovery.ts +48 -26
  310. package/src/rtcMetrics/constants.ts +3 -0
  311. package/src/rtcMetrics/index.ts +124 -0
  312. package/src/statsAnalyzer/index.ts +218 -289
  313. package/src/statsAnalyzer/mqaUtil.ts +28 -30
  314. package/src/webinar/collection.ts +31 -0
  315. package/src/webinar/index.ts +62 -0
  316. package/test/integration/spec/converged-space-meetings.js +60 -3
  317. package/test/integration/spec/journey.js +320 -261
  318. package/test/integration/spec/space-meeting.js +76 -3
  319. package/test/unit/spec/annotation/index.ts +418 -0
  320. package/test/unit/spec/breakouts/breakout.ts +118 -28
  321. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  322. package/test/unit/spec/breakouts/events.ts +89 -0
  323. package/test/unit/spec/breakouts/index.ts +1395 -69
  324. package/test/unit/spec/breakouts/utils.js +52 -1
  325. package/test/unit/spec/common/queue.js +31 -2
  326. package/test/unit/spec/controls-options-manager/index.js +163 -0
  327. package/test/unit/spec/controls-options-manager/util.js +576 -60
  328. package/test/unit/spec/fixture/locus.js +1 -0
  329. package/test/unit/spec/interpretation/collection.ts +15 -0
  330. package/test/unit/spec/interpretation/index.ts +589 -0
  331. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  332. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  333. package/test/unit/spec/locus-info/index.js +1304 -33
  334. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  335. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  336. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  337. package/test/unit/spec/locus-info/parser.js +116 -35
  338. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  339. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  340. package/test/unit/spec/media/index.ts +120 -37
  341. package/test/unit/spec/media/properties.ts +2 -2
  342. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  343. package/test/unit/spec/meeting/index.js +5849 -2014
  344. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  345. package/test/unit/spec/meeting/muteState.js +402 -213
  346. package/test/unit/spec/meeting/request.js +483 -49
  347. package/test/unit/spec/meeting/utils.js +679 -64
  348. package/test/unit/spec/meeting-info/index.js +300 -0
  349. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  350. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  351. package/test/unit/spec/meetings/collection.js +26 -0
  352. package/test/unit/spec/meetings/index.js +1231 -212
  353. package/test/unit/spec/meetings/utils.js +202 -2
  354. package/test/unit/spec/member/index.js +61 -6
  355. package/test/unit/spec/member/util.js +510 -34
  356. package/test/unit/spec/members/index.js +432 -1
  357. package/test/unit/spec/members/request.js +206 -27
  358. package/test/unit/spec/members/utils.js +210 -0
  359. package/test/unit/spec/metrics/index.js +1 -50
  360. package/test/unit/spec/multistream/mediaRequestManager.ts +776 -162
  361. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  362. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  363. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  364. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  365. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  366. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  367. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  368. package/test/unit/spec/reachability/index.ts +486 -13
  369. package/test/unit/spec/reachability/request.js +68 -0
  370. package/test/unit/spec/reachability/util.ts +40 -0
  371. package/test/unit/spec/reconnection-manager/index.js +117 -11
  372. package/test/unit/spec/recording-controller/index.js +294 -218
  373. package/test/unit/spec/recording-controller/util.js +223 -96
  374. package/test/unit/spec/roap/index.ts +174 -63
  375. package/test/unit/spec/roap/request.ts +226 -85
  376. package/test/unit/spec/roap/turnDiscovery.ts +76 -34
  377. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  378. package/test/unit/spec/stats-analyzer/index.js +231 -7
  379. package/test/unit/spec/webinar/collection.ts +13 -0
  380. package/test/unit/spec/webinar/index.ts +60 -0
  381. package/test/utils/integrationTestUtils.js +46 -0
  382. package/test/utils/testUtils.js +0 -52
  383. package/dist/meeting/effectsState.js +0 -262
  384. package/dist/meeting/effectsState.js.map +0 -1
  385. package/dist/metrics/config.js +0 -289
  386. package/dist/metrics/config.js.map +0 -1
  387. package/dist/types/meeting/effectsState.d.ts +0 -42
  388. package/dist/types/metrics/config.d.ts +0 -169
  389. package/src/index.js +0 -16
  390. package/src/meeting/effectsState.ts +0 -211
  391. package/src/metrics/config.ts +0 -485
  392. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -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