@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.130

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