@webex/plugin-meetings 3.0.0-beta.42 → 3.0.0-beta.421

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