@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.400

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 (629) hide show
  1. package/README.md +58 -8
  2. package/UPGRADING.md +9 -9
  3. package/browsers.js +19 -24
  4. package/dist/annotation/annotation.types.js +7 -0
  5. package/dist/annotation/annotation.types.js.map +1 -0
  6. package/dist/annotation/constants.js +49 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +342 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +216 -0
  11. package/dist/breakouts/breakout.js.map +1 -0
  12. package/dist/breakouts/collection.js +23 -0
  13. package/dist/breakouts/collection.js.map +1 -0
  14. package/dist/breakouts/edit-lock-error.js +52 -0
  15. package/dist/breakouts/edit-lock-error.js.map +1 -0
  16. package/dist/breakouts/events.js +45 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +1048 -0
  19. package/dist/breakouts/index.js.map +1 -0
  20. package/dist/breakouts/request.js +78 -0
  21. package/dist/breakouts/request.js.map +1 -0
  22. package/dist/breakouts/utils.js +67 -0
  23. package/dist/breakouts/utils.js.map +1 -0
  24. package/dist/common/browser-detection.js +1 -20
  25. package/dist/common/browser-detection.js.map +1 -1
  26. package/dist/common/collection.js +5 -20
  27. package/dist/common/collection.js.map +1 -1
  28. package/dist/common/config.js +0 -7
  29. package/dist/common/config.js.map +1 -1
  30. package/dist/common/errors/captcha-error.js +10 -24
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +11 -24
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +12 -25
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +10 -24
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/no-meeting-info.js +51 -0
  39. package/dist/common/errors/no-meeting-info.js.map +1 -0
  40. package/dist/common/errors/parameter.js +5 -33
  41. package/dist/common/errors/parameter.js.map +1 -1
  42. package/dist/common/errors/password-error.js +10 -24
  43. package/dist/common/errors/password-error.js.map +1 -1
  44. package/dist/common/errors/permission.js +9 -23
  45. package/dist/common/errors/permission.js.map +1 -1
  46. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  47. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  48. package/dist/common/errors/reconnection-in-progress.js +0 -17
  49. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  50. package/dist/common/errors/reconnection.js +10 -24
  51. package/dist/common/errors/reconnection.js.map +1 -1
  52. package/dist/common/errors/stats.js +10 -24
  53. package/dist/common/errors/stats.js.map +1 -1
  54. package/dist/common/errors/webex-errors.js +54 -48
  55. package/dist/common/errors/webex-errors.js.map +1 -1
  56. package/dist/common/errors/webex-meetings-error.js +5 -25
  57. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  58. package/dist/common/events/events-scope.js +0 -22
  59. package/dist/common/events/events-scope.js.map +1 -1
  60. package/dist/common/events/events.js +0 -23
  61. package/dist/common/events/events.js.map +1 -1
  62. package/dist/common/events/trigger-proxy.js +0 -12
  63. package/dist/common/events/trigger-proxy.js.map +1 -1
  64. package/dist/common/events/util.js +0 -15
  65. package/dist/common/events/util.js.map +1 -1
  66. package/dist/common/logs/logger-config.js +0 -4
  67. package/dist/common/logs/logger-config.js.map +1 -1
  68. package/dist/common/logs/logger-proxy.js +1 -8
  69. package/dist/common/logs/logger-proxy.js.map +1 -1
  70. package/dist/common/logs/request.js +41 -60
  71. package/dist/common/logs/request.js.map +1 -1
  72. package/dist/common/queue.js +28 -23
  73. package/dist/common/queue.js.map +1 -1
  74. package/dist/config.js +11 -15
  75. package/dist/config.js.map +1 -1
  76. package/dist/constants.js +347 -74
  77. package/dist/constants.js.map +1 -1
  78. package/dist/controls-options-manager/constants.js +14 -0
  79. package/dist/controls-options-manager/constants.js.map +1 -0
  80. package/dist/controls-options-manager/enums.js +27 -0
  81. package/dist/controls-options-manager/enums.js.map +1 -0
  82. package/dist/controls-options-manager/index.js +297 -0
  83. package/dist/controls-options-manager/index.js.map +1 -0
  84. package/dist/controls-options-manager/types.js +7 -0
  85. package/dist/controls-options-manager/types.js.map +1 -0
  86. package/dist/controls-options-manager/util.js +319 -0
  87. package/dist/controls-options-manager/util.js.map +1 -0
  88. package/dist/index.js +125 -18
  89. package/dist/index.js.map +1 -1
  90. package/dist/interceptors/index.js +15 -0
  91. package/dist/interceptors/index.js.map +1 -0
  92. package/dist/interceptors/locusRetry.js +93 -0
  93. package/dist/interceptors/locusRetry.js.map +1 -0
  94. package/dist/interpretation/collection.js +23 -0
  95. package/dist/interpretation/collection.js.map +1 -0
  96. package/dist/interpretation/index.js +380 -0
  97. package/dist/interpretation/index.js.map +1 -0
  98. package/dist/interpretation/siLanguage.js +25 -0
  99. package/dist/interpretation/siLanguage.js.map +1 -0
  100. package/dist/locus-info/controlsUtils.js +101 -29
  101. package/dist/locus-info/controlsUtils.js.map +1 -1
  102. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  103. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  104. package/dist/locus-info/fullState.js +0 -15
  105. package/dist/locus-info/fullState.js.map +1 -1
  106. package/dist/locus-info/hostUtils.js +4 -12
  107. package/dist/locus-info/hostUtils.js.map +1 -1
  108. package/dist/locus-info/index.js +564 -246
  109. package/dist/locus-info/index.js.map +1 -1
  110. package/dist/locus-info/infoUtils.js +10 -38
  111. package/dist/locus-info/infoUtils.js.map +1 -1
  112. package/dist/locus-info/mediaSharesUtils.js +82 -38
  113. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  114. package/dist/locus-info/parser.js +314 -163
  115. package/dist/locus-info/parser.js.map +1 -1
  116. package/dist/locus-info/selfUtils.js +110 -92
  117. package/dist/locus-info/selfUtils.js.map +1 -1
  118. package/dist/media/index.js +107 -231
  119. package/dist/media/index.js.map +1 -1
  120. package/dist/media/properties.js +137 -222
  121. package/dist/media/properties.js.map +1 -1
  122. package/dist/media/util.js +2 -9
  123. package/dist/media/util.js.map +1 -1
  124. package/dist/mediaQualityMetrics/config.js +316 -501
  125. package/dist/mediaQualityMetrics/config.js.map +1 -1
  126. package/dist/meeting/in-meeting-actions.js +97 -14
  127. package/dist/meeting/in-meeting-actions.js.map +1 -1
  128. package/dist/meeting/index.js +5311 -3871
  129. package/dist/meeting/index.js.map +1 -1
  130. package/dist/meeting/locusMediaRequest.js +292 -0
  131. package/dist/meeting/locusMediaRequest.js.map +1 -0
  132. package/dist/meeting/muteState.js +260 -183
  133. package/dist/meeting/muteState.js.map +1 -1
  134. package/dist/meeting/request.js +421 -347
  135. package/dist/meeting/request.js.map +1 -1
  136. package/dist/meeting/request.type.js +7 -0
  137. package/dist/meeting/request.type.js.map +1 -0
  138. package/dist/meeting/state.js +21 -31
  139. package/dist/meeting/state.js.map +1 -1
  140. package/dist/meeting/util.js +672 -585
  141. package/dist/meeting/util.js.map +1 -1
  142. package/dist/meeting/voicea-meeting.js +172 -0
  143. package/dist/meeting/voicea-meeting.js.map +1 -0
  144. package/dist/meeting-info/collection.js +6 -25
  145. package/dist/meeting-info/collection.js.map +1 -1
  146. package/dist/meeting-info/index.js +87 -39
  147. package/dist/meeting-info/index.js.map +1 -1
  148. package/dist/meeting-info/meeting-info-v2.js +352 -283
  149. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  150. package/dist/meeting-info/request.js +3 -15
  151. package/dist/meeting-info/request.js.map +1 -1
  152. package/dist/meeting-info/util.js +99 -183
  153. package/dist/meeting-info/util.js.map +1 -1
  154. package/dist/meeting-info/utilv2.js +147 -234
  155. package/dist/meeting-info/utilv2.js.map +1 -1
  156. package/dist/meetings/collection.js +43 -19
  157. package/dist/meetings/collection.js.map +1 -1
  158. package/dist/meetings/index.js +895 -600
  159. package/dist/meetings/index.js.map +1 -1
  160. package/dist/meetings/meetings.types.js +7 -0
  161. package/dist/meetings/meetings.types.js.map +1 -0
  162. package/dist/meetings/request.js +26 -41
  163. package/dist/meetings/request.js.map +1 -1
  164. package/dist/meetings/util.js +184 -157
  165. package/dist/meetings/util.js.map +1 -1
  166. package/dist/member/index.js +134 -85
  167. package/dist/member/index.js.map +1 -1
  168. package/dist/member/types.js +25 -0
  169. package/dist/member/types.js.map +1 -0
  170. package/dist/member/util.js +158 -88
  171. package/dist/member/util.js.map +1 -1
  172. package/dist/members/collection.js +13 -12
  173. package/dist/members/collection.js.map +1 -1
  174. package/dist/members/index.js +194 -204
  175. package/dist/members/index.js.map +1 -1
  176. package/dist/members/request.js +113 -68
  177. package/dist/members/request.js.map +1 -1
  178. package/dist/members/types.js +15 -0
  179. package/dist/members/types.js.map +1 -0
  180. package/dist/members/util.js +324 -259
  181. package/dist/members/util.js.map +1 -1
  182. package/dist/metrics/constants.js +19 -7
  183. package/dist/metrics/constants.js.map +1 -1
  184. package/dist/metrics/index.js +11 -558
  185. package/dist/metrics/index.js.map +1 -1
  186. package/dist/multistream/mediaRequestManager.js +263 -50
  187. package/dist/multistream/mediaRequestManager.js.map +1 -1
  188. package/dist/multistream/receiveSlot.js +58 -65
  189. package/dist/multistream/receiveSlot.js.map +1 -1
  190. package/dist/multistream/receiveSlotManager.js +76 -95
  191. package/dist/multistream/receiveSlotManager.js.map +1 -1
  192. package/dist/multistream/remoteMedia.js +62 -76
  193. package/dist/multistream/remoteMedia.js.map +1 -1
  194. package/dist/multistream/remoteMediaGroup.js +82 -45
  195. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  196. package/dist/multistream/remoteMediaManager.js +657 -448
  197. package/dist/multistream/remoteMediaManager.js.map +1 -1
  198. package/dist/multistream/sendSlotManager.js +255 -0
  199. package/dist/multistream/sendSlotManager.js.map +1 -0
  200. package/dist/networkQualityMonitor/index.js +40 -59
  201. package/dist/networkQualityMonitor/index.js.map +1 -1
  202. package/dist/personal-meeting-room/index.js +21 -45
  203. package/dist/personal-meeting-room/index.js.map +1 -1
  204. package/dist/personal-meeting-room/request.js +1 -31
  205. package/dist/personal-meeting-room/request.js.map +1 -1
  206. package/dist/personal-meeting-room/util.js +0 -13
  207. package/dist/personal-meeting-room/util.js.map +1 -1
  208. package/dist/reachability/clusterReachability.js +356 -0
  209. package/dist/reachability/clusterReachability.js.map +1 -0
  210. package/dist/reachability/index.js +297 -460
  211. package/dist/reachability/index.js.map +1 -1
  212. package/dist/reachability/request.js +20 -26
  213. package/dist/reachability/request.js.map +1 -1
  214. package/dist/reachability/util.js +29 -0
  215. package/dist/reachability/util.js.map +1 -0
  216. package/dist/reactions/constants.js +13 -0
  217. package/dist/reactions/constants.js.map +1 -0
  218. package/dist/reactions/reactions.js +109 -0
  219. package/dist/reactions/reactions.js.map +1 -0
  220. package/dist/reactions/reactions.type.js +36 -0
  221. package/dist/reactions/reactions.type.js.map +1 -0
  222. package/dist/reconnection-manager/index.js +413 -483
  223. package/dist/reconnection-manager/index.js.map +1 -1
  224. package/dist/recording-controller/enums.js +17 -0
  225. package/dist/recording-controller/enums.js.map +1 -0
  226. package/dist/recording-controller/index.js +362 -0
  227. package/dist/recording-controller/index.js.map +1 -0
  228. package/dist/recording-controller/util.js +64 -0
  229. package/dist/recording-controller/util.js.map +1 -0
  230. package/dist/roap/index.js +102 -86
  231. package/dist/roap/index.js.map +1 -1
  232. package/dist/roap/request.js +131 -135
  233. package/dist/roap/request.js.map +1 -1
  234. package/dist/roap/turnDiscovery.js +437 -116
  235. package/dist/roap/turnDiscovery.js.map +1 -1
  236. package/dist/rtcMetrics/constants.js +12 -0
  237. package/dist/rtcMetrics/constants.js.map +1 -0
  238. package/dist/rtcMetrics/index.js +179 -0
  239. package/dist/rtcMetrics/index.js.map +1 -0
  240. package/dist/statsAnalyzer/global.js +1 -95
  241. package/dist/statsAnalyzer/global.js.map +1 -1
  242. package/dist/statsAnalyzer/index.js +557 -583
  243. package/dist/statsAnalyzer/index.js.map +1 -1
  244. package/dist/statsAnalyzer/mqaUtil.js +326 -130
  245. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  246. package/dist/transcription/index.js +22 -47
  247. package/dist/transcription/index.js.map +1 -1
  248. package/dist/types/annotation/annotation.types.d.ts +42 -0
  249. package/dist/types/annotation/constants.d.ts +31 -0
  250. package/dist/types/annotation/index.d.ts +117 -0
  251. package/dist/types/breakouts/breakout.d.ts +8 -0
  252. package/dist/types/breakouts/collection.d.ts +5 -0
  253. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  254. package/dist/types/breakouts/events.d.ts +8 -0
  255. package/dist/types/breakouts/index.d.ts +5 -0
  256. package/dist/types/breakouts/request.d.ts +22 -0
  257. package/dist/types/breakouts/utils.d.ts +15 -0
  258. package/dist/types/common/browser-detection.d.ts +9 -0
  259. package/dist/types/common/collection.d.ts +48 -0
  260. package/dist/types/common/config.d.ts +2 -0
  261. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  262. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  263. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  264. package/dist/types/common/errors/media.d.ts +15 -0
  265. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  266. package/dist/types/common/errors/parameter.d.ts +15 -0
  267. package/dist/types/common/errors/password-error.d.ts +15 -0
  268. package/dist/types/common/errors/permission.d.ts +14 -0
  269. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  270. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  271. package/dist/types/common/errors/reconnection.d.ts +15 -0
  272. package/dist/types/common/errors/stats.d.ts +15 -0
  273. package/dist/types/common/errors/webex-errors.d.ts +93 -0
  274. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  275. package/dist/types/common/events/events-scope.d.ts +17 -0
  276. package/dist/types/common/events/events.d.ts +12 -0
  277. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  278. package/dist/types/common/events/util.d.ts +2 -0
  279. package/dist/types/common/logs/logger-config.d.ts +2 -0
  280. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  281. package/dist/types/common/logs/request.d.ts +36 -0
  282. package/dist/types/common/queue.d.ts +34 -0
  283. package/dist/types/config.d.ts +72 -0
  284. package/dist/types/constants.d.ts +1088 -0
  285. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  286. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  287. package/dist/types/controls-options-manager/index.d.ts +136 -0
  288. package/dist/types/controls-options-manager/types.d.ts +43 -0
  289. package/dist/types/controls-options-manager/util.d.ts +1 -0
  290. package/dist/types/index.d.ts +7 -0
  291. package/dist/types/interceptors/index.d.ts +2 -0
  292. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  293. package/dist/types/interpretation/collection.d.ts +5 -0
  294. package/dist/types/interpretation/index.d.ts +5 -0
  295. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  296. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  297. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  298. package/dist/types/locus-info/fullState.d.ts +2 -0
  299. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  300. package/dist/types/locus-info/index.d.ts +322 -0
  301. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  302. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  303. package/dist/types/locus-info/parser.d.ts +272 -0
  304. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  305. package/dist/types/media/index.d.ts +34 -0
  306. package/dist/types/media/properties.d.ts +93 -0
  307. package/dist/types/media/util.d.ts +2 -0
  308. package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
  309. package/dist/types/meeting/in-meeting-actions.d.ts +167 -0
  310. package/dist/types/meeting/index.d.ts +1824 -0
  311. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  312. package/dist/types/meeting/muteState.d.ts +178 -0
  313. package/dist/types/meeting/request.d.ts +293 -0
  314. package/dist/types/meeting/request.type.d.ts +11 -0
  315. package/dist/types/meeting/state.d.ts +9 -0
  316. package/dist/types/meeting/util.d.ts +118 -0
  317. package/dist/types/meeting/voicea-meeting.d.ts +16 -0
  318. package/dist/types/meeting-info/collection.d.ts +20 -0
  319. package/dist/types/meeting-info/index.d.ts +69 -0
  320. package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -0
  321. package/dist/types/meeting-info/request.d.ts +22 -0
  322. package/dist/types/meeting-info/util.d.ts +2 -0
  323. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  324. package/dist/types/meetings/collection.d.ts +40 -0
  325. package/dist/types/meetings/index.d.ts +389 -0
  326. package/dist/types/meetings/meetings.types.d.ts +4 -0
  327. package/dist/types/meetings/request.d.ts +27 -0
  328. package/dist/types/meetings/util.d.ts +18 -0
  329. package/dist/types/member/index.d.ts +160 -0
  330. package/dist/types/member/types.d.ts +32 -0
  331. package/dist/types/member/util.d.ts +2 -0
  332. package/dist/types/members/collection.d.ts +29 -0
  333. package/dist/types/members/index.d.ts +353 -0
  334. package/dist/types/members/request.d.ts +114 -0
  335. package/dist/types/members/types.d.ts +25 -0
  336. package/dist/types/members/util.d.ts +215 -0
  337. package/dist/types/metrics/constants.d.ts +70 -0
  338. package/dist/types/metrics/index.d.ts +45 -0
  339. package/dist/types/multistream/mediaRequestManager.d.ts +120 -0
  340. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  341. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  342. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  343. package/dist/types/multistream/remoteMediaGroup.d.ts +49 -0
  344. package/dist/types/multistream/remoteMediaManager.d.ts +301 -0
  345. package/dist/types/multistream/sendSlotManager.d.ts +70 -0
  346. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  347. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  348. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  349. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  350. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  351. package/dist/types/reachability/index.d.ts +105 -0
  352. package/dist/types/reachability/request.d.ts +39 -0
  353. package/dist/types/reachability/util.d.ts +8 -0
  354. package/dist/types/reactions/constants.d.ts +3 -0
  355. package/dist/types/reactions/reactions.d.ts +4 -0
  356. package/dist/types/reactions/reactions.type.d.ts +52 -0
  357. package/dist/types/reconnection-manager/index.d.ts +136 -0
  358. package/dist/types/recording-controller/enums.d.ts +7 -0
  359. package/dist/types/recording-controller/index.d.ts +207 -0
  360. package/dist/types/recording-controller/util.d.ts +14 -0
  361. package/dist/types/roap/index.d.ts +86 -0
  362. package/dist/types/roap/request.d.ts +39 -0
  363. package/dist/types/roap/turnDiscovery.d.ts +155 -0
  364. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  365. package/dist/types/rtcMetrics/index.d.ts +61 -0
  366. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  367. package/dist/types/statsAnalyzer/index.d.ts +217 -0
  368. package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
  369. package/dist/types/transcription/index.d.ts +64 -0
  370. package/dist/types/webinar/collection.d.ts +16 -0
  371. package/dist/types/webinar/index.d.ts +5 -0
  372. package/dist/webinar/collection.js +44 -0
  373. package/dist/webinar/collection.js.map +1 -0
  374. package/dist/webinar/index.js +69 -0
  375. package/dist/webinar/index.js.map +1 -0
  376. package/internal-README.md +7 -6
  377. package/package.json +30 -21
  378. package/src/annotation/annotation.types.ts +50 -0
  379. package/src/annotation/constants.ts +36 -0
  380. package/src/annotation/index.ts +328 -0
  381. package/src/breakouts/README.md +220 -0
  382. package/src/breakouts/breakout.ts +188 -0
  383. package/src/breakouts/collection.ts +19 -0
  384. package/src/breakouts/edit-lock-error.ts +25 -0
  385. package/src/breakouts/events.ts +56 -0
  386. package/src/breakouts/index.ts +925 -0
  387. package/src/breakouts/request.ts +55 -0
  388. package/src/breakouts/utils.ts +57 -0
  389. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  390. package/src/common/collection.ts +9 -7
  391. package/src/common/{config.js → config.ts} +1 -1
  392. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  393. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  394. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  395. package/src/common/errors/{media.js → media.ts} +11 -7
  396. package/src/common/errors/no-meeting-info.ts +24 -0
  397. package/src/common/errors/parameter.ts +11 -7
  398. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  399. package/src/common/errors/{permission.js → permission.ts} +10 -6
  400. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  401. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  402. package/src/common/errors/{stats.js → stats.ts} +11 -7
  403. package/src/common/errors/{webex-errors.js → webex-errors.ts} +51 -8
  404. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  405. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  406. package/src/common/events/{events.js → events.ts} +5 -1
  407. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  408. package/src/common/events/{util.js → util.ts} +2 -3
  409. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  410. package/src/common/logs/logger-proxy.ts +44 -0
  411. package/src/common/logs/{request.js → request.ts} +26 -9
  412. package/src/common/queue.ts +22 -9
  413. package/src/{config.js → config.ts} +19 -21
  414. package/src/constants.ts +296 -27
  415. package/src/controls-options-manager/constants.ts +5 -0
  416. package/src/controls-options-manager/enums.ts +18 -0
  417. package/src/controls-options-manager/index.ts +278 -0
  418. package/src/controls-options-manager/types.ts +59 -0
  419. package/src/controls-options-manager/util.ts +300 -0
  420. package/src/index.ts +45 -0
  421. package/src/interceptors/index.ts +3 -0
  422. package/src/interceptors/locusRetry.ts +67 -0
  423. package/src/interpretation/README.md +60 -0
  424. package/src/interpretation/collection.ts +19 -0
  425. package/src/interpretation/index.ts +349 -0
  426. package/src/interpretation/siLanguage.ts +18 -0
  427. package/src/locus-info/controlsUtils.ts +222 -0
  428. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  429. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  430. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  431. package/src/locus-info/{index.js → index.ts} +561 -119
  432. package/src/locus-info/{infoUtils.js → infoUtils.ts} +29 -10
  433. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +97 -17
  434. package/src/locus-info/{parser.js → parser.ts} +303 -104
  435. package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
  436. package/src/media/index.ts +460 -0
  437. package/src/media/properties.ts +283 -0
  438. package/src/media/{util.js → util.ts} +2 -2
  439. package/src/mediaQualityMetrics/config.ts +249 -0
  440. package/src/meeting/in-meeting-actions.ts +199 -3
  441. package/src/meeting/index.ts +8494 -0
  442. package/src/meeting/locusMediaRequest.ts +313 -0
  443. package/src/meeting/muteState.ts +465 -0
  444. package/src/meeting/request.ts +912 -0
  445. package/src/meeting/request.type.ts +13 -0
  446. package/src/meeting/{state.js → state.ts} +50 -35
  447. package/src/meeting/util.ts +799 -0
  448. package/src/meeting/voicea-meeting.ts +122 -0
  449. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  450. package/src/meeting-info/index.ts +210 -0
  451. package/src/meeting-info/meeting-info-v2.ts +423 -0
  452. package/src/meeting-info/{request.js → request.ts} +14 -4
  453. package/src/meeting-info/{util.js → util.ts} +70 -58
  454. package/src/meeting-info/{utilv2.js → utilv2.ts} +99 -82
  455. package/src/meetings/collection.ts +76 -0
  456. package/src/meetings/index.ts +1539 -0
  457. package/src/meetings/meetings.types.ts +12 -0
  458. package/src/meetings/{request.js → request.ts} +34 -25
  459. package/src/meetings/{util.js → util.ts} +133 -38
  460. package/src/member/{index.js → index.ts} +159 -56
  461. package/src/member/types.ts +38 -0
  462. package/src/member/util.ts +397 -0
  463. package/src/members/{collection.js → collection.ts} +10 -2
  464. package/src/members/{index.js → index.ts} +351 -146
  465. package/src/members/request.ts +255 -0
  466. package/src/members/types.ts +29 -0
  467. package/src/members/util.ts +353 -0
  468. package/src/metrics/{constants.js → constants.ts} +17 -6
  469. package/src/metrics/index.ts +73 -0
  470. package/src/multistream/mediaRequestManager.ts +341 -64
  471. package/src/multistream/receiveSlot.ts +69 -26
  472. package/src/multistream/receiveSlotManager.ts +66 -42
  473. package/src/multistream/remoteMedia.ts +40 -5
  474. package/src/multistream/remoteMediaGroup.ts +82 -3
  475. package/src/multistream/remoteMediaManager.ts +401 -81
  476. package/src/multistream/sendSlotManager.ts +199 -0
  477. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  478. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  479. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  480. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  481. package/src/reachability/clusterReachability.ts +320 -0
  482. package/src/reachability/index.ts +371 -0
  483. package/src/reachability/request.ts +50 -35
  484. package/src/reachability/util.ts +24 -0
  485. package/src/reactions/constants.ts +4 -0
  486. package/src/reactions/reactions.ts +104 -0
  487. package/src/reactions/reactions.type.ts +62 -0
  488. package/src/reconnection-manager/index.ts +643 -0
  489. package/src/recording-controller/enums.ts +8 -0
  490. package/src/recording-controller/index.ts +332 -0
  491. package/src/recording-controller/util.ts +75 -0
  492. package/src/roap/index.ts +288 -0
  493. package/src/roap/request.ts +153 -0
  494. package/src/roap/turnDiscovery.ts +374 -70
  495. package/src/rtcMetrics/constants.ts +3 -0
  496. package/src/rtcMetrics/index.ts +166 -0
  497. package/src/statsAnalyzer/global.ts +37 -0
  498. package/src/statsAnalyzer/index.ts +1275 -0
  499. package/src/statsAnalyzer/mqaUtil.ts +440 -0
  500. package/src/transcription/{index.js → index.ts} +46 -39
  501. package/src/webinar/collection.ts +31 -0
  502. package/src/webinar/index.ts +62 -0
  503. package/test/integration/spec/converged-space-meetings.js +233 -0
  504. package/test/integration/spec/journey.js +791 -531
  505. package/test/integration/spec/space-meeting.js +391 -204
  506. package/test/integration/spec/transcription.js +7 -8
  507. package/test/unit/spec/annotation/index.ts +418 -0
  508. package/test/unit/spec/breakouts/breakout.ts +238 -0
  509. package/test/unit/spec/breakouts/collection.ts +15 -0
  510. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  511. package/test/unit/spec/breakouts/events.ts +89 -0
  512. package/test/unit/spec/breakouts/index.ts +1793 -0
  513. package/test/unit/spec/breakouts/request.ts +104 -0
  514. package/test/unit/spec/breakouts/utils.js +72 -0
  515. package/test/unit/spec/common/browser-detection.js +9 -28
  516. package/test/unit/spec/common/queue.js +31 -2
  517. package/test/unit/spec/controls-options-manager/index.js +287 -0
  518. package/test/unit/spec/controls-options-manager/util.js +582 -0
  519. package/test/unit/spec/fixture/locus.js +93 -90
  520. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  521. package/test/unit/spec/interpretation/collection.ts +15 -0
  522. package/test/unit/spec/interpretation/index.ts +625 -0
  523. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  524. package/test/unit/spec/locus-info/controlsUtils.js +325 -32
  525. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  526. package/test/unit/spec/locus-info/index.js +1458 -21
  527. package/test/unit/spec/locus-info/infoUtils.js +71 -40
  528. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  529. package/test/unit/spec/locus-info/lib/SeqCmp.json +529 -685
  530. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  531. package/test/unit/spec/locus-info/parser.js +119 -44
  532. package/test/unit/spec/locus-info/selfConstant.js +120 -103
  533. package/test/unit/spec/locus-info/selfUtils.js +291 -12
  534. package/test/unit/spec/media/index.ts +194 -111
  535. package/test/unit/spec/media/properties.ts +11 -11
  536. package/test/unit/spec/meeting/in-meeting-actions.ts +96 -3
  537. package/test/unit/spec/meeting/index.js +8616 -1921
  538. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  539. package/test/unit/spec/meeting/muteState.js +568 -207
  540. package/test/unit/spec/meeting/request.js +602 -82
  541. package/test/unit/spec/meeting/utils.js +867 -179
  542. package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
  543. package/test/unit/spec/meeting-info/index.js +300 -0
  544. package/test/unit/spec/meeting-info/meetinginfov2.js +631 -78
  545. package/test/unit/spec/meeting-info/request.js +7 -9
  546. package/test/unit/spec/meeting-info/util.js +11 -12
  547. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  548. package/test/unit/spec/meetings/collection.js +27 -1
  549. package/test/unit/spec/meetings/index.js +1826 -374
  550. package/test/unit/spec/meetings/utils.js +243 -14
  551. package/test/unit/spec/member/index.js +61 -7
  552. package/test/unit/spec/member/util.js +526 -26
  553. package/test/unit/spec/members/index.js +536 -55
  554. package/test/unit/spec/members/request.js +228 -40
  555. package/test/unit/spec/members/utils.js +217 -4
  556. package/test/unit/spec/metrics/index.js +13 -68
  557. package/test/unit/spec/multistream/mediaRequestManager.ts +1032 -110
  558. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  559. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  560. package/test/unit/spec/multistream/remoteMedia.ts +40 -2
  561. package/test/unit/spec/multistream/remoteMediaGroup.ts +350 -5
  562. package/test/unit/spec/multistream/remoteMediaManager.ts +937 -65
  563. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  564. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  565. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  566. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  567. package/test/unit/spec/reachability/index.ts +606 -26
  568. package/test/unit/spec/reachability/request.js +68 -0
  569. package/test/unit/spec/reachability/util.ts +40 -0
  570. package/test/unit/spec/reconnection-manager/index.js +222 -34
  571. package/test/unit/spec/recording-controller/index.js +306 -0
  572. package/test/unit/spec/recording-controller/util.js +229 -0
  573. package/test/unit/spec/roap/index.ts +238 -82
  574. package/test/unit/spec/roap/request.ts +255 -0
  575. package/test/unit/spec/roap/turnDiscovery.ts +707 -110
  576. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  577. package/test/unit/spec/stats-analyzer/index.js +1331 -62
  578. package/test/unit/spec/webinar/collection.ts +13 -0
  579. package/test/unit/spec/webinar/index.ts +60 -0
  580. package/test/utils/cmr.js +44 -42
  581. package/test/utils/constants.js +9 -0
  582. package/test/utils/integrationTestUtils.js +46 -0
  583. package/test/utils/testUtils.js +63 -99
  584. package/test/utils/webex-config.js +22 -18
  585. package/test/utils/webex-test-users.js +65 -50
  586. package/tsconfig.json +6 -0
  587. package/dist/media/internal-media-core-wrapper.js +0 -22
  588. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  589. package/dist/meeting/effectsState.js +0 -327
  590. package/dist/meeting/effectsState.js.map +0 -1
  591. package/dist/metrics/config.js +0 -301
  592. package/dist/metrics/config.js.map +0 -1
  593. package/dist/multistream/multistreamMedia.js +0 -116
  594. package/dist/multistream/multistreamMedia.js.map +0 -1
  595. package/dist/peer-connection-manager/util.js +0 -124
  596. package/dist/peer-connection-manager/util.js.map +0 -1
  597. package/src/common/logs/logger-proxy.js +0 -33
  598. package/src/index.js +0 -15
  599. package/src/locus-info/controlsUtils.js +0 -102
  600. package/src/media/index.js +0 -459
  601. package/src/media/internal-media-core-wrapper.ts +0 -9
  602. package/src/media/properties.js +0 -289
  603. package/src/mediaQualityMetrics/config.js +0 -382
  604. package/src/meeting/effectsState.js +0 -205
  605. package/src/meeting/index.js +0 -6284
  606. package/src/meeting/muteState.js +0 -318
  607. package/src/meeting/request.js +0 -684
  608. package/src/meeting/util.js +0 -506
  609. package/src/meeting-info/index.js +0 -131
  610. package/src/meeting-info/meeting-info-v2.js +0 -255
  611. package/src/meetings/collection.js +0 -40
  612. package/src/meetings/index.js +0 -1015
  613. package/src/member/util.js +0 -254
  614. package/src/members/request.js +0 -131
  615. package/src/members/util.js +0 -258
  616. package/src/metrics/config.js +0 -324
  617. package/src/metrics/index.js +0 -530
  618. package/src/multistream/multistreamMedia.ts +0 -92
  619. package/src/peer-connection-manager/util.ts +0 -117
  620. package/src/reachability/index.js +0 -464
  621. package/src/reconnection-manager/index.js +0 -519
  622. package/src/roap/index.js +0 -220
  623. package/src/roap/request.js +0 -127
  624. package/src/statsAnalyzer/global.js +0 -133
  625. package/src/statsAnalyzer/index.js +0 -1006
  626. package/src/statsAnalyzer/mqaUtil.js +0 -173
  627. package/test/unit/spec/meeting/effectsState.js +0 -291
  628. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  629. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -1,144 +1,210 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
- exports.default = void 0;
12
-
8
+ exports.createMuteState = exports.MuteState = void 0;
13
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
14
-
15
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
16
-
17
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
18
-
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
19
13
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
20
-
21
14
  var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
22
-
23
- var _permission = _interopRequireDefault(require("../common/errors/permission"));
24
-
25
- var _media = _interopRequireDefault(require("../media"));
26
-
27
- var _util = _interopRequireDefault(require("../meeting/util"));
28
-
15
+ var _util = _interopRequireDefault(require("./util"));
29
16
  var _constants = require("../constants");
30
-
31
- /* Certain aspects of server interaction for video muting are not implemented as we currently don't support remote muting of video.
32
- If we ever need to support it, search for REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION string to find the places that need updating
33
- */
34
- var createMuteState = function createMuteState(type, meeting, mediaDirection) {
35
- if (type === _constants.AUDIO && !mediaDirection.sendAudio) {
36
- return null;
37
- }
38
-
39
- if (type === _constants.VIDEO && !mediaDirection.sendVideo) {
40
- return null;
41
- }
17
+ // eslint-disable-next-line import/prefer-default-export
18
+ var createMuteState = function createMuteState(type, meeting, enabled) {
19
+ // todo: remove the meeting argument (SPARK-399695)
42
20
 
43
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));
44
-
45
- return new MuteState(type, meeting);
22
+ var muteState = new MuteState(type, meeting, enabled);
23
+ return muteState;
46
24
  };
25
+
47
26
  /** The purpose of this class is to manage the local and remote mute state and make sure that the server state always matches
48
27
  the last requested state by the client.
49
28
 
50
29
  More info about Locus muting API: https://sqbu-github.cisco.com/pages/WebExSquared/locus/guides/mute.html#
51
- */
52
-
53
30
 
31
+ This class is exported only for unit tests. It should never be instantiated directly with new MuteState(), instead createMuteState() should be called
32
+ */
33
+ exports.createMuteState = createMuteState;
54
34
  var MuteState = /*#__PURE__*/function () {
55
35
  /**
56
36
  * Constructor
57
37
  *
58
38
  * @param {String} type - audio or video
59
39
  * @param {Object} meeting - the meeting object (used for reading current remote mute status)
40
+ * @param {boolean} enabled - whether the client audio/video is enabled at all
60
41
  */
61
- function MuteState(type, meeting) {
42
+ function MuteState(type, meeting, enabled) {
43
+ var _meeting$remoteVideoM, _meeting$unmuteVideoA;
62
44
  (0, _classCallCheck2.default)(this, MuteState);
63
-
45
+ (0, _defineProperty2.default)(this, "state", void 0);
46
+ (0, _defineProperty2.default)(this, "type", void 0);
47
+ (0, _defineProperty2.default)(this, "ignoreMuteStateChange", void 0);
64
48
  if (type !== _constants.AUDIO && type !== _constants.VIDEO) {
65
49
  throw new _parameter.default('Mute state is designed for handling audio or video only');
66
50
  }
67
-
68
51
  this.type = type;
52
+ this.ignoreMuteStateChange = false;
69
53
  this.state = {
70
54
  client: {
71
- localMute: false
55
+ enabled: enabled,
56
+ localMute: true
72
57
  },
73
58
  server: {
74
- localMute: false,
75
- // initial values available only for audio (REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION)
76
- remoteMute: type === _constants.AUDIO ? meeting.remoteMuted : false,
77
- unmuteAllowed: type === _constants.AUDIO ? meeting.unmuteAllowed : true
59
+ localMute: true,
60
+ // because remoteVideoMuted and unmuteVideoAllowed are updated seperately, they might be undefined
61
+ remoteMute: type === _constants.AUDIO ? meeting.remoteMuted : (_meeting$remoteVideoM = meeting.remoteVideoMuted) !== null && _meeting$remoteVideoM !== void 0 ? _meeting$remoteVideoM : false,
62
+ unmuteAllowed: type === _constants.AUDIO ? meeting.unmuteAllowed : (_meeting$unmuteVideoA = meeting.unmuteVideoAllowed) !== null && _meeting$unmuteVideoA !== void 0 ? _meeting$unmuteVideoA : true
78
63
  },
79
64
  syncToServerInProgress: false
80
- }; // these 2 hold the resolve, reject methods for the promise we returned to the client in last handleClientRequest() call
81
-
82
- this.pendingPromiseResolve = null;
83
- this.pendingPromiseReject = null;
65
+ };
84
66
  }
67
+
85
68
  /**
86
- * Handles mute/unmute request from the client/user. Returns a promise that's resolved once the server update is completed or
87
- * at the point that this request becomese superseded by another client request.
88
- *
89
- * The client doesn't have to wait for the returned promise to resolve before calling handleClientRequest() again. If
90
- * handleClientRequest() is called again before the previous one resolved, the MuteState class will make sure that eventually
91
- * the server state will match the last requested state from the client.
69
+ * Starts the mute state machine. Needs to be called after a new MuteState instance is created.
92
70
  *
93
- * @public
94
- * @memberof MuteState
95
- * @param {Object} [meeting] the meeting object
96
- * @param {Boolean} [mute] true for muting, false for unmuting request
97
- * @returns {Promise}
71
+ * @param {Object} meeting - the meeting object
72
+ * @returns {void}
98
73
  */
99
-
100
-
101
74
  (0, _createClass2.default)(MuteState, [{
102
- key: "handleClientRequest",
103
- value: function handleClientRequest(meeting, mute) {
104
- var _this = this;
105
-
106
- _loggerProxy.default.logger.info("Meeting:muteState#handleClientRequest --> ".concat(this.type, ": user requesting new mute state: ").concat(mute));
75
+ key: "init",
76
+ value: function init(meeting) {
77
+ var _meeting$mediaPropert, _meeting$mediaPropert2;
78
+ this.applyUnmuteAllowedToStream(meeting);
79
+
80
+ // if we are remotely muted, we need to apply that to the local stream now (mute on-entry)
81
+ if (this.state.server.remoteMute) {
82
+ this.muteLocalStream(meeting, this.state.server.remoteMute, 'remotelyMuted');
83
+ }
84
+ 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;
85
+ _loggerProxy.default.logger.info("Meeting:muteState#init --> ".concat(this.type, ": local stream initial mute state: ").concat(initialMute));
86
+ if (initialMute !== undefined) {
87
+ this.state.client.localMute = initialMute;
88
+ } else {
89
+ // there is no stream, so it's like we are locally muted
90
+ // (this is important especially for transcoded meetings, in which the SDP m-line direction always stays "sendrecv")
91
+ this.state.client.localMute = true;
92
+ }
93
+ this.applyClientStateToServer(meeting);
94
+ }
107
95
 
108
- if (!mute && !this.state.server.unmuteAllowed) {
109
- return _promise.default.reject(new _permission.default('User is not allowed to unmute self (hard mute feature is being used)'));
110
- } // 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,
111
- // because the client may have changed the audio/vidoe tracks
96
+ /**
97
+ * This method needs to be called whenever the local audio/video stream has changed.
98
+ * It reapplies the remote mute state onto the new stream and also reads the current
99
+ * local mute state from the stream and updates the internal state machine and sends
100
+ * any required requests to the server.
101
+ *
102
+ * @param {Object} meeting - the meeting object
103
+ * @returns {void}
104
+ */
105
+ }, {
106
+ key: "handleLocalStreamChange",
107
+ value: function handleLocalStreamChange(meeting) {
108
+ return this.init(meeting);
109
+ }
112
110
 
111
+ /**
112
+ * Enables/disables audio/video
113
+ *
114
+ * @param {Object} meeting - the meeting object
115
+ * @param {boolean} enable
116
+ * @returns {void}
117
+ */
118
+ }, {
119
+ key: "enable",
120
+ value: function enable(meeting, _enable) {
121
+ this.state.client.enabled = _enable;
122
+ this.applyClientStateToServer(meeting);
123
+ }
113
124
 
114
- this.state.client.localMute = mute;
115
- this.applyClientStateLocally(meeting);
116
- return new _promise.default(function (resolve, reject) {
117
- if (_this.pendingPromiseResolve) {
118
- // resolve the last promise we returned to the client as the client has issued a new request that has superseded the previous one
119
- _this.pendingPromiseResolve();
120
- }
125
+ /**
126
+ * Mutes/unmutes local stream
127
+ *
128
+ * @param {Object} meeting - the meeting object
129
+ * @param {Boolean} mute - true to mute the stream, false to unmute it
130
+ * @param {ServerMuteReason} reason - reason for muting/unmuting
131
+ * @returns {void}
132
+ */
133
+ }, {
134
+ key: "muteLocalStream",
135
+ value: function muteLocalStream(meeting, mute, reason) {
136
+ this.ignoreMuteStateChange = true;
137
+ if (this.type === _constants.AUDIO) {
138
+ var _meeting$mediaPropert3;
139
+ (_meeting$mediaPropert3 = meeting.mediaProperties.audioStream) === null || _meeting$mediaPropert3 === void 0 ? void 0 : _meeting$mediaPropert3.setServerMuted(mute, reason);
140
+ } else {
141
+ var _meeting$mediaPropert4;
142
+ (_meeting$mediaPropert4 = meeting.mediaProperties.videoStream) === null || _meeting$mediaPropert4 === void 0 ? void 0 : _meeting$mediaPropert4.setServerMuted(mute, reason);
143
+ }
144
+ this.ignoreMuteStateChange = false;
145
+ }
121
146
 
122
- _this.pendingPromiseResolve = resolve;
123
- _this.pendingPromiseReject = reject;
147
+ /**
148
+ * This method should be called when the local stream mute state is changed
149
+ * @public
150
+ * @memberof MuteState
151
+ * @param {Object} [meeting] the meeting object
152
+ * @param {Boolean} [mute] true for muting, false for unmuting request
153
+ * @returns {void}
154
+ */
155
+ }, {
156
+ key: "handleLocalStreamMuteStateChange",
157
+ value: function handleLocalStreamMuteStateChange(meeting) {
158
+ if (this.ignoreMuteStateChange) {
159
+ return;
160
+ }
124
161
 
125
- _this.applyClientStateToServer(meeting);
126
- });
162
+ // either user or system may have triggered a mute state change, but localMute should reflect both
163
+ var newMuteState;
164
+ var userMuteState;
165
+ var systemMuteState;
166
+ if (this.type === _constants.AUDIO) {
167
+ var _meeting$mediaPropert5, _meeting$mediaPropert6, _meeting$mediaPropert7;
168
+ newMuteState = (_meeting$mediaPropert5 = meeting.mediaProperties.audioStream) === null || _meeting$mediaPropert5 === void 0 ? void 0 : _meeting$mediaPropert5.muted;
169
+ userMuteState = (_meeting$mediaPropert6 = meeting.mediaProperties.audioStream) === null || _meeting$mediaPropert6 === void 0 ? void 0 : _meeting$mediaPropert6.userMuted;
170
+ systemMuteState = (_meeting$mediaPropert7 = meeting.mediaProperties.audioStream) === null || _meeting$mediaPropert7 === void 0 ? void 0 : _meeting$mediaPropert7.systemMuted;
171
+ } else {
172
+ var _meeting$mediaPropert8, _meeting$mediaPropert9, _meeting$mediaPropert10;
173
+ newMuteState = (_meeting$mediaPropert8 = meeting.mediaProperties.videoStream) === null || _meeting$mediaPropert8 === void 0 ? void 0 : _meeting$mediaPropert8.muted;
174
+ userMuteState = (_meeting$mediaPropert9 = meeting.mediaProperties.videoStream) === null || _meeting$mediaPropert9 === void 0 ? void 0 : _meeting$mediaPropert9.userMuted;
175
+ systemMuteState = (_meeting$mediaPropert10 = meeting.mediaProperties.videoStream) === null || _meeting$mediaPropert10 === void 0 ? void 0 : _meeting$mediaPropert10.systemMuted;
176
+ }
177
+ _loggerProxy.default.logger.info("Meeting:muteState#handleLocalStreamMuteStateChange --> ".concat(this.type, ": local stream new mute state: ").concat(newMuteState, " (user mute: ").concat(userMuteState, ", system mute: ").concat(systemMuteState, ")"));
178
+ this.state.client.localMute = newMuteState;
179
+ this.applyClientStateToServer(meeting);
127
180
  }
181
+
128
182
  /**
129
- * Applies the current mute state to the local track (by enabling or disabling it accordingly)
183
+ * Applies the current mute state to the local stream (by enabling or disabling it accordingly)
130
184
  *
131
185
  * @public
132
186
  * @param {Object} [meeting] the meeting object
187
+ * @param {ServerMuteReason} reason - reason why we're applying our client state to the local stream
133
188
  * @memberof MuteState
134
189
  * @returns {void}
135
190
  */
136
-
137
191
  }, {
138
192
  key: "applyClientStateLocally",
139
- value: function applyClientStateLocally(meeting) {
140
- _media.default.setLocalTrack(!this.state.client.localMute, this.type === _constants.AUDIO ? meeting.mediaProperties.audioTrack : meeting.mediaProperties.videoTrack);
193
+ value: function applyClientStateLocally(meeting, reason) {
194
+ this.muteLocalStream(meeting, this.state.client.localMute, reason);
195
+ }
196
+
197
+ /** Returns true if client is locally muted - it takes into account not just the client local mute state,
198
+ * but also whether audio/video is enabled at all
199
+ *
200
+ * @returns {boolean}
201
+ */
202
+ }, {
203
+ key: "getClientLocalMuteState",
204
+ value: function getClientLocalMuteState() {
205
+ return this.state.client.enabled ? this.state.client.localMute : true;
141
206
  }
207
+
142
208
  /**
143
209
  * Updates the server local and remote mute values so that they match the current client desired state.
144
210
  *
@@ -147,62 +213,47 @@ var MuteState = /*#__PURE__*/function () {
147
213
  * @memberof MuteState
148
214
  * @returns {void}
149
215
  */
150
-
151
216
  }, {
152
217
  key: "applyClientStateToServer",
153
218
  value: function applyClientStateToServer(meeting) {
154
- var _this2 = this;
155
-
219
+ var _this = this;
156
220
  if (this.state.syncToServerInProgress) {
157
221
  _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": request to server in progress, we need to wait for it to complete"));
158
-
159
222
  return;
160
223
  }
161
-
162
- var localMuteRequiresSync = this.state.client.localMute !== this.state.server.localMute;
163
- var remoteMuteRequiresSync = !this.state.client.localMute && this.state.server.remoteMute;
164
-
165
- _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": localMuteRequiresSync: ").concat(localMuteRequiresSync, " (").concat(this.state.client.localMute, " ?= ").concat(this.state.server.localMute, ")"));
166
-
224
+ var localMuteState = this.getClientLocalMuteState();
225
+ var localMuteRequiresSync = localMuteState !== this.state.server.localMute;
226
+ var remoteMuteRequiresSync = !localMuteState && this.state.server.remoteMute;
227
+ _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": localMuteRequiresSync: ").concat(localMuteRequiresSync, " (").concat(localMuteState, " ?= ").concat(this.state.server.localMute, ")"));
167
228
  _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": remoteMuteRequiresSync: ").concat(remoteMuteRequiresSync));
168
-
169
229
  if (!localMuteRequiresSync && !remoteMuteRequiresSync) {
170
230
  _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": client state already matching server state, nothing to do"));
171
-
172
- if (this.pendingPromiseResolve) {
173
- this.pendingPromiseResolve();
174
- }
175
-
176
- this.pendingPromiseResolve = null;
177
- this.pendingPromiseReject = null;
178
231
  return;
179
232
  }
233
+ this.state.syncToServerInProgress = true;
180
234
 
181
- this.state.syncToServerInProgress = true; // first sync local mute with server
182
-
235
+ // first sync local mute with server
183
236
  var localMuteSyncPromise = localMuteRequiresSync ? this.sendLocalMuteRequestToServer(meeting) : _promise.default.resolve();
184
237
  localMuteSyncPromise.then(function () {
185
- return (// then follow it up with remote mute sync
186
- remoteMuteRequiresSync ? _this2.sendRemoteMuteRequestToServer(meeting) : _promise.default.resolve()
238
+ return (
239
+ // then follow it up with remote mute sync
240
+ remoteMuteRequiresSync ? _this.sendRemoteMuteRequestToServer(meeting) : _promise.default.resolve()
187
241
  );
188
242
  }).then(function () {
189
- _this2.state.syncToServerInProgress = false;
190
-
191
- _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(_this2.type, ": sync with server completed")); // need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
243
+ _this.state.syncToServerInProgress = false;
244
+ _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(_this.type, ": sync with server completed"));
192
245
 
193
-
194
- _this2.applyClientStateToServer(meeting);
246
+ // need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
247
+ _this.applyClientStateToServer(meeting);
195
248
  }).catch(function (e) {
196
- _this2.state.syncToServerInProgress = false;
249
+ _this.state.syncToServerInProgress = false;
250
+ _loggerProxy.default.logger.warn("Meeting:muteState#applyClientStateToServer --> ".concat(_this.type, ": error: ").concat(e));
197
251
 
198
- if (_this2.pendingPromiseReject) {
199
- _this2.pendingPromiseReject(e);
200
- }
201
-
202
- _this2.pendingPromiseResolve = null;
203
- _this2.pendingPromiseReject = null;
252
+ // failed to apply client state to server, so revert stream mute state to server state
253
+ _this.muteLocalStream(meeting, _this.state.server.localMute || _this.state.server.remoteMute, 'clientRequestFailed');
204
254
  });
205
255
  }
256
+
206
257
  /**
207
258
  * Sets the local mute value in the server
208
259
  *
@@ -211,31 +262,26 @@ var MuteState = /*#__PURE__*/function () {
211
262
  * @memberof MuteState
212
263
  * @returns {Promise}
213
264
  */
214
-
215
265
  }, {
216
266
  key: "sendLocalMuteRequestToServer",
217
267
  value: function sendLocalMuteRequestToServer(meeting) {
218
- var _meeting$audio,
219
- _meeting$video,
220
- _this3 = this;
221
-
222
- 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;
223
- 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;
224
-
268
+ var _this2 = this;
269
+ var audioMuted = this.type === _constants.AUDIO ? this.getClientLocalMuteState() : undefined;
270
+ var videoMuted = this.type === _constants.VIDEO ? this.getClientLocalMuteState() : undefined;
225
271
  _loggerProxy.default.logger.info("Meeting:muteState#sendLocalMuteRequestToServer --> ".concat(this.type, ": sending local mute (audio=").concat(audioMuted, ", video=").concat(videoMuted, ") to server"));
226
-
227
- return _util.default.remoteUpdateAudioVideo(audioMuted, videoMuted, meeting).then(function (locus) {
228
- _loggerProxy.default.logger.info("Meeting:muteState#sendLocalMuteRequestToServer --> ".concat(_this3.type, ": local mute (audio=").concat(audioMuted, ", video=").concat(videoMuted, ") applied to server"));
229
-
230
- _this3.state.server.localMute = _this3.type === _constants.AUDIO ? audioMuted : videoMuted;
231
- meeting.locusInfo.onFullLocus(locus);
272
+ return _util.default.remoteUpdateAudioVideo(meeting, audioMuted, videoMuted).then(function (locus) {
273
+ _loggerProxy.default.logger.info("Meeting:muteState#sendLocalMuteRequestToServer --> ".concat(_this2.type, ": local mute (audio=").concat(audioMuted, ", video=").concat(videoMuted, ") applied to server"));
274
+ _this2.state.server.localMute = _this2.type === _constants.AUDIO ? audioMuted : videoMuted;
275
+ if (locus) {
276
+ meeting.locusInfo.handleLocusDelta(locus, meeting);
277
+ }
232
278
  return locus;
233
279
  }).catch(function (remoteUpdateError) {
234
- _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));
235
-
280
+ _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));
236
281
  return _promise.default.reject(remoteUpdateError);
237
282
  });
238
283
  }
284
+
239
285
  /**
240
286
  * Sets the remote mute value in the server
241
287
  *
@@ -244,50 +290,63 @@ var MuteState = /*#__PURE__*/function () {
244
290
  * @memberof MuteState
245
291
  * @returns {Promise}
246
292
  */
247
-
248
293
  }, {
249
294
  key: "sendRemoteMuteRequestToServer",
250
295
  value: function sendRemoteMuteRequestToServer(meeting) {
251
- var _this4 = this;
296
+ var _this3 = this;
297
+ var remoteMute = this.getClientLocalMuteState();
298
+ _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(this.type, ": sending remote mute:").concat(remoteMute, " to server"));
299
+ return meeting.members.muteMember(meeting.members.selfId, remoteMute, this.type === _constants.AUDIO).then(function () {
300
+ _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this3.type, ": remote mute:").concat(remoteMute, " applied to server"));
301
+ _this3.state.server.remoteMute = remoteMute;
302
+ }).catch(function (remoteUpdateError) {
303
+ _loggerProxy.default.logger.warn("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this3.type, ": failed to apply remote mute ").concat(remoteMute, " to server: ").concat(remoteUpdateError));
304
+ return _promise.default.reject(remoteUpdateError);
305
+ });
306
+ }
252
307
 
308
+ /** Applies the current value for unmute allowed to the underlying stream
309
+ *
310
+ * @param {Meeting} meeting
311
+ * @returns {void}
312
+ */
313
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
314
+ }, {
315
+ key: "applyUnmuteAllowedToStream",
316
+ value: function applyUnmuteAllowedToStream(meeting) {
253
317
  if (this.type === _constants.AUDIO) {
254
- var remoteMute = this.state.client.localMute;
255
-
256
- _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(this.type, ": sending remote mute:").concat(remoteMute, " to server"));
257
-
258
- return meeting.members.muteMember(meeting.members.selfId, remoteMute).then(function () {
259
- _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this4.type, ": remote mute:").concat(remoteMute, " applied to server"));
260
-
261
- _this4.state.server.remoteMute = remoteMute;
262
- }).catch(function (remoteUpdateError) {
263
- _loggerProxy.default.logger.warn("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this4.type, ": failed to apply remote mute ").concat(remoteMute, " to server: ").concat(remoteUpdateError));
264
-
265
- return _promise.default.reject(remoteUpdateError);
266
- });
267
- } // for now we don't need to support remote muting of video (REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION)
268
-
269
-
270
- this.state.server.remoteMute = this.state.client.localMute;
271
- return _promise.default.resolve();
318
+ var _meeting$mediaPropert11;
319
+ (_meeting$mediaPropert11 = meeting.mediaProperties.audioStream) === null || _meeting$mediaPropert11 === void 0 ? void 0 : _meeting$mediaPropert11.setUnmuteAllowed(this.state.server.unmuteAllowed);
320
+ } else {
321
+ var _meeting$mediaPropert12;
322
+ (_meeting$mediaPropert12 = meeting.mediaProperties.videoStream) === null || _meeting$mediaPropert12 === void 0 ? void 0 : _meeting$mediaPropert12.setUnmuteAllowed(this.state.server.unmuteAllowed);
323
+ }
272
324
  }
325
+
273
326
  /**
274
327
  * This method should be called whenever the server remote mute state is changed
275
328
  *
276
329
  * @public
277
330
  * @memberof MuteState
331
+ * @param {Meeting} meeting
278
332
  * @param {Boolean} [muted] true if user is remotely muted, false otherwise
279
333
  * @param {Boolean} [unmuteAllowed] indicates if user is allowed to unmute self (false when "hard mute" feature is used)
280
334
  * @returns {undefined}
281
335
  */
282
-
283
336
  }, {
284
337
  key: "handleServerRemoteMuteUpdate",
285
- value: function handleServerRemoteMuteUpdate(muted, unmuteAllowed) {
338
+ value: function handleServerRemoteMuteUpdate(meeting, muted, unmuteAllowed) {
286
339
  _loggerProxy.default.logger.info("Meeting:muteState#handleServerRemoteMuteUpdate --> ".concat(this.type, ": updating server remoteMute to (").concat(muted, ")"));
287
-
288
- this.state.server.remoteMute = muted;
289
- this.state.server.unmuteAllowed = unmuteAllowed;
340
+ if (unmuteAllowed !== undefined) {
341
+ this.state.server.unmuteAllowed = unmuteAllowed;
342
+ this.applyUnmuteAllowedToStream(meeting);
343
+ }
344
+ if (muted !== undefined) {
345
+ this.state.server.remoteMute = muted;
346
+ this.muteLocalStream(meeting, muted, 'remotelyMuted');
347
+ }
290
348
  }
349
+
291
350
  /**
292
351
  * This method should be called whenever we receive from the server a requirement to locally unmute
293
352
  *
@@ -296,66 +355,84 @@ var MuteState = /*#__PURE__*/function () {
296
355
  * @param {Object} [meeting] the meeting object
297
356
  * @returns {undefined}
298
357
  */
299
-
300
358
  }, {
301
359
  key: "handleServerLocalUnmuteRequired",
302
360
  value: function handleServerLocalUnmuteRequired(meeting) {
303
- _loggerProxy.default.logger.info("Meeting:muteState#handleServerLocalUnmuteRequired --> ".concat(this.type, ": localAudioUnmuteRequired received -> doing local unmute"));
361
+ if (!this.state.client.enabled) {
362
+ _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"));
363
+ } else {
364
+ _loggerProxy.default.logger.info("Meeting:muteState#handleServerLocalUnmuteRequired --> ".concat(this.type, ": localAudioUnmuteRequired received -> doing local unmute"));
365
+ }
304
366
 
367
+ // 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
305
368
  this.state.server.remoteMute = false;
306
- this.state.client.localMute = false;
307
369
 
308
- if (this.pendingPromiseReject) {
309
- this.pendingPromiseReject(new Error('Server requested local unmute - this overrides any client request in progress'));
310
- this.pendingPromiseResolve = null;
311
- this.pendingPromiseReject = null;
370
+ // change user mute state to false, but keep localMute true if overall mute state is still true
371
+ this.muteLocalStream(meeting, false, 'localUnmuteRequired');
372
+ if (this.type === _constants.AUDIO) {
373
+ var _meeting$mediaPropert13;
374
+ this.state.client.localMute = (_meeting$mediaPropert13 = meeting.mediaProperties.audioStream) === null || _meeting$mediaPropert13 === void 0 ? void 0 : _meeting$mediaPropert13.muted;
375
+ } else {
376
+ var _meeting$mediaPropert14;
377
+ this.state.client.localMute = (_meeting$mediaPropert14 = meeting.mediaProperties.videoStream) === null || _meeting$mediaPropert14 === void 0 ? void 0 : _meeting$mediaPropert14.muted;
312
378
  }
313
-
314
- this.applyClientStateLocally(meeting);
315
379
  this.applyClientStateToServer(meeting);
316
380
  }
381
+
317
382
  /**
318
- * Returns true if the user is locally or remotely muted
383
+ * Returns true if the user is locally or remotely muted.
384
+ * It only checks the mute status, ignoring the fact whether audio/video is enabled.
319
385
  *
320
386
  * @public
321
387
  * @memberof MuteState
322
388
  * @returns {Boolean}
323
389
  */
324
-
325
390
  }, {
326
391
  key: "isMuted",
327
392
  value: function isMuted() {
328
393
  return this.state.client.localMute || this.state.server.localMute || this.state.server.remoteMute;
329
394
  }
395
+
330
396
  /**
331
- * Returns true if the user is muted as a result of the client request (and not remotely muted)
397
+ * Returns true if the user is remotely muted
332
398
  *
333
399
  * @public
334
400
  * @memberof MuteState
335
401
  * @returns {Boolean}
336
402
  */
337
-
338
403
  }, {
339
- key: "isSelf",
340
- value: function isSelf() {
341
- return this.state.client.localMute && !this.state.server.remoteMute;
342
- } // defined for backwards compatibility with the old AudioStateMachine/VideoStateMachine classes
404
+ key: "isRemotelyMuted",
405
+ value: function isRemotelyMuted() {
406
+ return this.state.server.remoteMute;
407
+ }
343
408
 
409
+ /**
410
+ * Returns true if unmute is allowed
411
+ *
412
+ * @public
413
+ * @memberof MuteState
414
+ * @returns {Boolean}
415
+ */
344
416
  }, {
345
- key: "muted",
346
- get: function get() {
347
- return this.isMuted();
348
- } // defined for backwards compatibility with the old AudioStateMachine/VideoStateMachine classes
417
+ key: "isUnmuteAllowed",
418
+ value: function isUnmuteAllowed() {
419
+ return this.state.server.unmuteAllowed;
420
+ }
349
421
 
422
+ /**
423
+ * Returns true if the user is locally muted or audio/video is disabled
424
+ *
425
+ * @public
426
+ * @memberof MuteState
427
+ * @returns {Boolean}
428
+ */
350
429
  }, {
351
- key: "self",
352
- get: function get() {
353
- return this.isSelf();
430
+ key: "isLocallyMuted",
431
+ value: function isLocallyMuted() {
432
+ return this.getClientLocalMuteState();
354
433
  }
355
434
  }]);
356
435
  return MuteState;
357
436
  }();
358
-
359
- var _default = createMuteState;
360
- exports.default = _default;
437
+ exports.MuteState = MuteState;
361
438
  //# sourceMappingURL=muteState.js.map