@webex/plugin-meetings 3.0.0-beta.22 → 3.0.0-beta.221

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 (419) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +3 -2
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/queue.js +24 -9
  25. package/dist/common/queue.js.map +1 -1
  26. package/dist/config.js +3 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +188 -30
  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 +319 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +106 -1
  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 +366 -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 +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +357 -62
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +43 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +219 -63
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +49 -106
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +29 -90
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/mediaQualityMetrics/config.js +505 -493
  65. package/dist/mediaQualityMetrics/config.js.map +1 -1
  66. package/dist/meeting/in-meeting-actions.js +90 -2
  67. package/dist/meeting/in-meeting-actions.js.map +1 -1
  68. package/dist/meeting/index.js +2587 -2560
  69. package/dist/meeting/index.js.map +1 -1
  70. package/dist/meeting/locusMediaRequest.js +292 -0
  71. package/dist/meeting/locusMediaRequest.js.map +1 -0
  72. package/dist/meeting/muteState.js +228 -123
  73. package/dist/meeting/muteState.js.map +1 -1
  74. package/dist/meeting/request.js +244 -194
  75. package/dist/meeting/request.js.map +1 -1
  76. package/dist/meeting/util.js +568 -414
  77. package/dist/meeting/util.js.map +1 -1
  78. package/dist/meeting-info/index.js +48 -7
  79. package/dist/meeting-info/index.js.map +1 -1
  80. package/dist/meeting-info/meeting-info-v2.js +171 -51
  81. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +20 -5
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +361 -84
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +88 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -5
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +3 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +49 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +52 -34
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +173 -59
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/networkQualityMonitor/index.js +4 -2
  127. package/dist/networkQualityMonitor/index.js.map +1 -1
  128. package/dist/reachability/index.js +90 -30
  129. package/dist/reachability/index.js.map +1 -1
  130. package/dist/reachability/request.js +16 -7
  131. package/dist/reachability/request.js.map +1 -1
  132. package/dist/reconnection-manager/index.js +196 -155
  133. package/dist/reconnection-manager/index.js.map +1 -1
  134. package/dist/recording-controller/index.js +21 -2
  135. package/dist/recording-controller/index.js.map +1 -1
  136. package/dist/recording-controller/util.js +9 -8
  137. package/dist/recording-controller/util.js.map +1 -1
  138. package/dist/roap/index.js +25 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +111 -89
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +97 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/rtcMetrics/constants.js +12 -0
  145. package/dist/rtcMetrics/constants.js.map +1 -0
  146. package/dist/rtcMetrics/index.js +117 -0
  147. package/dist/rtcMetrics/index.js.map +1 -0
  148. package/dist/statsAnalyzer/global.js +1 -93
  149. package/dist/statsAnalyzer/global.js.map +1 -1
  150. package/dist/statsAnalyzer/index.js +326 -311
  151. package/dist/statsAnalyzer/index.js.map +1 -1
  152. package/dist/statsAnalyzer/mqaUtil.js +90 -53
  153. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  154. package/dist/types/annotation/annotation.types.d.ts +42 -0
  155. package/dist/types/annotation/constants.d.ts +31 -0
  156. package/dist/types/annotation/index.d.ts +117 -0
  157. package/dist/types/breakouts/breakout.d.ts +8 -0
  158. package/dist/types/breakouts/collection.d.ts +5 -0
  159. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  160. package/dist/types/breakouts/events.d.ts +8 -0
  161. package/dist/types/breakouts/index.d.ts +5 -0
  162. package/dist/types/breakouts/request.d.ts +22 -0
  163. package/dist/types/breakouts/utils.d.ts +15 -0
  164. package/dist/types/common/browser-detection.d.ts +9 -0
  165. package/dist/types/common/collection.d.ts +48 -0
  166. package/dist/types/common/config.d.ts +2 -0
  167. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  168. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  169. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  170. package/dist/types/common/errors/media.d.ts +15 -0
  171. package/dist/types/common/errors/parameter.d.ts +15 -0
  172. package/dist/types/common/errors/password-error.d.ts +15 -0
  173. package/dist/types/common/errors/permission.d.ts +14 -0
  174. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  175. package/dist/types/common/errors/reconnection.d.ts +15 -0
  176. package/dist/types/common/errors/stats.d.ts +15 -0
  177. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  178. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  179. package/dist/types/common/events/events-scope.d.ts +17 -0
  180. package/dist/types/common/events/events.d.ts +12 -0
  181. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  182. package/dist/types/common/events/util.d.ts +2 -0
  183. package/dist/types/common/logs/logger-config.d.ts +2 -0
  184. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  185. package/dist/types/common/logs/request.d.ts +34 -0
  186. package/dist/types/common/queue.d.ts +34 -0
  187. package/dist/types/config.d.ts +72 -0
  188. package/dist/types/constants.d.ts +1028 -0
  189. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  190. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  191. package/dist/types/controls-options-manager/index.d.ts +136 -0
  192. package/dist/types/controls-options-manager/types.d.ts +43 -0
  193. package/dist/types/controls-options-manager/util.d.ts +1 -0
  194. package/dist/types/index.d.ts +7 -0
  195. package/dist/types/interpretation/collection.d.ts +5 -0
  196. package/dist/types/interpretation/index.d.ts +5 -0
  197. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  198. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  199. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  200. package/dist/types/locus-info/fullState.d.ts +2 -0
  201. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  202. package/dist/types/locus-info/index.d.ts +322 -0
  203. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  204. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  205. package/dist/types/locus-info/parser.d.ts +271 -0
  206. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  207. package/dist/types/media/index.d.ts +34 -0
  208. package/dist/types/media/properties.d.ts +93 -0
  209. package/dist/types/media/util.d.ts +2 -0
  210. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  211. package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
  212. package/dist/types/meeting/index.d.ts +1512 -0
  213. package/dist/types/meeting/locusMediaRequest.d.ts +75 -0
  214. package/dist/types/meeting/muteState.d.ts +184 -0
  215. package/dist/types/meeting/request.d.ts +289 -0
  216. package/dist/types/meeting/request.type.d.ts +11 -0
  217. package/dist/types/meeting/state.d.ts +9 -0
  218. package/dist/types/meeting/util.d.ts +94 -0
  219. package/dist/types/meeting-info/collection.d.ts +20 -0
  220. package/dist/types/meeting-info/index.d.ts +62 -0
  221. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  222. package/dist/types/meeting-info/request.d.ts +22 -0
  223. package/dist/types/meeting-info/util.d.ts +2 -0
  224. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  225. package/dist/types/meetings/collection.d.ts +31 -0
  226. package/dist/types/meetings/index.d.ts +361 -0
  227. package/dist/types/meetings/meetings.types.d.ts +4 -0
  228. package/dist/types/meetings/request.d.ts +27 -0
  229. package/dist/types/meetings/util.d.ts +18 -0
  230. package/dist/types/member/index.d.ts +159 -0
  231. package/dist/types/member/types.d.ts +32 -0
  232. package/dist/types/member/util.d.ts +2 -0
  233. package/dist/types/members/collection.d.ts +29 -0
  234. package/dist/types/members/index.d.ts +353 -0
  235. package/dist/types/members/request.d.ts +114 -0
  236. package/dist/types/members/types.d.ts +24 -0
  237. package/dist/types/members/util.d.ts +210 -0
  238. package/dist/types/metrics/constants.d.ts +55 -0
  239. package/dist/types/metrics/index.d.ts +45 -0
  240. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  241. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  242. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  243. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  244. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  245. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  246. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  247. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  248. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  249. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  250. package/dist/types/reachability/index.d.ts +158 -0
  251. package/dist/types/reachability/request.d.ts +39 -0
  252. package/dist/types/reactions/constants.d.ts +3 -0
  253. package/dist/types/reactions/reactions.d.ts +4 -0
  254. package/dist/types/reactions/reactions.type.d.ts +52 -0
  255. package/dist/types/reconnection-manager/index.d.ts +126 -0
  256. package/dist/types/recording-controller/enums.d.ts +7 -0
  257. package/dist/types/recording-controller/index.d.ts +207 -0
  258. package/dist/types/recording-controller/util.d.ts +14 -0
  259. package/dist/types/roap/index.d.ts +77 -0
  260. package/dist/types/roap/request.d.ts +38 -0
  261. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  262. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  263. package/dist/types/rtcMetrics/index.d.ts +47 -0
  264. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  265. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  266. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  267. package/dist/types/transcription/index.d.ts +64 -0
  268. package/package.json +23 -20
  269. package/src/annotation/annotation.types.ts +50 -0
  270. package/src/annotation/constants.ts +36 -0
  271. package/src/annotation/index.ts +328 -0
  272. package/src/breakouts/README.md +44 -14
  273. package/src/breakouts/breakout.ts +87 -9
  274. package/src/breakouts/edit-lock-error.ts +25 -0
  275. package/src/breakouts/events.ts +56 -0
  276. package/src/breakouts/index.ts +710 -10
  277. package/src/breakouts/request.ts +55 -0
  278. package/src/breakouts/utils.ts +57 -0
  279. package/src/common/errors/webex-errors.ts +6 -2
  280. package/src/common/logs/logger-proxy.ts +1 -1
  281. package/src/common/queue.ts +22 -8
  282. package/src/config.ts +2 -7
  283. package/src/constants.ts +175 -21
  284. package/src/controls-options-manager/constants.ts +5 -0
  285. package/src/controls-options-manager/enums.ts +18 -0
  286. package/src/controls-options-manager/index.ts +278 -0
  287. package/src/controls-options-manager/types.ts +59 -0
  288. package/src/controls-options-manager/util.ts +300 -0
  289. package/src/index.ts +39 -0
  290. package/src/interpretation/README.md +60 -0
  291. package/src/interpretation/collection.ts +19 -0
  292. package/src/interpretation/index.ts +332 -0
  293. package/src/interpretation/siLanguage.ts +18 -0
  294. package/src/locus-info/controlsUtils.ts +108 -0
  295. package/src/locus-info/index.ts +381 -59
  296. package/src/locus-info/infoUtils.ts +10 -2
  297. package/src/locus-info/mediaSharesUtils.ts +48 -0
  298. package/src/locus-info/parser.ts +224 -39
  299. package/src/locus-info/selfUtils.ts +81 -5
  300. package/src/media/index.ts +89 -109
  301. package/src/media/properties.ts +49 -90
  302. package/src/mediaQualityMetrics/config.ts +379 -377
  303. package/src/meeting/in-meeting-actions.ts +179 -3
  304. package/src/meeting/index.ts +2062 -2137
  305. package/src/meeting/locusMediaRequest.ts +314 -0
  306. package/src/meeting/muteState.ts +227 -130
  307. package/src/meeting/request.ts +157 -116
  308. package/src/meeting/util.ts +555 -396
  309. package/src/meeting-info/index.ts +54 -8
  310. package/src/meeting-info/meeting-info-v2.ts +148 -14
  311. package/src/meeting-info/utilv2.ts +13 -3
  312. package/src/meetings/collection.ts +20 -0
  313. package/src/meetings/index.ts +397 -102
  314. package/src/meetings/meetings.types.ts +12 -0
  315. package/src/meetings/request.ts +2 -0
  316. package/src/meetings/util.ts +103 -4
  317. package/src/member/index.ts +49 -0
  318. package/src/member/types.ts +38 -0
  319. package/src/member/util.ts +127 -25
  320. package/src/members/collection.ts +8 -0
  321. package/src/members/index.ts +107 -6
  322. package/src/members/request.ts +97 -17
  323. package/src/members/types.ts +28 -0
  324. package/src/members/util.ts +319 -240
  325. package/src/metrics/constants.ts +2 -4
  326. package/src/metrics/index.ts +1 -490
  327. package/src/multistream/mediaRequestManager.ts +289 -79
  328. package/src/multistream/receiveSlot.ts +55 -18
  329. package/src/multistream/receiveSlotManager.ts +46 -24
  330. package/src/multistream/remoteMedia.ts +27 -2
  331. package/src/multistream/remoteMediaGroup.ts +59 -0
  332. package/src/multistream/remoteMediaManager.ts +113 -32
  333. package/src/networkQualityMonitor/index.ts +6 -6
  334. package/src/reachability/index.ts +76 -18
  335. package/src/reachability/request.ts +16 -7
  336. package/src/reconnection-manager/index.ts +68 -43
  337. package/src/recording-controller/index.ts +20 -3
  338. package/src/recording-controller/util.ts +26 -9
  339. package/src/roap/index.ts +25 -30
  340. package/src/roap/request.ts +103 -95
  341. package/src/roap/turnDiscovery.ts +51 -25
  342. package/src/rtcMetrics/constants.ts +3 -0
  343. package/src/rtcMetrics/index.ts +100 -0
  344. package/src/statsAnalyzer/global.ts +1 -94
  345. package/src/statsAnalyzer/index.ts +376 -386
  346. package/src/statsAnalyzer/mqaUtil.ts +100 -99
  347. package/test/integration/spec/converged-space-meetings.js +233 -0
  348. package/test/integration/spec/journey.js +336 -259
  349. package/test/integration/spec/space-meeting.js +77 -4
  350. package/test/unit/spec/annotation/index.ts +418 -0
  351. package/test/unit/spec/breakouts/breakout.ts +142 -24
  352. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  353. package/test/unit/spec/breakouts/events.ts +89 -0
  354. package/test/unit/spec/breakouts/index.ts +1545 -48
  355. package/test/unit/spec/breakouts/request.ts +104 -0
  356. package/test/unit/spec/breakouts/utils.js +72 -0
  357. package/test/unit/spec/common/queue.js +31 -2
  358. package/test/unit/spec/controls-options-manager/index.js +287 -0
  359. package/test/unit/spec/controls-options-manager/util.js +582 -0
  360. package/test/unit/spec/fixture/locus.js +1 -0
  361. package/test/unit/spec/interpretation/collection.ts +15 -0
  362. package/test/unit/spec/interpretation/index.ts +589 -0
  363. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  364. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  365. package/test/unit/spec/locus-info/index.js +1169 -36
  366. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  367. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  368. package/test/unit/spec/locus-info/parser.js +62 -22
  369. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  370. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  371. package/test/unit/spec/media/index.ts +138 -28
  372. package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
  373. package/test/unit/spec/meeting/index.js +3510 -1747
  374. package/test/unit/spec/meeting/locusMediaRequest.ts +443 -0
  375. package/test/unit/spec/meeting/muteState.js +370 -208
  376. package/test/unit/spec/meeting/request.js +417 -45
  377. package/test/unit/spec/meeting/utils.js +601 -53
  378. package/test/unit/spec/meeting-info/index.js +181 -0
  379. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  380. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  381. package/test/unit/spec/meetings/collection.js +14 -0
  382. package/test/unit/spec/meetings/index.js +874 -150
  383. package/test/unit/spec/meetings/utils.js +206 -2
  384. package/test/unit/spec/member/index.js +58 -4
  385. package/test/unit/spec/member/util.js +479 -35
  386. package/test/unit/spec/members/index.js +319 -1
  387. package/test/unit/spec/members/request.js +206 -27
  388. package/test/unit/spec/members/utils.js +184 -0
  389. package/test/unit/spec/metrics/index.js +1 -50
  390. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  391. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  392. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  393. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  394. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  395. package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
  396. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  397. package/test/unit/spec/reachability/index.ts +185 -7
  398. package/test/unit/spec/reachability/request.js +68 -0
  399. package/test/unit/spec/reconnection-manager/index.js +59 -6
  400. package/test/unit/spec/recording-controller/index.js +294 -218
  401. package/test/unit/spec/recording-controller/util.js +223 -96
  402. package/test/unit/spec/roap/index.ts +27 -51
  403. package/test/unit/spec/roap/request.ts +202 -85
  404. package/test/unit/spec/roap/turnDiscovery.ts +36 -8
  405. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  406. package/test/unit/spec/stats-analyzer/index.js +92 -41
  407. package/test/utils/constants.js +9 -0
  408. package/test/utils/integrationTestUtils.js +46 -0
  409. package/test/utils/testUtils.js +0 -45
  410. package/test/utils/webex-config.js +4 -0
  411. package/test/utils/webex-test-users.js +6 -3
  412. package/dist/meeting/effectsState.js +0 -262
  413. package/dist/meeting/effectsState.js.map +0 -1
  414. package/dist/metrics/config.js +0 -299
  415. package/dist/metrics/config.js.map +0 -1
  416. package/src/index.js +0 -16
  417. package/src/meeting/effectsState.ts +0 -211
  418. package/src/metrics/config.ts +0 -495
  419. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -1,25 +1,25 @@
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
12
10
  */
13
11
  export default class RoapRequest extends StatelessWebexPlugin {
14
12
  /**
15
- * Joins a meeting via ROAP
13
+ * Returns reachability data.
16
14
  * @param {Object} localSdp
17
- * @returns {Promise} returns a promise that resolves/rejects whatever the request does
15
+ * @returns {Object}
18
16
  */
19
- async attachRechabilityData(localSdp) {
17
+ async attachReachabilityData(localSdp) {
18
+ let joinCookie;
19
+
20
20
  // @ts-ignore
21
21
  const reachabilityData = await this.webex.boundedStorage
22
- .get(REACHABILITY.namespace, REACHABILITY.localStorage)
22
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageResult)
23
23
  .catch(() => {});
24
24
 
25
25
  if (reachabilityData) {
@@ -37,7 +37,22 @@ export default class RoapRequest extends StatelessWebexPlugin {
37
37
  }
38
38
  }
39
39
 
40
- 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};
41
56
  }
42
57
 
43
58
  /**
@@ -47,111 +62,104 @@ export default class RoapRequest extends StatelessWebexPlugin {
47
62
  * @param {String} options.locusSelfUrl
48
63
  * @param {String} options.mediaId
49
64
  * @param {String} options.correlationId
50
- * @param {Boolean} options.audioMuted
51
- * @param {Boolean} options.videoMuted
52
65
  * @param {String} options.meetingId
53
- * @param {Boolean} options.preferTranscoding
54
66
  * @returns {Promise} returns the response/failure of the request
55
67
  */
56
- sendRoap(options: {
68
+ async sendRoap(options: {
57
69
  roapMessage: any;
58
70
  locusSelfUrl: string;
59
71
  mediaId: string;
60
- correlationId: string;
61
- audioMuted: boolean;
62
- videoMuted: boolean;
63
72
  meetingId: string;
64
- preferTranscoding?: boolean;
73
+ ipVersion: IP_VERSION;
74
+ locusMediaRequest?: LocusMediaRequest;
65
75
  }) {
66
- const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;
76
+ const {roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest, ipVersion} = options;
67
77
 
68
78
  if (!mediaId) {
69
- LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
79
+ LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');
70
80
  }
71
81
 
72
- const mediaUrl = `${locusSelfUrl}/${MEDIA}`;
73
- // @ts-ignore
74
- const deviceUrl = this.webex.internal.device.url;
82
+ if (!locusMediaRequest) {
83
+ LoggerProxy.logger.warn(
84
+ 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'
85
+ );
86
+
87
+ return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));
88
+ }
89
+ const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({
90
+ roapMessage,
91
+ });
75
92
 
76
93
  LoggerProxy.logger.info(
77
- `Roap:request#sendRoap --> ${mediaUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
94
+ `Roap:request#sendRoap --> ${locusSelfUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
78
95
  );
79
96
 
80
- Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});
97
+ // @ts-ignore
98
+ this.webex.internal.newMetrics.submitClientEvent({
99
+ name: 'client.locus.media.request',
100
+ options: {
101
+ meetingId,
102
+ },
103
+ });
81
104
 
82
- return this.attachRechabilityData({
83
- roapMessage,
84
- // eslint-disable-next-line no-warning-comments
85
- // TODO: check whats the need for video and audiomute
86
- audioMuted: !!options.audioMuted,
87
- videoMuted: !!options.videoMuted,
88
- }).then((sdpWithReachability) => {
89
- // @ts-ignore
90
- return this.webex
91
- .request({
92
- uri: mediaUrl,
93
- method: HTTP_VERBS.PUT,
94
- body: {
95
- device: {
96
- url: deviceUrl,
97
- // @ts-ignore
98
- deviceType: this.config.meetings.deviceType,
99
- },
100
- correlationId,
101
- localMedias: [
102
- {
103
- localSdp: JSON.stringify(sdpWithReachability),
104
- mediaId: options.mediaId,
105
- },
106
- ],
107
- clientMediaPreferences: {
108
- preferTranscoding: options.preferTranscoding ?? true,
109
- },
105
+ return locusMediaRequest
106
+ .send({
107
+ type: 'RoapMessage',
108
+ selfUrl: locusSelfUrl,
109
+ joinCookie,
110
+ mediaId,
111
+ roapMessage,
112
+ reachability: localSdpWithReachabilityData.reachability,
113
+ ipVersion,
114
+ })
115
+ .then((res) => {
116
+ // @ts-ignore
117
+ this.webex.internal.newMetrics.submitClientEvent({
118
+ name: 'client.locus.media.response',
119
+ options: {
120
+ meetingId,
110
121
  },
111
- })
112
- .then((res) => {
113
- Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});
114
-
115
- // always it will be the first mediaConnection Object
116
- const mediaConnections =
117
- res.body.mediaConnections &&
118
- res.body.mediaConnections.length > 0 &&
119
- res.body.mediaConnections[0];
120
-
121
- LoggerProxy.logger.info(
122
- `Roap:request#sendRoap --> response:${JSON.stringify(
123
- mediaConnections,
124
- null,
125
- 2
126
- )}'\n StatusCode:'${res.statusCode}`
127
- );
128
- const {locus} = res.body;
129
-
130
- locus.roapSeq = options.roapMessage.seq;
131
-
132
- return {
133
- locus,
134
- ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),
135
- };
136
- })
137
- .catch((err) => {
138
- Metrics.postEvent({
139
- event: eventType.MEDIA_RESPONSE,
122
+ });
123
+ // always it will be the first mediaConnection Object
124
+ const mediaConnections =
125
+ res.body.mediaConnections &&
126
+ res.body.mediaConnections.length > 0 &&
127
+ res.body.mediaConnections[0];
128
+
129
+ LoggerProxy.logger.debug(
130
+ `Roap:request#sendRoap --> response:${JSON.stringify(
131
+ mediaConnections,
132
+ null,
133
+ 2
134
+ )}'\n StatusCode:'${res.statusCode}`
135
+ );
136
+ const {locus} = res.body;
137
+
138
+ locus.roapSeq = options.roapMessage.seq;
139
+
140
+ return {
141
+ locus,
142
+ ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),
143
+ };
144
+ })
145
+ .catch((err) => {
146
+ // @ts-ignore
147
+ this.webex.internal.newMetrics.submitClientEvent({
148
+ name: 'client.locus.media.response',
149
+ options: {
140
150
  meetingId,
141
- data: {error: Metrics.parseLocusError(err, true)},
142
- });
143
- LoggerProxy.logger.error(
144
- `Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`
145
- );
146
- LoggerProxy.logger.error(
147
- `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(
148
- roapMessage,
149
- null,
150
- 2
151
- )} + '\\n mediaId:'${options.mediaId}`
152
- );
153
- throw err;
151
+ rawError: err,
152
+ },
154
153
  });
155
- });
154
+ LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);
155
+ LoggerProxy.logger.error(
156
+ `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(
157
+ roapMessage,
158
+ null,
159
+ 2
160
+ )} + '\\n mediaId:'${options.mediaId}`
161
+ );
162
+ throw err;
163
+ });
156
164
  }
157
165
  }
@@ -176,15 +176,14 @@ export default class TurnDiscovery {
176
176
  return this.roapRequest
177
177
  .sendRoap({
178
178
  roapMessage,
179
- correlationId: meeting.correlationId,
180
179
  // @ts-ignore - Fix missing type
181
180
  locusSelfUrl: meeting.selfUrl,
182
181
  // @ts-ignore - Fix missing type
183
182
  mediaId: isReconnecting ? '' : meeting.mediaId,
184
- audioMuted: meeting.isAudioMuted(),
185
- videoMuted: meeting.isVideoMuted(),
186
183
  meetingId: meeting.id,
187
- preferTranscoding: !meeting.isMultistream,
184
+ locusMediaRequest: meeting.locusMediaRequest,
185
+ // @ts-ignore - because of meeting.webex
186
+ ipVersion: meeting.webex.meetings.reachability.getIpVersion(),
188
187
  })
189
188
  .then(({mediaConnections}) => {
190
189
  if (mediaConnections) {
@@ -213,14 +212,55 @@ export default class TurnDiscovery {
213
212
  locusSelfUrl: meeting.selfUrl,
214
213
  // @ts-ignore - fix type
215
214
  mediaId: meeting.mediaId,
216
- correlationId: meeting.correlationId,
217
- audioMuted: meeting.isAudioMuted(),
218
- videoMuted: meeting.isVideoMuted(),
219
215
  meetingId: meeting.id,
220
- preferTranscoding: !meeting.isMultistream,
216
+ locusMediaRequest: meeting.locusMediaRequest,
217
+ // @ts-ignore - because of meeting.webex
218
+ ipVersion: meeting.webex.meetings.reachability.getIpVersion(),
221
219
  });
222
220
  }
223
221
 
222
+ /**
223
+ * Gets the reason why reachability is skipped.
224
+ *
225
+ * @param {Meeting} meeting
226
+ * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
227
+ */
228
+ private async getSkipReason(meeting: Meeting): Promise<string> {
229
+ // @ts-ignore - fix type
230
+ const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
231
+
232
+ if (isAnyClusterReachable) {
233
+ LoggerProxy.logger.info(
234
+ 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
235
+ );
236
+
237
+ return 'reachability';
238
+ }
239
+
240
+ // @ts-ignore - fix type
241
+ if (!meeting.config.experimental.enableTurnDiscovery) {
242
+ LoggerProxy.logger.info(
243
+ 'Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it'
244
+ );
245
+
246
+ return 'config';
247
+ }
248
+
249
+ return '';
250
+ }
251
+
252
+ /**
253
+ * Checks if TURN discovery is skipped.
254
+ *
255
+ * @param {Meeting} meeting
256
+ * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
257
+ */
258
+ async isSkipped(meeting) {
259
+ const skipReason = await this.getSkipReason(meeting);
260
+
261
+ return !!skipReason;
262
+ }
263
+
224
264
  /**
225
265
  * Retrieves TURN server information from the backend by doing
226
266
  * a roap message exchange:
@@ -239,29 +279,15 @@ export default class TurnDiscovery {
239
279
  * @returns {Promise}
240
280
  */
241
281
  async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
242
- // @ts-ignore - fix type
243
- const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
244
-
245
- if (isAnyClusterReachable) {
246
- LoggerProxy.logger.info(
247
- 'Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery'
248
- );
282
+ const turnDiscoverySkippedReason = await this.getSkipReason(meeting);
249
283
 
284
+ if (turnDiscoverySkippedReason) {
250
285
  return {
251
286
  turnServerInfo: undefined,
252
- turnDiscoverySkippedReason: 'reachability',
287
+ turnDiscoverySkippedReason,
253
288
  };
254
289
  }
255
290
 
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
291
  return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)
266
292
  .then(() => this.waitForTurnDiscoveryResponse())
267
293
  .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,100 @@
1
+ import RTC_METRICS from './constants';
2
+
3
+ /**
4
+ * Rtc Metrics
5
+ */
6
+ export default class RtcMetrics {
7
+ /**
8
+ * Array of MetricData items to be sent to the metrics service.
9
+ */
10
+ metricsQueue = [];
11
+
12
+ intervalId: number;
13
+
14
+ webex: any;
15
+
16
+ meetingId: string;
17
+
18
+ correlationId: string;
19
+
20
+ /**
21
+ * Initialize the interval.
22
+ *
23
+ * @param {object} webex - The main `webex` object.
24
+ * @param {string} meetingId - The meeting id.
25
+ * @param {string} correlationId - The correlation id.
26
+ */
27
+ constructor(webex, meetingId, correlationId) {
28
+ // `window` is used to prevent typescript from returning a NodeJS.Timer.
29
+ this.intervalId = window.setInterval(this.checkMetrics.bind(this), 30 * 1000);
30
+ this.meetingId = meetingId;
31
+ this.webex = webex;
32
+ this.correlationId = correlationId;
33
+ // Send the first set of metrics at 5 seconds in the case of a user leaving the call shortly after joining.
34
+ setTimeout(this.checkMetrics.bind(this), 5 * 1000);
35
+ }
36
+
37
+ /**
38
+ * Check to see if the metrics queue has any items.
39
+ *
40
+ * @returns {void}
41
+ */
42
+ private checkMetrics() {
43
+ if (this.metricsQueue.length) {
44
+ this.sendMetrics();
45
+ this.metricsQueue = [];
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Add metrics items to the metrics queue.
51
+ *
52
+ * @param {object} data - An object with a payload array of metrics items.
53
+ *
54
+ * @returns {void}
55
+ */
56
+ addMetrics(data) {
57
+ if (data.payload.length) {
58
+ this.metricsQueue.push(data);
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Clear the metrics interval.
64
+ *
65
+ * @returns {void}
66
+ */
67
+ closeMetrics() {
68
+ this.checkMetrics();
69
+ clearInterval(this.intervalId);
70
+ }
71
+
72
+ /**
73
+ * Send metrics to the metrics service.
74
+ *
75
+ * @returns {void}
76
+ */
77
+ private sendMetrics() {
78
+ this.webex.request({
79
+ method: 'POST',
80
+ service: 'unifiedTelemetry',
81
+ resource: 'metric/v2',
82
+ headers: {
83
+ type: 'webrtcMedia',
84
+ appId: RTC_METRICS.APP_ID,
85
+ },
86
+ body: {
87
+ metrics: [
88
+ {
89
+ type: 'webrtc',
90
+ version: '1.0.1',
91
+ userId: this.webex.internal.device.userId,
92
+ meetingId: this.meetingId,
93
+ correlationId: this.correlationId,
94
+ data: this.metricsQueue,
95
+ },
96
+ ],
97
+ },
98
+ });
99
+ }
100
+ }
@@ -1,55 +1,5 @@
1
1
  const STATS_DEFAULT = {
2
2
  encryption: 'sha-256',
3
- audio: {
4
- send: {
5
- trackLabel: '',
6
- maxPacketLossRatio: 0,
7
- availableBandwidth: 0,
8
- bytesSent: 0,
9
- meanRemoteJitter: [],
10
- meanRoundTripTime: [],
11
- },
12
- recv: {
13
- availableBandwidth: 0,
14
- bytesReceived: 0,
15
- meanRtpJitter: [],
16
- meanRoundTripTime: [],
17
- },
18
- },
19
- video: {
20
- send: {
21
- trackLabel: '',
22
- maxPacketLossRatio: 0,
23
- availableBandwidth: 0,
24
- meanRemoteJitter: [],
25
- meanRoundTripTime: [],
26
- },
27
- recv: {
28
- availableBandwidth: 0,
29
- totalPacketsLost: 0,
30
- meanRtpJitter: [],
31
- meanRoundTripTime: [],
32
- },
33
- latency: 0,
34
- packetsLost: 0,
35
- },
36
- share: {
37
- send: {
38
- maxPacketLossRatio: 0,
39
- availableBandwidth: 0,
40
- totalPacketsLost: 0,
41
- meanRemoteJitter: [],
42
- meanRoundTripTime: [],
43
- },
44
- recv: {
45
- availableBandwidth: 0,
46
- meanRtpJitter: [],
47
- meanRoundTripTime: [],
48
- },
49
-
50
- latency: 0,
51
- packetsLost: 0,
52
- },
53
3
  bandwidth: {
54
4
  systemBandwidth: 0,
55
5
  sentPerSecond: 0,
@@ -77,51 +27,8 @@ const STATS_DEFAULT = {
77
27
  networkType: [],
78
28
  },
79
29
  },
80
- resolutions: {
81
- audio: {
82
- send: {
83
- width: 0,
84
- height: 0,
85
- },
86
- recv: {
87
- width: 0,
88
- height: 0,
89
- },
90
- },
91
- video: {
92
- send: {
93
- width: 0,
94
- height: 0,
95
- },
96
- recv: {
97
- width: 0,
98
- height: 0,
99
- },
100
- },
101
- share: {
102
- send: {
103
- width: 0,
104
- height: 0,
105
- },
106
- recv: {
107
- width: 0,
108
- height: 0,
109
- },
110
- },
111
- },
30
+ resolutions: {},
112
31
  internal: {
113
- audio: {
114
- send: {},
115
- recv: {},
116
- },
117
- video: {
118
- send: {},
119
- recv: {},
120
- },
121
- share: {
122
- send: {},
123
- recv: {},
124
- },
125
32
  remote: {},
126
33
  candidates: {},
127
34
  },