@webex/plugin-meetings 3.0.0-beta.31 → 3.0.0-beta.310

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 (378) hide show
  1. package/README.md +46 -8
  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 +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +709 -35
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/utils.js +45 -1
  17. package/dist/breakouts/utils.js.map +1 -1
  18. package/dist/common/errors/no-meeting-info.js +51 -0
  19. package/dist/common/errors/no-meeting-info.js.map +1 -0
  20. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  21. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +48 -7
  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/common/logs/request.js +5 -1
  27. package/dist/common/logs/request.js.map +1 -1
  28. package/dist/common/queue.js +24 -9
  29. package/dist/common/queue.js.map +1 -1
  30. package/dist/config.js +5 -11
  31. package/dist/config.js.map +1 -1
  32. package/dist/constants.js +233 -29
  33. package/dist/constants.js.map +1 -1
  34. package/dist/controls-options-manager/enums.js +14 -2
  35. package/dist/controls-options-manager/enums.js.map +1 -1
  36. package/dist/controls-options-manager/index.js +109 -15
  37. package/dist/controls-options-manager/index.js.map +1 -1
  38. package/dist/controls-options-manager/types.js +7 -0
  39. package/dist/controls-options-manager/types.js.map +1 -0
  40. package/dist/controls-options-manager/util.js +309 -18
  41. package/dist/controls-options-manager/util.js.map +1 -1
  42. package/dist/index.js +112 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/interpretation/collection.js +23 -0
  45. package/dist/interpretation/collection.js.map +1 -0
  46. package/dist/interpretation/index.js +366 -0
  47. package/dist/interpretation/index.js.map +1 -0
  48. package/dist/interpretation/siLanguage.js +25 -0
  49. package/dist/interpretation/siLanguage.js.map +1 -0
  50. package/dist/locus-info/controlsUtils.js +91 -2
  51. package/dist/locus-info/controlsUtils.js.map +1 -1
  52. package/dist/locus-info/index.js +383 -62
  53. package/dist/locus-info/index.js.map +1 -1
  54. package/dist/locus-info/infoUtils.js +7 -1
  55. package/dist/locus-info/infoUtils.js.map +1 -1
  56. package/dist/locus-info/mediaSharesUtils.js +57 -1
  57. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  58. package/dist/locus-info/parser.js +249 -72
  59. package/dist/locus-info/parser.js.map +1 -1
  60. package/dist/locus-info/selfUtils.js +89 -14
  61. package/dist/locus-info/selfUtils.js.map +1 -1
  62. package/dist/media/index.js +61 -116
  63. package/dist/media/index.js.map +1 -1
  64. package/dist/media/properties.js +73 -124
  65. package/dist/media/properties.js.map +1 -1
  66. package/dist/meeting/in-meeting-actions.js +82 -2
  67. package/dist/meeting/in-meeting-actions.js.map +1 -1
  68. package/dist/meeting/index.js +3777 -2929
  69. package/dist/meeting/index.js.map +1 -1
  70. package/dist/meeting/locusMediaRequest.js +292 -0
  71. package/dist/meeting/locusMediaRequest.js.map +1 -0
  72. package/dist/meeting/muteState.js +230 -124
  73. package/dist/meeting/muteState.js.map +1 -1
  74. package/dist/meeting/request.js +260 -196
  75. package/dist/meeting/request.js.map +1 -1
  76. package/dist/meeting/util.js +601 -417
  77. package/dist/meeting/util.js.map +1 -1
  78. package/dist/meeting-info/index.js +73 -7
  79. package/dist/meeting-info/index.js.map +1 -1
  80. package/dist/meeting-info/meeting-info-v2.js +192 -51
  81. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  82. package/dist/meeting-info/util.js +1 -1
  83. package/dist/meeting-info/util.js.map +1 -1
  84. package/dist/meeting-info/utilv2.js +36 -36
  85. package/dist/meeting-info/utilv2.js.map +1 -1
  86. package/dist/meetings/collection.js +39 -0
  87. package/dist/meetings/collection.js.map +1 -1
  88. package/dist/meetings/index.js +415 -115
  89. package/dist/meetings/index.js.map +1 -1
  90. package/dist/meetings/meetings.types.js +7 -0
  91. package/dist/meetings/meetings.types.js.map +1 -0
  92. package/dist/meetings/request.js +2 -0
  93. package/dist/meetings/request.js.map +1 -1
  94. package/dist/meetings/util.js +72 -6
  95. package/dist/meetings/util.js.map +1 -1
  96. package/dist/member/index.js +58 -0
  97. package/dist/member/index.js.map +1 -1
  98. package/dist/member/types.js +25 -0
  99. package/dist/member/types.js.map +1 -0
  100. package/dist/member/util.js +132 -25
  101. package/dist/member/util.js.map +1 -1
  102. package/dist/members/collection.js +10 -0
  103. package/dist/members/collection.js.map +1 -1
  104. package/dist/members/index.js +102 -6
  105. package/dist/members/index.js.map +1 -1
  106. package/dist/members/request.js +106 -38
  107. package/dist/members/request.js.map +1 -1
  108. package/dist/members/types.js +15 -0
  109. package/dist/members/types.js.map +1 -0
  110. package/dist/members/util.js +326 -232
  111. package/dist/members/util.js.map +1 -1
  112. package/dist/metrics/constants.js +13 -5
  113. package/dist/metrics/constants.js.map +1 -1
  114. package/dist/metrics/index.js +1 -468
  115. package/dist/metrics/index.js.map +1 -1
  116. package/dist/multistream/mediaRequestManager.js +238 -49
  117. package/dist/multistream/mediaRequestManager.js.map +1 -1
  118. package/dist/multistream/receiveSlot.js +29 -16
  119. package/dist/multistream/receiveSlot.js.map +1 -1
  120. package/dist/multistream/receiveSlotManager.js +39 -36
  121. package/dist/multistream/receiveSlotManager.js.map +1 -1
  122. package/dist/multistream/remoteMedia.js +44 -18
  123. package/dist/multistream/remoteMedia.js.map +1 -1
  124. package/dist/multistream/remoteMediaGroup.js +60 -3
  125. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  126. package/dist/multistream/remoteMediaManager.js +209 -59
  127. package/dist/multistream/remoteMediaManager.js.map +1 -1
  128. package/dist/multistream/sendSlotManager.js +233 -0
  129. package/dist/multistream/sendSlotManager.js.map +1 -0
  130. package/dist/reachability/index.js +225 -59
  131. package/dist/reachability/index.js.map +1 -1
  132. package/dist/reachability/request.js +17 -8
  133. package/dist/reachability/request.js.map +1 -1
  134. package/dist/reconnection-manager/index.js +201 -156
  135. package/dist/reconnection-manager/index.js.map +1 -1
  136. package/dist/recording-controller/index.js +21 -2
  137. package/dist/recording-controller/index.js.map +1 -1
  138. package/dist/recording-controller/util.js +9 -8
  139. package/dist/recording-controller/util.js.map +1 -1
  140. package/dist/roap/index.js +62 -32
  141. package/dist/roap/index.js.map +1 -1
  142. package/dist/roap/request.js +112 -97
  143. package/dist/roap/request.js.map +1 -1
  144. package/dist/roap/turnDiscovery.js +95 -36
  145. package/dist/roap/turnDiscovery.js.map +1 -1
  146. package/dist/rtcMetrics/constants.js +12 -0
  147. package/dist/rtcMetrics/constants.js.map +1 -0
  148. package/dist/rtcMetrics/index.js +117 -0
  149. package/dist/rtcMetrics/index.js.map +1 -0
  150. package/dist/statsAnalyzer/index.js +86 -78
  151. package/dist/statsAnalyzer/index.js.map +1 -1
  152. package/dist/statsAnalyzer/mqaUtil.js +11 -10
  153. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  154. package/dist/types/annotation/annotation.types.d.ts +42 -0
  155. package/dist/types/annotation/constants.d.ts +31 -0
  156. package/dist/types/annotation/index.d.ts +117 -0
  157. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  158. package/dist/types/breakouts/events.d.ts +8 -0
  159. package/dist/types/breakouts/utils.d.ts +14 -0
  160. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  161. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  162. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  163. package/dist/types/common/logs/request.d.ts +2 -0
  164. package/dist/types/common/queue.d.ts +9 -7
  165. package/dist/types/config.d.ts +1 -7
  166. package/dist/types/constants.d.ts +194 -24
  167. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  168. package/dist/types/controls-options-manager/index.d.ts +17 -1
  169. package/dist/types/controls-options-manager/types.d.ts +43 -0
  170. package/dist/types/controls-options-manager/util.d.ts +1 -7
  171. package/dist/types/index.d.ts +6 -4
  172. package/dist/types/interpretation/collection.d.ts +5 -0
  173. package/dist/types/interpretation/index.d.ts +5 -0
  174. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  175. package/dist/types/locus-info/index.d.ts +57 -4
  176. package/dist/types/locus-info/parser.d.ts +67 -6
  177. package/dist/types/media/index.d.ts +2 -0
  178. package/dist/types/media/properties.d.ts +34 -48
  179. package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
  180. package/dist/types/meeting/index.d.ts +463 -510
  181. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  182. package/dist/types/meeting/muteState.d.ts +99 -23
  183. package/dist/types/meeting/request.d.ts +72 -43
  184. package/dist/types/meeting/util.d.ts +101 -1
  185. package/dist/types/meeting-info/index.d.ts +13 -1
  186. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  187. package/dist/types/meetings/collection.d.ts +17 -0
  188. package/dist/types/meetings/index.d.ts +98 -20
  189. package/dist/types/meetings/meetings.types.d.ts +4 -0
  190. package/dist/types/member/index.d.ts +14 -0
  191. package/dist/types/member/types.d.ts +32 -0
  192. package/dist/types/members/collection.d.ts +5 -0
  193. package/dist/types/members/index.d.ts +35 -2
  194. package/dist/types/members/request.d.ts +73 -9
  195. package/dist/types/members/types.d.ts +25 -0
  196. package/dist/types/members/util.d.ts +214 -1
  197. package/dist/types/metrics/constants.d.ts +12 -4
  198. package/dist/types/metrics/index.d.ts +4 -119
  199. package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
  200. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  201. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  202. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  203. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  204. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  205. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  206. package/dist/types/reachability/index.d.ts +61 -7
  207. package/dist/types/reachability/request.d.ts +7 -3
  208. package/dist/types/reconnection-manager/index.d.ts +9 -0
  209. package/dist/types/recording-controller/index.d.ts +15 -1
  210. package/dist/types/recording-controller/util.d.ts +5 -4
  211. package/dist/types/roap/index.d.ts +2 -1
  212. package/dist/types/roap/request.d.ts +15 -11
  213. package/dist/types/roap/turnDiscovery.d.ts +21 -3
  214. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  215. package/dist/types/rtcMetrics/index.d.ts +47 -0
  216. package/dist/types/statsAnalyzer/index.d.ts +7 -1
  217. package/dist/types/webinar/collection.d.ts +16 -0
  218. package/dist/types/webinar/index.d.ts +5 -0
  219. package/dist/webinar/collection.js +44 -0
  220. package/dist/webinar/collection.js.map +1 -0
  221. package/dist/webinar/index.js +69 -0
  222. package/dist/webinar/index.js.map +1 -0
  223. package/package.json +23 -20
  224. package/src/annotation/annotation.types.ts +50 -0
  225. package/src/annotation/constants.ts +36 -0
  226. package/src/annotation/index.ts +328 -0
  227. package/src/breakouts/README.md +42 -12
  228. package/src/breakouts/breakout.ts +67 -9
  229. package/src/breakouts/edit-lock-error.ts +25 -0
  230. package/src/breakouts/events.ts +56 -0
  231. package/src/breakouts/index.ts +592 -20
  232. package/src/breakouts/utils.ts +42 -0
  233. package/src/common/errors/no-meeting-info.ts +24 -0
  234. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  235. package/src/common/errors/webex-errors.ts +44 -2
  236. package/src/common/logs/logger-proxy.ts +1 -1
  237. package/src/common/logs/request.ts +5 -1
  238. package/src/common/queue.ts +22 -8
  239. package/src/config.ts +4 -10
  240. package/src/constants.ts +221 -19
  241. package/src/controls-options-manager/enums.ts +12 -0
  242. package/src/controls-options-manager/index.ts +116 -21
  243. package/src/controls-options-manager/types.ts +59 -0
  244. package/src/controls-options-manager/util.ts +294 -14
  245. package/src/index.ts +40 -0
  246. package/src/interpretation/README.md +60 -0
  247. package/src/interpretation/collection.ts +19 -0
  248. package/src/interpretation/index.ts +332 -0
  249. package/src/interpretation/siLanguage.ts +18 -0
  250. package/src/locus-info/controlsUtils.ts +108 -0
  251. package/src/locus-info/index.ts +413 -59
  252. package/src/locus-info/infoUtils.ts +10 -2
  253. package/src/locus-info/mediaSharesUtils.ts +64 -0
  254. package/src/locus-info/parser.ts +258 -47
  255. package/src/locus-info/selfUtils.ts +81 -5
  256. package/src/media/index.ts +102 -122
  257. package/src/media/properties.ts +87 -110
  258. package/src/meeting/in-meeting-actions.ts +163 -3
  259. package/src/meeting/index.ts +3132 -2541
  260. package/src/meeting/locusMediaRequest.ts +313 -0
  261. package/src/meeting/muteState.ts +229 -131
  262. package/src/meeting/request.ts +177 -121
  263. package/src/meeting/util.ts +588 -394
  264. package/src/meeting-info/index.ts +81 -8
  265. package/src/meeting-info/meeting-info-v2.ts +170 -14
  266. package/src/meeting-info/util.ts +1 -1
  267. package/src/meeting-info/utilv2.ts +23 -23
  268. package/src/meetings/collection.ts +33 -0
  269. package/src/meetings/index.ts +445 -123
  270. package/src/meetings/meetings.types.ts +12 -0
  271. package/src/meetings/request.ts +2 -0
  272. package/src/meetings/util.ts +80 -11
  273. package/src/member/index.ts +58 -0
  274. package/src/member/types.ts +38 -0
  275. package/src/member/util.ts +141 -25
  276. package/src/members/collection.ts +8 -0
  277. package/src/members/index.ts +134 -8
  278. package/src/members/request.ts +97 -17
  279. package/src/members/types.ts +29 -0
  280. package/src/members/util.ts +333 -240
  281. package/src/metrics/constants.ts +12 -4
  282. package/src/metrics/index.ts +1 -490
  283. package/src/multistream/mediaRequestManager.ts +289 -79
  284. package/src/multistream/receiveSlot.ts +31 -17
  285. package/src/multistream/receiveSlotManager.ts +34 -24
  286. package/src/multistream/remoteMedia.ts +27 -2
  287. package/src/multistream/remoteMediaGroup.ts +59 -0
  288. package/src/multistream/remoteMediaManager.ts +148 -30
  289. package/src/multistream/sendSlotManager.ts +170 -0
  290. package/src/reachability/index.ts +228 -37
  291. package/src/reachability/request.ts +17 -8
  292. package/src/reconnection-manager/index.ts +83 -56
  293. package/src/recording-controller/index.ts +20 -3
  294. package/src/recording-controller/util.ts +26 -9
  295. package/src/roap/index.ts +63 -32
  296. package/src/roap/request.ts +100 -104
  297. package/src/roap/turnDiscovery.ts +48 -26
  298. package/src/rtcMetrics/constants.ts +3 -0
  299. package/src/rtcMetrics/index.ts +100 -0
  300. package/src/statsAnalyzer/index.ts +105 -91
  301. package/src/statsAnalyzer/mqaUtil.ts +13 -14
  302. package/src/webinar/collection.ts +31 -0
  303. package/src/webinar/index.ts +62 -0
  304. package/test/integration/spec/converged-space-meetings.js +60 -3
  305. package/test/integration/spec/journey.js +320 -261
  306. package/test/integration/spec/space-meeting.js +76 -3
  307. package/test/unit/spec/annotation/index.ts +418 -0
  308. package/test/unit/spec/breakouts/breakout.ts +118 -28
  309. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  310. package/test/unit/spec/breakouts/events.ts +89 -0
  311. package/test/unit/spec/breakouts/index.ts +1395 -69
  312. package/test/unit/spec/breakouts/utils.js +52 -1
  313. package/test/unit/spec/common/queue.js +31 -2
  314. package/test/unit/spec/controls-options-manager/index.js +163 -0
  315. package/test/unit/spec/controls-options-manager/util.js +576 -60
  316. package/test/unit/spec/fixture/locus.js +1 -0
  317. package/test/unit/spec/interpretation/collection.ts +15 -0
  318. package/test/unit/spec/interpretation/index.ts +589 -0
  319. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  320. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  321. package/test/unit/spec/locus-info/index.js +1304 -33
  322. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  323. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  324. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  325. package/test/unit/spec/locus-info/parser.js +116 -35
  326. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  327. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  328. package/test/unit/spec/media/index.ts +104 -37
  329. package/test/unit/spec/media/properties.ts +2 -2
  330. package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
  331. package/test/unit/spec/meeting/index.js +5216 -1956
  332. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  333. package/test/unit/spec/meeting/muteState.js +408 -208
  334. package/test/unit/spec/meeting/request.js +483 -49
  335. package/test/unit/spec/meeting/utils.js +679 -64
  336. package/test/unit/spec/meeting-info/index.js +300 -0
  337. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  338. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  339. package/test/unit/spec/meetings/collection.js +26 -0
  340. package/test/unit/spec/meetings/index.js +1011 -205
  341. package/test/unit/spec/meetings/utils.js +202 -2
  342. package/test/unit/spec/member/index.js +61 -6
  343. package/test/unit/spec/member/util.js +510 -34
  344. package/test/unit/spec/members/index.js +432 -1
  345. package/test/unit/spec/members/request.js +206 -27
  346. package/test/unit/spec/members/utils.js +210 -0
  347. package/test/unit/spec/metrics/index.js +1 -50
  348. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  349. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  350. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  351. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  352. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  353. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  354. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  355. package/test/unit/spec/reachability/index.ts +549 -9
  356. package/test/unit/spec/reachability/request.js +68 -0
  357. package/test/unit/spec/reconnection-manager/index.js +85 -9
  358. package/test/unit/spec/recording-controller/index.js +294 -218
  359. package/test/unit/spec/recording-controller/util.js +223 -96
  360. package/test/unit/spec/roap/index.ts +178 -64
  361. package/test/unit/spec/roap/request.ts +203 -85
  362. package/test/unit/spec/roap/turnDiscovery.ts +82 -36
  363. package/test/unit/spec/rtcMetrics/index.ts +73 -0
  364. package/test/unit/spec/stats-analyzer/index.js +136 -2
  365. package/test/unit/spec/webinar/collection.ts +13 -0
  366. package/test/unit/spec/webinar/index.ts +60 -0
  367. package/test/utils/integrationTestUtils.js +46 -0
  368. package/test/utils/testUtils.js +0 -52
  369. package/dist/meeting/effectsState.js +0 -262
  370. package/dist/meeting/effectsState.js.map +0 -1
  371. package/dist/metrics/config.js +0 -299
  372. package/dist/metrics/config.js.map +0 -1
  373. package/dist/types/meeting/effectsState.d.ts +0 -42
  374. package/dist/types/metrics/config.d.ts +0 -178
  375. package/src/index.js +0 -16
  376. package/src/meeting/effectsState.ts +0 -211
  377. package/src/metrics/config.ts +0 -495
  378. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -15,12 +15,13 @@ 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 _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
19
+ var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
20
+ var _assignWith2 = _interopRequireDefault(require("lodash/assignWith"));
18
21
  var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
19
22
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
20
23
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
21
24
  var _constants = require("../constants");
22
- var _metrics = _interopRequireDefault(require("../metrics"));
23
- var _config = require("../metrics/config");
24
25
  var _infoUtils = _interopRequireDefault(require("./infoUtils"));
25
26
  var _fullState = _interopRequireDefault(require("./fullState"));
26
27
  var _selfUtils = _interopRequireDefault(require("./selfUtils"));
@@ -29,6 +30,8 @@ var _controlsUtils = _interopRequireDefault(require("./controlsUtils"));
29
30
  var _embeddedAppsUtils = _interopRequireDefault(require("./embeddedAppsUtils"));
30
31
  var _mediaSharesUtils = _interopRequireDefault(require("./mediaSharesUtils"));
31
32
  var _parser = _interopRequireDefault(require("./parser"));
33
+ var _metrics = _interopRequireDefault(require("../metrics"));
34
+ var _constants2 = _interopRequireDefault(require("../metrics/constants"));
32
35
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
33
36
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
34
37
  /**
@@ -40,6 +43,13 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
40
43
  var LocusInfo = /*#__PURE__*/function (_EventsScope) {
41
44
  (0, _inherits2.default)(LocusInfo, _EventsScope);
42
45
  var _super = _createSuper(LocusInfo);
46
+ /**
47
+ * Constructor
48
+ * @param {function} updateMeeting callback to update the meeting object from an object
49
+ * @param {object} webex
50
+ * @param {string} meetingId
51
+ * @returns {undefined}
52
+ */
43
53
  function LocusInfo(updateMeeting, webex, meetingId) {
44
54
  var _this;
45
55
  (0, _classCallCheck2.default)(this, LocusInfo);
@@ -68,10 +78,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
68
78
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fullState", void 0);
69
79
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "host", void 0);
70
80
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "info", void 0);
81
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roles", void 0);
71
82
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaShares", void 0);
72
83
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "replace", void 0);
73
84
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "url", void 0);
74
85
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "services", void 0);
86
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mainSessionLocusCache", void 0);
75
87
  _this.parsedLocus = {
76
88
  states: []
77
89
  };
@@ -85,38 +97,95 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
85
97
  }
86
98
 
87
99
  /**
88
- * Apply locus delta data to meeting
89
- * @param {string} action Locus delta action
90
- * @param {Locus} locus
100
+ * Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.
101
+ *
91
102
  * @param {Meeting} meeting
92
103
  * @returns {undefined}
93
104
  */
94
105
  (0, _createClass2.default)(LocusInfo, [{
106
+ key: "doLocusSync",
107
+ value: function doLocusSync(meeting) {
108
+ var _this2 = this;
109
+ var isDelta;
110
+ var url;
111
+ if (this.locusParser.workingCopy.syncUrl) {
112
+ url = this.locusParser.workingCopy.syncUrl;
113
+ isDelta = true;
114
+ } else {
115
+ url = meeting.locusUrl;
116
+ isDelta = false;
117
+ }
118
+ _loggerProxy.default.logger.info("Locus-info:index#doLocusSync --> doing Locus sync (getting ".concat(isDelta ? 'delta' : 'full', " DTO)"));
119
+
120
+ // return value ignored on purpose
121
+ meeting.meetingRequest.getLocusDTO({
122
+ url: url
123
+ }).catch(function (e) {
124
+ if (isDelta) {
125
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync');
126
+ _metrics.default.sendBehavioralMetric(_constants2.default.LOCUS_DELTA_SYNC_FAILED, {
127
+ correlationId: meeting.correlationId,
128
+ url: url,
129
+ reason: e.message,
130
+ errorName: e.name,
131
+ stack: e.stack,
132
+ code: e.code
133
+ });
134
+ isDelta = false;
135
+ return meeting.meetingRequest.getLocusDTO({
136
+ url: meeting.locusUrl
137
+ }).catch(function (err) {
138
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting');
139
+ _this2.webex.meetings.destroy(meeting, _constants.MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
140
+ throw err;
141
+ });
142
+ }
143
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting');
144
+ _this2.webex.meetings.destroy(meeting, _constants.MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
145
+ throw e;
146
+ }).then(function (res) {
147
+ if (isDelta) {
148
+ if (!(0, _isEmpty2.default)(res.body)) {
149
+ meeting.locusInfo.handleLocusDelta(res.body, meeting);
150
+ } else {
151
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO');
152
+ }
153
+ } else {
154
+ meeting.locusInfo.onFullLocus(res.body);
155
+ }
156
+ // Notify parser to resume processing delta events.
157
+ // Any deltas in the queue that have now been superseded by this sync will simply be ignored
158
+ _this2.locusParser.resume();
159
+ });
160
+ }
161
+
162
+ /**
163
+ * Apply locus delta data to meeting
164
+ * @param {string} action Locus delta action
165
+ * @param {Locus} locus
166
+ * @param {Meeting} meeting
167
+ * @returns {undefined}
168
+ */
169
+ }, {
95
170
  key: "applyLocusDeltaData",
96
171
  value: function applyLocusDeltaData(action, locus, meeting) {
97
- var _this2 = this;
98
172
  var _LocusDeltaParser$loc = _parser.default.loci,
99
173
  DESYNC = _LocusDeltaParser$loc.DESYNC,
100
174
  USE_CURRENT = _LocusDeltaParser$loc.USE_CURRENT,
101
- USE_INCOMING = _LocusDeltaParser$loc.USE_INCOMING;
175
+ USE_INCOMING = _LocusDeltaParser$loc.USE_INCOMING,
176
+ WAIT = _LocusDeltaParser$loc.WAIT,
177
+ LOCUS_URL_CHANGED = _LocusDeltaParser$loc.LOCUS_URL_CHANGED;
102
178
  switch (action) {
103
179
  case USE_INCOMING:
104
180
  meeting.locusInfo.onDeltaLocus(locus);
105
181
  break;
106
182
  case USE_CURRENT:
107
- meeting.locusDesync = false;
108
- meeting.needToGetFullLocus = false;
183
+ case WAIT:
184
+ // do nothing
109
185
  break;
110
186
  case DESYNC:
111
- meeting.meetingRequest.getFullLocus({
112
- desync: true,
113
- locusUrl: meeting.locusUrl
114
- }).then(function (res) {
115
- meeting.locusInfo.onFullLocus(res.body);
116
- // Notify parser to resume processing delta events
117
- // now that we have full locus from DESYNC.
118
- _this2.locusParser.resume();
119
- });
187
+ case LOCUS_URL_CHANGED:
188
+ this.doLocusSync(meeting);
120
189
  break;
121
190
  default:
122
191
  _loggerProxy.default.logger.info("Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ".concat(action));
@@ -186,13 +255,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
186
255
  * @member LocusInfo
187
256
  */
188
257
  this.deltaParticipants = [];
189
-
258
+ this.updateLocusCache(locus);
190
259
  // above section only updates the locusInfo object
191
260
  // The below section makes sure it updates the locusInfo as well as updates the meeting object
192
261
  this.updateParticipants(locus.participants);
193
262
  // For 1:1 space meeting the conversation Url does not exist in locus.conversation
194
263
  this.updateConversationUrl(locus.conversationUrl, locus.info);
195
- this.updateControls(locus.controls);
264
+ this.updateControls(locus.controls, locus.self);
196
265
  this.updateLocusUrl(locus.url);
197
266
  this.updateFullState(locus.fullState);
198
267
  this.updateMeetingInfo(locus.info);
@@ -212,6 +281,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
212
281
  }, {
213
282
  key: "initialSetup",
214
283
  value: function initialSetup(locus) {
284
+ this.updateLocusCache(locus);
215
285
  this.onFullLocus(locus);
216
286
 
217
287
  // Change it to true after it receives it first locus object
@@ -229,6 +299,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
229
299
  value: function parse(meeting, data) {
230
300
  // eslint-disable-next-line @typescript-eslint/no-shadow
231
301
  var eventType = data.eventType;
302
+ var locus = this.getTheLocusToUpdate(data.locus);
232
303
  _loggerProxy.default.logger.info("Locus-info:index#parse --> received locus data: ".concat(eventType));
233
304
  switch (eventType) {
234
305
  case _constants.LOCUSEVENT.PARTICIPANT_JOIN:
@@ -245,15 +316,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
245
316
  case _constants.LOCUSEVENT.PARTICIPANT_DECLINED:
246
317
  case _constants.LOCUSEVENT.FLOOR_GRANTED:
247
318
  case _constants.LOCUSEVENT.FLOOR_RELEASED:
248
- this.onFullLocus(data.locus, eventType);
319
+ this.onFullLocus(locus, eventType);
249
320
  break;
250
321
  case _constants.LOCUSEVENT.DIFFERENCE:
251
- this.handleLocusDelta(data.locus, meeting);
322
+ this.handleLocusDelta(locus, meeting);
252
323
  break;
253
324
  default:
254
325
  // Why will there be a event with no eventType ????
255
326
  // we may not need this, we can get full locus
256
- this.handleLocusDelta(data.locus, meeting);
327
+ this.handleLocusDelta(locus, meeting);
257
328
  }
258
329
  }
259
330
 
@@ -277,18 +348,22 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
277
348
  * @returns {object} null
278
349
  * @memberof LocusInfo
279
350
  */
280
- // eslint-disable-next-line @typescript-eslint/no-shadow
281
351
  }, {
282
352
  key: "onFullLocus",
283
353
  value: function onFullLocus(locus, eventType) {
284
354
  if (!locus) {
285
355
  _loggerProxy.default.logger.error('Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.');
286
356
  }
357
+ if (!this.locusParser.isNewFullLocus(locus)) {
358
+ _loggerProxy.default.logger.info("Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=".concat(eventType));
359
+ return;
360
+ }
287
361
  this.updateParticipantDeltas(locus.participants);
288
362
  this.scheduledMeeting = locus.meeting || null;
289
363
  this.participants = locus.participants;
364
+ var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
290
365
  this.updateLocusInfo(locus);
291
- this.updateParticipants(locus.participants);
366
+ this.updateParticipants(locus.participants, isReplaceMembers);
292
367
  this.isMeetingActive();
293
368
  this.handleOneOnOneEvent(eventType);
294
369
  this.updateEmbeddedApps(locus.embeddedApps);
@@ -340,8 +415,9 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
340
415
  }, {
341
416
  key: "onDeltaLocus",
342
417
  value: function onDeltaLocus(locus) {
418
+ var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
343
419
  this.updateLocusInfo(locus);
344
- this.updateParticipants(locus.participants);
420
+ this.updateParticipants(locus.participants, isReplaceMembers);
345
421
  this.isMeetingActive();
346
422
  }
347
423
 
@@ -360,7 +436,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
360
436
  // as it gets interpreted as if we have left the call
361
437
  return;
362
438
  }
363
- this.updateControls(locus.controls);
439
+ this.updateControls(locus.controls, locus.self);
364
440
  this.updateConversationUrl(locus.conversationUrl, locus.info);
365
441
  this.updateCreated(locus.created);
366
442
  this.updateFullState(locus.fullState);
@@ -426,9 +502,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
426
502
  if (this.fullState && this.fullState.state === _constants.LOCUS.STATE.INACTIVE) {
427
503
  // TODO: update the meeting state
428
504
  _loggerProxy.default.logger.warn('Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.');
429
- _metrics.default.postEvent({
430
- event: _config.eventType.REMOTE_ENDED,
431
- meetingId: this.meetingId
505
+
506
+ // @ts-ignore
507
+ this.webex.internal.newMetrics.submitClientEvent({
508
+ name: 'client.call.remote-ended',
509
+ options: {
510
+ meetingId: this.meetingId
511
+ }
432
512
  });
433
513
  this.emitScoped({
434
514
  file: 'locus-info',
@@ -438,9 +518,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
438
518
  shouldLeave: false
439
519
  });
440
520
  } else if (partner.state === _constants.MEETING_STATE.STATES.LEFT && this.parsedLocus.self && (this.parsedLocus.self.state === _constants.MEETING_STATE.STATES.DECLINED || this.parsedLocus.self.state === _constants.MEETING_STATE.STATES.NOTIFIED || this.parsedLocus.self.state === _constants.MEETING_STATE.STATES.JOINED)) {
441
- _metrics.default.postEvent({
442
- event: _config.eventType.REMOTE_ENDED,
443
- meetingId: this.meetingId
521
+ // @ts-ignore
522
+ this.webex.internal.newMetrics.submitClientEvent({
523
+ name: 'client.call.remote-ended',
524
+ options: {
525
+ meetingId: this.meetingId
526
+ }
444
527
  });
445
528
  this.emitScoped({
446
529
  file: 'locus-info',
@@ -451,9 +534,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
451
534
  });
452
535
  } else if (this.parsedLocus.self && this.parsedLocus.self.state === _constants.MEETING_STATE.STATES.LEFT && (partner.state === _constants.MEETING_STATE.STATES.LEFT || partner.state === _constants.MEETING_STATE.STATES.DECLINED || partner.state === _constants.MEETING_STATE.STATES.NOTIFIED || partner.state === _constants.MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media
453
536
  ) {
454
- _metrics.default.postEvent({
455
- event: _config.eventType.REMOTE_ENDED,
456
- meetingId: this.meetingId
537
+ // @ts-ignore
538
+ this.webex.internal.newMetrics.submitClientEvent({
539
+ name: 'client.call.remote-ended',
540
+ options: {
541
+ meetingId: this.meetingId
542
+ }
457
543
  });
458
544
  this.emitScoped({
459
545
  file: 'locus-info',
@@ -468,9 +554,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
468
554
  // @ts-ignore
469
555
  this.fullState.state === _constants.LOCUS.STATE.TERMINATING)) {
470
556
  _loggerProxy.default.logger.warn('Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating');
471
- _metrics.default.postEvent({
472
- event: _config.eventType.REMOTE_ENDED,
473
- meetingId: this.meetingId
557
+
558
+ // @ts-ignore
559
+ this.webex.internal.newMetrics.submitClientEvent({
560
+ name: 'client.call.remote-ended',
561
+ options: {
562
+ meetingId: this.meetingId
563
+ }
474
564
  });
475
565
  this.emitScoped({
476
566
  file: 'locus-info',
@@ -481,9 +571,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
481
571
  });
482
572
  } else if (this.fullState && this.fullState.removed) {
483
573
  // user has been dropped from a meeting
484
- _metrics.default.postEvent({
485
- event: _config.eventType.REMOTE_ENDED,
486
- meetingId: this.meetingId
574
+
575
+ // @ts-ignore
576
+ this.webex.internal.newMetrics.submitClientEvent({
577
+ name: 'client.call.remote-ended',
578
+ options: {
579
+ meetingId: this.meetingId
580
+ }
487
581
  });
488
582
  this.emitScoped({
489
583
  file: 'locus-info',
@@ -606,15 +700,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
606
700
  }
607
701
 
608
702
  /**
609
- *
703
+ * update meeting's members
610
704
  * @param {Object} participants new participants object
611
- * @param {boolen} deltaParticpantFlag delta event
705
+ * @param {Boolean} isReplace is replace the whole members
612
706
  * @returns {Array} updatedParticipants
613
707
  * @memberof LocusInfo
614
708
  */
615
709
  }, {
616
710
  key: "updateParticipants",
617
- value: function updateParticipants(participants) {
711
+ value: function updateParticipants(participants, isReplace) {
618
712
  var _this$parsedLocus$con;
619
713
  this.emitScoped({
620
714
  file: 'locus-info',
@@ -624,18 +718,20 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
624
718
  recordingId: this.parsedLocus.controls && ((_this$parsedLocus$con = this.parsedLocus.controls.record) === null || _this$parsedLocus$con === void 0 ? void 0 : _this$parsedLocus$con.modifiedBy),
625
719
  selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
626
720
  selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
627
- hostId: this.parsedLocus.host && this.parsedLocus.host.hostId
721
+ hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
722
+ isReplace: isReplace
628
723
  });
629
724
  }
630
725
 
631
726
  /**
632
727
  * @param {Object} controls
728
+ * @param {Object} self
633
729
  * @returns {undefined}
634
730
  * @memberof LocusInfo
635
731
  */
636
732
  }, {
637
733
  key: "updateControls",
638
- value: function updateControls(controls) {
734
+ value: function updateControls(controls, self) {
639
735
  if (controls && !(0, _isEqual2.default)(this.controls, controls)) {
640
736
  this.parsedLocus.controls = _controlsUtils.default.parse(controls);
641
737
  var _ControlsUtils$getCon = _controlsUtils.default.getControls(this.controls, controls),
@@ -646,7 +742,73 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
646
742
  hasTranscribeChanged = _ControlsUtils$getCon2.hasTranscribeChanged,
647
743
  hasEntryExitToneChanged = _ControlsUtils$getCon2.hasEntryExitToneChanged,
648
744
  hasBreakoutChanged = _ControlsUtils$getCon2.hasBreakoutChanged,
745
+ hasVideoEnabledChanged = _ControlsUtils$getCon2.hasVideoEnabledChanged,
746
+ hasMuteOnEntryChanged = _ControlsUtils$getCon2.hasMuteOnEntryChanged,
747
+ hasShareControlChanged = _ControlsUtils$getCon2.hasShareControlChanged,
748
+ hasDisallowUnmuteChanged = _ControlsUtils$getCon2.hasDisallowUnmuteChanged,
749
+ hasReactionsChanged = _ControlsUtils$getCon2.hasReactionsChanged,
750
+ hasReactionDisplayNamesChanged = _ControlsUtils$getCon2.hasReactionDisplayNamesChanged,
751
+ hasViewTheParticipantListChanged = _ControlsUtils$getCon2.hasViewTheParticipantListChanged,
752
+ hasRaiseHandChanged = _ControlsUtils$getCon2.hasRaiseHandChanged,
753
+ hasVideoChanged = _ControlsUtils$getCon2.hasVideoChanged,
754
+ hasInterpretationChanged = _ControlsUtils$getCon2.hasInterpretationChanged,
649
755
  current = _ControlsUtils$getCon.current;
756
+ if (hasMuteOnEntryChanged) {
757
+ this.emitScoped({
758
+ file: 'locus-info',
759
+ function: 'updateControls'
760
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, {
761
+ state: current.muteOnEntry
762
+ });
763
+ }
764
+ if (hasShareControlChanged) {
765
+ this.emitScoped({
766
+ file: 'locus-info',
767
+ function: 'updateControls'
768
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, {
769
+ state: current.shareControl
770
+ });
771
+ }
772
+ if (hasDisallowUnmuteChanged) {
773
+ this.emitScoped({
774
+ file: 'locus-info',
775
+ function: 'updateControls'
776
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, {
777
+ state: current.disallowUnmute
778
+ });
779
+ }
780
+ if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
781
+ this.emitScoped({
782
+ file: 'locus-info',
783
+ function: 'updateControls'
784
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, {
785
+ state: current.reactions
786
+ });
787
+ }
788
+ if (hasViewTheParticipantListChanged) {
789
+ this.emitScoped({
790
+ file: 'locus-info',
791
+ function: 'updateControls'
792
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, {
793
+ state: current.viewTheParticipantList
794
+ });
795
+ }
796
+ if (hasRaiseHandChanged) {
797
+ this.emitScoped({
798
+ file: 'locus-info',
799
+ function: 'updateControls'
800
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, {
801
+ state: current.raiseHand
802
+ });
803
+ }
804
+ if (hasVideoChanged) {
805
+ this.emitScoped({
806
+ file: 'locus-info',
807
+ function: 'updateControls'
808
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, {
809
+ state: current.video
810
+ });
811
+ }
650
812
  if (hasRecordingChanged || hasRecordingPausedChanged) {
651
813
  var state = null;
652
814
  if (hasRecordingPausedChanged) {
@@ -691,6 +853,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
691
853
  }
692
854
  if (hasBreakoutChanged) {
693
855
  var breakout = current.breakout;
856
+ breakout.breakoutMoveId = _selfUtils.default.getReplacedBreakoutMoveId(self, this.webex.internal.device.url);
694
857
  this.emitScoped({
695
858
  file: 'locus-info',
696
859
  function: 'updateControls'
@@ -698,16 +861,41 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
698
861
  breakout: breakout
699
862
  });
700
863
  }
864
+ if (hasInterpretationChanged) {
865
+ var interpretation = current.interpretation;
866
+ this.emitScoped({
867
+ file: 'locus-info',
868
+ function: 'updateControls'
869
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, {
870
+ interpretation: interpretation
871
+ });
872
+ }
701
873
  if (hasEntryExitToneChanged) {
702
874
  var entryExitTone = current.entryExitTone;
875
+ this.updateMeeting({
876
+ entryExitTone: entryExitTone
877
+ });
703
878
  this.emitScoped({
704
879
  file: 'locus-info',
705
880
  function: 'updateControls'
706
881
  }, _constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, {
707
882
  entryExitTone: entryExitTone
708
883
  });
884
+ }
885
+
886
+ // videoEnabled is handled differently than other controls,
887
+ // to fit with audio mute status logic
888
+ if (hasVideoEnabledChanged) {
889
+ var videoEnabled = current.videoEnabled;
709
890
  this.updateMeeting({
710
- entryExitTone: entryExitTone
891
+ unmuteVideoAllowed: videoEnabled
892
+ });
893
+ this.emitScoped({
894
+ file: 'locus-info',
895
+ function: 'updateControls'
896
+ }, _constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, {
897
+ // muted: not part of locus.controls
898
+ unmuteAllowed: videoEnabled
711
899
  });
712
900
  }
713
901
  this.controls = controls;
@@ -840,18 +1028,11 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
840
1028
  }, {
841
1029
  key: "updateMeetingInfo",
842
1030
  value: function updateMeetingInfo(info, self) {
843
- if (info && !(0, _isEqual2.default)(this.info, info)) {
844
- var _this$parsedLocus$sel;
845
- 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) || [];
1031
+ var _this$parsedLocus$sel;
1032
+ 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) || [];
1033
+ if (info && !(0, _isEqual2.default)(this.info, info) || roles.length && !(0, _isEqual2.default)(this.roles, roles) && info) {
846
1034
  var isJoined = _selfUtils.default.isJoined(self || this.parsedLocus.self);
847
1035
  var parsedInfo = _infoUtils.default.getInfos(this.parsedLocus.info, info, roles, isJoined);
848
- this.emitScoped({
849
- file: 'locus-info',
850
- function: 'updateMeetingInfo'
851
- }, _constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, {
852
- info: parsedInfo.current,
853
- self: self
854
- });
855
1036
  if (parsedInfo.updates.isLocked) {
856
1037
  this.emitScoped({
857
1038
  file: 'locus-info',
@@ -868,7 +1049,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
868
1049
  this.parsedLocus.info = parsedInfo.current;
869
1050
  // Parses the info and adds necessary values
870
1051
  this.updateMeeting(parsedInfo.current);
1052
+ this.emitScoped({
1053
+ file: 'locus-info',
1054
+ function: 'updateMeetingInfo'
1055
+ }, _constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED);
871
1056
  }
1057
+ this.roles = roles;
872
1058
  }
873
1059
 
874
1060
  /**
@@ -994,6 +1180,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
994
1180
  breakoutSessions: parsedSelves.current.breakoutSessions
995
1181
  });
996
1182
  }
1183
+ if (parsedSelves.updates.interpretationChanged) {
1184
+ this.emitScoped({
1185
+ file: 'locus-info',
1186
+ function: 'updateSelf'
1187
+ }, _constants.LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED, {
1188
+ interpretation: parsedSelves.current.interpretation,
1189
+ selfParticipantId: parsedSelves.current.selfId
1190
+ });
1191
+ }
997
1192
  if (parsedSelves.updates.isMediaInactiveOrReleased) {
998
1193
  this.emitScoped({
999
1194
  file: 'locus-info',
@@ -1008,6 +1203,26 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1008
1203
  function: 'updateSelf'
1009
1204
  }, _constants.LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED, self);
1010
1205
  }
1206
+ if (parsedSelves.updates.isRolesChanged) {
1207
+ var _parsedSelves$previou, _parsedSelves$current;
1208
+ this.emitScoped({
1209
+ file: 'locus-info',
1210
+ function: 'updateSelf'
1211
+ }, _constants.LOCUSINFO.EVENTS.SELF_ROLES_CHANGED, {
1212
+ oldRoles: (_parsedSelves$previou = parsedSelves.previous) === null || _parsedSelves$previou === void 0 ? void 0 : _parsedSelves$previou.roles,
1213
+ newRoles: (_parsedSelves$current = parsedSelves.current) === null || _parsedSelves$current === void 0 ? void 0 : _parsedSelves$current.roles
1214
+ });
1215
+ }
1216
+ if (parsedSelves.updates.isVideoMutedByOthersChanged) {
1217
+ this.emitScoped({
1218
+ file: 'locus-info',
1219
+ function: 'updateSelf'
1220
+ }, _constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, {
1221
+ muted: parsedSelves.current.remoteVideoMuted
1222
+ // unmuteAllowed: not part of .self
1223
+ });
1224
+ }
1225
+
1011
1226
  if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
1012
1227
  this.emitScoped({
1013
1228
  file: 'locus-info',
@@ -1053,14 +1268,14 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1053
1268
  _constants.LOCUSINFO.EVENTS.MEDIA_INACTIVITY, _selfUtils.default.getMediaStatus(self.mediaSessions));
1054
1269
  }
1055
1270
  if (parsedSelves.updates.audioStateChange || parsedSelves.updates.videoStateChange || parsedSelves.updates.shareStateChange) {
1056
- var _parsedSelves$current, _parsedSelves$current2, _parsedSelves$current3;
1271
+ var _parsedSelves$current2, _parsedSelves$current3, _parsedSelves$current4;
1057
1272
  this.emitScoped({
1058
1273
  file: 'locus-info',
1059
1274
  function: 'updateSelf'
1060
1275
  }, _constants.LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE, {
1061
- audioStatus: (_parsedSelves$current = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current === void 0 ? void 0 : _parsedSelves$current.audio,
1062
- videoStatus: (_parsedSelves$current2 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current2 === void 0 ? void 0 : _parsedSelves$current2.video,
1063
- shareStatus: (_parsedSelves$current3 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current3 === void 0 ? void 0 : _parsedSelves$current3.share
1276
+ audioStatus: (_parsedSelves$current2 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current2 === void 0 ? void 0 : _parsedSelves$current2.audio,
1277
+ videoStatus: (_parsedSelves$current3 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current3 === void 0 ? void 0 : _parsedSelves$current3.video,
1278
+ shareStatus: (_parsedSelves$current4 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current4 === void 0 ? void 0 : _parsedSelves$current4.share
1064
1279
  });
1065
1280
  }
1066
1281
  if (parsedSelves.updates.isUserObserving) {
@@ -1185,6 +1400,112 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1185
1400
  this.identities = identities;
1186
1401
  }
1187
1402
  }
1403
+
1404
+ /**
1405
+ * check the locus is main session's one or not, if is main session's, update main session cache
1406
+ * @param {Object} locus
1407
+ * @returns {undefined}
1408
+ * @memberof LocusInfo
1409
+ */
1410
+ }, {
1411
+ key: "updateLocusCache",
1412
+ value: function updateLocusCache(locus) {
1413
+ var isMainSessionDTO = _controlsUtils.default.isMainSessionDTO(locus);
1414
+ if (isMainSessionDTO) {
1415
+ this.updateMainSessionLocusCache(locus);
1416
+ }
1417
+ }
1418
+
1419
+ /**
1420
+ * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
1421
+ * if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
1422
+ * @param {Object} newLocus
1423
+ * @returns {Object}
1424
+ * @memberof LocusInfo
1425
+ */
1426
+ }, {
1427
+ key: "getTheLocusToUpdate",
1428
+ value: function getTheLocusToUpdate(newLocus) {
1429
+ var switchStatus = _controlsUtils.default.getSessionSwitchStatus(this.controls, newLocus === null || newLocus === void 0 ? void 0 : newLocus.controls);
1430
+ if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
1431
+ return (0, _cloneDeep2.default)(this.mainSessionLocusCache);
1432
+ }
1433
+ if (switchStatus.isJoinToBreakout) {
1434
+ this.emitScoped({
1435
+ file: 'locus-info',
1436
+ function: 'updateControls'
1437
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN, {
1438
+ mainLocusUrl: this.url
1439
+ });
1440
+ }
1441
+ return newLocus;
1442
+ }
1443
+
1444
+ /**
1445
+ * merge participants by participant id
1446
+ * @param {Array} participants
1447
+ * @param {Array} sourceParticipants
1448
+ * @returns {Array} merged participants
1449
+ * @memberof LocusInfo
1450
+ */
1451
+ // eslint-disable-next-line class-methods-use-this
1452
+ }, {
1453
+ key: "mergeParticipants",
1454
+ value: function mergeParticipants(participants, sourceParticipants) {
1455
+ if (!sourceParticipants || !sourceParticipants.length) return participants;
1456
+ if (!participants || !participants.length) {
1457
+ return sourceParticipants;
1458
+ }
1459
+ sourceParticipants.forEach(function (participant) {
1460
+ var existIndex = participants.findIndex(function (p) {
1461
+ return p.id === participant.id;
1462
+ });
1463
+ if (existIndex > -1) {
1464
+ participants.splice(existIndex, 1, participant);
1465
+ } else {
1466
+ participants.push(participant);
1467
+ }
1468
+ });
1469
+ return participants;
1470
+ }
1471
+
1472
+ /**
1473
+ * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
1474
+ * @param {Object} mainLocus
1475
+ * @returns {undefined}
1476
+ * @memberof LocusInfo
1477
+ */
1478
+ }, {
1479
+ key: "updateMainSessionLocusCache",
1480
+ value: function updateMainSessionLocusCache(mainLocus) {
1481
+ var _this5 = this;
1482
+ if (!mainLocus) {
1483
+ return;
1484
+ }
1485
+ var locusClone = (0, _cloneDeep2.default)(mainLocus);
1486
+ if (this.mainSessionLocusCache) {
1487
+ // shallow merge and do special merge for participants
1488
+ (0, _assignWith2.default)(this.mainSessionLocusCache, locusClone, function (objValue, srcValue, key) {
1489
+ if (key === 'participants') {
1490
+ return _this5.mergeParticipants(objValue, srcValue);
1491
+ }
1492
+ return srcValue || objValue;
1493
+ });
1494
+ } else {
1495
+ this.mainSessionLocusCache = locusClone;
1496
+ }
1497
+ }
1498
+
1499
+ /**
1500
+ * clear main session cache
1501
+ * @returns {undefined}
1502
+ * @memberof LocusInfo
1503
+ */
1504
+ }, {
1505
+ key: "clearMainSessionLocusCache",
1506
+ value: function clearMainSessionLocusCache() {
1507
+ this.mainSessionLocusCache = null;
1508
+ }
1188
1509
  }]);
1189
1510
  return LocusInfo;
1190
1511
  }(_eventsScope.default);