@webex/plugin-meetings 3.0.0-beta.16 → 3.0.0-beta.160

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 (408) hide show
  1. package/README.md +45 -1
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +359 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +212 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +23 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +52 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +43 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1046 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +78 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +67 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +3 -2
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/config.js +6 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +165 -26
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +300 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +77 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/locus-info/controlsUtils.js +91 -2
  43. package/dist/locus-info/controlsUtils.js.map +1 -1
  44. package/dist/locus-info/index.js +298 -24
  45. package/dist/locus-info/index.js.map +1 -1
  46. package/dist/locus-info/mediaSharesUtils.js +43 -1
  47. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  48. package/dist/locus-info/parser.js +2 -1
  49. package/dist/locus-info/parser.js.map +1 -1
  50. package/dist/locus-info/selfUtils.js +88 -14
  51. package/dist/locus-info/selfUtils.js.map +1 -1
  52. package/dist/media/index.js +39 -134
  53. package/dist/media/index.js.map +1 -1
  54. package/dist/media/properties.js +19 -97
  55. package/dist/media/properties.js.map +1 -1
  56. package/dist/mediaQualityMetrics/config.js +505 -493
  57. package/dist/mediaQualityMetrics/config.js.map +1 -1
  58. package/dist/meeting/in-meeting-actions.js +79 -1
  59. package/dist/meeting/in-meeting-actions.js.map +1 -1
  60. package/dist/meeting/index.js +2275 -2152
  61. package/dist/meeting/index.js.map +1 -1
  62. package/dist/meeting/locusMediaRequest.js +291 -0
  63. package/dist/meeting/locusMediaRequest.js.map +1 -0
  64. package/dist/meeting/muteState.js +229 -124
  65. package/dist/meeting/muteState.js.map +1 -1
  66. package/dist/meeting/request.js +191 -167
  67. package/dist/meeting/request.js.map +1 -1
  68. package/dist/meeting/request.type.js.map +1 -1
  69. package/dist/meeting/util.js +443 -443
  70. package/dist/meeting/util.js.map +1 -1
  71. package/dist/meeting-info/meeting-info-v2.js +157 -49
  72. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  73. package/dist/meeting-info/utilv2.js +20 -5
  74. package/dist/meeting-info/utilv2.js.map +1 -1
  75. package/dist/meetings/collection.js +22 -0
  76. package/dist/meetings/collection.js.map +1 -1
  77. package/dist/meetings/index.js +365 -73
  78. package/dist/meetings/index.js.map +1 -1
  79. package/dist/meetings/meetings.types.js +7 -0
  80. package/dist/meetings/meetings.types.js.map +1 -0
  81. package/dist/meetings/request.js +16 -12
  82. package/dist/meetings/request.js.map +1 -1
  83. package/dist/meetings/util.js +88 -1
  84. package/dist/meetings/util.js.map +1 -1
  85. package/dist/member/index.js +41 -0
  86. package/dist/member/index.js.map +1 -1
  87. package/dist/member/types.js +15 -0
  88. package/dist/member/types.js.map +1 -0
  89. package/dist/member/util.js +86 -3
  90. package/dist/member/util.js.map +1 -1
  91. package/dist/members/collection.js +10 -0
  92. package/dist/members/collection.js.map +1 -1
  93. package/dist/members/index.js +94 -11
  94. package/dist/members/index.js.map +1 -1
  95. package/dist/members/request.js +109 -39
  96. package/dist/members/request.js.map +1 -1
  97. package/dist/members/types.js +15 -0
  98. package/dist/members/types.js.map +1 -0
  99. package/dist/members/util.js +316 -233
  100. package/dist/members/util.js.map +1 -1
  101. package/dist/metrics/config.js +50 -14
  102. package/dist/metrics/config.js.map +1 -1
  103. package/dist/metrics/constants.js +3 -5
  104. package/dist/metrics/constants.js.map +1 -1
  105. package/dist/metrics/index.js +48 -29
  106. package/dist/metrics/index.js.map +1 -1
  107. package/dist/multistream/mediaRequestManager.js +265 -36
  108. package/dist/multistream/mediaRequestManager.js.map +1 -1
  109. package/dist/multistream/receiveSlot.js +52 -19
  110. package/dist/multistream/receiveSlot.js.map +1 -1
  111. package/dist/multistream/receiveSlotManager.js +53 -33
  112. package/dist/multistream/receiveSlotManager.js.map +1 -1
  113. package/dist/multistream/remoteMedia.js +44 -18
  114. package/dist/multistream/remoteMedia.js.map +1 -1
  115. package/dist/multistream/remoteMediaGroup.js +60 -3
  116. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  117. package/dist/multistream/remoteMediaManager.js +322 -103
  118. package/dist/multistream/remoteMediaManager.js.map +1 -1
  119. package/dist/networkQualityMonitor/index.js +4 -2
  120. package/dist/networkQualityMonitor/index.js.map +1 -1
  121. package/dist/reachability/index.js +117 -60
  122. package/dist/reachability/index.js.map +1 -1
  123. package/dist/reachability/request.js +12 -5
  124. package/dist/reachability/request.js.map +1 -1
  125. package/dist/reactions/constants.js +13 -0
  126. package/dist/reactions/constants.js.map +1 -0
  127. package/dist/reactions/reactions.js +2 -2
  128. package/dist/reactions/reactions.js.map +1 -1
  129. package/dist/reactions/reactions.type.js +18 -18
  130. package/dist/reactions/reactions.type.js.map +1 -1
  131. package/dist/reconnection-manager/index.js +190 -145
  132. package/dist/reconnection-manager/index.js.map +1 -1
  133. package/dist/recording-controller/enums.js +17 -0
  134. package/dist/recording-controller/enums.js.map +1 -0
  135. package/dist/recording-controller/index.js +343 -0
  136. package/dist/recording-controller/index.js.map +1 -0
  137. package/dist/recording-controller/util.js +63 -0
  138. package/dist/recording-controller/util.js.map +1 -0
  139. package/dist/roap/index.js +21 -29
  140. package/dist/roap/index.js.map +1 -1
  141. package/dist/roap/request.js +127 -92
  142. package/dist/roap/request.js.map +1 -1
  143. package/dist/roap/turnDiscovery.js +135 -53
  144. package/dist/roap/turnDiscovery.js.map +1 -1
  145. package/dist/statsAnalyzer/global.js +1 -93
  146. package/dist/statsAnalyzer/global.js.map +1 -1
  147. package/dist/statsAnalyzer/index.js +329 -314
  148. package/dist/statsAnalyzer/index.js.map +1 -1
  149. package/dist/statsAnalyzer/mqaUtil.js +103 -54
  150. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  151. package/dist/types/annotation/annotation.types.d.ts +43 -0
  152. package/dist/types/annotation/constants.d.ts +31 -0
  153. package/dist/types/annotation/index.d.ts +124 -0
  154. package/dist/types/breakouts/breakout.d.ts +8 -0
  155. package/dist/types/breakouts/collection.d.ts +5 -0
  156. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  157. package/dist/types/breakouts/events.d.ts +2 -0
  158. package/dist/types/breakouts/index.d.ts +5 -0
  159. package/dist/types/breakouts/request.d.ts +22 -0
  160. package/dist/types/breakouts/utils.d.ts +15 -0
  161. package/dist/types/common/browser-detection.d.ts +9 -0
  162. package/dist/types/common/collection.d.ts +48 -0
  163. package/dist/types/common/config.d.ts +2 -0
  164. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  165. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  166. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  167. package/dist/types/common/errors/media.d.ts +15 -0
  168. package/dist/types/common/errors/parameter.d.ts +15 -0
  169. package/dist/types/common/errors/password-error.d.ts +15 -0
  170. package/dist/types/common/errors/permission.d.ts +14 -0
  171. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  172. package/dist/types/common/errors/reconnection.d.ts +15 -0
  173. package/dist/types/common/errors/stats.d.ts +15 -0
  174. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  175. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  176. package/dist/types/common/events/events-scope.d.ts +17 -0
  177. package/dist/types/common/events/events.d.ts +12 -0
  178. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  179. package/dist/types/common/events/util.d.ts +2 -0
  180. package/dist/types/common/logs/logger-config.d.ts +2 -0
  181. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  182. package/dist/types/common/logs/request.d.ts +34 -0
  183. package/dist/types/common/queue.d.ts +32 -0
  184. package/dist/types/config.d.ts +72 -0
  185. package/dist/types/constants.d.ts +978 -0
  186. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  187. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  188. package/dist/types/controls-options-manager/index.d.ts +136 -0
  189. package/dist/types/controls-options-manager/types.d.ts +43 -0
  190. package/dist/types/controls-options-manager/util.d.ts +1 -0
  191. package/dist/types/index.d.ts +7 -0
  192. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  193. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  194. package/dist/types/locus-info/fullState.d.ts +2 -0
  195. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  196. package/dist/types/locus-info/index.d.ts +315 -0
  197. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  198. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  199. package/dist/types/locus-info/parser.d.ts +212 -0
  200. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  201. package/dist/types/media/index.d.ts +34 -0
  202. package/dist/types/media/properties.d.ts +86 -0
  203. package/dist/types/media/util.d.ts +2 -0
  204. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  205. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  206. package/dist/types/meeting/index.d.ts +1516 -0
  207. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  208. package/dist/types/meeting/muteState.d.ts +184 -0
  209. package/dist/types/meeting/request.d.ts +270 -0
  210. package/dist/types/meeting/request.type.d.ts +11 -0
  211. package/dist/types/meeting/state.d.ts +9 -0
  212. package/dist/types/meeting/util.d.ts +75 -0
  213. package/dist/types/meeting-info/collection.d.ts +20 -0
  214. package/dist/types/meeting-info/index.d.ts +57 -0
  215. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  216. package/dist/types/meeting-info/request.d.ts +22 -0
  217. package/dist/types/meeting-info/util.d.ts +2 -0
  218. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  219. package/dist/types/meetings/collection.d.ts +31 -0
  220. package/dist/types/meetings/index.d.ts +364 -0
  221. package/dist/types/meetings/meetings.types.d.ts +4 -0
  222. package/dist/types/meetings/request.d.ts +27 -0
  223. package/dist/types/meetings/util.d.ts +18 -0
  224. package/dist/types/member/index.d.ts +157 -0
  225. package/dist/types/member/types.d.ts +21 -0
  226. package/dist/types/member/util.d.ts +2 -0
  227. package/dist/types/members/collection.d.ts +29 -0
  228. package/dist/types/members/index.d.ts +353 -0
  229. package/dist/types/members/request.d.ts +114 -0
  230. package/dist/types/members/types.d.ts +24 -0
  231. package/dist/types/members/util.d.ts +210 -0
  232. package/dist/types/metrics/config.d.ts +195 -0
  233. package/dist/types/metrics/constants.d.ts +55 -0
  234. package/dist/types/metrics/index.d.ts +169 -0
  235. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  236. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  237. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  238. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  239. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  240. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  241. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  242. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  243. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  244. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  245. package/dist/types/reachability/index.d.ts +152 -0
  246. package/dist/types/reachability/request.d.ts +37 -0
  247. package/dist/types/reactions/constants.d.ts +3 -0
  248. package/dist/types/reactions/reactions.d.ts +4 -0
  249. package/dist/types/reactions/reactions.type.d.ts +52 -0
  250. package/dist/types/reconnection-manager/index.d.ts +126 -0
  251. package/dist/types/recording-controller/enums.d.ts +7 -0
  252. package/dist/types/recording-controller/index.d.ts +193 -0
  253. package/dist/types/recording-controller/util.d.ts +13 -0
  254. package/dist/types/roap/index.d.ts +77 -0
  255. package/dist/types/roap/request.d.ts +36 -0
  256. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  257. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  258. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  259. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  260. package/dist/types/transcription/index.d.ts +64 -0
  261. package/package.json +28 -21
  262. package/src/annotation/annotation.types.ts +52 -0
  263. package/src/annotation/constants.ts +36 -0
  264. package/src/annotation/index.ts +343 -0
  265. package/src/breakouts/README.md +220 -0
  266. package/src/breakouts/breakout.ts +180 -0
  267. package/src/breakouts/collection.ts +19 -0
  268. package/src/breakouts/edit-lock-error.ts +25 -0
  269. package/src/breakouts/events.ts +37 -0
  270. package/src/breakouts/index.ts +921 -0
  271. package/src/breakouts/request.ts +55 -0
  272. package/src/breakouts/utils.ts +57 -0
  273. package/src/common/errors/webex-errors.ts +6 -2
  274. package/src/common/logs/logger-proxy.ts +1 -1
  275. package/src/config.ts +5 -7
  276. package/src/constants.ts +155 -20
  277. package/src/controls-options-manager/constants.ts +5 -0
  278. package/src/controls-options-manager/enums.ts +18 -0
  279. package/src/controls-options-manager/index.ts +278 -0
  280. package/src/controls-options-manager/types.ts +59 -0
  281. package/src/controls-options-manager/util.ts +286 -0
  282. package/src/index.ts +34 -0
  283. package/src/locus-info/controlsUtils.ts +108 -0
  284. package/src/locus-info/index.ts +310 -21
  285. package/src/locus-info/mediaSharesUtils.ts +48 -0
  286. package/src/locus-info/parser.ts +2 -1
  287. package/src/locus-info/selfUtils.ts +80 -2
  288. package/src/media/index.ts +70 -142
  289. package/src/media/properties.ts +41 -104
  290. package/src/mediaQualityMetrics/config.ts +379 -377
  291. package/src/meeting/in-meeting-actions.ts +156 -0
  292. package/src/meeting/index.ts +1744 -1767
  293. package/src/meeting/locusMediaRequest.ts +309 -0
  294. package/src/meeting/muteState.ts +228 -132
  295. package/src/meeting/request.ts +100 -91
  296. package/src/meeting/request.type.ts +2 -0
  297. package/src/meeting/util.ts +421 -421
  298. package/src/meeting-info/meeting-info-v2.ts +134 -13
  299. package/src/meeting-info/utilv2.ts +13 -3
  300. package/src/meetings/collection.ts +20 -0
  301. package/src/meetings/index.ts +385 -83
  302. package/src/meetings/meetings.types.ts +12 -0
  303. package/src/meetings/request.ts +3 -1
  304. package/src/meetings/util.ts +103 -4
  305. package/src/member/index.ts +40 -0
  306. package/src/member/types.ts +24 -0
  307. package/src/member/util.ts +81 -1
  308. package/src/members/collection.ts +8 -0
  309. package/src/members/index.ts +108 -6
  310. package/src/members/request.ts +98 -17
  311. package/src/members/types.ts +28 -0
  312. package/src/members/util.ts +319 -240
  313. package/src/metrics/config.ts +49 -10
  314. package/src/metrics/constants.ts +2 -4
  315. package/src/metrics/index.ts +43 -27
  316. package/src/multistream/mediaRequestManager.ts +337 -63
  317. package/src/multistream/receiveSlot.ts +68 -26
  318. package/src/multistream/receiveSlotManager.ts +61 -38
  319. package/src/multistream/remoteMedia.ts +29 -3
  320. package/src/multistream/remoteMediaGroup.ts +61 -2
  321. package/src/multistream/remoteMediaManager.ts +260 -66
  322. package/src/networkQualityMonitor/index.ts +6 -6
  323. package/src/reachability/index.ts +75 -25
  324. package/src/reachability/request.ts +10 -5
  325. package/src/reactions/constants.ts +4 -0
  326. package/src/reactions/reactions.ts +4 -4
  327. package/src/reactions/reactions.type.ts +28 -3
  328. package/src/reconnection-manager/index.ts +53 -32
  329. package/src/recording-controller/enums.ts +8 -0
  330. package/src/recording-controller/index.ts +315 -0
  331. package/src/recording-controller/util.ts +58 -0
  332. package/src/roap/index.ts +21 -30
  333. package/src/roap/request.ts +51 -52
  334. package/src/roap/turnDiscovery.ts +51 -27
  335. package/src/statsAnalyzer/global.ts +1 -94
  336. package/src/statsAnalyzer/index.ts +380 -390
  337. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  338. package/test/integration/spec/converged-space-meetings.js +233 -0
  339. package/test/integration/spec/journey.js +331 -254
  340. package/test/integration/spec/space-meeting.js +77 -4
  341. package/test/unit/spec/annotation/index.ts +436 -0
  342. package/test/unit/spec/breakouts/breakout.ts +233 -0
  343. package/test/unit/spec/breakouts/collection.ts +15 -0
  344. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  345. package/test/unit/spec/breakouts/events.ts +77 -0
  346. package/test/unit/spec/breakouts/index.ts +1790 -0
  347. package/test/unit/spec/breakouts/request.ts +104 -0
  348. package/test/unit/spec/breakouts/utils.js +72 -0
  349. package/test/unit/spec/controls-options-manager/index.js +287 -0
  350. package/test/unit/spec/controls-options-manager/util.js +518 -0
  351. package/test/unit/spec/fixture/locus.js +1 -0
  352. package/test/unit/spec/locus-info/controlsUtils.js +303 -30
  353. package/test/unit/spec/locus-info/index.js +616 -4
  354. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  355. package/test/unit/spec/locus-info/selfConstant.js +38 -0
  356. package/test/unit/spec/locus-info/selfUtils.js +249 -0
  357. package/test/unit/spec/media/index.ts +118 -22
  358. package/test/unit/spec/media/properties.ts +9 -9
  359. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -0
  360. package/test/unit/spec/meeting/index.js +2496 -1375
  361. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  362. package/test/unit/spec/meeting/muteState.js +370 -208
  363. package/test/unit/spec/meeting/request.js +354 -42
  364. package/test/unit/spec/meeting/utils.js +268 -156
  365. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  366. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  367. package/test/unit/spec/meetings/collection.js +14 -0
  368. package/test/unit/spec/meetings/index.js +866 -120
  369. package/test/unit/spec/meetings/utils.js +206 -2
  370. package/test/unit/spec/member/index.js +24 -0
  371. package/test/unit/spec/member/util.js +384 -32
  372. package/test/unit/spec/members/index.js +320 -1
  373. package/test/unit/spec/members/request.js +206 -27
  374. package/test/unit/spec/members/utils.js +184 -0
  375. package/test/unit/spec/metrics/index.js +98 -0
  376. package/test/unit/spec/multistream/mediaRequestManager.ts +1012 -109
  377. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  378. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  379. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  380. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  381. package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
  382. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  383. package/test/unit/spec/reachability/index.ts +176 -25
  384. package/test/unit/spec/reachability/request.js +66 -0
  385. package/test/unit/spec/reconnection-manager/index.js +46 -13
  386. package/test/unit/spec/recording-controller/index.js +231 -0
  387. package/test/unit/spec/recording-controller/util.js +102 -0
  388. package/test/unit/spec/roap/index.ts +21 -51
  389. package/test/unit/spec/roap/request.ts +187 -0
  390. package/test/unit/spec/roap/turnDiscovery.ts +73 -34
  391. package/test/unit/spec/stats-analyzer/index.js +94 -43
  392. package/test/utils/constants.js +9 -0
  393. package/test/utils/integrationTestUtils.js +46 -0
  394. package/test/utils/testUtils.js +0 -45
  395. package/test/utils/webex-config.js +4 -0
  396. package/test/utils/webex-test-users.js +7 -3
  397. package/tsconfig.json +6 -0
  398. package/dist/media/internal-media-core-wrapper.js +0 -18
  399. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  400. package/dist/meeting/effectsState.js +0 -262
  401. package/dist/meeting/effectsState.js.map +0 -1
  402. package/dist/multistream/multistreamMedia.js +0 -106
  403. package/dist/multistream/multistreamMedia.js.map +0 -1
  404. package/src/index.js +0 -15
  405. package/src/media/internal-media-core-wrapper.ts +0 -9
  406. package/src/meeting/effectsState.ts +0 -211
  407. package/src/multistream/multistreamMedia.ts +0 -93
  408. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -15,6 +15,8 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/
15
15
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
16
16
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
17
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
18
+ var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
19
+ var _assignWith2 = _interopRequireDefault(require("lodash/assignWith"));
18
20
  var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
19
21
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
20
22
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
@@ -40,6 +42,13 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
40
42
  var LocusInfo = /*#__PURE__*/function (_EventsScope) {
41
43
  (0, _inherits2.default)(LocusInfo, _EventsScope);
42
44
  var _super = _createSuper(LocusInfo);
45
+ /**
46
+ * Constructor
47
+ * @param {boolean} updateMeeting true if the meeting should be updated
48
+ * @param {object} webex
49
+ * @param {string} meetingId
50
+ * @returns {undefined}
51
+ */
43
52
  function LocusInfo(updateMeeting, webex, meetingId) {
44
53
  var _this;
45
54
  (0, _classCallCheck2.default)(this, LocusInfo);
@@ -68,9 +77,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
68
77
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fullState", void 0);
69
78
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "host", void 0);
70
79
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "info", void 0);
80
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roles", void 0);
71
81
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaShares", void 0);
72
82
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "replace", void 0);
73
83
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "url", void 0);
84
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "services", void 0);
85
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mainSessionLocusCache", void 0);
74
86
  _this.parsedLocus = {
75
87
  states: []
76
88
  };
@@ -109,7 +121,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
109
121
  case DESYNC:
110
122
  meeting.meetingRequest.getFullLocus({
111
123
  desync: true,
112
- locusUrl: meeting.locusUrl
124
+ locusUrl: locus.url ? locus.url : meeting.locusUrl
113
125
  }).then(function (res) {
114
126
  meeting.locusInfo.onFullLocus(res.body);
115
127
  // Notify parser to resume processing delta events
@@ -154,6 +166,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
154
166
  }, {
155
167
  key: "init",
156
168
  value: function init() {
169
+ var _locus$links;
157
170
  var locus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
158
171
  this.created = locus.created || null;
159
172
  this.scheduledMeeting = locus.meeting || null;
@@ -184,13 +197,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
184
197
  * @member LocusInfo
185
198
  */
186
199
  this.deltaParticipants = [];
187
-
200
+ this.updateLocusCache(locus);
188
201
  // above section only updates the locusInfo object
189
202
  // The below section makes sure it updates the locusInfo as well as updates the meeting object
190
203
  this.updateParticipants(locus.participants);
191
204
  // For 1:1 space meeting the conversation Url does not exist in locus.conversation
192
205
  this.updateConversationUrl(locus.conversationUrl, locus.info);
193
- this.updateControls(locus.controls);
206
+ this.updateControls(locus.controls, locus.self);
194
207
  this.updateLocusUrl(locus.url);
195
208
  this.updateFullState(locus.fullState);
196
209
  this.updateMeetingInfo(locus.info);
@@ -199,6 +212,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
199
212
  this.updateSelf(locus.self, locus.participants);
200
213
  this.updateHostInfo(locus.host);
201
214
  this.updateMediaShares(locus.mediaShares);
215
+ this.updateServices((_locus$links = locus.links) === null || _locus$links === void 0 ? void 0 : _locus$links.services);
202
216
  }
203
217
 
204
218
  /**
@@ -209,6 +223,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
209
223
  }, {
210
224
  key: "initialSetup",
211
225
  value: function initialSetup(locus) {
226
+ this.updateLocusCache(locus);
212
227
  this.onFullLocus(locus);
213
228
 
214
229
  // Change it to true after it receives it first locus object
@@ -226,6 +241,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
226
241
  value: function parse(meeting, data) {
227
242
  // eslint-disable-next-line @typescript-eslint/no-shadow
228
243
  var eventType = data.eventType;
244
+ var locus = this.getTheLocusToUpdate(data.locus);
229
245
  _loggerProxy.default.logger.info("Locus-info:index#parse --> received locus data: ".concat(eventType));
230
246
  switch (eventType) {
231
247
  case _constants.LOCUSEVENT.PARTICIPANT_JOIN:
@@ -242,15 +258,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
242
258
  case _constants.LOCUSEVENT.PARTICIPANT_DECLINED:
243
259
  case _constants.LOCUSEVENT.FLOOR_GRANTED:
244
260
  case _constants.LOCUSEVENT.FLOOR_RELEASED:
245
- this.onFullLocus(data.locus, eventType);
261
+ this.onFullLocus(locus, eventType);
246
262
  break;
247
263
  case _constants.LOCUSEVENT.DIFFERENCE:
248
- this.handleLocusDelta(data.locus, meeting);
264
+ this.handleLocusDelta(locus, meeting);
249
265
  break;
250
266
  default:
251
267
  // Why will there be a event with no eventType ????
252
268
  // we may not need this, we can get full locus
253
- this.handleLocusDelta(data.locus, meeting);
269
+ this.handleLocusDelta(locus, meeting);
254
270
  }
255
271
  }
256
272
 
@@ -284,8 +300,9 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
284
300
  this.updateParticipantDeltas(locus.participants);
285
301
  this.scheduledMeeting = locus.meeting || null;
286
302
  this.participants = locus.participants;
303
+ var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
287
304
  this.updateLocusInfo(locus);
288
- this.updateParticipants(locus.participants);
305
+ this.updateParticipants(locus.participants, isReplaceMembers);
289
306
  this.isMeetingActive();
290
307
  this.handleOneOnOneEvent(eventType);
291
308
  this.updateEmbeddedApps(locus.embeddedApps);
@@ -337,8 +354,9 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
337
354
  }, {
338
355
  key: "onDeltaLocus",
339
356
  value: function onDeltaLocus(locus) {
357
+ var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
340
358
  this.updateLocusInfo(locus);
341
- this.updateParticipants(locus.participants);
359
+ this.updateParticipants(locus.participants, isReplaceMembers);
342
360
  this.isMeetingActive();
343
361
  }
344
362
 
@@ -350,7 +368,14 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
350
368
  }, {
351
369
  key: "updateLocusInfo",
352
370
  value: function updateLocusInfo(locus) {
353
- this.updateControls(locus.controls);
371
+ var _locus$self, _locus$self2, _locus$links2;
372
+ if (((_locus$self = locus.self) === null || _locus$self === void 0 ? void 0 : _locus$self.reason) === 'MOVED' && ((_locus$self2 = locus.self) === null || _locus$self2 === void 0 ? void 0 : _locus$self2.state) === 'LEFT') {
373
+ // When moved to a breakout session locus sends a message for the previous locus
374
+ // indicating that we have been moved. It isn't helpful to continue parsing this
375
+ // as it gets interpreted as if we have left the call
376
+ return;
377
+ }
378
+ this.updateControls(locus.controls, locus.self);
354
379
  this.updateConversationUrl(locus.conversationUrl, locus.info);
355
380
  this.updateCreated(locus.created);
356
381
  this.updateFullState(locus.fullState);
@@ -367,6 +392,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
367
392
  this.updateMemberShip(locus.membership);
368
393
  this.updateIdentifiers(locus.identities);
369
394
  this.updateEmbeddedApps(locus.embeddedApps);
395
+ this.updateServices((_locus$links2 = locus.links) === null || _locus$links2 === void 0 ? void 0 : _locus$links2.services);
370
396
  this.compareAndUpdate();
371
397
  // update which required to compare different objects from locus
372
398
  }
@@ -595,15 +621,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
595
621
  }
596
622
 
597
623
  /**
598
- *
624
+ * update meeting's members
599
625
  * @param {Object} participants new participants object
600
- * @param {boolen} deltaParticpantFlag delta event
626
+ * @param {Boolean} isReplace is replace the whole members
601
627
  * @returns {Array} updatedParticipants
602
628
  * @memberof LocusInfo
603
629
  */
604
630
  }, {
605
631
  key: "updateParticipants",
606
- value: function updateParticipants(participants) {
632
+ value: function updateParticipants(participants, isReplace) {
607
633
  var _this$parsedLocus$con;
608
634
  this.emitScoped({
609
635
  file: 'locus-info',
@@ -613,18 +639,20 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
613
639
  recordingId: this.parsedLocus.controls && ((_this$parsedLocus$con = this.parsedLocus.controls.record) === null || _this$parsedLocus$con === void 0 ? void 0 : _this$parsedLocus$con.modifiedBy),
614
640
  selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
615
641
  selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
616
- hostId: this.parsedLocus.host && this.parsedLocus.host.hostId
642
+ hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
643
+ isReplace: isReplace
617
644
  });
618
645
  }
619
646
 
620
647
  /**
621
648
  * @param {Object} controls
649
+ * @param {Object} self
622
650
  * @returns {undefined}
623
651
  * @memberof LocusInfo
624
652
  */
625
653
  }, {
626
654
  key: "updateControls",
627
- value: function updateControls(controls) {
655
+ value: function updateControls(controls, self) {
628
656
  if (controls && !(0, _isEqual2.default)(this.controls, controls)) {
629
657
  this.parsedLocus.controls = _controlsUtils.default.parse(controls);
630
658
  var _ControlsUtils$getCon = _controlsUtils.default.getControls(this.controls, controls),
@@ -634,7 +662,73 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
634
662
  hasMeetingContainerChanged = _ControlsUtils$getCon2.hasMeetingContainerChanged,
635
663
  hasTranscribeChanged = _ControlsUtils$getCon2.hasTranscribeChanged,
636
664
  hasEntryExitToneChanged = _ControlsUtils$getCon2.hasEntryExitToneChanged,
665
+ hasBreakoutChanged = _ControlsUtils$getCon2.hasBreakoutChanged,
666
+ hasVideoEnabledChanged = _ControlsUtils$getCon2.hasVideoEnabledChanged,
667
+ hasMuteOnEntryChanged = _ControlsUtils$getCon2.hasMuteOnEntryChanged,
668
+ hasShareControlChanged = _ControlsUtils$getCon2.hasShareControlChanged,
669
+ hasDisallowUnmuteChanged = _ControlsUtils$getCon2.hasDisallowUnmuteChanged,
670
+ hasReactionsChanged = _ControlsUtils$getCon2.hasReactionsChanged,
671
+ hasReactionDisplayNamesChanged = _ControlsUtils$getCon2.hasReactionDisplayNamesChanged,
672
+ hasViewTheParticipantListChanged = _ControlsUtils$getCon2.hasViewTheParticipantListChanged,
673
+ hasRaiseHandChanged = _ControlsUtils$getCon2.hasRaiseHandChanged,
674
+ hasVideoChanged = _ControlsUtils$getCon2.hasVideoChanged,
637
675
  current = _ControlsUtils$getCon.current;
676
+ if (hasMuteOnEntryChanged) {
677
+ this.emitScoped({
678
+ file: 'locus-info',
679
+ function: 'updateControls'
680
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, {
681
+ state: current.muteOnEntry
682
+ });
683
+ }
684
+ if (hasShareControlChanged) {
685
+ this.emitScoped({
686
+ file: 'locus-info',
687
+ function: 'updateControls'
688
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, {
689
+ state: current.shareControl
690
+ });
691
+ }
692
+ if (hasDisallowUnmuteChanged) {
693
+ this.emitScoped({
694
+ file: 'locus-info',
695
+ function: 'updateControls'
696
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, {
697
+ state: current.disallowUnmute
698
+ });
699
+ }
700
+ if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
701
+ this.emitScoped({
702
+ file: 'locus-info',
703
+ function: 'updateControls'
704
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, {
705
+ state: current.reactions
706
+ });
707
+ }
708
+ if (hasViewTheParticipantListChanged) {
709
+ this.emitScoped({
710
+ file: 'locus-info',
711
+ function: 'updateControls'
712
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, {
713
+ state: current.viewTheParticipantList
714
+ });
715
+ }
716
+ if (hasRaiseHandChanged) {
717
+ this.emitScoped({
718
+ file: 'locus-info',
719
+ function: 'updateControls'
720
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, {
721
+ state: current.raiseHand
722
+ });
723
+ }
724
+ if (hasVideoChanged) {
725
+ this.emitScoped({
726
+ file: 'locus-info',
727
+ function: 'updateControls'
728
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, {
729
+ state: current.video
730
+ });
731
+ }
638
732
  if (hasRecordingChanged || hasRecordingPausedChanged) {
639
733
  var state = null;
640
734
  if (hasRecordingPausedChanged) {
@@ -677,16 +771,42 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
677
771
  caption: caption
678
772
  });
679
773
  }
774
+ if (hasBreakoutChanged) {
775
+ var breakout = current.breakout;
776
+ breakout.breakoutMoveId = _selfUtils.default.getReplacedBreakoutMoveId(self, this.webex.internal.device.url);
777
+ this.emitScoped({
778
+ file: 'locus-info',
779
+ function: 'updateControls'
780
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, {
781
+ breakout: breakout
782
+ });
783
+ }
680
784
  if (hasEntryExitToneChanged) {
681
785
  var entryExitTone = current.entryExitTone;
786
+ this.updateMeeting({
787
+ entryExitTone: entryExitTone
788
+ });
682
789
  this.emitScoped({
683
790
  file: 'locus-info',
684
791
  function: 'updateControls'
685
792
  }, _constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, {
686
793
  entryExitTone: entryExitTone
687
794
  });
795
+ }
796
+
797
+ // videoEnabled is handled differently than other controls,
798
+ // to fit with audio mute status logic
799
+ if (hasVideoEnabledChanged) {
800
+ var videoEnabled = current.videoEnabled;
688
801
  this.updateMeeting({
689
- entryExitTone: entryExitTone
802
+ unmuteVideoAllowed: videoEnabled
803
+ });
804
+ this.emitScoped({
805
+ file: 'locus-info',
806
+ function: 'updateControls'
807
+ }, _constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, {
808
+ // muted: not part of locus.controls
809
+ unmuteAllowed: videoEnabled
690
810
  });
691
811
  }
692
812
  this.controls = controls;
@@ -728,6 +848,25 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
728
848
  }
729
849
  }
730
850
 
851
+ /**
852
+ * @param {Object} services
853
+ * @returns {undefined}
854
+ * @memberof LocusInfo
855
+ */
856
+ }, {
857
+ key: "updateServices",
858
+ value: function updateServices(services) {
859
+ if (services && !(0, _isEqual2.default)(this.services, services)) {
860
+ this.services = services;
861
+ this.emitScoped({
862
+ file: 'locus-info',
863
+ function: 'updateServices'
864
+ }, _constants.LOCUSINFO.EVENTS.LINKS_SERVICES, {
865
+ services: services
866
+ });
867
+ }
868
+ }
869
+
731
870
  /**
732
871
  * @param {Object} fullState
733
872
  * @returns {undefined}
@@ -800,9 +939,9 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
800
939
  }, {
801
940
  key: "updateMeetingInfo",
802
941
  value: function updateMeetingInfo(info, self) {
803
- if (info && !(0, _isEqual2.default)(this.info, info)) {
804
- var _this$parsedLocus$sel;
805
- var roles = self ? _selfUtils.default.getRoles(self) : ((_this$parsedLocus$sel = this.parsedLocus.self) === null || _this$parsedLocus$sel === void 0 ? void 0 : _this$parsedLocus$sel.roles) || [];
942
+ var _this$parsedLocus$sel;
943
+ var roles = self ? _selfUtils.default.getRoles(self) : ((_this$parsedLocus$sel = this.parsedLocus.self) === null || _this$parsedLocus$sel === void 0 ? void 0 : _this$parsedLocus$sel.roles) || [];
944
+ if (info && !(0, _isEqual2.default)(this.info, info) || roles.length && !(0, _isEqual2.default)(this.roles, roles) && info) {
806
945
  var isJoined = _selfUtils.default.isJoined(self || this.parsedLocus.self);
807
946
  var parsedInfo = _infoUtils.default.getInfos(this.parsedLocus.info, info, roles, isJoined);
808
947
  this.emitScoped({
@@ -829,6 +968,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
829
968
  // Parses the info and adds necessary values
830
969
  this.updateMeeting(parsedInfo.current);
831
970
  }
971
+ this.roles = roles;
832
972
  }
833
973
 
834
974
  /**
@@ -867,6 +1007,8 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
867
1007
  if (mediaShares && !(0, _isEqual2.default)(this.mediaShares, mediaShares)) {
868
1008
  var parsedMediaShares = _mediaSharesUtils.default.getMediaShares(this.mediaShares, mediaShares);
869
1009
  this.updateMeeting(parsedMediaShares.current);
1010
+ this.parsedLocus.mediaShares = parsedMediaShares.current;
1011
+ this.mediaShares = mediaShares;
870
1012
  this.emitScoped({
871
1013
  file: 'locus-info',
872
1014
  function: 'updateMediaShares'
@@ -874,8 +1016,6 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
874
1016
  current: parsedMediaShares.current,
875
1017
  previous: parsedMediaShares.previous
876
1018
  });
877
- this.parsedLocus.mediaShares = parsedMediaShares.current;
878
- this.mediaShares = mediaShares;
879
1019
  }
880
1020
  }
881
1021
 
@@ -946,6 +1086,14 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
946
1086
  layout: parsedSelves.current.layout
947
1087
  });
948
1088
  }
1089
+ if (parsedSelves.updates.breakoutsChanged) {
1090
+ this.emitScoped({
1091
+ file: 'locus-info',
1092
+ function: 'updateSelf'
1093
+ }, _constants.LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED, {
1094
+ breakoutSessions: parsedSelves.current.breakoutSessions
1095
+ });
1096
+ }
949
1097
  if (parsedSelves.updates.isMediaInactiveOrReleased) {
950
1098
  this.emitScoped({
951
1099
  file: 'locus-info',
@@ -960,6 +1108,26 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
960
1108
  function: 'updateSelf'
961
1109
  }, _constants.LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED, self);
962
1110
  }
1111
+ if (parsedSelves.updates.isRolesChanged) {
1112
+ var _parsedSelves$previou, _parsedSelves$current;
1113
+ this.emitScoped({
1114
+ file: 'locus-info',
1115
+ function: 'updateSelf'
1116
+ }, _constants.LOCUSINFO.EVENTS.SELF_ROLES_CHANGED, {
1117
+ oldRoles: (_parsedSelves$previou = parsedSelves.previous) === null || _parsedSelves$previou === void 0 ? void 0 : _parsedSelves$previou.roles,
1118
+ newRoles: (_parsedSelves$current = parsedSelves.current) === null || _parsedSelves$current === void 0 ? void 0 : _parsedSelves$current.roles
1119
+ });
1120
+ }
1121
+ if (parsedSelves.updates.isVideoMutedByOthersChanged) {
1122
+ this.emitScoped({
1123
+ file: 'locus-info',
1124
+ function: 'updateSelf'
1125
+ }, _constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, {
1126
+ muted: parsedSelves.current.remoteVideoMuted
1127
+ // unmuteAllowed: not part of .self
1128
+ });
1129
+ }
1130
+
963
1131
  if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
964
1132
  this.emitScoped({
965
1133
  file: 'locus-info',
@@ -1005,14 +1173,14 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1005
1173
  _constants.LOCUSINFO.EVENTS.MEDIA_INACTIVITY, _selfUtils.default.getMediaStatus(self.mediaSessions));
1006
1174
  }
1007
1175
  if (parsedSelves.updates.audioStateChange || parsedSelves.updates.videoStateChange || parsedSelves.updates.shareStateChange) {
1008
- var _parsedSelves$current, _parsedSelves$current2, _parsedSelves$current3;
1176
+ var _parsedSelves$current2, _parsedSelves$current3, _parsedSelves$current4;
1009
1177
  this.emitScoped({
1010
1178
  file: 'locus-info',
1011
1179
  function: 'updateSelf'
1012
1180
  }, _constants.LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE, {
1013
- audioStatus: (_parsedSelves$current = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current === void 0 ? void 0 : _parsedSelves$current.audio,
1014
- videoStatus: (_parsedSelves$current2 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current2 === void 0 ? void 0 : _parsedSelves$current2.video,
1015
- shareStatus: (_parsedSelves$current3 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current3 === void 0 ? void 0 : _parsedSelves$current3.share
1181
+ audioStatus: (_parsedSelves$current2 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current2 === void 0 ? void 0 : _parsedSelves$current2.audio,
1182
+ videoStatus: (_parsedSelves$current3 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current3 === void 0 ? void 0 : _parsedSelves$current3.video,
1183
+ shareStatus: (_parsedSelves$current4 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current4 === void 0 ? void 0 : _parsedSelves$current4.share
1016
1184
  });
1017
1185
  }
1018
1186
  if (parsedSelves.updates.isUserObserving) {
@@ -1137,6 +1305,112 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1137
1305
  this.identities = identities;
1138
1306
  }
1139
1307
  }
1308
+
1309
+ /**
1310
+ * check the locus is main session's one or not, if is main session's, update main session cache
1311
+ * @param {Object} locus
1312
+ * @returns {undefined}
1313
+ * @memberof LocusInfo
1314
+ */
1315
+ }, {
1316
+ key: "updateLocusCache",
1317
+ value: function updateLocusCache(locus) {
1318
+ var isMainSessionDTO = _controlsUtils.default.isMainSessionDTO(locus);
1319
+ if (isMainSessionDTO) {
1320
+ this.updateMainSessionLocusCache(locus);
1321
+ }
1322
+ }
1323
+
1324
+ /**
1325
+ * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
1326
+ * if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
1327
+ * @param {Object} newLocus
1328
+ * @returns {Object}
1329
+ * @memberof LocusInfo
1330
+ */
1331
+ }, {
1332
+ key: "getTheLocusToUpdate",
1333
+ value: function getTheLocusToUpdate(newLocus) {
1334
+ var switchStatus = _controlsUtils.default.getSessionSwitchStatus(this.controls, newLocus === null || newLocus === void 0 ? void 0 : newLocus.controls);
1335
+ if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
1336
+ return (0, _cloneDeep2.default)(this.mainSessionLocusCache);
1337
+ }
1338
+ if (switchStatus.isJoinToBreakout) {
1339
+ this.emitScoped({
1340
+ file: 'locus-info',
1341
+ function: 'updateControls'
1342
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN, {
1343
+ mainLocusUrl: this.url
1344
+ });
1345
+ }
1346
+ return newLocus;
1347
+ }
1348
+
1349
+ /**
1350
+ * merge participants by participant id
1351
+ * @param {Array} participants
1352
+ * @param {Array} sourceParticipants
1353
+ * @returns {Array} merged participants
1354
+ * @memberof LocusInfo
1355
+ */
1356
+ // eslint-disable-next-line class-methods-use-this
1357
+ }, {
1358
+ key: "mergeParticipants",
1359
+ value: function mergeParticipants(participants, sourceParticipants) {
1360
+ if (!sourceParticipants || !sourceParticipants.length) return participants;
1361
+ if (!participants || !participants.length) {
1362
+ return sourceParticipants;
1363
+ }
1364
+ sourceParticipants.forEach(function (participant) {
1365
+ var existIndex = participants.findIndex(function (p) {
1366
+ return p.id === participant.id;
1367
+ });
1368
+ if (existIndex > -1) {
1369
+ participants.splice(existIndex, 1, participant);
1370
+ } else {
1371
+ participants.push(participant);
1372
+ }
1373
+ });
1374
+ return participants;
1375
+ }
1376
+
1377
+ /**
1378
+ * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
1379
+ * @param {Object} mainLocus
1380
+ * @returns {undefined}
1381
+ * @memberof LocusInfo
1382
+ */
1383
+ }, {
1384
+ key: "updateMainSessionLocusCache",
1385
+ value: function updateMainSessionLocusCache(mainLocus) {
1386
+ var _this5 = this;
1387
+ if (!mainLocus) {
1388
+ return;
1389
+ }
1390
+ var locusClone = (0, _cloneDeep2.default)(mainLocus);
1391
+ if (this.mainSessionLocusCache) {
1392
+ // shallow merge and do special merge for participants
1393
+ (0, _assignWith2.default)(this.mainSessionLocusCache, locusClone, function (objValue, srcValue, key) {
1394
+ if (key === 'participants') {
1395
+ return _this5.mergeParticipants(objValue, srcValue);
1396
+ }
1397
+ return srcValue || objValue;
1398
+ });
1399
+ } else {
1400
+ this.mainSessionLocusCache = locusClone;
1401
+ }
1402
+ }
1403
+
1404
+ /**
1405
+ * clear main session cache
1406
+ * @returns {undefined}
1407
+ * @memberof LocusInfo
1408
+ */
1409
+ }, {
1410
+ key: "clearMainSessionLocusCache",
1411
+ value: function clearMainSessionLocusCache() {
1412
+ this.mainSessionLocusCache = null;
1413
+ }
1140
1414
  }]);
1141
1415
  return LocusInfo;
1142
1416
  }(_eventsScope.default);