@webex/plugin-meetings 3.0.0-beta.26 → 3.0.0-beta.261

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