@webex/plugin-meetings 3.0.0-beta.31 → 3.0.0-beta.310

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