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

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