@webex/plugin-meetings 2.59.1 → 2.59.3-next.1

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 (417) hide show
  1. package/.eslintrc.js +6 -6
  2. package/LICENSE +1 -1
  3. package/README.md +1204 -1204
  4. package/UPGRADING.md +287 -287
  5. package/babel.config.js +3 -3
  6. package/browsers.js +108 -108
  7. package/dist/common/browser-detection.d.ts +9 -9
  8. package/dist/common/browser-detection.js.map +1 -1
  9. package/dist/common/collection.d.ts +48 -48
  10. package/dist/common/collection.js +43 -43
  11. package/dist/common/collection.js.map +1 -1
  12. package/dist/common/config.d.ts +2 -2
  13. package/dist/common/config.js.map +1 -1
  14. package/dist/common/errors/captcha-error.d.ts +15 -15
  15. package/dist/common/errors/captcha-error.js +7 -7
  16. package/dist/common/errors/captcha-error.js.map +1 -1
  17. package/dist/common/errors/intent-to-join.d.ts +16 -16
  18. package/dist/common/errors/intent-to-join.js +7 -7
  19. package/dist/common/errors/intent-to-join.js.map +1 -1
  20. package/dist/common/errors/join-meeting.d.ts +17 -17
  21. package/dist/common/errors/join-meeting.js +8 -8
  22. package/dist/common/errors/join-meeting.js.map +1 -1
  23. package/dist/common/errors/media.d.ts +15 -15
  24. package/dist/common/errors/media.js +7 -7
  25. package/dist/common/errors/media.js.map +1 -1
  26. package/dist/common/errors/parameter.d.ts +15 -15
  27. package/dist/common/errors/parameter.js +7 -7
  28. package/dist/common/errors/parameter.js.map +1 -1
  29. package/dist/common/errors/password-error.d.ts +15 -15
  30. package/dist/common/errors/password-error.js +7 -7
  31. package/dist/common/errors/password-error.js.map +1 -1
  32. package/dist/common/errors/permission.d.ts +14 -14
  33. package/dist/common/errors/permission.js +6 -6
  34. package/dist/common/errors/permission.js.map +1 -1
  35. package/dist/common/errors/reconnection-in-progress.d.ts +9 -9
  36. package/dist/common/errors/reconnection-in-progress.js +6 -6
  37. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  38. package/dist/common/errors/reconnection.d.ts +15 -15
  39. package/dist/common/errors/reconnection.js +7 -7
  40. package/dist/common/errors/reconnection.js.map +1 -1
  41. package/dist/common/errors/stats.d.ts +15 -15
  42. package/dist/common/errors/stats.js +7 -7
  43. package/dist/common/errors/stats.js.map +1 -1
  44. package/dist/common/errors/webex-errors.d.ts +81 -81
  45. package/dist/common/errors/webex-errors.js +42 -42
  46. package/dist/common/errors/webex-errors.js.map +1 -1
  47. package/dist/common/errors/webex-meetings-error.d.ts +20 -20
  48. package/dist/common/errors/webex-meetings-error.js +12 -12
  49. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  50. package/dist/common/events/events-scope.d.ts +17 -17
  51. package/dist/common/events/events-scope.js +10 -10
  52. package/dist/common/events/events-scope.js.map +1 -1
  53. package/dist/common/events/events.d.ts +12 -12
  54. package/dist/common/events/events.js +4 -4
  55. package/dist/common/events/events.js.map +1 -1
  56. package/dist/common/events/trigger-proxy.d.ts +2 -2
  57. package/dist/common/events/trigger-proxy.js.map +1 -1
  58. package/dist/common/events/util.d.ts +2 -2
  59. package/dist/common/events/util.js.map +1 -1
  60. package/dist/common/logs/logger-config.d.ts +2 -2
  61. package/dist/common/logs/logger-config.js.map +1 -1
  62. package/dist/common/logs/logger-proxy.d.ts +2 -2
  63. package/dist/common/logs/logger-proxy.js.map +1 -1
  64. package/dist/common/logs/request.d.ts +34 -34
  65. package/dist/common/logs/request.js +18 -18
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.d.ts +32 -32
  68. package/dist/common/queue.js +18 -18
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.d.ts +73 -73
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.d.ts +924 -924
  73. package/dist/constants.js +9 -9
  74. package/dist/constants.js.map +1 -1
  75. package/dist/controls-options-manager/constants.d.ts +4 -4
  76. package/dist/controls-options-manager/constants.js.map +1 -1
  77. package/dist/controls-options-manager/enums.d.ts +5 -5
  78. package/dist/controls-options-manager/enums.js.map +1 -1
  79. package/dist/controls-options-manager/index.d.ts +120 -120
  80. package/dist/controls-options-manager/index.js +81 -81
  81. package/dist/controls-options-manager/index.js.map +1 -1
  82. package/dist/controls-options-manager/util.d.ts +7 -7
  83. package/dist/controls-options-manager/util.js.map +1 -1
  84. package/dist/index.d.ts +4 -4
  85. package/dist/index.js.map +1 -1
  86. package/dist/locus-info/controlsUtils.d.ts +2 -2
  87. package/dist/locus-info/controlsUtils.js +21 -21
  88. package/dist/locus-info/controlsUtils.js.map +1 -1
  89. package/dist/locus-info/embeddedAppsUtils.d.ts +2 -2
  90. package/dist/locus-info/embeddedAppsUtils.js +14 -14
  91. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  92. package/dist/locus-info/fullState.d.ts +2 -2
  93. package/dist/locus-info/fullState.js.map +1 -1
  94. package/dist/locus-info/hostUtils.d.ts +2 -2
  95. package/dist/locus-info/hostUtils.js +19 -19
  96. package/dist/locus-info/hostUtils.js.map +1 -1
  97. package/dist/locus-info/index.d.ts +269 -269
  98. package/dist/locus-info/index.js +180 -180
  99. package/dist/locus-info/index.js.map +1 -1
  100. package/dist/locus-info/infoUtils.d.ts +2 -2
  101. package/dist/locus-info/infoUtils.js.map +1 -1
  102. package/dist/locus-info/mediaSharesUtils.d.ts +2 -2
  103. package/dist/locus-info/mediaSharesUtils.js +50 -50
  104. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  105. package/dist/locus-info/parser.d.ts +212 -212
  106. package/dist/locus-info/parser.js +136 -136
  107. package/dist/locus-info/parser.js.map +1 -1
  108. package/dist/locus-info/selfUtils.d.ts +2 -2
  109. package/dist/locus-info/selfUtils.js +52 -52
  110. package/dist/locus-info/selfUtils.js.map +1 -1
  111. package/dist/media/index.d.ts +32 -32
  112. package/dist/media/index.js +145 -145
  113. package/dist/media/index.js.map +1 -1
  114. package/dist/media/properties.d.ts +108 -108
  115. package/dist/media/properties.js +49 -49
  116. package/dist/media/properties.js.map +1 -1
  117. package/dist/media/util.d.ts +2 -2
  118. package/dist/media/util.js.map +1 -1
  119. package/dist/mediaQualityMetrics/config.d.ts +233 -233
  120. package/dist/mediaQualityMetrics/config.js.map +1 -1
  121. package/dist/meeting/effectsState.d.ts +42 -42
  122. package/dist/meeting/effectsState.js +24 -24
  123. package/dist/meeting/effectsState.js.map +1 -1
  124. package/dist/meeting/in-meeting-actions.d.ts +79 -79
  125. package/dist/meeting/in-meeting-actions.js +11 -11
  126. package/dist/meeting/in-meeting-actions.js.map +1 -1
  127. package/dist/meeting/index.d.ts +1621 -1621
  128. package/dist/meeting/index.js +1502 -1505
  129. package/dist/meeting/index.js.map +1 -1
  130. package/dist/meeting/muteState.d.ts +116 -116
  131. package/dist/meeting/muteState.js +85 -85
  132. package/dist/meeting/muteState.js.map +1 -1
  133. package/dist/meeting/request.d.ts +255 -255
  134. package/dist/meeting/request.js +141 -141
  135. package/dist/meeting/request.js.map +1 -1
  136. package/dist/meeting/state.d.ts +9 -9
  137. package/dist/meeting/state.js +30 -30
  138. package/dist/meeting/state.js.map +1 -1
  139. package/dist/meeting/util.d.ts +2 -2
  140. package/dist/meeting/util.js.map +1 -1
  141. package/dist/meeting-info/collection.d.ts +20 -20
  142. package/dist/meeting-info/collection.js +11 -11
  143. package/dist/meeting-info/collection.js.map +1 -1
  144. package/dist/meeting-info/index.d.ts +57 -57
  145. package/dist/meeting-info/index.js +50 -50
  146. package/dist/meeting-info/index.js.map +1 -1
  147. package/dist/meeting-info/meeting-info-v2.d.ts +93 -93
  148. package/dist/meeting-info/meeting-info-v2.js +52 -52
  149. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  150. package/dist/meeting-info/request.d.ts +22 -22
  151. package/dist/meeting-info/request.js +14 -14
  152. package/dist/meeting-info/request.js.map +1 -1
  153. package/dist/meeting-info/util.d.ts +2 -2
  154. package/dist/meeting-info/util.js +9 -9
  155. package/dist/meeting-info/util.js.map +1 -1
  156. package/dist/meeting-info/utilv2.d.ts +2 -2
  157. package/dist/meeting-info/utilv2.js +20 -20
  158. package/dist/meeting-info/utilv2.js.map +1 -1
  159. package/dist/meetings/collection.d.ts +23 -23
  160. package/dist/meetings/collection.js +14 -14
  161. package/dist/meetings/collection.js.map +1 -1
  162. package/dist/meetings/index.d.ts +296 -296
  163. package/dist/meetings/index.js +259 -259
  164. package/dist/meetings/index.js.map +1 -1
  165. package/dist/meetings/request.d.ts +27 -27
  166. package/dist/meetings/request.js +15 -15
  167. package/dist/meetings/request.js.map +1 -1
  168. package/dist/meetings/util.d.ts +18 -18
  169. package/dist/meetings/util.js +29 -29
  170. package/dist/meetings/util.js.map +1 -1
  171. package/dist/member/index.d.ts +147 -147
  172. package/dist/member/index.js +214 -214
  173. package/dist/member/index.js.map +1 -1
  174. package/dist/member/member.types.d.ts +11 -11
  175. package/dist/member/member.types.js.map +1 -1
  176. package/dist/member/util.d.ts +2 -2
  177. package/dist/member/util.js +60 -60
  178. package/dist/member/util.js.map +1 -1
  179. package/dist/members/collection.d.ts +24 -24
  180. package/dist/members/collection.js +11 -11
  181. package/dist/members/collection.js.map +1 -1
  182. package/dist/members/index.d.ts +298 -298
  183. package/dist/members/index.js +275 -275
  184. package/dist/members/index.js.map +1 -1
  185. package/dist/members/request.d.ts +50 -50
  186. package/dist/members/request.js +27 -27
  187. package/dist/members/request.js.map +1 -1
  188. package/dist/members/util.d.ts +2 -2
  189. package/dist/members/util.js +21 -21
  190. package/dist/members/util.js.map +1 -1
  191. package/dist/metrics/config.d.ts +169 -169
  192. package/dist/metrics/config.js.map +1 -1
  193. package/dist/metrics/constants.d.ts +57 -57
  194. package/dist/metrics/constants.js.map +1 -1
  195. package/dist/metrics/index.d.ts +152 -152
  196. package/dist/metrics/index.js +90 -90
  197. package/dist/metrics/index.js.map +1 -1
  198. package/dist/networkQualityMonitor/index.d.ts +70 -70
  199. package/dist/networkQualityMonitor/index.js +65 -65
  200. package/dist/networkQualityMonitor/index.js.map +1 -1
  201. package/dist/peer-connection-manager/index.d.ts +6 -6
  202. package/dist/peer-connection-manager/index.js +87 -87
  203. package/dist/peer-connection-manager/index.js.map +1 -1
  204. package/dist/peer-connection-manager/util.d.ts +6 -6
  205. package/dist/peer-connection-manager/util.js +9 -9
  206. package/dist/peer-connection-manager/util.js.map +1 -1
  207. package/dist/personal-meeting-room/index.d.ts +47 -47
  208. package/dist/personal-meeting-room/index.js +67 -67
  209. package/dist/personal-meeting-room/index.js.map +1 -1
  210. package/dist/personal-meeting-room/request.d.ts +14 -14
  211. package/dist/personal-meeting-room/request.js +7 -7
  212. package/dist/personal-meeting-room/request.js.map +1 -1
  213. package/dist/personal-meeting-room/util.d.ts +2 -2
  214. package/dist/personal-meeting-room/util.js.map +1 -1
  215. package/dist/reachability/index.d.ts +139 -139
  216. package/dist/reachability/index.js +110 -110
  217. package/dist/reachability/index.js.map +1 -1
  218. package/dist/reachability/request.d.ts +35 -35
  219. package/dist/reachability/request.js +15 -15
  220. package/dist/reachability/request.js.map +1 -1
  221. package/dist/reactions/reactions.d.ts +4 -4
  222. package/dist/reactions/reactions.js.map +1 -1
  223. package/dist/reactions/reactions.type.d.ts +32 -32
  224. package/dist/reactions/reactions.type.js.map +1 -1
  225. package/dist/reconnection-manager/index.d.ts +112 -112
  226. package/dist/reconnection-manager/index.js +112 -112
  227. package/dist/reconnection-manager/index.js.map +1 -1
  228. package/dist/recording-controller/enums.d.ts +7 -7
  229. package/dist/recording-controller/enums.js.map +1 -1
  230. package/dist/recording-controller/index.d.ts +193 -193
  231. package/dist/recording-controller/index.js +127 -127
  232. package/dist/recording-controller/index.js.map +1 -1
  233. package/dist/recording-controller/util.d.ts +13 -13
  234. package/dist/recording-controller/util.js.map +1 -1
  235. package/dist/roap/collection.d.ts +10 -10
  236. package/dist/roap/collection.js.map +1 -1
  237. package/dist/roap/handler.d.ts +47 -47
  238. package/dist/roap/handler.js +27 -27
  239. package/dist/roap/handler.js.map +1 -1
  240. package/dist/roap/index.d.ts +116 -116
  241. package/dist/roap/index.js +111 -111
  242. package/dist/roap/index.js.map +1 -1
  243. package/dist/roap/request.d.ts +35 -35
  244. package/dist/roap/request.js +17 -17
  245. package/dist/roap/request.js.map +1 -1
  246. package/dist/roap/state.d.ts +9 -9
  247. package/dist/roap/state.js +14 -14
  248. package/dist/roap/state.js.map +1 -1
  249. package/dist/roap/turnDiscovery.d.ts +67 -67
  250. package/dist/roap/turnDiscovery.js +46 -46
  251. package/dist/roap/turnDiscovery.js.map +1 -1
  252. package/dist/roap/util.d.ts +2 -2
  253. package/dist/roap/util.js.map +1 -1
  254. package/dist/statsAnalyzer/global.d.ts +126 -126
  255. package/dist/statsAnalyzer/global.js.map +1 -1
  256. package/dist/statsAnalyzer/index.d.ts +190 -190
  257. package/dist/statsAnalyzer/index.js +128 -128
  258. package/dist/statsAnalyzer/index.js.map +1 -1
  259. package/dist/statsAnalyzer/mqaUtil.d.ts +22 -22
  260. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  261. package/dist/transcription/index.d.ts +64 -64
  262. package/dist/transcription/index.js +42 -42
  263. package/dist/transcription/index.js.map +1 -1
  264. package/internal-README.md +172 -172
  265. package/jest.config.js +3 -3
  266. package/package.json +22 -21
  267. package/process +1 -1
  268. package/src/common/browser-detection.ts +39 -39
  269. package/src/common/collection.ts +94 -94
  270. package/src/common/config.ts +9 -9
  271. package/src/common/errors/captcha-error.ts +25 -25
  272. package/src/common/errors/intent-to-join.ts +27 -27
  273. package/src/common/errors/join-meeting.ts +32 -32
  274. package/src/common/errors/media.ts +25 -25
  275. package/src/common/errors/parameter.ts +33 -33
  276. package/src/common/errors/password-error.ts +25 -25
  277. package/src/common/errors/permission.ts +24 -24
  278. package/src/common/errors/reconnection-in-progress.ts +8 -8
  279. package/src/common/errors/reconnection.ts +25 -25
  280. package/src/common/errors/stats.ts +25 -25
  281. package/src/common/errors/webex-errors.ts +140 -140
  282. package/src/common/errors/webex-meetings-error.ts +35 -35
  283. package/src/common/events/events-scope.ts +30 -30
  284. package/src/common/events/events.ts +25 -25
  285. package/src/common/events/trigger-proxy.ts +25 -25
  286. package/src/common/events/util.ts +39 -39
  287. package/src/common/logs/logger-config.ts +8 -8
  288. package/src/common/logs/logger-proxy.ts +44 -44
  289. package/src/common/logs/request.ts +65 -65
  290. package/src/common/queue.ts +50 -50
  291. package/src/config.ts +96 -96
  292. package/src/constants.ts +1121 -1121
  293. package/src/controls-options-manager/constants.ts +5 -5
  294. package/src/controls-options-manager/enums.ts +6 -6
  295. package/src/controls-options-manager/index.ts +183 -183
  296. package/src/controls-options-manager/util.ts +20 -20
  297. package/src/index.js +15 -15
  298. package/src/locus-info/controlsUtils.ts +112 -112
  299. package/src/locus-info/embeddedAppsUtils.ts +57 -57
  300. package/src/locus-info/fullState.ts +69 -69
  301. package/src/locus-info/hostUtils.ts +60 -60
  302. package/src/locus-info/index.ts +1303 -1303
  303. package/src/locus-info/infoUtils.ts +101 -101
  304. package/src/locus-info/mediaSharesUtils.ts +173 -173
  305. package/src/locus-info/parser.ts +680 -680
  306. package/src/locus-info/selfUtils.ts +428 -428
  307. package/src/media/index.ts +675 -675
  308. package/src/media/properties.ts +313 -313
  309. package/src/media/util.ts +37 -37
  310. package/src/mediaQualityMetrics/config.ts +382 -382
  311. package/src/meeting/effectsState.ts +209 -209
  312. package/src/meeting/in-meeting-actions.ts +153 -153
  313. package/src/meeting/index.ts +6537 -6543
  314. package/src/meeting/muteState.ts +365 -365
  315. package/src/meeting/request.ts +810 -810
  316. package/src/meeting/state.ts +194 -194
  317. package/src/meeting/util.ts +530 -530
  318. package/src/meeting-info/collection.ts +41 -41
  319. package/src/meeting-info/index.ts +137 -137
  320. package/src/meeting-info/meeting-info-v2.ts +273 -273
  321. package/src/meeting-info/request.ts +46 -46
  322. package/src/meeting-info/util.ts +314 -314
  323. package/src/meeting-info/utilv2.ts +324 -324
  324. package/src/meetings/collection.ts +43 -43
  325. package/src/meetings/index.ts +1128 -1128
  326. package/src/meetings/request.ts +81 -81
  327. package/src/meetings/util.ts +181 -181
  328. package/src/member/index.ts +446 -446
  329. package/src/member/member.types.ts +13 -13
  330. package/src/member/util.ts +286 -286
  331. package/src/members/collection.ts +40 -40
  332. package/src/members/index.ts +900 -900
  333. package/src/members/request.ts +175 -175
  334. package/src/members/util.ts +260 -260
  335. package/src/metrics/config.ts +485 -485
  336. package/src/metrics/constants.ts +61 -61
  337. package/src/metrics/index.ts +543 -543
  338. package/src/networkQualityMonitor/index.ts +211 -211
  339. package/src/peer-connection-manager/index.ts +847 -847
  340. package/src/peer-connection-manager/util.ts +119 -119
  341. package/src/personal-meeting-room/index.ts +157 -157
  342. package/src/personal-meeting-room/request.ts +48 -48
  343. package/src/personal-meeting-room/util.ts +49 -49
  344. package/src/reachability/index.ts +478 -478
  345. package/src/reachability/request.ts +81 -81
  346. package/src/reactions/reactions.ts +104 -104
  347. package/src/reactions/reactions.type.ts +36 -36
  348. package/src/reconnection-manager/index.ts +622 -622
  349. package/src/recording-controller/enums.ts +8 -8
  350. package/src/recording-controller/index.ts +315 -315
  351. package/src/recording-controller/util.ts +58 -58
  352. package/src/roap/collection.ts +62 -62
  353. package/src/roap/handler.ts +294 -294
  354. package/src/roap/index.ts +413 -413
  355. package/src/roap/request.ts +229 -229
  356. package/src/roap/state.ts +156 -156
  357. package/src/roap/turnDiscovery.ts +283 -283
  358. package/src/roap/util.ts +100 -100
  359. package/src/statsAnalyzer/global.ts +128 -128
  360. package/src/statsAnalyzer/index.ts +1266 -1266
  361. package/src/statsAnalyzer/mqaUtil.ts +290 -290
  362. package/src/transcription/index.ts +154 -154
  363. package/test/integration/spec/journey.js +941 -941
  364. package/test/integration/spec/space-meeting.js +457 -457
  365. package/test/integration/spec/transcription.js +55 -55
  366. package/test/unit/spec/common/browser-detection.js +119 -119
  367. package/test/unit/spec/common/queue.js +69 -69
  368. package/test/unit/spec/controls-options-manager/index.js +123 -123
  369. package/test/unit/spec/controls-options-manager/util.js +65 -65
  370. package/test/unit/spec/fixture/locus.js +406 -406
  371. package/test/unit/spec/locus-info/controlsUtils.js +82 -82
  372. package/test/unit/spec/locus-info/embeddedAppsUtils.js +104 -104
  373. package/test/unit/spec/locus-info/index.js +1272 -1272
  374. package/test/unit/spec/locus-info/infoUtils.js +138 -138
  375. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +975 -975
  376. package/test/unit/spec/locus-info/lib/SeqCmp.json +522 -522
  377. package/test/unit/spec/locus-info/lib/selfConstant.js +286 -286
  378. package/test/unit/spec/locus-info/parser.js +298 -298
  379. package/test/unit/spec/locus-info/selfUtils.js +185 -185
  380. package/test/unit/spec/media/properties.ts +305 -305
  381. package/test/unit/spec/meeting/effectsState.js +281 -281
  382. package/test/unit/spec/meeting/in-meeting-actions.ts +90 -90
  383. package/test/unit/spec/meeting/index.js +5227 -5227
  384. package/test/unit/spec/meeting/muteState.js +430 -430
  385. package/test/unit/spec/meeting/request.js +317 -317
  386. package/test/unit/spec/meeting/utils.js +319 -319
  387. package/test/unit/spec/meeting-info/meetinginfov2.js +376 -376
  388. package/test/unit/spec/meeting-info/request.js +64 -64
  389. package/test/unit/spec/meeting-info/util.js +37 -37
  390. package/test/unit/spec/meeting-info/utilv2.js +330 -330
  391. package/test/unit/spec/meetings/collection.js +52 -52
  392. package/test/unit/spec/meetings/index.js +1375 -1375
  393. package/test/unit/spec/meetings/utils.js +66 -66
  394. package/test/unit/spec/member/index.js +47 -47
  395. package/test/unit/spec/member/util.js +80 -80
  396. package/test/unit/spec/members/index.js +364 -364
  397. package/test/unit/spec/members/request.js +200 -200
  398. package/test/unit/spec/members/utils.js +42 -42
  399. package/test/unit/spec/metrics/index.js +111 -111
  400. package/test/unit/spec/networkQualityMonitor/index.js +99 -99
  401. package/test/unit/spec/peerconnection-manager/index.js +218 -218
  402. package/test/unit/spec/peerconnection-manager/utils.js +49 -49
  403. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +388 -388
  404. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +29 -29
  405. package/test/unit/spec/reachability/index.ts +50 -50
  406. package/test/unit/spec/reconnection-manager/index.js +206 -206
  407. package/test/unit/spec/recording-controller/index.js +230 -230
  408. package/test/unit/spec/recording-controller/util.js +101 -101
  409. package/test/unit/spec/roap/index.ts +128 -128
  410. package/test/unit/spec/roap/turnDiscovery.ts +372 -372
  411. package/test/unit/spec/roap/util.js +30 -30
  412. package/test/unit/spec/stats-analyzer/index.js +287 -287
  413. package/test/utils/cmr.js +104 -104
  414. package/test/utils/testUtils.js +287 -287
  415. package/test/utils/webex-config.js +77 -77
  416. package/test/utils/webex-test-users.js +82 -82
  417. package/tsconfig.json +5 -5
@@ -20,8 +20,8 @@ var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy")
20
20
  var _constants = require("../constants");
21
21
  var _browserDetection = _interopRequireDefault(require("../common/browser-detection"));
22
22
  var _config = require("./config");
23
- /*!
24
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
23
+ /*!
24
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
25
25
  */
26
26
 
27
27
  // @ts-ignore
@@ -75,17 +75,17 @@ var triggerTimers = function triggerTimers(_ref) {
75
75
  }
76
76
  };
77
77
 
78
- /**
79
- * @description Metrics handles all the call metrics events
80
- * @export
81
- * @class Metrics
78
+ /**
79
+ * @description Metrics handles all the call metrics events
80
+ * @export
81
+ * @class Metrics
82
82
  */
83
83
  var Metrics = /*#__PURE__*/function () {
84
- /**
85
- * Create Metrics Object
86
- * @constructor
87
- * @public
88
- * @memberof Meetings
84
+ /**
85
+ * Create Metrics Object
86
+ * @constructor
87
+ * @public
88
+ * @memberof Meetings
89
89
  */
90
90
  function Metrics() {
91
91
  (0, _classCallCheck2.default)(this, Metrics);
@@ -94,32 +94,32 @@ var Metrics = /*#__PURE__*/function () {
94
94
  (0, _defineProperty2.default)(this, "meetingCollection", void 0);
95
95
  (0, _defineProperty2.default)(this, "webex", void 0);
96
96
  if (!Metrics.instance) {
97
- /**
98
- * @instance
99
- * @type {Array}
100
- * @private
101
- * @memberof Metrics
97
+ /**
98
+ * @instance
99
+ * @type {Array}
100
+ * @private
101
+ * @memberof Metrics
102
102
  */
103
103
  this._events = [];
104
- /**
105
- * @instance
106
- * @type {MeetingCollection}
107
- * @private
108
- * @memberof Metrics
104
+ /**
105
+ * @instance
106
+ * @type {MeetingCollection}
107
+ * @private
108
+ * @memberof Metrics
109
109
  */
110
110
  this.meetingCollection = null;
111
- /**
112
- * @instance
113
- * @type {MeetingCollection}
114
- * @private
115
- * @memberof Metrics
111
+ /**
112
+ * @instance
113
+ * @type {MeetingCollection}
114
+ * @private
115
+ * @memberof Metrics
116
116
  */
117
117
  this.keys = (0, _values.default)(_config.eventType);
118
- /**
119
- * @instance
120
- * @type {Metrics}
121
- * @private
122
- * @memberof Metrics
118
+ /**
119
+ * @instance
120
+ * @type {Metrics}
121
+ * @private
122
+ * @memberof Metrics
123
123
  */
124
124
  Metrics.instance = this;
125
125
  }
@@ -128,13 +128,13 @@ var Metrics = /*#__PURE__*/function () {
128
128
  return Metrics.instance;
129
129
  }
130
130
 
131
- /**
132
- * Initializes the Metrics singleton with a meeting Collection.
133
- *
134
- * @param {Object} meetingCollection meetings object
135
- * @param {Object} webex webex SDK object
136
- *
137
- * @returns {void}
131
+ /**
132
+ * Initializes the Metrics singleton with a meeting Collection.
133
+ *
134
+ * @param {Object} meetingCollection meetings object
135
+ * @param {Object} webex webex SDK object
136
+ *
137
+ * @returns {void}
138
138
  */
139
139
  (0, _createClass2.default)(Metrics, [{
140
140
  key: "initialSetup",
@@ -143,14 +143,14 @@ var Metrics = /*#__PURE__*/function () {
143
143
  this.webex = webex;
144
144
  }
145
145
 
146
- /**
147
- * poste Meeting event metrics
148
- * @param {object} options {meetingId/meeting} as a json object
149
- * @param {Meeting} options.meeting Meeting object
150
- * @param {String} options.meetingId
151
- * @param {object} options.data
152
- * @param {object} options.event
153
- * @returns {object} null
146
+ /**
147
+ * poste Meeting event metrics
148
+ * @param {object} options {meetingId/meeting} as a json object
149
+ * @param {Meeting} options.meeting Meeting object
150
+ * @param {String} options.meetingId
151
+ * @param {object} options.data
152
+ * @param {object} options.event
153
+ * @returns {object} null
154
154
  */
155
155
  }, {
156
156
  key: "postEvent",
@@ -185,10 +185,10 @@ var Metrics = /*#__PURE__*/function () {
185
185
  }
186
186
  }
187
187
 
188
- /**
189
- * Docs for Call analyzer metrics
190
- * https://sqbu-github.cisco.com/WebExSquared/call-analyzer/wiki
191
- * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/master/diagnostic-events.raml
188
+ /**
189
+ * Docs for Call analyzer metrics
190
+ * https://sqbu-github.cisco.com/WebExSquared/call-analyzer/wiki
191
+ * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/master/diagnostic-events.raml
192
192
  */
193
193
 
194
194
  // eslint-disable-next-line @typescript-eslint/no-shadow
@@ -261,19 +261,19 @@ var Metrics = /*#__PURE__*/function () {
261
261
  return payload;
262
262
  }
263
263
 
264
- /**
265
- * get the payload specific for a media quality event through call analyzer
266
- * @param {String} eventType the event name
267
- * @param {Object} identifiers contains the identifiers needed for CA
268
- * @param {String} identifiers.correlationId
269
- * @param {String} identifiers.locusUrl
270
- * @param {String} identifiers.locusId
271
- * @param {Object} options
272
- * @param {Object} options.intervalData
273
- * @param {String} options.clientType
274
- * @returns {Object}
275
- * @public
276
- * @memberof Metrics
264
+ /**
265
+ * get the payload specific for a media quality event through call analyzer
266
+ * @param {String} eventType the event name
267
+ * @param {Object} identifiers contains the identifiers needed for CA
268
+ * @param {String} identifiers.correlationId
269
+ * @param {String} identifiers.locusUrl
270
+ * @param {String} identifiers.locusId
271
+ * @param {Object} options
272
+ * @param {Object} options.intervalData
273
+ * @param {String} options.clientType
274
+ * @returns {Object}
275
+ * @public
276
+ * @memberof Metrics
277
277
  */
278
278
  }, {
279
279
  key: "initMediaPayload",
@@ -331,15 +331,15 @@ var Metrics = /*#__PURE__*/function () {
331
331
  return payload;
332
332
  }
333
333
 
334
- /**
335
- * This function Parses a Locus error and returns a diagnostic event payload.
336
- * It should keep updating from:
337
- * https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Adapters/TelephonyAdapter/TelephonyAdapter.cpp#L920
338
- *
339
- * @param {Object} err the error Object from Locus response
340
- * @param {boolean} showToUser true if a toast is shown to user
341
- * @returns {{showToUser: boolean, category: string, errorDescription: string,
342
- * errorCode: number, errorData: *, fatal: boolean, name: string}}
334
+ /**
335
+ * This function Parses a Locus error and returns a diagnostic event payload.
336
+ * It should keep updating from:
337
+ * https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Adapters/TelephonyAdapter/TelephonyAdapter.cpp#L920
338
+ *
339
+ * @param {Object} err the error Object from Locus response
340
+ * @param {boolean} showToUser true if a toast is shown to user
341
+ * @returns {{showToUser: boolean, category: string, errorDescription: string,
342
+ * errorCode: number, errorData: *, fatal: boolean, name: string}}
343
343
  */
344
344
  }, {
345
345
  key: "parseLocusError",
@@ -474,10 +474,10 @@ var Metrics = /*#__PURE__*/function () {
474
474
  return null;
475
475
  }
476
476
 
477
- /**
478
- * Returns a formated string of the user agent.
479
- *
480
- * @returns {string} formatted user agent information
477
+ /**
478
+ * Returns a formated string of the user agent.
479
+ *
480
+ * @returns {string} formatted user agent information
481
481
  */
482
482
  }, {
483
483
  key: "userAgentToString",
@@ -503,20 +503,20 @@ var Metrics = /*#__PURE__*/function () {
503
503
  return _util.default.format('webex-js-sdk/%s', "".concat(process.env.NODE_ENV, "-").concat(this.webex.version));
504
504
  }
505
505
 
506
- /**
507
- * Uploads given metric to the Metrics service as an Behavioral metric.
508
- * Metadata about the environment such as browser, OS, SDK and their versions
509
- * are automatically added when the metric is sent.
510
- *
511
- * The Metrics service will send an Behavioral metric to InfluxDB for
512
- * aggregation.
513
- * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.
514
- *
515
- * @param {string} metricName Name of the metric (measurement) to send
516
- * @param {Object} metricFields Key-valye pairs of data or values about this metric
517
- * @param {Object} metricTags Key-value pairs of metric metadata
518
- *
519
- * @returns {void}
506
+ /**
507
+ * Uploads given metric to the Metrics service as an Behavioral metric.
508
+ * Metadata about the environment such as browser, OS, SDK and their versions
509
+ * are automatically added when the metric is sent.
510
+ *
511
+ * The Metrics service will send an Behavioral metric to InfluxDB for
512
+ * aggregation.
513
+ * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.
514
+ *
515
+ * @param {string} metricName Name of the metric (measurement) to send
516
+ * @param {Object} metricFields Key-valye pairs of data or values about this metric
517
+ * @param {Object} metricTags Key-value pairs of metric metadata
518
+ *
519
+ * @returns {void}
520
520
  */
521
521
  }, {
522
522
  key: "sendBehavioralMetric",
@@ -1 +1 @@
1
- {"version":3,"names":["_util","_interopRequireDefault","require","_uuid","_window","_ipAnonymize","_internalPluginMetrics","_loggerProxy","_constants","_browserDetection","_config","_BrowserDetection","BrowserDetection","getOSName","getOSVersion","getBrowserName","getBrowserVersion","anonymizeIPAddress","localIp","anonymize","triggerTimers","_ref","event","meeting","data","eventType","CALL_INITIATED","setStartCallInitiateJoinReq","LOCUS_JOIN_REQUEST","setEndCallInitiateJoinReq","setStartJoinReqResp","LOCUS_JOIN_RESPONSE","setEndJoinReqResp","setStartSetupDelay","mediaType","AUDIO","VIDEO","setStartSendingMediaDelay","RECEIVING_MEDIA_START","setEndSetupDelay","SENDING_MEDIA_START","setEndSendingMediaDelay","LOCAL_SDP_GENERATED","setStartLocalSDPGenRemoteSDPRecvDelay","REMOTE_SDP_RECEIVED","setEndLocalSDPGenRemoteSDPRecvDelay","Metrics","_classCallCheck2","default","_defineProperty2","instance","_events","meetingCollection","keys","_values","_createClass2","key","value","initialSetup","webex","postEvent","options","meetingId","_options$data","indexOf","LoggerProxy","logger","error","concat","get","callEvents","MEDIA_QUALITY","sendMediaQualityAnalyzerMetrics","push","sendCallAnalyzerMetrics","info","initPayload","identifiers","_this$webex$meetings$","_this$webex$meetings$2","payload","eventId","uuid","v4","version","origin","name","networkType","userAgent","userAgentToString","clientInfo","clientType","clientVersion","CLIENT_NAME","localNetworkPrefix","meetings","geoHintInfo","clientAddress","osVersion","subClientType","os","getOSNameInternal","browser","browserVersion","originTime","triggered","Date","toISOString","senderCountryCode","countryCode","canProceed","eventData","webClientDomain","window","location","hostname","Object","prototype","hasOwnProperty","call","errors","trigger","pstnAudioType","mediaCapabilities","recoveredBy","joinTimes","isRoapCallEnabled","initMediaPayload","_this$webex$meetings$3","_this$webex$meetings$4","arguments","length","undefined","audioSetupDelay","videoSetupDelay","UNKNOWN","intervals","intervalData","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","parseLocusError","err","showToUser","errorCode","statusCode","body","ERROR_CODE","MEETING_ERRORS","FREE_USER_MAX_PARTICIPANTS_EXCEEDED","PAID_USER_MAX_PARTICIPANTS_EXCEEDED","SERVICE_MAX_PARTICIPANTS_EXCEEDED","INACTIVE","EXCEEDED_MAX_JOINED_PARTICIPANTS","EXCEEDED_SERVICE_MAX_PARTICIPANTS","MEETING_IS_LOCKED","MEETING_IS_TERMINATING","MEETING_REQUIRE_MODERATOR_PIN_INTENT","MEETING_REQUIRE_MODERATOR_PIN","MEETING_REQUIRE_MODERATOR_ROLE","JOIN_RESTRICTED_USER","GET_RESTRICTED_USER","CREATE_MEDIA_RESTRICTED_USER","JOIN_RESTRICTED_USER_NOT_IN_ROOM","MEETING_NOT_FOUND","NOT_WEBEX_SITE","INVALID_JOIN_TIME","PHONE_NUMBER_NOT_A_NUMBER","PHONE_NUMBER_TOO_LONG","INVALID_DIALABLE_KEY","ONE_ON_ONE_TO_SELF_NOT_ALLOWED","REMOVED_PARTICIPANT","MEETING_LINK_NOT_FOUND","PHONE_NUMBER_TOO_SHORT_AFTER_IDD","INVALID_INVITEE_ADDRESS","PMR_ACCOUNT_LOCKED","RESOURCE_GUEST_FORBIDDEN","PMR_ACCOUNT_SUSPENDED","EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE","INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST","CONVERSATION_NOT_FOUND","RECORDING_CONTROL_NOT_SUPPORTED","RECORDING_NOT_STARTED","RECORDING_NOT_ENABLED","generateErrorPayload","LOCUS_RESPONSE","shownToUser","errorPayload","category","errorDescription","fatal","_includes2","notFatalErrorList","OTHER","errorData","httpCode","_this$webex$meetings","_this$webex$meetings$5","userAgentOption","browserInfo","util","format","metrics","clientName","toLowerCase","split","osInfo","process","env","NODE_ENV","sendBehavioralMetric","metricName","metricFields","metricTags","internal","submitClientMetrics","type","config","fields","tags","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport util from 'util';\n\nimport {includes} from 'lodash';\nimport uuid from 'uuid';\n// @ts-ignore\nimport window from 'global/window';\nimport anonymize from 'ip-anonymize';\n\n// @ts-ignore\nimport {getOSNameInternal} from '@webex/internal-plugin-metrics';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEETING_ERRORS} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\n\nimport {\n error,\n eventType,\n errorCodes as ERROR_CODE,\n UNKNOWN,\n CLIENT_NAME,\n mediaType,\n} from './config';\n\nconst {getOSName, getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\n// Apply a CIDR /28 format to the IPV4 and /96 to the IPV6 addresses\n// For reference : https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\nconst anonymizeIPAddress = (localIp) => anonymize(localIp, 28, 96);\n\nconst triggerTimers = ({event, meeting, data}) => {\n switch (event) {\n case eventType.CALL_INITIATED:\n meeting.setStartCallInitiateJoinReq();\n break;\n case eventType.LOCUS_JOIN_REQUEST:\n meeting.setEndCallInitiateJoinReq();\n meeting.setStartJoinReqResp();\n break;\n case eventType.LOCUS_JOIN_RESPONSE:\n meeting.setEndJoinReqResp();\n meeting.setStartSetupDelay(mediaType.AUDIO);\n meeting.setStartSetupDelay(mediaType.VIDEO);\n meeting.setStartSendingMediaDelay(mediaType.AUDIO);\n meeting.setStartSendingMediaDelay(mediaType.VIDEO);\n break;\n case eventType.RECEIVING_MEDIA_START:\n meeting.setEndSetupDelay(data.mediaType);\n break;\n case eventType.SENDING_MEDIA_START:\n meeting.setEndSendingMediaDelay(data.mediaType);\n break;\n case eventType.LOCAL_SDP_GENERATED:\n meeting.setStartLocalSDPGenRemoteSDPRecvDelay();\n break;\n case eventType.REMOTE_SDP_RECEIVED:\n meeting.setEndLocalSDPGenRemoteSDPRecvDelay();\n break;\n default:\n break;\n }\n};\n\n/**\n * @description Metrics handles all the call metrics events\n * @export\n * @class Metrics\n */\nclass Metrics {\n static instance: Metrics;\n\n _events: any;\n keys: any;\n meetingCollection: any;\n webex: any;\n\n /**\n * Create Metrics Object\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor() {\n if (!Metrics.instance) {\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof Metrics\n */\n this._events = [];\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.meetingCollection = null;\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.keys = Object.values(eventType);\n /**\n * @instance\n * @type {Metrics}\n * @private\n * @memberof Metrics\n */\n Metrics.instance = this;\n }\n\n // eslint-disable-next-line no-constructor-return\n return Metrics.instance;\n }\n\n /**\n * Initializes the Metrics singleton with a meeting Collection.\n *\n * @param {Object} meetingCollection meetings object\n * @param {Object} webex webex SDK object\n *\n * @returns {void}\n */\n initialSetup(meetingCollection: object, webex: object) {\n this.meetingCollection = meetingCollection;\n this.webex = webex;\n }\n\n /**\n * poste Meeting event metrics\n * @param {object} options {meetingId/meeting} as a json object\n * @param {Meeting} options.meeting Meeting object\n * @param {String} options.meetingId\n * @param {object} options.data\n * @param {object} options.event\n * @returns {object} null\n */\n postEvent(options: {meeting?: any; meetingId?: string; data?: object; event?: any} | any) {\n const {meetingId, data = {}, event} = options;\n let {meeting} = options;\n\n if (this.keys.indexOf(event) === -1) {\n LoggerProxy.logger.error(\n `Metrics:index#postEvent --> Event ${event} doesn't exist in dictionary`\n );\n }\n\n if (!meeting && meetingId) {\n meeting = this.meetingCollection.get(meetingId);\n options.meeting = meeting;\n }\n\n if (meeting) {\n triggerTimers(options);\n\n if (!meeting.callEvents) {\n meeting.callEvents = [];\n }\n if (event === eventType.MEDIA_QUALITY) {\n data.event = event;\n meeting.sendMediaQualityAnalyzerMetrics(data);\n } else {\n meeting.callEvents.push(event);\n data.event = event;\n meeting.sendCallAnalyzerMetrics(data);\n }\n } else {\n LoggerProxy.logger.info(\n `Metrics:index#postEvent --> Event received for meetingId:${meetingId}, but meeting not found in collection.`\n );\n }\n }\n\n /**\n * Docs for Call analyzer metrics\n * https://sqbu-github.cisco.com/WebExSquared/call-analyzer/wiki\n * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/master/diagnostic-events.raml\n */\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n initPayload(eventType, identifiers, options) {\n const payload: any = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n name: 'endpoint',\n networkType: 'unknown',\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType,\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress),\n osVersion: getOSVersion() || 'unknown',\n subClientType: options.subClientType,\n os: getOSNameInternal(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n },\n originTime: {\n triggered: new Date().toISOString(),\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n eventData: {webClientDomain: window.location.hostname},\n },\n };\n\n // TODO: more options should be checked and some of them should be mandatory in certain conditions\n if (options) {\n if (Object.prototype.hasOwnProperty.call(options, 'canProceed')) {\n payload.event.canProceed = options.canProceed;\n }\n if (options.errors) {\n payload.event.errors = options.errors;\n }\n if (options.mediaType) {\n payload.event.mediaType = options.mediaType;\n }\n if (options.trigger) {\n payload.event.trigger = options.trigger;\n }\n if (options.pstnAudioType) {\n payload.event.pstnAudioType = options.pstnAudioType;\n }\n if (options.mediaCapabilities) {\n payload.event.mediaCapabilities = options.mediaCapabilities;\n }\n if (options.recoveredBy) {\n payload.event.recoveredBy = options.recoveredBy;\n }\n if (options.joinTimes) {\n payload.event.joinTimes = options.joinTimes;\n }\n if (options.isRoapCallEnabled) {\n payload.event.isRoapCallEnabled = options.isRoapCallEnabled;\n }\n }\n\n return payload;\n }\n\n /**\n * get the payload specific for a media quality event through call analyzer\n * @param {String} eventType the event name\n * @param {Object} identifiers contains the identifiers needed for CA\n * @param {String} identifiers.correlationId\n * @param {String} identifiers.locusUrl\n * @param {String} identifiers.locusId\n * @param {Object} options\n * @param {Object} options.intervalData\n * @param {String} options.clientType\n * @returns {Object}\n * @public\n * @memberof Metrics\n */\n public initMediaPayload(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n eventType: string,\n identifiers: {\n correlationId: string;\n locusUrl: string;\n locusId: string;\n },\n options:\n | {\n intervalData: object;\n clientType: string;\n }\n | any = {}\n ) {\n const {audioSetupDelay, videoSetupDelay, joinTimes} = options;\n\n const payload = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n audioSetupDelay,\n videoSetupDelay,\n name: 'endpoint',\n networkType: options.networkType || UNKNOWN,\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType, // TODO: Only clientType: 'TEAMS_CLIENT' is whitelisted\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress),\n os: getOSNameInternal(),\n osVersion: getOSVersion() || UNKNOWN,\n subClientType: options.subClientType,\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n },\n originTime: {\n triggered: new Date().toISOString(),\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n intervals: [options.intervalData],\n joinTimes,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || UNKNOWN,\n startTime: new Date().toISOString(),\n },\n },\n };\n\n return payload;\n }\n\n /**\n * This function Parses a Locus error and returns a diagnostic event payload.\n * It should keep updating from:\n * https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Adapters/TelephonyAdapter/TelephonyAdapter.cpp#L920\n *\n * @param {Object} err the error Object from Locus response\n * @param {boolean} showToUser true if a toast is shown to user\n * @returns {{showToUser: boolean, category: string, errorDescription: string,\n * errorCode: number, errorData: *, fatal: boolean, name: string}}\n */\n parseLocusError(err: any, showToUser: boolean) {\n let errorCode;\n\n if (err && err.statusCode && err.statusCode >= 500) {\n errorCode = 1003;\n } else if (err && err.body && err.body.errorCode) {\n // locus error codes: https://sqbu-github.cisco.com/WebExSquared/locus/blob/master/server/src/main/resources/locus-error-codes.properties\n switch (ERROR_CODE[err.body.errorCode]) {\n case MEETING_ERRORS.FREE_USER_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3007;\n break;\n case MEETING_ERRORS.PAID_USER_MAX_PARTICIPANTS_EXCEEDED:\n case MEETING_ERRORS.SERVICE_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3002;\n break;\n case MEETING_ERRORS.INACTIVE:\n errorCode = 4001;\n break;\n case MEETING_ERRORS.EXCEEDED_MAX_JOINED_PARTICIPANTS:\n case MEETING_ERRORS.EXCEEDED_SERVICE_MAX_PARTICIPANTS:\n errorCode = 3001;\n break;\n case MEETING_ERRORS.MEETING_IS_LOCKED:\n errorCode = 4002;\n break;\n case MEETING_ERRORS.MEETING_IS_TERMINATING:\n errorCode = 4003;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN_INTENT:\n errorCode = 4004;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN:\n errorCode = 4005;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_ROLE:\n errorCode = 4006;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER:\n case MEETING_ERRORS.GET_RESTRICTED_USER:\n case MEETING_ERRORS.CREATE_MEDIA_RESTRICTED_USER:\n errorCode = 3005;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER_NOT_IN_ROOM:\n errorCode = 4007;\n break;\n case MEETING_ERRORS.MEETING_NOT_FOUND:\n errorCode = 4011;\n break;\n case MEETING_ERRORS.NOT_WEBEX_SITE:\n errorCode = 4012;\n break;\n case MEETING_ERRORS.INVALID_JOIN_TIME:\n errorCode = 4013;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_NOT_A_NUMBER:\n errorCode = 4016;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_LONG:\n errorCode = 4017;\n break;\n case MEETING_ERRORS.INVALID_DIALABLE_KEY:\n errorCode = 4018;\n break;\n case MEETING_ERRORS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED:\n errorCode = 4019;\n break;\n case MEETING_ERRORS.REMOVED_PARTICIPANT:\n errorCode = 4020;\n break;\n case MEETING_ERRORS.MEETING_LINK_NOT_FOUND:\n errorCode = 4021;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD:\n errorCode = 4022;\n break;\n case MEETING_ERRORS.INVALID_INVITEE_ADDRESS:\n errorCode = 4023;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_LOCKED:\n errorCode = 4024;\n break;\n case MEETING_ERRORS.RESOURCE_GUEST_FORBIDDEN:\n errorCode = 4025;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_SUSPENDED:\n errorCode = 4026;\n break;\n case MEETING_ERRORS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE:\n errorCode = 4027;\n break;\n case MEETING_ERRORS.INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST:\n errorCode = 1006;\n break;\n case MEETING_ERRORS.CONVERSATION_NOT_FOUND:\n errorCode = 4028;\n break;\n case MEETING_ERRORS.RECORDING_CONTROL_NOT_SUPPORTED:\n case MEETING_ERRORS.RECORDING_NOT_STARTED:\n case MEETING_ERRORS.RECORDING_NOT_ENABLED:\n errorCode = 4029;\n break;\n default:\n errorCode = 4008;\n }\n } else {\n errorCode = 4008;\n }\n\n return this.generateErrorPayload(errorCode, showToUser, error.name.LOCUS_RESPONSE, err);\n }\n\n generateErrorPayload(errorCode, shownToUser, name, err) {\n if (error.errors[errorCode]) {\n const errorPayload: any = {\n shownToUser: shownToUser || false,\n category: error.errors[errorCode][2],\n errorDescription: error.errors[errorCode][0],\n errorCode,\n fatal: !includes(error.notFatalErrorList, errorCode),\n name: name || error.name.OTHER,\n };\n\n if (err && err.body) {\n errorPayload.errorData = err.body;\n }\n\n if (err && err.statusCode) {\n errorPayload.httpCode = err.statusCode;\n }\n\n return errorPayload;\n }\n\n return null;\n }\n\n /**\n * Returns a formated string of the user agent.\n *\n * @returns {string} formatted user agent information\n */\n userAgentToString() {\n let userAgentOption;\n let browserInfo;\n const clientInfo = util.format('client=%s', `${this.webex.meetings?.metrics?.clientName}`);\n\n if (\n ['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !==\n -1\n ) {\n browserInfo = util.format(\n 'browser=%s',\n `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`\n );\n }\n const osInfo = util.format('os=%s', `${getOSName()}/${getOSVersion().split('.')[0]}`);\n\n if (browserInfo) {\n userAgentOption = `(${browserInfo}`;\n }\n if (osInfo) {\n userAgentOption = userAgentOption\n ? `${userAgentOption}; ${clientInfo}; ${osInfo}`\n : `${clientInfo}; (${osInfo}`;\n }\n if (userAgentOption) {\n userAgentOption += ')';\n\n return util.format(\n 'webex-js-sdk/%s %s',\n `${process.env.NODE_ENV}-${this.webex.version}`,\n userAgentOption\n );\n }\n\n return util.format('webex-js-sdk/%s', `${process.env.NODE_ENV}-${this.webex.version}`);\n }\n\n /**\n * Uploads given metric to the Metrics service as an Behavioral metric.\n * Metadata about the environment such as browser, OS, SDK and their versions\n * are automatically added when the metric is sent.\n *\n * The Metrics service will send an Behavioral metric to InfluxDB for\n * aggregation.\n * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.\n *\n * @param {string} metricName Name of the metric (measurement) to send\n * @param {Object} metricFields Key-valye pairs of data or values about this metric\n * @param {Object} metricTags Key-value pairs of metric metadata\n *\n * @returns {void}\n */\n sendBehavioralMetric(metricName: string, metricFields: object = {}, metricTags: object = {}) {\n this.webex.internal.metrics.submitClientMetrics(metricName, {\n type: this.webex.config.metrics.type,\n fields: metricFields,\n tags: metricTags,\n });\n }\n}\n\n// Export Metrics singleton ---------------------------------------------------\nconst instance = new Metrics();\n\nexport default instance;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_util","_interopRequireDefault","require","_uuid","_window","_ipAnonymize","_internalPluginMetrics","_loggerProxy","_constants","_browserDetection","_config","_BrowserDetection","BrowserDetection","getOSName","getOSVersion","getBrowserName","getBrowserVersion","anonymizeIPAddress","localIp","anonymize","triggerTimers","_ref","event","meeting","data","eventType","CALL_INITIATED","setStartCallInitiateJoinReq","LOCUS_JOIN_REQUEST","setEndCallInitiateJoinReq","setStartJoinReqResp","LOCUS_JOIN_RESPONSE","setEndJoinReqResp","setStartSetupDelay","mediaType","AUDIO","VIDEO","setStartSendingMediaDelay","RECEIVING_MEDIA_START","setEndSetupDelay","SENDING_MEDIA_START","setEndSendingMediaDelay","LOCAL_SDP_GENERATED","setStartLocalSDPGenRemoteSDPRecvDelay","REMOTE_SDP_RECEIVED","setEndLocalSDPGenRemoteSDPRecvDelay","Metrics","_classCallCheck2","default","_defineProperty2","instance","_events","meetingCollection","keys","_values","_createClass2","key","value","initialSetup","webex","postEvent","options","meetingId","_options$data","indexOf","LoggerProxy","logger","error","concat","get","callEvents","MEDIA_QUALITY","sendMediaQualityAnalyzerMetrics","push","sendCallAnalyzerMetrics","info","initPayload","identifiers","_this$webex$meetings$","_this$webex$meetings$2","payload","eventId","uuid","v4","version","origin","name","networkType","userAgent","userAgentToString","clientInfo","clientType","clientVersion","CLIENT_NAME","localNetworkPrefix","meetings","geoHintInfo","clientAddress","osVersion","subClientType","os","getOSNameInternal","browser","browserVersion","originTime","triggered","Date","toISOString","senderCountryCode","countryCode","canProceed","eventData","webClientDomain","window","location","hostname","Object","prototype","hasOwnProperty","call","errors","trigger","pstnAudioType","mediaCapabilities","recoveredBy","joinTimes","isRoapCallEnabled","initMediaPayload","_this$webex$meetings$3","_this$webex$meetings$4","arguments","length","undefined","audioSetupDelay","videoSetupDelay","UNKNOWN","intervals","intervalData","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","parseLocusError","err","showToUser","errorCode","statusCode","body","ERROR_CODE","MEETING_ERRORS","FREE_USER_MAX_PARTICIPANTS_EXCEEDED","PAID_USER_MAX_PARTICIPANTS_EXCEEDED","SERVICE_MAX_PARTICIPANTS_EXCEEDED","INACTIVE","EXCEEDED_MAX_JOINED_PARTICIPANTS","EXCEEDED_SERVICE_MAX_PARTICIPANTS","MEETING_IS_LOCKED","MEETING_IS_TERMINATING","MEETING_REQUIRE_MODERATOR_PIN_INTENT","MEETING_REQUIRE_MODERATOR_PIN","MEETING_REQUIRE_MODERATOR_ROLE","JOIN_RESTRICTED_USER","GET_RESTRICTED_USER","CREATE_MEDIA_RESTRICTED_USER","JOIN_RESTRICTED_USER_NOT_IN_ROOM","MEETING_NOT_FOUND","NOT_WEBEX_SITE","INVALID_JOIN_TIME","PHONE_NUMBER_NOT_A_NUMBER","PHONE_NUMBER_TOO_LONG","INVALID_DIALABLE_KEY","ONE_ON_ONE_TO_SELF_NOT_ALLOWED","REMOVED_PARTICIPANT","MEETING_LINK_NOT_FOUND","PHONE_NUMBER_TOO_SHORT_AFTER_IDD","INVALID_INVITEE_ADDRESS","PMR_ACCOUNT_LOCKED","RESOURCE_GUEST_FORBIDDEN","PMR_ACCOUNT_SUSPENDED","EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE","INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST","CONVERSATION_NOT_FOUND","RECORDING_CONTROL_NOT_SUPPORTED","RECORDING_NOT_STARTED","RECORDING_NOT_ENABLED","generateErrorPayload","LOCUS_RESPONSE","shownToUser","errorPayload","category","errorDescription","fatal","_includes2","notFatalErrorList","OTHER","errorData","httpCode","_this$webex$meetings","_this$webex$meetings$5","userAgentOption","browserInfo","util","format","metrics","clientName","toLowerCase","split","osInfo","process","env","NODE_ENV","sendBehavioralMetric","metricName","metricFields","metricTags","internal","submitClientMetrics","type","config","fields","tags","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\nimport util from 'util';\r\n\r\nimport {includes} from 'lodash';\r\nimport uuid from 'uuid';\r\n// @ts-ignore\r\nimport window from 'global/window';\r\nimport anonymize from 'ip-anonymize';\r\n\r\n// @ts-ignore\r\nimport {getOSNameInternal} from '@webex/internal-plugin-metrics';\r\nimport LoggerProxy from '../common/logs/logger-proxy';\r\nimport {MEETING_ERRORS} from '../constants';\r\nimport BrowserDetection from '../common/browser-detection';\r\n\r\nimport {\r\n error,\r\n eventType,\r\n errorCodes as ERROR_CODE,\r\n UNKNOWN,\r\n CLIENT_NAME,\r\n mediaType,\r\n} from './config';\r\n\r\nconst {getOSName, getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\r\n\r\n// Apply a CIDR /28 format to the IPV4 and /96 to the IPV6 addresses\r\n// For reference : https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\r\nconst anonymizeIPAddress = (localIp) => anonymize(localIp, 28, 96);\r\n\r\nconst triggerTimers = ({event, meeting, data}) => {\r\n switch (event) {\r\n case eventType.CALL_INITIATED:\r\n meeting.setStartCallInitiateJoinReq();\r\n break;\r\n case eventType.LOCUS_JOIN_REQUEST:\r\n meeting.setEndCallInitiateJoinReq();\r\n meeting.setStartJoinReqResp();\r\n break;\r\n case eventType.LOCUS_JOIN_RESPONSE:\r\n meeting.setEndJoinReqResp();\r\n meeting.setStartSetupDelay(mediaType.AUDIO);\r\n meeting.setStartSetupDelay(mediaType.VIDEO);\r\n meeting.setStartSendingMediaDelay(mediaType.AUDIO);\r\n meeting.setStartSendingMediaDelay(mediaType.VIDEO);\r\n break;\r\n case eventType.RECEIVING_MEDIA_START:\r\n meeting.setEndSetupDelay(data.mediaType);\r\n break;\r\n case eventType.SENDING_MEDIA_START:\r\n meeting.setEndSendingMediaDelay(data.mediaType);\r\n break;\r\n case eventType.LOCAL_SDP_GENERATED:\r\n meeting.setStartLocalSDPGenRemoteSDPRecvDelay();\r\n break;\r\n case eventType.REMOTE_SDP_RECEIVED:\r\n meeting.setEndLocalSDPGenRemoteSDPRecvDelay();\r\n break;\r\n default:\r\n break;\r\n }\r\n};\r\n\r\n/**\r\n * @description Metrics handles all the call metrics events\r\n * @export\r\n * @class Metrics\r\n */\r\nclass Metrics {\r\n static instance: Metrics;\r\n\r\n _events: any;\r\n keys: any;\r\n meetingCollection: any;\r\n webex: any;\r\n\r\n /**\r\n * Create Metrics Object\r\n * @constructor\r\n * @public\r\n * @memberof Meetings\r\n */\r\n constructor() {\r\n if (!Metrics.instance) {\r\n /**\r\n * @instance\r\n * @type {Array}\r\n * @private\r\n * @memberof Metrics\r\n */\r\n this._events = [];\r\n /**\r\n * @instance\r\n * @type {MeetingCollection}\r\n * @private\r\n * @memberof Metrics\r\n */\r\n this.meetingCollection = null;\r\n /**\r\n * @instance\r\n * @type {MeetingCollection}\r\n * @private\r\n * @memberof Metrics\r\n */\r\n this.keys = Object.values(eventType);\r\n /**\r\n * @instance\r\n * @type {Metrics}\r\n * @private\r\n * @memberof Metrics\r\n */\r\n Metrics.instance = this;\r\n }\r\n\r\n // eslint-disable-next-line no-constructor-return\r\n return Metrics.instance;\r\n }\r\n\r\n /**\r\n * Initializes the Metrics singleton with a meeting Collection.\r\n *\r\n * @param {Object} meetingCollection meetings object\r\n * @param {Object} webex webex SDK object\r\n *\r\n * @returns {void}\r\n */\r\n initialSetup(meetingCollection: object, webex: object) {\r\n this.meetingCollection = meetingCollection;\r\n this.webex = webex;\r\n }\r\n\r\n /**\r\n * poste Meeting event metrics\r\n * @param {object} options {meetingId/meeting} as a json object\r\n * @param {Meeting} options.meeting Meeting object\r\n * @param {String} options.meetingId\r\n * @param {object} options.data\r\n * @param {object} options.event\r\n * @returns {object} null\r\n */\r\n postEvent(options: {meeting?: any; meetingId?: string; data?: object; event?: any} | any) {\r\n const {meetingId, data = {}, event} = options;\r\n let {meeting} = options;\r\n\r\n if (this.keys.indexOf(event) === -1) {\r\n LoggerProxy.logger.error(\r\n `Metrics:index#postEvent --> Event ${event} doesn't exist in dictionary`\r\n );\r\n }\r\n\r\n if (!meeting && meetingId) {\r\n meeting = this.meetingCollection.get(meetingId);\r\n options.meeting = meeting;\r\n }\r\n\r\n if (meeting) {\r\n triggerTimers(options);\r\n\r\n if (!meeting.callEvents) {\r\n meeting.callEvents = [];\r\n }\r\n if (event === eventType.MEDIA_QUALITY) {\r\n data.event = event;\r\n meeting.sendMediaQualityAnalyzerMetrics(data);\r\n } else {\r\n meeting.callEvents.push(event);\r\n data.event = event;\r\n meeting.sendCallAnalyzerMetrics(data);\r\n }\r\n } else {\r\n LoggerProxy.logger.info(\r\n `Metrics:index#postEvent --> Event received for meetingId:${meetingId}, but meeting not found in collection.`\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Docs for Call analyzer metrics\r\n * https://sqbu-github.cisco.com/WebExSquared/call-analyzer/wiki\r\n * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/master/diagnostic-events.raml\r\n */\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n initPayload(eventType, identifiers, options) {\r\n const payload: any = {\r\n eventId: uuid.v4(),\r\n version: 1,\r\n origin: {\r\n name: 'endpoint',\r\n networkType: 'unknown',\r\n userAgent: this.userAgentToString(),\r\n clientInfo: {\r\n clientType: options.clientType,\r\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\r\n localNetworkPrefix: anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress),\r\n osVersion: getOSVersion() || 'unknown',\r\n subClientType: options.subClientType,\r\n os: getOSNameInternal(),\r\n browser: getBrowserName(),\r\n browserVersion: getBrowserVersion(),\r\n },\r\n },\r\n originTime: {\r\n triggered: new Date().toISOString(),\r\n },\r\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\r\n event: {\r\n name: eventType,\r\n canProceed: true,\r\n identifiers,\r\n eventData: {webClientDomain: window.location.hostname},\r\n },\r\n };\r\n\r\n // TODO: more options should be checked and some of them should be mandatory in certain conditions\r\n if (options) {\r\n if (Object.prototype.hasOwnProperty.call(options, 'canProceed')) {\r\n payload.event.canProceed = options.canProceed;\r\n }\r\n if (options.errors) {\r\n payload.event.errors = options.errors;\r\n }\r\n if (options.mediaType) {\r\n payload.event.mediaType = options.mediaType;\r\n }\r\n if (options.trigger) {\r\n payload.event.trigger = options.trigger;\r\n }\r\n if (options.pstnAudioType) {\r\n payload.event.pstnAudioType = options.pstnAudioType;\r\n }\r\n if (options.mediaCapabilities) {\r\n payload.event.mediaCapabilities = options.mediaCapabilities;\r\n }\r\n if (options.recoveredBy) {\r\n payload.event.recoveredBy = options.recoveredBy;\r\n }\r\n if (options.joinTimes) {\r\n payload.event.joinTimes = options.joinTimes;\r\n }\r\n if (options.isRoapCallEnabled) {\r\n payload.event.isRoapCallEnabled = options.isRoapCallEnabled;\r\n }\r\n }\r\n\r\n return payload;\r\n }\r\n\r\n /**\r\n * get the payload specific for a media quality event through call analyzer\r\n * @param {String} eventType the event name\r\n * @param {Object} identifiers contains the identifiers needed for CA\r\n * @param {String} identifiers.correlationId\r\n * @param {String} identifiers.locusUrl\r\n * @param {String} identifiers.locusId\r\n * @param {Object} options\r\n * @param {Object} options.intervalData\r\n * @param {String} options.clientType\r\n * @returns {Object}\r\n * @public\r\n * @memberof Metrics\r\n */\r\n public initMediaPayload(\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n eventType: string,\r\n identifiers: {\r\n correlationId: string;\r\n locusUrl: string;\r\n locusId: string;\r\n },\r\n options:\r\n | {\r\n intervalData: object;\r\n clientType: string;\r\n }\r\n | any = {}\r\n ) {\r\n const {audioSetupDelay, videoSetupDelay, joinTimes} = options;\r\n\r\n const payload = {\r\n eventId: uuid.v4(),\r\n version: 1,\r\n origin: {\r\n audioSetupDelay,\r\n videoSetupDelay,\r\n name: 'endpoint',\r\n networkType: options.networkType || UNKNOWN,\r\n userAgent: this.userAgentToString(),\r\n clientInfo: {\r\n clientType: options.clientType, // TODO: Only clientType: 'TEAMS_CLIENT' is whitelisted\r\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\r\n localNetworkPrefix: anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress),\r\n os: getOSNameInternal(),\r\n osVersion: getOSVersion() || UNKNOWN,\r\n subClientType: options.subClientType,\r\n browser: getBrowserName(),\r\n browserVersion: getBrowserVersion(),\r\n },\r\n },\r\n originTime: {\r\n triggered: new Date().toISOString(),\r\n },\r\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\r\n event: {\r\n name: eventType,\r\n canProceed: true,\r\n identifiers,\r\n intervals: [options.intervalData],\r\n joinTimes,\r\n eventData: {\r\n webClientDomain: window.location.hostname,\r\n },\r\n sourceMetadata: {\r\n applicationSoftwareType: CLIENT_NAME,\r\n applicationSoftwareVersion: this.webex.version,\r\n mediaEngineSoftwareType: getBrowserName() || 'browser',\r\n mediaEngineSoftwareVersion: getOSVersion() || UNKNOWN,\r\n startTime: new Date().toISOString(),\r\n },\r\n },\r\n };\r\n\r\n return payload;\r\n }\r\n\r\n /**\r\n * This function Parses a Locus error and returns a diagnostic event payload.\r\n * It should keep updating from:\r\n * https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Adapters/TelephonyAdapter/TelephonyAdapter.cpp#L920\r\n *\r\n * @param {Object} err the error Object from Locus response\r\n * @param {boolean} showToUser true if a toast is shown to user\r\n * @returns {{showToUser: boolean, category: string, errorDescription: string,\r\n * errorCode: number, errorData: *, fatal: boolean, name: string}}\r\n */\r\n parseLocusError(err: any, showToUser: boolean) {\r\n let errorCode;\r\n\r\n if (err && err.statusCode && err.statusCode >= 500) {\r\n errorCode = 1003;\r\n } else if (err && err.body && err.body.errorCode) {\r\n // locus error codes: https://sqbu-github.cisco.com/WebExSquared/locus/blob/master/server/src/main/resources/locus-error-codes.properties\r\n switch (ERROR_CODE[err.body.errorCode]) {\r\n case MEETING_ERRORS.FREE_USER_MAX_PARTICIPANTS_EXCEEDED:\r\n errorCode = 3007;\r\n break;\r\n case MEETING_ERRORS.PAID_USER_MAX_PARTICIPANTS_EXCEEDED:\r\n case MEETING_ERRORS.SERVICE_MAX_PARTICIPANTS_EXCEEDED:\r\n errorCode = 3002;\r\n break;\r\n case MEETING_ERRORS.INACTIVE:\r\n errorCode = 4001;\r\n break;\r\n case MEETING_ERRORS.EXCEEDED_MAX_JOINED_PARTICIPANTS:\r\n case MEETING_ERRORS.EXCEEDED_SERVICE_MAX_PARTICIPANTS:\r\n errorCode = 3001;\r\n break;\r\n case MEETING_ERRORS.MEETING_IS_LOCKED:\r\n errorCode = 4002;\r\n break;\r\n case MEETING_ERRORS.MEETING_IS_TERMINATING:\r\n errorCode = 4003;\r\n break;\r\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN_INTENT:\r\n errorCode = 4004;\r\n break;\r\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN:\r\n errorCode = 4005;\r\n break;\r\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_ROLE:\r\n errorCode = 4006;\r\n break;\r\n case MEETING_ERRORS.JOIN_RESTRICTED_USER:\r\n case MEETING_ERRORS.GET_RESTRICTED_USER:\r\n case MEETING_ERRORS.CREATE_MEDIA_RESTRICTED_USER:\r\n errorCode = 3005;\r\n break;\r\n case MEETING_ERRORS.JOIN_RESTRICTED_USER_NOT_IN_ROOM:\r\n errorCode = 4007;\r\n break;\r\n case MEETING_ERRORS.MEETING_NOT_FOUND:\r\n errorCode = 4011;\r\n break;\r\n case MEETING_ERRORS.NOT_WEBEX_SITE:\r\n errorCode = 4012;\r\n break;\r\n case MEETING_ERRORS.INVALID_JOIN_TIME:\r\n errorCode = 4013;\r\n break;\r\n case MEETING_ERRORS.PHONE_NUMBER_NOT_A_NUMBER:\r\n errorCode = 4016;\r\n break;\r\n case MEETING_ERRORS.PHONE_NUMBER_TOO_LONG:\r\n errorCode = 4017;\r\n break;\r\n case MEETING_ERRORS.INVALID_DIALABLE_KEY:\r\n errorCode = 4018;\r\n break;\r\n case MEETING_ERRORS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED:\r\n errorCode = 4019;\r\n break;\r\n case MEETING_ERRORS.REMOVED_PARTICIPANT:\r\n errorCode = 4020;\r\n break;\r\n case MEETING_ERRORS.MEETING_LINK_NOT_FOUND:\r\n errorCode = 4021;\r\n break;\r\n case MEETING_ERRORS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD:\r\n errorCode = 4022;\r\n break;\r\n case MEETING_ERRORS.INVALID_INVITEE_ADDRESS:\r\n errorCode = 4023;\r\n break;\r\n case MEETING_ERRORS.PMR_ACCOUNT_LOCKED:\r\n errorCode = 4024;\r\n break;\r\n case MEETING_ERRORS.RESOURCE_GUEST_FORBIDDEN:\r\n errorCode = 4025;\r\n break;\r\n case MEETING_ERRORS.PMR_ACCOUNT_SUSPENDED:\r\n errorCode = 4026;\r\n break;\r\n case MEETING_ERRORS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE:\r\n errorCode = 4027;\r\n break;\r\n case MEETING_ERRORS.INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST:\r\n errorCode = 1006;\r\n break;\r\n case MEETING_ERRORS.CONVERSATION_NOT_FOUND:\r\n errorCode = 4028;\r\n break;\r\n case MEETING_ERRORS.RECORDING_CONTROL_NOT_SUPPORTED:\r\n case MEETING_ERRORS.RECORDING_NOT_STARTED:\r\n case MEETING_ERRORS.RECORDING_NOT_ENABLED:\r\n errorCode = 4029;\r\n break;\r\n default:\r\n errorCode = 4008;\r\n }\r\n } else {\r\n errorCode = 4008;\r\n }\r\n\r\n return this.generateErrorPayload(errorCode, showToUser, error.name.LOCUS_RESPONSE, err);\r\n }\r\n\r\n generateErrorPayload(errorCode, shownToUser, name, err) {\r\n if (error.errors[errorCode]) {\r\n const errorPayload: any = {\r\n shownToUser: shownToUser || false,\r\n category: error.errors[errorCode][2],\r\n errorDescription: error.errors[errorCode][0],\r\n errorCode,\r\n fatal: !includes(error.notFatalErrorList, errorCode),\r\n name: name || error.name.OTHER,\r\n };\r\n\r\n if (err && err.body) {\r\n errorPayload.errorData = err.body;\r\n }\r\n\r\n if (err && err.statusCode) {\r\n errorPayload.httpCode = err.statusCode;\r\n }\r\n\r\n return errorPayload;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns a formated string of the user agent.\r\n *\r\n * @returns {string} formatted user agent information\r\n */\r\n userAgentToString() {\r\n let userAgentOption;\r\n let browserInfo;\r\n const clientInfo = util.format('client=%s', `${this.webex.meetings?.metrics?.clientName}`);\r\n\r\n if (\r\n ['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !==\r\n -1\r\n ) {\r\n browserInfo = util.format(\r\n 'browser=%s',\r\n `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`\r\n );\r\n }\r\n const osInfo = util.format('os=%s', `${getOSName()}/${getOSVersion().split('.')[0]}`);\r\n\r\n if (browserInfo) {\r\n userAgentOption = `(${browserInfo}`;\r\n }\r\n if (osInfo) {\r\n userAgentOption = userAgentOption\r\n ? `${userAgentOption}; ${clientInfo}; ${osInfo}`\r\n : `${clientInfo}; (${osInfo}`;\r\n }\r\n if (userAgentOption) {\r\n userAgentOption += ')';\r\n\r\n return util.format(\r\n 'webex-js-sdk/%s %s',\r\n `${process.env.NODE_ENV}-${this.webex.version}`,\r\n userAgentOption\r\n );\r\n }\r\n\r\n return util.format('webex-js-sdk/%s', `${process.env.NODE_ENV}-${this.webex.version}`);\r\n }\r\n\r\n /**\r\n * Uploads given metric to the Metrics service as an Behavioral metric.\r\n * Metadata about the environment such as browser, OS, SDK and their versions\r\n * are automatically added when the metric is sent.\r\n *\r\n * The Metrics service will send an Behavioral metric to InfluxDB for\r\n * aggregation.\r\n * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.\r\n *\r\n * @param {string} metricName Name of the metric (measurement) to send\r\n * @param {Object} metricFields Key-valye pairs of data or values about this metric\r\n * @param {Object} metricTags Key-value pairs of metric metadata\r\n *\r\n * @returns {void}\r\n */\r\n sendBehavioralMetric(metricName: string, metricFields: object = {}, metricTags: object = {}) {\r\n this.webex.internal.metrics.submitClientMetrics(metricName, {\r\n type: this.webex.config.metrics.type,\r\n fields: metricFields,\r\n tags: metricTags,\r\n });\r\n }\r\n}\r\n\r\n// Export Metrics singleton ---------------------------------------------------\r\nconst instance = new Metrics();\r\n\r\nexport default instance;\r\n"],"mappings":"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"}
@@ -1,70 +1,70 @@
1
- import EventsScope from '../common/events/events-scope';
2
- /**
3
- * Meeting - network quality event
4
- * Emitted on each interval of retrieving stats Analyzer data
5
- * @event network:quality
6
- * @type {Object}
7
- * @property {string} mediaType {video|audio}
8
- * @property {number} networkQualityScore - value determined in determineUplinkNetworkQuality
9
- * @memberof NetworkQualityMonitor
10
- */
11
- /**
12
- * NetworkQualityMonitor class that will emit events based on detected quality
13
- *
14
- * @class NetworkQualityMonitor
15
- * @extends {EventsScope}
16
- */
17
- export default class NetworkQualityMonitor extends EventsScope {
18
- config: any;
19
- frequencyTypes: any;
20
- indicatorTypes: any;
21
- mediaType: any;
22
- networkQualityScore: any;
23
- networkQualityStatus: any;
24
- /**
25
- * Creates a new instance of NetworkQualityMonitor
26
- * @constructor
27
- * @public
28
- * @param {Object} config
29
- * @property {Object} indicatorTypes - network properties used to evaluate network quality used as constants
30
- * @property {Object} frequencyTypes - frequency properties used as constants {uplink|send} {downlink|receive}
31
- * @property {number} networkQualityScore - 0|1 1 is acceptable 0 is bad/unknown
32
- * @property {Object} networkQualityStatus - hash object based on indicatorTypes and frequencyTypes
33
- * @property {string} mediaType - audio|video
34
- */
35
- constructor(config: any);
36
- /**
37
- * emits NETWORK_QUALITY event on meeting with payload of media type and uplinkNetworkQuality score
38
- *
39
- * @memberof NetworkQualityMonitor
40
- * @returns {void}
41
- */
42
- emitNetworkQuality(): void;
43
- /**
44
- * invokes emitNetworkQuality method resets values back to default
45
- * @returns {void}
46
- * @memberof NetworkQualityMonitor
47
- */
48
- updateNetworkQualityStatus(): void;
49
- /**
50
- * filter data to determine uplink network quality, invoked on same interval as stats analyzer remote-inbout-rtp
51
- * @param {Object} configObj
52
- * @param {string} configObj.mediaType {audio|video}
53
- * @param {RTCStats} configObj.remoteRtpResults RTC stats remote obj
54
- * @param {Object} configObj.statsAnalyzerCurrentStats statsResults
55
- * @returns {void}
56
- * @public
57
- * @memberof NetworkQualityMonitor
58
- */
59
- determineUplinkNetworkQuality({ mediaType, remoteRtpResults, statsAnalyzerCurrentStats, }: {
60
- mediaType: string;
61
- remoteRtpResults: any;
62
- statsAnalyzerCurrentStats: object;
63
- }): void;
64
- /**
65
- * Get the current status of network quaility object - networkQualityStatus
66
- * @returns {Object}
67
- * @public
68
- */
69
- get networkQualityStats(): any;
70
- }
1
+ import EventsScope from '../common/events/events-scope';
2
+ /**
3
+ * Meeting - network quality event
4
+ * Emitted on each interval of retrieving stats Analyzer data
5
+ * @event network:quality
6
+ * @type {Object}
7
+ * @property {string} mediaType {video|audio}
8
+ * @property {number} networkQualityScore - value determined in determineUplinkNetworkQuality
9
+ * @memberof NetworkQualityMonitor
10
+ */
11
+ /**
12
+ * NetworkQualityMonitor class that will emit events based on detected quality
13
+ *
14
+ * @class NetworkQualityMonitor
15
+ * @extends {EventsScope}
16
+ */
17
+ export default class NetworkQualityMonitor extends EventsScope {
18
+ config: any;
19
+ frequencyTypes: any;
20
+ indicatorTypes: any;
21
+ mediaType: any;
22
+ networkQualityScore: any;
23
+ networkQualityStatus: any;
24
+ /**
25
+ * Creates a new instance of NetworkQualityMonitor
26
+ * @constructor
27
+ * @public
28
+ * @param {Object} config
29
+ * @property {Object} indicatorTypes - network properties used to evaluate network quality used as constants
30
+ * @property {Object} frequencyTypes - frequency properties used as constants {uplink|send} {downlink|receive}
31
+ * @property {number} networkQualityScore - 0|1 1 is acceptable 0 is bad/unknown
32
+ * @property {Object} networkQualityStatus - hash object based on indicatorTypes and frequencyTypes
33
+ * @property {string} mediaType - audio|video
34
+ */
35
+ constructor(config: any);
36
+ /**
37
+ * emits NETWORK_QUALITY event on meeting with payload of media type and uplinkNetworkQuality score
38
+ *
39
+ * @memberof NetworkQualityMonitor
40
+ * @returns {void}
41
+ */
42
+ emitNetworkQuality(): void;
43
+ /**
44
+ * invokes emitNetworkQuality method resets values back to default
45
+ * @returns {void}
46
+ * @memberof NetworkQualityMonitor
47
+ */
48
+ updateNetworkQualityStatus(): void;
49
+ /**
50
+ * filter data to determine uplink network quality, invoked on same interval as stats analyzer remote-inbout-rtp
51
+ * @param {Object} configObj
52
+ * @param {string} configObj.mediaType {audio|video}
53
+ * @param {RTCStats} configObj.remoteRtpResults RTC stats remote obj
54
+ * @param {Object} configObj.statsAnalyzerCurrentStats statsResults
55
+ * @returns {void}
56
+ * @public
57
+ * @memberof NetworkQualityMonitor
58
+ */
59
+ determineUplinkNetworkQuality({ mediaType, remoteRtpResults, statsAnalyzerCurrentStats, }: {
60
+ mediaType: string;
61
+ remoteRtpResults: any;
62
+ statsAnalyzerCurrentStats: object;
63
+ }): void;
64
+ /**
65
+ * Get the current status of network quaility object - networkQualityStatus
66
+ * @returns {Object}
67
+ * @public
68
+ */
69
+ get networkQualityStats(): any;
70
+ }