@webex/plugin-meetings 3.0.0-beta.17 → 3.0.0-beta.170

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 (427) hide show
  1. package/README.md +45 -1
  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 +359 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +216 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +23 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +52 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +45 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1048 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +78 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +67 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +3 -2
  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/config.js +6 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +194 -28
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +300 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +95 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +214 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +92 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +350 -41
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/mediaSharesUtils.js +43 -1
  53. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  54. package/dist/locus-info/parser.js +2 -1
  55. package/dist/locus-info/parser.js.map +1 -1
  56. package/dist/locus-info/selfUtils.js +97 -14
  57. package/dist/locus-info/selfUtils.js.map +1 -1
  58. package/dist/media/index.js +39 -134
  59. package/dist/media/index.js.map +1 -1
  60. package/dist/media/properties.js +19 -97
  61. package/dist/media/properties.js.map +1 -1
  62. package/dist/mediaQualityMetrics/config.js +505 -493
  63. package/dist/mediaQualityMetrics/config.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +76 -2
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +2640 -2436
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +291 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +229 -124
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +191 -167
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/request.type.js.map +1 -1
  75. package/dist/meeting/util.js +477 -466
  76. package/dist/meeting/util.js.map +1 -1
  77. package/dist/meeting-info/index.js +48 -7
  78. package/dist/meeting-info/index.js.map +1 -1
  79. package/dist/meeting-info/meeting-info-v2.js +172 -50
  80. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  81. package/dist/meeting-info/utilv2.js +20 -5
  82. package/dist/meeting-info/utilv2.js.map +1 -1
  83. package/dist/meetings/collection.js +22 -0
  84. package/dist/meetings/collection.js.map +1 -1
  85. package/dist/meetings/index.js +377 -82
  86. package/dist/meetings/index.js.map +1 -1
  87. package/dist/meetings/meetings.types.js +7 -0
  88. package/dist/meetings/meetings.types.js.map +1 -0
  89. package/dist/meetings/request.js +16 -12
  90. package/dist/meetings/request.js.map +1 -1
  91. package/dist/meetings/util.js +88 -1
  92. package/dist/meetings/util.js.map +1 -1
  93. package/dist/member/index.js +43 -0
  94. package/dist/member/index.js.map +1 -1
  95. package/dist/member/types.js +15 -0
  96. package/dist/member/types.js.map +1 -0
  97. package/dist/member/util.js +97 -3
  98. package/dist/member/util.js.map +1 -1
  99. package/dist/members/collection.js +10 -0
  100. package/dist/members/collection.js.map +1 -1
  101. package/dist/members/index.js +94 -11
  102. package/dist/members/index.js.map +1 -1
  103. package/dist/members/request.js +109 -39
  104. package/dist/members/request.js.map +1 -1
  105. package/dist/members/types.js +15 -0
  106. package/dist/members/types.js.map +1 -0
  107. package/dist/members/util.js +316 -233
  108. package/dist/members/util.js.map +1 -1
  109. package/dist/metrics/constants.js +3 -5
  110. package/dist/metrics/constants.js.map +1 -1
  111. package/dist/metrics/index.js +1 -468
  112. package/dist/metrics/index.js.map +1 -1
  113. package/dist/multistream/mediaRequestManager.js +265 -36
  114. package/dist/multistream/mediaRequestManager.js.map +1 -1
  115. package/dist/multistream/receiveSlot.js +52 -19
  116. package/dist/multistream/receiveSlot.js.map +1 -1
  117. package/dist/multistream/receiveSlotManager.js +53 -33
  118. package/dist/multistream/receiveSlotManager.js.map +1 -1
  119. package/dist/multistream/remoteMedia.js +44 -18
  120. package/dist/multistream/remoteMedia.js.map +1 -1
  121. package/dist/multistream/remoteMediaGroup.js +60 -3
  122. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  123. package/dist/multistream/remoteMediaManager.js +322 -103
  124. package/dist/multistream/remoteMediaManager.js.map +1 -1
  125. package/dist/networkQualityMonitor/index.js +4 -2
  126. package/dist/networkQualityMonitor/index.js.map +1 -1
  127. package/dist/reachability/index.js +117 -60
  128. package/dist/reachability/index.js.map +1 -1
  129. package/dist/reachability/request.js +12 -5
  130. package/dist/reachability/request.js.map +1 -1
  131. package/dist/reactions/constants.js +13 -0
  132. package/dist/reactions/constants.js.map +1 -0
  133. package/dist/reactions/reactions.js +2 -2
  134. package/dist/reactions/reactions.js.map +1 -1
  135. package/dist/reactions/reactions.type.js +18 -18
  136. package/dist/reactions/reactions.type.js.map +1 -1
  137. package/dist/reconnection-manager/index.js +217 -162
  138. package/dist/reconnection-manager/index.js.map +1 -1
  139. package/dist/recording-controller/enums.js +17 -0
  140. package/dist/recording-controller/enums.js.map +1 -0
  141. package/dist/recording-controller/index.js +363 -0
  142. package/dist/recording-controller/index.js.map +1 -0
  143. package/dist/recording-controller/util.js +64 -0
  144. package/dist/recording-controller/util.js.map +1 -0
  145. package/dist/roap/index.js +21 -29
  146. package/dist/roap/index.js.map +1 -1
  147. package/dist/roap/request.js +135 -94
  148. package/dist/roap/request.js.map +1 -1
  149. package/dist/roap/turnDiscovery.js +135 -53
  150. package/dist/roap/turnDiscovery.js.map +1 -1
  151. package/dist/statsAnalyzer/global.js +1 -93
  152. package/dist/statsAnalyzer/global.js.map +1 -1
  153. package/dist/statsAnalyzer/index.js +329 -314
  154. package/dist/statsAnalyzer/index.js.map +1 -1
  155. package/dist/statsAnalyzer/mqaUtil.js +103 -54
  156. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  157. package/dist/types/annotation/annotation.types.d.ts +43 -0
  158. package/dist/types/annotation/constants.d.ts +31 -0
  159. package/dist/types/annotation/index.d.ts +124 -0
  160. package/dist/types/breakouts/breakout.d.ts +8 -0
  161. package/dist/types/breakouts/collection.d.ts +5 -0
  162. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  163. package/dist/types/breakouts/events.d.ts +8 -0
  164. package/dist/types/breakouts/index.d.ts +5 -0
  165. package/dist/types/breakouts/request.d.ts +22 -0
  166. package/dist/types/breakouts/utils.d.ts +15 -0
  167. package/dist/types/common/browser-detection.d.ts +9 -0
  168. package/dist/types/common/collection.d.ts +48 -0
  169. package/dist/types/common/config.d.ts +2 -0
  170. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  171. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  172. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  173. package/dist/types/common/errors/media.d.ts +15 -0
  174. package/dist/types/common/errors/parameter.d.ts +15 -0
  175. package/dist/types/common/errors/password-error.d.ts +15 -0
  176. package/dist/types/common/errors/permission.d.ts +14 -0
  177. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  178. package/dist/types/common/errors/reconnection.d.ts +15 -0
  179. package/dist/types/common/errors/stats.d.ts +15 -0
  180. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  181. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  182. package/dist/types/common/events/events-scope.d.ts +17 -0
  183. package/dist/types/common/events/events.d.ts +12 -0
  184. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  185. package/dist/types/common/events/util.d.ts +2 -0
  186. package/dist/types/common/logs/logger-config.d.ts +2 -0
  187. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  188. package/dist/types/common/logs/request.d.ts +34 -0
  189. package/dist/types/common/queue.d.ts +32 -0
  190. package/dist/types/config.d.ts +72 -0
  191. package/dist/types/constants.d.ts +1007 -0
  192. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  193. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  194. package/dist/types/controls-options-manager/index.d.ts +136 -0
  195. package/dist/types/controls-options-manager/types.d.ts +43 -0
  196. package/dist/types/controls-options-manager/util.d.ts +1 -0
  197. package/dist/types/index.d.ts +7 -0
  198. package/dist/types/interpretation/collection.d.ts +5 -0
  199. package/dist/types/interpretation/index.d.ts +5 -0
  200. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  201. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  202. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  203. package/dist/types/locus-info/fullState.d.ts +2 -0
  204. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  205. package/dist/types/locus-info/index.d.ts +315 -0
  206. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  207. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  208. package/dist/types/locus-info/parser.d.ts +212 -0
  209. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  210. package/dist/types/media/index.d.ts +34 -0
  211. package/dist/types/media/properties.d.ts +86 -0
  212. package/dist/types/media/util.d.ts +2 -0
  213. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  214. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  215. package/dist/types/meeting/index.d.ts +1430 -0
  216. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  217. package/dist/types/meeting/muteState.d.ts +184 -0
  218. package/dist/types/meeting/request.d.ts +270 -0
  219. package/dist/types/meeting/request.type.d.ts +11 -0
  220. package/dist/types/meeting/state.d.ts +9 -0
  221. package/dist/types/meeting/util.d.ts +77 -0
  222. package/dist/types/meeting-info/collection.d.ts +20 -0
  223. package/dist/types/meeting-info/index.d.ts +62 -0
  224. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  225. package/dist/types/meeting-info/request.d.ts +22 -0
  226. package/dist/types/meeting-info/util.d.ts +2 -0
  227. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  228. package/dist/types/meetings/collection.d.ts +31 -0
  229. package/dist/types/meetings/index.d.ts +365 -0
  230. package/dist/types/meetings/meetings.types.d.ts +4 -0
  231. package/dist/types/meetings/request.d.ts +27 -0
  232. package/dist/types/meetings/util.d.ts +18 -0
  233. package/dist/types/member/index.d.ts +158 -0
  234. package/dist/types/member/types.d.ts +21 -0
  235. package/dist/types/member/util.d.ts +2 -0
  236. package/dist/types/members/collection.d.ts +29 -0
  237. package/dist/types/members/index.d.ts +353 -0
  238. package/dist/types/members/request.d.ts +114 -0
  239. package/dist/types/members/types.d.ts +24 -0
  240. package/dist/types/members/util.d.ts +210 -0
  241. package/dist/types/metrics/constants.d.ts +55 -0
  242. package/dist/types/metrics/index.d.ts +45 -0
  243. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  244. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  245. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  246. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  247. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  248. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  249. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  250. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  251. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  252. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  253. package/dist/types/reachability/index.d.ts +152 -0
  254. package/dist/types/reachability/request.d.ts +37 -0
  255. package/dist/types/reactions/constants.d.ts +3 -0
  256. package/dist/types/reactions/reactions.d.ts +4 -0
  257. package/dist/types/reactions/reactions.type.d.ts +52 -0
  258. package/dist/types/reconnection-manager/index.d.ts +126 -0
  259. package/dist/types/recording-controller/enums.d.ts +7 -0
  260. package/dist/types/recording-controller/index.d.ts +208 -0
  261. package/dist/types/recording-controller/util.d.ts +14 -0
  262. package/dist/types/roap/index.d.ts +77 -0
  263. package/dist/types/roap/request.d.ts +36 -0
  264. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  265. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  266. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  267. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  268. package/dist/types/transcription/index.d.ts +64 -0
  269. package/package.json +29 -21
  270. package/src/annotation/annotation.types.ts +52 -0
  271. package/src/annotation/constants.ts +36 -0
  272. package/src/annotation/index.ts +343 -0
  273. package/src/breakouts/README.md +220 -0
  274. package/src/breakouts/breakout.ts +188 -0
  275. package/src/breakouts/collection.ts +19 -0
  276. package/src/breakouts/edit-lock-error.ts +25 -0
  277. package/src/breakouts/events.ts +56 -0
  278. package/src/breakouts/index.ts +925 -0
  279. package/src/breakouts/request.ts +55 -0
  280. package/src/breakouts/utils.ts +57 -0
  281. package/src/common/errors/webex-errors.ts +6 -2
  282. package/src/common/logs/logger-proxy.ts +1 -1
  283. package/src/config.ts +5 -7
  284. package/src/constants.ts +183 -22
  285. package/src/controls-options-manager/constants.ts +5 -0
  286. package/src/controls-options-manager/enums.ts +18 -0
  287. package/src/controls-options-manager/index.ts +278 -0
  288. package/src/controls-options-manager/types.ts +59 -0
  289. package/src/controls-options-manager/util.ts +286 -0
  290. package/src/index.ts +37 -0
  291. package/src/interpretation/README.md +51 -0
  292. package/src/interpretation/collection.ts +19 -0
  293. package/src/interpretation/index.ts +182 -0
  294. package/src/interpretation/siLanguage.ts +18 -0
  295. package/src/locus-info/controlsUtils.ts +110 -0
  296. package/src/locus-info/index.ts +374 -38
  297. package/src/locus-info/mediaSharesUtils.ts +48 -0
  298. package/src/locus-info/parser.ts +2 -1
  299. package/src/locus-info/selfUtils.ts +86 -2
  300. package/src/media/index.ts +70 -142
  301. package/src/media/properties.ts +41 -104
  302. package/src/mediaQualityMetrics/config.ts +379 -377
  303. package/src/meeting/in-meeting-actions.ts +151 -3
  304. package/src/meeting/index.ts +2029 -2033
  305. package/src/meeting/locusMediaRequest.ts +309 -0
  306. package/src/meeting/muteState.ts +228 -132
  307. package/src/meeting/request.ts +100 -91
  308. package/src/meeting/request.type.ts +2 -0
  309. package/src/meeting/util.ts +450 -439
  310. package/src/meeting-info/index.ts +54 -8
  311. package/src/meeting-info/meeting-info-v2.ts +150 -14
  312. package/src/meeting-info/utilv2.ts +13 -3
  313. package/src/meetings/collection.ts +20 -0
  314. package/src/meetings/index.ts +396 -89
  315. package/src/meetings/meetings.types.ts +12 -0
  316. package/src/meetings/request.ts +3 -1
  317. package/src/meetings/util.ts +103 -4
  318. package/src/member/index.ts +42 -0
  319. package/src/member/types.ts +24 -0
  320. package/src/member/util.ts +95 -1
  321. package/src/members/collection.ts +8 -0
  322. package/src/members/index.ts +108 -6
  323. package/src/members/request.ts +98 -17
  324. package/src/members/types.ts +28 -0
  325. package/src/members/util.ts +319 -240
  326. package/src/metrics/constants.ts +2 -4
  327. package/src/metrics/index.ts +1 -490
  328. package/src/multistream/mediaRequestManager.ts +337 -63
  329. package/src/multistream/receiveSlot.ts +68 -26
  330. package/src/multistream/receiveSlotManager.ts +61 -38
  331. package/src/multistream/remoteMedia.ts +29 -3
  332. package/src/multistream/remoteMediaGroup.ts +61 -2
  333. package/src/multistream/remoteMediaManager.ts +260 -66
  334. package/src/networkQualityMonitor/index.ts +6 -6
  335. package/src/reachability/index.ts +75 -25
  336. package/src/reachability/request.ts +10 -5
  337. package/src/reactions/constants.ts +4 -0
  338. package/src/reactions/reactions.ts +4 -4
  339. package/src/reactions/reactions.type.ts +28 -3
  340. package/src/reconnection-manager/index.ts +80 -49
  341. package/src/recording-controller/enums.ts +8 -0
  342. package/src/recording-controller/index.ts +333 -0
  343. package/src/recording-controller/util.ts +75 -0
  344. package/src/roap/index.ts +21 -30
  345. package/src/roap/request.ts +72 -61
  346. package/src/roap/turnDiscovery.ts +51 -27
  347. package/src/statsAnalyzer/global.ts +1 -94
  348. package/src/statsAnalyzer/index.ts +380 -390
  349. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  350. package/test/integration/spec/converged-space-meetings.js +233 -0
  351. package/test/integration/spec/journey.js +331 -254
  352. package/test/integration/spec/space-meeting.js +77 -4
  353. package/test/unit/spec/annotation/index.ts +436 -0
  354. package/test/unit/spec/breakouts/breakout.ts +237 -0
  355. package/test/unit/spec/breakouts/collection.ts +15 -0
  356. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  357. package/test/unit/spec/breakouts/events.ts +89 -0
  358. package/test/unit/spec/breakouts/index.ts +1790 -0
  359. package/test/unit/spec/breakouts/request.ts +104 -0
  360. package/test/unit/spec/breakouts/utils.js +72 -0
  361. package/test/unit/spec/controls-options-manager/index.js +287 -0
  362. package/test/unit/spec/controls-options-manager/util.js +518 -0
  363. package/test/unit/spec/fixture/locus.js +1 -0
  364. package/test/unit/spec/interpretation/collection.ts +15 -0
  365. package/test/unit/spec/interpretation/index.ts +329 -0
  366. package/test/unit/spec/interpretation/siLanguage.ts +26 -0
  367. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  368. package/test/unit/spec/locus-info/index.js +792 -4
  369. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  370. package/test/unit/spec/locus-info/selfConstant.js +48 -0
  371. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  372. package/test/unit/spec/media/index.ts +118 -22
  373. package/test/unit/spec/media/properties.ts +9 -9
  374. package/test/unit/spec/meeting/in-meeting-actions.ts +75 -3
  375. package/test/unit/spec/meeting/index.js +2742 -1441
  376. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  377. package/test/unit/spec/meeting/muteState.js +370 -208
  378. package/test/unit/spec/meeting/request.js +354 -42
  379. package/test/unit/spec/meeting/utils.js +384 -170
  380. package/test/unit/spec/meeting-info/index.js +181 -0
  381. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  382. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  383. package/test/unit/spec/meetings/collection.js +14 -0
  384. package/test/unit/spec/meetings/index.js +847 -121
  385. package/test/unit/spec/meetings/utils.js +206 -2
  386. package/test/unit/spec/member/index.js +31 -0
  387. package/test/unit/spec/member/util.js +408 -32
  388. package/test/unit/spec/members/index.js +320 -1
  389. package/test/unit/spec/members/request.js +206 -27
  390. package/test/unit/spec/members/utils.js +184 -0
  391. package/test/unit/spec/metrics/index.js +1 -50
  392. package/test/unit/spec/multistream/mediaRequestManager.ts +1012 -109
  393. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  394. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  395. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  396. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  397. package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
  398. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  399. package/test/unit/spec/reachability/index.ts +176 -25
  400. package/test/unit/spec/reachability/request.js +66 -0
  401. package/test/unit/spec/reconnection-manager/index.js +95 -13
  402. package/test/unit/spec/recording-controller/index.js +307 -0
  403. package/test/unit/spec/recording-controller/util.js +229 -0
  404. package/test/unit/spec/roap/index.ts +28 -52
  405. package/test/unit/spec/roap/request.ts +225 -0
  406. package/test/unit/spec/roap/turnDiscovery.ts +73 -34
  407. package/test/unit/spec/stats-analyzer/index.js +94 -43
  408. package/test/utils/constants.js +9 -0
  409. package/test/utils/integrationTestUtils.js +46 -0
  410. package/test/utils/testUtils.js +0 -45
  411. package/test/utils/webex-config.js +4 -0
  412. package/test/utils/webex-test-users.js +7 -3
  413. package/tsconfig.json +6 -0
  414. package/dist/media/internal-media-core-wrapper.js +0 -18
  415. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  416. package/dist/meeting/effectsState.js +0 -262
  417. package/dist/meeting/effectsState.js.map +0 -1
  418. package/dist/metrics/config.js +0 -299
  419. package/dist/metrics/config.js.map +0 -1
  420. package/dist/multistream/multistreamMedia.js +0 -106
  421. package/dist/multistream/multistreamMedia.js.map +0 -1
  422. package/src/index.js +0 -15
  423. package/src/media/internal-media-core-wrapper.ts +0 -9
  424. package/src/meeting/effectsState.ts +0 -211
  425. package/src/metrics/config.ts +0 -495
  426. package/src/multistream/multistreamMedia.ts +0 -93
  427. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -0,0 +1,333 @@
1
+ import PermissionError from '../common/errors/permission';
2
+ import {CONTROLS, HTTP_VERBS, SELF_POLICY} from '../constants';
3
+ import MeetingRequest from '../meeting/request';
4
+ import RecordingAction from './enums';
5
+ import Util from './util';
6
+ import LoggerProxy from '../common/logs/logger-proxy';
7
+
8
+ /**
9
+ * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting
10
+ * @export
11
+ * @private
12
+ * @class Recording
13
+ */
14
+ export default class RecordingController {
15
+ /**
16
+ * @instance
17
+ * @type {MeetingRequest}
18
+ * @private
19
+ * @memberof RecordingController
20
+ */
21
+ private request: MeetingRequest;
22
+
23
+ /**
24
+ * @instance
25
+ * @type {Array}
26
+ * @private
27
+ * @memberof RecordingInfo
28
+ */
29
+ private displayHints: Array<string> = [];
30
+
31
+ /**
32
+ * @instance
33
+ * @type {Object}
34
+ * @private
35
+ * @memberof RecordingInfo
36
+ */
37
+ private selfUserPolicies: Record<SELF_POLICY, boolean>;
38
+
39
+ /**
40
+ * @instance
41
+ * @type {string}
42
+ * @private
43
+ * @memberof RecordingInfo
44
+ */
45
+ private serviceUrl: string;
46
+
47
+ /**
48
+ * @instance
49
+ * @type {string}
50
+ * @private
51
+ * @memberof RecordingInfo
52
+ */
53
+ private sessionId: string;
54
+
55
+ /**
56
+ * @instance
57
+ * @type {string}
58
+ * @private
59
+ * @memberof RecordingInfo
60
+ */
61
+ private locusUrl: string;
62
+
63
+ /**
64
+ * @instance
65
+ * @type {string}
66
+ * @private
67
+ * @memberof RecordingInfo
68
+ */
69
+ private locusId: string;
70
+
71
+ /**
72
+ * @param {MeetingRequest} request
73
+ * @param {Object} options
74
+ * @constructor
75
+ * @memberof RecordingController
76
+ */
77
+ constructor(
78
+ request: MeetingRequest,
79
+ options?: {
80
+ serviceUrl?: string;
81
+ sessionId: string;
82
+ locusUrl: string;
83
+ displayHints?: Array<string>;
84
+ }
85
+ ) {
86
+ this.initialize(request);
87
+ this.set(options);
88
+ }
89
+
90
+ /**
91
+ * @param {MeetingRequest} request
92
+ * @param {LocusInfo} info
93
+ * @returns {void}
94
+ * @private
95
+ * @memberof RecordingController
96
+ */
97
+ private initialize(request: MeetingRequest) {
98
+ this.request = request;
99
+ }
100
+
101
+ /**
102
+ * @param {Object} options
103
+ * @returns {void}
104
+ * @public
105
+ * @memberof RecordingController
106
+ */
107
+ public set(options?: {
108
+ serviceUrl?: string;
109
+ sessionId: string;
110
+ locusUrl: string;
111
+ displayHints?: Array<string>;
112
+ }) {
113
+ this.extract(options);
114
+ }
115
+
116
+ /**
117
+ * @param {string} url
118
+ * @returns {void}
119
+ * @public
120
+ * @memberof RecordingController
121
+ */
122
+ public setLocusUrl(url: string) {
123
+ this.locusUrl = url;
124
+ this.locusId = Util.extractLocusId(this.locusUrl);
125
+ }
126
+
127
+ /**
128
+ * @param {Array} hints
129
+ * @returns {void}
130
+ * @public
131
+ * @memberof RecordingController
132
+ */
133
+ public setDisplayHints(hints: Array<string>) {
134
+ this.displayHints = hints;
135
+ }
136
+
137
+ /**
138
+ * @param {Object} selfUserPolicies
139
+ * @returns {void}
140
+ * @public
141
+ * @memberof RecordingController
142
+ */
143
+ public setUserPolicy(selfUserPolicies: Record<SELF_POLICY, boolean>) {
144
+ this.selfUserPolicies = selfUserPolicies;
145
+ }
146
+
147
+ /**
148
+ * @param {string} id
149
+ * @returns {void}
150
+ * @public
151
+ * @memberof RecordingController
152
+ */
153
+ public setSessionId(id: string) {
154
+ this.sessionId = id;
155
+ }
156
+
157
+ /**
158
+ * @param {string} url
159
+ * @returns {void}
160
+ * @public
161
+ * @memberof RecordingController
162
+ */
163
+ public setServiceUrl(url: string) {
164
+ this.serviceUrl = url;
165
+ }
166
+
167
+ /**
168
+ * @returns {string}
169
+ * @public
170
+ * @memberof RecordingController
171
+ */
172
+ public getLocusUrl() {
173
+ return this.locusUrl;
174
+ }
175
+
176
+ /**
177
+ * @returns {string}
178
+ * @public
179
+ * @memberof RecordingController
180
+ */
181
+ public getLocusId() {
182
+ return this.locusId;
183
+ }
184
+
185
+ /**
186
+ * @returns {string}
187
+ * @public
188
+ * @memberof RecordingController
189
+ */
190
+ public getSessionId() {
191
+ return this.sessionId;
192
+ }
193
+
194
+ /**
195
+ * @returns {string}
196
+ * @public
197
+ * @memberof RecordingController
198
+ */
199
+ public getServiceUrl() {
200
+ return this.serviceUrl;
201
+ }
202
+
203
+ /**
204
+ * @returns {Array}
205
+ * @public
206
+ * @memberof RecordingController
207
+ */
208
+ public getDisplayHints() {
209
+ return this.displayHints;
210
+ }
211
+
212
+ /**
213
+ * @param {Object} options
214
+ * @returns {void}
215
+ * @private
216
+ * @memberof RecordingController
217
+ */
218
+ private extract(options?: {
219
+ serviceUrl?: string;
220
+ sessionId: string;
221
+ locusUrl: string;
222
+ displayHints?: Array<string>;
223
+ }) {
224
+ this.setServiceUrl(options?.serviceUrl);
225
+ this.setSessionId(options?.sessionId);
226
+ this.setDisplayHints(options?.displayHints);
227
+ this.setLocusUrl(options?.locusUrl);
228
+ }
229
+
230
+ /**
231
+ * @param {RecordingAction} action
232
+ * @private
233
+ * @memberof RecordingController
234
+ * @returns {Promise}
235
+ */
236
+ private recordingService(action: RecordingAction): Promise<any> {
237
+ // @ts-ignore
238
+ return this.request.request({
239
+ body: {
240
+ meetingInfo: {
241
+ locusSessionId: this.sessionId,
242
+ },
243
+ recording: {
244
+ action: action.toLowerCase(),
245
+ },
246
+ },
247
+ uri: `${this.serviceUrl}/loci/${this.locusId}/recording`,
248
+ method: HTTP_VERBS.PUT,
249
+ });
250
+ }
251
+
252
+ /**
253
+ * @param {RecordingAction} action
254
+ * @private
255
+ * @memberof RecordingController
256
+ * @returns {Promise}
257
+ */
258
+ private recordingControls(action: RecordingAction): Promise<any> {
259
+ const record = Util.deriveRecordingStates(action);
260
+
261
+ LoggerProxy.logger.log(`RecordingController:index#recordingControls --> ${record}`);
262
+
263
+ // @ts-ignore
264
+ return this.request.request({
265
+ uri: `${this.locusUrl}/${CONTROLS}`,
266
+ body: {
267
+ record,
268
+ },
269
+ method: HTTP_VERBS.PATCH,
270
+ });
271
+ }
272
+
273
+ /**
274
+ * @param {RecordingAction} action
275
+ * @private
276
+ * @memberof RecordingController
277
+ * @returns {Promise}
278
+ */
279
+ private recordingFacade(action: RecordingAction): Promise<any> {
280
+ LoggerProxy.logger.log(
281
+ `RecordingController:index#recordingFacade --> recording action [${action}]`
282
+ );
283
+
284
+ // assumes action is proper cased (i.e., Example)
285
+ if (Util?.[`canUser${action}`](this.displayHints, this.selfUserPolicies)) {
286
+ if (this.serviceUrl) {
287
+ return this.recordingService(action);
288
+ }
289
+
290
+ return this.recordingControls(action);
291
+ }
292
+
293
+ return Promise.reject(
294
+ new PermissionError(`${action} recording not allowed, due to moderator property.`)
295
+ );
296
+ }
297
+
298
+ /**
299
+ * @private
300
+ * @memberof RecordingController
301
+ * @returns {Promise}
302
+ */
303
+ public startRecording(): Promise<any> {
304
+ return this.recordingFacade(RecordingAction.Start);
305
+ }
306
+
307
+ /**
308
+ * @private
309
+ * @memberof RecordingController
310
+ * @returns {Promise}
311
+ */
312
+ public stopRecording(): Promise<any> {
313
+ return this.recordingFacade(RecordingAction.Stop);
314
+ }
315
+
316
+ /**
317
+ * @private
318
+ * @memberof RecordingController
319
+ * @returns {Promise}
320
+ */
321
+ public pauseRecording(): Promise<any> {
322
+ return this.recordingFacade(RecordingAction.Pause);
323
+ }
324
+
325
+ /**
326
+ * @private
327
+ * @memberof RecordingController
328
+ * @returns {Promise}
329
+ */
330
+ public resumeRecording(): Promise<any> {
331
+ return this.recordingFacade(RecordingAction.Resume);
332
+ }
333
+ }
@@ -0,0 +1,75 @@
1
+ import {DISPLAY_HINTS, SELF_POLICY} from '../constants';
2
+ import RecordingAction from './enums';
3
+ import MeetingUtil from '../meeting/util';
4
+
5
+ const canUserStart = (
6
+ displayHints: Array<string>,
7
+ userPolicies: Record<SELF_POLICY, boolean>
8
+ ): boolean =>
9
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START) &&
10
+ MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
11
+
12
+ const canUserPause = (
13
+ displayHints: Array<string>,
14
+ userPolicies: Record<SELF_POLICY, boolean>
15
+ ): boolean =>
16
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE) &&
17
+ MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
18
+
19
+ const canUserResume = (
20
+ displayHints: Array<string>,
21
+ userPolicies: Record<SELF_POLICY, boolean>
22
+ ): boolean =>
23
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME) &&
24
+ MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
25
+
26
+ const canUserStop = (
27
+ displayHints: Array<string>,
28
+ userPolicies: Record<SELF_POLICY, boolean>
29
+ ): boolean =>
30
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP) &&
31
+ MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
32
+
33
+ const extractLocusId = (url: string) => {
34
+ return url?.split('/').pop();
35
+ };
36
+
37
+ const deriveRecordingStates = (action: RecordingAction): {recording: boolean; paused: boolean} => {
38
+ let recording;
39
+ let paused;
40
+
41
+ switch (action) {
42
+ case RecordingAction.Start:
43
+ recording = true;
44
+ paused = false;
45
+ break;
46
+ case RecordingAction.Stop:
47
+ recording = false;
48
+ paused = false;
49
+ break;
50
+ case RecordingAction.Resume:
51
+ recording = true;
52
+ paused = false;
53
+ break;
54
+ case RecordingAction.Pause:
55
+ recording = true;
56
+ paused = true;
57
+ break;
58
+ default:
59
+ throw new Error(`Recording state cannot be derived from invalid action: ${action}`);
60
+ }
61
+
62
+ return {
63
+ recording,
64
+ paused,
65
+ };
66
+ };
67
+
68
+ export default {
69
+ canUserStart,
70
+ canUserPause,
71
+ canUserResume,
72
+ canUserStop,
73
+ deriveRecordingStates,
74
+ extractLocusId,
75
+ };
package/src/roap/index.ts CHANGED
@@ -98,11 +98,8 @@ export default class Roap extends StatelessWebexPlugin {
98
98
  roapMessage,
99
99
  locusSelfUrl: meeting.selfUrl,
100
100
  mediaId: options.mediaId,
101
- correlationId: options.correlationId,
102
- audioMuted: meeting.isAudioMuted(),
103
- videoMuted: meeting.isVideoMuted(),
104
101
  meetingId: meeting.id,
105
- preferTranscoding: !meeting.isMultistream,
102
+ locusMediaRequest: meeting.locusMediaRequest,
106
103
  })
107
104
  .then(() => {
108
105
  LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);
@@ -135,11 +132,8 @@ export default class Roap extends StatelessWebexPlugin {
135
132
  roapMessage,
136
133
  locusSelfUrl: meeting.selfUrl,
137
134
  mediaId: options.mediaId,
138
- correlationId: options.correlationId,
139
- audioMuted: meeting.isAudioMuted(),
140
- videoMuted: meeting.isVideoMuted(),
141
135
  meetingId: meeting.id,
142
- preferTranscoding: !meeting.isMultistream,
136
+ locusMediaRequest: meeting.locusMediaRequest,
143
137
  });
144
138
  }
145
139
 
@@ -167,11 +161,8 @@ export default class Roap extends StatelessWebexPlugin {
167
161
  roapMessage,
168
162
  locusSelfUrl: meeting.selfUrl,
169
163
  mediaId: options.mediaId,
170
- correlationId: options.correlationId,
171
- audioMuted: meeting.isAudioMuted(),
172
- videoMuted: meeting.isVideoMuted(),
173
164
  meetingId: meeting.id,
174
- preferTranscoding: !meeting.isMultistream,
165
+ locusMediaRequest: meeting.locusMediaRequest,
175
166
  })
176
167
  .then(() => {
177
168
  LoggerProxy.logger.log(
@@ -199,26 +190,26 @@ export default class Roap extends StatelessWebexPlugin {
199
190
  // When reconnecting, it's important that the first roap message being sent out has empty media id.
200
191
  // Normally this is the roap offer, but when TURN discovery is enabled,
201
192
  // then this is the TURN discovery request message
202
- const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;
193
+ return this.turnDiscovery.isSkipped(meeting).then((isTurnDiscoverySkipped) => {
194
+ const sendEmptyMediaId = reconnect && isTurnDiscoverySkipped;
203
195
 
204
- return this.roapRequest
205
- .sendRoap({
206
- roapMessage,
207
- correlationId: meeting.correlationId,
208
- locusSelfUrl: meeting.selfUrl,
209
- mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
210
- audioMuted: meeting.isAudioMuted(),
211
- videoMuted: meeting.isVideoMuted(),
212
- meetingId: meeting.id,
213
- preferTranscoding: !meeting.isMultistream,
214
- })
215
- .then(({locus, mediaConnections}) => {
216
- if (mediaConnections) {
217
- meeting.updateMediaConnections(mediaConnections);
218
- }
196
+ return this.roapRequest
197
+ .sendRoap({
198
+ roapMessage,
199
+ locusSelfUrl: meeting.selfUrl,
200
+ mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
201
+ meetingId: meeting.id,
202
+ preferTranscoding: !meeting.isMultistream,
203
+ locusMediaRequest: meeting.locusMediaRequest,
204
+ })
205
+ .then(({locus, mediaConnections}) => {
206
+ if (mediaConnections) {
207
+ meeting.updateMediaConnections(mediaConnections);
208
+ }
219
209
 
220
- return locus;
221
- });
210
+ return locus;
211
+ });
212
+ });
222
213
  }
223
214
 
224
215
  /**
@@ -1,24 +1,26 @@
1
- /* global window */
2
1
  // @ts-ignore
3
2
  import {StatelessWebexPlugin} from '@webex/webex-core';
4
3
 
5
4
  import LoggerProxy from '../common/logs/logger-proxy';
6
- import {MEDIA, HTTP_VERBS, REACHABILITY} from '../constants';
7
- import Metrics from '../metrics';
8
- import {eventType} from '../metrics/config';
5
+ import {REACHABILITY} from '../constants';
6
+ import {LocusMediaRequest} from '../meeting/locusMediaRequest';
9
7
 
10
8
  /**
11
9
  * @class RoapRequest
12
10
  */
13
11
  export default class RoapRequest extends StatelessWebexPlugin {
14
12
  /**
15
- * Joins a meeting via ROAP
16
- * @param {Object} options
17
- * @returns {Promise} returns a promise that resolves/rejects whatever the request does
13
+ * Returns reachability data.
14
+ * @param {Object} localSdp
15
+ * @returns {Object}
18
16
  */
17
+ async attachReachabilityData(localSdp) {
18
+ let joinCookie;
19
19
 
20
- attachRechabilityData(localSdp) {
21
- const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);
20
+ // @ts-ignore
21
+ const reachabilityData = await this.webex.boundedStorage
22
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageResult)
23
+ .catch(() => {});
22
24
 
23
25
  if (reachabilityData) {
24
26
  try {
@@ -35,7 +37,22 @@ export default class RoapRequest extends StatelessWebexPlugin {
35
37
  }
36
38
  }
37
39
 
38
- return localSdp;
40
+ // @ts-ignore
41
+ const joinCookieRaw = await this.webex.boundedStorage
42
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
43
+ .catch(() => {});
44
+
45
+ if (joinCookieRaw) {
46
+ try {
47
+ joinCookie = JSON.parse(joinCookieRaw);
48
+ } catch (e) {
49
+ LoggerProxy.logger.error(
50
+ `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`
51
+ );
52
+ }
53
+ }
54
+
55
+ return {localSdp, joinCookie};
39
56
  }
40
57
 
41
58
  /**
@@ -45,78 +62,69 @@ export default class RoapRequest extends StatelessWebexPlugin {
45
62
  * @param {String} options.locusSelfUrl
46
63
  * @param {String} options.mediaId
47
64
  * @param {String} options.correlationId
48
- * @param {Boolean} options.audioMuted
49
- * @param {Boolean} options.videoMuted
50
65
  * @param {String} options.meetingId
51
66
  * @returns {Promise} returns the response/failure of the request
52
67
  */
53
- sendRoap(options: {
68
+ async sendRoap(options: {
54
69
  roapMessage: any;
55
70
  locusSelfUrl: string;
56
71
  mediaId: string;
57
- correlationId: string;
58
- audioMuted: boolean;
59
- videoMuted: boolean;
60
72
  meetingId: string;
61
- preferTranscoding?: boolean;
73
+ locusMediaRequest?: LocusMediaRequest;
62
74
  }) {
63
- const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;
75
+ const {roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest} = options;
64
76
 
65
77
  if (!mediaId) {
66
- LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
78
+ LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');
67
79
  }
68
80
 
69
- const mediaUrl = `${locusSelfUrl}/${MEDIA}`;
70
- // @ts-ignore
71
- const deviceUrl = this.webex.internal.device.url;
81
+ if (!locusMediaRequest) {
82
+ LoggerProxy.logger.warn(
83
+ 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'
84
+ );
85
+
86
+ return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));
87
+ }
88
+ const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({
89
+ roapMessage,
90
+ });
72
91
 
73
92
  LoggerProxy.logger.info(
74
- `Roap:request#sendRoap --> ${mediaUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
93
+ `Roap:request#sendRoap --> ${locusSelfUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
75
94
  );
76
95
 
77
- Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});
78
-
79
96
  // @ts-ignore
80
- return this.webex
81
- .request({
82
- uri: mediaUrl,
83
- method: HTTP_VERBS.PUT,
84
- body: {
85
- device: {
86
- url: deviceUrl,
87
- // @ts-ignore
88
- deviceType: this.config.meetings.deviceType,
89
- },
90
- correlationId,
91
- localMedias: [
92
- {
93
- localSdp: JSON.stringify(
94
- this.attachRechabilityData({
95
- roapMessage,
96
- // eslint-disable-next-line no-warning-comments
97
- // TODO: check whats the need for video and audiomute
98
- audioMuted: !!options.audioMuted,
99
- videoMuted: !!options.videoMuted,
100
- })
101
- ),
102
- mediaId: options.mediaId,
103
- },
104
- ],
105
- clientMediaPreferences: {
106
- preferTranscoding: options.preferTranscoding ?? true,
107
- },
108
- },
97
+ this.webex.internal.newMetrics.submitClientEvent({
98
+ name: 'client.locus.media.request',
99
+ options: {
100
+ meetingId,
101
+ },
102
+ });
103
+
104
+ return locusMediaRequest
105
+ .send({
106
+ type: 'RoapMessage',
107
+ selfUrl: locusSelfUrl,
108
+ joinCookie,
109
+ mediaId,
110
+ roapMessage,
111
+ reachability: localSdpWithReachabilityData.reachability,
109
112
  })
110
113
  .then((res) => {
111
- Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});
112
-
114
+ // @ts-ignore
115
+ this.webex.internal.newMetrics.submitClientEvent({
116
+ name: 'client.locus.media.response',
117
+ options: {
118
+ meetingId,
119
+ },
120
+ });
113
121
  // always it will be the first mediaConnection Object
114
122
  const mediaConnections =
115
123
  res.body.mediaConnections &&
116
124
  res.body.mediaConnections.length > 0 &&
117
125
  res.body.mediaConnections[0];
118
126
 
119
- LoggerProxy.logger.info(
127
+ LoggerProxy.logger.debug(
120
128
  `Roap:request#sendRoap --> response:${JSON.stringify(
121
129
  mediaConnections,
122
130
  null,
@@ -133,10 +141,13 @@ export default class RoapRequest extends StatelessWebexPlugin {
133
141
  };
134
142
  })
135
143
  .catch((err) => {
136
- Metrics.postEvent({
137
- event: eventType.MEDIA_RESPONSE,
138
- meetingId,
139
- data: {error: Metrics.parseLocusError(err, true)},
144
+ // @ts-ignore
145
+ this.webex.internal.newMetrics.submitClientEvent({
146
+ name: 'client.locus.media.response',
147
+ options: {
148
+ meetingId,
149
+ rawError: err,
150
+ },
140
151
  });
141
152
  LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);
142
153
  LoggerProxy.logger.error(