@webex/plugin-meetings 3.0.0-beta.39 → 3.0.0-beta.391

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 (393) 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 +242 -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 +110 -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 +380 -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 +386 -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 +71 -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 +65 -102
  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 +135 -330
  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 +4075 -2827
  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 +177 -152
  79. package/dist/meeting/request.js.map +1 -1
  80. package/dist/meeting/util.js +672 -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 +484 -119
  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 +73 -7
  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 +18 -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 +223 -32
  121. package/dist/multistream/mediaRequestManager.js.map +1 -1
  122. package/dist/multistream/receiveSlot.js +10 -0
  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 +3 -1
  127. package/dist/multistream/remoteMedia.js.map +1 -1
  128. package/dist/multistream/remoteMediaGroup.js +76 -5
  129. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  130. package/dist/multistream/remoteMediaManager.js +366 -104
  131. package/dist/multistream/remoteMediaManager.js.map +1 -1
  132. package/dist/multistream/sendSlotManager.js +255 -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 +263 -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 +266 -202
  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 +220 -70
  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 +179 -0
  157. package/dist/rtcMetrics/index.js.map +1 -0
  158. package/dist/statsAnalyzer/index.js +357 -295
  159. package/dist/statsAnalyzer/index.js.map +1 -1
  160. package/dist/statsAnalyzer/mqaUtil.js +296 -156
  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 +203 -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 -5
  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 +99 -223
  189. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  190. package/dist/types/meeting/index.d.ts +567 -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 +64 -43
  194. package/dist/types/meeting/util.d.ts +117 -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 +113 -21
  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 +17 -0
  208. package/dist/types/metrics/index.d.ts +4 -111
  209. package/dist/types/multistream/mediaRequestManager.d.ts +72 -3
  210. package/dist/types/multistream/receiveSlot.d.ts +7 -3
  211. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  212. package/dist/types/multistream/remoteMedia.d.ts +3 -31
  213. package/dist/types/multistream/remoteMediaGroup.d.ts +2 -9
  214. package/dist/types/multistream/remoteMediaManager.d.ts +62 -2
  215. package/dist/types/multistream/sendSlotManager.d.ts +70 -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 +39 -5
  226. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  227. package/dist/types/rtcMetrics/index.d.ts +61 -0
  228. package/dist/types/statsAnalyzer/index.d.ts +34 -12
  229. package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
  230. package/dist/types/webinar/collection.d.ts +16 -0
  231. package/dist/types/webinar/index.d.ts +5 -0
  232. package/dist/webinar/collection.js +44 -0
  233. package/dist/webinar/collection.js.map +1 -0
  234. package/dist/webinar/index.js +69 -0
  235. package/dist/webinar/index.js.map +1 -0
  236. package/package.json +22 -19
  237. package/src/annotation/annotation.types.ts +50 -0
  238. package/src/annotation/constants.ts +36 -0
  239. package/src/annotation/index.ts +328 -0
  240. package/src/breakouts/README.md +35 -11
  241. package/src/breakouts/breakout.ts +67 -9
  242. package/src/breakouts/events.ts +56 -0
  243. package/src/breakouts/index.ts +558 -59
  244. package/src/breakouts/utils.ts +42 -0
  245. package/src/common/errors/no-meeting-info.ts +24 -0
  246. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  247. package/src/common/errors/webex-errors.ts +44 -2
  248. package/src/common/logs/logger-proxy.ts +1 -1
  249. package/src/common/logs/request.ts +5 -1
  250. package/src/common/queue.ts +22 -8
  251. package/src/config.ts +4 -9
  252. package/src/constants.ts +229 -21
  253. package/src/controls-options-manager/enums.ts +12 -0
  254. package/src/controls-options-manager/index.ts +116 -21
  255. package/src/controls-options-manager/types.ts +59 -0
  256. package/src/controls-options-manager/util.ts +294 -14
  257. package/src/index.ts +44 -0
  258. package/src/interceptors/index.ts +3 -0
  259. package/src/interceptors/locusRetry.ts +67 -0
  260. package/src/interpretation/README.md +60 -0
  261. package/src/interpretation/collection.ts +19 -0
  262. package/src/interpretation/index.ts +349 -0
  263. package/src/interpretation/siLanguage.ts +18 -0
  264. package/src/locus-info/controlsUtils.ts +108 -0
  265. package/src/locus-info/index.ts +417 -59
  266. package/src/locus-info/infoUtils.ts +10 -2
  267. package/src/locus-info/mediaSharesUtils.ts +80 -0
  268. package/src/locus-info/parser.ts +258 -47
  269. package/src/locus-info/selfUtils.ts +81 -5
  270. package/src/media/index.ts +100 -108
  271. package/src/media/properties.ts +88 -117
  272. package/src/mediaQualityMetrics/config.ts +103 -238
  273. package/src/meeting/in-meeting-actions.ts +171 -3
  274. package/src/meeting/index.ts +3411 -2435
  275. package/src/meeting/locusMediaRequest.ts +313 -0
  276. package/src/meeting/muteState.ts +223 -136
  277. package/src/meeting/request.ts +155 -120
  278. package/src/meeting/util.ts +685 -395
  279. package/src/meeting-info/index.ts +81 -8
  280. package/src/meeting-info/meeting-info-v2.ts +170 -14
  281. package/src/meeting-info/util.ts +1 -1
  282. package/src/meeting-info/utilv2.ts +23 -23
  283. package/src/meetings/collection.ts +33 -0
  284. package/src/meetings/index.ts +507 -127
  285. package/src/meetings/meetings.types.ts +12 -0
  286. package/src/meetings/request.ts +2 -0
  287. package/src/meetings/util.ts +81 -12
  288. package/src/member/index.ts +58 -0
  289. package/src/member/types.ts +38 -0
  290. package/src/member/util.ts +141 -25
  291. package/src/members/collection.ts +8 -0
  292. package/src/members/index.ts +134 -8
  293. package/src/members/request.ts +97 -17
  294. package/src/members/types.ts +29 -0
  295. package/src/members/util.ts +333 -240
  296. package/src/metrics/constants.ts +17 -0
  297. package/src/metrics/index.ts +1 -469
  298. package/src/multistream/mediaRequestManager.ts +271 -56
  299. package/src/multistream/receiveSlot.ts +11 -4
  300. package/src/multistream/receiveSlotManager.ts +34 -24
  301. package/src/multistream/remoteMedia.ts +5 -3
  302. package/src/multistream/remoteMediaGroup.ts +78 -0
  303. package/src/multistream/remoteMediaManager.ts +248 -44
  304. package/src/multistream/sendSlotManager.ts +199 -0
  305. package/src/reachability/clusterReachability.ts +320 -0
  306. package/src/reachability/index.ts +229 -346
  307. package/src/reachability/request.ts +8 -4
  308. package/src/reachability/util.ts +24 -0
  309. package/src/reconnection-manager/index.ts +128 -97
  310. package/src/recording-controller/index.ts +20 -3
  311. package/src/recording-controller/util.ts +26 -9
  312. package/src/roap/index.ts +52 -23
  313. package/src/roap/request.ts +48 -67
  314. package/src/roap/turnDiscovery.ts +147 -49
  315. package/src/rtcMetrics/constants.ts +3 -0
  316. package/src/rtcMetrics/index.ts +166 -0
  317. package/src/statsAnalyzer/index.ts +457 -416
  318. package/src/statsAnalyzer/mqaUtil.ts +317 -170
  319. package/src/webinar/collection.ts +31 -0
  320. package/src/webinar/index.ts +62 -0
  321. package/test/integration/spec/converged-space-meetings.js +60 -3
  322. package/test/integration/spec/journey.js +320 -261
  323. package/test/integration/spec/space-meeting.js +76 -3
  324. package/test/unit/spec/annotation/index.ts +418 -0
  325. package/test/unit/spec/breakouts/breakout.ts +118 -28
  326. package/test/unit/spec/breakouts/events.ts +89 -0
  327. package/test/unit/spec/breakouts/index.ts +1349 -114
  328. package/test/unit/spec/breakouts/utils.js +52 -1
  329. package/test/unit/spec/common/queue.js +31 -2
  330. package/test/unit/spec/controls-options-manager/index.js +163 -0
  331. package/test/unit/spec/controls-options-manager/util.js +576 -60
  332. package/test/unit/spec/fixture/locus.js +1 -0
  333. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  334. package/test/unit/spec/interpretation/collection.ts +15 -0
  335. package/test/unit/spec/interpretation/index.ts +625 -0
  336. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  337. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  338. package/test/unit/spec/locus-info/index.js +1363 -37
  339. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  340. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  341. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  342. package/test/unit/spec/locus-info/parser.js +116 -35
  343. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  344. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  345. package/test/unit/spec/media/index.ts +173 -81
  346. package/test/unit/spec/media/properties.ts +2 -2
  347. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  348. package/test/unit/spec/meeting/index.js +6821 -2172
  349. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  350. package/test/unit/spec/meeting/muteState.js +402 -212
  351. package/test/unit/spec/meeting/request.js +473 -54
  352. package/test/unit/spec/meeting/utils.js +773 -67
  353. package/test/unit/spec/meeting-info/index.js +300 -0
  354. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  355. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  356. package/test/unit/spec/meetings/collection.js +26 -0
  357. package/test/unit/spec/meetings/index.js +1415 -213
  358. package/test/unit/spec/meetings/utils.js +229 -2
  359. package/test/unit/spec/member/index.js +61 -6
  360. package/test/unit/spec/member/util.js +510 -34
  361. package/test/unit/spec/members/index.js +432 -1
  362. package/test/unit/spec/members/request.js +206 -27
  363. package/test/unit/spec/members/utils.js +210 -0
  364. package/test/unit/spec/metrics/index.js +1 -50
  365. package/test/unit/spec/multistream/mediaRequestManager.ts +781 -114
  366. package/test/unit/spec/multistream/receiveSlot.ts +9 -1
  367. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  368. package/test/unit/spec/multistream/remoteMedia.ts +2 -0
  369. package/test/unit/spec/multistream/remoteMediaGroup.ts +345 -0
  370. package/test/unit/spec/multistream/remoteMediaManager.ts +525 -0
  371. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  372. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  373. package/test/unit/spec/reachability/index.ts +551 -14
  374. package/test/unit/spec/reachability/request.js +3 -1
  375. package/test/unit/spec/reachability/util.ts +40 -0
  376. package/test/unit/spec/reconnection-manager/index.js +171 -11
  377. package/test/unit/spec/recording-controller/index.js +294 -218
  378. package/test/unit/spec/recording-controller/util.js +223 -96
  379. package/test/unit/spec/roap/index.ts +180 -83
  380. package/test/unit/spec/roap/request.ts +100 -62
  381. package/test/unit/spec/roap/turnDiscovery.ts +388 -96
  382. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  383. package/test/unit/spec/stats-analyzer/index.js +1252 -12
  384. package/test/unit/spec/webinar/collection.ts +13 -0
  385. package/test/unit/spec/webinar/index.ts +60 -0
  386. package/test/utils/integrationTestUtils.js +46 -0
  387. package/test/utils/testUtils.js +0 -57
  388. package/test/utils/webex-test-users.js +12 -4
  389. package/dist/metrics/config.js +0 -289
  390. package/dist/metrics/config.js.map +0 -1
  391. package/dist/types/metrics/config.d.ts +0 -169
  392. package/src/index.js +0 -18
  393. package/src/metrics/config.ts +0 -485
@@ -4,6 +4,7 @@ import {debounce} from 'lodash';
4
4
  import {StatelessWebexPlugin} from '@webex/webex-core';
5
5
  // @ts-ignore
6
6
  import {deviceType} from '@webex/common';
7
+ import {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';
7
8
 
8
9
  import LoggerProxy from '../common/logs/logger-proxy';
9
10
  import {
@@ -18,22 +19,27 @@ import {
18
19
  HTTP_VERBS,
19
20
  LEAVE,
20
21
  LOCI,
21
- LOCUS,
22
- MEDIA,
23
22
  PARTICIPANT,
24
23
  PROVISIONAL_TYPE_DIAL_IN,
25
24
  PROVISIONAL_TYPE_DIAL_OUT,
26
25
  REACHABILITY,
27
26
  SEND_DTMF_ENDPOINT,
28
27
  _SLIDES_,
28
+ ANNOTATION,
29
+ IP_VERSION,
29
30
  } from '../constants';
30
31
  import {SendReactionOptions, ToggleReactionsOptions} from './request.type';
32
+ import MeetingUtil from './util';
33
+ import {AnnotationInfo} from '../annotation/annotation.types';
31
34
 
32
35
  /**
33
36
  * @class MeetingRequest
34
37
  */
35
38
  export default class MeetingRequest extends StatelessWebexPlugin {
36
39
  changeVideoLayoutDebounced: any;
40
+ meetingRef: WeakRef<any>;
41
+ locusDeltaRequest: (options: object) => Promise<any>;
42
+ buildLocusDeltaRequestOptions: (options: object) => Promise<any>;
37
43
 
38
44
  /**
39
45
  * Constructor
@@ -41,7 +47,13 @@ export default class MeetingRequest extends StatelessWebexPlugin {
41
47
  * @param {Object} options
42
48
  */
43
49
  constructor(attrs: any, options: any) {
44
- super(attrs, options);
50
+ const {meeting, ...otherAttrs} = attrs;
51
+
52
+ super(otherAttrs, options);
53
+
54
+ this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);
55
+ this.buildLocusDeltaRequestOptions = MeetingUtil.generateBuildLocusDeltaRequestOptions(meeting);
56
+
45
57
  this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {
46
58
  leading: true,
47
59
  trailing: true,
@@ -88,12 +100,16 @@ export default class MeetingRequest extends StatelessWebexPlugin {
88
100
  * @param {boolean} options.moveToResource
89
101
  * @param {Object} options.roapMessage
90
102
  * @param {boolean} options.breakoutsSupported
103
+ * @param {String} options.locale,
104
+ * @param {Array} options.deviceCapabilities
105
+ * @param {boolean} options.liveAnnotationSupported
91
106
  * @returns {Promise}
92
107
  */
93
108
  async joinMeeting(options: {
94
109
  sipUri: string;
95
110
  deviceUrl: string;
96
111
  locusUrl: string;
112
+ locusClusterUrl: string;
97
113
  resourceId: string;
98
114
  correlationId: string;
99
115
  ensureConversation: boolean;
@@ -107,6 +123,10 @@ export default class MeetingRequest extends StatelessWebexPlugin {
107
123
  permissionToken: any;
108
124
  preferTranscoding: any;
109
125
  breakoutsSupported: boolean;
126
+ locale?: string;
127
+ deviceCapabilities?: Array<string>;
128
+ liveAnnotationSupported: boolean;
129
+ ipVersion?: IP_VERSION;
110
130
  }) {
111
131
  const {
112
132
  asResourceOccupant,
@@ -115,6 +135,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
115
135
  permissionToken,
116
136
  deviceUrl,
117
137
  locusUrl,
138
+ locusClusterUrl,
118
139
  resourceId,
119
140
  correlationId,
120
141
  ensureConversation,
@@ -124,6 +145,10 @@ export default class MeetingRequest extends StatelessWebexPlugin {
124
145
  roapMessage,
125
146
  preferTranscoding,
126
147
  breakoutsSupported,
148
+ locale,
149
+ deviceCapabilities = [],
150
+ liveAnnotationSupported,
151
+ ipVersion,
127
152
  } = options;
128
153
 
129
154
  LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);
@@ -149,19 +174,42 @@ export default class MeetingRequest extends StatelessWebexPlugin {
149
174
  clientMediaPreferences: {
150
175
  preferTranscoding: preferTranscoding ?? true,
151
176
  joinCookie,
177
+ ipver: ipVersion,
152
178
  },
153
179
  };
154
180
 
155
181
  if (breakoutsSupported) {
156
- body.deviceCapabilities = [BREAKOUTS.BREAKOUTS_SUPPORTED];
182
+ deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);
183
+ }
184
+ if (liveAnnotationSupported) {
185
+ deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);
157
186
  }
158
187
 
188
+ // append installationId to device config if it exists
159
189
  // @ts-ignore
160
- if (this.webex.meetings.clientRegion) {
190
+ if (this.webex.internal.device.config.installationId) {
161
191
  // @ts-ignore
162
- body.device.countryCode = this.webex.meetings.clientRegion.countryCode;
192
+ body.device.installationId = this.webex.internal.device.config.installationId;
193
+ }
194
+
195
+ if (locale) {
196
+ body.locale = locale;
197
+ }
198
+
199
+ // add deviceCapabilities prop
200
+ if (deviceCapabilities.length) {
201
+ body.deviceCapabilities = deviceCapabilities;
202
+ }
203
+ // @ts-ignore
204
+ if (this.webex.meetings.geoHintInfo) {
205
+ // @ts-ignore
206
+ body.device.countryCode = this.webex.meetings.geoHintInfo.countryCode;
163
207
  // @ts-ignore
164
- body.device.regionCode = this.webex.meetings.clientRegion.regionCode;
208
+ body.device.regionCode = this.webex.meetings.geoHintInfo.regionCode;
209
+ body.device.localIp =
210
+ // @ts-ignore
211
+ CallDiagnosticUtils.anonymizeIPAddress(this.webex.meetings.geoHintInfo.clientAddress) ||
212
+ undefined;
165
213
  }
166
214
 
167
215
  if (moderator !== undefined) {
@@ -180,10 +228,18 @@ export default class MeetingRequest extends StatelessWebexPlugin {
180
228
  url = `${locusUrl}/${PARTICIPANT}`;
181
229
  } else if (inviteeAddress || meetingNumber) {
182
230
  try {
183
- // @ts-ignore
184
- await this.webex.internal.services.waitForCatalog('postauth');
185
- // @ts-ignore
186
- url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;
231
+ let clusterUrl;
232
+
233
+ if (locusClusterUrl) {
234
+ clusterUrl = `https://${locusClusterUrl}/locus/api/v1`;
235
+ } else {
236
+ // @ts-ignore
237
+ await this.webex.internal.services.waitForCatalog('postauth');
238
+ // @ts-ignore
239
+ clusterUrl = this.webex.internal.services.get('locus');
240
+ }
241
+
242
+ url = `${clusterUrl}/${LOCI}/${CALL}`;
187
243
  body.invitee = {
188
244
  address: inviteeAddress || `wbxmn:${meetingNumber}`,
189
245
  };
@@ -285,7 +341,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
285
341
  };
286
342
 
287
343
  // @ts-ignore
288
- return this.request({
344
+ return this.locusDeltaRequest({
289
345
  method: HTTP_VERBS.POST,
290
346
  uri,
291
347
  body,
@@ -340,7 +396,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
340
396
  };
341
397
 
342
398
  // @ts-ignore
343
- return this.request({
399
+ return this.locusDeltaRequest({
344
400
  method: HTTP_VERBS.POST,
345
401
  uri,
346
402
  body,
@@ -354,65 +410,25 @@ export default class MeetingRequest extends StatelessWebexPlugin {
354
410
  }
355
411
 
356
412
  /**
357
- * Syns the missed delta event
358
- * @param {Object} options
359
- * @param {boolean} options.desync flag to get partial or whole locus object
360
- * @param {String} options.syncUrl sync url to get ht elatest locus delta
361
- * @returns {Promise}
362
- */
363
- syncMeeting(options: {desync: boolean; syncUrl: string}) {
364
- /* eslint-disable no-else-return */
365
- const {desync} = options;
366
- let {syncUrl} = options;
367
-
368
- /* istanbul ignore else */
369
- if (desync) {
370
- // check for existing URL parameters
371
- syncUrl = syncUrl
372
- .concat(syncUrl.split('?')[1] ? '&' : '?')
373
- .concat(`${LOCUS.SYNCDEBUG}=${desync}`);
374
- }
375
-
376
- // @ts-ignore
377
- return this.request({
378
- method: HTTP_VERBS.GET,
379
- uri: syncUrl,
380
- }) // TODO: Handle if delta sync failed . Get the full locus object
381
- .catch((err) => {
382
- LoggerProxy.logger.error(
383
- `Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`
384
- );
385
-
386
- return err;
387
- });
388
- }
389
-
390
- /**
391
- * Request to get the complete locus object
413
+ * Sends a requests to get the latest locus DTO, it might be a full Locus or a delta, depending on the url provided
392
414
  * @param {Object} options
393
- * @param {boolean} options.desync flag to get partial or whole locus object
394
415
  * @param {String} options.locusUrl sync url to get ht elatest locus delta
395
416
  * @returns {Promise}
396
417
  */
397
- getFullLocus(options: {desync: boolean; locusUrl: string}) {
398
- let {locusUrl} = options;
399
- const {desync} = options;
400
-
401
- if (locusUrl) {
402
- if (desync) {
403
- locusUrl += `?${LOCUS.SYNCDEBUG}=${desync}`;
404
- }
418
+ getLocusDTO(options: {url: string}) {
419
+ const {url} = options;
405
420
 
421
+ if (url) {
406
422
  // @ts-ignore
407
423
  return this.request({
408
424
  method: HTTP_VERBS.GET,
409
- uri: locusUrl,
425
+ uri: url,
410
426
  }).catch((err) => {
411
427
  LoggerProxy.logger.error(
412
- `Meeting:request#getFullLocus --> Error getting full locus, error ${err}`
428
+ `Meeting:request#getLocusDTO --> Error getting latest locus, error ${err}`
413
429
  );
414
430
 
415
- return err;
431
+ throw err;
416
432
  });
417
433
  }
418
434
 
@@ -455,7 +471,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
455
471
  };
456
472
 
457
473
  // @ts-ignore
458
- return this.request({
474
+ return this.locusDeltaRequest({
459
475
  method: HTTP_VERBS.PUT,
460
476
  uri,
461
477
  body,
@@ -469,13 +485,49 @@ export default class MeetingRequest extends StatelessWebexPlugin {
469
485
  }
470
486
 
471
487
  /**
472
- * Make a network request to leave a meeting
488
+ * Prepares request options to to leave a meeting
473
489
  * @param {Object} options
474
490
  * @param {Url} options.locusUrl
475
491
  * @param {String} options.selfId
476
492
  * @param {Url} options.deviceUrl
477
493
  * @param {String} options.resourceId,
478
494
  * @param {String} options.correlationId
495
+ * @returns {Object} request options
496
+ */
497
+ prepareLeaveMeetingRequestOptions({
498
+ locusUrl,
499
+ selfId,
500
+ deviceUrl: url,
501
+ resourceId,
502
+ correlationId,
503
+ }: {
504
+ locusUrl: string;
505
+ selfId: string;
506
+ deviceUrl: string;
507
+ resourceId: string;
508
+ correlationId: string;
509
+ }) {
510
+ const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;
511
+ const body = {
512
+ device: {
513
+ // @ts-ignore
514
+ deviceType: this.config.meetings.deviceType,
515
+ url,
516
+ },
517
+ usingResource: resourceId || null,
518
+ correlationId,
519
+ };
520
+
521
+ return {
522
+ method: HTTP_VERBS.PUT,
523
+ uri,
524
+ body,
525
+ };
526
+ }
527
+
528
+ /**
529
+ * Make a network request to leave a meeting
530
+ * @param {Object} options
479
531
  * @returns {Promise}
480
532
  */
481
533
  leaveMeeting({
@@ -504,14 +556,22 @@ export default class MeetingRequest extends StatelessWebexPlugin {
504
556
  correlationId,
505
557
  };
506
558
 
507
- // @ts-ignore
508
- return this.request({
559
+ return this.locusDeltaRequest({
509
560
  method: HTTP_VERBS.PUT,
510
561
  uri,
511
562
  body,
512
563
  });
513
564
  }
514
565
 
566
+ /**
567
+ * Builds request options to leave a meeting
568
+ * @param {Object} options
569
+ * @returns {Object} request options
570
+ */
571
+ buildLeaveMeetingRequestOptions(options: any) {
572
+ return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));
573
+ }
574
+
515
575
  /**
516
576
  * Make a network request to acknowledge a meeting
517
577
  * @param {Object} options
@@ -531,14 +591,19 @@ export default class MeetingRequest extends StatelessWebexPlugin {
531
591
  correlationId: options.correlationId,
532
592
  };
533
593
 
534
- // @ts-ignore
535
- return this.request({
594
+ return this.locusDeltaRequest({
536
595
  method: HTTP_VERBS.PUT,
537
596
  uri,
538
597
  body,
539
598
  });
540
599
  }
541
600
 
601
+ /**
602
+ * Makes a network request to lock the meeting
603
+ * @param {Object} options
604
+ * @param {Boolean} options.lock Whether it is locked or not
605
+ * @returns {Promise}
606
+ */
542
607
  lockMeeting(options) {
543
608
  const uri = `${options.locusUrl}/${CONTROLS}`;
544
609
  const body = {
@@ -547,8 +612,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
547
612
  },
548
613
  };
549
614
 
550
- // @ts-ignore
551
- return this.request({
615
+ return this.locusDeltaRequest({
552
616
  method: HTTP_VERBS.PATCH,
553
617
  uri,
554
618
  body,
@@ -574,54 +638,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
574
638
  ...(options.reason && {reason: options.reason}),
575
639
  };
576
640
 
577
- // @ts-ignore
578
- return this.request({
579
- method: HTTP_VERBS.PUT,
580
- uri,
581
- body,
582
- });
583
- }
584
-
585
- /**
586
- * Toggle remote audio and/or video
587
- * @param {Object} options options for toggling
588
- * @param {String} options.selfId Locus self id??
589
- * @param {String} options.locusUrl Locus url
590
- * @param {String} options.deviceUrl Url of a device
591
- * @param {String} options.resourceId Populated if you are paired to a device
592
- * @param {String} options.localMedias local sdps
593
- * @param {Boolean} options.preferTranscoding false for multistream (Homer), true for transcoded media (Edonus)
594
- * @returns {Promise}
595
- */
596
- remoteAudioVideoToggle(
597
- options:
598
- | {
599
- selfId: string;
600
- locusUrl: string;
601
- deviceUrl: string;
602
- resourceId: string;
603
- localMedias: string;
604
- }
605
- | any
606
- ) {
607
- const uri = `${options.locusUrl}/${PARTICIPANT}/${options.selfId}/${MEDIA}`;
608
- const body = {
609
- device: {
610
- // @ts-ignore
611
- deviceType: this.config.meetings.deviceType,
612
- url: options.deviceUrl,
613
- },
614
- usingResource: options.resourceId || null,
615
- correlationId: options.correlationId,
616
- respOnlySdp: true,
617
- localMedias: options.localMedias,
618
- clientMediaPreferences: {
619
- preferTranscoding: options.preferTranscoding ?? true,
620
- },
621
- };
622
-
623
- // @ts-ignore
624
- return this.request({
641
+ return this.locusDeltaRequest({
625
642
  method: HTTP_VERBS.PUT,
626
643
  uri,
627
644
  body,
@@ -636,6 +653,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
636
653
  * @param {String} options.deviceUrl Url of a device
637
654
  * @param {String} options.resourceId Populated if you are paired to a device
638
655
  * @param {String} options.uri floor grant uri
656
+ * @param {String} options.shareInstanceId id for current share
639
657
  * @returns {Promise}
640
658
  */
641
659
  changeMeetingFloor(
@@ -646,6 +664,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
646
664
  deviceUrl: string;
647
665
  resourceId: string;
648
666
  uri: string;
667
+ annotationInfo: AnnotationInfo;
668
+ shareInstanceId: string;
649
669
  }
650
670
  | any
651
671
  ) {
@@ -676,9 +696,16 @@ export default class MeetingRequest extends StatelessWebexPlugin {
676
696
  resourceUrl: options.resourceUrl,
677
697
  };
678
698
 
699
+ if (options?.shareInstanceId) {
700
+ body.floor.shareInstanceId = options.shareInstanceId;
701
+ }
702
+
679
703
  if (options?.resourceToken) {
680
704
  body.resourceToken = options?.resourceToken;
681
705
  }
706
+ if (options?.annotationInfo) {
707
+ body.annotation = options?.annotationInfo;
708
+ }
682
709
 
683
710
  // @ts-ignore
684
711
  return this.request({
@@ -698,7 +725,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
698
725
  */
699
726
  sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {
700
727
  // @ts-ignore
701
- return this.request({
728
+ return this.locusDeltaRequest({
702
729
  method: HTTP_VERBS.POST,
703
730
  uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,
704
731
  body: {
@@ -779,7 +806,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
779
806
  : undefined;
780
807
 
781
808
  // @ts-ignore
782
- return this.request({
809
+ return this.locusDeltaRequest({
783
810
  method: HTTP_VERBS.PUT,
784
811
  uri: `${locusUrl}/${CONTROLS}`,
785
812
  body: {
@@ -802,7 +829,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
802
829
  const uri = `${locusUrl}/${END}`;
803
830
 
804
831
  // @ts-ignore
805
- return this.request({
832
+ return this.locusDeltaRequest({
806
833
  method: HTTP_VERBS.POST,
807
834
  uri,
808
835
  });
@@ -854,7 +881,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
854
881
  const uri = `${locusUrl}/${CONTROLS}`;
855
882
 
856
883
  // @ts-ignore
857
- return this.request({
884
+ return this.locusDeltaRequest({
858
885
  method: HTTP_VERBS.PUT,
859
886
  uri,
860
887
  body: {
@@ -865,4 +892,12 @@ export default class MeetingRequest extends StatelessWebexPlugin {
865
892
  },
866
893
  });
867
894
  }
895
+
896
+ getLocusStatusByUrl(locusUrl: string) {
897
+ // @ts-ignore
898
+ return this.request({
899
+ method: HTTP_VERBS.GET,
900
+ uri: locusUrl,
901
+ });
902
+ }
868
903
  }