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

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,26 +1,63 @@
1
1
  /// <reference types="node" />
2
2
  import { StatelessWebexPlugin } from '@webex/webex-core';
3
+ import { ClientEvent, ClientEventLeaveReason } from '@webex/internal-plugin-metrics';
4
+ import { LocalStream, LocalCameraStream, LocalDisplayStream, LocalSystemAudioStream, LocalMicrophoneStream } from '@webex/media-helpers';
3
5
  import { StatsAnalyzer } from '../statsAnalyzer';
4
6
  import NetworkQualityMonitor from '../networkQualityMonitor';
5
7
  import Roap from '../roap/index';
8
+ import { type BundlePolicy } from '../media';
6
9
  import MediaProperties from '../media/properties';
7
10
  import ReconnectionManager from '../reconnection-manager';
8
11
  import MeetingRequest from './request';
9
12
  import Members from '../members/index';
10
13
  import Transcription from '../transcription';
14
+ import { NETWORK_STATUS } from '../constants';
11
15
  import { ReceiveSlotManager } from '../multistream/receiveSlotManager';
12
16
  import { MediaRequestManager } from '../multistream/mediaRequestManager';
13
- import { RemoteMediaManager } from '../multistream/remoteMediaManager';
17
+ import { Configuration as RemoteMediaManagerConfiguration, RemoteMediaManager } from '../multistream/remoteMediaManager';
14
18
  import { ReactionServerType, SkinToneType } from '../reactions/reactions.type';
15
19
  import InMeetingActions from './in-meeting-actions';
16
20
  import RecordingController from '../recording-controller';
17
21
  import ControlsOptionsManager from '../controls-options-manager';
22
+ import { LocusMediaRequest } from './locusMediaRequest';
23
+ export type LocalStreams = {
24
+ microphone?: LocalMicrophoneStream;
25
+ camera?: LocalCameraStream;
26
+ screenShare?: {
27
+ audio?: LocalSystemAudioStream;
28
+ video?: LocalDisplayStream;
29
+ };
30
+ };
31
+ export type AddMediaOptions = {
32
+ localStreams?: LocalStreams;
33
+ audioEnabled?: boolean;
34
+ videoEnabled?: boolean;
35
+ shareAudioEnabled?: boolean;
36
+ shareVideoEnabled?: boolean;
37
+ remoteMediaManagerConfig?: RemoteMediaManagerConfiguration;
38
+ bundlePolicy?: BundlePolicy;
39
+ allowMediaInLobby?: boolean;
40
+ };
41
+ export type CallStateForMetrics = {
42
+ correlationId?: string;
43
+ joinTrigger?: string;
44
+ loginType?: string;
45
+ };
18
46
  export declare const MEDIA_UPDATE_TYPE: {
19
- ALL: string;
20
- AUDIO: string;
21
- VIDEO: string;
22
- SHARE: string;
23
- LAMBDA: string;
47
+ TRANSCODED_MEDIA_CONNECTION: string;
48
+ SHARE_FLOOR_REQUEST: string;
49
+ UPDATE_MEDIA: string;
50
+ };
51
+ export declare enum ScreenShareFloorStatus {
52
+ PENDING = "floor_request_pending",
53
+ GRANTED = "floor_request_granted",
54
+ RELEASED = "floor_released"
55
+ }
56
+ type FetchMeetingInfoParams = {
57
+ password?: string;
58
+ captchaCode?: string;
59
+ extraParams?: Record<string, any>;
60
+ sendCAevents?: boolean;
24
61
  };
25
62
  /**
26
63
  * MediaDirection
@@ -33,15 +70,6 @@ export declare const MEDIA_UPDATE_TYPE: {
33
70
  * @property {boolean} receiveShare
34
71
  * @property {boolean} isSharing
35
72
  */
36
- /**
37
- * AudioVideo
38
- * @typedef {Object} AudioVideo
39
- * @property {Object} audio
40
- * @property {String} audio.deviceId
41
- * @property {Object} video
42
- * @property {String} video.deviceId
43
- * @property {String} video.localVideoQuality // [240p, 360p, 480p, 720p, 1080p]
44
- */
45
73
  /**
46
74
  * SharePreferences
47
75
  * @typedef {Object} SharePreferences
@@ -55,18 +83,10 @@ export declare const MEDIA_UPDATE_TYPE: {
55
83
  * @property {String} [pin]
56
84
  * @property {Boolean} [moderator]
57
85
  * @property {String|Object} [meetingQuality]
58
- * @property {String} [meetingQuality.local]
59
86
  * @property {String} [meetingQuality.remote]
60
87
  * @property {Boolean} [rejoin]
61
88
  * @property {Boolean} [enableMultistream]
62
89
  */
63
- /**
64
- * SendOptions
65
- * @typedef {Object} SendOptions
66
- * @property {Boolean} sendAudio
67
- * @property {Boolean} sendVideo
68
- * @property {Boolean} sendShare
69
- */
70
90
  /**
71
91
  * Recording
72
92
  * @typedef {Object} Recording
@@ -148,7 +168,11 @@ export declare const MEDIA_UPDATE_TYPE: {
148
168
  * @instance
149
169
  * @type {Object}
150
170
  * @property {Boolean} memberId id of the meeting member that started screen share
171
+ * @property {String} url of this content share
172
+ * @property {String} shareInstanceId of this content share
173
+ * @property {Object} annotation Info of this content share
151
174
  * @memberof Meeting
175
+ *
152
176
  */
153
177
  /**
154
178
  * Meeting Stopped Sharing Remote Event
@@ -285,8 +309,11 @@ export default class Meeting extends StatelessWebexPlugin {
285
309
  attrs: any;
286
310
  audio: any;
287
311
  breakouts: any;
312
+ simultaneousInterpretation: any;
313
+ annotation: any;
314
+ webinar: any;
288
315
  conversationUrl: string;
289
- correlationId: string;
316
+ callStateForMetrics: CallStateForMetrics;
290
317
  destination: string;
291
318
  destinationType: string;
292
319
  deviceUrl: string;
@@ -297,7 +324,7 @@ export default class Meeting extends StatelessWebexPlugin {
297
324
  mediaConnections: any[];
298
325
  mediaId?: string;
299
326
  meetingFiniteStateMachine: any;
300
- meetingInfo: object;
327
+ meetingInfo: any;
301
328
  meetingRequest: MeetingRequest;
302
329
  members: Members;
303
330
  options: object;
@@ -309,11 +336,13 @@ export default class Meeting extends StatelessWebexPlugin {
309
336
  resource: string;
310
337
  roap: Roap;
311
338
  roapSeq: number;
339
+ selfUrl?: string;
312
340
  sipUri: string;
313
341
  type: string;
314
342
  userId: string;
315
343
  video: any;
316
344
  callEvents: any[];
345
+ datachannelUrl: string;
317
346
  deferJoin: Promise<any>;
318
347
  dialInDeviceStatus: string;
319
348
  dialInUrl: string;
@@ -326,10 +355,10 @@ export default class Meeting extends StatelessWebexPlugin {
326
355
  inMeetingActions: InMeetingActions;
327
356
  isLocalShareLive: boolean;
328
357
  isRoapInProgress: boolean;
329
- isSharing: boolean;
330
358
  keepAliveTimerId: NodeJS.Timeout;
331
359
  lastVideoLayoutInfo: any;
332
360
  locusInfo: any;
361
+ locusMediaRequest?: LocusMediaRequest;
333
362
  mediaProperties: MediaProperties;
334
363
  mediaRequestManagers: {
335
364
  audio: MediaRequestManager;
@@ -338,8 +367,10 @@ export default class Meeting extends StatelessWebexPlugin {
338
367
  screenShareVideo: MediaRequestManager;
339
368
  };
340
369
  meetingInfoFailureReason: string;
370
+ meetingInfoFailureCode?: number;
371
+ meetingInfoExtraParams?: Record<string, any>;
341
372
  networkQualityMonitor: NetworkQualityMonitor;
342
- networkStatus: string;
373
+ networkStatus?: NETWORK_STATUS;
343
374
  passwordStatus: string;
344
375
  queuedMediaUpdates: any[];
345
376
  recording: any;
@@ -348,16 +379,20 @@ export default class Meeting extends StatelessWebexPlugin {
348
379
  controlsOptionsManager: ControlsOptionsManager;
349
380
  requiredCaptcha: any;
350
381
  receiveSlotManager: ReceiveSlotManager;
382
+ selfUserPolicies: any;
383
+ enforceVBGImagesURL: string;
351
384
  shareStatus: string;
385
+ screenShareFloorState: ScreenShareFloorStatus;
352
386
  statsAnalyzer: StatsAnalyzer;
353
387
  transcription: Transcription;
354
388
  updateMediaConnections: (mediaConnections: any[]) => void;
355
- endCallInitiateJoinReq: any;
389
+ userDisplayHints: any;
390
+ endCallInitJoinReq: any;
356
391
  endJoinReqResp: any;
357
392
  endLocalSDPGenRemoteSDPRecvDelay: any;
358
393
  joinedWith: any;
359
394
  locusId: any;
360
- startCallInitiateJoinReq: any;
395
+ startCallInitJoinReq: any;
361
396
  startJoinReqResp: any;
362
397
  startLocalSDPGenRemoteSDPRecvDelay: any;
363
398
  wirelessShare: any;
@@ -365,12 +400,27 @@ export default class Meeting extends StatelessWebexPlugin {
365
400
  meetingJoinUrl: any;
366
401
  meetingNumber: any;
367
402
  meetingState: any;
368
- permissionToken: any;
403
+ permissionToken: string;
404
+ permissionTokenPayload: any;
405
+ permissionTokenReceivedLocalTime: number;
369
406
  resourceId: any;
370
407
  resourceUrl: string;
371
408
  selfId: string;
372
409
  state: any;
410
+ localAudioStreamMuteStateHandler: (muted: boolean) => void;
411
+ localVideoStreamMuteStateHandler: (muted: boolean) => void;
412
+ localOutputTrackChangeHandler: () => void;
413
+ roles: any[];
414
+ environment: string;
373
415
  namespace: string;
416
+ allowMediaInLobby: boolean;
417
+ turnDiscoverySkippedReason: string;
418
+ turnServerUsed: boolean;
419
+ private retriedWithTurnServer;
420
+ private sendSlotManager;
421
+ private deferSDPAnswer?;
422
+ private sdpResponseTimer?;
423
+ private hasMediaConnectionConnectedAtLeastOnce;
374
424
  /**
375
425
  * @param {Object} attrs
376
426
  * @param {Object} options
@@ -378,29 +428,91 @@ export default class Meeting extends StatelessWebexPlugin {
378
428
  * @memberof Meeting
379
429
  */
380
430
  constructor(attrs: any, options: object);
431
+ /**
432
+ * returns meeting is joined
433
+ * @private
434
+ * @memberof Meeting
435
+ * @returns {Boolean}
436
+ */
437
+ private isJoined;
438
+ /**
439
+ * Returns whether this meeting is a Locus CALL
440
+ * @returns {Boolean}
441
+ */
442
+ isLocusCall(): boolean;
443
+ /**
444
+ * Getter - Returns callStateForMetrics.correlationId
445
+ * @returns {string}
446
+ */
447
+ get correlationId(): string;
448
+ /**
449
+ * Setter - sets callStateForMetrics.correlationId
450
+ * @param {string} correlationId
451
+ */
452
+ set correlationId(correlationId: string);
453
+ /**
454
+ * Set meeting info and trigger `MEETING_INFO_AVAILABLE` event
455
+ * @param {any} info
456
+ * @param {string} [meetingLookupUrl] Lookup url, defined when the meeting info fetched
457
+ * @returns {void}
458
+ */
459
+ private setMeetingInfo;
460
+ /**
461
+ * Add pre-fetched meeting info
462
+ *
463
+ * The passed meeting info should be be complete, e.g.: fetched after password or captcha provided
464
+ *
465
+ * @param {Object} meetingInfo - Complete meeting info
466
+ * @param {FetchMeetingInfoParams} fetchParams - Fetch parameters for validation
467
+ * @param {String|undefined} meetingLookupUrl - Lookup url, defined when the meeting info fetched
468
+ * @returns {Promise<void>}
469
+ */
470
+ injectMeetingInfo(meetingInfo: any, fetchParams: FetchMeetingInfoParams, meetingLookupUrl: string | undefined): Promise<void>;
471
+ /**
472
+ * Validate fetch parameters and clear the fetchMeetingInfoTimeout timeout
473
+ *
474
+ * @param {FetchMeetingInfoParams} fetchParams - fetch parameters for validation
475
+ * @param {String} caller - Name of the caller for logging
476
+ *
477
+ * @returns {Promise<void>}
478
+ * @private
479
+ */
480
+ private prepForFetchMeetingInfo;
481
+ /**
482
+ * Internal method for fetching meeting info
483
+ *
484
+ * @returns {Promise}
485
+ */
486
+ private fetchMeetingInfoInternal;
487
+ /**
488
+ * Refreshes the meeting info permission token (it's required for joining meetings)
489
+ *
490
+ * @param {string} [reason] used for metrics and logging purposes (optional)
491
+ * @returns {Promise}
492
+ */
493
+ refreshPermissionToken(reason?: string): Promise<void>;
381
494
  /**
382
495
  * Fetches meeting information.
383
496
  * @param {Object} options
384
497
  * @param {String} [options.password] optional
385
498
  * @param {String} [options.captchaCode] optional
499
+ * @param {Boolean} [options.sendCAevents] optional - Whether to submit Call Analyzer events or not. Default: false.
386
500
  * @public
387
501
  * @memberof Meeting
388
502
  * @returns {Promise}
389
503
  */
390
- fetchMeetingInfo({ password, captchaCode, }: {
391
- password?: string;
392
- captchaCode?: string;
393
- }): Promise<void>;
504
+ fetchMeetingInfo(options: FetchMeetingInfoParams): Promise<void>;
394
505
  /**
395
506
  * Checks if the supplied password/host key is correct. It returns a promise with information whether the
396
507
  * password and captcha code were correct or not.
397
508
  * @param {String} password - this can be either a password or a host key, can be undefined if only captcha was required
398
509
  * @param {String} captchaCode - can be undefined if captcha was not required by the server
510
+ * @param {Boolean} sendCAevents - whether Call Analyzer events should be sent when fetching meeting information
399
511
  * @public
400
512
  * @memberof Meeting
401
513
  * @returns {Promise<{isPasswordValid: boolean, requiredCaptcha: boolean, failureReason: MEETING_INFO_FAILURE_REASON}>}
402
514
  */
403
- verifyPassword(password: string, captchaCode: string): Promise<{
515
+ verifyPassword(password: string, captchaCode: string, sendCAevents?: boolean): Promise<{
404
516
  isPasswordValid: boolean;
405
517
  requiredCaptcha: any;
406
518
  failureReason: string;
@@ -417,6 +529,14 @@ export default class Meeting extends StatelessWebexPlugin {
417
529
  * @returns {Promise}
418
530
  */
419
531
  refreshCaptcha(): any;
532
+ /**
533
+ * Posts metrics event for this meeting. Allows the app to send Call Analyzer events.
534
+ * @param {String} eventName - Call Analyzer event
535
+ * @public
536
+ * @memberof Meeting
537
+ * @returns {Promise}
538
+ */
539
+ postMetrics(eventName: ClientEvent['name']): void;
420
540
  /**
421
541
  * Proxy function for all the listener set ups
422
542
  * @returns {undefined}
@@ -431,6 +551,13 @@ export default class Meeting extends StatelessWebexPlugin {
431
551
  * @memberof Meeting
432
552
  */
433
553
  setUpBreakoutsListener(): void;
554
+ /**
555
+ * Set up the listeners for interpretation
556
+ * @returns {undefined}
557
+ * @private
558
+ * @memberof Meeting
559
+ */
560
+ private setUpInterpretationListener;
434
561
  /**
435
562
  * Set up the locus info listener for meetings disconnected due to inactivity
436
563
  * @returns {undefined}
@@ -452,50 +579,9 @@ export default class Meeting extends StatelessWebexPlugin {
452
579
  * @memberof Meeting
453
580
  */
454
581
  private setUpLocusFullStateListener;
455
- /**
456
- * get the metrics payload pre
457
- * @param {Object} options
458
- * @param {String} options.event
459
- * @param {String} options.trackingId
460
- * @param {Object} options.locus
461
- * @param {Array} options.mediaConnections
462
- * @param {Object} options.errors
463
- * @returns {Object}
464
- * @memberof Meeting
465
- */
466
- getAnalyzerMetricsPrePayload(options: {
467
- event: string;
468
- trackingId: string;
469
- locus: object;
470
- mediaConnections: Array<any>;
471
- errors: object;
472
- } | any): {};
473
- /**
474
- * Send the metrics to call-analyzer dashboard
475
- * @param {Object} options
476
- * @param {String} options.event
477
- * @param {String} options.trackingId
478
- * @param {Object} options.locus
479
- * @param {Object} options.errors
480
- * @returns {Promise}
481
- * @private
482
- * @memberof Meeting
483
- */
484
- private sendCallAnalyzerMetrics;
485
- /**
486
- * Send the metrics to Media Quality Analyzer dashboard
487
- * @param {Object} options
488
- * @param {String} options.event
489
- * @param {String} options.trackingId
490
- * @param {Object} options.locus
491
- * @returns {Promise}
492
- * @private
493
- * @memberof Meeting
494
- */
495
- private sendMediaQualityAnalyzerMetrics;
496
582
  /**
497
583
  * sets the network status on meeting object
498
- * @param {String} networkStatus
584
+ * @param {NETWORK_STATUS} networkStatus
499
585
  * @private
500
586
  * @returns {undefined}
501
587
  * @memberof Meeting
@@ -555,6 +641,13 @@ export default class Meeting extends StatelessWebexPlugin {
555
641
  * @memberof Meeting
556
642
  */
557
643
  private setupLocusControlsListener;
644
+ /**
645
+ * Trigger annotation info update event
646
+ @returns {undefined}
647
+ @param {object} contentShare
648
+ @param {object} previousContentShare
649
+ */
650
+ private triggerAnnotationInfoEvent;
558
651
  /**
559
652
  * Set up the locus info media shares listener
560
653
  * update content and whiteboard sharing id value for members, and updates the member
@@ -653,13 +746,23 @@ export default class Meeting extends StatelessWebexPlugin {
653
746
  phoneNumber: string;
654
747
  }): any;
655
748
  /**
656
- * Admit the guest(s) to the call once they are waiting
749
+ * Admit the guest(s) to the call once they are waiting.
750
+ * If the host/cohost is in a breakout session, the locus url
751
+ * of the session must be provided as the authorizingLocusUrl.
752
+ * Regardless of host/cohost location, the locus Id (lid) in
753
+ * the path should be the locus Id of the main, which means the
754
+ * locus url of the api call must be from the main session.
755
+ * If these loucs urls are not provided, the function will do the check.
657
756
  * @param {Array} memberIds
757
+ * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}
658
758
  * @returns {Promise} see #members.admitMembers
659
759
  * @public
660
760
  * @memberof Meeting
661
761
  */
662
- admit(memberIds: Array<any>): any;
762
+ admit(memberIds: Array<any>, sessionLocusUrls?: {
763
+ authorizingLocusUrl: string;
764
+ mainLocusUrl: string;
765
+ }): any;
663
766
  /**
664
767
  * Remove the member from the meeting, boot them
665
768
  * @param {String} memberId
@@ -693,80 +796,63 @@ export default class Meeting extends StatelessWebexPlugin {
693
796
  * @memberof Meeting
694
797
  */
695
798
  getMembers(): Members;
696
- /**
697
- * Truthy when a meeting has an audio connection established
698
- * @returns {Boolean} true if meeting audio is connected otherwise false
699
- * @public
700
- * @memberof Meeting
701
- */
702
- isAudioConnected(): boolean;
703
- /**
704
- * Convenience function to tell whether a meeting is muted
705
- * @returns {Boolean} if meeting audio muted or not
706
- * @public
707
- * @memberof Meeting
708
- */
709
- isAudioMuted(): any;
710
- /**
711
- * Convenience function to tell if the end user last changed the audio state
712
- * @returns {Boolean} if audio was manipulated by the end user
713
- * @public
714
- * @memberof Meeting
715
- */
716
- isAudioSelf(): any;
717
- /**
718
- * Truthy when a meeting has a video connection established
719
- * @returns {Boolean} true if meeting video connected otherwise false
720
- * @public
721
- * @memberof Meeting
722
- */
723
- isVideoConnected(): boolean;
724
- /**
725
- * Convenience function to tell whether video is muted
726
- * @returns {Boolean} if meeting video is muted or not
727
- * @public
728
- * @memberof Meeting
729
- */
730
- isVideoMuted(): any;
731
- /**
732
- * Convenience function to tell whether the end user changed the video state
733
- * @returns {Boolean} if meeting video is muted or not
734
- * @public
735
- * @memberof Meeting
736
- */
737
- isVideoSelf(): any;
738
799
  /**
739
800
  * Sets the meeting info on the class instance
740
801
  * @param {Object} meetingInfo
741
- * @param {Object} meetingInfo.body
742
- * @param {String} meetingInfo.body.conversationUrl
743
- * @param {String} meetingInfo.body.locusUrl
744
- * @param {String} meetingInfo.body.sipUri
745
- * @param {Object} meetingInfo.body.owner
802
+ * @param {String} meetingInfo.conversationUrl
803
+ * @param {String} meetingInfo.locusUrl
804
+ * @param {String} meetingInfo.sipUri
805
+ * @param {String} [meetingInfo.sipUrl]
806
+ * @param {String} [meetingInfo.sipMeetingUri]
807
+ * @param {String} [meetingInfo.meetingNumber]
808
+ * @param {String} [meetingInfo.meetingJoinUrl]
809
+ * @param {String} [meetingInfo.hostId]
810
+ * @param {String} [meetingInfo.permissionToken]
811
+ * @param {String} [meetingInfo.channel]
812
+ * @param {Object} meetingInfo.owner
746
813
  * @param {Object | String} destination locus object with meeting data or destination string (sip url, meeting link, etc)
814
+ * @param {Object | String} errors Meeting info request error
747
815
  * @returns {undefined}
748
816
  * @private
749
817
  * @memberof Meeting
750
818
  */
751
819
  parseMeetingInfo(meetingInfo: {
752
- body: {
753
- conversationUrl: string;
754
- locusUrl: string;
755
- sipUri: string;
756
- owner: object;
757
- };
758
- } | any, destination?: object | string | null): void;
820
+ conversationUrl: string;
821
+ locusUrl: string;
822
+ sipUri: string;
823
+ owner: object;
824
+ sipUrl?: string;
825
+ sipMeetingUri?: string;
826
+ meetingNumber?: string;
827
+ meetingJoinUrl?: string;
828
+ hostId?: string;
829
+ permissionToken?: string;
830
+ channel?: string;
831
+ }, destination?: object | string | null, errors?: any): void;
832
+ /**
833
+ * Indicates whether policy can be applied
834
+ * @returns {boolean}
835
+ */
836
+ private arePolicyRestrictionsSupported;
759
837
  /**
760
- * Sets the first locus info on the class instance
761
- * @param {Object} locus
762
- * @param {String} locus.url
763
- * @param {Array} locus.participants
764
- * @param {Object} locus.self
838
+ * Updates the meeting actions (display hints), depends on locus display hints, user policy and app api info
765
839
  * @returns {undefined}
766
840
  * @private
767
841
  * @memberof Meeting
768
842
  */
769
- private parseLocus;
843
+ private updateMeetingActions;
844
+ /**
845
+ * Sets the self user policies based on the contents of the permission token
846
+ * @returns {void}
847
+ */
848
+ setSelfUserPolicies(): void;
849
+ /**
850
+ * Sets the permission token payload on the class instance
851
+ *
852
+ * @param {String} permissionToken
853
+ * @returns {void}
854
+ */
855
+ setPermissionTokenPayload(permissionToken: string): void;
770
856
  /**
771
857
  * Sets the sip uri on the class instance
772
858
  * uses meeting info as precedence
@@ -789,7 +875,13 @@ export default class Meeting extends StatelessWebexPlugin {
789
875
  * @private
790
876
  * @memberof Meeting
791
877
  */
792
- private setLocus;
878
+ setLocus(locus: {
879
+ mediaConnections: Array<any>;
880
+ locusUrl: string;
881
+ locusId: string;
882
+ mediaId: string;
883
+ host: object;
884
+ } | any): void;
793
885
  /**
794
886
  * Upload logs for the current meeting
795
887
  * @param {object} options file name and function name
@@ -799,19 +891,10 @@ export default class Meeting extends StatelessWebexPlugin {
799
891
  */
800
892
  uploadLogs(options?: object): void;
801
893
  /**
802
- * Removes remote audio and video stream on the class instance and triggers an event
803
- * to developers
804
- * @returns {undefined}
805
- * @public
806
- * @memberof Meeting
807
- * @deprecated after v1.89.3
808
- */
809
- unsetRemoteStream(): void;
810
- /**
811
- * Removes remote audio, video and share tracks from class instance's mediaProperties
894
+ * Removes remote audio, video and share streams from class instance's mediaProperties
812
895
  * @returns {undefined}
813
896
  */
814
- unsetRemoteTracks(): void;
897
+ unsetRemoteStreams(): void;
815
898
  /**
816
899
  * Removes the remote stream on the class instance and triggers an event
817
900
  * to developers
@@ -822,83 +905,45 @@ export default class Meeting extends StatelessWebexPlugin {
822
905
  */
823
906
  closeRemoteStream(): void;
824
907
  /**
825
- * Removes the remote tracks on the class instance and triggers an event
908
+ * Removes the remote streams on the class instance and triggers an event
826
909
  * to developers
827
910
  * @returns {undefined}
828
911
  * @memberof Meeting
829
912
  */
830
- closeRemoteTracks(): Promise<[any, any, any]>;
831
- /**
832
- * Emits the 'media:ready' event with a local stream that consists of 1 local audio and 1 local video track
833
- * @returns {undefined}
834
- * @private
835
- * @memberof Meeting
836
- */
837
- private sendLocalMediaReadyEvent;
838
- /**
839
- * Sets the local audio track on the class and emits an event to the developer
840
- * @param {MediaStreamTrack} rawAudioTrack
841
- * @param {Boolean} emitEvent if true, a media ready event is emitted to the developer
842
- * @returns {undefined}
843
- * @private
844
- * @memberof Meeting
845
- */
846
- private setLocalAudioTrack;
847
- /**
848
- * Sets the local video track on the class and emits an event to the developer
849
- * @param {MediaStreamTrack} rawVideoTrack
850
- * @param {Boolean} emitEvent if true, a media ready event is emitted to the developer
851
- * @returns {undefined}
852
- * @private
853
- * @memberof Meeting
854
- */
855
- private setLocalVideoTrack;
856
- /**
857
- * Sets the local media stream on the class and emits an event to the developer
858
- * @param {Stream} localStream the local media stream
859
- * @returns {undefined}
860
- * @public
861
- * @memberof Meeting
862
- */
863
- setLocalTracks(localStream: any): void;
864
- /**
865
- * Sets the local media stream on the class and emits an event to the developer
866
- * @param {MediaStreamTrack} rawLocalShareTrack the local share media track
867
- * @returns {undefined}
868
- * @public
869
- * @memberof Meeting
870
- */
871
- setLocalShareTrack(rawLocalShareTrack: MediaStreamTrack | null): void;
913
+ closeRemoteStreams(): Promise<[any, any, any]>;
872
914
  /**
873
- * Closes the local stream from the class and emits an event to the developer
874
- * @returns {undefined}
875
- * @event media:stopped
876
- * @public
877
- * @memberof Meeting
915
+ * Stores the reference to a new microphone stream, sets up the required event listeners
916
+ * on it, cleans up previous stream, etc.
917
+ *
918
+ * @param {LocalMicrophoneStream | null} localStream local microphone stream
919
+ * @returns {Promise<void>}
878
920
  */
879
- closeLocalStream(): any;
921
+ private setLocalAudioStream;
880
922
  /**
881
- * Closes the local stream from the class and emits an event to the developer
882
- * @returns {undefined}
883
- * @event media:stopped
884
- * @public
885
- * @memberof Meeting
923
+ * Stores the reference to a new camera stream, sets up the required event listeners
924
+ * on it, cleans up previous stream, etc.
925
+ *
926
+ * @param {LocalCameraStream | null} localStream local camera stream
927
+ * @returns {Promise<void>}
886
928
  */
887
- closeLocalShare(): any;
929
+ private setLocalVideoStream;
888
930
  /**
889
- * Removes the local stream from the class and emits an event to the developer
890
- * @returns {undefined}
891
- * @public
892
- * @memberof Meeting
931
+ * Stores the reference to a new screen share stream, sets up the required event listeners
932
+ * on it, cleans up previous stream, etc.
933
+ * It also sends the floor grant/release request.
934
+ *
935
+ * @param {LocalDisplayStream | undefined} localDisplayStream local display stream
936
+ * @returns {Promise<void>}
893
937
  */
894
- unsetLocalVideoTrack(): void;
938
+ private setLocalShareVideoStream;
895
939
  /**
896
- * Removes the local share from the class and emits an event to the developer
897
- * @returns {undefined}
898
- * @public
899
- * @memberof Meeting
940
+ * Stores the reference to a new screen share audio stream, sets up the required event listeners
941
+ * on it, cleans up previous stream, etc.
942
+ *
943
+ * @param {LocalSystemAudioStream | undefined} localSystemAudioStream local system audio stream
944
+ * @returns {Promise<void>}
900
945
  */
901
- unsetLocalShareTrack(): void;
946
+ private setLocalShareAudioStream;
902
947
  /**
903
948
  * sets up listner for mercury event
904
949
  * @returns {undefined}
@@ -924,13 +969,28 @@ export default class Meeting extends StatelessWebexPlugin {
924
969
  */
925
970
  unsetPeerConnections(): void;
926
971
  /**
927
- * Convenience method to set the correlation id for the Meeting
928
- * @param {String} id correlation id to set on the class
972
+ * Convenience method to set the correlation id for the callStateForMetrics
973
+ * @param {String} id correlation id to set on the callStateForMetrics
974
+ * @returns {undefined}
975
+ * @public
976
+ * @memberof Meeting
977
+ */
978
+ setCorrelationId(id: string): void;
979
+ /**
980
+ * Update the callStateForMetrics
981
+ * @param {CallStateForMetrics} callStateForMetrics updated values for callStateForMetrics
929
982
  * @returns {undefined}
983
+ * @public
984
+ * @memberof Meeting
985
+ */
986
+ updateCallStateForMetrics(callStateForMetrics: CallStateForMetrics): void;
987
+ /**
988
+ * Enqueue request for screenshare floor and set the status to pending
989
+ * @returns {Promise}
930
990
  * @private
931
991
  * @memberof Meeting
932
992
  */
933
- private setCorrelationId;
993
+ private enqueueScreenShareFloorRequest;
934
994
  /**
935
995
  * Mute the audio for a meeting
936
996
  * @returns {Promise} resolves the data from muting audio {mute, self} or rejects if there is no audio set
@@ -963,32 +1023,25 @@ export default class Meeting extends StatelessWebexPlugin {
963
1023
  * Shorthand function to join AND set up media
964
1024
  * @param {Object} options - options to join with media
965
1025
  * @param {JoinOptions} [options.joinOptions] - see #join()
966
- * @param {MediaDirection} options.mediaSettings - see #addMedia()
967
- * @param {AudioVideo} [options.audioVideoOptions] - see #getMediaStreams()
968
- * @returns {Promise} -- {join: see join(), media: see addMedia(), local: see getMediaStreams()}
1026
+ * @param {AddMediaOptions} [options.mediaOptions] - see #addMedia()
1027
+ * @returns {Promise} -- {join: see join(), media: see addMedia()}
969
1028
  * @public
970
1029
  * @memberof Meeting
971
1030
  * @example
972
1031
  * joinWithMedia({
973
1032
  * joinOptions: {resourceId: 'resourceId' },
974
- * mediaSettings: {
975
- * sendAudio: true,
976
- * sendVideo: true,
977
- * sendShare: false,
978
- * receiveVideo:true,
979
- * receiveAudio: true,
980
- * receiveShare: true
981
- * }
982
- * audioVideoOptions: {
983
- * audio: 'audioDeviceId',
984
- * video: 'videoDeviceId'
985
- * }})
1033
+ * mediaOptions: {
1034
+ * localStreams: { microphone: microphoneStream, camera: cameraStream }
1035
+ * }
1036
+ * })
986
1037
  */
987
1038
  joinWithMedia(options?: {
988
1039
  joinOptions?: any;
989
- mediaSettings: any;
990
- audioVideoOptions?: any;
991
- }): any;
1040
+ mediaOptions?: AddMediaOptions;
1041
+ }): Promise<{
1042
+ join: any;
1043
+ media: void;
1044
+ }>;
992
1045
  /**
993
1046
  * Initiates the reconnection of the media in the meeting
994
1047
  *
@@ -1053,7 +1106,7 @@ export default class Meeting extends StatelessWebexPlugin {
1053
1106
  * if joining as host on second loop, pass pin and pass moderator if joining as guest on second loop
1054
1107
  * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)
1055
1108
  */
1056
- join(options?: any): any;
1109
+ join(options?: any): Promise<any>;
1057
1110
  /**
1058
1111
  * Connects to low latency mercury and reconnects if the address has changed
1059
1112
  * It will also disconnect if called when the meeting has ended
@@ -1068,7 +1121,7 @@ export default class Meeting extends StatelessWebexPlugin {
1068
1121
  * @public
1069
1122
  * @memberof Meeting
1070
1123
  */
1071
- usePhoneAudio(phoneNumber: string): any;
1124
+ usePhoneAudio(phoneNumber: string): Promise<any>;
1072
1125
  /**
1073
1126
  * Determines if the given pstnStatus is in a state which implies the phone is provisioned
1074
1127
  * @param {String} pstnStatus
@@ -1116,38 +1169,6 @@ export default class Meeting extends StatelessWebexPlugin {
1116
1169
  * @memberof Meeting
1117
1170
  */
1118
1171
  moveFrom(resourceId: string): any;
1119
- /**
1120
- * Get local media streams based on options passed
1121
- *
1122
- * NOTE: this method can only be used with transcoded meetings, not with multistream meetings
1123
- *
1124
- * @param {MediaDirection} mediaDirection A configurable options object for joining a meeting
1125
- * @param {AudioVideo} [audioVideo] audio/video object to set audioinput and videoinput devices, see #Media.getUserMedia
1126
- * @param {SharePreferences} [sharePreferences] audio/video object to set audioinput and videoinput devices, see #Media.getUserMedia
1127
- * @returns {Promise} see #Media.getUserMedia
1128
- * @public
1129
- * @todo should be static, or moved so can be called outside of a meeting
1130
- * @memberof Meeting
1131
- */
1132
- getMediaStreams: (mediaDirection: any, audioVideo?: any, sharePreferences?: any) => any;
1133
- /**
1134
- * Checks if the machine has at least one audio or video device
1135
- * @param {Object} options
1136
- * @param {Boolean} options.sendAudio
1137
- * @param {Boolean} options.sendVideo
1138
- * @returns {Object}
1139
- * @memberof Meetings
1140
- */
1141
- getSupportedDevices: ({ sendAudio, sendVideo, }: {
1142
- sendAudio: boolean;
1143
- sendVideo: boolean;
1144
- }) => any;
1145
- /**
1146
- * Get the devices from the Media module
1147
- * @returns {Promise} resolves to an array of DeviceInfo
1148
- * @memberof Meetings
1149
- */
1150
- getDevices: () => any;
1151
1172
  /**
1152
1173
  * Handles ROAP_FAILURE event from the webrtc media connection
1153
1174
  *
@@ -1155,6 +1176,12 @@ export default class Meeting extends StatelessWebexPlugin {
1155
1176
  * @returns {void}
1156
1177
  */
1157
1178
  handleRoapFailure: (error: any) => void;
1179
+ /**
1180
+ * This function makes sure we send the right metrics when local and remote SDPs are processed/generated
1181
+ *
1182
+ * @returns {undefined}
1183
+ */
1184
+ setupSdpListeners: () => void;
1158
1185
  setupMediaConnectionListeners: () => void;
1159
1186
  /**
1160
1187
  * Registers for all required StatsAnalyzer events
@@ -1165,12 +1192,14 @@ export default class Meeting extends StatelessWebexPlugin {
1165
1192
  setupStatsAnalyzerEventHandlers: () => void;
1166
1193
  getMediaConnectionDebugId(): string;
1167
1194
  /**
1168
- * Creates a webrtc media connection
1195
+ * Creates a webrtc media connection and publishes streams to it
1169
1196
  *
1170
1197
  * @param {Object} turnServerInfo TURN server information
1198
+ * @param {BundlePolicy} [bundlePolicy] Bundle policy settings
1199
+ * @param {AddMediaOptions} [options] Options for enabling/disabling audio/video
1171
1200
  * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
1172
1201
  */
1173
- createMediaConnection(turnServerInfo: any): any;
1202
+ private createMediaConnection;
1174
1203
  /**
1175
1204
  * Listens for an event emitted by eventEmitter and emits it from the meeting object
1176
1205
  *
@@ -1182,23 +1211,121 @@ export default class Meeting extends StatelessWebexPlugin {
1182
1211
  */
1183
1212
  forwardEvent(eventEmitter: any, eventTypeToForward: any, meetingEventType: any): void;
1184
1213
  /**
1185
- * Specify joining via audio (option: pstn), video, screenshare
1186
- * @param {Object} options A configurable options object for joining a meeting
1187
- * @param {Object} options.resourceId pass the deviceId
1188
- * @param {MediaDirection} options.mediaSettings pass media options
1189
- * @param {MediaStream} options.localStream
1190
- * @param {MediaStream} options.localShare
1191
- * @param {RemoteMediaManagerConfig} options.remoteMediaManagerConfig only applies if multistream is enabled
1192
- * @returns {Promise}
1214
+ * Sets up all the references to local streams in this.mediaProperties before creating media connection
1215
+ * and before TURN discovery, so that the correct mute state is sent with TURN discovery roap messages.
1216
+ *
1217
+ * @private
1218
+ * @param {LocalStreams} localStreams
1219
+ * @returns {Promise<void>}
1220
+ */
1221
+ private setUpLocalStreamReferences;
1222
+ /**
1223
+ * Calls mediaProperties.waitForMediaConnectionConnected() and sends CA client.ice.end metric on failure
1224
+ *
1225
+ * @private
1226
+ * @returns {Promise<void>}
1227
+ */
1228
+ private waitForMediaConnectionConnected;
1229
+ /**
1230
+ * Enables statsAnalyser if config allows it
1231
+ *
1232
+ * @private
1233
+ * @returns {void}
1234
+ */
1235
+ private createStatsAnalyzer;
1236
+ /**
1237
+ * Handles device logging
1238
+ *
1239
+ * @private
1240
+ * @static
1241
+ * @returns {Promise<void>}
1242
+ */
1243
+ private static handleDeviceLogging;
1244
+ /**
1245
+ * Returns a promise. This promise is created once the local sdp offer has been successfully created and is resolved
1246
+ * once the remote sdp answer has been received.
1247
+ *
1248
+ * @private
1249
+ * @returns {Promise<void>}
1250
+ */
1251
+ private waitForRemoteSDPAnswer;
1252
+ /**
1253
+ * Calls establishMediaConnection with isForced = true to force turn discovery to happen
1254
+ *
1255
+ * @private
1256
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1257
+ * @param {BundlePolicy} [bundlePolicy]
1258
+ * @returns {Promise<void>}
1259
+ */
1260
+ private retryEstablishMediaConnectionWithForcedTurnDiscovery;
1261
+ /**
1262
+ * Does relevant clean up before retrying to establish media connection
1263
+ * and performs the retry with forced turn discovery
1264
+ *
1265
+ * @private
1266
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1267
+ * @param {BundlePolicy} [bundlePolicy]
1268
+ * @returns {Promise<void>}
1269
+ */
1270
+ private retryWithForcedTurnDiscovery;
1271
+ /**
1272
+ * If waitForMediaConnectionConnected() fails when we haven't done turn discovery then we
1273
+ * attempt to establish a media connection again, but this time using turn discovery. If we
1274
+ * used turn discovery on the first pass we do not attempt connection again.
1275
+ *
1276
+ * @private
1277
+ * @param {Error} error
1278
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1279
+ * @param {BundlePolicy} [bundlePolicy]
1280
+ * @returns {Promise<void>}
1281
+ */
1282
+ private handleWaitForMediaConnectionConnectedError;
1283
+ /**
1284
+ * Does TURN discovery, SDP offer/answer exhange, establishes ICE connection and DTLS handshake.
1285
+ *
1286
+ * @private
1287
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1288
+ * @param {BundlePolicy} [bundlePolicy]
1289
+ * @param {boolean} [isForced] - let isForced be true to do turn discovery regardless of reachability results
1290
+ * @returns {Promise<void>}
1291
+ */
1292
+ private establishMediaConnection;
1293
+ /**
1294
+ * Cleans up stats analyzer, peer connection, and turns off listeners
1295
+ *
1296
+ * @private
1297
+ * @returns {Promise<void>}
1298
+ */
1299
+ private cleanUpOnAddMediaFailure;
1300
+ /**
1301
+ * Sends stats report, closes peer connection and cleans up any media connection
1302
+ * related things before trying to establish media connection again with turn server
1303
+ *
1304
+ * @private
1305
+ * @returns {Promise<void>}
1306
+ */
1307
+ private cleanUpBeforeRetryWithTurnServer;
1308
+ /**
1309
+ * Creates a media connection to the server. Media connection is required for sending or receiving any audio/video.
1310
+ *
1311
+ * @param {AddMediaOptions} options
1312
+ * @returns {Promise<void>}
1193
1313
  * @public
1194
1314
  * @memberof Meeting
1195
1315
  */
1196
- addMedia(options?: any): any;
1316
+ addMedia(options?: AddMediaOptions): Promise<void>;
1197
1317
  /**
1198
1318
  * Informs if the peer connection is in a state that can be updated with updateMedia (audio/video/share)
1199
1319
  * @returns {Boolean}
1200
1320
  */
1201
1321
  canUpdateMedia(): boolean;
1322
+ /**
1323
+ * media failed, so collect a stats report from webrtc using the wcme connection to grab the rtc stats report
1324
+ * send a webrtc telemetry dump to the configured server using the internal media core check metrics configured callback
1325
+ * @param {String} callFrom - the function calling this function, optional.
1326
+ * @returns {Promise<void>}
1327
+ */
1328
+ private forceSendStatsReport;
1202
1329
  /**
1203
1330
  * Enqueues a media update operation.
1204
1331
  * @param {String} mediaUpdateType one of MEDIA_UPDATE_TYPE values
@@ -1224,94 +1351,26 @@ export default class Meeting extends StatelessWebexPlugin {
1224
1351
  */
1225
1352
  processNextQueuedMediaUpdate: () => void;
1226
1353
  /**
1227
- * A confluence of updateAudio, updateVideo, and updateShare
1228
- * this function re-establishes all of the media streams with new options
1229
- * @param {Object} options
1230
- * @param {MediaStream} options.localStream
1231
- * @param {MediaStream} options.localShare
1232
- * @param {MediaDirection} options.mediaSettings
1233
- * @returns {Promise}
1234
- * @public
1235
- * @memberof Meeting
1236
- */
1237
- updateMedia(options?: {
1238
- localStream?: MediaStream;
1239
- localShare?: MediaStream;
1240
- mediaSettings?: any;
1241
- }): any;
1242
- /**
1243
- * Update the main audio track with new parameters
1244
- *
1245
- * NOTE: this method can only be used with transcoded meetings, for multistream meetings use publishTrack()
1246
- *
1247
- * @param {Object} options
1248
- * @param {boolean} options.sendAudio
1249
- * @param {boolean} options.receiveAudio
1250
- * @param {MediaStream} options.stream Stream that contains the audio track to update
1251
- * @returns {Promise}
1252
- * @public
1253
- * @memberof Meeting
1254
- */
1255
- updateAudio(options: {
1256
- sendAudio: boolean;
1257
- receiveAudio: boolean;
1258
- stream: MediaStream;
1259
- }): Promise<any>;
1260
- /**
1261
- * Update the main video track with new parameters
1262
- *
1263
- * NOTE: this method can only be used with transcoded meetings, for multistream meetings use publishTrack()
1264
- *
1265
- * @param {Object} options
1266
- * @param {boolean} options.sendVideo
1267
- * @param {boolean} options.receiveVideo
1268
- * @param {MediaStream} options.stream Stream that contains the video track to update
1269
- * @returns {Promise}
1270
- * @public
1271
- * @memberof Meeting
1272
- */
1273
- updateVideo(options: {
1274
- sendVideo: boolean;
1275
- receiveVideo: boolean;
1276
- stream: MediaStream;
1277
- }): any;
1278
- /**
1279
- * Internal function when stopping a share stream, cleanup
1280
- * @param {boolean} sendShare
1281
- * @param {boolean} previousShareStatus
1282
- * @returns {Promise}
1283
- * @private
1284
- * @memberof Meeting
1285
- */
1286
- private checkForStopShare;
1287
- /**
1288
- * Update the share streams, can be used to start sharing
1289
- *
1290
- * NOTE: this method can only be used with transcoded meetings, for multistream meetings use publishTrack()
1354
+ * Updates the media connection - it allows to enable/disable all audio/video/share in the meeting.
1355
+ * This does not affect the published tracks, so for example if a microphone track is published and
1356
+ * updateMedia({audioEnabled: false}) is called, the audio will not be sent or received anymore,
1357
+ * but the track's "published" state is not changed and when updateMedia({audioEnabled: true}) is called,
1358
+ * the sending of the audio from the same track will resume.
1291
1359
  *
1292
1360
  * @param {Object} options
1293
- * @param {boolean} options.sendShare
1294
- * @param {boolean} options.receiveShare
1361
+ * @param {boolean} options.audioEnabled [optional] enables/disables receiving and sending of main audio in the meeting
1362
+ * @param {boolean} options.videoEnabled [optional] enables/disables receiving and sending of main video in the meeting
1363
+ * @param {boolean} options.shareEnabled [optional] enables/disables receiving and sending of screen share in the meeting
1295
1364
  * @returns {Promise}
1296
1365
  * @public
1297
1366
  * @memberof Meeting
1298
1367
  */
1299
- updateShare(options: {
1300
- sendShare?: boolean;
1301
- receiveShare?: boolean;
1302
- stream?: any;
1303
- skipSignalingCheck?: boolean;
1304
- }): any;
1305
- /**
1306
- * Do all the attach media pre set up before executing the actual attach
1307
- * @param {MediaStream} localStream
1308
- * @param {MediaStream} localShare
1309
- * @param {MediaDirection} mediaSettings
1310
- * @returns {undefined}
1311
- * @private
1312
- * @memberof Meeting
1313
- */
1314
- private preMedia;
1368
+ updateMedia(options: {
1369
+ audioEnabled?: boolean;
1370
+ videoEnabled?: boolean;
1371
+ shareAudioEnabled?: boolean;
1372
+ shareVideoEnabled?: boolean;
1373
+ }): Promise<void>;
1315
1374
  /**
1316
1375
  * Acknowledge the meeting, outgoing or incoming
1317
1376
  * @param {String} type
@@ -1319,7 +1378,11 @@ export default class Meeting extends StatelessWebexPlugin {
1319
1378
  * @public
1320
1379
  * @memberof Meeting
1321
1380
  */
1322
- acknowledge(type: string): any;
1381
+ acknowledge(type: string): Promise<{
1382
+ response: any;
1383
+ }> | Promise<{
1384
+ message: string;
1385
+ }>;
1323
1386
  /**
1324
1387
  * Decline this meeting
1325
1388
  * @param {String} reason
@@ -1329,15 +1392,45 @@ export default class Meeting extends StatelessWebexPlugin {
1329
1392
  */
1330
1393
  decline(reason: string): any;
1331
1394
  /**
1332
- * Leave the current meeting
1395
+ * Returns a promise that will resolve to fetch options for leaving a meeting.
1396
+ *
1397
+ * This is to support quickly submitting a leave request when the browser/tab is closing.
1398
+ * Calling meeting.leave will not work because there are some async steps that will
1399
+ * not complete before the browser is closed. Instead, we pre-gather all the
1400
+ * information/options needed for the request(s), and then simply and quickly
1401
+ * fire the fetch(es) when pagehide is triggered.
1402
+ *
1403
+ * We must use fetch instead of request because fetch has a keepalive option that
1404
+ * allows the request it to outlive the page.
1405
+ *
1406
+ * Note: the $timings values will be wrong, but setRequestTimingsAndFetch() will
1407
+ * properly adjust them before submitting.
1408
+ *
1409
+ * @public
1333
1410
  * @param {Object} options leave options
1334
1411
  * @param {String} options.resourceId the device with which to leave from, empty if just the computer
1412
+ * @param {any} options.reason the reason for leaving
1413
+ * @returns {Promise} resolves to options to be used with fetch
1414
+ */
1415
+ buildLeaveFetchRequestOptions(options?: {
1416
+ resourceId?: string;
1417
+ reason?: any;
1418
+ }): any;
1419
+ /**
1420
+ * Leave the current meeting
1421
+ * @param {Object} options - leave options
1422
+ * @param {String} [options.resourceId] - the device with which to leave from, empty if just the computer
1423
+ * @param {String} [options.clientEventLeaveReason] - the leaveReason to include in the Call Analyzer event.
1424
+ * Must be one of: 'paired-leave' | 'one-to-one' | 'ended-by-locus' (defaults to no reason)
1425
+ * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/main/diagnostic-events.raml#L796
1426
+ * @param {String} [options.reason] - only used for logging
1335
1427
  * @returns {Promise}
1336
1428
  * @public
1337
1429
  * @memberof Meeting
1338
1430
  */
1339
1431
  leave(options?: {
1340
1432
  resourceId?: string;
1433
+ clientEventLeaveReason?: ClientEventLeaveReason;
1341
1434
  reason?: any;
1342
1435
  }): any;
1343
1436
  /**
@@ -1365,12 +1458,12 @@ export default class Meeting extends StatelessWebexPlugin {
1365
1458
  */
1366
1459
  private requestScreenShareFloor;
1367
1460
  /**
1368
- * Stops the screen share
1369
- * @returns {Promise} see #updateShare
1370
- * @public
1371
- * @memberof Meeting
1461
+ * Requests screen share floor if such request is pending.
1462
+ * It should be called whenever meeting state changes to JOINED
1463
+ *
1464
+ * @returns {void}
1372
1465
  */
1373
- stopShare(options?: {}): any;
1466
+ private requestScreenShareFloorIfPending;
1374
1467
  /**
1375
1468
  * Sends a request to Locus to release the screen share floor.
1376
1469
  * @returns {Promise} see #meetingRequest.changeMeetingFloor
@@ -1401,6 +1494,16 @@ export default class Meeting extends StatelessWebexPlugin {
1401
1494
  * @memberof Meeting
1402
1495
  */
1403
1496
  setDisallowUnmute(enabled: boolean): Promise<any>;
1497
+ /**
1498
+ * set the mute all flag for participants if you're the host
1499
+ * @returns {Promise}
1500
+ * @param {boolean} mutedEnabled
1501
+ * @param {boolean} disallowUnmuteEnabled
1502
+ * @param {boolean} muteOnEntryEnabled
1503
+ * @public
1504
+ * @memberof Meeting
1505
+ */
1506
+ setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean): Promise<any>;
1404
1507
  /**
1405
1508
  * End the recording of this meeting
1406
1509
  * @returns {Promise}
@@ -1451,7 +1554,7 @@ export default class Meeting extends StatelessWebexPlugin {
1451
1554
  * @public
1452
1555
  * @memberof Meeting
1453
1556
  */
1454
- sendDTMF(tones: string): any;
1557
+ sendDTMF(tones: string): Promise<any>;
1455
1558
  /**
1456
1559
  * Sends request to change layout type for the current meeting for the specific participant/device only
1457
1560
  * @param {String} [layoutType] a layout type that should be available in meeting constants {@link #layout_types}
@@ -1476,53 +1579,41 @@ export default class Meeting extends StatelessWebexPlugin {
1476
1579
  height: number;
1477
1580
  };
1478
1581
  }): any;
1479
- /**
1480
- * Sets the quality of the local video stream
1481
- * @param {String} level {LOW|MEDIUM|HIGH}
1482
- * @returns {Promise<MediaStream>} localStream
1483
- */
1484
- setLocalVideoQuality(level: string): any;
1485
1582
  /**
1486
1583
  * Sets the quality level of the remote incoming media
1487
1584
  * @param {String} level {LOW|MEDIUM|HIGH}
1488
1585
  * @returns {Promise}
1489
1586
  */
1490
- setRemoteQualityLevel(level: string): any;
1587
+ setRemoteQualityLevel(level: string): Promise<void>;
1491
1588
  /**
1492
- * This is deprecated, please use setLocalVideoQuality for setting local and setRemoteQualityLevel for remote
1493
- * @param {String} level {LOW|MEDIUM|HIGH}
1494
- * @returns {Promise}
1495
- * @deprecated After FHD support
1589
+ * Functionality for when a share audio is ended.
1590
+ * @private
1591
+ * @memberof Meeting
1592
+ * @returns {undefined}
1496
1593
  */
1497
- setMeetingQuality(level: string): any;
1594
+ private handleShareAudioStreamEnded;
1498
1595
  /**
1499
- *
1500
- * NOTE: this method can only be used with transcoded meetings, for multistream use publishTrack()
1501
- *
1502
- * @param {Object} options parameter
1503
- * @param {Boolean} options.sendAudio send audio from the display share
1504
- * @param {Boolean} options.sendShare send video from the display share
1505
- * @param {Object} options.sharePreferences
1506
- * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video
1507
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}
1508
- * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean
1509
- * @returns {Promise}
1596
+ * Functionality for when a share video is muted or unmuted.
1597
+ * @private
1598
+ * @memberof Meeting
1599
+ * @param {boolean} muted
1600
+ * @returns {undefined}
1510
1601
  */
1511
- shareScreen(options?: {
1512
- sendAudio: boolean;
1513
- sendShare: boolean;
1514
- sharePreferences: {
1515
- shareConstraints: MediaTrackConstraints;
1516
- };
1517
- }): any;
1602
+ private handleShareVideoStreamMuteStateChange;
1518
1603
  /**
1519
- * Functionality for when a share is ended.
1604
+ * Functionality for when a share video is ended.
1520
1605
  * @private
1521
1606
  * @memberof Meeting
1522
- * @param {MediaStream} localShare
1523
1607
  * @returns {undefined}
1524
1608
  */
1525
- private handleShareTrackEnded;
1609
+ private handleShareVideoStreamEnded;
1610
+ /**
1611
+ * Emits meeting:stoppedSharingLocal
1612
+ * @private
1613
+ * @returns {undefined}
1614
+ * @memberof Meeting
1615
+ */
1616
+ private triggerStoppedSharing;
1526
1617
  /**
1527
1618
  * Emits the 'network:quality' event
1528
1619
  * 1 indicates an acceptable uplink network.
@@ -1542,86 +1633,11 @@ export default class Meeting extends StatelessWebexPlugin {
1542
1633
  * @returns {undefined}
1543
1634
  */
1544
1635
  private handleMediaLogging;
1545
- /**
1546
- * @param {string} typeMedia 'audio' or 'video'
1547
- * @returns {undefined}
1548
- */
1549
- setStartSetupDelay(typeMedia: string): void;
1550
- /**
1551
- * @param {string} typeMedia 'audio' or 'video'
1552
- * @returns {undefined}
1553
- */
1554
- setEndSetupDelay(typeMedia: string): void;
1555
- /**
1556
- * @param {string} typeMedia 'audio' or 'video'
1557
- * @returns {string} duration between start and end of setup
1558
- */
1559
- getSetupDelayDuration(typeMedia: string): number;
1560
- /**
1561
- * @param {string} typeMedia 'audio' or 'video'
1562
- * @returns {undefined}
1563
- */
1564
- setStartSendingMediaDelay(typeMedia: string): void;
1565
- /**
1566
- * @param {string} typeMedia 'audio' or 'video'
1567
- * @returns {undefined}
1568
- */
1569
- setEndSendingMediaDelay(typeMedia: string): void;
1570
- /**
1571
- * @param {string} typeMedia 'audio' or 'video'
1572
- * @returns {string} duration between join response and first media tx
1573
- */
1574
- getSendingMediaDelayDuration(typeMedia: string): number;
1575
- /**
1576
- *
1577
- * @returns {undefined}
1578
- */
1579
- setStartLocalSDPGenRemoteSDPRecvDelay(): void;
1580
- /**
1581
- *
1582
- * @returns {undefined}
1583
- */
1584
- setEndLocalSDPGenRemoteSDPRecvDelay(): void;
1585
- /**
1586
- *
1587
- * @returns {string} duration between local SDP generation and remote SDP reception
1588
- */
1589
- getLocalSDPGenRemoteSDPRecvDelay(): number;
1590
- /**
1591
- *
1592
- * @returns {undefined}
1593
- */
1594
- setStartCallInitiateJoinReq(): void;
1595
- /**
1596
- *
1597
- * @returns {undefined}
1598
- */
1599
- setEndCallInitiateJoinReq(): void;
1600
- /**
1601
- *
1602
- * @returns {string} duration between call initiate and sending join request to locus
1603
- */
1604
- getCallInitiateJoinReq(): number;
1605
- /**
1606
- *
1607
- * @returns {undefined}
1608
- */
1609
- setStartJoinReqResp(): void;
1610
- /**
1611
- *
1612
- * @returns {undefined}
1613
- */
1614
- setEndJoinReqResp(): void;
1615
- /**
1616
- *
1617
- * @returns {string} duration between sending locus join request and receiving join response
1618
- */
1619
- getJoinReqResp(): number;
1620
1636
  /**
1621
1637
  *
1622
- * @returns {string} duration between call initiate and successful locus join (even if it is in lobby)
1638
+ * @returns {string} one of 'attendee','host','cohost', returns the user type of the current user
1623
1639
  */
1624
- getTotalJmt(): number;
1640
+ getCurUserType(): "host" | "cohost" | "attendee";
1625
1641
  /**
1626
1642
  * End the current meeting for all
1627
1643
  * @returns {Promise}
@@ -1668,7 +1684,7 @@ export default class Meeting extends StatelessWebexPlugin {
1668
1684
  * @public
1669
1685
  * @memberof Meeting
1670
1686
  */
1671
- toggleReactions(enable: boolean): any;
1687
+ toggleReactions(enable: boolean): Promise<any>;
1672
1688
  /**
1673
1689
  * Throws if we don't have a media connection created
1674
1690
  *
@@ -1676,24 +1692,69 @@ export default class Meeting extends StatelessWebexPlugin {
1676
1692
  */
1677
1693
  private checkMediaConnection;
1678
1694
  /**
1679
- * Publishes specified local tracks in the meeting
1695
+ * Method to enable or disable the 'Music mode' effect on audio stream
1680
1696
  *
1681
- * @param {Object} tracks
1697
+ * @param {boolean} shouldEnableMusicMode
1682
1698
  * @returns {Promise}
1683
1699
  */
1684
- publishTracks(tracks: {
1685
- microphone?: MediaStreamTrack;
1686
- camera?: MediaStreamTrack;
1687
- screenShare: {
1688
- audio?: MediaStreamTrack;
1689
- video?: MediaStreamTrack;
1690
- };
1691
- }): Promise<void>;
1700
+ enableMusicMode(shouldEnableMusicMode: boolean): Promise<void>;
1701
+ /** Updates the tracks being sent on the transcoded media connection
1702
+ *
1703
+ * @returns {Promise<void>}
1704
+ */
1705
+ private updateTranscodedMediaConnection;
1706
+ /**
1707
+ * Publishes a stream.
1708
+ *
1709
+ * @param {MediaType} mediaType of the stream
1710
+ * @param {LocalStream} stream to publish
1711
+ * @returns {Promise}
1712
+ */
1713
+ private publishStream;
1714
+ /**
1715
+ * Un-publishes a stream.
1716
+ *
1717
+ * @param {MediaType} mediaType of the stream
1718
+ * @param {LocalStream} stream to unpublish
1719
+ * @returns {Promise}
1720
+ */
1721
+ private unpublishStream;
1722
+ /**
1723
+ * Publishes specified local streams in the meeting
1724
+ *
1725
+ * @param {Object} streams
1726
+ * @returns {Promise}
1727
+ */
1728
+ publishStreams(streams: LocalStreams): Promise<void>;
1692
1729
  /**
1693
- * Un-publishes specified local tracks in the meeting
1730
+ * Un-publishes specified local streams in the meeting
1694
1731
  *
1695
- * @param {Array<MediaStreamTrack>} tracks
1732
+ * @param {Array<LocalStream>} streams
1696
1733
  * @returns {Promise}
1697
1734
  */
1698
- unpublishTracks(tracks: MediaStreamTrack[]): Promise<void>;
1735
+ unpublishStreams(streams: LocalStream[]): Promise<void>;
1736
+ /**
1737
+ * Gets permission token expiry information including timeLeft, expiryTime, currentTime
1738
+ * (from the time the function has been fired)
1739
+ *
1740
+ * @returns {object} permissionTokenExpiryInfo
1741
+ * @returns {number} permissionTokenExpiryInfo.timeLeft The time left for token to expire
1742
+ * @returns {number} permissionTokenExpiryInfo.expiryTime The expiry time of permission token from the server
1743
+ * @returns {number} permissionTokenExpiryInfo.currentTime The current time of the local machine
1744
+ */
1745
+ getPermissionTokenExpiryInfo(): {
1746
+ timeLeft: number;
1747
+ expiryTime: number;
1748
+ currentTime: number;
1749
+ };
1750
+ /**
1751
+ * Check if there is enough time left till the permission token expires
1752
+ * If not - refresh the permission token
1753
+ *
1754
+ * @param {number} threshold - time in seconds
1755
+ * @param {string} reason - reason for refreshing the permission token
1756
+ * @returns {Promise<void>}
1757
+ */
1758
+ checkAndRefreshPermissionToken(threshold: number, reason: string): Promise<void>;
1699
1759
  }
1760
+ export {};