@webex/plugin-meetings 3.0.0-beta.36 → 3.0.0-beta.361

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 (391) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +671 -81
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +45 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/no-meeting-info.js +51 -0
  17. package/dist/common/errors/no-meeting-info.js.map +1 -0
  18. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  19. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +48 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/logs/request.js +5 -1
  25. package/dist/common/logs/request.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +5 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +226 -33
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  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 +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +117 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/interceptors/index.js +15 -0
  43. package/dist/interceptors/index.js.map +1 -0
  44. package/dist/interceptors/locusRetry.js +93 -0
  45. package/dist/interceptors/locusRetry.js.map +1 -0
  46. package/dist/interpretation/collection.js +23 -0
  47. package/dist/interpretation/collection.js.map +1 -0
  48. package/dist/interpretation/index.js +366 -0
  49. package/dist/interpretation/index.js.map +1 -0
  50. package/dist/interpretation/siLanguage.js +25 -0
  51. package/dist/interpretation/siLanguage.js.map +1 -0
  52. package/dist/locus-info/controlsUtils.js +91 -2
  53. package/dist/locus-info/controlsUtils.js.map +1 -1
  54. package/dist/locus-info/index.js +383 -62
  55. package/dist/locus-info/index.js.map +1 -1
  56. package/dist/locus-info/infoUtils.js +7 -1
  57. package/dist/locus-info/infoUtils.js.map +1 -1
  58. package/dist/locus-info/mediaSharesUtils.js +57 -1
  59. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  60. package/dist/locus-info/parser.js +249 -72
  61. package/dist/locus-info/parser.js.map +1 -1
  62. package/dist/locus-info/selfUtils.js +89 -14
  63. package/dist/locus-info/selfUtils.js.map +1 -1
  64. package/dist/media/index.js +61 -101
  65. package/dist/media/index.js.map +1 -1
  66. package/dist/media/properties.js +73 -124
  67. package/dist/media/properties.js.map +1 -1
  68. package/dist/mediaQualityMetrics/config.js +1 -204
  69. package/dist/mediaQualityMetrics/config.js.map +1 -1
  70. package/dist/meeting/in-meeting-actions.js +86 -2
  71. package/dist/meeting/in-meeting-actions.js.map +1 -1
  72. package/dist/meeting/index.js +3938 -2803
  73. package/dist/meeting/index.js.map +1 -1
  74. package/dist/meeting/locusMediaRequest.js +292 -0
  75. package/dist/meeting/locusMediaRequest.js.map +1 -0
  76. package/dist/meeting/muteState.js +224 -136
  77. package/dist/meeting/muteState.js.map +1 -1
  78. package/dist/meeting/request.js +166 -152
  79. package/dist/meeting/request.js.map +1 -1
  80. package/dist/meeting/util.js +601 -417
  81. package/dist/meeting/util.js.map +1 -1
  82. package/dist/meeting-info/index.js +73 -7
  83. package/dist/meeting-info/index.js.map +1 -1
  84. package/dist/meeting-info/meeting-info-v2.js +192 -51
  85. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  86. package/dist/meeting-info/util.js +1 -1
  87. package/dist/meeting-info/util.js.map +1 -1
  88. package/dist/meeting-info/utilv2.js +36 -36
  89. package/dist/meeting-info/utilv2.js.map +1 -1
  90. package/dist/meetings/collection.js +39 -0
  91. package/dist/meetings/collection.js.map +1 -1
  92. package/dist/meetings/index.js +478 -118
  93. package/dist/meetings/index.js.map +1 -1
  94. package/dist/meetings/meetings.types.js +7 -0
  95. package/dist/meetings/meetings.types.js.map +1 -0
  96. package/dist/meetings/request.js +2 -0
  97. package/dist/meetings/request.js.map +1 -1
  98. package/dist/meetings/util.js +72 -6
  99. package/dist/meetings/util.js.map +1 -1
  100. package/dist/member/index.js +58 -0
  101. package/dist/member/index.js.map +1 -1
  102. package/dist/member/types.js +25 -0
  103. package/dist/member/types.js.map +1 -0
  104. package/dist/member/util.js +132 -25
  105. package/dist/member/util.js.map +1 -1
  106. package/dist/members/collection.js +10 -0
  107. package/dist/members/collection.js.map +1 -1
  108. package/dist/members/index.js +102 -6
  109. package/dist/members/index.js.map +1 -1
  110. package/dist/members/request.js +106 -38
  111. package/dist/members/request.js.map +1 -1
  112. package/dist/members/types.js +15 -0
  113. package/dist/members/types.js.map +1 -0
  114. package/dist/members/util.js +326 -232
  115. package/dist/members/util.js.map +1 -1
  116. package/dist/metrics/constants.js +16 -1
  117. package/dist/metrics/constants.js.map +1 -1
  118. package/dist/metrics/index.js +1 -446
  119. package/dist/metrics/index.js.map +1 -1
  120. package/dist/multistream/mediaRequestManager.js +228 -58
  121. package/dist/multistream/mediaRequestManager.js.map +1 -1
  122. package/dist/multistream/receiveSlot.js +29 -16
  123. package/dist/multistream/receiveSlot.js.map +1 -1
  124. package/dist/multistream/receiveSlotManager.js +39 -36
  125. package/dist/multistream/receiveSlotManager.js.map +1 -1
  126. package/dist/multistream/remoteMedia.js +44 -18
  127. package/dist/multistream/remoteMedia.js.map +1 -1
  128. package/dist/multistream/remoteMediaGroup.js +60 -3
  129. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  130. package/dist/multistream/remoteMediaManager.js +209 -59
  131. package/dist/multistream/remoteMediaManager.js.map +1 -1
  132. package/dist/multistream/sendSlotManager.js +233 -0
  133. package/dist/multistream/sendSlotManager.js.map +1 -0
  134. package/dist/reachability/clusterReachability.js +356 -0
  135. package/dist/reachability/clusterReachability.js.map +1 -0
  136. package/dist/reachability/index.js +269 -390
  137. package/dist/reachability/index.js.map +1 -1
  138. package/dist/reachability/request.js +6 -4
  139. package/dist/reachability/request.js.map +1 -1
  140. package/dist/reachability/util.js +29 -0
  141. package/dist/reachability/util.js.map +1 -0
  142. package/dist/reconnection-manager/index.js +217 -170
  143. package/dist/reconnection-manager/index.js.map +1 -1
  144. package/dist/recording-controller/index.js +21 -2
  145. package/dist/recording-controller/index.js.map +1 -1
  146. package/dist/recording-controller/util.js +9 -8
  147. package/dist/recording-controller/util.js.map +1 -1
  148. package/dist/roap/index.js +51 -28
  149. package/dist/roap/index.js.map +1 -1
  150. package/dist/roap/request.js +48 -64
  151. package/dist/roap/request.js.map +1 -1
  152. package/dist/roap/turnDiscovery.js +95 -38
  153. package/dist/roap/turnDiscovery.js.map +1 -1
  154. package/dist/rtcMetrics/constants.js +12 -0
  155. package/dist/rtcMetrics/constants.js.map +1 -0
  156. package/dist/rtcMetrics/index.js +142 -0
  157. package/dist/rtcMetrics/index.js.map +1 -0
  158. package/dist/statsAnalyzer/index.js +182 -215
  159. package/dist/statsAnalyzer/index.js.map +1 -1
  160. package/dist/statsAnalyzer/mqaUtil.js +35 -28
  161. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  162. package/dist/types/annotation/annotation.types.d.ts +42 -0
  163. package/dist/types/annotation/constants.d.ts +31 -0
  164. package/dist/types/annotation/index.d.ts +117 -0
  165. package/dist/types/breakouts/events.d.ts +8 -0
  166. package/dist/types/breakouts/utils.d.ts +14 -0
  167. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  168. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  169. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  170. package/dist/types/common/logs/request.d.ts +2 -0
  171. package/dist/types/common/queue.d.ts +9 -7
  172. package/dist/types/config.d.ts +2 -7
  173. package/dist/types/constants.d.ts +191 -31
  174. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  175. package/dist/types/controls-options-manager/index.d.ts +17 -1
  176. package/dist/types/controls-options-manager/types.d.ts +43 -0
  177. package/dist/types/controls-options-manager/util.d.ts +1 -7
  178. package/dist/types/index.d.ts +6 -4
  179. package/dist/types/interceptors/index.d.ts +2 -0
  180. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  181. package/dist/types/interpretation/collection.d.ts +5 -0
  182. package/dist/types/interpretation/index.d.ts +5 -0
  183. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  184. package/dist/types/locus-info/index.d.ts +57 -4
  185. package/dist/types/locus-info/parser.d.ts +66 -6
  186. package/dist/types/media/index.d.ts +2 -0
  187. package/dist/types/media/properties.d.ts +34 -49
  188. package/dist/types/mediaQualityMetrics/config.d.ts +0 -128
  189. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  190. package/dist/types/meeting/index.d.ts +557 -496
  191. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  192. package/dist/types/meeting/muteState.d.ts +93 -25
  193. package/dist/types/meeting/request.d.ts +62 -43
  194. package/dist/types/meeting/util.d.ts +101 -1
  195. package/dist/types/meeting-info/index.d.ts +13 -1
  196. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  197. package/dist/types/meetings/collection.d.ts +17 -0
  198. package/dist/types/meetings/index.d.ts +112 -20
  199. package/dist/types/meetings/meetings.types.d.ts +4 -0
  200. package/dist/types/member/index.d.ts +14 -0
  201. package/dist/types/member/types.d.ts +32 -0
  202. package/dist/types/members/collection.d.ts +5 -0
  203. package/dist/types/members/index.d.ts +35 -2
  204. package/dist/types/members/request.d.ts +73 -9
  205. package/dist/types/members/types.d.ts +25 -0
  206. package/dist/types/members/util.d.ts +214 -1
  207. package/dist/types/metrics/constants.d.ts +15 -0
  208. package/dist/types/metrics/index.d.ts +4 -111
  209. package/dist/types/multistream/mediaRequestManager.d.ts +72 -5
  210. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  211. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  212. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  213. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  214. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  215. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  216. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  217. package/dist/types/reachability/index.d.ts +60 -95
  218. package/dist/types/reachability/request.d.ts +3 -1
  219. package/dist/types/reachability/util.d.ts +8 -0
  220. package/dist/types/reconnection-manager/index.d.ts +19 -0
  221. package/dist/types/recording-controller/index.d.ts +15 -1
  222. package/dist/types/recording-controller/util.d.ts +5 -4
  223. package/dist/types/roap/index.d.ts +2 -1
  224. package/dist/types/roap/request.d.ts +9 -8
  225. package/dist/types/roap/turnDiscovery.d.ts +21 -3
  226. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  227. package/dist/types/rtcMetrics/index.d.ts +54 -0
  228. package/dist/types/statsAnalyzer/index.d.ts +29 -11
  229. package/dist/types/webinar/collection.d.ts +16 -0
  230. package/dist/types/webinar/index.d.ts +5 -0
  231. package/dist/webinar/collection.js +44 -0
  232. package/dist/webinar/collection.js.map +1 -0
  233. package/dist/webinar/index.js +69 -0
  234. package/dist/webinar/index.js.map +1 -0
  235. package/package.json +22 -19
  236. package/src/annotation/annotation.types.ts +50 -0
  237. package/src/annotation/constants.ts +36 -0
  238. package/src/annotation/index.ts +328 -0
  239. package/src/breakouts/README.md +35 -11
  240. package/src/breakouts/breakout.ts +67 -9
  241. package/src/breakouts/events.ts +56 -0
  242. package/src/breakouts/index.ts +558 -59
  243. package/src/breakouts/utils.ts +42 -0
  244. package/src/common/errors/no-meeting-info.ts +24 -0
  245. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  246. package/src/common/errors/webex-errors.ts +44 -2
  247. package/src/common/logs/logger-proxy.ts +1 -1
  248. package/src/common/logs/request.ts +5 -1
  249. package/src/common/queue.ts +22 -8
  250. package/src/config.ts +4 -9
  251. package/src/constants.ts +214 -21
  252. package/src/controls-options-manager/enums.ts +12 -0
  253. package/src/controls-options-manager/index.ts +116 -21
  254. package/src/controls-options-manager/types.ts +59 -0
  255. package/src/controls-options-manager/util.ts +294 -14
  256. package/src/index.ts +44 -0
  257. package/src/interceptors/index.ts +3 -0
  258. package/src/interceptors/locusRetry.ts +67 -0
  259. package/src/interpretation/README.md +60 -0
  260. package/src/interpretation/collection.ts +19 -0
  261. package/src/interpretation/index.ts +332 -0
  262. package/src/interpretation/siLanguage.ts +18 -0
  263. package/src/locus-info/controlsUtils.ts +108 -0
  264. package/src/locus-info/index.ts +414 -59
  265. package/src/locus-info/infoUtils.ts +10 -2
  266. package/src/locus-info/mediaSharesUtils.ts +64 -0
  267. package/src/locus-info/parser.ts +258 -47
  268. package/src/locus-info/selfUtils.ts +81 -5
  269. package/src/media/index.ts +97 -107
  270. package/src/media/properties.ts +88 -117
  271. package/src/mediaQualityMetrics/config.ts +0 -135
  272. package/src/meeting/in-meeting-actions.ts +171 -3
  273. package/src/meeting/index.ts +3253 -2408
  274. package/src/meeting/locusMediaRequest.ts +313 -0
  275. package/src/meeting/muteState.ts +223 -136
  276. package/src/meeting/request.ts +142 -120
  277. package/src/meeting/util.ts +588 -395
  278. package/src/meeting-info/index.ts +81 -8
  279. package/src/meeting-info/meeting-info-v2.ts +170 -14
  280. package/src/meeting-info/util.ts +1 -1
  281. package/src/meeting-info/utilv2.ts +23 -23
  282. package/src/meetings/collection.ts +33 -0
  283. package/src/meetings/index.ts +497 -126
  284. package/src/meetings/meetings.types.ts +12 -0
  285. package/src/meetings/request.ts +2 -0
  286. package/src/meetings/util.ts +80 -11
  287. package/src/member/index.ts +58 -0
  288. package/src/member/types.ts +38 -0
  289. package/src/member/util.ts +141 -25
  290. package/src/members/collection.ts +8 -0
  291. package/src/members/index.ts +134 -8
  292. package/src/members/request.ts +97 -17
  293. package/src/members/types.ts +29 -0
  294. package/src/members/util.ts +333 -240
  295. package/src/metrics/constants.ts +15 -0
  296. package/src/metrics/index.ts +1 -469
  297. package/src/multistream/mediaRequestManager.ts +277 -82
  298. package/src/multistream/receiveSlot.ts +31 -17
  299. package/src/multistream/receiveSlotManager.ts +34 -24
  300. package/src/multistream/remoteMedia.ts +27 -2
  301. package/src/multistream/remoteMediaGroup.ts +59 -0
  302. package/src/multistream/remoteMediaManager.ts +148 -30
  303. package/src/multistream/sendSlotManager.ts +170 -0
  304. package/src/reachability/clusterReachability.ts +320 -0
  305. package/src/reachability/index.ts +229 -340
  306. package/src/reachability/request.ts +8 -4
  307. package/src/reachability/util.ts +24 -0
  308. package/src/reconnection-manager/index.ts +128 -106
  309. package/src/recording-controller/index.ts +20 -3
  310. package/src/recording-controller/util.ts +26 -9
  311. package/src/roap/index.ts +52 -23
  312. package/src/roap/request.ts +48 -67
  313. package/src/roap/turnDiscovery.ts +48 -26
  314. package/src/rtcMetrics/constants.ts +3 -0
  315. package/src/rtcMetrics/index.ts +124 -0
  316. package/src/statsAnalyzer/index.ts +220 -291
  317. package/src/statsAnalyzer/mqaUtil.ts +43 -44
  318. package/src/webinar/collection.ts +31 -0
  319. package/src/webinar/index.ts +62 -0
  320. package/test/integration/spec/converged-space-meetings.js +60 -3
  321. package/test/integration/spec/journey.js +320 -261
  322. package/test/integration/spec/space-meeting.js +76 -3
  323. package/test/unit/spec/annotation/index.ts +418 -0
  324. package/test/unit/spec/breakouts/breakout.ts +118 -28
  325. package/test/unit/spec/breakouts/events.ts +89 -0
  326. package/test/unit/spec/breakouts/index.ts +1349 -114
  327. package/test/unit/spec/breakouts/utils.js +52 -1
  328. package/test/unit/spec/common/queue.js +31 -2
  329. package/test/unit/spec/controls-options-manager/index.js +163 -0
  330. package/test/unit/spec/controls-options-manager/util.js +576 -60
  331. package/test/unit/spec/fixture/locus.js +1 -0
  332. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  333. package/test/unit/spec/interpretation/collection.ts +15 -0
  334. package/test/unit/spec/interpretation/index.ts +589 -0
  335. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  336. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  337. package/test/unit/spec/locus-info/index.js +1352 -33
  338. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  339. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  340. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  341. package/test/unit/spec/locus-info/parser.js +116 -35
  342. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  343. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  344. package/test/unit/spec/media/index.ts +118 -37
  345. package/test/unit/spec/media/properties.ts +2 -2
  346. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  347. package/test/unit/spec/meeting/index.js +6686 -2212
  348. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  349. package/test/unit/spec/meeting/muteState.js +402 -212
  350. package/test/unit/spec/meeting/request.js +459 -52
  351. package/test/unit/spec/meeting/utils.js +680 -67
  352. package/test/unit/spec/meeting-info/index.js +300 -0
  353. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  354. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  355. package/test/unit/spec/meetings/collection.js +26 -0
  356. package/test/unit/spec/meetings/index.js +1393 -212
  357. package/test/unit/spec/meetings/utils.js +202 -2
  358. package/test/unit/spec/member/index.js +61 -6
  359. package/test/unit/spec/member/util.js +510 -34
  360. package/test/unit/spec/members/index.js +432 -1
  361. package/test/unit/spec/members/request.js +206 -27
  362. package/test/unit/spec/members/utils.js +210 -0
  363. package/test/unit/spec/metrics/index.js +1 -50
  364. package/test/unit/spec/multistream/mediaRequestManager.ts +776 -162
  365. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  366. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  367. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  368. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  369. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  370. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  371. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  372. package/test/unit/spec/reachability/index.ts +477 -14
  373. package/test/unit/spec/reachability/request.js +3 -1
  374. package/test/unit/spec/reachability/util.ts +40 -0
  375. package/test/unit/spec/reconnection-manager/index.js +118 -11
  376. package/test/unit/spec/recording-controller/index.js +294 -218
  377. package/test/unit/spec/recording-controller/util.js +223 -96
  378. package/test/unit/spec/roap/index.ts +180 -83
  379. package/test/unit/spec/roap/request.ts +100 -62
  380. package/test/unit/spec/roap/turnDiscovery.ts +76 -34
  381. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  382. package/test/unit/spec/stats-analyzer/index.js +621 -12
  383. package/test/unit/spec/webinar/collection.ts +13 -0
  384. package/test/unit/spec/webinar/index.ts +60 -0
  385. package/test/utils/integrationTestUtils.js +46 -0
  386. package/test/utils/testUtils.js +0 -57
  387. package/dist/metrics/config.js +0 -289
  388. package/dist/metrics/config.js.map +0 -1
  389. package/dist/types/metrics/config.d.ts +0 -169
  390. package/src/index.js +0 -16
  391. package/src/metrics/config.ts +0 -485
@@ -1,11 +1,9 @@
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 {IP_VERSION, REACHABILITY} from '../constants';
6
+ import {LocusMediaRequest} from '../meeting/locusMediaRequest';
9
7
 
10
8
  /**
11
9
  * @class RoapRequest
@@ -20,23 +18,10 @@ export default class RoapRequest extends StatelessWebexPlugin {
20
18
  let joinCookie;
21
19
 
22
20
  // @ts-ignore
23
- const reachabilityData = await this.webex.boundedStorage
24
- .get(REACHABILITY.namespace, REACHABILITY.localStorageResult)
25
- .catch(() => {});
26
-
27
- if (reachabilityData) {
28
- try {
29
- const reachabilityResult = JSON.parse(reachabilityData);
21
+ const reachabilityResult = await this.webex.meetings.reachability.getReachabilityResults();
30
22
 
31
- /* istanbul ignore else */
32
- if (reachabilityResult && Object.keys(reachabilityResult).length) {
33
- localSdp.reachability = reachabilityResult;
34
- }
35
- } catch (e) {
36
- LoggerProxy.logger.error(
37
- `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
38
- );
39
- }
23
+ if (reachabilityResult && Object.keys(reachabilityResult).length) {
24
+ localSdp.reachability = reachabilityResult;
40
25
  }
41
26
 
42
27
  // @ts-ignore
@@ -64,72 +49,65 @@ export default class RoapRequest extends StatelessWebexPlugin {
64
49
  * @param {String} options.locusSelfUrl
65
50
  * @param {String} options.mediaId
66
51
  * @param {String} options.correlationId
67
- * @param {Boolean} options.audioMuted
68
- * @param {Boolean} options.videoMuted
69
52
  * @param {String} options.meetingId
70
- * @param {Boolean} options.preferTranscoding
53
+ * @param {IP_VERSION} options.ipVersion only required for offers
71
54
  * @returns {Promise} returns the response/failure of the request
72
55
  */
73
56
  async sendRoap(options: {
74
57
  roapMessage: any;
75
58
  locusSelfUrl: string;
76
59
  mediaId: string;
77
- correlationId: string;
78
- audioMuted: boolean;
79
- videoMuted: boolean;
80
60
  meetingId: string;
81
- preferTranscoding?: boolean;
61
+ ipVersion?: IP_VERSION;
62
+ locusMediaRequest?: LocusMediaRequest;
82
63
  }) {
83
- const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;
64
+ const {roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest, ipVersion} = options;
84
65
 
85
66
  if (!mediaId) {
86
- LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
67
+ LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');
87
68
  }
88
69
 
70
+ if (!locusMediaRequest) {
71
+ LoggerProxy.logger.warn(
72
+ 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'
73
+ );
74
+
75
+ return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));
76
+ }
89
77
  const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({
90
78
  roapMessage,
91
- // eslint-disable-next-line no-warning-comments
92
- // TODO: check whats the need for video and audiomute
93
- audioMuted: !!options.audioMuted,
94
- videoMuted: !!options.videoMuted,
95
79
  });
96
80
 
97
- const mediaUrl = `${locusSelfUrl}/${MEDIA}`;
98
- // @ts-ignore
99
- const deviceUrl = this.webex.internal.device.url;
100
-
101
81
  LoggerProxy.logger.info(
102
- `Roap:request#sendRoap --> ${mediaUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
82
+ `Roap:request#sendRoap --> ${locusSelfUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
103
83
  );
104
84
 
105
- Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});
106
-
107
85
  // @ts-ignore
108
- return this.request({
109
- uri: mediaUrl,
110
- method: HTTP_VERBS.PUT,
111
- body: {
112
- device: {
113
- url: deviceUrl,
114
- // @ts-ignore
115
- deviceType: this.config.meetings.deviceType,
116
- },
117
- correlationId,
118
- localMedias: [
119
- {
120
- localSdp: JSON.stringify(localSdpWithReachabilityData),
121
- mediaId: options.mediaId,
122
- },
123
- ],
124
- clientMediaPreferences: {
125
- preferTranscoding: options.preferTranscoding ?? true,
126
- joinCookie,
127
- },
86
+ this.webex.internal.newMetrics.submitClientEvent({
87
+ name: 'client.locus.media.request',
88
+ options: {
89
+ meetingId,
128
90
  },
129
- })
130
- .then((res) => {
131
- Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});
91
+ });
132
92
 
93
+ return locusMediaRequest
94
+ .send({
95
+ type: 'RoapMessage',
96
+ selfUrl: locusSelfUrl,
97
+ joinCookie,
98
+ mediaId,
99
+ roapMessage,
100
+ reachability: localSdpWithReachabilityData.reachability,
101
+ ipVersion,
102
+ })
103
+ .then((res) => {
104
+ // @ts-ignore
105
+ this.webex.internal.newMetrics.submitClientEvent({
106
+ name: 'client.locus.media.response',
107
+ options: {
108
+ meetingId,
109
+ },
110
+ });
133
111
  // always it will be the first mediaConnection Object
134
112
  const mediaConnections =
135
113
  res.body.mediaConnections &&
@@ -153,10 +131,13 @@ export default class RoapRequest extends StatelessWebexPlugin {
153
131
  };
154
132
  })
155
133
  .catch((err) => {
156
- Metrics.postEvent({
157
- event: eventType.MEDIA_RESPONSE,
158
- meetingId,
159
- data: {error: Metrics.parseLocusError(err, true)},
134
+ // @ts-ignore
135
+ this.webex.internal.newMetrics.submitClientEvent({
136
+ name: 'client.locus.media.response',
137
+ options: {
138
+ meetingId,
139
+ rawError: err,
140
+ },
160
141
  });
161
142
  LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);
162
143
  LoggerProxy.logger.error(
@@ -8,6 +8,7 @@ import {ROAP} from '../constants';
8
8
 
9
9
  import RoapRequest from './request';
10
10
  import Meeting from '../meeting';
11
+ import MeetingUtil from '../meeting/util';
11
12
 
12
13
  const TURN_DISCOVERY_TIMEOUT = 10; // in seconds
13
14
 
@@ -176,15 +177,14 @@ export default class TurnDiscovery {
176
177
  return this.roapRequest
177
178
  .sendRoap({
178
179
  roapMessage,
179
- correlationId: meeting.correlationId,
180
180
  // @ts-ignore - Fix missing type
181
181
  locusSelfUrl: meeting.selfUrl,
182
182
  // @ts-ignore - Fix missing type
183
183
  mediaId: isReconnecting ? '' : meeting.mediaId,
184
- audioMuted: meeting.audio?.isLocallyMuted(),
185
- videoMuted: meeting.video?.isLocallyMuted(),
186
184
  meetingId: meeting.id,
187
- preferTranscoding: !meeting.isMultistream,
185
+ locusMediaRequest: meeting.locusMediaRequest,
186
+ // @ts-ignore - because of meeting.webex
187
+ ipVersion: MeetingUtil.getIpVersion(meeting.webex),
188
188
  })
189
189
  .then(({mediaConnections}) => {
190
190
  if (mediaConnections) {
@@ -213,14 +213,45 @@ export default class TurnDiscovery {
213
213
  locusSelfUrl: meeting.selfUrl,
214
214
  // @ts-ignore - fix type
215
215
  mediaId: meeting.mediaId,
216
- correlationId: meeting.correlationId,
217
- audioMuted: meeting.audio?.isLocallyMuted(),
218
- videoMuted: meeting.video?.isLocallyMuted(),
219
216
  meetingId: meeting.id,
220
- preferTranscoding: !meeting.isMultistream,
217
+ locusMediaRequest: meeting.locusMediaRequest,
221
218
  });
222
219
  }
223
220
 
221
+ /**
222
+ * Gets the reason why reachability is skipped.
223
+ *
224
+ * @param {Meeting} meeting
225
+ * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
226
+ */
227
+ private async getSkipReason(meeting: Meeting): Promise<string> {
228
+ const isAnyPublicClusterReachable =
229
+ // @ts-ignore - fix type
230
+ await meeting.webex.meetings.reachability.isAnyPublicClusterReachable();
231
+
232
+ if (isAnyPublicClusterReachable) {
233
+ LoggerProxy.logger.info(
234
+ 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
235
+ );
236
+
237
+ return 'reachability';
238
+ }
239
+
240
+ return '';
241
+ }
242
+
243
+ /**
244
+ * Checks if TURN discovery is skipped.
245
+ *
246
+ * @param {Meeting} meeting
247
+ * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
248
+ */
249
+ async isSkipped(meeting) {
250
+ const skipReason = await this.getSkipReason(meeting);
251
+
252
+ return !!skipReason;
253
+ }
254
+
224
255
  /**
225
256
  * Retrieves TURN server information from the backend by doing
226
257
  * a roap message exchange:
@@ -234,34 +265,25 @@ export default class TurnDiscovery {
234
265
  * so it works fine no matter if TURN discovery is done or not.
235
266
  *
236
267
  * @param {Meeting} meeting
237
- * @param {Boolean} isReconnecting should be set to true if this is a new
268
+ * @param {Boolean} [isReconnecting] should be set to true if this is a new
238
269
  * media connection just after a reconnection
270
+ * @param {Boolean} [isForced]
239
271
  * @returns {Promise}
240
272
  */
241
- async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
242
- // @ts-ignore - fix type
243
- const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
273
+ async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean, isForced?: boolean) {
274
+ let turnDiscoverySkippedReason: string;
244
275
 
245
- if (isAnyClusterReachable) {
246
- LoggerProxy.logger.info(
247
- 'Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery'
248
- );
276
+ if (!isForced) {
277
+ turnDiscoverySkippedReason = await this.getSkipReason(meeting);
278
+ }
249
279
 
280
+ if (turnDiscoverySkippedReason) {
250
281
  return {
251
282
  turnServerInfo: undefined,
252
- turnDiscoverySkippedReason: 'reachability',
283
+ turnDiscoverySkippedReason,
253
284
  };
254
285
  }
255
286
 
256
- // @ts-ignore - fix type
257
- if (!meeting.config.experimental.enableTurnDiscovery) {
258
- LoggerProxy.logger.info(
259
- 'Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it'
260
- );
261
-
262
- return {turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'};
263
- }
264
-
265
287
  return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)
266
288
  .then(() => this.waitForTurnDiscoveryResponse())
267
289
  .then(() => this.sendRoapOK(meeting))
@@ -0,0 +1,3 @@
1
+ const RTC_METRICS = {APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'};
2
+
3
+ export {RTC_METRICS as default};
@@ -0,0 +1,124 @@
1
+ /* eslint-disable class-methods-use-this */
2
+ import {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';
3
+ import RTC_METRICS from './constants';
4
+
5
+ /**
6
+ * Rtc Metrics
7
+ */
8
+ export default class RtcMetrics {
9
+ /**
10
+ * Array of MetricData items to be sent to the metrics service.
11
+ */
12
+ metricsQueue = [];
13
+
14
+ intervalId: number;
15
+
16
+ webex: any;
17
+
18
+ meetingId: string;
19
+
20
+ correlationId: string;
21
+
22
+ /**
23
+ * Initialize the interval.
24
+ *
25
+ * @param {object} webex - The main `webex` object.
26
+ * @param {string} meetingId - The meeting id.
27
+ * @param {string} correlationId - The correlation id.
28
+ */
29
+ constructor(webex, meetingId, correlationId) {
30
+ // `window` is used to prevent typescript from returning a NodeJS.Timer.
31
+ this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);
32
+ this.meetingId = meetingId;
33
+ this.webex = webex;
34
+ this.correlationId = correlationId;
35
+ // Send the first set of metrics at 5 seconds in the case of a user leaving the call shortly after joining.
36
+ setTimeout(this.sendMetricsInQueue.bind(this), 5 * 1000);
37
+ }
38
+
39
+ /**
40
+ * Check to see if the metrics queue has any items.
41
+ *
42
+ * @returns {void}
43
+ */
44
+ public sendMetricsInQueue() {
45
+ if (this.metricsQueue.length) {
46
+ this.sendMetrics();
47
+ this.metricsQueue = [];
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Add metrics items to the metrics queue.
53
+ *
54
+ * @param {object} data - An object with a payload array of metrics items.
55
+ *
56
+ * @returns {void}
57
+ */
58
+ addMetrics(data) {
59
+ if (data.payload.length) {
60
+ if (data.name === 'stats-report') {
61
+ data.payload = data.payload.map(this.anonymizeIp);
62
+ }
63
+ this.metricsQueue.push(data);
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Clear the metrics interval.
69
+ *
70
+ * @returns {void}
71
+ */
72
+ closeMetrics() {
73
+ this.sendMetricsInQueue();
74
+ clearInterval(this.intervalId);
75
+ }
76
+
77
+ /**
78
+ * Anonymize IP addresses.
79
+ *
80
+ * @param {array} stats - An RTCStatsReport organized into an array of strings.
81
+ * @returns {string}
82
+ */
83
+ anonymizeIp(stats: string): string {
84
+ const data = JSON.parse(stats);
85
+ // on local and remote candidates, anonymize the last 4 bits.
86
+ if (data.type === 'local-candidate' || data.type === 'remote-candidate') {
87
+ data.ip = CallDiagnosticUtils.anonymizeIPAddress(data.ip) || undefined;
88
+ data.address = CallDiagnosticUtils.anonymizeIPAddress(data.address) || undefined;
89
+ data.relatedAddress =
90
+ CallDiagnosticUtils.anonymizeIPAddress(data.relatedAddress) || undefined;
91
+ }
92
+
93
+ return JSON.stringify(data);
94
+ }
95
+
96
+ /**
97
+ * Send metrics to the metrics service.
98
+ *
99
+ * @returns {void}
100
+ */
101
+ private sendMetrics() {
102
+ this.webex.request({
103
+ method: 'POST',
104
+ service: 'unifiedTelemetry',
105
+ resource: 'metric/v2',
106
+ headers: {
107
+ type: 'webrtcMedia',
108
+ appId: RTC_METRICS.APP_ID,
109
+ },
110
+ body: {
111
+ metrics: [
112
+ {
113
+ type: 'webrtc',
114
+ version: '1.0.1',
115
+ userId: this.webex.internal.device.userId,
116
+ meetingId: this.meetingId,
117
+ correlationId: this.correlationId,
118
+ data: this.metricsQueue,
119
+ },
120
+ ],
121
+ },
122
+ });
123
+ }
124
+ }