@webex/plugin-meetings 2.60.0 → 2.60.1-next.10

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 (539) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.d.ts +42 -0
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.d.ts +31 -0
  6. package/dist/annotation/constants.js +41 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.d.ts +117 -0
  9. package/dist/annotation/index.js +357 -0
  10. package/dist/annotation/index.js.map +1 -0
  11. package/dist/breakouts/breakout.d.ts +8 -0
  12. package/dist/breakouts/breakout.js +215 -0
  13. package/dist/breakouts/breakout.js.map +1 -0
  14. package/dist/breakouts/collection.d.ts +5 -0
  15. package/dist/breakouts/collection.js +22 -0
  16. package/dist/breakouts/collection.js.map +1 -0
  17. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  18. package/dist/breakouts/edit-lock-error.js +51 -0
  19. package/dist/breakouts/edit-lock-error.js.map +1 -0
  20. package/dist/breakouts/events.d.ts +8 -0
  21. package/dist/breakouts/events.js +44 -0
  22. package/dist/breakouts/events.js.map +1 -0
  23. package/dist/breakouts/index.d.ts +5 -0
  24. package/dist/breakouts/index.js +1047 -0
  25. package/dist/breakouts/index.js.map +1 -0
  26. package/dist/breakouts/request.d.ts +22 -0
  27. package/dist/breakouts/request.js +77 -0
  28. package/dist/breakouts/request.js.map +1 -0
  29. package/dist/breakouts/utils.d.ts +15 -0
  30. package/dist/breakouts/utils.js +64 -0
  31. package/dist/breakouts/utils.js.map +1 -0
  32. package/dist/common/browser-detection.js +2 -3
  33. package/dist/common/browser-detection.js.map +1 -1
  34. package/dist/common/collection.js +3 -4
  35. package/dist/common/collection.js.map +1 -1
  36. package/dist/common/config.js +1 -2
  37. package/dist/common/config.js.map +1 -1
  38. package/dist/common/errors/captcha-error.js +1 -2
  39. package/dist/common/errors/captcha-error.js.map +1 -1
  40. package/dist/common/errors/intent-to-join.js +1 -2
  41. package/dist/common/errors/intent-to-join.js.map +1 -1
  42. package/dist/common/errors/join-meeting.js +1 -2
  43. package/dist/common/errors/join-meeting.js.map +1 -1
  44. package/dist/common/errors/media.js +1 -2
  45. package/dist/common/errors/media.js.map +1 -1
  46. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  47. package/dist/common/errors/no-meeting-info.js +50 -0
  48. package/dist/common/errors/no-meeting-info.js.map +1 -0
  49. package/dist/common/errors/parameter.js +3 -4
  50. package/dist/common/errors/parameter.js.map +1 -1
  51. package/dist/common/errors/password-error.js +1 -2
  52. package/dist/common/errors/password-error.js.map +1 -1
  53. package/dist/common/errors/permission.js +1 -2
  54. package/dist/common/errors/permission.js.map +1 -1
  55. package/dist/common/errors/{reclaim-host-role-error.js → reclaim-host-role-errors.js} +7 -11
  56. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  57. package/dist/common/errors/reconnection-in-progress.js +1 -2
  58. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  59. package/dist/common/errors/reconnection.js +1 -2
  60. package/dist/common/errors/reconnection.js.map +1 -1
  61. package/dist/common/errors/stats.js +1 -2
  62. package/dist/common/errors/stats.js.map +1 -1
  63. package/dist/common/errors/webex-errors.d.ts +20 -8
  64. package/dist/common/errors/webex-errors.js +48 -28
  65. package/dist/common/errors/webex-errors.js.map +1 -1
  66. package/dist/common/errors/webex-meetings-error.js +1 -2
  67. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  68. package/dist/common/events/events-scope.js +1 -2
  69. package/dist/common/events/events-scope.js.map +1 -1
  70. package/dist/common/events/events.js +1 -2
  71. package/dist/common/events/events.js.map +1 -1
  72. package/dist/common/events/trigger-proxy.js +1 -2
  73. package/dist/common/events/trigger-proxy.js.map +1 -1
  74. package/dist/common/events/util.js +1 -2
  75. package/dist/common/events/util.js.map +1 -1
  76. package/dist/common/logs/logger-config.js +1 -2
  77. package/dist/common/logs/logger-config.js.map +1 -1
  78. package/dist/common/logs/logger-proxy.js +2 -3
  79. package/dist/common/logs/logger-proxy.js.map +1 -1
  80. package/dist/common/logs/request.d.ts +3 -1
  81. package/dist/common/logs/request.js +8 -5
  82. package/dist/common/logs/request.js.map +1 -1
  83. package/dist/common/queue.d.ts +9 -7
  84. package/dist/common/queue.js +22 -9
  85. package/dist/common/queue.js.map +1 -1
  86. package/dist/config.d.ts +6 -7
  87. package/dist/config.js +8 -10
  88. package/dist/config.js.map +1 -1
  89. package/dist/constants.d.ts +234 -100
  90. package/dist/constants.js +433 -444
  91. package/dist/constants.js.map +1 -1
  92. package/dist/controls-options-manager/constants.js +3 -6
  93. package/dist/controls-options-manager/constants.js.map +1 -1
  94. package/dist/controls-options-manager/enums.d.ts +11 -1
  95. package/dist/controls-options-manager/enums.js +15 -6
  96. package/dist/controls-options-manager/enums.js.map +1 -1
  97. package/dist/controls-options-manager/index.d.ts +17 -1
  98. package/dist/controls-options-manager/index.js +127 -38
  99. package/dist/controls-options-manager/index.js.map +1 -1
  100. package/dist/controls-options-manager/types.d.ts +43 -0
  101. package/dist/controls-options-manager/types.js +7 -0
  102. package/dist/controls-options-manager/types.js.map +1 -0
  103. package/dist/controls-options-manager/util.d.ts +1 -7
  104. package/dist/controls-options-manager/util.js +309 -19
  105. package/dist/controls-options-manager/util.js.map +1 -1
  106. package/dist/index.d.ts +6 -3
  107. package/dist/index.js +121 -5
  108. package/dist/index.js.map +1 -1
  109. package/dist/interceptors/index.d.ts +2 -0
  110. package/dist/interceptors/index.js +15 -0
  111. package/dist/interceptors/index.js.map +1 -0
  112. package/dist/interceptors/locusRetry.d.ts +27 -0
  113. package/dist/interceptors/locusRetry.js +94 -0
  114. package/dist/interceptors/locusRetry.js.map +1 -0
  115. package/dist/interpretation/collection.d.ts +5 -0
  116. package/dist/interpretation/collection.js +22 -0
  117. package/dist/interpretation/collection.js.map +1 -0
  118. package/dist/interpretation/index.d.ts +5 -0
  119. package/dist/interpretation/index.js +365 -0
  120. package/dist/interpretation/index.js.map +1 -0
  121. package/dist/interpretation/siLanguage.d.ts +5 -0
  122. package/dist/interpretation/siLanguage.js +24 -0
  123. package/dist/interpretation/siLanguage.js.map +1 -0
  124. package/dist/locus-info/controlsUtils.js +100 -11
  125. package/dist/locus-info/controlsUtils.js.map +1 -1
  126. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  127. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  128. package/dist/locus-info/fullState.js +1 -2
  129. package/dist/locus-info/fullState.js.map +1 -1
  130. package/dist/locus-info/hostUtils.js +1 -2
  131. package/dist/locus-info/hostUtils.js.map +1 -1
  132. package/dist/locus-info/index.d.ts +57 -4
  133. package/dist/locus-info/index.js +425 -84
  134. package/dist/locus-info/index.js.map +1 -1
  135. package/dist/locus-info/infoUtils.js +13 -5
  136. package/dist/locus-info/infoUtils.js.map +1 -1
  137. package/dist/locus-info/mediaSharesUtils.js +58 -3
  138. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  139. package/dist/locus-info/parser.d.ts +66 -6
  140. package/dist/locus-info/parser.js +253 -80
  141. package/dist/locus-info/parser.js.map +1 -1
  142. package/dist/locus-info/selfUtils.js +97 -13
  143. package/dist/locus-info/selfUtils.js.map +1 -1
  144. package/dist/media/index.d.ts +2 -0
  145. package/dist/media/index.js +107 -319
  146. package/dist/media/index.js.map +1 -1
  147. package/dist/media/properties.d.ts +38 -53
  148. package/dist/media/properties.js +96 -153
  149. package/dist/media/properties.js.map +1 -1
  150. package/dist/media/util.js +1 -22
  151. package/dist/media/util.js.map +1 -1
  152. package/dist/mediaQualityMetrics/config.d.ts +234 -230
  153. package/dist/mediaQualityMetrics/config.js +302 -498
  154. package/dist/mediaQualityMetrics/config.js.map +1 -1
  155. package/dist/meeting/in-meeting-actions.d.ts +88 -0
  156. package/dist/meeting/in-meeting-actions.js +94 -3
  157. package/dist/meeting/in-meeting-actions.js.map +1 -1
  158. package/dist/meeting/index.d.ts +705 -520
  159. package/dist/meeting/index.js +5047 -3089
  160. package/dist/meeting/index.js.map +1 -1
  161. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  162. package/dist/meeting/locusMediaRequest.js +291 -0
  163. package/dist/meeting/locusMediaRequest.js.map +1 -0
  164. package/dist/meeting/muteState.d.ts +93 -25
  165. package/dist/meeting/muteState.js +224 -133
  166. package/dist/meeting/muteState.js.map +1 -1
  167. package/dist/meeting/request.d.ts +82 -47
  168. package/dist/meeting/request.js +304 -199
  169. package/dist/meeting/request.js.map +1 -1
  170. package/dist/meeting/request.type.d.ts +11 -0
  171. package/dist/meeting/request.type.js +7 -0
  172. package/dist/meeting/request.type.js.map +1 -0
  173. package/dist/meeting/state.js +1 -2
  174. package/dist/meeting/state.js.map +1 -1
  175. package/dist/meeting/util.d.ts +118 -1
  176. package/dist/meeting/util.js +676 -435
  177. package/dist/meeting/util.js.map +1 -1
  178. package/dist/meeting/voicea-meeting.d.ts +20 -0
  179. package/dist/meeting/voicea-meeting.js +201 -0
  180. package/dist/meeting/voicea-meeting.js.map +1 -0
  181. package/dist/meeting-info/collection.js +3 -4
  182. package/dist/meeting-info/collection.js.map +1 -1
  183. package/dist/meeting-info/index.d.ts +13 -1
  184. package/dist/meeting-info/index.js +74 -7
  185. package/dist/meeting-info/index.js.map +1 -1
  186. package/dist/meeting-info/meeting-info-v2.d.ts +31 -1
  187. package/dist/meeting-info/meeting-info-v2.js +200 -63
  188. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  189. package/dist/meeting-info/request.js +1 -2
  190. package/dist/meeting-info/request.js.map +1 -1
  191. package/dist/meeting-info/util.js +2 -3
  192. package/dist/meeting-info/util.js.map +1 -1
  193. package/dist/meeting-info/utilv2.js +39 -41
  194. package/dist/meeting-info/utilv2.js.map +1 -1
  195. package/dist/meetings/collection.d.ts +17 -0
  196. package/dist/meetings/collection.js +42 -4
  197. package/dist/meetings/collection.js.map +1 -1
  198. package/dist/meetings/index.d.ts +114 -20
  199. package/dist/meetings/index.js +540 -126
  200. package/dist/meetings/index.js.map +1 -1
  201. package/dist/meetings/meetings.types.d.ts +4 -0
  202. package/dist/meetings/meetings.types.js +7 -0
  203. package/dist/meetings/meetings.types.js.map +1 -0
  204. package/dist/meetings/request.js +4 -3
  205. package/dist/meetings/request.js.map +1 -1
  206. package/dist/meetings/util.js +107 -6
  207. package/dist/meetings/util.js.map +1 -1
  208. package/dist/member/index.d.ts +13 -1
  209. package/dist/member/index.js +45 -2
  210. package/dist/member/index.js.map +1 -1
  211. package/dist/member/member.types.js +3 -4
  212. package/dist/member/member.types.js.map +1 -1
  213. package/dist/member/types.d.ts +32 -0
  214. package/dist/member/types.js +23 -0
  215. package/dist/member/types.js.map +1 -0
  216. package/dist/member/util.js +120 -29
  217. package/dist/member/util.js.map +1 -1
  218. package/dist/members/collection.d.ts +5 -0
  219. package/dist/members/collection.js +11 -2
  220. package/dist/members/collection.js.map +1 -1
  221. package/dist/members/index.d.ts +56 -11
  222. package/dist/members/index.js +174 -47
  223. package/dist/members/index.js.map +1 -1
  224. package/dist/members/request.d.ts +67 -11
  225. package/dist/members/request.js +102 -54
  226. package/dist/members/request.js.map +1 -1
  227. package/dist/members/types.js +3 -4
  228. package/dist/members/types.js.map +1 -1
  229. package/dist/members/util.d.ts +214 -1
  230. package/dist/members/util.js +327 -284
  231. package/dist/members/util.js.map +1 -1
  232. package/dist/metrics/constants.d.ts +15 -6
  233. package/dist/metrics/constants.js +17 -9
  234. package/dist/metrics/constants.js.map +1 -1
  235. package/dist/metrics/index.d.ts +4 -111
  236. package/dist/metrics/index.js +4 -452
  237. package/dist/metrics/index.js.map +1 -1
  238. package/dist/multistream/mediaRequestManager.d.ts +118 -0
  239. package/dist/multistream/mediaRequestManager.js +344 -0
  240. package/dist/multistream/mediaRequestManager.js.map +1 -0
  241. package/dist/multistream/receiveSlot.d.ts +68 -0
  242. package/dist/multistream/receiveSlot.js +200 -0
  243. package/dist/multistream/receiveSlot.js.map +1 -0
  244. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  245. package/dist/multistream/receiveSlotManager.js +174 -0
  246. package/dist/multistream/receiveSlotManager.js.map +1 -0
  247. package/dist/multistream/remoteMedia.d.ts +72 -0
  248. package/dist/multistream/remoteMedia.js +268 -0
  249. package/dist/multistream/remoteMedia.js.map +1 -0
  250. package/dist/multistream/remoteMediaGroup.d.ts +47 -0
  251. package/dist/multistream/remoteMediaGroup.js +267 -0
  252. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  253. package/dist/multistream/remoteMediaManager.d.ts +285 -0
  254. package/dist/multistream/remoteMediaManager.js +1211 -0
  255. package/dist/multistream/remoteMediaManager.js.map +1 -0
  256. package/dist/multistream/sendSlotManager.d.ts +61 -0
  257. package/dist/multistream/sendSlotManager.js +236 -0
  258. package/dist/multistream/sendSlotManager.js.map +1 -0
  259. package/dist/networkQualityMonitor/index.js +5 -4
  260. package/dist/networkQualityMonitor/index.js.map +1 -1
  261. package/dist/personal-meeting-room/index.js +2 -3
  262. package/dist/personal-meeting-room/index.js.map +1 -1
  263. package/dist/personal-meeting-room/request.js +2 -3
  264. package/dist/personal-meeting-room/request.js.map +1 -1
  265. package/dist/personal-meeting-room/util.js +1 -2
  266. package/dist/personal-meeting-room/util.js.map +1 -1
  267. package/dist/reachability/clusterReachability.d.ts +109 -0
  268. package/dist/reachability/clusterReachability.js +357 -0
  269. package/dist/reachability/clusterReachability.js.map +1 -0
  270. package/dist/reachability/index.d.ts +61 -95
  271. package/dist/reachability/index.js +304 -392
  272. package/dist/reachability/index.js.map +1 -1
  273. package/dist/reachability/request.d.ts +7 -3
  274. package/dist/reachability/request.js +18 -10
  275. package/dist/reachability/request.js.map +1 -1
  276. package/dist/reachability/util.d.ts +8 -0
  277. package/dist/reachability/util.js +29 -0
  278. package/dist/reachability/util.js.map +1 -0
  279. package/dist/reactions/constants.d.ts +3 -0
  280. package/dist/reactions/constants.js +12 -0
  281. package/dist/reactions/constants.js.map +1 -0
  282. package/dist/reactions/reactions.d.ts +2 -2
  283. package/dist/reactions/reactions.js +4 -6
  284. package/dist/reactions/reactions.js.map +1 -1
  285. package/dist/reactions/reactions.type.d.ts +23 -3
  286. package/dist/reactions/reactions.type.js +21 -23
  287. package/dist/reactions/reactions.type.js.map +1 -1
  288. package/dist/reconnection-manager/index.d.ts +32 -8
  289. package/dist/reconnection-manager/index.js +285 -232
  290. package/dist/reconnection-manager/index.js.map +1 -1
  291. package/dist/recording-controller/enums.js +4 -5
  292. package/dist/recording-controller/enums.js.map +1 -1
  293. package/dist/recording-controller/index.d.ts +15 -1
  294. package/dist/recording-controller/index.js +57 -46
  295. package/dist/recording-controller/index.js.map +1 -1
  296. package/dist/recording-controller/util.d.ts +5 -4
  297. package/dist/recording-controller/util.js +10 -10
  298. package/dist/recording-controller/util.js.map +1 -1
  299. package/dist/roap/index.d.ts +9 -47
  300. package/dist/roap/index.js +100 -238
  301. package/dist/roap/index.js.map +1 -1
  302. package/dist/roap/request.d.ts +18 -12
  303. package/dist/roap/request.js +126 -180
  304. package/dist/roap/request.js.map +1 -1
  305. package/dist/roap/turnDiscovery.d.ts +27 -16
  306. package/dist/roap/turnDiscovery.js +115 -105
  307. package/dist/roap/turnDiscovery.js.map +1 -1
  308. package/dist/rtcMetrics/constants.d.ts +4 -0
  309. package/dist/rtcMetrics/constants.js +11 -0
  310. package/dist/rtcMetrics/constants.js.map +1 -0
  311. package/dist/rtcMetrics/index.d.ts +54 -0
  312. package/dist/rtcMetrics/index.js +140 -0
  313. package/dist/rtcMetrics/index.js.map +1 -0
  314. package/dist/statsAnalyzer/global.d.ts +1 -83
  315. package/dist/statsAnalyzer/global.js +2 -85
  316. package/dist/statsAnalyzer/global.js.map +1 -1
  317. package/dist/statsAnalyzer/index.d.ts +50 -30
  318. package/dist/statsAnalyzer/index.js +436 -511
  319. package/dist/statsAnalyzer/index.js.map +1 -1
  320. package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
  321. package/dist/statsAnalyzer/mqaUtil.js +130 -90
  322. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  323. package/dist/transcription/index.js +1 -2
  324. package/dist/transcription/index.js.map +1 -1
  325. package/dist/webinar/collection.d.ts +16 -0
  326. package/dist/webinar/collection.js +43 -0
  327. package/dist/webinar/collection.js.map +1 -0
  328. package/dist/webinar/index.d.ts +5 -0
  329. package/dist/webinar/index.js +68 -0
  330. package/dist/webinar/index.js.map +1 -0
  331. package/package.json +39 -26
  332. package/src/annotation/annotation.types.ts +50 -0
  333. package/src/annotation/constants.ts +36 -0
  334. package/src/annotation/index.ts +328 -0
  335. package/src/breakouts/README.md +220 -0
  336. package/src/breakouts/breakout.ts +188 -0
  337. package/src/breakouts/collection.ts +19 -0
  338. package/src/breakouts/edit-lock-error.ts +25 -0
  339. package/src/breakouts/events.ts +56 -0
  340. package/src/breakouts/index.ts +925 -0
  341. package/src/breakouts/request.ts +55 -0
  342. package/src/breakouts/utils.ts +57 -0
  343. package/src/common/errors/no-meeting-info.ts +24 -0
  344. package/src/common/errors/webex-errors.ts +36 -12
  345. package/src/common/logs/logger-proxy.ts +1 -1
  346. package/src/common/logs/request.ts +5 -1
  347. package/src/common/queue.ts +22 -8
  348. package/src/config.ts +6 -7
  349. package/src/constants.ts +265 -100
  350. package/src/controls-options-manager/enums.ts +12 -0
  351. package/src/controls-options-manager/index.ts +116 -21
  352. package/src/controls-options-manager/types.ts +59 -0
  353. package/src/controls-options-manager/util.ts +294 -14
  354. package/src/index.ts +44 -0
  355. package/src/interceptors/index.ts +3 -0
  356. package/src/interceptors/locusRetry.ts +67 -0
  357. package/src/interpretation/README.md +60 -0
  358. package/src/interpretation/collection.ts +19 -0
  359. package/src/interpretation/index.ts +332 -0
  360. package/src/interpretation/siLanguage.ts +18 -0
  361. package/src/locus-info/controlsUtils.ts +110 -0
  362. package/src/locus-info/index.ts +450 -61
  363. package/src/locus-info/infoUtils.ts +14 -2
  364. package/src/locus-info/mediaSharesUtils.ts +64 -0
  365. package/src/locus-info/parser.ts +258 -47
  366. package/src/locus-info/selfUtils.ts +85 -2
  367. package/src/media/index.ts +153 -370
  368. package/src/media/properties.ts +106 -136
  369. package/src/media/util.ts +0 -21
  370. package/src/mediaQualityMetrics/config.ts +244 -377
  371. package/src/meeting/in-meeting-actions.ts +176 -0
  372. package/src/meeting/index.ts +4306 -2581
  373. package/src/meeting/locusMediaRequest.ts +313 -0
  374. package/src/meeting/muteState.ts +224 -138
  375. package/src/meeting/request.ts +214 -127
  376. package/src/meeting/request.type.ts +13 -0
  377. package/src/meeting/util.ts +687 -423
  378. package/src/meeting/voicea-meeting.ts +161 -0
  379. package/src/meeting-info/index.ts +81 -8
  380. package/src/meeting-info/meeting-info-v2.ts +163 -13
  381. package/src/meeting-info/util.ts +1 -1
  382. package/src/meeting-info/utilv2.ts +28 -28
  383. package/src/meetings/collection.ts +33 -0
  384. package/src/meetings/index.ts +529 -127
  385. package/src/meetings/meetings.types.ts +12 -0
  386. package/src/meetings/request.ts +2 -0
  387. package/src/meetings/util.ts +116 -5
  388. package/src/member/index.ts +43 -1
  389. package/src/member/types.ts +38 -0
  390. package/src/member/util.ts +125 -28
  391. package/src/members/collection.ts +8 -0
  392. package/src/members/index.ts +187 -52
  393. package/src/members/request.ts +87 -27
  394. package/src/members/util.ts +332 -291
  395. package/src/metrics/constants.ts +15 -6
  396. package/src/metrics/index.ts +1 -471
  397. package/src/multistream/mediaRequestManager.ts +440 -0
  398. package/src/multistream/receiveSlot.ts +184 -0
  399. package/src/multistream/receiveSlotManager.ts +166 -0
  400. package/src/multistream/remoteMedia.ts +254 -0
  401. package/src/multistream/remoteMediaGroup.ts +284 -0
  402. package/src/multistream/remoteMediaManager.ts +1145 -0
  403. package/src/multistream/sendSlotManager.ts +170 -0
  404. package/src/networkQualityMonitor/index.ts +6 -6
  405. package/src/reachability/clusterReachability.ts +320 -0
  406. package/src/reachability/index.ts +246 -347
  407. package/src/reachability/request.ts +17 -8
  408. package/src/reachability/util.ts +24 -0
  409. package/src/reactions/constants.ts +4 -0
  410. package/src/reactions/reactions.ts +4 -4
  411. package/src/reactions/reactions.type.ts +30 -4
  412. package/src/reconnection-manager/index.ts +168 -156
  413. package/src/recording-controller/index.ts +20 -3
  414. package/src/recording-controller/util.ts +26 -9
  415. package/src/roap/index.ts +96 -241
  416. package/src/roap/request.ts +74 -148
  417. package/src/roap/turnDiscovery.ts +62 -56
  418. package/src/rtcMetrics/constants.ts +3 -0
  419. package/src/rtcMetrics/index.ts +124 -0
  420. package/src/statsAnalyzer/global.ts +1 -84
  421. package/src/statsAnalyzer/index.ts +479 -645
  422. package/src/statsAnalyzer/mqaUtil.ts +128 -126
  423. package/src/webinar/collection.ts +31 -0
  424. package/src/webinar/index.ts +62 -0
  425. package/test/integration/spec/converged-space-meetings.js +233 -0
  426. package/test/integration/spec/journey.js +320 -264
  427. package/test/integration/spec/space-meeting.js +77 -4
  428. package/test/unit/spec/annotation/index.ts +418 -0
  429. package/test/unit/spec/breakouts/breakout.ts +237 -0
  430. package/test/unit/spec/breakouts/collection.ts +15 -0
  431. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  432. package/test/unit/spec/breakouts/events.ts +89 -0
  433. package/test/unit/spec/breakouts/index.ts +1790 -0
  434. package/test/unit/spec/breakouts/request.ts +104 -0
  435. package/test/unit/spec/breakouts/utils.js +72 -0
  436. package/test/unit/spec/common/queue.js +31 -2
  437. package/test/unit/spec/controls-options-manager/index.js +163 -0
  438. package/test/unit/spec/controls-options-manager/util.js +576 -60
  439. package/test/unit/spec/fixture/locus.js +1 -0
  440. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  441. package/test/unit/spec/interpretation/collection.ts +15 -0
  442. package/test/unit/spec/interpretation/index.ts +589 -0
  443. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  444. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  445. package/test/unit/spec/locus-info/index.js +1438 -16
  446. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  447. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  448. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  449. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  450. package/test/unit/spec/locus-info/parser.js +116 -35
  451. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  452. package/test/unit/spec/media/index.ts +290 -0
  453. package/test/unit/spec/media/properties.ts +75 -84
  454. package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
  455. package/test/unit/spec/meeting/index.js +8886 -2815
  456. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  457. package/test/unit/spec/meeting/muteState.js +409 -213
  458. package/test/unit/spec/meeting/request.js +523 -43
  459. package/test/unit/spec/meeting/utils.js +834 -24
  460. package/test/unit/spec/meeting-info/index.js +300 -0
  461. package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
  462. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  463. package/test/unit/spec/meetings/collection.js +26 -0
  464. package/test/unit/spec/meetings/index.js +1446 -217
  465. package/test/unit/spec/meetings/utils.js +202 -2
  466. package/test/unit/spec/member/index.js +32 -9
  467. package/test/unit/spec/member/util.js +499 -61
  468. package/test/unit/spec/members/index.js +394 -5
  469. package/test/unit/spec/members/request.js +206 -27
  470. package/test/unit/spec/members/utils.js +173 -38
  471. package/test/unit/spec/metrics/index.js +1 -50
  472. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  473. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  474. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  475. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  476. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  477. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  478. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  479. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  480. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  481. package/test/unit/spec/reachability/index.ts +532 -24
  482. package/test/unit/spec/reachability/request.js +68 -0
  483. package/test/unit/spec/reachability/util.ts +40 -0
  484. package/test/unit/spec/reconnection-manager/index.js +163 -24
  485. package/test/unit/spec/recording-controller/index.js +293 -218
  486. package/test/unit/spec/recording-controller/util.js +223 -96
  487. package/test/unit/spec/roap/index.ts +187 -77
  488. package/test/unit/spec/roap/request.ts +255 -0
  489. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  490. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  491. package/test/unit/spec/stats-analyzer/index.js +644 -165
  492. package/test/unit/spec/webinar/collection.ts +13 -0
  493. package/test/unit/spec/webinar/index.ts +60 -0
  494. package/test/utils/constants.js +9 -0
  495. package/test/utils/integrationTestUtils.js +46 -0
  496. package/test/utils/testUtils.js +0 -45
  497. package/test/utils/webex-config.js +4 -0
  498. package/test/utils/webex-test-users.js +7 -3
  499. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  500. package/dist/meeting/effectsState.d.ts +0 -42
  501. package/dist/meeting/effectsState.js +0 -260
  502. package/dist/meeting/effectsState.js.map +0 -1
  503. package/dist/metrics/config.d.ts +0 -169
  504. package/dist/metrics/config.js +0 -289
  505. package/dist/metrics/config.js.map +0 -1
  506. package/dist/peer-connection-manager/index.d.ts +0 -6
  507. package/dist/peer-connection-manager/index.js +0 -671
  508. package/dist/peer-connection-manager/index.js.map +0 -1
  509. package/dist/peer-connection-manager/util.d.ts +0 -6
  510. package/dist/peer-connection-manager/util.js +0 -110
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.d.ts +0 -10
  513. package/dist/roap/collection.js +0 -63
  514. package/dist/roap/collection.js.map +0 -1
  515. package/dist/roap/handler.d.ts +0 -47
  516. package/dist/roap/handler.js +0 -279
  517. package/dist/roap/handler.js.map +0 -1
  518. package/dist/roap/state.d.ts +0 -9
  519. package/dist/roap/state.js +0 -127
  520. package/dist/roap/state.js.map +0 -1
  521. package/dist/roap/util.d.ts +0 -2
  522. package/dist/roap/util.js +0 -76
  523. package/dist/roap/util.js.map +0 -1
  524. package/src/index.js +0 -15
  525. package/src/meeting/effectsState.ts +0 -209
  526. package/src/metrics/config.ts +0 -485
  527. package/src/peer-connection-manager/index.ts +0 -847
  528. package/src/peer-connection-manager/util.ts +0 -119
  529. package/src/roap/collection.ts +0 -62
  530. package/src/roap/handler.ts +0 -294
  531. package/src/roap/state.ts +0 -156
  532. package/src/roap/util.ts +0 -100
  533. package/test/unit/spec/meeting/effectsState.js +0 -281
  534. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  535. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  536. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  537. package/test/unit/spec/roap/util.js +0 -30
  538. /package/dist/common/errors/{reclaim-host-role-error.d.ts → reclaim-host-role-errors.d.ts} +0 -0
  539. /package/src/common/errors/{reclaim-host-role-error.ts → reclaim-host-role-errors.ts} +0 -0
@@ -1,22 +1,91 @@
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
- import Transcription from '../transcription';
11
- import { ReactionType, SkinToneType } from '../reactions/reactions.type';
13
+ import { NETWORK_STATUS } from '../constants';
14
+ import { ReceiveSlotManager } from '../multistream/receiveSlotManager';
15
+ import { MediaRequestManager } from '../multistream/mediaRequestManager';
16
+ import { Configuration as RemoteMediaManagerConfiguration, RemoteMediaManager } from '../multistream/remoteMediaManager';
17
+ import { ReactionServerType, SkinToneType } from '../reactions/reactions.type';
12
18
  import InMeetingActions from './in-meeting-actions';
13
19
  import RecordingController from '../recording-controller';
14
20
  import ControlsOptionsManager from '../controls-options-manager';
21
+ import { LocusMediaRequest } from './locusMediaRequest';
22
+ export type CaptionData = {
23
+ id: string;
24
+ isFinal: boolean;
25
+ translations: Array<string>;
26
+ text: string;
27
+ currentCaptionLanguage: string;
28
+ timestamp: string;
29
+ speaker: string;
30
+ };
31
+ export type Transcription = {
32
+ languageOptions: {
33
+ captionLanguages?: string;
34
+ maxLanguages?: number;
35
+ spokenLanguages?: Array<string>;
36
+ currentCaptionLanguage?: string;
37
+ requestedCaptionLanguage?: string;
38
+ currentSpokenLanguage?: string;
39
+ };
40
+ status: string;
41
+ isListening: boolean;
42
+ commandText: string;
43
+ captions: Array<CaptionData>;
44
+ highlights: Array<any>;
45
+ showCaptionBox: boolean;
46
+ transcribingRequestStatus: string;
47
+ isCaptioning: boolean;
48
+ speakerProxy: Map<string, any>;
49
+ interimCaptions: Map<string, CaptionData>;
50
+ };
51
+ export type LocalStreams = {
52
+ microphone?: LocalMicrophoneStream;
53
+ camera?: LocalCameraStream;
54
+ screenShare?: {
55
+ audio?: LocalSystemAudioStream;
56
+ video?: LocalDisplayStream;
57
+ };
58
+ };
59
+ export type AddMediaOptions = {
60
+ localStreams?: LocalStreams;
61
+ audioEnabled?: boolean;
62
+ videoEnabled?: boolean;
63
+ shareAudioEnabled?: boolean;
64
+ shareVideoEnabled?: boolean;
65
+ remoteMediaManagerConfig?: RemoteMediaManagerConfiguration;
66
+ bundlePolicy?: BundlePolicy;
67
+ allowMediaInLobby?: boolean;
68
+ };
69
+ export type CallStateForMetrics = {
70
+ correlationId?: string;
71
+ joinTrigger?: string;
72
+ loginType?: string;
73
+ };
15
74
  export declare const MEDIA_UPDATE_TYPE: {
16
- ALL: string;
17
- AUDIO: string;
18
- VIDEO: string;
19
- SHARE: string;
75
+ TRANSCODED_MEDIA_CONNECTION: string;
76
+ SHARE_FLOOR_REQUEST: string;
77
+ UPDATE_MEDIA: string;
78
+ };
79
+ export declare enum ScreenShareFloorStatus {
80
+ PENDING = "floor_request_pending",
81
+ GRANTED = "floor_request_granted",
82
+ RELEASED = "floor_released"
83
+ }
84
+ type FetchMeetingInfoParams = {
85
+ password?: string;
86
+ captchaCode?: string;
87
+ extraParams?: Record<string, any>;
88
+ sendCAevents?: boolean;
20
89
  };
21
90
  /**
22
91
  * MediaDirection
@@ -29,15 +98,6 @@ export declare const MEDIA_UPDATE_TYPE: {
29
98
  * @property {boolean} receiveShare
30
99
  * @property {boolean} isSharing
31
100
  */
32
- /**
33
- * AudioVideo
34
- * @typedef {Object} AudioVideo
35
- * @property {Object} audio
36
- * @property {String} audio.deviceId
37
- * @property {Object} video
38
- * @property {String} video.deviceId
39
- * @property {String} video.localVideoQuality // [240p, 360p, 480p, 720p, 1080p]
40
- */
41
101
  /**
42
102
  * SharePreferences
43
103
  * @typedef {Object} SharePreferences
@@ -51,16 +111,9 @@ export declare const MEDIA_UPDATE_TYPE: {
51
111
  * @property {String} [pin]
52
112
  * @property {Boolean} [moderator]
53
113
  * @property {String|Object} [meetingQuality]
54
- * @property {String} [meetingQuality.local]
55
114
  * @property {String} [meetingQuality.remote]
56
115
  * @property {Boolean} [rejoin]
57
- */
58
- /**
59
- * SendOptions
60
- * @typedef {Object} SendOptions
61
- * @property {Boolean} sendAudio
62
- * @property {Boolean} sendVideo
63
- * @property {Boolean} sendShare
116
+ * @property {Boolean} [enableMultistream]
64
117
  */
65
118
  /**
66
119
  * Recording
@@ -143,7 +196,11 @@ export declare const MEDIA_UPDATE_TYPE: {
143
196
  * @instance
144
197
  * @type {Object}
145
198
  * @property {Boolean} memberId id of the meeting member that started screen share
199
+ * @property {String} url of this content share
200
+ * @property {String} shareInstanceId of this content share
201
+ * @property {Object} annotation Info of this content share
146
202
  * @memberof Meeting
203
+ *
147
204
  */
148
205
  /**
149
206
  * Meeting Stopped Sharing Remote Event
@@ -279,18 +336,23 @@ export declare const MEDIA_UPDATE_TYPE: {
279
336
  export default class Meeting extends StatelessWebexPlugin {
280
337
  attrs: any;
281
338
  audio: any;
339
+ breakouts: any;
340
+ simultaneousInterpretation: any;
341
+ annotation: any;
342
+ webinar: any;
282
343
  conversationUrl: string;
283
- correlationId: string;
344
+ callStateForMetrics: CallStateForMetrics;
284
345
  destination: string;
285
346
  destinationType: string;
286
347
  deviceUrl: string;
287
- effects: any;
288
348
  hostId: string;
289
349
  id: string;
350
+ isMultistream: boolean;
290
351
  locusUrl: string;
291
352
  mediaConnections: any[];
353
+ mediaId?: string;
292
354
  meetingFiniteStateMachine: any;
293
- meetingInfo: object;
355
+ meetingInfo: any;
294
356
  meetingRequest: MeetingRequest;
295
357
  members: Members;
296
358
  options: object;
@@ -302,11 +364,13 @@ export default class Meeting extends StatelessWebexPlugin {
302
364
  resource: string;
303
365
  roap: Roap;
304
366
  roapSeq: number;
367
+ selfUrl?: string;
305
368
  sipUri: string;
306
369
  type: string;
307
370
  userId: string;
308
371
  video: any;
309
372
  callEvents: any[];
373
+ datachannelUrl: string;
310
374
  deferJoin: Promise<any>;
311
375
  dialInDeviceStatus: string;
312
376
  dialInUrl: string;
@@ -318,31 +382,45 @@ export default class Meeting extends StatelessWebexPlugin {
318
382
  hasWebsocketConnected: boolean;
319
383
  inMeetingActions: InMeetingActions;
320
384
  isLocalShareLive: boolean;
321
- isSharing: boolean;
385
+ isRoapInProgress: boolean;
322
386
  keepAliveTimerId: NodeJS.Timeout;
323
387
  lastVideoLayoutInfo: any;
324
388
  locusInfo: any;
389
+ locusMediaRequest?: LocusMediaRequest;
325
390
  mediaProperties: MediaProperties;
391
+ mediaRequestManagers: {
392
+ audio: MediaRequestManager;
393
+ video: MediaRequestManager;
394
+ screenShareAudio: MediaRequestManager;
395
+ screenShareVideo: MediaRequestManager;
396
+ };
326
397
  meetingInfoFailureReason: string;
398
+ meetingInfoFailureCode?: number;
399
+ meetingInfoExtraParams?: Record<string, any>;
327
400
  networkQualityMonitor: NetworkQualityMonitor;
328
- networkStatus: string;
401
+ networkStatus?: NETWORK_STATUS;
329
402
  passwordStatus: string;
330
403
  queuedMediaUpdates: any[];
331
404
  recording: any;
405
+ remoteMediaManager: RemoteMediaManager | null;
332
406
  recordingController: RecordingController;
333
407
  controlsOptionsManager: ControlsOptionsManager;
334
408
  requiredCaptcha: any;
409
+ receiveSlotManager: ReceiveSlotManager;
410
+ selfUserPolicies: any;
411
+ enforceVBGImagesURL: string;
335
412
  shareStatus: string;
413
+ screenShareFloorState: ScreenShareFloorStatus;
336
414
  statsAnalyzer: StatsAnalyzer;
337
415
  transcription: Transcription;
338
- receiveTranscription: boolean;
339
416
  updateMediaConnections: (mediaConnections: any[]) => void;
340
- endCallInitiateJoinReq: any;
417
+ userDisplayHints: any;
418
+ endCallInitJoinReq: any;
341
419
  endJoinReqResp: any;
342
420
  endLocalSDPGenRemoteSDPRecvDelay: any;
343
421
  joinedWith: any;
344
422
  locusId: any;
345
- startCallInitiateJoinReq: any;
423
+ startCallInitJoinReq: any;
346
424
  startJoinReqResp: any;
347
425
  startLocalSDPGenRemoteSDPRecvDelay: any;
348
426
  wirelessShare: any;
@@ -350,12 +428,31 @@ export default class Meeting extends StatelessWebexPlugin {
350
428
  meetingJoinUrl: any;
351
429
  meetingNumber: any;
352
430
  meetingState: any;
353
- permissionToken: any;
431
+ permissionToken: string;
432
+ permissionTokenPayload: any;
433
+ permissionTokenReceivedLocalTime: number;
354
434
  resourceId: any;
355
435
  resourceUrl: string;
356
436
  selfId: string;
357
437
  state: any;
438
+ localAudioStreamMuteStateHandler: (muted: boolean) => void;
439
+ localVideoStreamMuteStateHandler: (muted: boolean) => void;
440
+ localOutputTrackChangeHandler: () => void;
441
+ roles: any[];
442
+ environment: string;
358
443
  namespace: string;
444
+ allowMediaInLobby: boolean;
445
+ localShareInstanceId: string;
446
+ remoteShareInstanceId: string;
447
+ turnDiscoverySkippedReason: string;
448
+ turnServerUsed: boolean;
449
+ areVoiceaEventsSetup: boolean;
450
+ voiceaListenerCallbacks: object;
451
+ private retriedWithTurnServer;
452
+ private sendSlotManager;
453
+ private deferSDPAnswer?;
454
+ private sdpResponseTimer?;
455
+ private hasMediaConnectionConnectedAtLeastOnce;
359
456
  /**
360
457
  * @param {Object} attrs
361
458
  * @param {Object} options
@@ -363,29 +460,91 @@ export default class Meeting extends StatelessWebexPlugin {
363
460
  * @memberof Meeting
364
461
  */
365
462
  constructor(attrs: any, options: object);
463
+ /**
464
+ * returns meeting is joined
465
+ * @private
466
+ * @memberof Meeting
467
+ * @returns {Boolean}
468
+ */
469
+ private isJoined;
470
+ /**
471
+ * Returns whether this meeting is a Locus CALL
472
+ * @returns {Boolean}
473
+ */
474
+ isLocusCall(): boolean;
475
+ /**
476
+ * Getter - Returns callStateForMetrics.correlationId
477
+ * @returns {string}
478
+ */
479
+ get correlationId(): string;
480
+ /**
481
+ * Setter - sets callStateForMetrics.correlationId
482
+ * @param {string} correlationId
483
+ */
484
+ set correlationId(correlationId: string);
485
+ /**
486
+ * Set meeting info and trigger `MEETING_INFO_AVAILABLE` event
487
+ * @param {any} info
488
+ * @param {string} [meetingLookupUrl] Lookup url, defined when the meeting info fetched
489
+ * @returns {void}
490
+ */
491
+ private setMeetingInfo;
492
+ /**
493
+ * Add pre-fetched meeting info
494
+ *
495
+ * The passed meeting info should be be complete, e.g.: fetched after password or captcha provided
496
+ *
497
+ * @param {Object} meetingInfo - Complete meeting info
498
+ * @param {FetchMeetingInfoParams} fetchParams - Fetch parameters for validation
499
+ * @param {String|undefined} meetingLookupUrl - Lookup url, defined when the meeting info fetched
500
+ * @returns {Promise<void>}
501
+ */
502
+ injectMeetingInfo(meetingInfo: any, fetchParams: FetchMeetingInfoParams, meetingLookupUrl: string | undefined): Promise<void>;
503
+ /**
504
+ * Validate fetch parameters and clear the fetchMeetingInfoTimeout timeout
505
+ *
506
+ * @param {FetchMeetingInfoParams} fetchParams - fetch parameters for validation
507
+ * @param {String} caller - Name of the caller for logging
508
+ *
509
+ * @returns {Promise<void>}
510
+ * @private
511
+ */
512
+ private prepForFetchMeetingInfo;
513
+ /**
514
+ * Internal method for fetching meeting info
515
+ *
516
+ * @returns {Promise}
517
+ */
518
+ private fetchMeetingInfoInternal;
519
+ /**
520
+ * Refreshes the meeting info permission token (it's required for joining meetings)
521
+ *
522
+ * @param {string} [reason] used for metrics and logging purposes (optional)
523
+ * @returns {Promise}
524
+ */
525
+ refreshPermissionToken(reason?: string): Promise<void>;
366
526
  /**
367
527
  * Fetches meeting information.
368
528
  * @param {Object} options
369
529
  * @param {String} [options.password] optional
370
530
  * @param {String} [options.captchaCode] optional
531
+ * @param {Boolean} [options.sendCAevents] optional - Whether to submit Call Analyzer events or not. Default: false.
371
532
  * @public
372
533
  * @memberof Meeting
373
534
  * @returns {Promise}
374
535
  */
375
- fetchMeetingInfo({ password, captchaCode, }: {
376
- password?: string;
377
- captchaCode?: string;
378
- }): Promise<void>;
536
+ fetchMeetingInfo(options: FetchMeetingInfoParams): Promise<void>;
379
537
  /**
380
538
  * Checks if the supplied password/host key is correct. It returns a promise with information whether the
381
539
  * password and captcha code were correct or not.
382
540
  * @param {String} password - this can be either a password or a host key, can be undefined if only captcha was required
383
541
  * @param {String} captchaCode - can be undefined if captcha was not required by the server
542
+ * @param {Boolean} sendCAevents - whether Call Analyzer events should be sent when fetching meeting information
384
543
  * @public
385
544
  * @memberof Meeting
386
545
  * @returns {Promise<{isPasswordValid: boolean, requiredCaptcha: boolean, failureReason: MEETING_INFO_FAILURE_REASON}>}
387
546
  */
388
- verifyPassword(password: string, captchaCode: string): Promise<{
547
+ verifyPassword(password: string, captchaCode: string, sendCAevents?: boolean): Promise<{
389
548
  isPasswordValid: boolean;
390
549
  requiredCaptcha: any;
391
550
  failureReason: string;
@@ -402,6 +561,14 @@ export default class Meeting extends StatelessWebexPlugin {
402
561
  * @returns {Promise}
403
562
  */
404
563
  refreshCaptcha(): any;
564
+ /**
565
+ * Posts metrics event for this meeting. Allows the app to send Call Analyzer events.
566
+ * @param {String} eventName - Call Analyzer event
567
+ * @public
568
+ * @memberof Meeting
569
+ * @returns {Promise}
570
+ */
571
+ postMetrics(eventName: ClientEvent['name']): void;
405
572
  /**
406
573
  * Proxy function for all the listener set ups
407
574
  * @returns {undefined}
@@ -410,70 +577,50 @@ export default class Meeting extends StatelessWebexPlugin {
410
577
  */
411
578
  private setUpLocusInfoListeners;
412
579
  /**
413
- * Set up the locus info listener for meetings disconnected due to inactivity
580
+ * Set up the listeners for breakouts
414
581
  * @returns {undefined}
415
582
  * @private
416
583
  * @memberof Meeting
417
584
  */
418
- private setUpLocusInfoMediaInactiveListener;
585
+ setUpBreakoutsListener(): void;
419
586
  /**
420
- * Set up the locus info listener for assign host permissions on a meeting
587
+ * Set up the listeners for interpretation
421
588
  * @returns {undefined}
422
589
  * @private
423
590
  * @memberof Meeting
424
591
  */
425
- private setUpLocusInfoAssignHostListener;
592
+ private setUpInterpretationListener;
426
593
  /**
427
- * Set up the internal locus info full state object listener
594
+ * Set up the listeners for captions
428
595
  * @returns {undefined}
429
596
  * @private
430
597
  * @memberof Meeting
431
598
  */
432
- private setUpLocusFullStateListener;
599
+ private setUpVoiceaListeners;
433
600
  /**
434
- * get the metrics payload pre
435
- * @param {Object} options
436
- * @param {String} options.event
437
- * @param {String} options.trackingId
438
- * @param {Object} options.locus
439
- * @param {Array} options.mediaConnections
440
- * @param {Object} options.errors
441
- * @returns {Object}
442
- * @memberof Meeting
443
- */
444
- getAnalyzerMetricsPrePayload(options: {
445
- event: string;
446
- trackingId: string;
447
- locus: object;
448
- mediaConnections: Array<any>;
449
- errors: object;
450
- } | any): {};
601
+ * Set up the locus info listener for meetings disconnected due to inactivity
602
+ * @returns {undefined}
603
+ * @private
604
+ * @memberof Meeting
605
+ */
606
+ private setUpLocusInfoMediaInactiveListener;
451
607
  /**
452
- * Send the metrics to call-analyzer dashboard
453
- * @param {Object} options
454
- * @param {String} options.event
455
- * @param {String} options.trackingId
456
- * @param {Object} options.locus
457
- * @param {Object} options.errors
458
- * @returns {Promise}
608
+ * Set up the locus info listener for assign host permissions on a meeting
609
+ * @returns {undefined}
459
610
  * @private
460
611
  * @memberof Meeting
461
612
  */
462
- private sendCallAnalyzerMetrics;
613
+ private setUpLocusInfoAssignHostListener;
463
614
  /**
464
- * Send the metrics to Media Quality Analyzer dashboard
465
- * @param {Object} options
466
- * @param {String} options.event
467
- * @param {String} options.trackingId
468
- * @param {Object} options.locus
469
- * @returns {Promise}
615
+ * Set up the internal locus info full state object listener
616
+ * @returns {undefined}
470
617
  * @private
471
618
  * @memberof Meeting
472
619
  */
473
- private sendMediaQualityAnalyzerMetrics;
620
+ private setUpLocusFullStateListener;
474
621
  /**
475
622
  * sets the network status on meeting object
476
- * @param {String} networkStatus
623
+ * @param {NETWORK_STATUS} networkStatus
477
624
  * @private
478
625
  * @returns {undefined}
479
626
  * @memberof Meeting
@@ -533,6 +680,13 @@ export default class Meeting extends StatelessWebexPlugin {
533
680
  * @memberof Meeting
534
681
  */
535
682
  private setupLocusControlsListener;
683
+ /**
684
+ * Trigger annotation info update event
685
+ @returns {undefined}
686
+ @param {object} contentShare
687
+ @param {object} previousContentShare
688
+ */
689
+ private triggerAnnotationInfoEvent;
536
690
  /**
537
691
  * Set up the locus info media shares listener
538
692
  * update content and whiteboard sharing id value for members, and updates the member
@@ -567,6 +721,12 @@ export default class Meeting extends StatelessWebexPlugin {
567
721
  * @memberof meeting
568
722
  */
569
723
  private setUpLocusInfoMeetingInfoListener;
724
+ /**
725
+ * Handles a data channel URL change
726
+ * @param {String} datachannelUrl
727
+ * @returns {void}
728
+ */
729
+ handleDataChannelUrlChange(datachannelUrl: any): void;
570
730
  /**
571
731
  * Set up the locus info embedded apps listener
572
732
  * @returns {undefined}
@@ -625,13 +785,23 @@ export default class Meeting extends StatelessWebexPlugin {
625
785
  phoneNumber: string;
626
786
  }): any;
627
787
  /**
628
- * Admit the guest(s) to the call once they are waiting
788
+ * Admit the guest(s) to the call once they are waiting.
789
+ * If the host/cohost is in a breakout session, the locus url
790
+ * of the session must be provided as the authorizingLocusUrl.
791
+ * Regardless of host/cohost location, the locus Id (lid) in
792
+ * the path should be the locus Id of the main, which means the
793
+ * locus url of the api call must be from the main session.
794
+ * If these loucs urls are not provided, the function will do the check.
629
795
  * @param {Array} memberIds
796
+ * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}
630
797
  * @returns {Promise} see #members.admitMembers
631
798
  * @public
632
799
  * @memberof Meeting
633
800
  */
634
- admit(memberIds: Array<any>): any;
801
+ admit(memberIds: Array<any>, sessionLocusUrls?: {
802
+ authorizingLocusUrl: string;
803
+ mainLocusUrl: string;
804
+ }): any;
635
805
  /**
636
806
  * Remove the member from the meeting, boot them
637
807
  * @param {String} memberId
@@ -665,80 +835,63 @@ export default class Meeting extends StatelessWebexPlugin {
665
835
  * @memberof Meeting
666
836
  */
667
837
  getMembers(): Members;
668
- /**
669
- * Truthy when a meeting has an audio connection established
670
- * @returns {Boolean} true if meeting audio is connected otherwise false
671
- * @public
672
- * @memberof Meeting
673
- */
674
- isAudioConnected(): boolean;
675
- /**
676
- * Convenience function to tell whether a meeting is muted
677
- * @returns {Boolean} if meeting audio muted or not
678
- * @public
679
- * @memberof Meeting
680
- */
681
- isAudioMuted(): any;
682
- /**
683
- * Convenience function to tell if the end user last changed the audio state
684
- * @returns {Boolean} if audio was manipulated by the end user
685
- * @public
686
- * @memberof Meeting
687
- */
688
- isAudioSelf(): any;
689
- /**
690
- * Truthy when a meeting has a video connection established
691
- * @returns {Boolean} true if meeting video connected otherwise false
692
- * @public
693
- * @memberof Meeting
694
- */
695
- isVideoConnected(): boolean;
696
- /**
697
- * Convenience function to tell whether video is muted
698
- * @returns {Boolean} if meeting video is muted or not
699
- * @public
700
- * @memberof Meeting
701
- */
702
- isVideoMuted(): any;
703
- /**
704
- * Convenience function to tell whether the end user changed the video state
705
- * @returns {Boolean} if meeting video is muted or not
706
- * @public
707
- * @memberof Meeting
708
- */
709
- isVideoSelf(): any;
710
838
  /**
711
839
  * Sets the meeting info on the class instance
712
840
  * @param {Object} meetingInfo
713
- * @param {Object} meetingInfo.body
714
- * @param {String} meetingInfo.body.conversationUrl
715
- * @param {String} meetingInfo.body.locusUrl
716
- * @param {String} meetingInfo.body.sipUri
717
- * @param {Object} meetingInfo.body.owner
841
+ * @param {String} meetingInfo.conversationUrl
842
+ * @param {String} meetingInfo.locusUrl
843
+ * @param {String} meetingInfo.sipUri
844
+ * @param {String} [meetingInfo.sipUrl]
845
+ * @param {String} [meetingInfo.sipMeetingUri]
846
+ * @param {String} [meetingInfo.meetingNumber]
847
+ * @param {String} [meetingInfo.meetingJoinUrl]
848
+ * @param {String} [meetingInfo.hostId]
849
+ * @param {String} [meetingInfo.permissionToken]
850
+ * @param {String} [meetingInfo.channel]
851
+ * @param {Object} meetingInfo.owner
718
852
  * @param {Object | String} destination locus object with meeting data or destination string (sip url, meeting link, etc)
853
+ * @param {Object | String} errors Meeting info request error
719
854
  * @returns {undefined}
720
855
  * @private
721
856
  * @memberof Meeting
722
857
  */
723
858
  parseMeetingInfo(meetingInfo: {
724
- body: {
725
- conversationUrl: string;
726
- locusUrl: string;
727
- sipUri: string;
728
- owner: object;
729
- };
730
- } | any, destination?: object | string | null): void;
859
+ conversationUrl: string;
860
+ locusUrl: string;
861
+ sipUri: string;
862
+ owner: object;
863
+ sipUrl?: string;
864
+ sipMeetingUri?: string;
865
+ meetingNumber?: string;
866
+ meetingJoinUrl?: string;
867
+ hostId?: string;
868
+ permissionToken?: string;
869
+ channel?: string;
870
+ }, destination?: object | string | null, errors?: any): void;
871
+ /**
872
+ * Indicates whether policy can be applied
873
+ * @returns {boolean}
874
+ */
875
+ private arePolicyRestrictionsSupported;
731
876
  /**
732
- * Sets the first locus info on the class instance
733
- * @param {Object} locus
734
- * @param {String} locus.url
735
- * @param {Array} locus.participants
736
- * @param {Object} locus.self
877
+ * Updates the meeting actions (display hints), depends on locus display hints, user policy and app api info
737
878
  * @returns {undefined}
738
879
  * @private
739
880
  * @memberof Meeting
740
881
  */
741
- private parseLocus;
882
+ private updateMeetingActions;
883
+ /**
884
+ * Sets the self user policies based on the contents of the permission token
885
+ * @returns {void}
886
+ */
887
+ setSelfUserPolicies(): void;
888
+ /**
889
+ * Sets the permission token payload on the class instance
890
+ *
891
+ * @param {String} permissionToken
892
+ * @returns {void}
893
+ */
894
+ setPermissionTokenPayload(permissionToken: string): void;
742
895
  /**
743
896
  * Sets the sip uri on the class instance
744
897
  * uses meeting info as precedence
@@ -748,14 +901,6 @@ export default class Meeting extends StatelessWebexPlugin {
748
901
  * @memberof Meeting
749
902
  */
750
903
  setSipUri(sipUri: string): void;
751
- /**
752
- * Set the roap seq on the class instance
753
- * @param {Number} seq
754
- * @returns {undefined}
755
- * @private
756
- * @memberof Meeting
757
- */
758
- setRoapSeq(seq: number): void;
759
904
  /**
760
905
  * Set the locus info the class instance
761
906
  * @param {Object} locus
@@ -769,16 +914,13 @@ export default class Meeting extends StatelessWebexPlugin {
769
914
  * @private
770
915
  * @memberof Meeting
771
916
  */
772
- private setLocus;
773
- /**
774
- * Sets the remote stream on the class instance and emits and
775
- * event to developers
776
- * @param {Object} pc The remote stream peer connection
777
- * @returns {undefined}
778
- * @public
779
- * @memberof Meeting
780
- */
781
- setRemoteStream(pc: any): void;
917
+ setLocus(locus: {
918
+ mediaConnections: Array<any>;
919
+ locusUrl: string;
920
+ locusId: string;
921
+ mediaId: string;
922
+ host: object;
923
+ } | any): void;
782
924
  /**
783
925
  * Upload logs for the current meeting
784
926
  * @param {object} options file name and function name
@@ -788,19 +930,10 @@ export default class Meeting extends StatelessWebexPlugin {
788
930
  */
789
931
  uploadLogs(options?: object): void;
790
932
  /**
791
- * Removes remote audio and video stream on the class instance and triggers an event
792
- * to developers
793
- * @returns {undefined}
794
- * @public
795
- * @memberof Meeting
796
- * @deprecated after v1.89.3
797
- */
798
- unsetRemoteStream(): void;
799
- /**
800
- * Removes remote audio, video and share tracks from class instance's mediaProperties
933
+ * Removes remote audio, video and share streams from class instance's mediaProperties
801
934
  * @returns {undefined}
802
935
  */
803
- unsetRemoteTracks(): void;
936
+ unsetRemoteStreams(): void;
804
937
  /**
805
938
  * Removes the remote stream on the class instance and triggers an event
806
939
  * to developers
@@ -811,115 +944,92 @@ export default class Meeting extends StatelessWebexPlugin {
811
944
  */
812
945
  closeRemoteStream(): void;
813
946
  /**
814
- * Removes the remote tracks on the class instance and triggers an event
947
+ * Removes the remote streams on the class instance and triggers an event
815
948
  * to developers
816
949
  * @returns {undefined}
817
950
  * @memberof Meeting
818
951
  */
819
- closeRemoteTracks(): Promise<[any, any, any]>;
820
- /**
821
- * Emits the 'media:ready' event with a local stream that consists of 1 local audio and 1 local video track
822
- * @returns {undefined}
823
- * @private
824
- * @memberof Meeting
825
- */
826
- private sendLocalMediaReadyEvent;
952
+ closeRemoteStreams(): Promise<[any, any, any]>;
827
953
  /**
828
- * Sets the local audio track on the class and emits an event to the developer
829
- * @param {MediaStreamTrack} audioTrack
830
- * @param {Boolean} emitEvent if true, a media ready event is emitted to the developer
831
- * @returns {undefined}
832
- * @private
833
- * @memberof Meeting
834
- */
835
- private setLocalAudioTrack;
836
- /**
837
- * Sets the local video track on the class and emits an event to the developer
838
- * @param {MediaStreamTrack} videoTrack
839
- * @param {Boolean} emitEvent if true, a media ready event is emitted to the developer
840
- * @returns {undefined}
841
- * @private
842
- * @memberof Meeting
954
+ * Stores the reference to a new microphone stream, sets up the required event listeners
955
+ * on it, cleans up previous stream, etc.
956
+ *
957
+ * @param {LocalMicrophoneStream | null} localStream local microphone stream
958
+ * @returns {Promise<void>}
843
959
  */
844
- private setLocalVideoTrack;
960
+ private setLocalAudioStream;
845
961
  /**
846
- * Sets the local media stream on the class and emits an event to the developer
847
- * @param {Stream} localStream the local media stream
848
- * @returns {undefined}
849
- * @public
850
- * @memberof Meeting
962
+ * Stores the reference to a new camera stream, sets up the required event listeners
963
+ * on it, cleans up previous stream, etc.
964
+ *
965
+ * @param {LocalCameraStream | null} localStream local camera stream
966
+ * @returns {Promise<void>}
851
967
  */
852
- setLocalTracks(localStream: any): void;
968
+ private setLocalVideoStream;
853
969
  /**
854
- * Sets the local media stream on the class and emits an event to the developer
855
- * @param {MediaStream} localShare the local media stream
856
- * @returns {undefined}
857
- * @public
858
- * @memberof Meeting
970
+ * Stores the reference to a new screen share stream, sets up the required event listeners
971
+ * on it, cleans up previous stream, etc.
972
+ * It also sends the floor grant/release request.
973
+ *
974
+ * @param {LocalDisplayStream | undefined} localDisplayStream local display stream
975
+ * @returns {Promise<void>}
859
976
  */
860
- setLocalShareTrack(localShare: MediaStream): void;
977
+ private setLocalShareVideoStream;
861
978
  /**
862
- * Closes the local stream from the class and emits an event to the developer
863
- * @returns {undefined}
864
- * @event media:stopped
865
- * @public
866
- * @memberof Meeting
979
+ * Stores the reference to a new screen share audio stream, sets up the required event listeners
980
+ * on it, cleans up previous stream, etc.
981
+ *
982
+ * @param {LocalSystemAudioStream | undefined} localSystemAudioStream local system audio stream
983
+ * @returns {Promise<void>}
867
984
  */
868
- closeLocalStream(): any;
985
+ private setLocalShareAudioStream;
869
986
  /**
870
- * Closes the local stream from the class and emits an event to the developer
987
+ * sets up listner for mercury event
871
988
  * @returns {undefined}
872
- * @event media:stopped
873
989
  * @public
874
990
  * @memberof Meeting
875
991
  */
876
- closeLocalShare(): any;
992
+ setMercuryListener(): void;
877
993
  /**
878
- * Removes the local stream from the class and emits an event to the developer
879
- * @returns {undefined}
994
+ * Close the peer connections and remove them from the class.
995
+ * Cleanup any media connection related things.
996
+ *
997
+ * @returns {Promise}
880
998
  * @public
881
999
  * @memberof Meeting
882
1000
  */
883
- unsetLocalVideoTrack(): void;
1001
+ closePeerConnections(): Promise<void>;
884
1002
  /**
885
- * Removes the local share from the class and emits an event to the developer
1003
+ * Unsets the peer connections on the class
1004
+ * warning DO NOT CALL WITHOUT CLOSING PEER CONNECTIONS FIRST
886
1005
  * @returns {undefined}
887
1006
  * @public
888
1007
  * @memberof Meeting
889
1008
  */
890
- unsetLocalShareTrack(): void;
1009
+ unsetPeerConnections(): void;
891
1010
  /**
892
- * sets up listner for mercury event
1011
+ * Convenience method to set the correlation id for the callStateForMetrics
1012
+ * @param {String} id correlation id to set on the callStateForMetrics
893
1013
  * @returns {undefined}
894
1014
  * @public
895
1015
  * @memberof Meeting
896
1016
  */
897
- setMercuryListener(): void;
898
- /**
899
- * Close the peer connections and remove them from the class. Triggers an event
900
- * when each is closed.
901
- * @returns {Promise} returns a resolved promise with an array of closed peer connections
902
- * @public
903
- * @memberof Meeting
904
- */
905
- closePeerConnections(): any;
1017
+ setCorrelationId(id: string): void;
906
1018
  /**
907
- * Unsets the peer connections on the class
908
- * warning DO NOT CALL WITHOUT CLOSING PEER CONNECTIONS FIRST
909
- * @param {PeerConnection} peerConnection
1019
+ * Update the callStateForMetrics
1020
+ * @param {CallStateForMetrics} callStateForMetrics updated values for callStateForMetrics
910
1021
  * @returns {undefined}
911
1022
  * @public
912
1023
  * @memberof Meeting
913
1024
  */
914
- unsetPeerConnections(): void;
1025
+ updateCallStateForMetrics(callStateForMetrics: CallStateForMetrics): void;
915
1026
  /**
916
- * Convenience method to set the correlation id for the Meeting
917
- * @param {String} id correlation id to set on the class
918
- * @returns {undefined}
1027
+ * Enqueue request for screenshare floor and set the status to pending
1028
+ * @returns {Promise}
919
1029
  * @private
920
1030
  * @memberof Meeting
921
1031
  */
922
- private setCorrelationId;
1032
+ private enqueueScreenShareFloorRequest;
923
1033
  /**
924
1034
  * Mute the audio for a meeting
925
1035
  * @returns {Promise} resolves the data from muting audio {mute, self} or rejects if there is no audio set
@@ -952,32 +1062,25 @@ export default class Meeting extends StatelessWebexPlugin {
952
1062
  * Shorthand function to join AND set up media
953
1063
  * @param {Object} options - options to join with media
954
1064
  * @param {JoinOptions} [options.joinOptions] - see #join()
955
- * @param {MediaDirection} options.mediaSettings - see #addMedia()
956
- * @param {AudioVideo} [options.audioVideoOptions] - see #getMediaStreams()
957
- * @returns {Promise} -- {join: see join(), media: see addMedia(), local: see getMediaStreams()}
1065
+ * @param {AddMediaOptions} [options.mediaOptions] - see #addMedia()
1066
+ * @returns {Promise} -- {join: see join(), media: see addMedia()}
958
1067
  * @public
959
1068
  * @memberof Meeting
960
1069
  * @example
961
1070
  * joinWithMedia({
962
1071
  * joinOptions: {resourceId: 'resourceId' },
963
- * mediaSettings: {
964
- * sendAudio: true,
965
- * sendVideo: true,
966
- * sendShare: false,
967
- * receiveVideo:true,
968
- * receiveAudio: true,
969
- * receiveShare: true
970
- * }
971
- * audioVideoOptions: {
972
- * audio: 'audioDeviceId',
973
- * video: 'videoDeviceId'
974
- * }})
1072
+ * mediaOptions: {
1073
+ * localStreams: { microphone: microphoneStream, camera: cameraStream }
1074
+ * }
1075
+ * })
975
1076
  */
976
1077
  joinWithMedia(options?: {
977
1078
  joinOptions?: any;
978
- mediaSettings: any;
979
- audioVideoOptions?: any;
980
- }): any;
1079
+ mediaOptions?: AddMediaOptions;
1080
+ }): Promise<{
1081
+ join: any;
1082
+ media: void;
1083
+ }>;
981
1084
  /**
982
1085
  * Initiates the reconnection of the media in the meeting
983
1086
  *
@@ -994,23 +1097,43 @@ export default class Meeting extends StatelessWebexPlugin {
994
1097
  */
995
1098
  isTranscriptionSupported(): boolean;
996
1099
  /**
997
- * Monitor the Low-Latency Mercury (LLM) web socket connection on `onError` and `onClose` states
998
- * @private
999
- * @returns {void}
1100
+ * Check if the meeting supports the Reactions
1101
+ * @returns {boolean}
1000
1102
  */
1001
- private monitorTranscriptionSocketConnection;
1103
+ isReactionsSupported(): boolean;
1002
1104
  /**
1003
- * Request for a WebSocket Url, open and monitor the WebSocket connection
1004
- * @private
1105
+ * sets Caption language for the meeting
1106
+ * @param {string} language
1107
+ * @returns {Promise}
1108
+ */
1109
+ setCaptionLanguage(language: string): Promise<unknown>;
1110
+ /**
1111
+ * sets Spoken language for the meeting
1112
+ * @param {string} language
1113
+ * @returns {Promise}
1114
+ */
1115
+ setSpokenLanguage(language: string): Promise<unknown>;
1116
+ /**
1117
+ * This method will enable the transcription for the current meeting if the meeting has enabled/supports Webex Assistant
1118
+ * @param {Object} options object with spokenlanguage setting
1119
+ * @public
1005
1120
  * @returns {Promise<void>} a promise to open the WebSocket connection
1006
1121
  */
1007
- private startTranscription;
1122
+ startTranscription(options?: {
1123
+ spokenLanguage?: string;
1124
+ }): Promise<void>;
1008
1125
  /**
1009
- * stop recieving Transcription by closing
1010
- * the web socket connection properly
1126
+ * Callback called when a relay event is received from meeting LLM Connection
1127
+ * @param {RelayEvent} e Event object coming from LLM Connection
1128
+ * @private
1011
1129
  * @returns {void}
1012
1130
  */
1013
- stopReceivingTranscription(): void;
1131
+ private processRelayEvent;
1132
+ /**
1133
+ * This method stops receiving transcription for the current meeting
1134
+ * @returns {void}
1135
+ */
1136
+ stopTranscription(): void;
1014
1137
  /**
1015
1138
  * triggers an event to notify that the user
1016
1139
  * will not receive any more transcription
@@ -1030,7 +1153,14 @@ export default class Meeting extends StatelessWebexPlugin {
1030
1153
  * if joining as host on second loop, pass pin and pass moderator if joining as guest on second loop
1031
1154
  * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)
1032
1155
  */
1033
- join(options?: any): any;
1156
+ join(options?: any): Promise<any>;
1157
+ /**
1158
+ * Connects to low latency mercury and reconnects if the address has changed
1159
+ * It will also disconnect if called when the meeting has ended
1160
+ * @param {String} datachannelUrl
1161
+ * @returns {Promise}
1162
+ */
1163
+ updateLLMConnection(): Promise<any>;
1034
1164
  /**
1035
1165
  * Use phone for meeting audio
1036
1166
  * @param {String} phoneNumber If provided, it will dial-out using this number. If not provided, dial-in will be used
@@ -1038,7 +1168,7 @@ export default class Meeting extends StatelessWebexPlugin {
1038
1168
  * @public
1039
1169
  * @memberof Meeting
1040
1170
  */
1041
- usePhoneAudio(phoneNumber: string): any;
1171
+ usePhoneAudio(phoneNumber: string): Promise<any>;
1042
1172
  /**
1043
1173
  * Determines if the given pstnStatus is in a state which implies the phone is provisioned
1044
1174
  * @param {String} pstnStatus
@@ -1087,34 +1217,19 @@ export default class Meeting extends StatelessWebexPlugin {
1087
1217
  */
1088
1218
  moveFrom(resourceId: string): any;
1089
1219
  /**
1090
- * Get local media streams based on options passed
1091
- * @param {MediaDirection} mediaDirection A configurable options object for joining a meeting
1092
- * @param {AudioVideo} [audioVideo] audio/video object to set audioinput and videoinput devices, see #Media.getUserMedia
1093
- * @param {SharePreferences} [sharePreferences] audio/video object to set audioinput and videoinput devices, see #Media.getUserMedia
1094
- * @returns {Promise} see #Media.getUserMedia
1095
- * @public
1096
- * @todo should be static, or moved so can be called outside of a meeting
1097
- * @memberof Meeting
1098
- */
1099
- getMediaStreams: (mediaDirection: any, audioVideo?: any, sharePreferences?: any) => any;
1100
- /**
1101
- * Checks if the machine has at least one audio or video device
1102
- * @param {Object} options
1103
- * @param {Boolean} options.sendAudio
1104
- * @param {Boolean} options.sendVideo
1105
- * @returns {Object}
1106
- * @memberof Meetings
1220
+ * Handles ROAP_FAILURE event from the webrtc media connection
1221
+ *
1222
+ * @param {Error} error
1223
+ * @returns {void}
1107
1224
  */
1108
- getSupportedDevices: ({ sendAudio, sendVideo, }: {
1109
- sendAudio: boolean;
1110
- sendVideo: boolean;
1111
- }) => any;
1225
+ handleRoapFailure: (error: any) => void;
1112
1226
  /**
1113
- * Get the devices from the Media module
1114
- * @returns {Promise} resolves to an array of DeviceInfo
1115
- * @memberof Meetings
1227
+ * This function makes sure we send the right metrics when local and remote SDPs are processed/generated
1228
+ *
1229
+ * @returns {undefined}
1116
1230
  */
1117
- getDevices: () => any;
1231
+ setupSdpListeners: () => void;
1232
+ setupMediaConnectionListeners: () => void;
1118
1233
  /**
1119
1234
  * Registers for all required StatsAnalyzer events
1120
1235
  * @private
@@ -1122,23 +1237,142 @@ export default class Meeting extends StatelessWebexPlugin {
1122
1237
  * @memberof Meetings
1123
1238
  */
1124
1239
  setupStatsAnalyzerEventHandlers: () => void;
1240
+ getMediaConnectionDebugId(): string;
1125
1241
  /**
1126
- * Specify joining via audio (option: pstn), video, screenshare
1127
- * @param {Object} options A configurable options object for joining a meeting
1128
- * @param {Object} options.resourceId pass the deviceId
1129
- * @param {MediaDirection} options.mediaSettings pass media options
1130
- * @param {MediaStream} options.localStream
1131
- * @param {MediaStream} options.localShare
1132
- * @returns {Promise}
1242
+ * Creates a webrtc media connection and publishes streams to it
1243
+ *
1244
+ * @param {Object} turnServerInfo TURN server information
1245
+ * @param {BundlePolicy} [bundlePolicy] Bundle policy settings
1246
+ * @param {AddMediaOptions} [options] Options for enabling/disabling audio/video
1247
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
1248
+ */
1249
+ private createMediaConnection;
1250
+ /**
1251
+ * Listens for an event emitted by eventEmitter and emits it from the meeting object
1252
+ *
1253
+ * @private
1254
+ * @param {*} eventEmitter object from which to forward the event
1255
+ * @param {*} eventTypeToForward which event type to listen on and to forward
1256
+ * @param {string} meetingEventType event type to be used in the event emitted from the meeting object
1257
+ * @returns {void}
1258
+ */
1259
+ forwardEvent(eventEmitter: any, eventTypeToForward: any, meetingEventType: any): void;
1260
+ /**
1261
+ * Sets up all the references to local streams in this.mediaProperties before creating media connection
1262
+ * and before TURN discovery, so that the correct mute state is sent with TURN discovery roap messages.
1263
+ *
1264
+ * @private
1265
+ * @param {LocalStreams} localStreams
1266
+ * @returns {Promise<void>}
1267
+ */
1268
+ private setUpLocalStreamReferences;
1269
+ /**
1270
+ * Calls mediaProperties.waitForMediaConnectionConnected() and sends CA client.ice.end metric on failure
1271
+ *
1272
+ * @private
1273
+ * @returns {Promise<void>}
1274
+ */
1275
+ private waitForMediaConnectionConnected;
1276
+ /**
1277
+ * Enables statsAnalyser if config allows it
1278
+ *
1279
+ * @private
1280
+ * @returns {void}
1281
+ */
1282
+ private createStatsAnalyzer;
1283
+ /**
1284
+ * Handles device logging
1285
+ *
1286
+ * @private
1287
+ * @static
1288
+ * @returns {Promise<void>}
1289
+ */
1290
+ private static handleDeviceLogging;
1291
+ /**
1292
+ * Returns a promise. This promise is created once the local sdp offer has been successfully created and is resolved
1293
+ * once the remote sdp answer has been received.
1294
+ *
1295
+ * @private
1296
+ * @returns {Promise<void>}
1297
+ */
1298
+ private waitForRemoteSDPAnswer;
1299
+ /**
1300
+ * Calls establishMediaConnection with isForced = true to force turn discovery to happen
1301
+ *
1302
+ * @private
1303
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1304
+ * @param {BundlePolicy} [bundlePolicy]
1305
+ * @returns {Promise<void>}
1306
+ */
1307
+ private retryEstablishMediaConnectionWithForcedTurnDiscovery;
1308
+ /**
1309
+ * Does relevant clean up before retrying to establish media connection
1310
+ * and performs the retry with forced turn discovery
1311
+ *
1312
+ * @private
1313
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1314
+ * @param {BundlePolicy} [bundlePolicy]
1315
+ * @returns {Promise<void>}
1316
+ */
1317
+ private retryWithForcedTurnDiscovery;
1318
+ /**
1319
+ * If waitForMediaConnectionConnected() fails when we haven't done turn discovery then we
1320
+ * attempt to establish a media connection again, but this time using turn discovery. If we
1321
+ * used turn discovery on the first pass we do not attempt connection again.
1322
+ *
1323
+ * @private
1324
+ * @param {Error} error
1325
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1326
+ * @param {BundlePolicy} [bundlePolicy]
1327
+ * @returns {Promise<void>}
1328
+ */
1329
+ private handleWaitForMediaConnectionConnectedError;
1330
+ /**
1331
+ * Does TURN discovery, SDP offer/answer exhange, establishes ICE connection and DTLS handshake.
1332
+ *
1333
+ * @private
1334
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1335
+ * @param {BundlePolicy} [bundlePolicy]
1336
+ * @param {boolean} [isForced] - let isForced be true to do turn discovery regardless of reachability results
1337
+ * @returns {Promise<void>}
1338
+ */
1339
+ private establishMediaConnection;
1340
+ /**
1341
+ * Cleans up stats analyzer, peer connection, and turns off listeners
1342
+ *
1343
+ * @private
1344
+ * @returns {Promise<void>}
1345
+ */
1346
+ private cleanUpOnAddMediaFailure;
1347
+ /**
1348
+ * Sends stats report, closes peer connection and cleans up any media connection
1349
+ * related things before trying to establish media connection again with turn server
1350
+ *
1351
+ * @private
1352
+ * @returns {Promise<void>}
1353
+ */
1354
+ private cleanUpBeforeRetryWithTurnServer;
1355
+ /**
1356
+ * Creates a media connection to the server. Media connection is required for sending or receiving any audio/video.
1357
+ *
1358
+ * @param {AddMediaOptions} options
1359
+ * @returns {Promise<void>}
1133
1360
  * @public
1134
1361
  * @memberof Meeting
1135
1362
  */
1136
- addMedia(options?: any): any;
1363
+ addMedia(options?: AddMediaOptions): Promise<void>;
1137
1364
  /**
1138
1365
  * Informs if the peer connection is in a state that can be updated with updateMedia (audio/video/share)
1139
1366
  * @returns {Boolean}
1140
1367
  */
1141
1368
  canUpdateMedia(): boolean;
1369
+ /**
1370
+ * media failed, so collect a stats report from webrtc using the wcme connection to grab the rtc stats report
1371
+ * send a webrtc telemetry dump to the configured server using the internal media core check metrics configured callback
1372
+ * @param {String} callFrom - the function calling this function, optional.
1373
+ * @returns {Promise<void>}
1374
+ */
1375
+ private forceSendStatsReport;
1142
1376
  /**
1143
1377
  * Enqueues a media update operation.
1144
1378
  * @param {String} mediaUpdateType one of MEDIA_UPDATE_TYPE values
@@ -1164,86 +1398,26 @@ export default class Meeting extends StatelessWebexPlugin {
1164
1398
  */
1165
1399
  processNextQueuedMediaUpdate: () => void;
1166
1400
  /**
1167
- * A confluence of updateAudio, updateVideo, and updateShare
1168
- * this function re-establishes all of the media streams with new options
1169
- * @param {Object} options
1170
- * @param {MediaStream} options.localStream
1171
- * @param {MediaStream} options.localShare
1172
- * @param {MediaDirection} options.mediaSettings
1173
- * @returns {Promise}
1174
- * @todo fix setRemoteStream for updateMedia
1175
- * @public
1176
- * @memberof Meeting
1177
- */
1178
- updateMedia(options?: {
1179
- localStream?: MediaStream;
1180
- localShare?: MediaStream;
1181
- mediaSettings?: any;
1182
- }): any;
1183
- /**
1184
- * Update the main audio track with new parameters
1185
- * @param {Object} options
1186
- * @param {boolean} options.sendAudio
1187
- * @param {boolean} options.receiveAudio
1188
- * @param {MediaStream} options.stream Stream that contains the audio track to update
1189
- * @returns {Promise}
1190
- * @public
1191
- * @memberof Meeting
1192
- */
1193
- updateAudio(options: {
1194
- sendAudio: boolean;
1195
- receiveAudio: boolean;
1196
- stream: MediaStream;
1197
- }): Promise<any>;
1198
- /**
1199
- * Update the main video track with new parameters
1200
- * @param {Object} options
1201
- * @param {boolean} options.sendVideo
1202
- * @param {boolean} options.receiveVideo
1203
- * @param {MediaStream} options.stream Stream that contains the video track to update
1204
- * @returns {Promise}
1205
- * @public
1206
- * @memberof Meeting
1207
- */
1208
- updateVideo(options: {
1209
- sendVideo: boolean;
1210
- receiveVideo: boolean;
1211
- stream: MediaStream;
1212
- }): any;
1213
- /**
1214
- * Internal function when stopping a share stream, cleanup
1215
- * @param {boolean} sendShare
1216
- * @param {boolean} previousShareStatus
1217
- * @returns {Promise}
1218
- * @private
1219
- * @memberof Meeting
1220
- */
1221
- private checkForStopShare;
1222
- /**
1223
- * Update the share streams, can be used to start sharing
1401
+ * Updates the media connection - it allows to enable/disable all audio/video/share in the meeting.
1402
+ * This does not affect the published tracks, so for example if a microphone track is published and
1403
+ * updateMedia({audioEnabled: false}) is called, the audio will not be sent or received anymore,
1404
+ * but the track's "published" state is not changed and when updateMedia({audioEnabled: true}) is called,
1405
+ * the sending of the audio from the same track will resume.
1406
+ *
1224
1407
  * @param {Object} options
1225
- * @param {boolean} options.sendShare
1226
- * @param {boolean} options.receiveShare
1408
+ * @param {boolean} options.audioEnabled [optional] enables/disables receiving and sending of main audio in the meeting
1409
+ * @param {boolean} options.videoEnabled [optional] enables/disables receiving and sending of main video in the meeting
1410
+ * @param {boolean} options.shareEnabled [optional] enables/disables receiving and sending of screen share in the meeting
1227
1411
  * @returns {Promise}
1228
1412
  * @public
1229
1413
  * @memberof Meeting
1230
1414
  */
1231
- updateShare(options: {
1232
- sendShare?: boolean;
1233
- receiveShare?: boolean;
1234
- stream?: any;
1235
- skipSignalingCheck?: boolean;
1236
- }): any;
1237
- /**
1238
- * Do all the attach media pre set up before executing the actual attach
1239
- * @param {MediaStream} localStream
1240
- * @param {MediaStream} localShare
1241
- * @param {MediaDirection} mediaSettings
1242
- * @returns {undefined}
1243
- * @private
1244
- * @memberof Meeting
1245
- */
1246
- private preMedia;
1415
+ updateMedia(options: {
1416
+ audioEnabled?: boolean;
1417
+ videoEnabled?: boolean;
1418
+ shareAudioEnabled?: boolean;
1419
+ shareVideoEnabled?: boolean;
1420
+ }): Promise<void>;
1247
1421
  /**
1248
1422
  * Acknowledge the meeting, outgoing or incoming
1249
1423
  * @param {String} type
@@ -1251,7 +1425,11 @@ export default class Meeting extends StatelessWebexPlugin {
1251
1425
  * @public
1252
1426
  * @memberof Meeting
1253
1427
  */
1254
- acknowledge(type: string): any;
1428
+ acknowledge(type: string): Promise<{
1429
+ response: any;
1430
+ }> | Promise<{
1431
+ message: string;
1432
+ }>;
1255
1433
  /**
1256
1434
  * Decline this meeting
1257
1435
  * @param {String} reason
@@ -1261,15 +1439,45 @@ export default class Meeting extends StatelessWebexPlugin {
1261
1439
  */
1262
1440
  decline(reason: string): any;
1263
1441
  /**
1264
- * Leave the current meeting
1442
+ * Returns a promise that will resolve to fetch options for leaving a meeting.
1443
+ *
1444
+ * This is to support quickly submitting a leave request when the browser/tab is closing.
1445
+ * Calling meeting.leave will not work because there are some async steps that will
1446
+ * not complete before the browser is closed. Instead, we pre-gather all the
1447
+ * information/options needed for the request(s), and then simply and quickly
1448
+ * fire the fetch(es) when pagehide is triggered.
1449
+ *
1450
+ * We must use fetch instead of request because fetch has a keepalive option that
1451
+ * allows the request it to outlive the page.
1452
+ *
1453
+ * Note: the $timings values will be wrong, but setRequestTimingsAndFetch() will
1454
+ * properly adjust them before submitting.
1455
+ *
1456
+ * @public
1265
1457
  * @param {Object} options leave options
1266
1458
  * @param {String} options.resourceId the device with which to leave from, empty if just the computer
1459
+ * @param {any} options.reason the reason for leaving
1460
+ * @returns {Promise} resolves to options to be used with fetch
1461
+ */
1462
+ buildLeaveFetchRequestOptions(options?: {
1463
+ resourceId?: string;
1464
+ reason?: any;
1465
+ }): any;
1466
+ /**
1467
+ * Leave the current meeting
1468
+ * @param {Object} options - leave options
1469
+ * @param {String} [options.resourceId] - the device with which to leave from, empty if just the computer
1470
+ * @param {String} [options.clientEventLeaveReason] - the leaveReason to include in the Call Analyzer event.
1471
+ * Must be one of: 'paired-leave' | 'one-to-one' | 'ended-by-locus' (defaults to no reason)
1472
+ * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/main/diagnostic-events.raml#L796
1473
+ * @param {String} [options.reason] - only used for logging
1267
1474
  * @returns {Promise}
1268
1475
  * @public
1269
1476
  * @memberof Meeting
1270
1477
  */
1271
1478
  leave(options?: {
1272
1479
  resourceId?: string;
1480
+ clientEventLeaveReason?: ClientEventLeaveReason;
1273
1481
  reason?: any;
1274
1482
  }): any;
1275
1483
  /**
@@ -1297,12 +1505,12 @@ export default class Meeting extends StatelessWebexPlugin {
1297
1505
  */
1298
1506
  private requestScreenShareFloor;
1299
1507
  /**
1300
- * Stops the screen share
1301
- * @returns {Promise} see #updateShare
1302
- * @public
1303
- * @memberof Meeting
1508
+ * Requests screen share floor if such request is pending.
1509
+ * It should be called whenever meeting state changes to JOINED
1510
+ *
1511
+ * @returns {void}
1304
1512
  */
1305
- stopShare(options?: {}): any;
1513
+ private requestScreenShareFloorIfPending;
1306
1514
  /**
1307
1515
  * Sends a request to Locus to release the screen share floor.
1308
1516
  * @returns {Promise} see #meetingRequest.changeMeetingFloor
@@ -1333,6 +1541,16 @@ export default class Meeting extends StatelessWebexPlugin {
1333
1541
  * @memberof Meeting
1334
1542
  */
1335
1543
  setDisallowUnmute(enabled: boolean): Promise<any>;
1544
+ /**
1545
+ * set the mute all flag for participants if you're the host
1546
+ * @returns {Promise}
1547
+ * @param {boolean} mutedEnabled
1548
+ * @param {boolean} disallowUnmuteEnabled
1549
+ * @param {boolean} muteOnEntryEnabled
1550
+ * @public
1551
+ * @memberof Meeting
1552
+ */
1553
+ setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean): Promise<any>;
1336
1554
  /**
1337
1555
  * End the recording of this meeting
1338
1556
  * @returns {Promise}
@@ -1383,7 +1601,7 @@ export default class Meeting extends StatelessWebexPlugin {
1383
1601
  * @public
1384
1602
  * @memberof Meeting
1385
1603
  */
1386
- sendDTMF(tones: string): any;
1604
+ sendDTMF(tones: string): Promise<any>;
1387
1605
  /**
1388
1606
  * Sends request to change layout type for the current meeting for the specific participant/device only
1389
1607
  * @param {String} [layoutType] a layout type that should be available in meeting constants {@link #layout_types}
@@ -1408,50 +1626,41 @@ export default class Meeting extends StatelessWebexPlugin {
1408
1626
  height: number;
1409
1627
  };
1410
1628
  }): any;
1411
- /**
1412
- * Sets the quality of the local video stream
1413
- * @param {String} level {LOW|MEDIUM|HIGH}
1414
- * @returns {Promise<MediaStream>} localStream
1415
- */
1416
- setLocalVideoQuality(level: string): any;
1417
1629
  /**
1418
1630
  * Sets the quality level of the remote incoming media
1419
1631
  * @param {String} level {LOW|MEDIUM|HIGH}
1420
1632
  * @returns {Promise}
1421
1633
  */
1422
- setRemoteQualityLevel(level: string): any;
1634
+ setRemoteQualityLevel(level: string): Promise<void>;
1423
1635
  /**
1424
- * This is deprecated, please use setLocalVideoQuality for setting local and setRemoteQualityLevel for remote
1425
- * @param {String} level {LOW|MEDIUM|HIGH}
1426
- * @returns {Promise}
1427
- * @deprecated After FHD support
1636
+ * Functionality for when a share audio is ended.
1637
+ * @private
1638
+ * @memberof Meeting
1639
+ * @returns {undefined}
1428
1640
  */
1429
- setMeetingQuality(level: string): any;
1641
+ private handleShareAudioStreamEnded;
1430
1642
  /**
1431
- * @param {Object} options parameter
1432
- * @param {Boolean} options.sendAudio send audio from the display share
1433
- * @param {Boolean} options.sendShare send video from the display share
1434
- * @param {Object} options.sharePreferences
1435
- * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video
1436
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}
1437
- * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean
1438
- * @returns {Promise}
1643
+ * Functionality for when a share video is muted or unmuted.
1644
+ * @private
1645
+ * @memberof Meeting
1646
+ * @param {boolean} muted
1647
+ * @returns {undefined}
1439
1648
  */
1440
- shareScreen(options?: {
1441
- sendAudio: boolean;
1442
- sendShare: boolean;
1443
- sharePreferences: {
1444
- shareConstraints: MediaTrackConstraints;
1445
- };
1446
- }): any;
1649
+ private handleShareVideoStreamMuteStateChange;
1447
1650
  /**
1448
- * Functionality for when a share is ended.
1651
+ * Functionality for when a share video is ended.
1449
1652
  * @private
1450
1653
  * @memberof Meeting
1451
- * @param {MediaStream} localShare
1452
1654
  * @returns {undefined}
1453
1655
  */
1454
- private handleShareTrackEnded;
1656
+ private handleShareVideoStreamEnded;
1657
+ /**
1658
+ * Emits meeting:stoppedSharingLocal
1659
+ * @private
1660
+ * @returns {undefined}
1661
+ * @memberof Meeting
1662
+ */
1663
+ private triggerStoppedSharing;
1455
1664
  /**
1456
1665
  * Emits the 'network:quality' event
1457
1666
  * 1 indicates an acceptable uplink network.
@@ -1466,92 +1675,16 @@ export default class Meeting extends StatelessWebexPlugin {
1466
1675
  private sendNetworkQualityEvent;
1467
1676
  /**
1468
1677
  * Handle logging the media
1469
- * @param {Object} audioTrack The audio track
1470
- * @param {Object} videoTrack The video track
1678
+ * @param {Object} mediaProperties
1471
1679
  * @private
1472
1680
  * @returns {undefined}
1473
1681
  */
1474
1682
  private handleMediaLogging;
1475
- /**
1476
- * @param {string} typeMedia 'audio' or 'video'
1477
- * @returns {undefined}
1478
- */
1479
- setStartSetupDelay(typeMedia: string): void;
1480
- /**
1481
- * @param {string} typeMedia 'audio' or 'video'
1482
- * @returns {undefined}
1483
- */
1484
- setEndSetupDelay(typeMedia: string): void;
1485
- /**
1486
- * @param {string} typeMedia 'audio' or 'video'
1487
- * @returns {string} duration between start and end of setup
1488
- */
1489
- getSetupDelayDuration(typeMedia: string): number;
1490
- /**
1491
- * @param {string} typeMedia 'audio' or 'video'
1492
- * @returns {undefined}
1493
- */
1494
- setStartSendingMediaDelay(typeMedia: string): void;
1495
- /**
1496
- * @param {string} typeMedia 'audio' or 'video'
1497
- * @returns {undefined}
1498
- */
1499
- setEndSendingMediaDelay(typeMedia: string): void;
1500
- /**
1501
- * @param {string} typeMedia 'audio' or 'video'
1502
- * @returns {string} duration between join response and first media tx
1503
- */
1504
- getSendingMediaDelayDuration(typeMedia: string): number;
1505
- /**
1506
- *
1507
- * @returns {undefined}
1508
- */
1509
- setStartLocalSDPGenRemoteSDPRecvDelay(): void;
1510
- /**
1511
- *
1512
- * @returns {undefined}
1513
- */
1514
- setEndLocalSDPGenRemoteSDPRecvDelay(): void;
1515
- /**
1516
- *
1517
- * @returns {string} duration between local SDP generation and remote SDP reception
1518
- */
1519
- getLocalSDPGenRemoteSDPRecvDelay(): number;
1520
- /**
1521
- *
1522
- * @returns {undefined}
1523
- */
1524
- setStartCallInitiateJoinReq(): void;
1525
- /**
1526
- *
1527
- * @returns {undefined}
1528
- */
1529
- setEndCallInitiateJoinReq(): void;
1530
- /**
1531
- *
1532
- * @returns {string} duration between call initiate and sending join request to locus
1533
- */
1534
- getCallInitiateJoinReq(): number;
1535
- /**
1536
- *
1537
- * @returns {undefined}
1538
- */
1539
- setStartJoinReqResp(): void;
1540
- /**
1541
- *
1542
- * @returns {undefined}
1543
- */
1544
- setEndJoinReqResp(): void;
1545
1683
  /**
1546
1684
  *
1547
- * @returns {string} duration between sending locus join request and receiving join response
1685
+ * @returns {string} one of 'attendee','host','cohost', returns the user type of the current user
1548
1686
  */
1549
- getJoinReqResp(): number;
1550
- /**
1551
- *
1552
- * @returns {string} duration between call initiate and successful locus join (even if it is in lobby)
1553
- */
1554
- getTotalJmt(): number;
1687
+ getCurUserType(): "host" | "cohost" | "presenter" | "attendee";
1555
1688
  /**
1556
1689
  * End the current meeting for all
1557
1690
  * @returns {Promise}
@@ -1567,56 +1700,108 @@ export default class Meeting extends StatelessWebexPlugin {
1567
1700
  */
1568
1701
  clearMeetingData: () => void;
1569
1702
  /**
1570
- * Internal API to return status of BNR
1571
- * @returns {Boolean}
1572
- * @public
1703
+ * starts keepAlives being sent
1704
+ * @returns {void}
1705
+ * @private
1573
1706
  * @memberof Meeting
1574
1707
  */
1575
- isBnrEnabled(): any;
1708
+ startKeepAlive: () => void;
1576
1709
  /**
1577
- * Internal API to obtain BNR enabled MediaStream
1578
- * @returns {Promise<MediaStreamTrack>}
1710
+ * stops keepAlives being sent
1711
+ * @returns {void}
1579
1712
  * @private
1580
- * @param {MedaiStreamTrack} audioTrack from updateAudio
1581
1713
  * @memberof Meeting
1582
1714
  */
1583
- private internal_enableBNR;
1715
+ stopKeepAlive: () => void;
1584
1716
  /**
1585
- * Enable the audio track with BNR for a meeting
1586
- * @returns {Promise} resolves the data from enable bnr or rejects if there is no audio or audio is muted
1717
+ * Send a reaction inside the meeting.
1718
+ *
1719
+ * @param {ReactionServerType} reactionType - type of reaction to be sent. Example: "thumbs_up"
1720
+ * @param {SkinToneType} skinToneType - skin tone for the reaction. Example: "medium_dark"
1721
+ * @returns {Promise}
1587
1722
  * @public
1588
1723
  * @memberof Meeting
1589
1724
  */
1590
- enableBNR(): any;
1725
+ sendReaction(reactionType: ReactionServerType, skinToneType?: SkinToneType): any;
1591
1726
  /**
1592
- * Disable the BNR for an audio track
1593
- * @returns {Promise} resolves the data from disable bnr or rejects if there is no audio set
1727
+ * Method to enable or disable reactions inside the meeting.
1728
+ *
1729
+ * @param {boolean} enable - enable or disable reactions
1730
+ * @returns {Promise}
1594
1731
  * @public
1595
1732
  * @memberof Meeting
1596
1733
  */
1597
- disableBNR(): any;
1734
+ toggleReactions(enable: boolean): Promise<any>;
1598
1735
  /**
1599
- * starts keepAlives being sent
1736
+ * Throws if we don't have a media connection created
1737
+ *
1600
1738
  * @returns {void}
1601
- * @private
1602
- * @memberof Meeting
1603
1739
  */
1604
- startKeepAlive: () => void;
1740
+ private checkMediaConnection;
1605
1741
  /**
1606
- * stops keepAlives being sent
1607
- * @returns {void}
1608
- * @private
1609
- * @memberof Meeting
1742
+ * Method to enable or disable the 'Music mode' effect on audio stream
1743
+ *
1744
+ * @param {boolean} shouldEnableMusicMode
1745
+ * @returns {Promise}
1610
1746
  */
1611
- stopKeepAlive: () => void;
1747
+ enableMusicMode(shouldEnableMusicMode: boolean): Promise<void>;
1748
+ /** Updates the tracks being sent on the transcoded media connection
1749
+ *
1750
+ * @returns {Promise<void>}
1751
+ */
1752
+ private updateTranscodedMediaConnection;
1612
1753
  /**
1613
- * Send a reaction inside the meeting.
1754
+ * Publishes a stream.
1614
1755
  *
1615
- * @param {ReactionType} reactionType - type of reaction to be sent. Example: "thumbs_up"
1616
- * @param {SkinToneType} skinToneType - skin tone for the reaction. Example: "medium_dark"
1756
+ * @param {MediaType} mediaType of the stream
1757
+ * @param {LocalStream} stream to publish
1617
1758
  * @returns {Promise}
1618
- * @public
1619
- * @memberof Meeting
1620
1759
  */
1621
- sendReaction(reactionType: ReactionType, skinToneType?: SkinToneType): any;
1760
+ private publishStream;
1761
+ /**
1762
+ * Un-publishes a stream.
1763
+ *
1764
+ * @param {MediaType} mediaType of the stream
1765
+ * @param {LocalStream} stream to unpublish
1766
+ * @returns {Promise}
1767
+ */
1768
+ private unpublishStream;
1769
+ /**
1770
+ * Publishes specified local streams in the meeting
1771
+ *
1772
+ * @param {Object} streams
1773
+ * @returns {Promise}
1774
+ */
1775
+ publishStreams(streams: LocalStreams): Promise<void>;
1776
+ /**
1777
+ * Un-publishes specified local streams in the meeting
1778
+ *
1779
+ * @param {Array<LocalStream>} streams
1780
+ * @returns {Promise}
1781
+ */
1782
+ unpublishStreams(streams: LocalStream[]): Promise<void>;
1783
+ /**
1784
+ * Gets permission token expiry information including timeLeft, expiryTime, currentTime
1785
+ * (from the time the function has been fired)
1786
+ *
1787
+ * @returns {object} permissionTokenExpiryInfo
1788
+ * @returns {number} permissionTokenExpiryInfo.timeLeft The time left for token to expire
1789
+ * @returns {number} permissionTokenExpiryInfo.expiryTime The expiry time of permission token from the server
1790
+ * @returns {number} permissionTokenExpiryInfo.currentTime The current time of the local machine
1791
+ */
1792
+ getPermissionTokenExpiryInfo(): {
1793
+ timeLeft: number;
1794
+ expiryTime: number;
1795
+ currentTime: number;
1796
+ };
1797
+ /**
1798
+ * Check if there is enough time left till the permission token expires
1799
+ * If not - refresh the permission token
1800
+ *
1801
+ * @param {number} threshold - time in seconds
1802
+ * @param {string} reason - reason for refreshing the permission token
1803
+ * @returns {Promise<void>}
1804
+ */
1805
+ checkAndRefreshPermissionToken(threshold: number, reason: string): Promise<void>;
1622
1806
  }
1807
+ export {};