@webex/plugin-meetings 3.0.0-beta.32 → 3.0.0-beta.321

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 (378) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +709 -35
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/utils.js +45 -1
  17. package/dist/breakouts/utils.js.map +1 -1
  18. package/dist/common/errors/no-meeting-info.js +51 -0
  19. package/dist/common/errors/no-meeting-info.js.map +1 -0
  20. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  21. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +48 -7
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/common/logs/request.js +5 -1
  27. package/dist/common/logs/request.js.map +1 -1
  28. package/dist/common/queue.js +24 -9
  29. package/dist/common/queue.js.map +1 -1
  30. package/dist/config.js +5 -11
  31. package/dist/config.js.map +1 -1
  32. package/dist/constants.js +233 -29
  33. package/dist/constants.js.map +1 -1
  34. package/dist/controls-options-manager/enums.js +14 -2
  35. package/dist/controls-options-manager/enums.js.map +1 -1
  36. package/dist/controls-options-manager/index.js +109 -15
  37. package/dist/controls-options-manager/index.js.map +1 -1
  38. package/dist/controls-options-manager/types.js +7 -0
  39. package/dist/controls-options-manager/types.js.map +1 -0
  40. package/dist/controls-options-manager/util.js +309 -18
  41. package/dist/controls-options-manager/util.js.map +1 -1
  42. package/dist/index.js +112 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/interpretation/collection.js +23 -0
  45. package/dist/interpretation/collection.js.map +1 -0
  46. package/dist/interpretation/index.js +366 -0
  47. package/dist/interpretation/index.js.map +1 -0
  48. package/dist/interpretation/siLanguage.js +25 -0
  49. package/dist/interpretation/siLanguage.js.map +1 -0
  50. package/dist/locus-info/controlsUtils.js +91 -2
  51. package/dist/locus-info/controlsUtils.js.map +1 -1
  52. package/dist/locus-info/index.js +383 -62
  53. package/dist/locus-info/index.js.map +1 -1
  54. package/dist/locus-info/infoUtils.js +7 -1
  55. package/dist/locus-info/infoUtils.js.map +1 -1
  56. package/dist/locus-info/mediaSharesUtils.js +57 -1
  57. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  58. package/dist/locus-info/parser.js +249 -72
  59. package/dist/locus-info/parser.js.map +1 -1
  60. package/dist/locus-info/selfUtils.js +89 -14
  61. package/dist/locus-info/selfUtils.js.map +1 -1
  62. package/dist/media/index.js +61 -116
  63. package/dist/media/index.js.map +1 -1
  64. package/dist/media/properties.js +73 -124
  65. package/dist/media/properties.js.map +1 -1
  66. package/dist/meeting/in-meeting-actions.js +84 -2
  67. package/dist/meeting/in-meeting-actions.js.map +1 -1
  68. package/dist/meeting/index.js +3810 -2939
  69. package/dist/meeting/index.js.map +1 -1
  70. package/dist/meeting/locusMediaRequest.js +292 -0
  71. package/dist/meeting/locusMediaRequest.js.map +1 -0
  72. package/dist/meeting/muteState.js +230 -124
  73. package/dist/meeting/muteState.js.map +1 -1
  74. package/dist/meeting/request.js +260 -196
  75. package/dist/meeting/request.js.map +1 -1
  76. package/dist/meeting/util.js +601 -417
  77. package/dist/meeting/util.js.map +1 -1
  78. package/dist/meeting-info/index.js +73 -7
  79. package/dist/meeting-info/index.js.map +1 -1
  80. package/dist/meeting-info/meeting-info-v2.js +192 -51
  81. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  82. package/dist/meeting-info/util.js +1 -1
  83. package/dist/meeting-info/util.js.map +1 -1
  84. package/dist/meeting-info/utilv2.js +36 -36
  85. package/dist/meeting-info/utilv2.js.map +1 -1
  86. package/dist/meetings/collection.js +39 -0
  87. package/dist/meetings/collection.js.map +1 -1
  88. package/dist/meetings/index.js +415 -115
  89. package/dist/meetings/index.js.map +1 -1
  90. package/dist/meetings/meetings.types.js +7 -0
  91. package/dist/meetings/meetings.types.js.map +1 -0
  92. package/dist/meetings/request.js +2 -0
  93. package/dist/meetings/request.js.map +1 -1
  94. package/dist/meetings/util.js +72 -6
  95. package/dist/meetings/util.js.map +1 -1
  96. package/dist/member/index.js +58 -0
  97. package/dist/member/index.js.map +1 -1
  98. package/dist/member/types.js +25 -0
  99. package/dist/member/types.js.map +1 -0
  100. package/dist/member/util.js +132 -25
  101. package/dist/member/util.js.map +1 -1
  102. package/dist/members/collection.js +10 -0
  103. package/dist/members/collection.js.map +1 -1
  104. package/dist/members/index.js +102 -6
  105. package/dist/members/index.js.map +1 -1
  106. package/dist/members/request.js +106 -38
  107. package/dist/members/request.js.map +1 -1
  108. package/dist/members/types.js +15 -0
  109. package/dist/members/types.js.map +1 -0
  110. package/dist/members/util.js +326 -232
  111. package/dist/members/util.js.map +1 -1
  112. package/dist/metrics/constants.js +13 -5
  113. package/dist/metrics/constants.js.map +1 -1
  114. package/dist/metrics/index.js +1 -468
  115. package/dist/metrics/index.js.map +1 -1
  116. package/dist/multistream/mediaRequestManager.js +228 -58
  117. package/dist/multistream/mediaRequestManager.js.map +1 -1
  118. package/dist/multistream/receiveSlot.js +29 -16
  119. package/dist/multistream/receiveSlot.js.map +1 -1
  120. package/dist/multistream/receiveSlotManager.js +39 -36
  121. package/dist/multistream/receiveSlotManager.js.map +1 -1
  122. package/dist/multistream/remoteMedia.js +44 -18
  123. package/dist/multistream/remoteMedia.js.map +1 -1
  124. package/dist/multistream/remoteMediaGroup.js +60 -3
  125. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  126. package/dist/multistream/remoteMediaManager.js +209 -59
  127. package/dist/multistream/remoteMediaManager.js.map +1 -1
  128. package/dist/multistream/sendSlotManager.js +233 -0
  129. package/dist/multistream/sendSlotManager.js.map +1 -0
  130. package/dist/reachability/index.js +225 -59
  131. package/dist/reachability/index.js.map +1 -1
  132. package/dist/reachability/request.js +17 -8
  133. package/dist/reachability/request.js.map +1 -1
  134. package/dist/reconnection-manager/index.js +201 -156
  135. package/dist/reconnection-manager/index.js.map +1 -1
  136. package/dist/recording-controller/index.js +21 -2
  137. package/dist/recording-controller/index.js.map +1 -1
  138. package/dist/recording-controller/util.js +9 -8
  139. package/dist/recording-controller/util.js.map +1 -1
  140. package/dist/roap/index.js +62 -32
  141. package/dist/roap/index.js.map +1 -1
  142. package/dist/roap/request.js +112 -97
  143. package/dist/roap/request.js.map +1 -1
  144. package/dist/roap/turnDiscovery.js +95 -36
  145. package/dist/roap/turnDiscovery.js.map +1 -1
  146. package/dist/rtcMetrics/constants.js +12 -0
  147. package/dist/rtcMetrics/constants.js.map +1 -0
  148. package/dist/rtcMetrics/index.js +142 -0
  149. package/dist/rtcMetrics/index.js.map +1 -0
  150. package/dist/statsAnalyzer/index.js +107 -79
  151. package/dist/statsAnalyzer/index.js.map +1 -1
  152. package/dist/statsAnalyzer/mqaUtil.js +27 -26
  153. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  154. package/dist/types/annotation/annotation.types.d.ts +42 -0
  155. package/dist/types/annotation/constants.d.ts +31 -0
  156. package/dist/types/annotation/index.d.ts +117 -0
  157. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  158. package/dist/types/breakouts/events.d.ts +8 -0
  159. package/dist/types/breakouts/utils.d.ts +14 -0
  160. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  161. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  162. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  163. package/dist/types/common/logs/request.d.ts +2 -0
  164. package/dist/types/common/queue.d.ts +9 -7
  165. package/dist/types/config.d.ts +1 -7
  166. package/dist/types/constants.d.ts +194 -24
  167. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  168. package/dist/types/controls-options-manager/index.d.ts +17 -1
  169. package/dist/types/controls-options-manager/types.d.ts +43 -0
  170. package/dist/types/controls-options-manager/util.d.ts +1 -7
  171. package/dist/types/index.d.ts +6 -4
  172. package/dist/types/interpretation/collection.d.ts +5 -0
  173. package/dist/types/interpretation/index.d.ts +5 -0
  174. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  175. package/dist/types/locus-info/index.d.ts +57 -4
  176. package/dist/types/locus-info/parser.d.ts +67 -6
  177. package/dist/types/media/index.d.ts +2 -0
  178. package/dist/types/media/properties.d.ts +34 -48
  179. package/dist/types/meeting/in-meeting-actions.d.ts +84 -2
  180. package/dist/types/meeting/index.d.ts +464 -510
  181. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  182. package/dist/types/meeting/muteState.d.ts +99 -23
  183. package/dist/types/meeting/request.d.ts +72 -43
  184. package/dist/types/meeting/util.d.ts +101 -1
  185. package/dist/types/meeting-info/index.d.ts +13 -1
  186. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  187. package/dist/types/meetings/collection.d.ts +17 -0
  188. package/dist/types/meetings/index.d.ts +98 -20
  189. package/dist/types/meetings/meetings.types.d.ts +4 -0
  190. package/dist/types/member/index.d.ts +14 -0
  191. package/dist/types/member/types.d.ts +32 -0
  192. package/dist/types/members/collection.d.ts +5 -0
  193. package/dist/types/members/index.d.ts +35 -2
  194. package/dist/types/members/request.d.ts +73 -9
  195. package/dist/types/members/types.d.ts +25 -0
  196. package/dist/types/members/util.d.ts +214 -1
  197. package/dist/types/metrics/constants.d.ts +12 -4
  198. package/dist/types/metrics/index.d.ts +4 -119
  199. package/dist/types/multistream/mediaRequestManager.d.ts +72 -5
  200. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  201. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  202. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  203. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  204. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  205. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  206. package/dist/types/reachability/index.d.ts +61 -7
  207. package/dist/types/reachability/request.d.ts +7 -3
  208. package/dist/types/reconnection-manager/index.d.ts +9 -0
  209. package/dist/types/recording-controller/index.d.ts +15 -1
  210. package/dist/types/recording-controller/util.d.ts +5 -4
  211. package/dist/types/roap/index.d.ts +2 -1
  212. package/dist/types/roap/request.d.ts +15 -11
  213. package/dist/types/roap/turnDiscovery.d.ts +21 -3
  214. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  215. package/dist/types/rtcMetrics/index.d.ts +54 -0
  216. package/dist/types/statsAnalyzer/index.d.ts +7 -1
  217. package/dist/types/webinar/collection.d.ts +16 -0
  218. package/dist/types/webinar/index.d.ts +5 -0
  219. package/dist/webinar/collection.js +44 -0
  220. package/dist/webinar/collection.js.map +1 -0
  221. package/dist/webinar/index.js +69 -0
  222. package/dist/webinar/index.js.map +1 -0
  223. package/package.json +24 -20
  224. package/src/annotation/annotation.types.ts +50 -0
  225. package/src/annotation/constants.ts +36 -0
  226. package/src/annotation/index.ts +328 -0
  227. package/src/breakouts/README.md +42 -12
  228. package/src/breakouts/breakout.ts +67 -9
  229. package/src/breakouts/edit-lock-error.ts +25 -0
  230. package/src/breakouts/events.ts +56 -0
  231. package/src/breakouts/index.ts +592 -20
  232. package/src/breakouts/utils.ts +42 -0
  233. package/src/common/errors/no-meeting-info.ts +24 -0
  234. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  235. package/src/common/errors/webex-errors.ts +44 -2
  236. package/src/common/logs/logger-proxy.ts +1 -1
  237. package/src/common/logs/request.ts +5 -1
  238. package/src/common/queue.ts +22 -8
  239. package/src/config.ts +4 -10
  240. package/src/constants.ts +221 -19
  241. package/src/controls-options-manager/enums.ts +12 -0
  242. package/src/controls-options-manager/index.ts +116 -21
  243. package/src/controls-options-manager/types.ts +59 -0
  244. package/src/controls-options-manager/util.ts +294 -14
  245. package/src/index.ts +40 -0
  246. package/src/interpretation/README.md +60 -0
  247. package/src/interpretation/collection.ts +19 -0
  248. package/src/interpretation/index.ts +332 -0
  249. package/src/interpretation/siLanguage.ts +18 -0
  250. package/src/locus-info/controlsUtils.ts +108 -0
  251. package/src/locus-info/index.ts +413 -59
  252. package/src/locus-info/infoUtils.ts +10 -2
  253. package/src/locus-info/mediaSharesUtils.ts +64 -0
  254. package/src/locus-info/parser.ts +258 -47
  255. package/src/locus-info/selfUtils.ts +81 -5
  256. package/src/media/index.ts +102 -122
  257. package/src/media/properties.ts +87 -110
  258. package/src/meeting/in-meeting-actions.ts +167 -3
  259. package/src/meeting/index.ts +3162 -2553
  260. package/src/meeting/locusMediaRequest.ts +313 -0
  261. package/src/meeting/muteState.ts +229 -131
  262. package/src/meeting/request.ts +177 -121
  263. package/src/meeting/util.ts +588 -394
  264. package/src/meeting-info/index.ts +81 -8
  265. package/src/meeting-info/meeting-info-v2.ts +170 -14
  266. package/src/meeting-info/util.ts +1 -1
  267. package/src/meeting-info/utilv2.ts +23 -23
  268. package/src/meetings/collection.ts +33 -0
  269. package/src/meetings/index.ts +445 -123
  270. package/src/meetings/meetings.types.ts +12 -0
  271. package/src/meetings/request.ts +2 -0
  272. package/src/meetings/util.ts +80 -11
  273. package/src/member/index.ts +58 -0
  274. package/src/member/types.ts +38 -0
  275. package/src/member/util.ts +141 -25
  276. package/src/members/collection.ts +8 -0
  277. package/src/members/index.ts +134 -8
  278. package/src/members/request.ts +97 -17
  279. package/src/members/types.ts +29 -0
  280. package/src/members/util.ts +333 -240
  281. package/src/metrics/constants.ts +12 -4
  282. package/src/metrics/index.ts +1 -490
  283. package/src/multistream/mediaRequestManager.ts +277 -82
  284. package/src/multistream/receiveSlot.ts +31 -17
  285. package/src/multistream/receiveSlotManager.ts +34 -24
  286. package/src/multistream/remoteMedia.ts +27 -2
  287. package/src/multistream/remoteMediaGroup.ts +59 -0
  288. package/src/multistream/remoteMediaManager.ts +148 -30
  289. package/src/multistream/sendSlotManager.ts +170 -0
  290. package/src/reachability/index.ts +228 -37
  291. package/src/reachability/request.ts +17 -8
  292. package/src/reconnection-manager/index.ts +83 -56
  293. package/src/recording-controller/index.ts +20 -3
  294. package/src/recording-controller/util.ts +26 -9
  295. package/src/roap/index.ts +63 -32
  296. package/src/roap/request.ts +100 -104
  297. package/src/roap/turnDiscovery.ts +48 -26
  298. package/src/rtcMetrics/constants.ts +3 -0
  299. package/src/rtcMetrics/index.ts +124 -0
  300. package/src/statsAnalyzer/index.ts +135 -92
  301. package/src/statsAnalyzer/mqaUtil.ts +30 -28
  302. package/src/webinar/collection.ts +31 -0
  303. package/src/webinar/index.ts +62 -0
  304. package/test/integration/spec/converged-space-meetings.js +60 -3
  305. package/test/integration/spec/journey.js +320 -261
  306. package/test/integration/spec/space-meeting.js +76 -3
  307. package/test/unit/spec/annotation/index.ts +418 -0
  308. package/test/unit/spec/breakouts/breakout.ts +118 -28
  309. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  310. package/test/unit/spec/breakouts/events.ts +89 -0
  311. package/test/unit/spec/breakouts/index.ts +1395 -69
  312. package/test/unit/spec/breakouts/utils.js +52 -1
  313. package/test/unit/spec/common/queue.js +31 -2
  314. package/test/unit/spec/controls-options-manager/index.js +163 -0
  315. package/test/unit/spec/controls-options-manager/util.js +576 -60
  316. package/test/unit/spec/fixture/locus.js +1 -0
  317. package/test/unit/spec/interpretation/collection.ts +15 -0
  318. package/test/unit/spec/interpretation/index.ts +589 -0
  319. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  320. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  321. package/test/unit/spec/locus-info/index.js +1304 -33
  322. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  323. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  324. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  325. package/test/unit/spec/locus-info/parser.js +116 -35
  326. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  327. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  328. package/test/unit/spec/media/index.ts +104 -37
  329. package/test/unit/spec/media/properties.ts +2 -2
  330. package/test/unit/spec/meeting/in-meeting-actions.ts +83 -3
  331. package/test/unit/spec/meeting/index.js +5428 -1930
  332. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  333. package/test/unit/spec/meeting/muteState.js +408 -208
  334. package/test/unit/spec/meeting/request.js +483 -49
  335. package/test/unit/spec/meeting/utils.js +679 -64
  336. package/test/unit/spec/meeting-info/index.js +300 -0
  337. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  338. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  339. package/test/unit/spec/meetings/collection.js +26 -0
  340. package/test/unit/spec/meetings/index.js +1148 -205
  341. package/test/unit/spec/meetings/utils.js +202 -2
  342. package/test/unit/spec/member/index.js +61 -6
  343. package/test/unit/spec/member/util.js +510 -34
  344. package/test/unit/spec/members/index.js +432 -1
  345. package/test/unit/spec/members/request.js +206 -27
  346. package/test/unit/spec/members/utils.js +210 -0
  347. package/test/unit/spec/metrics/index.js +1 -50
  348. package/test/unit/spec/multistream/mediaRequestManager.ts +776 -162
  349. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  350. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  351. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  352. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  353. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  354. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  355. package/test/unit/spec/reachability/index.ts +549 -9
  356. package/test/unit/spec/reachability/request.js +68 -0
  357. package/test/unit/spec/reconnection-manager/index.js +85 -9
  358. package/test/unit/spec/recording-controller/index.js +294 -218
  359. package/test/unit/spec/recording-controller/util.js +223 -96
  360. package/test/unit/spec/roap/index.ts +178 -64
  361. package/test/unit/spec/roap/request.ts +203 -85
  362. package/test/unit/spec/roap/turnDiscovery.ts +82 -36
  363. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  364. package/test/unit/spec/stats-analyzer/index.js +147 -3
  365. package/test/unit/spec/webinar/collection.ts +13 -0
  366. package/test/unit/spec/webinar/index.ts +60 -0
  367. package/test/utils/integrationTestUtils.js +46 -0
  368. package/test/utils/testUtils.js +0 -52
  369. package/dist/meeting/effectsState.js +0 -262
  370. package/dist/meeting/effectsState.js.map +0 -1
  371. package/dist/metrics/config.js +0 -299
  372. package/dist/metrics/config.js.map +0 -1
  373. package/dist/types/meeting/effectsState.d.ts +0 -42
  374. package/dist/types/metrics/config.d.ts +0 -178
  375. package/src/index.js +0 -16
  376. package/src/meeting/effectsState.ts +0 -211
  377. package/src/metrics/config.ts +0 -495
  378. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -1,27 +1,53 @@
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
+ };
18
41
  export declare const MEDIA_UPDATE_TYPE: {
19
- ALL: string;
20
- AUDIO: string;
21
- VIDEO: string;
22
- SHARE: string;
23
- LAMBDA: string;
42
+ TRANSCODED_MEDIA_CONNECTION: string;
43
+ SHARE_FLOOR_REQUEST: string;
44
+ UPDATE_MEDIA: string;
24
45
  };
46
+ export declare enum ScreenShareFloorStatus {
47
+ PENDING = "floor_request_pending",
48
+ GRANTED = "floor_request_granted",
49
+ RELEASED = "floor_released"
50
+ }
25
51
  /**
26
52
  * MediaDirection
27
53
  * @typedef {Object} MediaDirection
@@ -33,15 +59,6 @@ export declare const MEDIA_UPDATE_TYPE: {
33
59
  * @property {boolean} receiveShare
34
60
  * @property {boolean} isSharing
35
61
  */
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
62
  /**
46
63
  * SharePreferences
47
64
  * @typedef {Object} SharePreferences
@@ -55,18 +72,10 @@ export declare const MEDIA_UPDATE_TYPE: {
55
72
  * @property {String} [pin]
56
73
  * @property {Boolean} [moderator]
57
74
  * @property {String|Object} [meetingQuality]
58
- * @property {String} [meetingQuality.local]
59
75
  * @property {String} [meetingQuality.remote]
60
76
  * @property {Boolean} [rejoin]
61
77
  * @property {Boolean} [enableMultistream]
62
78
  */
63
- /**
64
- * SendOptions
65
- * @typedef {Object} SendOptions
66
- * @property {Boolean} sendAudio
67
- * @property {Boolean} sendVideo
68
- * @property {Boolean} sendShare
69
- */
70
79
  /**
71
80
  * Recording
72
81
  * @typedef {Object} Recording
@@ -148,7 +157,11 @@ export declare const MEDIA_UPDATE_TYPE: {
148
157
  * @instance
149
158
  * @type {Object}
150
159
  * @property {Boolean} memberId id of the meeting member that started screen share
160
+ * @property {String} url of this content share
161
+ * @property {String} shareInstanceId of this content share
162
+ * @property {Object} annotation Info of this content share
151
163
  * @memberof Meeting
164
+ *
152
165
  */
153
166
  /**
154
167
  * Meeting Stopped Sharing Remote Event
@@ -285,12 +298,14 @@ export default class Meeting extends StatelessWebexPlugin {
285
298
  attrs: any;
286
299
  audio: any;
287
300
  breakouts: any;
301
+ simultaneousInterpretation: any;
302
+ annotation: any;
303
+ webinar: any;
288
304
  conversationUrl: string;
289
305
  correlationId: string;
290
306
  destination: string;
291
307
  destinationType: string;
292
308
  deviceUrl: string;
293
- effects: any;
294
309
  hostId: string;
295
310
  id: string;
296
311
  isMultistream: boolean;
@@ -298,7 +313,7 @@ export default class Meeting extends StatelessWebexPlugin {
298
313
  mediaConnections: any[];
299
314
  mediaId?: string;
300
315
  meetingFiniteStateMachine: any;
301
- meetingInfo: object;
316
+ meetingInfo: any;
302
317
  meetingRequest: MeetingRequest;
303
318
  members: Members;
304
319
  options: object;
@@ -310,11 +325,13 @@ export default class Meeting extends StatelessWebexPlugin {
310
325
  resource: string;
311
326
  roap: Roap;
312
327
  roapSeq: number;
328
+ selfUrl?: string;
313
329
  sipUri: string;
314
330
  type: string;
315
331
  userId: string;
316
332
  video: any;
317
333
  callEvents: any[];
334
+ datachannelUrl: string;
318
335
  deferJoin: Promise<any>;
319
336
  dialInDeviceStatus: string;
320
337
  dialInUrl: string;
@@ -327,10 +344,10 @@ export default class Meeting extends StatelessWebexPlugin {
327
344
  inMeetingActions: InMeetingActions;
328
345
  isLocalShareLive: boolean;
329
346
  isRoapInProgress: boolean;
330
- isSharing: boolean;
331
347
  keepAliveTimerId: NodeJS.Timeout;
332
348
  lastVideoLayoutInfo: any;
333
349
  locusInfo: any;
350
+ locusMediaRequest?: LocusMediaRequest;
334
351
  mediaProperties: MediaProperties;
335
352
  mediaRequestManagers: {
336
353
  audio: MediaRequestManager;
@@ -339,8 +356,10 @@ export default class Meeting extends StatelessWebexPlugin {
339
356
  screenShareVideo: MediaRequestManager;
340
357
  };
341
358
  meetingInfoFailureReason: string;
359
+ meetingInfoFailureCode?: number;
360
+ meetingInfoExtraParams?: Record<string, any>;
342
361
  networkQualityMonitor: NetworkQualityMonitor;
343
- networkStatus: string;
362
+ networkStatus?: NETWORK_STATUS;
344
363
  passwordStatus: string;
345
364
  queuedMediaUpdates: any[];
346
365
  recording: any;
@@ -349,16 +368,19 @@ export default class Meeting extends StatelessWebexPlugin {
349
368
  controlsOptionsManager: ControlsOptionsManager;
350
369
  requiredCaptcha: any;
351
370
  receiveSlotManager: ReceiveSlotManager;
371
+ selfUserPolicies: any;
352
372
  shareStatus: string;
373
+ screenShareFloorState: ScreenShareFloorStatus;
353
374
  statsAnalyzer: StatsAnalyzer;
354
375
  transcription: Transcription;
355
376
  updateMediaConnections: (mediaConnections: any[]) => void;
356
- endCallInitiateJoinReq: any;
377
+ userDisplayHints: any;
378
+ endCallInitJoinReq: any;
357
379
  endJoinReqResp: any;
358
380
  endLocalSDPGenRemoteSDPRecvDelay: any;
359
381
  joinedWith: any;
360
382
  locusId: any;
361
- startCallInitiateJoinReq: any;
383
+ startCallInitJoinReq: any;
362
384
  startJoinReqResp: any;
363
385
  startLocalSDPGenRemoteSDPRecvDelay: any;
364
386
  wirelessShare: any;
@@ -366,12 +388,26 @@ export default class Meeting extends StatelessWebexPlugin {
366
388
  meetingJoinUrl: any;
367
389
  meetingNumber: any;
368
390
  meetingState: any;
369
- permissionToken: any;
391
+ permissionToken: string;
392
+ permissionTokenPayload: any;
370
393
  resourceId: any;
371
394
  resourceUrl: string;
372
395
  selfId: string;
373
396
  state: any;
397
+ localAudioStreamMuteStateHandler: (muted: boolean) => void;
398
+ localVideoStreamMuteStateHandler: (muted: boolean) => void;
399
+ localOutputTrackChangeHandler: () => void;
400
+ roles: any[];
401
+ environment: string;
374
402
  namespace: string;
403
+ allowMediaInLobby: boolean;
404
+ turnDiscoverySkippedReason: string;
405
+ turnServerUsed: boolean;
406
+ private retriedWithTurnServer;
407
+ private sendSlotManager;
408
+ private deferSDPAnswer?;
409
+ private sdpResponseTimer?;
410
+ private hasMediaConnectionConnectedAtLeastOnce;
375
411
  /**
376
412
  * @param {Object} attrs
377
413
  * @param {Object} options
@@ -379,29 +415,58 @@ export default class Meeting extends StatelessWebexPlugin {
379
415
  * @memberof Meeting
380
416
  */
381
417
  constructor(attrs: any, options: object);
418
+ /**
419
+ * returns meeting is joined
420
+ * @private
421
+ * @memberof Meeting
422
+ * @returns {Boolean}
423
+ */
424
+ private isJoined;
425
+ /**
426
+ * Returns whether this meeting is a Locus CALL
427
+ * @returns {Boolean}
428
+ */
429
+ isLocusCall(): boolean;
430
+ /**
431
+ * Internal method for fetching meeting info
432
+ *
433
+ * @returns {Promise}
434
+ */
435
+ private fetchMeetingInfoInternal;
436
+ /**
437
+ * Refreshes the meeting info permission token (it's required for joining meetings)
438
+ *
439
+ * @param {string} [reason] used for metrics and logging purposes (optional)
440
+ * @returns {Promise}
441
+ */
442
+ refreshPermissionToken(reason?: string): Promise<void>;
382
443
  /**
383
444
  * Fetches meeting information.
384
445
  * @param {Object} options
385
446
  * @param {String} [options.password] optional
386
447
  * @param {String} [options.captchaCode] optional
448
+ * @param {Boolean} [options.sendCAevents] optional - Whether to submit Call Analyzer events or not. Default: false.
387
449
  * @public
388
450
  * @memberof Meeting
389
451
  * @returns {Promise}
390
452
  */
391
- fetchMeetingInfo({ password, captchaCode, }: {
453
+ fetchMeetingInfo({ password, captchaCode, extraParams, sendCAevents, }: {
392
454
  password?: string;
393
455
  captchaCode?: string;
456
+ extraParams?: Record<string, any>;
457
+ sendCAevents?: boolean;
394
458
  }): Promise<void>;
395
459
  /**
396
460
  * Checks if the supplied password/host key is correct. It returns a promise with information whether the
397
461
  * password and captcha code were correct or not.
398
462
  * @param {String} password - this can be either a password or a host key, can be undefined if only captcha was required
399
463
  * @param {String} captchaCode - can be undefined if captcha was not required by the server
464
+ * @param {Boolean} sendCAevents - whether Call Analyzer events should be sent when fetching meeting information
400
465
  * @public
401
466
  * @memberof Meeting
402
467
  * @returns {Promise<{isPasswordValid: boolean, requiredCaptcha: boolean, failureReason: MEETING_INFO_FAILURE_REASON}>}
403
468
  */
404
- verifyPassword(password: string, captchaCode: string): Promise<{
469
+ verifyPassword(password: string, captchaCode: string, sendCAevents?: boolean): Promise<{
405
470
  isPasswordValid: boolean;
406
471
  requiredCaptcha: any;
407
472
  failureReason: string;
@@ -418,6 +483,14 @@ export default class Meeting extends StatelessWebexPlugin {
418
483
  * @returns {Promise}
419
484
  */
420
485
  refreshCaptcha(): any;
486
+ /**
487
+ * Posts metrics event for this meeting. Allows the app to send Call Analyzer events.
488
+ * @param {String} eventName - Call Analyzer event
489
+ * @public
490
+ * @memberof Meeting
491
+ * @returns {Promise}
492
+ */
493
+ postMetrics(eventName: ClientEvent['name']): void;
421
494
  /**
422
495
  * Proxy function for all the listener set ups
423
496
  * @returns {undefined}
@@ -432,6 +505,13 @@ export default class Meeting extends StatelessWebexPlugin {
432
505
  * @memberof Meeting
433
506
  */
434
507
  setUpBreakoutsListener(): void;
508
+ /**
509
+ * Set up the listeners for interpretation
510
+ * @returns {undefined}
511
+ * @private
512
+ * @memberof Meeting
513
+ */
514
+ private setUpInterpretationListener;
435
515
  /**
436
516
  * Set up the locus info listener for meetings disconnected due to inactivity
437
517
  * @returns {undefined}
@@ -453,50 +533,9 @@ export default class Meeting extends StatelessWebexPlugin {
453
533
  * @memberof Meeting
454
534
  */
455
535
  private setUpLocusFullStateListener;
456
- /**
457
- * get the metrics payload pre
458
- * @param {Object} options
459
- * @param {String} options.event
460
- * @param {String} options.trackingId
461
- * @param {Object} options.locus
462
- * @param {Array} options.mediaConnections
463
- * @param {Object} options.errors
464
- * @returns {Object}
465
- * @memberof Meeting
466
- */
467
- getAnalyzerMetricsPrePayload(options: {
468
- event: string;
469
- trackingId: string;
470
- locus: object;
471
- mediaConnections: Array<any>;
472
- errors: object;
473
- } | any): {};
474
- /**
475
- * Send the metrics to call-analyzer dashboard
476
- * @param {Object} options
477
- * @param {String} options.event
478
- * @param {String} options.trackingId
479
- * @param {Object} options.locus
480
- * @param {Object} options.errors
481
- * @returns {Promise}
482
- * @private
483
- * @memberof Meeting
484
- */
485
- private sendCallAnalyzerMetrics;
486
- /**
487
- * Send the metrics to Media Quality Analyzer dashboard
488
- * @param {Object} options
489
- * @param {String} options.event
490
- * @param {String} options.trackingId
491
- * @param {Object} options.locus
492
- * @returns {Promise}
493
- * @private
494
- * @memberof Meeting
495
- */
496
- private sendMediaQualityAnalyzerMetrics;
497
536
  /**
498
537
  * sets the network status on meeting object
499
- * @param {String} networkStatus
538
+ * @param {NETWORK_STATUS} networkStatus
500
539
  * @private
501
540
  * @returns {undefined}
502
541
  * @memberof Meeting
@@ -556,6 +595,13 @@ export default class Meeting extends StatelessWebexPlugin {
556
595
  * @memberof Meeting
557
596
  */
558
597
  private setupLocusControlsListener;
598
+ /**
599
+ * Trigger annotation info update event
600
+ @returns {undefined}
601
+ @param {object} contentShare
602
+ @param {object} previousContentShare
603
+ */
604
+ private triggerAnnotationInfoEvent;
559
605
  /**
560
606
  * Set up the locus info media shares listener
561
607
  * update content and whiteboard sharing id value for members, and updates the member
@@ -654,13 +700,23 @@ export default class Meeting extends StatelessWebexPlugin {
654
700
  phoneNumber: string;
655
701
  }): any;
656
702
  /**
657
- * Admit the guest(s) to the call once they are waiting
703
+ * Admit the guest(s) to the call once they are waiting.
704
+ * If the host/cohost is in a breakout session, the locus url
705
+ * of the session must be provided as the authorizingLocusUrl.
706
+ * Regardless of host/cohost location, the locus Id (lid) in
707
+ * the path should be the locus Id of the main, which means the
708
+ * locus url of the api call must be from the main session.
709
+ * If these loucs urls are not provided, the function will do the check.
658
710
  * @param {Array} memberIds
711
+ * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}
659
712
  * @returns {Promise} see #members.admitMembers
660
713
  * @public
661
714
  * @memberof Meeting
662
715
  */
663
- admit(memberIds: Array<any>): any;
716
+ admit(memberIds: Array<any>, sessionLocusUrls?: {
717
+ authorizingLocusUrl: string;
718
+ mainLocusUrl: string;
719
+ }): any;
664
720
  /**
665
721
  * Remove the member from the meeting, boot them
666
722
  * @param {String} memberId
@@ -694,48 +750,6 @@ export default class Meeting extends StatelessWebexPlugin {
694
750
  * @memberof Meeting
695
751
  */
696
752
  getMembers(): Members;
697
- /**
698
- * Truthy when a meeting has an audio connection established
699
- * @returns {Boolean} true if meeting audio is connected otherwise false
700
- * @public
701
- * @memberof Meeting
702
- */
703
- isAudioConnected(): boolean;
704
- /**
705
- * Convenience function to tell whether a meeting is muted
706
- * @returns {Boolean} if meeting audio muted or not
707
- * @public
708
- * @memberof Meeting
709
- */
710
- isAudioMuted(): any;
711
- /**
712
- * Convenience function to tell if the end user last changed the audio state
713
- * @returns {Boolean} if audio was manipulated by the end user
714
- * @public
715
- * @memberof Meeting
716
- */
717
- isAudioSelf(): any;
718
- /**
719
- * Truthy when a meeting has a video connection established
720
- * @returns {Boolean} true if meeting video connected otherwise false
721
- * @public
722
- * @memberof Meeting
723
- */
724
- isVideoConnected(): boolean;
725
- /**
726
- * Convenience function to tell whether video is muted
727
- * @returns {Boolean} if meeting video is muted or not
728
- * @public
729
- * @memberof Meeting
730
- */
731
- isVideoMuted(): any;
732
- /**
733
- * Convenience function to tell whether the end user changed the video state
734
- * @returns {Boolean} if meeting video is muted or not
735
- * @public
736
- * @memberof Meeting
737
- */
738
- isVideoSelf(): any;
739
753
  /**
740
754
  * Sets the meeting info on the class instance
741
755
  * @param {Object} meetingInfo
@@ -758,16 +772,29 @@ export default class Meeting extends StatelessWebexPlugin {
758
772
  };
759
773
  } | any, destination?: object | string | null): void;
760
774
  /**
761
- * Sets the first locus info on the class instance
762
- * @param {Object} locus
763
- * @param {String} locus.url
764
- * @param {Array} locus.participants
765
- * @param {Object} locus.self
775
+ * Indicates whether policy can be applied
776
+ * @returns {boolean}
777
+ */
778
+ private arePolicyRestrictionsSupported;
779
+ /**
780
+ * Updates the meeting actions (display hints), depends on locus display hints, user policy and app api info
766
781
  * @returns {undefined}
767
782
  * @private
768
783
  * @memberof Meeting
769
784
  */
770
- private parseLocus;
785
+ private updateMeetingActions;
786
+ /**
787
+ * Sets the self user policies based on the contents of the permission token
788
+ * @returns {void}
789
+ */
790
+ setSelfUserPolicies(): void;
791
+ /**
792
+ * Sets the permission token payload on the class instance
793
+ *
794
+ * @param {String} permissionToken
795
+ * @returns {void}
796
+ */
797
+ setPermissionTokenPayload(permissionToken: string): void;
771
798
  /**
772
799
  * Sets the sip uri on the class instance
773
800
  * uses meeting info as precedence
@@ -790,7 +817,13 @@ export default class Meeting extends StatelessWebexPlugin {
790
817
  * @private
791
818
  * @memberof Meeting
792
819
  */
793
- private setLocus;
820
+ setLocus(locus: {
821
+ mediaConnections: Array<any>;
822
+ locusUrl: string;
823
+ locusId: string;
824
+ mediaId: string;
825
+ host: object;
826
+ } | any): void;
794
827
  /**
795
828
  * Upload logs for the current meeting
796
829
  * @param {object} options file name and function name
@@ -800,19 +833,10 @@ export default class Meeting extends StatelessWebexPlugin {
800
833
  */
801
834
  uploadLogs(options?: object): void;
802
835
  /**
803
- * Removes remote audio and video stream on the class instance and triggers an event
804
- * to developers
805
- * @returns {undefined}
806
- * @public
807
- * @memberof Meeting
808
- * @deprecated after v1.89.3
809
- */
810
- unsetRemoteStream(): void;
811
- /**
812
- * Removes remote audio, video and share tracks from class instance's mediaProperties
836
+ * Removes remote audio, video and share streams from class instance's mediaProperties
813
837
  * @returns {undefined}
814
838
  */
815
- unsetRemoteTracks(): void;
839
+ unsetRemoteStreams(): void;
816
840
  /**
817
841
  * Removes the remote stream on the class instance and triggers an event
818
842
  * to developers
@@ -823,83 +847,45 @@ export default class Meeting extends StatelessWebexPlugin {
823
847
  */
824
848
  closeRemoteStream(): void;
825
849
  /**
826
- * Removes the remote tracks on the class instance and triggers an event
850
+ * Removes the remote streams on the class instance and triggers an event
827
851
  * to developers
828
852
  * @returns {undefined}
829
853
  * @memberof Meeting
830
854
  */
831
- closeRemoteTracks(): Promise<[any, any, any]>;
855
+ closeRemoteStreams(): Promise<[any, any, any, any]>;
832
856
  /**
833
- * Emits the 'media:ready' event with a local stream that consists of 1 local audio and 1 local video track
834
- * @returns {undefined}
835
- * @private
836
- * @memberof Meeting
837
- */
838
- private sendLocalMediaReadyEvent;
839
- /**
840
- * Sets the local audio track on the class and emits an event to the developer
841
- * @param {MediaStreamTrack} audioTrack
842
- * @param {Boolean} emitEvent if true, a media ready event is emitted to the developer
843
- * @returns {undefined}
844
- * @private
845
- * @memberof Meeting
846
- */
847
- private setLocalAudioTrack;
848
- /**
849
- * Sets the local video track on the class and emits an event to the developer
850
- * @param {MediaStreamTrack} videoTrack
851
- * @param {Boolean} emitEvent if true, a media ready event is emitted to the developer
852
- * @returns {undefined}
853
- * @private
854
- * @memberof Meeting
855
- */
856
- private setLocalVideoTrack;
857
- /**
858
- * Sets the local media stream on the class and emits an event to the developer
859
- * @param {Stream} localStream the local media stream
860
- * @returns {undefined}
861
- * @public
862
- * @memberof Meeting
863
- */
864
- setLocalTracks(localStream: any): void;
865
- /**
866
- * Sets the local media stream on the class and emits an event to the developer
867
- * @param {MediaStreamTrack} localShareTrack the local media stream
868
- * @returns {undefined}
869
- * @public
870
- * @memberof Meeting
871
- */
872
- setLocalShareTrack(localShareTrack: MediaStreamTrack): void;
873
- /**
874
- * Closes the local stream from the class and emits an event to the developer
875
- * @returns {undefined}
876
- * @event media:stopped
877
- * @public
878
- * @memberof Meeting
857
+ * Stores the reference to a new microphone stream, sets up the required event listeners
858
+ * on it, cleans up previous stream, etc.
859
+ *
860
+ * @param {LocalMicrophoneStream | null} localStream local microphone stream
861
+ * @returns {Promise<void>}
879
862
  */
880
- closeLocalStream(): any;
863
+ private setLocalAudioStream;
881
864
  /**
882
- * Closes the local stream from the class and emits an event to the developer
883
- * @returns {undefined}
884
- * @event media:stopped
885
- * @public
886
- * @memberof Meeting
865
+ * Stores the reference to a new camera stream, sets up the required event listeners
866
+ * on it, cleans up previous stream, etc.
867
+ *
868
+ * @param {LocalCameraStream | null} localStream local camera stream
869
+ * @returns {Promise<void>}
887
870
  */
888
- closeLocalShare(): any;
871
+ private setLocalVideoStream;
889
872
  /**
890
- * Removes the local stream from the class and emits an event to the developer
891
- * @returns {undefined}
892
- * @public
893
- * @memberof Meeting
873
+ * Stores the reference to a new screen share stream, sets up the required event listeners
874
+ * on it, cleans up previous stream, etc.
875
+ * It also sends the floor grant/release request.
876
+ *
877
+ * @param {LocalDisplayStream | undefined} localDisplayStream local display stream
878
+ * @returns {Promise<void>}
894
879
  */
895
- unsetLocalVideoTrack(): void;
880
+ private setLocalShareVideoStream;
896
881
  /**
897
- * Removes the local share from the class and emits an event to the developer
898
- * @returns {undefined}
899
- * @public
900
- * @memberof Meeting
882
+ * Stores the reference to a new screen share audio stream, sets up the required event listeners
883
+ * on it, cleans up previous stream, etc.
884
+ *
885
+ * @param {LocalSystemAudioStream | undefined} localSystemAudioStream local system audio stream
886
+ * @returns {Promise<void>}
901
887
  */
902
- unsetLocalShareTrack(): void;
888
+ private setLocalShareAudioStream;
903
889
  /**
904
890
  * sets up listner for mercury event
905
891
  * @returns {undefined}
@@ -928,10 +914,17 @@ export default class Meeting extends StatelessWebexPlugin {
928
914
  * Convenience method to set the correlation id for the Meeting
929
915
  * @param {String} id correlation id to set on the class
930
916
  * @returns {undefined}
917
+ * @public
918
+ * @memberof Meeting
919
+ */
920
+ setCorrelationId(id: string): void;
921
+ /**
922
+ * Enqueue request for screenshare floor and set the status to pending
923
+ * @returns {Promise}
931
924
  * @private
932
925
  * @memberof Meeting
933
926
  */
934
- private setCorrelationId;
927
+ private enqueueScreenShareFloorRequest;
935
928
  /**
936
929
  * Mute the audio for a meeting
937
930
  * @returns {Promise} resolves the data from muting audio {mute, self} or rejects if there is no audio set
@@ -964,32 +957,25 @@ export default class Meeting extends StatelessWebexPlugin {
964
957
  * Shorthand function to join AND set up media
965
958
  * @param {Object} options - options to join with media
966
959
  * @param {JoinOptions} [options.joinOptions] - see #join()
967
- * @param {MediaDirection} options.mediaSettings - see #addMedia()
968
- * @param {AudioVideo} [options.audioVideoOptions] - see #getMediaStreams()
969
- * @returns {Promise} -- {join: see join(), media: see addMedia(), local: see getMediaStreams()}
960
+ * @param {AddMediaOptions} [options.mediaOptions] - see #addMedia()
961
+ * @returns {Promise} -- {join: see join(), media: see addMedia()}
970
962
  * @public
971
963
  * @memberof Meeting
972
964
  * @example
973
965
  * joinWithMedia({
974
966
  * joinOptions: {resourceId: 'resourceId' },
975
- * mediaSettings: {
976
- * sendAudio: true,
977
- * sendVideo: true,
978
- * sendShare: false,
979
- * receiveVideo:true,
980
- * receiveAudio: true,
981
- * receiveShare: true
982
- * }
983
- * audioVideoOptions: {
984
- * audio: 'audioDeviceId',
985
- * video: 'videoDeviceId'
986
- * }})
967
+ * mediaOptions: {
968
+ * localStreams: { microphone: microphoneStream, camera: cameraStream }
969
+ * }
970
+ * })
987
971
  */
988
972
  joinWithMedia(options?: {
989
973
  joinOptions?: any;
990
- mediaSettings: any;
991
- audioVideoOptions?: any;
992
- }): any;
974
+ mediaOptions?: AddMediaOptions;
975
+ }): Promise<{
976
+ join: any;
977
+ media: void;
978
+ }>;
993
979
  /**
994
980
  * Initiates the reconnection of the media in the meeting
995
981
  *
@@ -1054,7 +1040,7 @@ export default class Meeting extends StatelessWebexPlugin {
1054
1040
  * if joining as host on second loop, pass pin and pass moderator if joining as guest on second loop
1055
1041
  * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)
1056
1042
  */
1057
- join(options?: any): any;
1043
+ join(options?: any): Promise<any>;
1058
1044
  /**
1059
1045
  * Connects to low latency mercury and reconnects if the address has changed
1060
1046
  * It will also disconnect if called when the meeting has ended
@@ -1069,7 +1055,7 @@ export default class Meeting extends StatelessWebexPlugin {
1069
1055
  * @public
1070
1056
  * @memberof Meeting
1071
1057
  */
1072
- usePhoneAudio(phoneNumber: string): any;
1058
+ usePhoneAudio(phoneNumber: string): Promise<any>;
1073
1059
  /**
1074
1060
  * Determines if the given pstnStatus is in a state which implies the phone is provisioned
1075
1061
  * @param {String} pstnStatus
@@ -1117,38 +1103,6 @@ export default class Meeting extends StatelessWebexPlugin {
1117
1103
  * @memberof Meeting
1118
1104
  */
1119
1105
  moveFrom(resourceId: string): any;
1120
- /**
1121
- * Get local media streams based on options passed
1122
- *
1123
- * NOTE: this method can only be used with transcoded meetings, not with multistream meetings
1124
- *
1125
- * @param {MediaDirection} mediaDirection A configurable options object for joining a meeting
1126
- * @param {AudioVideo} [audioVideo] audio/video object to set audioinput and videoinput devices, see #Media.getUserMedia
1127
- * @param {SharePreferences} [sharePreferences] audio/video object to set audioinput and videoinput devices, see #Media.getUserMedia
1128
- * @returns {Promise} see #Media.getUserMedia
1129
- * @public
1130
- * @todo should be static, or moved so can be called outside of a meeting
1131
- * @memberof Meeting
1132
- */
1133
- getMediaStreams: (mediaDirection: any, audioVideo?: any, sharePreferences?: any) => any;
1134
- /**
1135
- * Checks if the machine has at least one audio or video device
1136
- * @param {Object} options
1137
- * @param {Boolean} options.sendAudio
1138
- * @param {Boolean} options.sendVideo
1139
- * @returns {Object}
1140
- * @memberof Meetings
1141
- */
1142
- getSupportedDevices: ({ sendAudio, sendVideo, }: {
1143
- sendAudio: boolean;
1144
- sendVideo: boolean;
1145
- }) => any;
1146
- /**
1147
- * Get the devices from the Media module
1148
- * @returns {Promise} resolves to an array of DeviceInfo
1149
- * @memberof Meetings
1150
- */
1151
- getDevices: () => any;
1152
1106
  /**
1153
1107
  * Handles ROAP_FAILURE event from the webrtc media connection
1154
1108
  *
@@ -1156,6 +1110,12 @@ export default class Meeting extends StatelessWebexPlugin {
1156
1110
  * @returns {void}
1157
1111
  */
1158
1112
  handleRoapFailure: (error: any) => void;
1113
+ /**
1114
+ * This function makes sure we send the right metrics when local and remote SDPs are processed/generated
1115
+ *
1116
+ * @returns {undefined}
1117
+ */
1118
+ setupSdpListeners: () => void;
1159
1119
  setupMediaConnectionListeners: () => void;
1160
1120
  /**
1161
1121
  * Registers for all required StatsAnalyzer events
@@ -1165,7 +1125,15 @@ export default class Meeting extends StatelessWebexPlugin {
1165
1125
  */
1166
1126
  setupStatsAnalyzerEventHandlers: () => void;
1167
1127
  getMediaConnectionDebugId(): string;
1168
- createMediaConnection(turnServerInfo: any): any;
1128
+ /**
1129
+ * Creates a webrtc media connection and publishes streams to it
1130
+ *
1131
+ * @param {Object} turnServerInfo TURN server information
1132
+ * @param {BundlePolicy} [bundlePolicy] Bundle policy settings
1133
+ * @param {AddMediaOptions} [options] Options for enabling/disabling audio/video
1134
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
1135
+ */
1136
+ private createMediaConnection;
1169
1137
  /**
1170
1138
  * Listens for an event emitted by eventEmitter and emits it from the meeting object
1171
1139
  *
@@ -1177,23 +1145,121 @@ export default class Meeting extends StatelessWebexPlugin {
1177
1145
  */
1178
1146
  forwardEvent(eventEmitter: any, eventTypeToForward: any, meetingEventType: any): void;
1179
1147
  /**
1180
- * Specify joining via audio (option: pstn), video, screenshare
1181
- * @param {Object} options A configurable options object for joining a meeting
1182
- * @param {Object} options.resourceId pass the deviceId
1183
- * @param {MediaDirection} options.mediaSettings pass media options
1184
- * @param {MediaStream} options.localStream
1185
- * @param {MediaStream} options.localShare
1186
- * @param {RemoteMediaManagerConfig} options.remoteMediaManagerConfig only applies if multistream is enabled
1187
- * @returns {Promise}
1148
+ * Sets up all the references to local streams in this.mediaProperties before creating media connection
1149
+ * and before TURN discovery, so that the correct mute state is sent with TURN discovery roap messages.
1150
+ *
1151
+ * @private
1152
+ * @param {LocalStreams} localStreams
1153
+ * @returns {Promise<void>}
1154
+ */
1155
+ private setUpLocalStreamReferences;
1156
+ /**
1157
+ * Calls mediaProperties.waitForMediaConnectionConnected() and sends CA client.ice.end metric on failure
1158
+ *
1159
+ * @private
1160
+ * @returns {Promise<void>}
1161
+ */
1162
+ private waitForMediaConnectionConnected;
1163
+ /**
1164
+ * Enables statsAnalyser if config allows it
1165
+ *
1166
+ * @private
1167
+ * @returns {void}
1168
+ */
1169
+ private createStatsAnalyzer;
1170
+ /**
1171
+ * Handles device logging
1172
+ *
1173
+ * @private
1174
+ * @static
1175
+ * @returns {Promise<void>}
1176
+ */
1177
+ private static handleDeviceLogging;
1178
+ /**
1179
+ * Returns a promise. This promise is created once the local sdp offer has been successfully created and is resolved
1180
+ * once the remote sdp answer has been received.
1181
+ *
1182
+ * @private
1183
+ * @returns {Promise<void>}
1184
+ */
1185
+ private waitForRemoteSDPAnswer;
1186
+ /**
1187
+ * Calls establishMediaConnection with isForced = true to force turn discovery to happen
1188
+ *
1189
+ * @private
1190
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1191
+ * @param {BundlePolicy} [bundlePolicy]
1192
+ * @returns {Promise<void>}
1193
+ */
1194
+ private retryEstablishMediaConnectionWithForcedTurnDiscovery;
1195
+ /**
1196
+ * Does relevant clean up before retrying to establish media connection
1197
+ * and performs the retry with forced turn discovery
1198
+ *
1199
+ * @private
1200
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1201
+ * @param {BundlePolicy} [bundlePolicy]
1202
+ * @returns {Promise<void>}
1203
+ */
1204
+ private retryWithForcedTurnDiscovery;
1205
+ /**
1206
+ * If waitForMediaConnectionConnected() fails when we haven't done turn discovery then we
1207
+ * attempt to establish a media connection again, but this time using turn discovery. If we
1208
+ * used turn discovery on the first pass we do not attempt connection again.
1209
+ *
1210
+ * @private
1211
+ * @param {Error} error
1212
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1213
+ * @param {BundlePolicy} [bundlePolicy]
1214
+ * @returns {Promise<void>}
1215
+ */
1216
+ private handleWaitForMediaConnectionConnectedError;
1217
+ /**
1218
+ * Does TURN discovery, SDP offer/answer exhange, establishes ICE connection and DTLS handshake.
1219
+ *
1220
+ * @private
1221
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1222
+ * @param {BundlePolicy} [bundlePolicy]
1223
+ * @param {boolean} [isForced] - let isForced be true to do turn discovery regardless of reachability results
1224
+ * @returns {Promise<void>}
1225
+ */
1226
+ private establishMediaConnection;
1227
+ /**
1228
+ * Cleans up stats analyzer, peer connection, and turns off listeners
1229
+ *
1230
+ * @private
1231
+ * @returns {Promise<void>}
1232
+ */
1233
+ private cleanUpOnAddMediaFailure;
1234
+ /**
1235
+ * Sends stats report, closes peer connection and cleans up any media connection
1236
+ * related things before trying to establish media connection again with turn server
1237
+ *
1238
+ * @private
1239
+ * @returns {Promise<void>}
1240
+ */
1241
+ private cleanUpBeforeRetryWithTurnServer;
1242
+ /**
1243
+ * Creates a media connection to the server. Media connection is required for sending or receiving any audio/video.
1244
+ *
1245
+ * @param {AddMediaOptions} options
1246
+ * @returns {Promise<void>}
1188
1247
  * @public
1189
1248
  * @memberof Meeting
1190
1249
  */
1191
- addMedia(options?: any): any;
1250
+ addMedia(options?: AddMediaOptions): Promise<void>;
1192
1251
  /**
1193
1252
  * Informs if the peer connection is in a state that can be updated with updateMedia (audio/video/share)
1194
1253
  * @returns {Boolean}
1195
1254
  */
1196
1255
  canUpdateMedia(): boolean;
1256
+ /**
1257
+ * media failed, so collect a stats report from webrtc using the wcme connection to grab the rtc stats report
1258
+ * send a webrtc telemetry dump to the configured server using the internal media core check metrics configured callback
1259
+ * @param {String} callFrom - the function calling this function, optional.
1260
+ * @returns {Promise<void>}
1261
+ */
1262
+ private forceSendStatsReport;
1197
1263
  /**
1198
1264
  * Enqueues a media update operation.
1199
1265
  * @param {String} mediaUpdateType one of MEDIA_UPDATE_TYPE values
@@ -1219,94 +1285,26 @@ export default class Meeting extends StatelessWebexPlugin {
1219
1285
  */
1220
1286
  processNextQueuedMediaUpdate: () => void;
1221
1287
  /**
1222
- * A confluence of updateAudio, updateVideo, and updateShare
1223
- * this function re-establishes all of the media streams with new options
1224
- * @param {Object} options
1225
- * @param {MediaStream} options.localStream
1226
- * @param {MediaStream} options.localShare
1227
- * @param {MediaDirection} options.mediaSettings
1228
- * @returns {Promise}
1229
- * @public
1230
- * @memberof Meeting
1231
- */
1232
- updateMedia(options?: {
1233
- localStream?: MediaStream;
1234
- localShare?: MediaStream;
1235
- mediaSettings?: any;
1236
- }): any;
1237
- /**
1238
- * Update the main audio track with new parameters
1239
- *
1240
- * NOTE: this method can only be used with transcoded meetings, for multistream meetings use publishTrack()
1241
- *
1242
- * @param {Object} options
1243
- * @param {boolean} options.sendAudio
1244
- * @param {boolean} options.receiveAudio
1245
- * @param {MediaStream} options.stream Stream that contains the audio track to update
1246
- * @returns {Promise}
1247
- * @public
1248
- * @memberof Meeting
1249
- */
1250
- updateAudio(options: {
1251
- sendAudio: boolean;
1252
- receiveAudio: boolean;
1253
- stream: MediaStream;
1254
- }): Promise<any>;
1255
- /**
1256
- * Update the main video track with new parameters
1257
- *
1258
- * NOTE: this method can only be used with transcoded meetings, for multistream meetings use publishTrack()
1288
+ * Updates the media connection - it allows to enable/disable all audio/video/share in the meeting.
1289
+ * This does not affect the published tracks, so for example if a microphone track is published and
1290
+ * updateMedia({audioEnabled: false}) is called, the audio will not be sent or received anymore,
1291
+ * but the track's "published" state is not changed and when updateMedia({audioEnabled: true}) is called,
1292
+ * the sending of the audio from the same track will resume.
1259
1293
  *
1260
1294
  * @param {Object} options
1261
- * @param {boolean} options.sendVideo
1262
- * @param {boolean} options.receiveVideo
1263
- * @param {MediaStream} options.stream Stream that contains the video track to update
1295
+ * @param {boolean} options.audioEnabled [optional] enables/disables receiving and sending of main audio in the meeting
1296
+ * @param {boolean} options.videoEnabled [optional] enables/disables receiving and sending of main video in the meeting
1297
+ * @param {boolean} options.shareEnabled [optional] enables/disables receiving and sending of screen share in the meeting
1264
1298
  * @returns {Promise}
1265
1299
  * @public
1266
1300
  * @memberof Meeting
1267
1301
  */
1268
- updateVideo(options: {
1269
- sendVideo: boolean;
1270
- receiveVideo: boolean;
1271
- stream: MediaStream;
1272
- }): any;
1273
- /**
1274
- * Internal function when stopping a share stream, cleanup
1275
- * @param {boolean} sendShare
1276
- * @param {boolean} previousShareStatus
1277
- * @returns {Promise}
1278
- * @private
1279
- * @memberof Meeting
1280
- */
1281
- private checkForStopShare;
1282
- /**
1283
- * Update the share streams, can be used to start sharing
1284
- *
1285
- * NOTE: this method can only be used with transcoded meetings, for multistream meetings use publishTrack()
1286
- *
1287
- * @param {Object} options
1288
- * @param {boolean} options.sendShare
1289
- * @param {boolean} options.receiveShare
1290
- * @returns {Promise}
1291
- * @public
1292
- * @memberof Meeting
1293
- */
1294
- updateShare(options: {
1295
- sendShare?: boolean;
1296
- receiveShare?: boolean;
1297
- stream?: any;
1298
- skipSignalingCheck?: boolean;
1299
- }): any;
1300
- /**
1301
- * Do all the attach media pre set up before executing the actual attach
1302
- * @param {MediaStream} localStream
1303
- * @param {MediaStream} localShare
1304
- * @param {MediaDirection} mediaSettings
1305
- * @returns {undefined}
1306
- * @private
1307
- * @memberof Meeting
1308
- */
1309
- private preMedia;
1302
+ updateMedia(options: {
1303
+ audioEnabled?: boolean;
1304
+ videoEnabled?: boolean;
1305
+ shareAudioEnabled?: boolean;
1306
+ shareVideoEnabled?: boolean;
1307
+ }): Promise<void>;
1310
1308
  /**
1311
1309
  * Acknowledge the meeting, outgoing or incoming
1312
1310
  * @param {String} type
@@ -1314,7 +1312,11 @@ export default class Meeting extends StatelessWebexPlugin {
1314
1312
  * @public
1315
1313
  * @memberof Meeting
1316
1314
  */
1317
- acknowledge(type: string): any;
1315
+ acknowledge(type: string): Promise<{
1316
+ response: any;
1317
+ }> | Promise<{
1318
+ message: string;
1319
+ }>;
1318
1320
  /**
1319
1321
  * Decline this meeting
1320
1322
  * @param {String} reason
@@ -1324,15 +1326,45 @@ export default class Meeting extends StatelessWebexPlugin {
1324
1326
  */
1325
1327
  decline(reason: string): any;
1326
1328
  /**
1327
- * Leave the current meeting
1329
+ * Returns a promise that will resolve to fetch options for leaving a meeting.
1330
+ *
1331
+ * This is to support quickly submitting a leave request when the browser/tab is closing.
1332
+ * Calling meeting.leave will not work because there are some async steps that will
1333
+ * not complete before the browser is closed. Instead, we pre-gather all the
1334
+ * information/options needed for the request(s), and then simply and quickly
1335
+ * fire the fetch(es) when pagehide is triggered.
1336
+ *
1337
+ * We must use fetch instead of request because fetch has a keepalive option that
1338
+ * allows the request it to outlive the page.
1339
+ *
1340
+ * Note: the $timings values will be wrong, but setRequestTimingsAndFetch() will
1341
+ * properly adjust them before submitting.
1342
+ *
1343
+ * @public
1328
1344
  * @param {Object} options leave options
1329
1345
  * @param {String} options.resourceId the device with which to leave from, empty if just the computer
1346
+ * @param {any} options.reason the reason for leaving
1347
+ * @returns {Promise} resolves to options to be used with fetch
1348
+ */
1349
+ buildLeaveFetchRequestOptions(options?: {
1350
+ resourceId?: string;
1351
+ reason?: any;
1352
+ }): any;
1353
+ /**
1354
+ * Leave the current meeting
1355
+ * @param {Object} options - leave options
1356
+ * @param {String} [options.resourceId] - the device with which to leave from, empty if just the computer
1357
+ * @param {String} [options.clientEventLeaveReason] - the leaveReason to include in the Call Analyzer event.
1358
+ * Must be one of: 'paired-leave' | 'one-to-one' | 'ended-by-locus' (defaults to no reason)
1359
+ * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/main/diagnostic-events.raml#L796
1360
+ * @param {String} [options.reason] - only used for logging
1330
1361
  * @returns {Promise}
1331
1362
  * @public
1332
1363
  * @memberof Meeting
1333
1364
  */
1334
1365
  leave(options?: {
1335
1366
  resourceId?: string;
1367
+ clientEventLeaveReason?: ClientEventLeaveReason;
1336
1368
  reason?: any;
1337
1369
  }): any;
1338
1370
  /**
@@ -1360,12 +1392,12 @@ export default class Meeting extends StatelessWebexPlugin {
1360
1392
  */
1361
1393
  private requestScreenShareFloor;
1362
1394
  /**
1363
- * Stops the screen share
1364
- * @returns {Promise} see #updateShare
1365
- * @public
1366
- * @memberof Meeting
1395
+ * Requests screen share floor if such request is pending.
1396
+ * It should be called whenever meeting state changes to JOINED
1397
+ *
1398
+ * @returns {void}
1367
1399
  */
1368
- stopShare(options?: {}): any;
1400
+ private requestScreenShareFloorIfPending;
1369
1401
  /**
1370
1402
  * Sends a request to Locus to release the screen share floor.
1371
1403
  * @returns {Promise} see #meetingRequest.changeMeetingFloor
@@ -1396,6 +1428,16 @@ export default class Meeting extends StatelessWebexPlugin {
1396
1428
  * @memberof Meeting
1397
1429
  */
1398
1430
  setDisallowUnmute(enabled: boolean): Promise<any>;
1431
+ /**
1432
+ * set the mute all flag for participants if you're the host
1433
+ * @returns {Promise}
1434
+ * @param {boolean} mutedEnabled
1435
+ * @param {boolean} disallowUnmuteEnabled
1436
+ * @param {boolean} muteOnEntryEnabled
1437
+ * @public
1438
+ * @memberof Meeting
1439
+ */
1440
+ setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean): Promise<any>;
1399
1441
  /**
1400
1442
  * End the recording of this meeting
1401
1443
  * @returns {Promise}
@@ -1446,7 +1488,7 @@ export default class Meeting extends StatelessWebexPlugin {
1446
1488
  * @public
1447
1489
  * @memberof Meeting
1448
1490
  */
1449
- sendDTMF(tones: string): any;
1491
+ sendDTMF(tones: string): Promise<any>;
1450
1492
  /**
1451
1493
  * Sends request to change layout type for the current meeting for the specific participant/device only
1452
1494
  * @param {String} [layoutType] a layout type that should be available in meeting constants {@link #layout_types}
@@ -1471,53 +1513,33 @@ export default class Meeting extends StatelessWebexPlugin {
1471
1513
  height: number;
1472
1514
  };
1473
1515
  }): any;
1474
- /**
1475
- * Sets the quality of the local video stream
1476
- * @param {String} level {LOW|MEDIUM|HIGH}
1477
- * @returns {Promise<MediaStream>} localStream
1478
- */
1479
- setLocalVideoQuality(level: string): any;
1480
1516
  /**
1481
1517
  * Sets the quality level of the remote incoming media
1482
1518
  * @param {String} level {LOW|MEDIUM|HIGH}
1483
1519
  * @returns {Promise}
1484
1520
  */
1485
- setRemoteQualityLevel(level: string): any;
1521
+ setRemoteQualityLevel(level: string): Promise<void>;
1486
1522
  /**
1487
- * This is deprecated, please use setLocalVideoQuality for setting local and setRemoteQualityLevel for remote
1488
- * @param {String} level {LOW|MEDIUM|HIGH}
1489
- * @returns {Promise}
1490
- * @deprecated After FHD support
1523
+ * Functionality for when a share audio is ended.
1524
+ * @private
1525
+ * @memberof Meeting
1526
+ * @returns {undefined}
1491
1527
  */
1492
- setMeetingQuality(level: string): any;
1528
+ private handleShareAudioStreamEnded;
1493
1529
  /**
1494
- *
1495
- * NOTE: this method can only be used with transcoded meetings, for multistream use publishTrack()
1496
- *
1497
- * @param {Object} options parameter
1498
- * @param {Boolean} options.sendAudio send audio from the display share
1499
- * @param {Boolean} options.sendShare send video from the display share
1500
- * @param {Object} options.sharePreferences
1501
- * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video
1502
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}
1503
- * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean
1504
- * @returns {Promise}
1530
+ * Functionality for when a share video is ended.
1531
+ * @private
1532
+ * @memberof Meeting
1533
+ * @returns {undefined}
1505
1534
  */
1506
- shareScreen(options?: {
1507
- sendAudio: boolean;
1508
- sendShare: boolean;
1509
- sharePreferences: {
1510
- shareConstraints: MediaTrackConstraints;
1511
- };
1512
- }): any;
1535
+ private handleShareVideoStreamEnded;
1513
1536
  /**
1514
- * Functionality for when a share is ended.
1537
+ * Emits meeting:stoppedSharingLocal
1515
1538
  * @private
1516
- * @memberof Meeting
1517
- * @param {MediaStream} localShare
1518
1539
  * @returns {undefined}
1540
+ * @memberof Meeting
1519
1541
  */
1520
- private handleShareTrackEnded;
1542
+ private triggerStoppedSharing;
1521
1543
  /**
1522
1544
  * Emits the 'network:quality' event
1523
1545
  * 1 indicates an acceptable uplink network.
@@ -1532,92 +1554,16 @@ export default class Meeting extends StatelessWebexPlugin {
1532
1554
  private sendNetworkQualityEvent;
1533
1555
  /**
1534
1556
  * Handle logging the media
1535
- * @param {Object} audioTrack The audio track
1536
- * @param {Object} videoTrack The video track
1557
+ * @param {Object} mediaProperties
1537
1558
  * @private
1538
1559
  * @returns {undefined}
1539
1560
  */
1540
1561
  private handleMediaLogging;
1541
- /**
1542
- * @param {string} typeMedia 'audio' or 'video'
1543
- * @returns {undefined}
1544
- */
1545
- setStartSetupDelay(typeMedia: string): void;
1546
- /**
1547
- * @param {string} typeMedia 'audio' or 'video'
1548
- * @returns {undefined}
1549
- */
1550
- setEndSetupDelay(typeMedia: string): void;
1551
- /**
1552
- * @param {string} typeMedia 'audio' or 'video'
1553
- * @returns {string} duration between start and end of setup
1554
- */
1555
- getSetupDelayDuration(typeMedia: string): number;
1556
- /**
1557
- * @param {string} typeMedia 'audio' or 'video'
1558
- * @returns {undefined}
1559
- */
1560
- setStartSendingMediaDelay(typeMedia: string): void;
1561
- /**
1562
- * @param {string} typeMedia 'audio' or 'video'
1563
- * @returns {undefined}
1564
- */
1565
- setEndSendingMediaDelay(typeMedia: string): void;
1566
- /**
1567
- * @param {string} typeMedia 'audio' or 'video'
1568
- * @returns {string} duration between join response and first media tx
1569
- */
1570
- getSendingMediaDelayDuration(typeMedia: string): number;
1571
- /**
1572
- *
1573
- * @returns {undefined}
1574
- */
1575
- setStartLocalSDPGenRemoteSDPRecvDelay(): void;
1576
- /**
1577
- *
1578
- * @returns {undefined}
1579
- */
1580
- setEndLocalSDPGenRemoteSDPRecvDelay(): void;
1581
- /**
1582
- *
1583
- * @returns {string} duration between local SDP generation and remote SDP reception
1584
- */
1585
- getLocalSDPGenRemoteSDPRecvDelay(): number;
1586
- /**
1587
- *
1588
- * @returns {undefined}
1589
- */
1590
- setStartCallInitiateJoinReq(): void;
1591
- /**
1592
- *
1593
- * @returns {undefined}
1594
- */
1595
- setEndCallInitiateJoinReq(): void;
1596
- /**
1597
- *
1598
- * @returns {string} duration between call initiate and sending join request to locus
1599
- */
1600
- getCallInitiateJoinReq(): number;
1601
- /**
1602
- *
1603
- * @returns {undefined}
1604
- */
1605
- setStartJoinReqResp(): void;
1606
- /**
1607
- *
1608
- * @returns {undefined}
1609
- */
1610
- setEndJoinReqResp(): void;
1611
- /**
1612
- *
1613
- * @returns {string} duration between sending locus join request and receiving join response
1614
- */
1615
- getJoinReqResp(): number;
1616
1562
  /**
1617
1563
  *
1618
- * @returns {string} duration between call initiate and successful locus join (even if it is in lobby)
1564
+ * @returns {string} one of 'attendee','host','cohost', returns the user type of the current user
1619
1565
  */
1620
- getTotalJmt(): number;
1566
+ getCurUserType(): "host" | "cohost" | "attendee";
1621
1567
  /**
1622
1568
  * End the current meeting for all
1623
1569
  * @returns {Promise}
@@ -1632,35 +1578,6 @@ export default class Meeting extends StatelessWebexPlugin {
1632
1578
  * @memberof Meeting
1633
1579
  */
1634
1580
  clearMeetingData: () => void;
1635
- /**
1636
- * Internal API to return status of BNR
1637
- * @returns {Boolean}
1638
- * @public
1639
- * @memberof Meeting
1640
- */
1641
- isBnrEnabled(): any;
1642
- /**
1643
- * Internal API to obtain BNR enabled MediaStream
1644
- * @returns {Promise<MediaStreamTrack>}
1645
- * @private
1646
- * @param {MedaiStreamTrack} audioTrack from updateAudio
1647
- * @memberof Meeting
1648
- */
1649
- private internal_enableBNR;
1650
- /**
1651
- * Enable the audio track with BNR for a meeting
1652
- * @returns {Promise} resolves the data from enable bnr or rejects if there is no audio or audio is muted
1653
- * @public
1654
- * @memberof Meeting
1655
- */
1656
- enableBNR(): any;
1657
- /**
1658
- * Disable the BNR for an audio track
1659
- * @returns {Promise} resolves the data from disable bnr or rejects if there is no audio set
1660
- * @public
1661
- * @memberof Meeting
1662
- */
1663
- disableBNR(): any;
1664
1581
  /**
1665
1582
  * starts keepAlives being sent
1666
1583
  * @returns {void}
@@ -1693,7 +1610,7 @@ export default class Meeting extends StatelessWebexPlugin {
1693
1610
  * @public
1694
1611
  * @memberof Meeting
1695
1612
  */
1696
- toggleReactions(enable: boolean): any;
1613
+ toggleReactions(enable: boolean): Promise<any>;
1697
1614
  /**
1698
1615
  * Throws if we don't have a media connection created
1699
1616
  *
@@ -1701,24 +1618,61 @@ export default class Meeting extends StatelessWebexPlugin {
1701
1618
  */
1702
1619
  private checkMediaConnection;
1703
1620
  /**
1704
- * Publishes specified local tracks in the meeting
1621
+ * Method to enable or disable the 'Music mode' effect on audio stream
1705
1622
  *
1706
- * @param {Object} tracks
1623
+ * @param {boolean} shouldEnableMusicMode
1707
1624
  * @returns {Promise}
1708
1625
  */
1709
- publishTracks(tracks: {
1710
- microphone?: MediaStreamTrack;
1711
- camera?: MediaStreamTrack;
1712
- screenShare: {
1713
- audio?: MediaStreamTrack;
1714
- video?: MediaStreamTrack;
1715
- };
1716
- }): Promise<void>;
1626
+ enableMusicMode(shouldEnableMusicMode: boolean): Promise<void>;
1627
+ /** Updates the tracks being sent on the transcoded media connection
1628
+ *
1629
+ * @returns {Promise<void>}
1630
+ */
1631
+ private updateTranscodedMediaConnection;
1632
+ /**
1633
+ * Publishes a stream.
1634
+ *
1635
+ * @param {MediaType} mediaType of the stream
1636
+ * @param {LocalStream} stream to publish
1637
+ * @returns {Promise}
1638
+ */
1639
+ private publishStream;
1717
1640
  /**
1718
- * Un-publishes specified local tracks in the meeting
1641
+ * Un-publishes a stream.
1719
1642
  *
1720
- * @param {Array<MediaStreamTrack>} tracks
1643
+ * @param {MediaType} mediaType of the stream
1644
+ * @param {LocalStream} stream to unpublish
1721
1645
  * @returns {Promise}
1722
1646
  */
1723
- unpublishTracks(tracks: MediaStreamTrack[]): Promise<void>;
1647
+ private unpublishStream;
1648
+ /**
1649
+ * Publishes specified local streams in the meeting
1650
+ *
1651
+ * @param {Object} streams
1652
+ * @returns {Promise}
1653
+ */
1654
+ publishStreams(streams: LocalStreams): Promise<void>;
1655
+ /**
1656
+ * Un-publishes specified local streams in the meeting
1657
+ *
1658
+ * @param {Array<LocalStream>} streams
1659
+ * @returns {Promise}
1660
+ */
1661
+ unpublishStreams(streams: LocalStream[]): Promise<void>;
1662
+ /**
1663
+ * Gets the time left in seconds till the permission token expires
1664
+ * (from the time the function has been fired)
1665
+ *
1666
+ * @returns {number} time left in seconds
1667
+ */
1668
+ getPermissionTokenTimeLeftInSec(): number | undefined;
1669
+ /**
1670
+ * Check if there is enough time left till the permission token expires
1671
+ * If not - refresh the permission token
1672
+ *
1673
+ * @param {number} threshold - time in seconds
1674
+ * @param {string} reason - reason for refreshing the permission token
1675
+ * @returns {Promise<void>}
1676
+ */
1677
+ checkAndRefreshPermissionToken(threshold: number, reason: string): Promise<void>;
1724
1678
  }