@webex/plugin-meetings 3.0.0-beta.11 → 3.0.0-beta.111

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 (512) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +944 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +5 -26
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +5 -26
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +6 -27
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +5 -26
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +5 -26
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +4 -25
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +5 -26
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +5 -26
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +6 -41
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +1 -24
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +35 -61
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +6 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +193 -53
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +27 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +286 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +94 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +383 -212
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +0 -38
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +88 -123
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +62 -147
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +71 -117
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +2 -9
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +67 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2477 -2417
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +252 -113
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +296 -289
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +58 -217
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +3 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +10 -33
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +278 -281
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +1 -16
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +24 -20
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +675 -593
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +23 -42
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +177 -155
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +89 -88
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +101 -69
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +12 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +162 -204
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +58 -53
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +50 -16
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +93 -162
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +167 -50
  168. package/dist/multistream/mediaRequestManager.js.map +1 -1
  169. package/dist/multistream/receiveSlot.js +58 -65
  170. package/dist/multistream/receiveSlot.js.map +1 -1
  171. package/dist/multistream/receiveSlotManager.js +74 -93
  172. package/dist/multistream/receiveSlotManager.js.map +1 -1
  173. package/dist/multistream/remoteMedia.js +55 -74
  174. package/dist/multistream/remoteMedia.js.map +1 -1
  175. package/dist/multistream/remoteMediaGroup.js +6 -40
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  177. package/dist/multistream/remoteMediaManager.js +466 -442
  178. package/dist/multistream/remoteMediaManager.js.map +1 -1
  179. package/dist/networkQualityMonitor/index.js +32 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +10 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +2 -33
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +190 -199
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +14 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +2 -4
  194. package/dist/reactions/reactions.js.map +1 -1
  195. package/dist/reactions/reactions.type.js +19 -23
  196. package/dist/reactions/reactions.type.js.map +1 -1
  197. package/dist/reconnection-manager/index.js +326 -465
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +38 -67
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +143 -134
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +149 -101
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -95
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +369 -461
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +13 -45
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +984 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +43 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +137 -0
  274. package/dist/types/meeting/index.d.ts +1753 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +115 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +157 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +195 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +169 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +28 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +220 -0
  333. package/src/breakouts/breakout.ts +141 -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 +37 -0
  337. package/src/breakouts/index.ts +835 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/browser-detection.ts +9 -6
  341. package/src/common/collection.ts +3 -1
  342. package/src/common/errors/captcha-error.ts +6 -6
  343. package/src/common/errors/intent-to-join.ts +6 -6
  344. package/src/common/errors/join-meeting.ts +12 -8
  345. package/src/common/errors/media.ts +6 -6
  346. package/src/common/errors/parameter.ts +9 -6
  347. package/src/common/errors/password-error.ts +6 -6
  348. package/src/common/errors/permission.ts +5 -5
  349. package/src/common/errors/reconnection.ts +6 -6
  350. package/src/common/errors/stats.ts +6 -6
  351. package/src/common/errors/webex-errors.ts +7 -5
  352. package/src/common/errors/webex-meetings-error.ts +1 -1
  353. package/src/common/events/events-scope.ts +5 -1
  354. package/src/common/events/events.ts +5 -1
  355. package/src/common/events/trigger-proxy.ts +8 -3
  356. package/src/common/events/util.ts +1 -2
  357. package/src/common/logs/logger-proxy.ts +21 -10
  358. package/src/common/logs/request.ts +11 -8
  359. package/src/config.ts +16 -12
  360. package/src/constants.ts +141 -6
  361. package/src/controls-options-manager/constants.ts +5 -0
  362. package/src/controls-options-manager/enums.ts +18 -0
  363. package/src/controls-options-manager/index.ts +278 -0
  364. package/src/controls-options-manager/types.ts +59 -0
  365. package/src/controls-options-manager/util.ts +274 -0
  366. package/src/index.ts +33 -0
  367. package/src/locus-info/controlsUtils.ts +145 -24
  368. package/src/locus-info/fullState.ts +15 -11
  369. package/src/locus-info/hostUtils.ts +4 -3
  370. package/src/locus-info/index.ts +326 -55
  371. package/src/locus-info/infoUtils.ts +12 -4
  372. package/src/locus-info/mediaSharesUtils.ts +4 -4
  373. package/src/locus-info/parser.ts +46 -68
  374. package/src/locus-info/selfUtils.ts +187 -56
  375. package/src/media/index.ts +142 -172
  376. package/src/media/properties.ts +43 -36
  377. package/src/media/util.ts +1 -1
  378. package/src/mediaQualityMetrics/config.ts +380 -378
  379. package/src/meeting/in-meeting-actions.ts +139 -3
  380. package/src/meeting/index.ts +2674 -1543
  381. package/src/meeting/muteState.ts +271 -68
  382. package/src/meeting/request.ts +231 -135
  383. package/src/meeting/request.type.ts +13 -0
  384. package/src/meeting/state.ts +45 -30
  385. package/src/meeting/util.ts +119 -110
  386. package/src/meeting-info/collection.ts +2 -1
  387. package/src/meeting-info/index.ts +32 -30
  388. package/src/meeting-info/meeting-info-v2.ts +201 -113
  389. package/src/meeting-info/request.ts +9 -3
  390. package/src/meeting-info/util.ts +54 -46
  391. package/src/meeting-info/utilv2.ts +70 -55
  392. package/src/meetings/collection.ts +21 -1
  393. package/src/meetings/index.ts +749 -437
  394. package/src/meetings/request.ts +29 -25
  395. package/src/meetings/util.ts +122 -33
  396. package/src/member/index.ts +95 -49
  397. package/src/member/types.ts +24 -0
  398. package/src/member/util.ts +106 -13
  399. package/src/members/collection.ts +8 -1
  400. package/src/members/index.ts +281 -129
  401. package/src/members/request.ts +87 -14
  402. package/src/members/types.ts +28 -0
  403. package/src/members/util.ts +140 -49
  404. package/src/metrics/config.ts +302 -90
  405. package/src/metrics/constants.ts +1 -6
  406. package/src/metrics/index.ts +124 -95
  407. package/src/multistream/mediaRequestManager.ts +203 -45
  408. package/src/multistream/receiveSlot.ts +69 -26
  409. package/src/multistream/receiveSlotManager.ts +62 -38
  410. package/src/multistream/remoteMedia.ts +30 -4
  411. package/src/multistream/remoteMediaGroup.ts +4 -3
  412. package/src/multistream/remoteMediaManager.ts +230 -66
  413. package/src/networkQualityMonitor/index.ts +24 -27
  414. package/src/personal-meeting-room/index.ts +12 -16
  415. package/src/personal-meeting-room/request.ts +10 -3
  416. package/src/personal-meeting-room/util.ts +3 -3
  417. package/src/reachability/index.ts +131 -79
  418. package/src/reachability/request.ts +43 -34
  419. package/src/reactions/constants.ts +4 -0
  420. package/src/reactions/reactions.ts +8 -8
  421. package/src/reactions/reactions.type.ts +31 -5
  422. package/src/reconnection-manager/index.ts +193 -111
  423. package/src/recording-controller/enums.ts +8 -0
  424. package/src/recording-controller/index.ts +315 -0
  425. package/src/recording-controller/util.ts +58 -0
  426. package/src/roap/index.ts +63 -51
  427. package/src/roap/request.ts +86 -53
  428. package/src/roap/turnDiscovery.ts +105 -46
  429. package/src/statsAnalyzer/global.ts +8 -104
  430. package/src/statsAnalyzer/index.ts +624 -376
  431. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  432. package/src/transcription/index.ts +34 -32
  433. package/test/integration/spec/converged-space-meetings.js +177 -0
  434. package/test/integration/spec/journey.js +670 -466
  435. package/test/integration/spec/space-meeting.js +320 -204
  436. package/test/integration/spec/transcription.js +7 -8
  437. package/test/unit/spec/annotation/index.ts +435 -0
  438. package/test/unit/spec/breakouts/breakout.ts +184 -0
  439. package/test/unit/spec/breakouts/collection.ts +15 -0
  440. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  441. package/test/unit/spec/breakouts/events.ts +77 -0
  442. package/test/unit/spec/breakouts/index.ts +1542 -0
  443. package/test/unit/spec/breakouts/request.ts +104 -0
  444. package/test/unit/spec/breakouts/utils.js +72 -0
  445. package/test/unit/spec/common/browser-detection.js +9 -28
  446. package/test/unit/spec/controls-options-manager/index.js +287 -0
  447. package/test/unit/spec/controls-options-manager/util.js +504 -0
  448. package/test/unit/spec/fixture/locus.js +93 -90
  449. package/test/unit/spec/locus-info/controlsUtils.js +289 -32
  450. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  451. package/test/unit/spec/locus-info/index.js +585 -5
  452. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  453. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  454. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  455. package/test/unit/spec/locus-info/parser.js +3 -9
  456. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  457. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  458. package/test/unit/spec/media/index.ts +104 -8
  459. package/test/unit/spec/media/properties.ts +9 -9
  460. package/test/unit/spec/meeting/in-meeting-actions.ts +66 -3
  461. package/test/unit/spec/meeting/index.js +2934 -946
  462. package/test/unit/spec/meeting/muteState.js +368 -70
  463. package/test/unit/spec/meeting/request.js +194 -44
  464. package/test/unit/spec/meeting/utils.js +146 -165
  465. package/test/unit/spec/meeting-info/meetinginfov2.js +333 -74
  466. package/test/unit/spec/meeting-info/request.js +7 -9
  467. package/test/unit/spec/meeting-info/util.js +11 -12
  468. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  469. package/test/unit/spec/meetings/collection.js +15 -1
  470. package/test/unit/spec/meetings/index.js +1052 -329
  471. package/test/unit/spec/meetings/utils.js +163 -14
  472. package/test/unit/spec/member/index.js +24 -1
  473. package/test/unit/spec/member/util.js +383 -32
  474. package/test/unit/spec/members/index.js +402 -54
  475. package/test/unit/spec/members/request.js +76 -20
  476. package/test/unit/spec/members/utils.js +191 -4
  477. package/test/unit/spec/metrics/index.js +104 -20
  478. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  479. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  480. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  481. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  482. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  483. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  484. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  485. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  486. package/test/unit/spec/reachability/index.ts +176 -27
  487. package/test/unit/spec/reachability/request.js +66 -0
  488. package/test/unit/spec/reconnection-manager/index.js +62 -31
  489. package/test/unit/spec/recording-controller/index.js +231 -0
  490. package/test/unit/spec/recording-controller/util.js +102 -0
  491. package/test/unit/spec/roap/index.ts +21 -16
  492. package/test/unit/spec/roap/request.ts +217 -0
  493. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  494. package/test/unit/spec/stats-analyzer/index.js +116 -60
  495. package/test/utils/cmr.js +44 -42
  496. package/test/utils/constants.js +9 -0
  497. package/test/utils/integrationTestUtils.js +64 -0
  498. package/test/utils/testUtils.js +63 -99
  499. package/test/utils/webex-config.js +22 -18
  500. package/test/utils/webex-test-users.js +57 -50
  501. package/tsconfig.json +6 -0
  502. package/dist/media/internal-media-core-wrapper.js +0 -22
  503. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  504. package/dist/meeting/effectsState.js +0 -334
  505. package/dist/meeting/effectsState.js.map +0 -1
  506. package/dist/multistream/multistreamMedia.js +0 -116
  507. package/dist/multistream/multistreamMedia.js.map +0 -1
  508. package/src/index.js +0 -15
  509. package/src/media/internal-media-core-wrapper.ts +0 -9
  510. package/src/meeting/effectsState.ts +0 -211
  511. package/src/multistream/multistreamMedia.ts +0 -92
  512. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -1,122 +1,177 @@
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 = 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
-
19
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
20
-
21
13
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
22
-
23
14
  var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
24
-
25
15
  var _permission = _interopRequireDefault(require("../common/errors/permission"));
26
-
27
- var _media = _interopRequireDefault(require("../media"));
28
-
29
- var _util = _interopRequireDefault(require("../meeting/util"));
30
-
16
+ var _util = _interopRequireDefault(require("./util"));
31
17
  var _constants = require("../constants");
32
-
33
18
  /* Certain aspects of server interaction for video muting are not implemented as we currently don't support remote muting of video.
34
19
  If we ever need to support it, search for REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION string to find the places that need updating
35
20
  */
36
- var createMuteState = function createMuteState(type, meeting, mediaDirection) {
21
+
22
+ // eslint-disable-next-line import/prefer-default-export
23
+ var createMuteState = function createMuteState(type, meeting, mediaDirection, sdkOwnsLocalTrack) {
24
+ // todo: remove mediaDirection argument (SPARK-399695)
25
+ // todo: remove the meeting argument (SPARK-399695)
37
26
  if (type === _constants.AUDIO && !mediaDirection.sendAudio) {
38
27
  return null;
39
28
  }
40
-
41
29
  if (type === _constants.VIDEO && !mediaDirection.sendVideo) {
42
30
  return null;
43
31
  }
44
-
45
32
  _loggerProxy.default.logger.info("Meeting:muteState#createMuteState --> ".concat(type, ": creating MuteState for meeting id ").concat(meeting === null || meeting === void 0 ? void 0 : meeting.id));
46
-
47
- return new MuteState(type, meeting);
33
+ var muteState = new MuteState(type, meeting, sdkOwnsLocalTrack);
34
+ muteState.init(meeting);
35
+ return muteState;
48
36
  };
37
+
49
38
  /** The purpose of this class is to manage the local and remote mute state and make sure that the server state always matches
50
39
  the last requested state by the client.
51
40
 
52
41
  More info about Locus muting API: https://sqbu-github.cisco.com/pages/WebExSquared/locus/guides/mute.html#
53
42
  */
54
-
55
-
43
+ exports.createMuteState = createMuteState;
56
44
  var MuteState = /*#__PURE__*/function () {
45
+ // todo: remove this when doing SPARK-399695
46
+
57
47
  /**
58
48
  * Constructor
59
49
  *
60
50
  * @param {String} type - audio or video
61
51
  * @param {Object} meeting - the meeting object (used for reading current remote mute status)
52
+ * @param {boolean} sdkOwnsLocalTrack - if false, then client app owns the local track (for now that's the case only for multistream meetings)
62
53
  */
63
- function MuteState(type, meeting) {
54
+ function MuteState(type, meeting, sdkOwnsLocalTrack) {
55
+ var _meeting$remoteVideoM, _meeting$unmuteVideoA;
64
56
  (0, _classCallCheck2.default)(this, MuteState);
65
57
  (0, _defineProperty2.default)(this, "pendingPromiseReject", void 0);
66
58
  (0, _defineProperty2.default)(this, "pendingPromiseResolve", void 0);
67
59
  (0, _defineProperty2.default)(this, "state", void 0);
68
60
  (0, _defineProperty2.default)(this, "type", void 0);
69
-
61
+ (0, _defineProperty2.default)(this, "sdkOwnsLocalTrack", void 0);
62
+ (0, _defineProperty2.default)(this, "ignoreMuteStateChange", void 0);
70
63
  if (type !== _constants.AUDIO && type !== _constants.VIDEO) {
71
64
  throw new _parameter.default('Mute state is designed for handling audio or video only');
72
65
  }
73
-
74
66
  this.type = type;
67
+ this.sdkOwnsLocalTrack = sdkOwnsLocalTrack;
68
+ this.ignoreMuteStateChange = false;
75
69
  this.state = {
76
70
  client: {
77
71
  localMute: false
78
72
  },
79
73
  server: {
80
74
  localMute: false,
81
- // initial values available only for audio (REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION)
82
- remoteMute: type === _constants.AUDIO ? meeting.remoteMuted : false,
83
- unmuteAllowed: type === _constants.AUDIO ? meeting.unmuteAllowed : true
75
+ // because remoteVideoMuted and unmuteVideoAllowed are updated seperately, they might be undefined
76
+ remoteMute: type === _constants.AUDIO ? meeting.remoteMuted : (_meeting$remoteVideoM = meeting.remoteVideoMuted) !== null && _meeting$remoteVideoM !== void 0 ? _meeting$remoteVideoM : false,
77
+ unmuteAllowed: type === _constants.AUDIO ? meeting.unmuteAllowed : (_meeting$unmuteVideoA = meeting.unmuteVideoAllowed) !== null && _meeting$unmuteVideoA !== void 0 ? _meeting$unmuteVideoA : true
84
78
  },
85
79
  syncToServerInProgress: false
86
- }; // these 2 hold the resolve, reject methods for the promise we returned to the client in last handleClientRequest() call
87
-
80
+ };
81
+ // these 2 hold the resolve, reject methods for the promise we returned to the client in last handleClientRequest() call
88
82
  this.pendingPromiseResolve = null;
89
83
  this.pendingPromiseReject = null;
90
84
  }
85
+
91
86
  /**
92
- * Handles mute/unmute request from the client/user. Returns a promise that's resolved once the server update is completed or
93
- * at the point that this request becomese superseded by another client request.
94
- *
95
- * The client doesn't have to wait for the returned promise to resolve before calling handleClientRequest() again. If
96
- * handleClientRequest() is called again before the previous one resolved, the MuteState class will make sure that eventually
97
- * the server state will match the last requested state from the client.
87
+ * Starts the mute state machine. Needs to be called after a new MuteState instance is created.
98
88
  *
99
- * @public
100
- * @memberof MuteState
101
- * @param {Object} [meeting] the meeting object
102
- * @param {Boolean} [mute] true for muting, false for unmuting request
103
- * @returns {Promise}
89
+ * @param {Object} meeting - the meeting object
90
+ * @returns {void}
104
91
  */
92
+ (0, _createClass2.default)(MuteState, [{
93
+ key: "init",
94
+ value: function init(meeting) {
95
+ if (!this.sdkOwnsLocalTrack) {
96
+ var _meeting$mediaPropert, _meeting$mediaPropert2;
97
+ this.applyUnmuteAllowedToTrack(meeting);
98
+
99
+ // if we are remotely muted, we need to apply that to the local track now (mute on-entry)
100
+ if (this.state.server.remoteMute) {
101
+ this.muteLocalTrack(meeting, this.state.server.remoteMute, 'remotelyMuted');
102
+ }
103
+ var initialMute = this.type === _constants.AUDIO ? (_meeting$mediaPropert = meeting.mediaProperties.audioTrack) === null || _meeting$mediaPropert === void 0 ? void 0 : _meeting$mediaPropert.muted : (_meeting$mediaPropert2 = meeting.mediaProperties.videoTrack) === null || _meeting$mediaPropert2 === void 0 ? void 0 : _meeting$mediaPropert2.muted;
104
+ _loggerProxy.default.logger.info("Meeting:muteState#start --> ".concat(this.type, ": local track initial mute state: ").concat(initialMute));
105
+ if (initialMute !== undefined) {
106
+ this.state.client.localMute = initialMute;
107
+ this.applyClientStateToServer(meeting);
108
+ }
109
+ }
110
+ }
105
111
 
112
+ /**
113
+ * This method needs to be called whenever the local audio/video track has changed.
114
+ * It reapplies the remote mute state onto the new track and also reads the current
115
+ * local mute state from the track and updates the internal state machine and sends
116
+ * any required requests to the server.
117
+ *
118
+ * @param {Object} meeting - the meeting object
119
+ * @returns {void}
120
+ */
121
+ }, {
122
+ key: "handleLocalTrackChange",
123
+ value: function handleLocalTrackChange(meeting) {
124
+ return this.init(meeting);
125
+ }
106
126
 
107
- (0, _createClass2.default)(MuteState, [{
127
+ /**
128
+ * Mutes/unmutes local track
129
+ *
130
+ * @param {Object} meeting - the meeting object
131
+ * @param {Boolean} mute - true to mute the track, false to unmute it
132
+ * @param {ServerMuteReason} reason - reason for muting/unmuting
133
+ * @returns {void}
134
+ */
135
+ }, {
136
+ key: "muteLocalTrack",
137
+ value: function muteLocalTrack(meeting, mute, reason) {
138
+ this.ignoreMuteStateChange = true;
139
+ if (this.type === _constants.AUDIO) {
140
+ var _meeting$mediaPropert3;
141
+ (_meeting$mediaPropert3 = meeting.mediaProperties.audioTrack) === null || _meeting$mediaPropert3 === void 0 ? void 0 : _meeting$mediaPropert3.setServerMuted(mute, reason);
142
+ } else {
143
+ var _meeting$mediaPropert4;
144
+ (_meeting$mediaPropert4 = meeting.mediaProperties.videoTrack) === null || _meeting$mediaPropert4 === void 0 ? void 0 : _meeting$mediaPropert4.setServerMuted(mute, reason);
145
+ }
146
+ this.ignoreMuteStateChange = false;
147
+ }
148
+
149
+ /**
150
+ * Handles mute/unmute request from the client/user. Returns a promise that's resolved once the server update is completed or
151
+ * at the point that this request becomese superseded by another client request.
152
+ *
153
+ * The client doesn't have to wait for the returned promise to resolve before calling handleClientRequest() again. If
154
+ * handleClientRequest() is called again before the previous one resolved, the MuteState class will make sure that eventually
155
+ * the server state will match the last requested state from the client.
156
+ *
157
+ * @public
158
+ * @memberof MuteState
159
+ * @param {Object} [meeting] the meeting object
160
+ * @param {Boolean} [mute] true for muting, false for unmuting request
161
+ * @returns {Promise}
162
+ */
163
+ }, {
108
164
  key: "handleClientRequest",
109
165
  value: function handleClientRequest(meeting, mute) {
110
166
  var _this = this;
111
-
167
+ // todo: this whole method will be removed in SPARK-399695
112
168
  _loggerProxy.default.logger.info("Meeting:muteState#handleClientRequest --> ".concat(this.type, ": user requesting new mute state: ").concat(mute));
113
-
114
169
  if (!mute && !this.state.server.unmuteAllowed) {
115
170
  return _promise.default.reject(new _permission.default('User is not allowed to unmute self (hard mute feature is being used)'));
116
- } // 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,
117
- // because the client may have changed the audio/vidoe tracks
118
-
171
+ }
119
172
 
173
+ // 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,
174
+ // because the client may have changed the audio/video tracks
120
175
  this.state.client.localMute = mute;
121
176
  this.applyClientStateLocally(meeting);
122
177
  return new _promise.default(function (resolve, reject) {
@@ -124,27 +179,59 @@ var MuteState = /*#__PURE__*/function () {
124
179
  // resolve the last promise we returned to the client as the client has issued a new request that has superseded the previous one
125
180
  _this.pendingPromiseResolve();
126
181
  }
127
-
128
182
  _this.pendingPromiseResolve = resolve;
129
183
  _this.pendingPromiseReject = reject;
130
-
131
184
  _this.applyClientStateToServer(meeting);
132
185
  });
133
186
  }
187
+
188
+ /**
189
+ * This method should be called when the local track mute state is changed
190
+ * @public
191
+ * @memberof MuteState
192
+ * @param {Object} [meeting] the meeting object
193
+ * @param {Boolean} [mute] true for muting, false for unmuting request
194
+ * @returns {void}
195
+ */
196
+ }, {
197
+ key: "handleLocalTrackMuteStateChange",
198
+ value: function handleLocalTrackMuteStateChange(meeting, mute) {
199
+ if (this.ignoreMuteStateChange) {
200
+ return;
201
+ }
202
+ _loggerProxy.default.logger.info("Meeting:muteState#handleLocalTrackMuteStateChange --> ".concat(this.type, ": local track new mute state: ").concat(mute));
203
+ if (this.pendingPromiseReject) {
204
+ _loggerProxy.default.logger.error("Meeting:muteState#handleLocalTrackMuteStateChange --> ".concat(this.type, ": Local track mute state change handler called while a client request is handled - this should never happen!, mute state: ").concat(mute));
205
+ }
206
+ this.state.client.localMute = mute;
207
+ this.applyClientStateToServer(meeting);
208
+ }
209
+
134
210
  /**
135
211
  * Applies the current mute state to the local track (by enabling or disabling it accordingly)
136
212
  *
137
213
  * @public
138
214
  * @param {Object} [meeting] the meeting object
215
+ * @param {ServerMuteReason} reason - reason why we're applying our client state to the local track
139
216
  * @memberof MuteState
140
217
  * @returns {void}
141
218
  */
142
-
143
219
  }, {
144
220
  key: "applyClientStateLocally",
145
- value: function applyClientStateLocally(meeting) {
146
- _media.default.setLocalTrack(!this.state.client.localMute, this.type === _constants.AUDIO ? meeting.mediaProperties.audioTrack : meeting.mediaProperties.videoTrack);
221
+ value: function applyClientStateLocally(meeting, reason) {
222
+ if (this.sdkOwnsLocalTrack) {
223
+ if (this.type === _constants.AUDIO) {
224
+ var _meeting$mediaPropert5;
225
+ (_meeting$mediaPropert5 = meeting.mediaProperties.audioTrack) === null || _meeting$mediaPropert5 === void 0 ? void 0 : _meeting$mediaPropert5.setMuted(this.state.client.localMute);
226
+ } else {
227
+ var _meeting$mediaPropert6;
228
+ (_meeting$mediaPropert6 = meeting.mediaProperties.videoTrack) === null || _meeting$mediaPropert6 === void 0 ? void 0 : _meeting$mediaPropert6.setMuted(this.state.client.localMute);
229
+ }
230
+ } else {
231
+ this.muteLocalTrack(meeting, this.state.client.localMute, reason);
232
+ }
147
233
  }
234
+
148
235
  /**
149
236
  * Updates the server local and remote mute values so that they match the current client desired state.
150
237
  *
@@ -153,62 +240,53 @@ var MuteState = /*#__PURE__*/function () {
153
240
  * @memberof MuteState
154
241
  * @returns {void}
155
242
  */
156
-
157
243
  }, {
158
244
  key: "applyClientStateToServer",
159
245
  value: function applyClientStateToServer(meeting) {
160
246
  var _this2 = this;
161
-
162
247
  if (this.state.syncToServerInProgress) {
163
248
  _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": request to server in progress, we need to wait for it to complete"));
164
-
165
249
  return;
166
250
  }
167
-
168
251
  var localMuteRequiresSync = this.state.client.localMute !== this.state.server.localMute;
169
252
  var remoteMuteRequiresSync = !this.state.client.localMute && this.state.server.remoteMute;
170
-
171
253
  _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": localMuteRequiresSync: ").concat(localMuteRequiresSync, " (").concat(this.state.client.localMute, " ?= ").concat(this.state.server.localMute, ")"));
172
-
173
254
  _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": remoteMuteRequiresSync: ").concat(remoteMuteRequiresSync));
174
-
175
255
  if (!localMuteRequiresSync && !remoteMuteRequiresSync) {
176
256
  _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(this.type, ": client state already matching server state, nothing to do"));
177
-
178
257
  if (this.pendingPromiseResolve) {
179
258
  this.pendingPromiseResolve();
180
259
  }
181
-
182
260
  this.pendingPromiseResolve = null;
183
261
  this.pendingPromiseReject = null;
184
262
  return;
185
263
  }
264
+ this.state.syncToServerInProgress = true;
186
265
 
187
- this.state.syncToServerInProgress = true; // first sync local mute with server
188
-
266
+ // first sync local mute with server
189
267
  var localMuteSyncPromise = localMuteRequiresSync ? this.sendLocalMuteRequestToServer(meeting) : _promise.default.resolve();
190
268
  localMuteSyncPromise.then(function () {
191
- return (// then follow it up with remote mute sync
269
+ return (
270
+ // then follow it up with remote mute sync
192
271
  remoteMuteRequiresSync ? _this2.sendRemoteMuteRequestToServer(meeting) : _promise.default.resolve()
193
272
  );
194
273
  }).then(function () {
195
274
  _this2.state.syncToServerInProgress = false;
275
+ _loggerProxy.default.logger.info("Meeting:muteState#applyClientStateToServer --> ".concat(_this2.type, ": sync with server completed"));
196
276
 
197
- _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
198
-
199
-
277
+ // need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
200
278
  _this2.applyClientStateToServer(meeting);
201
279
  }).catch(function (e) {
202
280
  _this2.state.syncToServerInProgress = false;
203
-
204
281
  if (_this2.pendingPromiseReject) {
205
282
  _this2.pendingPromiseReject(e);
206
283
  }
207
-
208
284
  _this2.pendingPromiseResolve = null;
209
285
  _this2.pendingPromiseReject = null;
286
+ _this2.applyServerMuteToLocalTrack(meeting, 'clientRequestFailed');
210
287
  });
211
288
  }
289
+
212
290
  /**
213
291
  * Sets the local mute value in the server
214
292
  *
@@ -217,31 +295,26 @@ var MuteState = /*#__PURE__*/function () {
217
295
  * @memberof MuteState
218
296
  * @returns {Promise}
219
297
  */
220
-
221
298
  }, {
222
299
  key: "sendLocalMuteRequestToServer",
223
300
  value: function sendLocalMuteRequestToServer(meeting) {
224
301
  var _meeting$audio,
225
- _meeting$video,
226
- _this3 = this;
227
-
302
+ _meeting$video,
303
+ _this3 = this;
228
304
  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;
229
305
  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;
230
-
231
306
  _loggerProxy.default.logger.info("Meeting:muteState#sendLocalMuteRequestToServer --> ".concat(this.type, ": sending local mute (audio=").concat(audioMuted, ", video=").concat(videoMuted, ") to server"));
232
-
233
307
  return _util.default.remoteUpdateAudioVideo(audioMuted, videoMuted, meeting).then(function (locus) {
234
308
  _loggerProxy.default.logger.info("Meeting:muteState#sendLocalMuteRequestToServer --> ".concat(_this3.type, ": local mute (audio=").concat(audioMuted, ", video=").concat(videoMuted, ") applied to server"));
235
-
236
309
  _this3.state.server.localMute = _this3.type === _constants.AUDIO ? audioMuted : videoMuted;
237
310
  meeting.locusInfo.onFullLocus(locus);
238
311
  return locus;
239
312
  }).catch(function (remoteUpdateError) {
240
313
  _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));
241
-
242
314
  return _promise.default.reject(remoteUpdateError);
243
315
  });
244
316
  }
317
+
245
318
  /**
246
319
  * Sets the remote mute value in the server
247
320
  *
@@ -250,50 +323,80 @@ var MuteState = /*#__PURE__*/function () {
250
323
  * @memberof MuteState
251
324
  * @returns {Promise}
252
325
  */
253
-
254
326
  }, {
255
327
  key: "sendRemoteMuteRequestToServer",
256
328
  value: function sendRemoteMuteRequestToServer(meeting) {
257
329
  var _this4 = this;
330
+ var remoteMute = this.state.client.localMute;
331
+ _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(this.type, ": sending remote mute:").concat(remoteMute, " to server"));
332
+ return meeting.members.muteMember(meeting.members.selfId, remoteMute, this.type === _constants.AUDIO).then(function () {
333
+ _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this4.type, ": remote mute:").concat(remoteMute, " applied to server"));
334
+ _this4.state.server.remoteMute = remoteMute;
335
+ }).catch(function (remoteUpdateError) {
336
+ _loggerProxy.default.logger.warn("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this4.type, ": failed to apply remote mute ").concat(remoteMute, " to server: ").concat(remoteUpdateError));
337
+ return _promise.default.reject(remoteUpdateError);
338
+ });
339
+ }
258
340
 
259
- if (this.type === _constants.AUDIO) {
260
- var remoteMute = this.state.client.localMute;
261
-
262
- _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(this.type, ": sending remote mute:").concat(remoteMute, " to server"));
263
-
264
- return meeting.members.muteMember(meeting.members.selfId, remoteMute).then(function () {
265
- _loggerProxy.default.logger.info("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this4.type, ": remote mute:").concat(remoteMute, " applied to server"));
266
-
267
- _this4.state.server.remoteMute = remoteMute;
268
- }).catch(function (remoteUpdateError) {
269
- _loggerProxy.default.logger.warn("Meeting:muteState#sendRemoteMuteRequestToServer --> ".concat(_this4.type, ": failed to apply remote mute ").concat(remoteMute, " to server: ").concat(remoteUpdateError));
270
-
271
- return _promise.default.reject(remoteUpdateError);
272
- });
273
- } // for now we don't need to support remote muting of video (REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION)
341
+ /** Sets the mute state of the local track according to what server thinks is our state
342
+ * @param {Object} meeting - the meeting object
343
+ * @param {ServerMuteReason} serverMuteReason - reason why we're applying server mute to the local track
344
+ * @returns {void}
345
+ */
346
+ }, {
347
+ key: "applyServerMuteToLocalTrack",
348
+ value: function applyServerMuteToLocalTrack(meeting, serverMuteReason) {
349
+ if (!this.sdkOwnsLocalTrack) {
350
+ var muted = this.state.server.localMute || this.state.server.remoteMute;
274
351
 
352
+ // update the local track mute state, but not this.state.client.localMute
353
+ this.muteLocalTrack(meeting, muted, serverMuteReason);
354
+ }
355
+ }
275
356
 
276
- this.state.server.remoteMute = this.state.client.localMute;
277
- return _promise.default.resolve();
357
+ /** Applies the current value for unmute allowed to the underlying track
358
+ *
359
+ * @param {Meeting} meeting
360
+ * @returns {void}
361
+ */
362
+ }, {
363
+ key: "applyUnmuteAllowedToTrack",
364
+ value: function applyUnmuteAllowedToTrack(meeting) {
365
+ if (!this.sdkOwnsLocalTrack) {
366
+ if (this.type === _constants.AUDIO) {
367
+ var _meeting$mediaPropert7;
368
+ (_meeting$mediaPropert7 = meeting.mediaProperties.audioTrack) === null || _meeting$mediaPropert7 === void 0 ? void 0 : _meeting$mediaPropert7.setUnmuteAllowed(this.state.server.unmuteAllowed);
369
+ } else {
370
+ var _meeting$mediaPropert8;
371
+ (_meeting$mediaPropert8 = meeting.mediaProperties.videoTrack) === null || _meeting$mediaPropert8 === void 0 ? void 0 : _meeting$mediaPropert8.setUnmuteAllowed(this.state.server.unmuteAllowed);
372
+ }
373
+ }
278
374
  }
375
+
279
376
  /**
280
377
  * This method should be called whenever the server remote mute state is changed
281
378
  *
282
379
  * @public
283
380
  * @memberof MuteState
381
+ * @param {Meeting} meeting
284
382
  * @param {Boolean} [muted] true if user is remotely muted, false otherwise
285
383
  * @param {Boolean} [unmuteAllowed] indicates if user is allowed to unmute self (false when "hard mute" feature is used)
286
384
  * @returns {undefined}
287
385
  */
288
-
289
386
  }, {
290
387
  key: "handleServerRemoteMuteUpdate",
291
- value: function handleServerRemoteMuteUpdate(muted, unmuteAllowed) {
388
+ value: function handleServerRemoteMuteUpdate(meeting, muted, unmuteAllowed) {
292
389
  _loggerProxy.default.logger.info("Meeting:muteState#handleServerRemoteMuteUpdate --> ".concat(this.type, ": updating server remoteMute to (").concat(muted, ")"));
293
-
294
- this.state.server.remoteMute = muted;
295
- this.state.server.unmuteAllowed = unmuteAllowed;
390
+ if (unmuteAllowed !== undefined) {
391
+ this.state.server.unmuteAllowed = unmuteAllowed;
392
+ this.applyUnmuteAllowedToTrack(meeting);
393
+ }
394
+ if (muted !== undefined) {
395
+ this.state.server.remoteMute = muted;
396
+ this.applyServerMuteToLocalTrack(meeting, 'remotelyMuted');
397
+ }
296
398
  }
399
+
297
400
  /**
298
401
  * This method should be called whenever we receive from the server a requirement to locally unmute
299
402
  *
@@ -302,24 +405,23 @@ var MuteState = /*#__PURE__*/function () {
302
405
  * @param {Object} [meeting] the meeting object
303
406
  * @returns {undefined}
304
407
  */
305
-
306
408
  }, {
307
409
  key: "handleServerLocalUnmuteRequired",
308
410
  value: function handleServerLocalUnmuteRequired(meeting) {
309
411
  _loggerProxy.default.logger.info("Meeting:muteState#handleServerLocalUnmuteRequired --> ".concat(this.type, ": localAudioUnmuteRequired received -> doing local unmute"));
310
412
 
413
+ // 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
311
414
  this.state.server.remoteMute = false;
312
415
  this.state.client.localMute = false;
313
-
314
416
  if (this.pendingPromiseReject) {
315
417
  this.pendingPromiseReject(new Error('Server requested local unmute - this overrides any client request in progress'));
316
418
  this.pendingPromiseResolve = null;
317
419
  this.pendingPromiseReject = null;
318
420
  }
319
-
320
- this.applyClientStateLocally(meeting);
421
+ this.applyClientStateLocally(meeting, 'localUnmuteRequired');
321
422
  this.applyClientStateToServer(meeting);
322
423
  }
424
+
323
425
  /**
324
426
  * Returns true if the user is locally or remotely muted
325
427
  *
@@ -327,32 +429,72 @@ var MuteState = /*#__PURE__*/function () {
327
429
  * @memberof MuteState
328
430
  * @returns {Boolean}
329
431
  */
330
-
331
432
  }, {
332
433
  key: "isMuted",
333
434
  value: function isMuted() {
334
435
  return this.state.client.localMute || this.state.server.localMute || this.state.server.remoteMute;
335
436
  }
437
+
336
438
  /**
337
- * Returns true if the user is muted as a result of the client request (and not remotely muted)
439
+ * Returns true if the user is remotely muted
440
+ *
441
+ * @public
442
+ * @memberof MuteState
443
+ * @returns {Boolean}
444
+ */
445
+ }, {
446
+ key: "isRemotelyMuted",
447
+ value: function isRemotelyMuted() {
448
+ return this.state.server.remoteMute;
449
+ }
450
+
451
+ /**
452
+ * Returns true if unmute is allowed
338
453
  *
339
454
  * @public
340
455
  * @memberof MuteState
341
456
  * @returns {Boolean}
342
457
  */
458
+ }, {
459
+ key: "isUnmuteAllowed",
460
+ value: function isUnmuteAllowed() {
461
+ return this.state.server.unmuteAllowed;
462
+ }
343
463
 
464
+ /**
465
+ * Returns true if the user is locally muted
466
+ *
467
+ * @public
468
+ * @memberof MuteState
469
+ * @returns {Boolean}
470
+ */
471
+ }, {
472
+ key: "isLocallyMuted",
473
+ value: function isLocallyMuted() {
474
+ return this.state.client.localMute || this.state.server.localMute;
475
+ }
476
+
477
+ /**
478
+ * Returns true if the user is muted as a result of the client request (and not remotely muted)
479
+ *
480
+ * @public
481
+ * @memberof MuteState
482
+ * @returns {Boolean}
483
+ */
344
484
  }, {
345
485
  key: "isSelf",
346
486
  value: function isSelf() {
347
487
  return this.state.client.localMute && !this.state.server.remoteMute;
348
- } // defined for backwards compatibility with the old AudioStateMachine/VideoStateMachine classes
488
+ }
349
489
 
490
+ // defined for backwards compatibility with the old AudioStateMachine/VideoStateMachine classes
350
491
  }, {
351
492
  key: "muted",
352
493
  get: function get() {
353
494
  return this.isMuted();
354
- } // defined for backwards compatibility with the old AudioStateMachine/VideoStateMachine classes
495
+ }
355
496
 
497
+ // defined for backwards compatibility with the old AudioStateMachine/VideoStateMachine classes
356
498
  }, {
357
499
  key: "self",
358
500
  get: function get() {
@@ -361,7 +503,4 @@ var MuteState = /*#__PURE__*/function () {
361
503
  }]);
362
504
  return MuteState;
363
505
  }();
364
-
365
- var _default = createMuteState;
366
- exports.default = _default;
367
506
  //# sourceMappingURL=muteState.js.map