@webex/plugin-meetings 3.0.0-beta.34 → 3.0.0-beta.340

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 (392) 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 -10
  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 +62 -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/mediaQualityMetrics/config.js +1 -204
  67. package/dist/mediaQualityMetrics/config.js.map +1 -1
  68. package/dist/meeting/in-meeting-actions.js +86 -2
  69. package/dist/meeting/in-meeting-actions.js.map +1 -1
  70. package/dist/meeting/index.js +3927 -2960
  71. package/dist/meeting/index.js.map +1 -1
  72. package/dist/meeting/locusMediaRequest.js +292 -0
  73. package/dist/meeting/locusMediaRequest.js.map +1 -0
  74. package/dist/meeting/muteState.js +224 -131
  75. package/dist/meeting/muteState.js.map +1 -1
  76. package/dist/meeting/request.js +260 -196
  77. package/dist/meeting/request.js.map +1 -1
  78. package/dist/meeting/util.js +601 -417
  79. package/dist/meeting/util.js.map +1 -1
  80. package/dist/meeting-info/index.js +73 -7
  81. package/dist/meeting-info/index.js.map +1 -1
  82. package/dist/meeting-info/meeting-info-v2.js +192 -51
  83. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  84. package/dist/meeting-info/util.js +1 -1
  85. package/dist/meeting-info/util.js.map +1 -1
  86. package/dist/meeting-info/utilv2.js +36 -36
  87. package/dist/meeting-info/utilv2.js.map +1 -1
  88. package/dist/meetings/collection.js +39 -0
  89. package/dist/meetings/collection.js.map +1 -1
  90. package/dist/meetings/index.js +424 -116
  91. package/dist/meetings/index.js.map +1 -1
  92. package/dist/meetings/meetings.types.js +7 -0
  93. package/dist/meetings/meetings.types.js.map +1 -0
  94. package/dist/meetings/request.js +2 -0
  95. package/dist/meetings/request.js.map +1 -1
  96. package/dist/meetings/util.js +72 -6
  97. package/dist/meetings/util.js.map +1 -1
  98. package/dist/member/index.js +58 -0
  99. package/dist/member/index.js.map +1 -1
  100. package/dist/member/types.js +25 -0
  101. package/dist/member/types.js.map +1 -0
  102. package/dist/member/util.js +132 -25
  103. package/dist/member/util.js.map +1 -1
  104. package/dist/members/collection.js +10 -0
  105. package/dist/members/collection.js.map +1 -1
  106. package/dist/members/index.js +102 -6
  107. package/dist/members/index.js.map +1 -1
  108. package/dist/members/request.js +106 -38
  109. package/dist/members/request.js.map +1 -1
  110. package/dist/members/types.js +15 -0
  111. package/dist/members/types.js.map +1 -0
  112. package/dist/members/util.js +326 -232
  113. package/dist/members/util.js.map +1 -1
  114. package/dist/metrics/constants.js +16 -5
  115. package/dist/metrics/constants.js.map +1 -1
  116. package/dist/metrics/index.js +1 -446
  117. package/dist/metrics/index.js.map +1 -1
  118. package/dist/multistream/mediaRequestManager.js +228 -58
  119. package/dist/multistream/mediaRequestManager.js.map +1 -1
  120. package/dist/multistream/receiveSlot.js +29 -16
  121. package/dist/multistream/receiveSlot.js.map +1 -1
  122. package/dist/multistream/receiveSlotManager.js +39 -36
  123. package/dist/multistream/receiveSlotManager.js.map +1 -1
  124. package/dist/multistream/remoteMedia.js +44 -18
  125. package/dist/multistream/remoteMedia.js.map +1 -1
  126. package/dist/multistream/remoteMediaGroup.js +60 -3
  127. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  128. package/dist/multistream/remoteMediaManager.js +209 -59
  129. package/dist/multistream/remoteMediaManager.js.map +1 -1
  130. package/dist/multistream/sendSlotManager.js +233 -0
  131. package/dist/multistream/sendSlotManager.js.map +1 -0
  132. package/dist/reachability/clusterReachability.js +356 -0
  133. package/dist/reachability/clusterReachability.js.map +1 -0
  134. package/dist/reachability/index.js +273 -391
  135. package/dist/reachability/index.js.map +1 -1
  136. package/dist/reachability/request.js +17 -8
  137. package/dist/reachability/request.js.map +1 -1
  138. package/dist/reachability/util.js +29 -0
  139. package/dist/reachability/util.js.map +1 -0
  140. package/dist/reconnection-manager/index.js +214 -170
  141. package/dist/reconnection-manager/index.js.map +1 -1
  142. package/dist/recording-controller/index.js +21 -2
  143. package/dist/recording-controller/index.js.map +1 -1
  144. package/dist/recording-controller/util.js +9 -8
  145. package/dist/recording-controller/util.js.map +1 -1
  146. package/dist/roap/index.js +62 -35
  147. package/dist/roap/index.js.map +1 -1
  148. package/dist/roap/request.js +112 -97
  149. package/dist/roap/request.js.map +1 -1
  150. package/dist/roap/turnDiscovery.js +95 -38
  151. package/dist/roap/turnDiscovery.js.map +1 -1
  152. package/dist/rtcMetrics/constants.js +12 -0
  153. package/dist/rtcMetrics/constants.js.map +1 -0
  154. package/dist/rtcMetrics/index.js +142 -0
  155. package/dist/rtcMetrics/index.js.map +1 -0
  156. package/dist/statsAnalyzer/index.js +181 -214
  157. package/dist/statsAnalyzer/index.js.map +1 -1
  158. package/dist/statsAnalyzer/mqaUtil.js +22 -18
  159. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  160. package/dist/types/annotation/annotation.types.d.ts +42 -0
  161. package/dist/types/annotation/constants.d.ts +31 -0
  162. package/dist/types/annotation/index.d.ts +117 -0
  163. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  164. package/dist/types/breakouts/events.d.ts +8 -0
  165. package/dist/types/breakouts/utils.d.ts +14 -0
  166. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  167. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  168. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  169. package/dist/types/common/logs/request.d.ts +2 -0
  170. package/dist/types/common/queue.d.ts +9 -7
  171. package/dist/types/config.d.ts +2 -7
  172. package/dist/types/constants.d.ts +201 -30
  173. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  174. package/dist/types/controls-options-manager/index.d.ts +17 -1
  175. package/dist/types/controls-options-manager/types.d.ts +43 -0
  176. package/dist/types/controls-options-manager/util.d.ts +1 -7
  177. package/dist/types/index.d.ts +6 -4
  178. package/dist/types/interpretation/collection.d.ts +5 -0
  179. package/dist/types/interpretation/index.d.ts +5 -0
  180. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  181. package/dist/types/locus-info/index.d.ts +57 -4
  182. package/dist/types/locus-info/parser.d.ts +66 -6
  183. package/dist/types/media/index.d.ts +2 -0
  184. package/dist/types/media/properties.d.ts +34 -48
  185. package/dist/types/mediaQualityMetrics/config.d.ts +0 -128
  186. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  187. package/dist/types/meeting/index.d.ts +506 -512
  188. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  189. package/dist/types/meeting/muteState.d.ts +93 -25
  190. package/dist/types/meeting/request.d.ts +72 -43
  191. package/dist/types/meeting/util.d.ts +101 -1
  192. package/dist/types/meeting-info/index.d.ts +13 -1
  193. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  194. package/dist/types/meetings/collection.d.ts +17 -0
  195. package/dist/types/meetings/index.d.ts +91 -21
  196. package/dist/types/meetings/meetings.types.d.ts +4 -0
  197. package/dist/types/member/index.d.ts +14 -0
  198. package/dist/types/member/types.d.ts +32 -0
  199. package/dist/types/members/collection.d.ts +5 -0
  200. package/dist/types/members/index.d.ts +35 -2
  201. package/dist/types/members/request.d.ts +73 -9
  202. package/dist/types/members/types.d.ts +25 -0
  203. package/dist/types/members/util.d.ts +214 -1
  204. package/dist/types/metrics/constants.d.ts +15 -4
  205. package/dist/types/metrics/index.d.ts +4 -111
  206. package/dist/types/multistream/mediaRequestManager.d.ts +72 -5
  207. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  208. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  209. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  210. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  211. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  212. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  213. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  214. package/dist/types/reachability/index.d.ts +60 -95
  215. package/dist/types/reachability/request.d.ts +7 -3
  216. package/dist/types/reachability/util.d.ts +8 -0
  217. package/dist/types/reconnection-manager/index.d.ts +19 -0
  218. package/dist/types/recording-controller/index.d.ts +15 -1
  219. package/dist/types/recording-controller/util.d.ts +5 -4
  220. package/dist/types/roap/index.d.ts +2 -1
  221. package/dist/types/roap/request.d.ts +15 -11
  222. package/dist/types/roap/turnDiscovery.d.ts +21 -3
  223. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  224. package/dist/types/rtcMetrics/index.d.ts +54 -0
  225. package/dist/types/statsAnalyzer/index.d.ts +29 -11
  226. package/dist/types/webinar/collection.d.ts +16 -0
  227. package/dist/types/webinar/index.d.ts +5 -0
  228. package/dist/webinar/collection.js +44 -0
  229. package/dist/webinar/collection.js.map +1 -0
  230. package/dist/webinar/index.js +69 -0
  231. package/dist/webinar/index.js.map +1 -0
  232. package/package.json +22 -19
  233. package/src/annotation/annotation.types.ts +50 -0
  234. package/src/annotation/constants.ts +36 -0
  235. package/src/annotation/index.ts +328 -0
  236. package/src/breakouts/README.md +42 -12
  237. package/src/breakouts/breakout.ts +67 -9
  238. package/src/breakouts/edit-lock-error.ts +25 -0
  239. package/src/breakouts/events.ts +56 -0
  240. package/src/breakouts/index.ts +592 -20
  241. package/src/breakouts/utils.ts +42 -0
  242. package/src/common/errors/no-meeting-info.ts +24 -0
  243. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  244. package/src/common/errors/webex-errors.ts +44 -2
  245. package/src/common/logs/logger-proxy.ts +1 -1
  246. package/src/common/logs/request.ts +5 -1
  247. package/src/common/queue.ts +22 -8
  248. package/src/config.ts +4 -9
  249. package/src/constants.ts +224 -20
  250. package/src/controls-options-manager/enums.ts +12 -0
  251. package/src/controls-options-manager/index.ts +116 -21
  252. package/src/controls-options-manager/types.ts +59 -0
  253. package/src/controls-options-manager/util.ts +294 -14
  254. package/src/index.ts +40 -0
  255. package/src/interpretation/README.md +60 -0
  256. package/src/interpretation/collection.ts +19 -0
  257. package/src/interpretation/index.ts +332 -0
  258. package/src/interpretation/siLanguage.ts +18 -0
  259. package/src/locus-info/controlsUtils.ts +108 -0
  260. package/src/locus-info/index.ts +413 -59
  261. package/src/locus-info/infoUtils.ts +10 -2
  262. package/src/locus-info/mediaSharesUtils.ts +64 -0
  263. package/src/locus-info/parser.ts +258 -47
  264. package/src/locus-info/selfUtils.ts +81 -5
  265. package/src/media/index.ts +102 -122
  266. package/src/media/properties.ts +87 -110
  267. package/src/mediaQualityMetrics/config.ts +0 -135
  268. package/src/meeting/in-meeting-actions.ts +171 -3
  269. package/src/meeting/index.ts +3276 -2555
  270. package/src/meeting/locusMediaRequest.ts +313 -0
  271. package/src/meeting/muteState.ts +223 -136
  272. package/src/meeting/request.ts +177 -121
  273. package/src/meeting/util.ts +588 -394
  274. package/src/meeting-info/index.ts +81 -8
  275. package/src/meeting-info/meeting-info-v2.ts +170 -14
  276. package/src/meeting-info/util.ts +1 -1
  277. package/src/meeting-info/utilv2.ts +23 -23
  278. package/src/meetings/collection.ts +33 -0
  279. package/src/meetings/index.ts +454 -125
  280. package/src/meetings/meetings.types.ts +12 -0
  281. package/src/meetings/request.ts +2 -0
  282. package/src/meetings/util.ts +80 -11
  283. package/src/member/index.ts +58 -0
  284. package/src/member/types.ts +38 -0
  285. package/src/member/util.ts +141 -25
  286. package/src/members/collection.ts +8 -0
  287. package/src/members/index.ts +134 -8
  288. package/src/members/request.ts +97 -17
  289. package/src/members/types.ts +29 -0
  290. package/src/members/util.ts +333 -240
  291. package/src/metrics/constants.ts +15 -4
  292. package/src/metrics/index.ts +1 -469
  293. package/src/multistream/mediaRequestManager.ts +277 -82
  294. package/src/multistream/receiveSlot.ts +31 -17
  295. package/src/multistream/receiveSlotManager.ts +34 -24
  296. package/src/multistream/remoteMedia.ts +27 -2
  297. package/src/multistream/remoteMediaGroup.ts +59 -0
  298. package/src/multistream/remoteMediaManager.ts +148 -30
  299. package/src/multistream/sendSlotManager.ts +170 -0
  300. package/src/reachability/clusterReachability.ts +320 -0
  301. package/src/reachability/index.ts +236 -342
  302. package/src/reachability/request.ts +17 -8
  303. package/src/reachability/util.ts +24 -0
  304. package/src/reconnection-manager/index.ts +128 -106
  305. package/src/recording-controller/index.ts +20 -3
  306. package/src/recording-controller/util.ts +26 -9
  307. package/src/roap/index.ts +63 -32
  308. package/src/roap/request.ts +100 -104
  309. package/src/roap/turnDiscovery.ts +48 -26
  310. package/src/rtcMetrics/constants.ts +3 -0
  311. package/src/rtcMetrics/index.ts +124 -0
  312. package/src/statsAnalyzer/index.ts +218 -289
  313. package/src/statsAnalyzer/mqaUtil.ts +28 -30
  314. package/src/webinar/collection.ts +31 -0
  315. package/src/webinar/index.ts +62 -0
  316. package/test/integration/spec/converged-space-meetings.js +60 -3
  317. package/test/integration/spec/journey.js +320 -261
  318. package/test/integration/spec/space-meeting.js +76 -3
  319. package/test/unit/spec/annotation/index.ts +418 -0
  320. package/test/unit/spec/breakouts/breakout.ts +118 -28
  321. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  322. package/test/unit/spec/breakouts/events.ts +89 -0
  323. package/test/unit/spec/breakouts/index.ts +1395 -69
  324. package/test/unit/spec/breakouts/utils.js +52 -1
  325. package/test/unit/spec/common/queue.js +31 -2
  326. package/test/unit/spec/controls-options-manager/index.js +163 -0
  327. package/test/unit/spec/controls-options-manager/util.js +576 -60
  328. package/test/unit/spec/fixture/locus.js +1 -0
  329. package/test/unit/spec/interpretation/collection.ts +15 -0
  330. package/test/unit/spec/interpretation/index.ts +589 -0
  331. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  332. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  333. package/test/unit/spec/locus-info/index.js +1304 -33
  334. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  335. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  336. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  337. package/test/unit/spec/locus-info/parser.js +116 -35
  338. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  339. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  340. package/test/unit/spec/media/index.ts +120 -37
  341. package/test/unit/spec/media/properties.ts +2 -2
  342. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  343. package/test/unit/spec/meeting/index.js +5849 -2014
  344. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  345. package/test/unit/spec/meeting/muteState.js +402 -213
  346. package/test/unit/spec/meeting/request.js +483 -49
  347. package/test/unit/spec/meeting/utils.js +679 -64
  348. package/test/unit/spec/meeting-info/index.js +300 -0
  349. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  350. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  351. package/test/unit/spec/meetings/collection.js +26 -0
  352. package/test/unit/spec/meetings/index.js +1231 -212
  353. package/test/unit/spec/meetings/utils.js +202 -2
  354. package/test/unit/spec/member/index.js +61 -6
  355. package/test/unit/spec/member/util.js +510 -34
  356. package/test/unit/spec/members/index.js +432 -1
  357. package/test/unit/spec/members/request.js +206 -27
  358. package/test/unit/spec/members/utils.js +210 -0
  359. package/test/unit/spec/metrics/index.js +1 -50
  360. package/test/unit/spec/multistream/mediaRequestManager.ts +776 -162
  361. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  362. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  363. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  364. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  365. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  366. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  367. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  368. package/test/unit/spec/reachability/index.ts +486 -13
  369. package/test/unit/spec/reachability/request.js +68 -0
  370. package/test/unit/spec/reachability/util.ts +40 -0
  371. package/test/unit/spec/reconnection-manager/index.js +117 -11
  372. package/test/unit/spec/recording-controller/index.js +294 -218
  373. package/test/unit/spec/recording-controller/util.js +223 -96
  374. package/test/unit/spec/roap/index.ts +174 -63
  375. package/test/unit/spec/roap/request.ts +226 -85
  376. package/test/unit/spec/roap/turnDiscovery.ts +76 -34
  377. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  378. package/test/unit/spec/stats-analyzer/index.js +231 -7
  379. package/test/unit/spec/webinar/collection.ts +13 -0
  380. package/test/unit/spec/webinar/index.ts +60 -0
  381. package/test/utils/integrationTestUtils.js +46 -0
  382. package/test/utils/testUtils.js +0 -52
  383. package/dist/meeting/effectsState.js +0 -262
  384. package/dist/meeting/effectsState.js.map +0 -1
  385. package/dist/metrics/config.js +0 -289
  386. package/dist/metrics/config.js.map +0 -1
  387. package/dist/types/meeting/effectsState.d.ts +0 -42
  388. package/dist/types/metrics/config.d.ts +0 -169
  389. package/src/index.js +0 -16
  390. package/src/meeting/effectsState.ts +0 -211
  391. package/src/metrics/config.ts +0 -485
  392. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -1,27 +1,58 @@
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;
24
50
  };
51
+ export declare enum ScreenShareFloorStatus {
52
+ PENDING = "floor_request_pending",
53
+ GRANTED = "floor_request_granted",
54
+ RELEASED = "floor_released"
55
+ }
25
56
  /**
26
57
  * MediaDirection
27
58
  * @typedef {Object} MediaDirection
@@ -33,15 +64,6 @@ export declare const MEDIA_UPDATE_TYPE: {
33
64
  * @property {boolean} receiveShare
34
65
  * @property {boolean} isSharing
35
66
  */
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
67
  /**
46
68
  * SharePreferences
47
69
  * @typedef {Object} SharePreferences
@@ -55,18 +77,10 @@ export declare const MEDIA_UPDATE_TYPE: {
55
77
  * @property {String} [pin]
56
78
  * @property {Boolean} [moderator]
57
79
  * @property {String|Object} [meetingQuality]
58
- * @property {String} [meetingQuality.local]
59
80
  * @property {String} [meetingQuality.remote]
60
81
  * @property {Boolean} [rejoin]
61
82
  * @property {Boolean} [enableMultistream]
62
83
  */
63
- /**
64
- * SendOptions
65
- * @typedef {Object} SendOptions
66
- * @property {Boolean} sendAudio
67
- * @property {Boolean} sendVideo
68
- * @property {Boolean} sendShare
69
- */
70
84
  /**
71
85
  * Recording
72
86
  * @typedef {Object} Recording
@@ -148,7 +162,11 @@ export declare const MEDIA_UPDATE_TYPE: {
148
162
  * @instance
149
163
  * @type {Object}
150
164
  * @property {Boolean} memberId id of the meeting member that started screen share
165
+ * @property {String} url of this content share
166
+ * @property {String} shareInstanceId of this content share
167
+ * @property {Object} annotation Info of this content share
151
168
  * @memberof Meeting
169
+ *
152
170
  */
153
171
  /**
154
172
  * Meeting Stopped Sharing Remote Event
@@ -285,12 +303,14 @@ export default class Meeting extends StatelessWebexPlugin {
285
303
  attrs: any;
286
304
  audio: any;
287
305
  breakouts: any;
306
+ simultaneousInterpretation: any;
307
+ annotation: any;
308
+ webinar: any;
288
309
  conversationUrl: string;
289
- correlationId: string;
310
+ callStateForMetrics: CallStateForMetrics;
290
311
  destination: string;
291
312
  destinationType: string;
292
313
  deviceUrl: string;
293
- effects: any;
294
314
  hostId: string;
295
315
  id: string;
296
316
  isMultistream: boolean;
@@ -298,7 +318,7 @@ export default class Meeting extends StatelessWebexPlugin {
298
318
  mediaConnections: any[];
299
319
  mediaId?: string;
300
320
  meetingFiniteStateMachine: any;
301
- meetingInfo: object;
321
+ meetingInfo: any;
302
322
  meetingRequest: MeetingRequest;
303
323
  members: Members;
304
324
  options: object;
@@ -310,11 +330,13 @@ export default class Meeting extends StatelessWebexPlugin {
310
330
  resource: string;
311
331
  roap: Roap;
312
332
  roapSeq: number;
333
+ selfUrl?: string;
313
334
  sipUri: string;
314
335
  type: string;
315
336
  userId: string;
316
337
  video: any;
317
338
  callEvents: any[];
339
+ datachannelUrl: string;
318
340
  deferJoin: Promise<any>;
319
341
  dialInDeviceStatus: string;
320
342
  dialInUrl: string;
@@ -327,10 +349,10 @@ export default class Meeting extends StatelessWebexPlugin {
327
349
  inMeetingActions: InMeetingActions;
328
350
  isLocalShareLive: boolean;
329
351
  isRoapInProgress: boolean;
330
- isSharing: boolean;
331
352
  keepAliveTimerId: NodeJS.Timeout;
332
353
  lastVideoLayoutInfo: any;
333
354
  locusInfo: any;
355
+ locusMediaRequest?: LocusMediaRequest;
334
356
  mediaProperties: MediaProperties;
335
357
  mediaRequestManagers: {
336
358
  audio: MediaRequestManager;
@@ -339,8 +361,10 @@ export default class Meeting extends StatelessWebexPlugin {
339
361
  screenShareVideo: MediaRequestManager;
340
362
  };
341
363
  meetingInfoFailureReason: string;
364
+ meetingInfoFailureCode?: number;
365
+ meetingInfoExtraParams?: Record<string, any>;
342
366
  networkQualityMonitor: NetworkQualityMonitor;
343
- networkStatus: string;
367
+ networkStatus?: NETWORK_STATUS;
344
368
  passwordStatus: string;
345
369
  queuedMediaUpdates: any[];
346
370
  recording: any;
@@ -349,16 +373,20 @@ export default class Meeting extends StatelessWebexPlugin {
349
373
  controlsOptionsManager: ControlsOptionsManager;
350
374
  requiredCaptcha: any;
351
375
  receiveSlotManager: ReceiveSlotManager;
376
+ selfUserPolicies: any;
377
+ enforceVBGImagesURL: string;
352
378
  shareStatus: string;
379
+ screenShareFloorState: ScreenShareFloorStatus;
353
380
  statsAnalyzer: StatsAnalyzer;
354
381
  transcription: Transcription;
355
382
  updateMediaConnections: (mediaConnections: any[]) => void;
356
- endCallInitiateJoinReq: any;
383
+ userDisplayHints: any;
384
+ endCallInitJoinReq: any;
357
385
  endJoinReqResp: any;
358
386
  endLocalSDPGenRemoteSDPRecvDelay: any;
359
387
  joinedWith: any;
360
388
  locusId: any;
361
- startCallInitiateJoinReq: any;
389
+ startCallInitJoinReq: any;
362
390
  startJoinReqResp: any;
363
391
  startLocalSDPGenRemoteSDPRecvDelay: any;
364
392
  wirelessShare: any;
@@ -366,12 +394,27 @@ export default class Meeting extends StatelessWebexPlugin {
366
394
  meetingJoinUrl: any;
367
395
  meetingNumber: any;
368
396
  meetingState: any;
369
- permissionToken: any;
397
+ permissionToken: string;
398
+ permissionTokenPayload: any;
399
+ permissionTokenReceivedLocalTime: number;
370
400
  resourceId: any;
371
401
  resourceUrl: string;
372
402
  selfId: string;
373
403
  state: any;
404
+ localAudioStreamMuteStateHandler: (muted: boolean) => void;
405
+ localVideoStreamMuteStateHandler: (muted: boolean) => void;
406
+ localOutputTrackChangeHandler: () => void;
407
+ roles: any[];
408
+ environment: string;
374
409
  namespace: string;
410
+ allowMediaInLobby: boolean;
411
+ turnDiscoverySkippedReason: string;
412
+ turnServerUsed: boolean;
413
+ private retriedWithTurnServer;
414
+ private sendSlotManager;
415
+ private deferSDPAnswer?;
416
+ private sdpResponseTimer?;
417
+ private hasMediaConnectionConnectedAtLeastOnce;
375
418
  /**
376
419
  * @param {Object} attrs
377
420
  * @param {Object} options
@@ -379,29 +422,68 @@ export default class Meeting extends StatelessWebexPlugin {
379
422
  * @memberof Meeting
380
423
  */
381
424
  constructor(attrs: any, options: object);
425
+ /**
426
+ * returns meeting is joined
427
+ * @private
428
+ * @memberof Meeting
429
+ * @returns {Boolean}
430
+ */
431
+ private isJoined;
432
+ /**
433
+ * Returns whether this meeting is a Locus CALL
434
+ * @returns {Boolean}
435
+ */
436
+ isLocusCall(): boolean;
437
+ /**
438
+ * Getter - Returns callStateForMetrics.correlationId
439
+ * @returns {string}
440
+ */
441
+ get correlationId(): string;
442
+ /**
443
+ * Setter - sets callStateForMetrics.correlationId
444
+ * @param {string} correlationId
445
+ */
446
+ set correlationId(correlationId: string);
447
+ /**
448
+ * Internal method for fetching meeting info
449
+ *
450
+ * @returns {Promise}
451
+ */
452
+ private fetchMeetingInfoInternal;
453
+ /**
454
+ * Refreshes the meeting info permission token (it's required for joining meetings)
455
+ *
456
+ * @param {string} [reason] used for metrics and logging purposes (optional)
457
+ * @returns {Promise}
458
+ */
459
+ refreshPermissionToken(reason?: string): Promise<void>;
382
460
  /**
383
461
  * Fetches meeting information.
384
462
  * @param {Object} options
385
463
  * @param {String} [options.password] optional
386
464
  * @param {String} [options.captchaCode] optional
465
+ * @param {Boolean} [options.sendCAevents] optional - Whether to submit Call Analyzer events or not. Default: false.
387
466
  * @public
388
467
  * @memberof Meeting
389
468
  * @returns {Promise}
390
469
  */
391
- fetchMeetingInfo({ password, captchaCode, }: {
470
+ fetchMeetingInfo({ password, captchaCode, extraParams, sendCAevents, }: {
392
471
  password?: string;
393
472
  captchaCode?: string;
473
+ extraParams?: Record<string, any>;
474
+ sendCAevents?: boolean;
394
475
  }): Promise<void>;
395
476
  /**
396
477
  * Checks if the supplied password/host key is correct. It returns a promise with information whether the
397
478
  * password and captcha code were correct or not.
398
479
  * @param {String} password - this can be either a password or a host key, can be undefined if only captcha was required
399
480
  * @param {String} captchaCode - can be undefined if captcha was not required by the server
481
+ * @param {Boolean} sendCAevents - whether Call Analyzer events should be sent when fetching meeting information
400
482
  * @public
401
483
  * @memberof Meeting
402
484
  * @returns {Promise<{isPasswordValid: boolean, requiredCaptcha: boolean, failureReason: MEETING_INFO_FAILURE_REASON}>}
403
485
  */
404
- verifyPassword(password: string, captchaCode: string): Promise<{
486
+ verifyPassword(password: string, captchaCode: string, sendCAevents?: boolean): Promise<{
405
487
  isPasswordValid: boolean;
406
488
  requiredCaptcha: any;
407
489
  failureReason: string;
@@ -418,6 +500,14 @@ export default class Meeting extends StatelessWebexPlugin {
418
500
  * @returns {Promise}
419
501
  */
420
502
  refreshCaptcha(): any;
503
+ /**
504
+ * Posts metrics event for this meeting. Allows the app to send Call Analyzer events.
505
+ * @param {String} eventName - Call Analyzer event
506
+ * @public
507
+ * @memberof Meeting
508
+ * @returns {Promise}
509
+ */
510
+ postMetrics(eventName: ClientEvent['name']): void;
421
511
  /**
422
512
  * Proxy function for all the listener set ups
423
513
  * @returns {undefined}
@@ -432,6 +522,13 @@ export default class Meeting extends StatelessWebexPlugin {
432
522
  * @memberof Meeting
433
523
  */
434
524
  setUpBreakoutsListener(): void;
525
+ /**
526
+ * Set up the listeners for interpretation
527
+ * @returns {undefined}
528
+ * @private
529
+ * @memberof Meeting
530
+ */
531
+ private setUpInterpretationListener;
435
532
  /**
436
533
  * Set up the locus info listener for meetings disconnected due to inactivity
437
534
  * @returns {undefined}
@@ -453,50 +550,9 @@ export default class Meeting extends StatelessWebexPlugin {
453
550
  * @memberof Meeting
454
551
  */
455
552
  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
553
  /**
498
554
  * sets the network status on meeting object
499
- * @param {String} networkStatus
555
+ * @param {NETWORK_STATUS} networkStatus
500
556
  * @private
501
557
  * @returns {undefined}
502
558
  * @memberof Meeting
@@ -556,6 +612,13 @@ export default class Meeting extends StatelessWebexPlugin {
556
612
  * @memberof Meeting
557
613
  */
558
614
  private setupLocusControlsListener;
615
+ /**
616
+ * Trigger annotation info update event
617
+ @returns {undefined}
618
+ @param {object} contentShare
619
+ @param {object} previousContentShare
620
+ */
621
+ private triggerAnnotationInfoEvent;
559
622
  /**
560
623
  * Set up the locus info media shares listener
561
624
  * update content and whiteboard sharing id value for members, and updates the member
@@ -654,13 +717,23 @@ export default class Meeting extends StatelessWebexPlugin {
654
717
  phoneNumber: string;
655
718
  }): any;
656
719
  /**
657
- * Admit the guest(s) to the call once they are waiting
720
+ * Admit the guest(s) to the call once they are waiting.
721
+ * If the host/cohost is in a breakout session, the locus url
722
+ * of the session must be provided as the authorizingLocusUrl.
723
+ * Regardless of host/cohost location, the locus Id (lid) in
724
+ * the path should be the locus Id of the main, which means the
725
+ * locus url of the api call must be from the main session.
726
+ * If these loucs urls are not provided, the function will do the check.
658
727
  * @param {Array} memberIds
728
+ * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}
659
729
  * @returns {Promise} see #members.admitMembers
660
730
  * @public
661
731
  * @memberof Meeting
662
732
  */
663
- admit(memberIds: Array<any>): any;
733
+ admit(memberIds: Array<any>, sessionLocusUrls?: {
734
+ authorizingLocusUrl: string;
735
+ mainLocusUrl: string;
736
+ }): any;
664
737
  /**
665
738
  * Remove the member from the meeting, boot them
666
739
  * @param {String} memberId
@@ -694,48 +767,6 @@ export default class Meeting extends StatelessWebexPlugin {
694
767
  * @memberof Meeting
695
768
  */
696
769
  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
770
  /**
740
771
  * Sets the meeting info on the class instance
741
772
  * @param {Object} meetingInfo
@@ -758,16 +789,29 @@ export default class Meeting extends StatelessWebexPlugin {
758
789
  };
759
790
  } | any, destination?: object | string | null): void;
760
791
  /**
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
792
+ * Indicates whether policy can be applied
793
+ * @returns {boolean}
794
+ */
795
+ private arePolicyRestrictionsSupported;
796
+ /**
797
+ * Updates the meeting actions (display hints), depends on locus display hints, user policy and app api info
766
798
  * @returns {undefined}
767
799
  * @private
768
800
  * @memberof Meeting
769
801
  */
770
- private parseLocus;
802
+ private updateMeetingActions;
803
+ /**
804
+ * Sets the self user policies based on the contents of the permission token
805
+ * @returns {void}
806
+ */
807
+ setSelfUserPolicies(): void;
808
+ /**
809
+ * Sets the permission token payload on the class instance
810
+ *
811
+ * @param {String} permissionToken
812
+ * @returns {void}
813
+ */
814
+ setPermissionTokenPayload(permissionToken: string): void;
771
815
  /**
772
816
  * Sets the sip uri on the class instance
773
817
  * uses meeting info as precedence
@@ -790,7 +834,13 @@ export default class Meeting extends StatelessWebexPlugin {
790
834
  * @private
791
835
  * @memberof Meeting
792
836
  */
793
- private setLocus;
837
+ setLocus(locus: {
838
+ mediaConnections: Array<any>;
839
+ locusUrl: string;
840
+ locusId: string;
841
+ mediaId: string;
842
+ host: object;
843
+ } | any): void;
794
844
  /**
795
845
  * Upload logs for the current meeting
796
846
  * @param {object} options file name and function name
@@ -800,19 +850,10 @@ export default class Meeting extends StatelessWebexPlugin {
800
850
  */
801
851
  uploadLogs(options?: object): void;
802
852
  /**
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
853
+ * Removes remote audio, video and share streams from class instance's mediaProperties
813
854
  * @returns {undefined}
814
855
  */
815
- unsetRemoteTracks(): void;
856
+ unsetRemoteStreams(): void;
816
857
  /**
817
858
  * Removes the remote stream on the class instance and triggers an event
818
859
  * to developers
@@ -823,83 +864,45 @@ export default class Meeting extends StatelessWebexPlugin {
823
864
  */
824
865
  closeRemoteStream(): void;
825
866
  /**
826
- * Removes the remote tracks on the class instance and triggers an event
867
+ * Removes the remote streams on the class instance and triggers an event
827
868
  * to developers
828
869
  * @returns {undefined}
829
870
  * @memberof Meeting
830
871
  */
831
- closeRemoteTracks(): Promise<[any, any, any]>;
832
- /**
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;
872
+ closeRemoteStreams(): Promise<[any, any, any]>;
839
873
  /**
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
874
+ * Stores the reference to a new microphone stream, sets up the required event listeners
875
+ * on it, cleans up previous stream, etc.
876
+ *
877
+ * @param {LocalMicrophoneStream | null} localStream local microphone stream
878
+ * @returns {Promise<void>}
879
879
  */
880
- closeLocalStream(): any;
880
+ private setLocalAudioStream;
881
881
  /**
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
882
+ * Stores the reference to a new camera stream, sets up the required event listeners
883
+ * on it, cleans up previous stream, etc.
884
+ *
885
+ * @param {LocalCameraStream | null} localStream local camera stream
886
+ * @returns {Promise<void>}
887
887
  */
888
- closeLocalShare(): any;
888
+ private setLocalVideoStream;
889
889
  /**
890
- * Removes the local stream from the class and emits an event to the developer
891
- * @returns {undefined}
892
- * @public
893
- * @memberof Meeting
890
+ * Stores the reference to a new screen share stream, sets up the required event listeners
891
+ * on it, cleans up previous stream, etc.
892
+ * It also sends the floor grant/release request.
893
+ *
894
+ * @param {LocalDisplayStream | undefined} localDisplayStream local display stream
895
+ * @returns {Promise<void>}
894
896
  */
895
- unsetLocalVideoTrack(): void;
897
+ private setLocalShareVideoStream;
896
898
  /**
897
- * Removes the local share from the class and emits an event to the developer
898
- * @returns {undefined}
899
- * @public
900
- * @memberof Meeting
899
+ * Stores the reference to a new screen share audio stream, sets up the required event listeners
900
+ * on it, cleans up previous stream, etc.
901
+ *
902
+ * @param {LocalSystemAudioStream | undefined} localSystemAudioStream local system audio stream
903
+ * @returns {Promise<void>}
901
904
  */
902
- unsetLocalShareTrack(): void;
905
+ private setLocalShareAudioStream;
903
906
  /**
904
907
  * sets up listner for mercury event
905
908
  * @returns {undefined}
@@ -925,13 +928,28 @@ export default class Meeting extends StatelessWebexPlugin {
925
928
  */
926
929
  unsetPeerConnections(): void;
927
930
  /**
928
- * Convenience method to set the correlation id for the Meeting
929
- * @param {String} id correlation id to set on the class
931
+ * Convenience method to set the correlation id for the callStateForMetrics
932
+ * @param {String} id correlation id to set on the callStateForMetrics
930
933
  * @returns {undefined}
934
+ * @public
935
+ * @memberof Meeting
936
+ */
937
+ setCorrelationId(id: string): void;
938
+ /**
939
+ * Update the callStateForMetrics
940
+ * @param {CallStateForMetrics} callStateForMetrics updated values for callStateForMetrics
941
+ * @returns {undefined}
942
+ * @public
943
+ * @memberof Meeting
944
+ */
945
+ updateCallStateForMetrics(callStateForMetrics: CallStateForMetrics): void;
946
+ /**
947
+ * Enqueue request for screenshare floor and set the status to pending
948
+ * @returns {Promise}
931
949
  * @private
932
950
  * @memberof Meeting
933
951
  */
934
- private setCorrelationId;
952
+ private enqueueScreenShareFloorRequest;
935
953
  /**
936
954
  * Mute the audio for a meeting
937
955
  * @returns {Promise} resolves the data from muting audio {mute, self} or rejects if there is no audio set
@@ -964,32 +982,25 @@ export default class Meeting extends StatelessWebexPlugin {
964
982
  * Shorthand function to join AND set up media
965
983
  * @param {Object} options - options to join with media
966
984
  * @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()}
985
+ * @param {AddMediaOptions} [options.mediaOptions] - see #addMedia()
986
+ * @returns {Promise} -- {join: see join(), media: see addMedia()}
970
987
  * @public
971
988
  * @memberof Meeting
972
989
  * @example
973
990
  * joinWithMedia({
974
991
  * 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
- * }})
992
+ * mediaOptions: {
993
+ * localStreams: { microphone: microphoneStream, camera: cameraStream }
994
+ * }
995
+ * })
987
996
  */
988
997
  joinWithMedia(options?: {
989
998
  joinOptions?: any;
990
- mediaSettings: any;
991
- audioVideoOptions?: any;
992
- }): any;
999
+ mediaOptions?: AddMediaOptions;
1000
+ }): Promise<{
1001
+ join: any;
1002
+ media: void;
1003
+ }>;
993
1004
  /**
994
1005
  * Initiates the reconnection of the media in the meeting
995
1006
  *
@@ -1054,7 +1065,7 @@ export default class Meeting extends StatelessWebexPlugin {
1054
1065
  * if joining as host on second loop, pass pin and pass moderator if joining as guest on second loop
1055
1066
  * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)
1056
1067
  */
1057
- join(options?: any): any;
1068
+ join(options?: any): Promise<any>;
1058
1069
  /**
1059
1070
  * Connects to low latency mercury and reconnects if the address has changed
1060
1071
  * It will also disconnect if called when the meeting has ended
@@ -1069,7 +1080,7 @@ export default class Meeting extends StatelessWebexPlugin {
1069
1080
  * @public
1070
1081
  * @memberof Meeting
1071
1082
  */
1072
- usePhoneAudio(phoneNumber: string): any;
1083
+ usePhoneAudio(phoneNumber: string): Promise<any>;
1073
1084
  /**
1074
1085
  * Determines if the given pstnStatus is in a state which implies the phone is provisioned
1075
1086
  * @param {String} pstnStatus
@@ -1117,38 +1128,6 @@ export default class Meeting extends StatelessWebexPlugin {
1117
1128
  * @memberof Meeting
1118
1129
  */
1119
1130
  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
1131
  /**
1153
1132
  * Handles ROAP_FAILURE event from the webrtc media connection
1154
1133
  *
@@ -1156,6 +1135,12 @@ export default class Meeting extends StatelessWebexPlugin {
1156
1135
  * @returns {void}
1157
1136
  */
1158
1137
  handleRoapFailure: (error: any) => void;
1138
+ /**
1139
+ * This function makes sure we send the right metrics when local and remote SDPs are processed/generated
1140
+ *
1141
+ * @returns {undefined}
1142
+ */
1143
+ setupSdpListeners: () => void;
1159
1144
  setupMediaConnectionListeners: () => void;
1160
1145
  /**
1161
1146
  * Registers for all required StatsAnalyzer events
@@ -1165,7 +1150,15 @@ export default class Meeting extends StatelessWebexPlugin {
1165
1150
  */
1166
1151
  setupStatsAnalyzerEventHandlers: () => void;
1167
1152
  getMediaConnectionDebugId(): string;
1168
- createMediaConnection(turnServerInfo: any): any;
1153
+ /**
1154
+ * Creates a webrtc media connection and publishes streams to it
1155
+ *
1156
+ * @param {Object} turnServerInfo TURN server information
1157
+ * @param {BundlePolicy} [bundlePolicy] Bundle policy settings
1158
+ * @param {AddMediaOptions} [options] Options for enabling/disabling audio/video
1159
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
1160
+ */
1161
+ private createMediaConnection;
1169
1162
  /**
1170
1163
  * Listens for an event emitted by eventEmitter and emits it from the meeting object
1171
1164
  *
@@ -1177,23 +1170,121 @@ export default class Meeting extends StatelessWebexPlugin {
1177
1170
  */
1178
1171
  forwardEvent(eventEmitter: any, eventTypeToForward: any, meetingEventType: any): void;
1179
1172
  /**
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}
1173
+ * Sets up all the references to local streams in this.mediaProperties before creating media connection
1174
+ * and before TURN discovery, so that the correct mute state is sent with TURN discovery roap messages.
1175
+ *
1176
+ * @private
1177
+ * @param {LocalStreams} localStreams
1178
+ * @returns {Promise<void>}
1179
+ */
1180
+ private setUpLocalStreamReferences;
1181
+ /**
1182
+ * Calls mediaProperties.waitForMediaConnectionConnected() and sends CA client.ice.end metric on failure
1183
+ *
1184
+ * @private
1185
+ * @returns {Promise<void>}
1186
+ */
1187
+ private waitForMediaConnectionConnected;
1188
+ /**
1189
+ * Enables statsAnalyser if config allows it
1190
+ *
1191
+ * @private
1192
+ * @returns {void}
1193
+ */
1194
+ private createStatsAnalyzer;
1195
+ /**
1196
+ * Handles device logging
1197
+ *
1198
+ * @private
1199
+ * @static
1200
+ * @returns {Promise<void>}
1201
+ */
1202
+ private static handleDeviceLogging;
1203
+ /**
1204
+ * Returns a promise. This promise is created once the local sdp offer has been successfully created and is resolved
1205
+ * once the remote sdp answer has been received.
1206
+ *
1207
+ * @private
1208
+ * @returns {Promise<void>}
1209
+ */
1210
+ private waitForRemoteSDPAnswer;
1211
+ /**
1212
+ * Calls establishMediaConnection with isForced = true to force turn discovery to happen
1213
+ *
1214
+ * @private
1215
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1216
+ * @param {BundlePolicy} [bundlePolicy]
1217
+ * @returns {Promise<void>}
1218
+ */
1219
+ private retryEstablishMediaConnectionWithForcedTurnDiscovery;
1220
+ /**
1221
+ * Does relevant clean up before retrying to establish media connection
1222
+ * and performs the retry with forced turn discovery
1223
+ *
1224
+ * @private
1225
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1226
+ * @param {BundlePolicy} [bundlePolicy]
1227
+ * @returns {Promise<void>}
1228
+ */
1229
+ private retryWithForcedTurnDiscovery;
1230
+ /**
1231
+ * If waitForMediaConnectionConnected() fails when we haven't done turn discovery then we
1232
+ * attempt to establish a media connection again, but this time using turn discovery. If we
1233
+ * used turn discovery on the first pass we do not attempt connection again.
1234
+ *
1235
+ * @private
1236
+ * @param {Error} error
1237
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1238
+ * @param {BundlePolicy} [bundlePolicy]
1239
+ * @returns {Promise<void>}
1240
+ */
1241
+ private handleWaitForMediaConnectionConnectedError;
1242
+ /**
1243
+ * Does TURN discovery, SDP offer/answer exhange, establishes ICE connection and DTLS handshake.
1244
+ *
1245
+ * @private
1246
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1247
+ * @param {BundlePolicy} [bundlePolicy]
1248
+ * @param {boolean} [isForced] - let isForced be true to do turn discovery regardless of reachability results
1249
+ * @returns {Promise<void>}
1250
+ */
1251
+ private establishMediaConnection;
1252
+ /**
1253
+ * Cleans up stats analyzer, peer connection, and turns off listeners
1254
+ *
1255
+ * @private
1256
+ * @returns {Promise<void>}
1257
+ */
1258
+ private cleanUpOnAddMediaFailure;
1259
+ /**
1260
+ * Sends stats report, closes peer connection and cleans up any media connection
1261
+ * related things before trying to establish media connection again with turn server
1262
+ *
1263
+ * @private
1264
+ * @returns {Promise<void>}
1265
+ */
1266
+ private cleanUpBeforeRetryWithTurnServer;
1267
+ /**
1268
+ * Creates a media connection to the server. Media connection is required for sending or receiving any audio/video.
1269
+ *
1270
+ * @param {AddMediaOptions} options
1271
+ * @returns {Promise<void>}
1188
1272
  * @public
1189
1273
  * @memberof Meeting
1190
1274
  */
1191
- addMedia(options?: any): any;
1275
+ addMedia(options?: AddMediaOptions): Promise<void>;
1192
1276
  /**
1193
1277
  * Informs if the peer connection is in a state that can be updated with updateMedia (audio/video/share)
1194
1278
  * @returns {Boolean}
1195
1279
  */
1196
1280
  canUpdateMedia(): boolean;
1281
+ /**
1282
+ * media failed, so collect a stats report from webrtc using the wcme connection to grab the rtc stats report
1283
+ * send a webrtc telemetry dump to the configured server using the internal media core check metrics configured callback
1284
+ * @param {String} callFrom - the function calling this function, optional.
1285
+ * @returns {Promise<void>}
1286
+ */
1287
+ private forceSendStatsReport;
1197
1288
  /**
1198
1289
  * Enqueues a media update operation.
1199
1290
  * @param {String} mediaUpdateType one of MEDIA_UPDATE_TYPE values
@@ -1219,94 +1310,26 @@ export default class Meeting extends StatelessWebexPlugin {
1219
1310
  */
1220
1311
  processNextQueuedMediaUpdate: () => void;
1221
1312
  /**
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()
1259
- *
1260
- * @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
1264
- * @returns {Promise}
1265
- * @public
1266
- * @memberof Meeting
1267
- */
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()
1313
+ * Updates the media connection - it allows to enable/disable all audio/video/share in the meeting.
1314
+ * This does not affect the published tracks, so for example if a microphone track is published and
1315
+ * updateMedia({audioEnabled: false}) is called, the audio will not be sent or received anymore,
1316
+ * but the track's "published" state is not changed and when updateMedia({audioEnabled: true}) is called,
1317
+ * the sending of the audio from the same track will resume.
1286
1318
  *
1287
1319
  * @param {Object} options
1288
- * @param {boolean} options.sendShare
1289
- * @param {boolean} options.receiveShare
1320
+ * @param {boolean} options.audioEnabled [optional] enables/disables receiving and sending of main audio in the meeting
1321
+ * @param {boolean} options.videoEnabled [optional] enables/disables receiving and sending of main video in the meeting
1322
+ * @param {boolean} options.shareEnabled [optional] enables/disables receiving and sending of screen share in the meeting
1290
1323
  * @returns {Promise}
1291
1324
  * @public
1292
1325
  * @memberof Meeting
1293
1326
  */
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;
1327
+ updateMedia(options: {
1328
+ audioEnabled?: boolean;
1329
+ videoEnabled?: boolean;
1330
+ shareAudioEnabled?: boolean;
1331
+ shareVideoEnabled?: boolean;
1332
+ }): Promise<void>;
1310
1333
  /**
1311
1334
  * Acknowledge the meeting, outgoing or incoming
1312
1335
  * @param {String} type
@@ -1314,7 +1337,11 @@ export default class Meeting extends StatelessWebexPlugin {
1314
1337
  * @public
1315
1338
  * @memberof Meeting
1316
1339
  */
1317
- acknowledge(type: string): any;
1340
+ acknowledge(type: string): Promise<{
1341
+ response: any;
1342
+ }> | Promise<{
1343
+ message: string;
1344
+ }>;
1318
1345
  /**
1319
1346
  * Decline this meeting
1320
1347
  * @param {String} reason
@@ -1324,15 +1351,45 @@ export default class Meeting extends StatelessWebexPlugin {
1324
1351
  */
1325
1352
  decline(reason: string): any;
1326
1353
  /**
1327
- * Leave the current meeting
1354
+ * Returns a promise that will resolve to fetch options for leaving a meeting.
1355
+ *
1356
+ * This is to support quickly submitting a leave request when the browser/tab is closing.
1357
+ * Calling meeting.leave will not work because there are some async steps that will
1358
+ * not complete before the browser is closed. Instead, we pre-gather all the
1359
+ * information/options needed for the request(s), and then simply and quickly
1360
+ * fire the fetch(es) when pagehide is triggered.
1361
+ *
1362
+ * We must use fetch instead of request because fetch has a keepalive option that
1363
+ * allows the request it to outlive the page.
1364
+ *
1365
+ * Note: the $timings values will be wrong, but setRequestTimingsAndFetch() will
1366
+ * properly adjust them before submitting.
1367
+ *
1368
+ * @public
1328
1369
  * @param {Object} options leave options
1329
1370
  * @param {String} options.resourceId the device with which to leave from, empty if just the computer
1371
+ * @param {any} options.reason the reason for leaving
1372
+ * @returns {Promise} resolves to options to be used with fetch
1373
+ */
1374
+ buildLeaveFetchRequestOptions(options?: {
1375
+ resourceId?: string;
1376
+ reason?: any;
1377
+ }): any;
1378
+ /**
1379
+ * Leave the current meeting
1380
+ * @param {Object} options - leave options
1381
+ * @param {String} [options.resourceId] - the device with which to leave from, empty if just the computer
1382
+ * @param {String} [options.clientEventLeaveReason] - the leaveReason to include in the Call Analyzer event.
1383
+ * Must be one of: 'paired-leave' | 'one-to-one' | 'ended-by-locus' (defaults to no reason)
1384
+ * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/main/diagnostic-events.raml#L796
1385
+ * @param {String} [options.reason] - only used for logging
1330
1386
  * @returns {Promise}
1331
1387
  * @public
1332
1388
  * @memberof Meeting
1333
1389
  */
1334
1390
  leave(options?: {
1335
1391
  resourceId?: string;
1392
+ clientEventLeaveReason?: ClientEventLeaveReason;
1336
1393
  reason?: any;
1337
1394
  }): any;
1338
1395
  /**
@@ -1360,12 +1417,12 @@ export default class Meeting extends StatelessWebexPlugin {
1360
1417
  */
1361
1418
  private requestScreenShareFloor;
1362
1419
  /**
1363
- * Stops the screen share
1364
- * @returns {Promise} see #updateShare
1365
- * @public
1366
- * @memberof Meeting
1420
+ * Requests screen share floor if such request is pending.
1421
+ * It should be called whenever meeting state changes to JOINED
1422
+ *
1423
+ * @returns {void}
1367
1424
  */
1368
- stopShare(options?: {}): any;
1425
+ private requestScreenShareFloorIfPending;
1369
1426
  /**
1370
1427
  * Sends a request to Locus to release the screen share floor.
1371
1428
  * @returns {Promise} see #meetingRequest.changeMeetingFloor
@@ -1396,6 +1453,16 @@ export default class Meeting extends StatelessWebexPlugin {
1396
1453
  * @memberof Meeting
1397
1454
  */
1398
1455
  setDisallowUnmute(enabled: boolean): Promise<any>;
1456
+ /**
1457
+ * set the mute all flag for participants if you're the host
1458
+ * @returns {Promise}
1459
+ * @param {boolean} mutedEnabled
1460
+ * @param {boolean} disallowUnmuteEnabled
1461
+ * @param {boolean} muteOnEntryEnabled
1462
+ * @public
1463
+ * @memberof Meeting
1464
+ */
1465
+ setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean): Promise<any>;
1399
1466
  /**
1400
1467
  * End the recording of this meeting
1401
1468
  * @returns {Promise}
@@ -1446,7 +1513,7 @@ export default class Meeting extends StatelessWebexPlugin {
1446
1513
  * @public
1447
1514
  * @memberof Meeting
1448
1515
  */
1449
- sendDTMF(tones: string): any;
1516
+ sendDTMF(tones: string): Promise<any>;
1450
1517
  /**
1451
1518
  * Sends request to change layout type for the current meeting for the specific participant/device only
1452
1519
  * @param {String} [layoutType] a layout type that should be available in meeting constants {@link #layout_types}
@@ -1471,53 +1538,41 @@ export default class Meeting extends StatelessWebexPlugin {
1471
1538
  height: number;
1472
1539
  };
1473
1540
  }): 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
1541
  /**
1481
1542
  * Sets the quality level of the remote incoming media
1482
1543
  * @param {String} level {LOW|MEDIUM|HIGH}
1483
1544
  * @returns {Promise}
1484
1545
  */
1485
- setRemoteQualityLevel(level: string): any;
1546
+ setRemoteQualityLevel(level: string): Promise<void>;
1486
1547
  /**
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
1548
+ * Functionality for when a share audio is ended.
1549
+ * @private
1550
+ * @memberof Meeting
1551
+ * @returns {undefined}
1491
1552
  */
1492
- setMeetingQuality(level: string): any;
1553
+ private handleShareAudioStreamEnded;
1493
1554
  /**
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}
1555
+ * Functionality for when a share video is muted or unmuted.
1556
+ * @private
1557
+ * @memberof Meeting
1558
+ * @param {boolean} muted
1559
+ * @returns {undefined}
1505
1560
  */
1506
- shareScreen(options?: {
1507
- sendAudio: boolean;
1508
- sendShare: boolean;
1509
- sharePreferences: {
1510
- shareConstraints: MediaTrackConstraints;
1511
- };
1512
- }): any;
1561
+ private handleShareVideoStreamMuteStateChange;
1513
1562
  /**
1514
- * Functionality for when a share is ended.
1563
+ * Functionality for when a share video is ended.
1515
1564
  * @private
1516
1565
  * @memberof Meeting
1517
- * @param {MediaStream} localShare
1518
1566
  * @returns {undefined}
1519
1567
  */
1520
- private handleShareTrackEnded;
1568
+ private handleShareVideoStreamEnded;
1569
+ /**
1570
+ * Emits meeting:stoppedSharingLocal
1571
+ * @private
1572
+ * @returns {undefined}
1573
+ * @memberof Meeting
1574
+ */
1575
+ private triggerStoppedSharing;
1521
1576
  /**
1522
1577
  * Emits the 'network:quality' event
1523
1578
  * 1 indicates an acceptable uplink network.
@@ -1532,92 +1587,16 @@ export default class Meeting extends StatelessWebexPlugin {
1532
1587
  private sendNetworkQualityEvent;
1533
1588
  /**
1534
1589
  * Handle logging the media
1535
- * @param {Object} audioTrack The audio track
1536
- * @param {Object} videoTrack The video track
1590
+ * @param {Object} mediaProperties
1537
1591
  * @private
1538
1592
  * @returns {undefined}
1539
1593
  */
1540
1594
  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
1595
  /**
1612
1596
  *
1613
- * @returns {string} duration between sending locus join request and receiving join response
1597
+ * @returns {string} one of 'attendee','host','cohost', returns the user type of the current user
1614
1598
  */
1615
- getJoinReqResp(): number;
1616
- /**
1617
- *
1618
- * @returns {string} duration between call initiate and successful locus join (even if it is in lobby)
1619
- */
1620
- getTotalJmt(): number;
1599
+ getCurUserType(): "host" | "cohost" | "attendee";
1621
1600
  /**
1622
1601
  * End the current meeting for all
1623
1602
  * @returns {Promise}
@@ -1632,35 +1611,6 @@ export default class Meeting extends StatelessWebexPlugin {
1632
1611
  * @memberof Meeting
1633
1612
  */
1634
1613
  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
1614
  /**
1665
1615
  * starts keepAlives being sent
1666
1616
  * @returns {void}
@@ -1693,7 +1643,7 @@ export default class Meeting extends StatelessWebexPlugin {
1693
1643
  * @public
1694
1644
  * @memberof Meeting
1695
1645
  */
1696
- toggleReactions(enable: boolean): any;
1646
+ toggleReactions(enable: boolean): Promise<any>;
1697
1647
  /**
1698
1648
  * Throws if we don't have a media connection created
1699
1649
  *
@@ -1701,24 +1651,68 @@ export default class Meeting extends StatelessWebexPlugin {
1701
1651
  */
1702
1652
  private checkMediaConnection;
1703
1653
  /**
1704
- * Publishes specified local tracks in the meeting
1654
+ * Method to enable or disable the 'Music mode' effect on audio stream
1705
1655
  *
1706
- * @param {Object} tracks
1656
+ * @param {boolean} shouldEnableMusicMode
1707
1657
  * @returns {Promise}
1708
1658
  */
1709
- publishTracks(tracks: {
1710
- microphone?: MediaStreamTrack;
1711
- camera?: MediaStreamTrack;
1712
- screenShare: {
1713
- audio?: MediaStreamTrack;
1714
- video?: MediaStreamTrack;
1715
- };
1716
- }): Promise<void>;
1659
+ enableMusicMode(shouldEnableMusicMode: boolean): Promise<void>;
1660
+ /** Updates the tracks being sent on the transcoded media connection
1661
+ *
1662
+ * @returns {Promise<void>}
1663
+ */
1664
+ private updateTranscodedMediaConnection;
1665
+ /**
1666
+ * Publishes a stream.
1667
+ *
1668
+ * @param {MediaType} mediaType of the stream
1669
+ * @param {LocalStream} stream to publish
1670
+ * @returns {Promise}
1671
+ */
1672
+ private publishStream;
1673
+ /**
1674
+ * Un-publishes a stream.
1675
+ *
1676
+ * @param {MediaType} mediaType of the stream
1677
+ * @param {LocalStream} stream to unpublish
1678
+ * @returns {Promise}
1679
+ */
1680
+ private unpublishStream;
1681
+ /**
1682
+ * Publishes specified local streams in the meeting
1683
+ *
1684
+ * @param {Object} streams
1685
+ * @returns {Promise}
1686
+ */
1687
+ publishStreams(streams: LocalStreams): Promise<void>;
1717
1688
  /**
1718
- * Un-publishes specified local tracks in the meeting
1689
+ * Un-publishes specified local streams in the meeting
1719
1690
  *
1720
- * @param {Array<MediaStreamTrack>} tracks
1691
+ * @param {Array<LocalStream>} streams
1721
1692
  * @returns {Promise}
1722
1693
  */
1723
- unpublishTracks(tracks: MediaStreamTrack[]): Promise<void>;
1694
+ unpublishStreams(streams: LocalStream[]): Promise<void>;
1695
+ /**
1696
+ * Gets permission token expiry information including timeLeft, expiryTime, currentTime
1697
+ * (from the time the function has been fired)
1698
+ *
1699
+ * @returns {object} permissionTokenExpiryInfo
1700
+ * @returns {number} permissionTokenExpiryInfo.timeLeft The time left for token to expire
1701
+ * @returns {number} permissionTokenExpiryInfo.expiryTime The expiry time of permission token from the server
1702
+ * @returns {number} permissionTokenExpiryInfo.currentTime The current time of the local machine
1703
+ */
1704
+ getPermissionTokenExpiryInfo(): {
1705
+ timeLeft: number;
1706
+ expiryTime: number;
1707
+ currentTime: number;
1708
+ };
1709
+ /**
1710
+ * Check if there is enough time left till the permission token expires
1711
+ * If not - refresh the permission token
1712
+ *
1713
+ * @param {number} threshold - time in seconds
1714
+ * @param {string} reason - reason for refreshing the permission token
1715
+ * @returns {Promise<void>}
1716
+ */
1717
+ checkAndRefreshPermissionToken(threshold: number, reason: string): Promise<void>;
1724
1718
  }