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

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
@@ -5,121 +5,187 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequ
5
5
  _Object$defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = void 0;
8
+ exports.createMuteState = exports.MuteState = void 0;
9
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
10
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
11
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
13
13
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
14
14
  var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
15
- var _permission = _interopRequireDefault(require("../common/errors/permission"));
16
- var _media = _interopRequireDefault(require("../media"));
17
15
  var _util = _interopRequireDefault(require("./util"));
18
16
  var _constants = require("../constants");
19
- /* Certain aspects of server interaction for video muting are not implemented as we currently don't support remote muting of video.
20
- If we ever need to support it, search for REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION string to find the places that need updating
21
- */
17
+ // eslint-disable-next-line import/prefer-default-export
18
+ var createMuteState = exports.createMuteState = function createMuteState(type, meeting, enabled) {
19
+ // todo: remove the meeting argument (SPARK-399695)
22
20
 
23
- var createMuteState = function createMuteState(type, meeting, mediaDirection) {
24
- if (type === _constants.AUDIO && !mediaDirection.sendAudio) {
25
- return null;
26
- }
27
- if (type === _constants.VIDEO && !mediaDirection.sendVideo) {
28
- return null;
29
- }
30
21
  _loggerProxy.default.logger.info("Meeting:muteState#createMuteState --> ".concat(type, ": creating MuteState for meeting id ").concat(meeting === null || meeting === void 0 ? void 0 : meeting.id));
31
- return new MuteState(type, meeting);
22
+ var muteState = new MuteState(type, meeting, enabled);
23
+ return muteState;
32
24
  };
33
25
 
34
26
  /** The purpose of this class is to manage the local and remote mute state and make sure that the server state always matches
35
27
  the last requested state by the client.
36
28
 
37
29
  More info about Locus muting API: https://sqbu-github.cisco.com/pages/WebExSquared/locus/guides/mute.html#
30
+
31
+ This class is exported only for unit tests. It should never be instantiated directly with new MuteState(), instead createMuteState() should be called
38
32
  */
39
- var MuteState = /*#__PURE__*/function () {
33
+ var MuteState = exports.MuteState = /*#__PURE__*/function () {
40
34
  /**
41
35
  * Constructor
42
36
  *
43
37
  * @param {String} type - audio or video
44
38
  * @param {Object} meeting - the meeting object (used for reading current remote mute status)
39
+ * @param {boolean} enabled - whether the client audio/video is enabled at all
45
40
  */
46
- function MuteState(type, meeting) {
41
+ function MuteState(type, meeting, enabled) {
42
+ var _meeting$remoteVideoM, _meeting$unmuteVideoA;
47
43
  (0, _classCallCheck2.default)(this, MuteState);
48
- (0, _defineProperty2.default)(this, "pendingPromiseReject", void 0);
49
- (0, _defineProperty2.default)(this, "pendingPromiseResolve", void 0);
50
44
  (0, _defineProperty2.default)(this, "state", void 0);
51
45
  (0, _defineProperty2.default)(this, "type", void 0);
46
+ (0, _defineProperty2.default)(this, "ignoreMuteStateChange", void 0);
52
47
  if (type !== _constants.AUDIO && type !== _constants.VIDEO) {
53
48
  throw new _parameter.default('Mute state is designed for handling audio or video only');
54
49
  }
55
50
  this.type = type;
51
+ this.ignoreMuteStateChange = false;
56
52
  this.state = {
57
53
  client: {
58
- localMute: false
54
+ enabled: enabled,
55
+ localMute: true
59
56
  },
60
57
  server: {
61
- localMute: false,
62
- // initial values available only for audio (REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION)
63
- remoteMute: type === _constants.AUDIO ? meeting.remoteMuted : false,
64
- unmuteAllowed: type === _constants.AUDIO ? meeting.unmuteAllowed : true
58
+ localMute: true,
59
+ // because remoteVideoMuted and unmuteVideoAllowed are updated seperately, they might be undefined
60
+ remoteMute: type === _constants.AUDIO ? meeting.remoteMuted : (_meeting$remoteVideoM = meeting.remoteVideoMuted) !== null && _meeting$remoteVideoM !== void 0 ? _meeting$remoteVideoM : false,
61
+ unmuteAllowed: type === _constants.AUDIO ? meeting.unmuteAllowed : (_meeting$unmuteVideoA = meeting.unmuteVideoAllowed) !== null && _meeting$unmuteVideoA !== void 0 ? _meeting$unmuteVideoA : true
65
62
  },
66
63
  syncToServerInProgress: false
67
64
  };
68
- // these 2 hold the resolve, reject methods for the promise we returned to the client in last handleClientRequest() call
69
- this.pendingPromiseResolve = null;
70
- this.pendingPromiseReject = null;
71
65
  }
72
66
 
73
67
  /**
74
- * Handles mute/unmute request from the client/user. Returns a promise that's resolved once the server update is completed or
75
- * at the point that this request becomese superseded by another client request.
76
- *
77
- * The client doesn't have to wait for the returned promise to resolve before calling handleClientRequest() again. If
78
- * handleClientRequest() is called again before the previous one resolved, the MuteState class will make sure that eventually
79
- * the server state will match the last requested state from the client.
68
+ * Starts the mute state machine. Needs to be called after a new MuteState instance is created.
80
69
  *
81
- * @public
82
- * @memberof MuteState
83
- * @param {Object} [meeting] the meeting object
84
- * @param {Boolean} [mute] true for muting, false for unmuting request
85
- * @returns {Promise}
70
+ * @param {Object} meeting - the meeting object
71
+ * @returns {void}
86
72
  */
87
73
  (0, _createClass2.default)(MuteState, [{
88
- key: "handleClientRequest",
89
- value: function handleClientRequest(meeting, mute) {
90
- var _this = this;
91
- _loggerProxy.default.logger.info("Meeting:muteState#handleClientRequest --> ".concat(this.type, ": user requesting new mute state: ").concat(mute));
92
- if (!mute && !this.state.server.unmuteAllowed) {
93
- return _promise.default.reject(new _permission.default('User is not allowed to unmute self (hard mute feature is being used)'));
74
+ key: "init",
75
+ value: function init(meeting) {
76
+ var _meeting$mediaPropert, _meeting$mediaPropert2;
77
+ this.applyUnmuteAllowedToStream(meeting);
78
+
79
+ // if we are remotely muted, we need to apply that to the local stream now (mute on-entry)
80
+ if (this.state.server.remoteMute) {
81
+ this.muteLocalStream(meeting, this.state.server.remoteMute, 'remotelyMuted');
82
+ }
83
+ var initialMute = this.type === _constants.AUDIO ? (_meeting$mediaPropert = meeting.mediaProperties.audioStream) === null || _meeting$mediaPropert === void 0 ? void 0 : _meeting$mediaPropert.muted : (_meeting$mediaPropert2 = meeting.mediaProperties.videoStream) === null || _meeting$mediaPropert2 === void 0 ? void 0 : _meeting$mediaPropert2.muted;
84
+ _loggerProxy.default.logger.info("Meeting:muteState#init --> ".concat(this.type, ": local stream initial mute state: ").concat(initialMute));
85
+ if (initialMute !== undefined) {
86
+ this.state.client.localMute = initialMute;
87
+ } else {
88
+ // there is no stream, so it's like we are locally muted
89
+ // (this is important especially for transcoded meetings, in which the SDP m-line direction always stays "sendrecv")
90
+ this.state.client.localMute = true;
94
91
  }
92
+ this.applyClientStateToServer(meeting);
93
+ }
94
+
95
+ /**
96
+ * This method needs to be called whenever the local audio/video stream has changed.
97
+ * It reapplies the remote mute state onto the new stream and also reads the current
98
+ * local mute state from the stream and updates the internal state machine and sends
99
+ * any required requests to the server.
100
+ *
101
+ * @param {Object} meeting - the meeting object
102
+ * @returns {void}
103
+ */
104
+ }, {
105
+ key: "handleLocalStreamChange",
106
+ value: function handleLocalStreamChange(meeting) {
107
+ return this.init(meeting);
108
+ }
95
109
 
96
- // we don't check if we're already in the same state, because even if we were, we would still have to apply the mute state locally,
97
- // because the client may have changed the audio/vidoe tracks
110
+ /**
111
+ * Enables/disables audio/video
112
+ *
113
+ * @param {Object} meeting - the meeting object
114
+ * @param {boolean} enable
115
+ * @returns {void}
116
+ */
117
+ }, {
118
+ key: "enable",
119
+ value: function enable(meeting, _enable) {
120
+ this.state.client.enabled = _enable;
121
+ this.applyClientStateToServer(meeting);
122
+ }
123
+
124
+ /**
125
+ * Mutes/unmutes local stream
126
+ *
127
+ * @param {Object} meeting - the meeting object
128
+ * @param {Boolean} mute - true to mute the stream, false to unmute it
129
+ * @param {ServerMuteReason} reason - reason for muting/unmuting
130
+ * @returns {void}
131
+ */
132
+ }, {
133
+ key: "muteLocalStream",
134
+ value: function muteLocalStream(meeting, mute, reason) {
135
+ this.ignoreMuteStateChange = true;
136
+ if (this.type === _constants.AUDIO) {
137
+ var _meeting$mediaPropert3;
138
+ (_meeting$mediaPropert3 = meeting.mediaProperties.audioStream) === null || _meeting$mediaPropert3 === void 0 ? void 0 : _meeting$mediaPropert3.setServerMuted(mute, reason);
139
+ } else {
140
+ var _meeting$mediaPropert4;
141
+ (_meeting$mediaPropert4 = meeting.mediaProperties.videoStream) === null || _meeting$mediaPropert4 === void 0 ? void 0 : _meeting$mediaPropert4.setServerMuted(mute, reason);
142
+ }
143
+ this.ignoreMuteStateChange = false;
144
+ }
145
+
146
+ /**
147
+ * This method should be called when the local stream mute state is changed
148
+ * @public
149
+ * @memberof MuteState
150
+ * @param {Object} [meeting] the meeting object
151
+ * @param {Boolean} [mute] true for muting, false for unmuting request
152
+ * @returns {void}
153
+ */
154
+ }, {
155
+ key: "handleLocalStreamMuteStateChange",
156
+ value: function handleLocalStreamMuteStateChange(meeting, mute) {
157
+ if (this.ignoreMuteStateChange) {
158
+ return;
159
+ }
160
+ _loggerProxy.default.logger.info("Meeting:muteState#handleLocalStreamMuteStateChange --> ".concat(this.type, ": local stream new mute state: ").concat(mute));
98
161
  this.state.client.localMute = mute;
99
- this.applyClientStateLocally(meeting);
100
- return new _promise.default(function (resolve, reject) {
101
- if (_this.pendingPromiseResolve) {
102
- // resolve the last promise we returned to the client as the client has issued a new request that has superseded the previous one
103
- _this.pendingPromiseResolve();
104
- }
105
- _this.pendingPromiseResolve = resolve;
106
- _this.pendingPromiseReject = reject;
107
- _this.applyClientStateToServer(meeting);
108
- });
162
+ this.applyClientStateToServer(meeting);
109
163
  }
110
164
 
111
165
  /**
112
- * Applies the current mute state to the local track (by enabling or disabling it accordingly)
166
+ * Applies the current mute state to the local stream (by enabling or disabling it accordingly)
113
167
  *
114
168
  * @public
115
169
  * @param {Object} [meeting] the meeting object
170
+ * @param {ServerMuteReason} reason - reason why we're applying our client state to the local stream
116
171
  * @memberof MuteState
117
172
  * @returns {void}
118
173
  */
119
174
  }, {
120
175
  key: "applyClientStateLocally",
121
- value: function applyClientStateLocally(meeting) {
122
- _media.default.setLocalTrack(!this.state.client.localMute, this.type === _constants.AUDIO ? meeting.mediaProperties.audioTrack : meeting.mediaProperties.videoTrack);
176
+ value: function applyClientStateLocally(meeting, reason) {
177
+ this.muteLocalStream(meeting, this.state.client.localMute, reason);
178
+ }
179
+
180
+ /** Returns true if client is locally muted - it takes into account not just the client local mute state,
181
+ * but also whether audio/video is enabled at all
182
+ *
183
+ * @returns {boolean}
184
+ */
185
+ }, {
186
+ key: "getClientLocalMuteState",
187
+ value: function getClientLocalMuteState() {
188
+ return this.state.client.enabled ? this.state.client.localMute : true;
123
189
  }
124
190
 
125
191
  /**
@@ -133,22 +199,18 @@ var MuteState = /*#__PURE__*/function () {
133
199
  }, {
134
200
  key: "applyClientStateToServer",
135
201
  value: function applyClientStateToServer(meeting) {
136
- var _this2 = this;
202
+ var _this = this;
137
203
  if (this.state.syncToServerInProgress) {
138
204
  _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": request to server in progress, we need to wait for it to complete"));
139
205
  return;
140
206
  }
141
- var localMuteRequiresSync = this.state.client.localMute !== this.state.server.localMute;
142
- var remoteMuteRequiresSync = !this.state.client.localMute && this.state.server.remoteMute;
143
- _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": localMuteRequiresSync: ").concat(localMuteRequiresSync, " (").concat(this.state.client.localMute, " ?= ").concat(this.state.server.localMute, ")"));
207
+ var localMuteState = this.getClientLocalMuteState();
208
+ var localMuteRequiresSync = localMuteState !== this.state.server.localMute;
209
+ var remoteMuteRequiresSync = !localMuteState && this.state.server.remoteMute;
210
+ _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": localMuteRequiresSync: ").concat(localMuteRequiresSync, " (").concat(localMuteState, " ?= ").concat(this.state.server.localMute, ")"));
144
211
  _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": remoteMuteRequiresSync: ").concat(remoteMuteRequiresSync));
145
212
  if (!localMuteRequiresSync && !remoteMuteRequiresSync) {
146
213
  _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": client state already matching server state, nothing to do"));
147
- if (this.pendingPromiseResolve) {
148
- this.pendingPromiseResolve();
149
- }
150
- this.pendingPromiseResolve = null;
151
- this.pendingPromiseReject = null;
152
214
  return;
153
215
  }
154
216
  this.state.syncToServerInProgress = true;
@@ -158,21 +220,18 @@ var MuteState = /*#__PURE__*/function () {
158
220
  localMuteSyncPromise.then(function () {
159
221
  return (
160
222
  // then follow it up with remote mute sync
161
- remoteMuteRequiresSync ? _this2.sendRemoteMuteRequestToServer(meeting) : _promise.default.resolve()
223
+ remoteMuteRequiresSync ? _this.sendRemoteMuteRequestToServer(meeting) : _promise.default.resolve()
162
224
  );
163
225
  }).then(function () {
164
- _this2.state.syncToServerInProgress = false;
165
- _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(_this2.type, ": sync with server completed"));
226
+ _this.state.syncToServerInProgress = false;
227
+ _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(_this.type, ": sync with server completed"));
166
228
 
167
229
  // need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
168
- _this2.applyClientStateToServer(meeting);
230
+ _this.applyClientStateToServer(meeting);
169
231
  }).catch(function (e) {
170
- _this2.state.syncToServerInProgress = false;
171
- if (_this2.pendingPromiseReject) {
172
- _this2.pendingPromiseReject(e);
173
- }
174
- _this2.pendingPromiseResolve = null;
175
- _this2.pendingPromiseReject = null;
232
+ _this.state.syncToServerInProgress = false;
233
+ _loggerProxy.default.logger.warn("Meeting:muteState#applyClientStateToServer --> ".concat(_this.type, ": error: ").concat(e));
234
+ _this.applyServerMuteToLocalStream(meeting, 'clientRequestFailed');
176
235
  });
177
236
  }
178
237
 
@@ -187,19 +246,19 @@ var MuteState = /*#__PURE__*/function () {
187
246
  }, {
188
247
  key: "sendLocalMuteRequestToServer",
189
248
  value: function sendLocalMuteRequestToServer(meeting) {
190
- var _meeting$audio,
191
- _meeting$video,
192
- _this3 = this;
193
- var audioMuted = this.type === _constants.AUDIO ? this.state.client.localMute : (_meeting$audio = meeting.audio) === null || _meeting$audio === void 0 ? void 0 : _meeting$audio.state.client.localMute;
194
- var videoMuted = this.type === _constants.VIDEO ? this.state.client.localMute : (_meeting$video = meeting.video) === null || _meeting$video === void 0 ? void 0 : _meeting$video.state.client.localMute;
249
+ var _this2 = this;
250
+ var audioMuted = this.type === _constants.AUDIO ? this.getClientLocalMuteState() : undefined;
251
+ var videoMuted = this.type === _constants.VIDEO ? this.getClientLocalMuteState() : undefined;
195
252
  _loggerProxy.default.logger.info("Meeting:muteState#sendLocalMuteRequestToServer --> ".concat(this.type, ": sending local mute (audio=").concat(audioMuted, ", video=").concat(videoMuted, ") to server"));
196
- return _util.default.remoteUpdateAudioVideo(audioMuted, videoMuted, meeting).then(function (locus) {
197
- _loggerProxy.default.logger.info("Meeting:muteState#sendLocalMuteRequestToServer --> ".concat(_this3.type, ": local mute (audio=").concat(audioMuted, ", video=").concat(videoMuted, ") applied to server"));
198
- _this3.state.server.localMute = _this3.type === _constants.AUDIO ? audioMuted : videoMuted;
199
- meeting.locusInfo.onFullLocus(locus);
253
+ return _util.default.remoteUpdateAudioVideo(meeting, audioMuted, videoMuted).then(function (locus) {
254
+ _loggerProxy.default.logger.info("Meeting:muteState#sendLocalMuteRequestToServer --> ".concat(_this2.type, ": local mute (audio=").concat(audioMuted, ", video=").concat(videoMuted, ") applied to server"));
255
+ _this2.state.server.localMute = _this2.type === _constants.AUDIO ? audioMuted : videoMuted;
256
+ if (locus) {
257
+ meeting.locusInfo.handleLocusDelta(locus, meeting);
258
+ }
200
259
  return locus;
201
260
  }).catch(function (remoteUpdateError) {
202
- _loggerProxy.default.logger.warn("Meeting:muteState#sendLocalMuteRequestToServer --> ".concat(_this3.type, ": failed to apply local mute (audio=").concat(audioMuted, ", video=").concat(videoMuted, ") to server: ").concat(remoteUpdateError));
261
+ _loggerProxy.default.logger.warn("Meeting:muteState#sendLocalMuteRequestToServer --> ".concat(_this2.type, ": failed to apply local mute (audio=").concat(audioMuted, ", video=").concat(videoMuted, ") to server: ").concat(remoteUpdateError));
203
262
  return _promise.default.reject(remoteUpdateError);
204
263
  });
205
264
  }
@@ -215,22 +274,48 @@ var MuteState = /*#__PURE__*/function () {
215
274
  }, {
216
275
  key: "sendRemoteMuteRequestToServer",
217
276
  value: function sendRemoteMuteRequestToServer(meeting) {
218
- var _this4 = this;
277
+ var _this3 = this;
278
+ var remoteMute = this.getClientLocalMuteState();
279
+ _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(this.type, ": sending remote mute:").concat(remoteMute, " to server"));
280
+ return meeting.members.muteMember(meeting.members.selfId, remoteMute, this.type === _constants.AUDIO).then(function () {
281
+ _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this3.type, ": remote mute:").concat(remoteMute, " applied to server"));
282
+ _this3.state.server.remoteMute = remoteMute;
283
+ }).catch(function (remoteUpdateError) {
284
+ _loggerProxy.default.logger.warn("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this3.type, ": failed to apply remote mute ").concat(remoteMute, " to server: ").concat(remoteUpdateError));
285
+ return _promise.default.reject(remoteUpdateError);
286
+ });
287
+ }
288
+
289
+ /** Sets the mute state of the local stream according to what server thinks is our state
290
+ * @param {Object} meeting - the meeting object
291
+ * @param {ServerMuteReason} serverMuteReason - reason why we're applying server mute to the local stream
292
+ * @returns {void}
293
+ */
294
+ }, {
295
+ key: "applyServerMuteToLocalStream",
296
+ value: function applyServerMuteToLocalStream(meeting, serverMuteReason) {
297
+ var muted = this.state.server.localMute || this.state.server.remoteMute;
298
+
299
+ // update the local stream mute state, but not this.state.client.localMute
300
+ this.muteLocalStream(meeting, muted, serverMuteReason);
301
+ }
302
+
303
+ /** Applies the current value for unmute allowed to the underlying stream
304
+ *
305
+ * @param {Meeting} meeting
306
+ * @returns {void}
307
+ */
308
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
309
+ }, {
310
+ key: "applyUnmuteAllowedToStream",
311
+ value: function applyUnmuteAllowedToStream(meeting) {
219
312
  if (this.type === _constants.AUDIO) {
220
- var remoteMute = this.state.client.localMute;
221
- _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(this.type, ": sending remote mute:").concat(remoteMute, " to server"));
222
- return meeting.members.muteMember(meeting.members.selfId, remoteMute).then(function () {
223
- _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this4.type, ": remote mute:").concat(remoteMute, " applied to server"));
224
- _this4.state.server.remoteMute = remoteMute;
225
- }).catch(function (remoteUpdateError) {
226
- _loggerProxy.default.logger.warn("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this4.type, ": failed to apply remote mute ").concat(remoteMute, " to server: ").concat(remoteUpdateError));
227
- return _promise.default.reject(remoteUpdateError);
228
- });
313
+ var _meeting$mediaPropert5;
314
+ (_meeting$mediaPropert5 = meeting.mediaProperties.audioStream) === null || _meeting$mediaPropert5 === void 0 ? void 0 : _meeting$mediaPropert5.setUnmuteAllowed(this.state.server.unmuteAllowed);
315
+ } else {
316
+ var _meeting$mediaPropert6;
317
+ (_meeting$mediaPropert6 = meeting.mediaProperties.videoStream) === null || _meeting$mediaPropert6 === void 0 ? void 0 : _meeting$mediaPropert6.setUnmuteAllowed(this.state.server.unmuteAllowed);
229
318
  }
230
-
231
- // for now we don't need to support remote muting of video (REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION)
232
- this.state.server.remoteMute = this.state.client.localMute;
233
- return _promise.default.resolve();
234
319
  }
235
320
 
236
321
  /**
@@ -238,16 +323,23 @@ var MuteState = /*#__PURE__*/function () {
238
323
  *
239
324
  * @public
240
325
  * @memberof MuteState
326
+ * @param {Meeting} meeting
241
327
  * @param {Boolean} [muted] true if user is remotely muted, false otherwise
242
328
  * @param {Boolean} [unmuteAllowed] indicates if user is allowed to unmute self (false when "hard mute" feature is used)
243
329
  * @returns {undefined}
244
330
  */
245
331
  }, {
246
332
  key: "handleServerRemoteMuteUpdate",
247
- value: function handleServerRemoteMuteUpdate(muted, unmuteAllowed) {
333
+ value: function handleServerRemoteMuteUpdate(meeting, muted, unmuteAllowed) {
248
334
  _loggerProxy.default.logger.info("Meeting:muteState#handleServerRemoteMuteUpdate --> ".concat(this.type, ": updating server remoteMute to (").concat(muted, ")"));
249
- this.state.server.remoteMute = muted;
250
- this.state.server.unmuteAllowed = unmuteAllowed;
335
+ if (unmuteAllowed !== undefined) {
336
+ this.state.server.unmuteAllowed = unmuteAllowed;
337
+ this.applyUnmuteAllowedToStream(meeting);
338
+ }
339
+ if (muted !== undefined) {
340
+ this.state.server.remoteMute = muted;
341
+ this.applyServerMuteToLocalStream(meeting, 'remotelyMuted');
342
+ }
251
343
  }
252
344
 
253
345
  /**
@@ -261,20 +353,22 @@ var MuteState = /*#__PURE__*/function () {
261
353
  }, {
262
354
  key: "handleServerLocalUnmuteRequired",
263
355
  value: function handleServerLocalUnmuteRequired(meeting) {
264
- _loggerProxy.default.logger.info("Meeting:muteState#handleServerLocalUnmuteRequired --> ".concat(this.type, ": localAudioUnmuteRequired received -> doing local unmute"));
356
+ if (!this.state.client.enabled) {
357
+ _loggerProxy.default.logger.warn("Meeting:muteState#handleServerLocalUnmuteRequired --> ".concat(this.type, ": localAudioUnmuteRequired received while ").concat(this.type, " is disabled -> local unmute will not result in ").concat(this.type, " being sent"));
358
+ } else {
359
+ _loggerProxy.default.logger.info("Meeting:muteState#handleServerLocalUnmuteRequired --> ".concat(this.type, ": localAudioUnmuteRequired received -> doing local unmute"));
360
+ }
361
+
362
+ // todo: I'm seeing "you can now unmute yourself " popup when this happens - but same thing happens on web.w.c so we can ignore for now
265
363
  this.state.server.remoteMute = false;
266
364
  this.state.client.localMute = false;
267
- if (this.pendingPromiseReject) {
268
- this.pendingPromiseReject(new Error('Server requested local unmute - this overrides any client request in progress'));
269
- this.pendingPromiseResolve = null;
270
- this.pendingPromiseReject = null;
271
- }
272
- this.applyClientStateLocally(meeting);
365
+ this.applyClientStateLocally(meeting, 'localUnmuteRequired');
273
366
  this.applyClientStateToServer(meeting);
274
367
  }
275
368
 
276
369
  /**
277
- * Returns true if the user is locally or remotely muted
370
+ * Returns true if the user is locally or remotely muted.
371
+ * It only checks the mute status, ignoring the fact whether audio/video is enabled.
278
372
  *
279
373
  * @public
280
374
  * @memberof MuteState
@@ -287,47 +381,44 @@ var MuteState = /*#__PURE__*/function () {
287
381
  }
288
382
 
289
383
  /**
290
- * Returns true if the user is locally muted
384
+ * Returns true if the user is remotely muted
291
385
  *
292
386
  * @public
293
387
  * @memberof MuteState
294
388
  * @returns {Boolean}
295
389
  */
296
390
  }, {
297
- key: "isLocallyMuted",
298
- value: function isLocallyMuted() {
299
- return this.state.client.localMute || this.state.server.localMute;
391
+ key: "isRemotelyMuted",
392
+ value: function isRemotelyMuted() {
393
+ return this.state.server.remoteMute;
300
394
  }
301
395
 
302
396
  /**
303
- * Returns true if the user is muted as a result of the client request (and not remotely muted)
397
+ * Returns true if unmute is allowed
304
398
  *
305
399
  * @public
306
400
  * @memberof MuteState
307
401
  * @returns {Boolean}
308
402
  */
309
403
  }, {
310
- key: "isSelf",
311
- value: function isSelf() {
312
- return this.state.client.localMute && !this.state.server.remoteMute;
404
+ key: "isUnmuteAllowed",
405
+ value: function isUnmuteAllowed() {
406
+ return this.state.server.unmuteAllowed;
313
407
  }
314
408
 
315
- // defined for backwards compatibility with the old AudioStateMachine/VideoStateMachine classes
316
- }, {
317
- key: "muted",
318
- get: function get() {
319
- return this.isMuted();
320
- }
321
-
322
- // defined for backwards compatibility with the old AudioStateMachine/VideoStateMachine classes
409
+ /**
410
+ * Returns true if the user is locally muted or audio/video is disabled
411
+ *
412
+ * @public
413
+ * @memberof MuteState
414
+ * @returns {Boolean}
415
+ */
323
416
  }, {
324
- key: "self",
325
- get: function get() {
326
- return this.isSelf();
417
+ key: "isLocallyMuted",
418
+ value: function isLocallyMuted() {
419
+ return this.getClientLocalMuteState();
327
420
  }
328
421
  }]);
329
422
  return MuteState;
330
423
  }();
331
- var _default = createMuteState;
332
- exports.default = _default;
333
424
  //# sourceMappingURL=muteState.js.map