@webex/plugin-meetings 2.60.0 → 2.60.1-next.2

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 (535) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.d.ts +42 -0
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.d.ts +31 -0
  6. package/dist/annotation/constants.js +41 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.d.ts +117 -0
  9. package/dist/annotation/index.js +357 -0
  10. package/dist/annotation/index.js.map +1 -0
  11. package/dist/breakouts/breakout.d.ts +8 -0
  12. package/dist/breakouts/breakout.js +215 -0
  13. package/dist/breakouts/breakout.js.map +1 -0
  14. package/dist/breakouts/collection.d.ts +5 -0
  15. package/dist/breakouts/collection.js +22 -0
  16. package/dist/breakouts/collection.js.map +1 -0
  17. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  18. package/dist/breakouts/edit-lock-error.js +51 -0
  19. package/dist/breakouts/edit-lock-error.js.map +1 -0
  20. package/dist/breakouts/events.d.ts +8 -0
  21. package/dist/breakouts/events.js +44 -0
  22. package/dist/breakouts/events.js.map +1 -0
  23. package/dist/breakouts/index.d.ts +5 -0
  24. package/dist/breakouts/index.js +1047 -0
  25. package/dist/breakouts/index.js.map +1 -0
  26. package/dist/breakouts/request.d.ts +22 -0
  27. package/dist/breakouts/request.js +77 -0
  28. package/dist/breakouts/request.js.map +1 -0
  29. package/dist/breakouts/utils.d.ts +15 -0
  30. package/dist/breakouts/utils.js +64 -0
  31. package/dist/breakouts/utils.js.map +1 -0
  32. package/dist/common/browser-detection.js +2 -3
  33. package/dist/common/browser-detection.js.map +1 -1
  34. package/dist/common/collection.js +3 -4
  35. package/dist/common/collection.js.map +1 -1
  36. package/dist/common/config.js +1 -2
  37. package/dist/common/config.js.map +1 -1
  38. package/dist/common/errors/captcha-error.js +1 -2
  39. package/dist/common/errors/captcha-error.js.map +1 -1
  40. package/dist/common/errors/intent-to-join.js +1 -2
  41. package/dist/common/errors/intent-to-join.js.map +1 -1
  42. package/dist/common/errors/join-meeting.js +1 -2
  43. package/dist/common/errors/join-meeting.js.map +1 -1
  44. package/dist/common/errors/media.js +1 -2
  45. package/dist/common/errors/media.js.map +1 -1
  46. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  47. package/dist/common/errors/no-meeting-info.js +50 -0
  48. package/dist/common/errors/no-meeting-info.js.map +1 -0
  49. package/dist/common/errors/parameter.js +3 -4
  50. package/dist/common/errors/parameter.js.map +1 -1
  51. package/dist/common/errors/password-error.js +1 -2
  52. package/dist/common/errors/password-error.js.map +1 -1
  53. package/dist/common/errors/permission.js +1 -2
  54. package/dist/common/errors/permission.js.map +1 -1
  55. package/dist/common/errors/{reclaim-host-role-error.js → reclaim-host-role-errors.js} +7 -11
  56. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  57. package/dist/common/errors/reconnection-in-progress.js +1 -2
  58. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  59. package/dist/common/errors/reconnection.js +1 -2
  60. package/dist/common/errors/reconnection.js.map +1 -1
  61. package/dist/common/errors/stats.js +1 -2
  62. package/dist/common/errors/stats.js.map +1 -1
  63. package/dist/common/errors/webex-errors.d.ts +20 -8
  64. package/dist/common/errors/webex-errors.js +48 -28
  65. package/dist/common/errors/webex-errors.js.map +1 -1
  66. package/dist/common/errors/webex-meetings-error.js +1 -2
  67. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  68. package/dist/common/events/events-scope.js +1 -2
  69. package/dist/common/events/events-scope.js.map +1 -1
  70. package/dist/common/events/events.js +1 -2
  71. package/dist/common/events/events.js.map +1 -1
  72. package/dist/common/events/trigger-proxy.js +1 -2
  73. package/dist/common/events/trigger-proxy.js.map +1 -1
  74. package/dist/common/events/util.js +1 -2
  75. package/dist/common/events/util.js.map +1 -1
  76. package/dist/common/logs/logger-config.js +1 -2
  77. package/dist/common/logs/logger-config.js.map +1 -1
  78. package/dist/common/logs/logger-proxy.js +2 -3
  79. package/dist/common/logs/logger-proxy.js.map +1 -1
  80. package/dist/common/logs/request.d.ts +3 -1
  81. package/dist/common/logs/request.js +8 -5
  82. package/dist/common/logs/request.js.map +1 -1
  83. package/dist/common/queue.d.ts +9 -7
  84. package/dist/common/queue.js +22 -9
  85. package/dist/common/queue.js.map +1 -1
  86. package/dist/config.d.ts +6 -7
  87. package/dist/config.js +8 -10
  88. package/dist/config.js.map +1 -1
  89. package/dist/constants.d.ts +217 -97
  90. package/dist/constants.js +416 -441
  91. package/dist/constants.js.map +1 -1
  92. package/dist/controls-options-manager/constants.js +3 -6
  93. package/dist/controls-options-manager/constants.js.map +1 -1
  94. package/dist/controls-options-manager/enums.d.ts +11 -1
  95. package/dist/controls-options-manager/enums.js +15 -6
  96. package/dist/controls-options-manager/enums.js.map +1 -1
  97. package/dist/controls-options-manager/index.d.ts +17 -1
  98. package/dist/controls-options-manager/index.js +127 -38
  99. package/dist/controls-options-manager/index.js.map +1 -1
  100. package/dist/controls-options-manager/types.d.ts +43 -0
  101. package/dist/controls-options-manager/types.js +7 -0
  102. package/dist/controls-options-manager/types.js.map +1 -0
  103. package/dist/controls-options-manager/util.d.ts +1 -7
  104. package/dist/controls-options-manager/util.js +309 -19
  105. package/dist/controls-options-manager/util.js.map +1 -1
  106. package/dist/index.d.ts +6 -3
  107. package/dist/index.js +121 -5
  108. package/dist/index.js.map +1 -1
  109. package/dist/interceptors/index.d.ts +2 -0
  110. package/dist/interceptors/index.js +15 -0
  111. package/dist/interceptors/index.js.map +1 -0
  112. package/dist/interceptors/locusRetry.d.ts +27 -0
  113. package/dist/interceptors/locusRetry.js +94 -0
  114. package/dist/interceptors/locusRetry.js.map +1 -0
  115. package/dist/interpretation/collection.d.ts +5 -0
  116. package/dist/interpretation/collection.js +22 -0
  117. package/dist/interpretation/collection.js.map +1 -0
  118. package/dist/interpretation/index.d.ts +5 -0
  119. package/dist/interpretation/index.js +365 -0
  120. package/dist/interpretation/index.js.map +1 -0
  121. package/dist/interpretation/siLanguage.d.ts +5 -0
  122. package/dist/interpretation/siLanguage.js +24 -0
  123. package/dist/interpretation/siLanguage.js.map +1 -0
  124. package/dist/locus-info/controlsUtils.js +100 -11
  125. package/dist/locus-info/controlsUtils.js.map +1 -1
  126. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  127. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  128. package/dist/locus-info/fullState.js +1 -2
  129. package/dist/locus-info/fullState.js.map +1 -1
  130. package/dist/locus-info/hostUtils.js +1 -2
  131. package/dist/locus-info/hostUtils.js.map +1 -1
  132. package/dist/locus-info/index.d.ts +57 -4
  133. package/dist/locus-info/index.js +425 -84
  134. package/dist/locus-info/index.js.map +1 -1
  135. package/dist/locus-info/infoUtils.js +13 -5
  136. package/dist/locus-info/infoUtils.js.map +1 -1
  137. package/dist/locus-info/mediaSharesUtils.js +58 -3
  138. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  139. package/dist/locus-info/parser.d.ts +66 -6
  140. package/dist/locus-info/parser.js +253 -80
  141. package/dist/locus-info/parser.js.map +1 -1
  142. package/dist/locus-info/selfUtils.js +97 -13
  143. package/dist/locus-info/selfUtils.js.map +1 -1
  144. package/dist/media/index.d.ts +2 -0
  145. package/dist/media/index.js +107 -319
  146. package/dist/media/index.js.map +1 -1
  147. package/dist/media/properties.d.ts +38 -53
  148. package/dist/media/properties.js +96 -153
  149. package/dist/media/properties.js.map +1 -1
  150. package/dist/media/util.js +1 -22
  151. package/dist/media/util.js.map +1 -1
  152. package/dist/mediaQualityMetrics/config.d.ts +234 -230
  153. package/dist/mediaQualityMetrics/config.js +302 -498
  154. package/dist/mediaQualityMetrics/config.js.map +1 -1
  155. package/dist/meeting/in-meeting-actions.d.ts +88 -0
  156. package/dist/meeting/in-meeting-actions.js +94 -3
  157. package/dist/meeting/in-meeting-actions.js.map +1 -1
  158. package/dist/meeting/index.d.ts +591 -494
  159. package/dist/meeting/index.js +4732 -2990
  160. package/dist/meeting/index.js.map +1 -1
  161. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  162. package/dist/meeting/locusMediaRequest.js +291 -0
  163. package/dist/meeting/locusMediaRequest.js.map +1 -0
  164. package/dist/meeting/muteState.d.ts +93 -25
  165. package/dist/meeting/muteState.js +224 -133
  166. package/dist/meeting/muteState.js.map +1 -1
  167. package/dist/meeting/request.d.ts +82 -47
  168. package/dist/meeting/request.js +297 -199
  169. package/dist/meeting/request.js.map +1 -1
  170. package/dist/meeting/request.type.d.ts +11 -0
  171. package/dist/meeting/request.type.js +7 -0
  172. package/dist/meeting/request.type.js.map +1 -0
  173. package/dist/meeting/state.js +1 -2
  174. package/dist/meeting/state.js.map +1 -1
  175. package/dist/meeting/util.d.ts +102 -1
  176. package/dist/meeting/util.js +605 -435
  177. package/dist/meeting/util.js.map +1 -1
  178. package/dist/meeting-info/collection.js +3 -4
  179. package/dist/meeting-info/collection.js.map +1 -1
  180. package/dist/meeting-info/index.d.ts +13 -1
  181. package/dist/meeting-info/index.js +74 -7
  182. package/dist/meeting-info/index.js.map +1 -1
  183. package/dist/meeting-info/meeting-info-v2.d.ts +31 -1
  184. package/dist/meeting-info/meeting-info-v2.js +200 -63
  185. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  186. package/dist/meeting-info/request.js +1 -2
  187. package/dist/meeting-info/request.js.map +1 -1
  188. package/dist/meeting-info/util.js +2 -3
  189. package/dist/meeting-info/util.js.map +1 -1
  190. package/dist/meeting-info/utilv2.js +39 -41
  191. package/dist/meeting-info/utilv2.js.map +1 -1
  192. package/dist/meetings/collection.d.ts +17 -0
  193. package/dist/meetings/collection.js +42 -4
  194. package/dist/meetings/collection.js.map +1 -1
  195. package/dist/meetings/index.d.ts +93 -21
  196. package/dist/meetings/index.js +490 -127
  197. package/dist/meetings/index.js.map +1 -1
  198. package/dist/meetings/meetings.types.d.ts +4 -0
  199. package/dist/meetings/meetings.types.js +7 -0
  200. package/dist/meetings/meetings.types.js.map +1 -0
  201. package/dist/meetings/request.js +4 -3
  202. package/dist/meetings/request.js.map +1 -1
  203. package/dist/meetings/util.js +107 -6
  204. package/dist/meetings/util.js.map +1 -1
  205. package/dist/member/index.d.ts +13 -1
  206. package/dist/member/index.js +45 -2
  207. package/dist/member/index.js.map +1 -1
  208. package/dist/member/member.types.js +3 -4
  209. package/dist/member/member.types.js.map +1 -1
  210. package/dist/member/types.d.ts +32 -0
  211. package/dist/member/types.js +23 -0
  212. package/dist/member/types.js.map +1 -0
  213. package/dist/member/util.js +120 -29
  214. package/dist/member/util.js.map +1 -1
  215. package/dist/members/collection.d.ts +5 -0
  216. package/dist/members/collection.js +11 -2
  217. package/dist/members/collection.js.map +1 -1
  218. package/dist/members/index.d.ts +56 -11
  219. package/dist/members/index.js +174 -47
  220. package/dist/members/index.js.map +1 -1
  221. package/dist/members/request.d.ts +67 -11
  222. package/dist/members/request.js +102 -54
  223. package/dist/members/request.js.map +1 -1
  224. package/dist/members/types.js +3 -4
  225. package/dist/members/types.js.map +1 -1
  226. package/dist/members/util.d.ts +214 -1
  227. package/dist/members/util.js +327 -284
  228. package/dist/members/util.js.map +1 -1
  229. package/dist/metrics/constants.d.ts +15 -6
  230. package/dist/metrics/constants.js +17 -9
  231. package/dist/metrics/constants.js.map +1 -1
  232. package/dist/metrics/index.d.ts +4 -111
  233. package/dist/metrics/index.js +4 -452
  234. package/dist/metrics/index.js.map +1 -1
  235. package/dist/multistream/mediaRequestManager.d.ts +118 -0
  236. package/dist/multistream/mediaRequestManager.js +344 -0
  237. package/dist/multistream/mediaRequestManager.js.map +1 -0
  238. package/dist/multistream/receiveSlot.d.ts +68 -0
  239. package/dist/multistream/receiveSlot.js +200 -0
  240. package/dist/multistream/receiveSlot.js.map +1 -0
  241. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  242. package/dist/multistream/receiveSlotManager.js +174 -0
  243. package/dist/multistream/receiveSlotManager.js.map +1 -0
  244. package/dist/multistream/remoteMedia.d.ts +72 -0
  245. package/dist/multistream/remoteMedia.js +268 -0
  246. package/dist/multistream/remoteMedia.js.map +1 -0
  247. package/dist/multistream/remoteMediaGroup.d.ts +47 -0
  248. package/dist/multistream/remoteMediaGroup.js +267 -0
  249. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  250. package/dist/multistream/remoteMediaManager.d.ts +285 -0
  251. package/dist/multistream/remoteMediaManager.js +1211 -0
  252. package/dist/multistream/remoteMediaManager.js.map +1 -0
  253. package/dist/multistream/sendSlotManager.d.ts +61 -0
  254. package/dist/multistream/sendSlotManager.js +236 -0
  255. package/dist/multistream/sendSlotManager.js.map +1 -0
  256. package/dist/networkQualityMonitor/index.js +5 -4
  257. package/dist/networkQualityMonitor/index.js.map +1 -1
  258. package/dist/personal-meeting-room/index.js +2 -3
  259. package/dist/personal-meeting-room/index.js.map +1 -1
  260. package/dist/personal-meeting-room/request.js +2 -3
  261. package/dist/personal-meeting-room/request.js.map +1 -1
  262. package/dist/personal-meeting-room/util.js +1 -2
  263. package/dist/personal-meeting-room/util.js.map +1 -1
  264. package/dist/reachability/clusterReachability.d.ts +109 -0
  265. package/dist/reachability/clusterReachability.js +357 -0
  266. package/dist/reachability/clusterReachability.js.map +1 -0
  267. package/dist/reachability/index.d.ts +61 -95
  268. package/dist/reachability/index.js +300 -393
  269. package/dist/reachability/index.js.map +1 -1
  270. package/dist/reachability/request.d.ts +7 -3
  271. package/dist/reachability/request.js +18 -10
  272. package/dist/reachability/request.js.map +1 -1
  273. package/dist/reachability/util.d.ts +8 -0
  274. package/dist/reachability/util.js +29 -0
  275. package/dist/reachability/util.js.map +1 -0
  276. package/dist/reactions/constants.d.ts +3 -0
  277. package/dist/reactions/constants.js +12 -0
  278. package/dist/reactions/constants.js.map +1 -0
  279. package/dist/reactions/reactions.d.ts +2 -2
  280. package/dist/reactions/reactions.js +4 -6
  281. package/dist/reactions/reactions.js.map +1 -1
  282. package/dist/reactions/reactions.type.d.ts +23 -3
  283. package/dist/reactions/reactions.type.js +21 -23
  284. package/dist/reactions/reactions.type.js.map +1 -1
  285. package/dist/reconnection-manager/index.d.ts +32 -8
  286. package/dist/reconnection-manager/index.js +282 -231
  287. package/dist/reconnection-manager/index.js.map +1 -1
  288. package/dist/recording-controller/enums.js +4 -5
  289. package/dist/recording-controller/enums.js.map +1 -1
  290. package/dist/recording-controller/index.d.ts +15 -1
  291. package/dist/recording-controller/index.js +57 -46
  292. package/dist/recording-controller/index.js.map +1 -1
  293. package/dist/recording-controller/util.d.ts +5 -4
  294. package/dist/recording-controller/util.js +10 -10
  295. package/dist/recording-controller/util.js.map +1 -1
  296. package/dist/roap/index.d.ts +9 -47
  297. package/dist/roap/index.js +101 -235
  298. package/dist/roap/index.js.map +1 -1
  299. package/dist/roap/request.d.ts +18 -12
  300. package/dist/roap/request.js +126 -180
  301. package/dist/roap/request.js.map +1 -1
  302. package/dist/roap/turnDiscovery.d.ts +27 -16
  303. package/dist/roap/turnDiscovery.js +115 -105
  304. package/dist/roap/turnDiscovery.js.map +1 -1
  305. package/dist/rtcMetrics/constants.d.ts +4 -0
  306. package/dist/rtcMetrics/constants.js +11 -0
  307. package/dist/rtcMetrics/constants.js.map +1 -0
  308. package/dist/rtcMetrics/index.d.ts +54 -0
  309. package/dist/rtcMetrics/index.js +140 -0
  310. package/dist/rtcMetrics/index.js.map +1 -0
  311. package/dist/statsAnalyzer/global.d.ts +1 -83
  312. package/dist/statsAnalyzer/global.js +2 -85
  313. package/dist/statsAnalyzer/global.js.map +1 -1
  314. package/dist/statsAnalyzer/index.d.ts +50 -30
  315. package/dist/statsAnalyzer/index.js +435 -510
  316. package/dist/statsAnalyzer/index.js.map +1 -1
  317. package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
  318. package/dist/statsAnalyzer/mqaUtil.js +120 -83
  319. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  320. package/dist/transcription/index.js +1 -2
  321. package/dist/transcription/index.js.map +1 -1
  322. package/dist/webinar/collection.d.ts +16 -0
  323. package/dist/webinar/collection.js +43 -0
  324. package/dist/webinar/collection.js.map +1 -0
  325. package/dist/webinar/index.d.ts +5 -0
  326. package/dist/webinar/index.js +68 -0
  327. package/dist/webinar/index.js.map +1 -0
  328. package/package.json +38 -26
  329. package/src/annotation/annotation.types.ts +50 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +328 -0
  332. package/src/breakouts/README.md +220 -0
  333. package/src/breakouts/breakout.ts +188 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +56 -0
  337. package/src/breakouts/index.ts +925 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/errors/no-meeting-info.ts +24 -0
  341. package/src/common/errors/webex-errors.ts +36 -12
  342. package/src/common/logs/logger-proxy.ts +1 -1
  343. package/src/common/logs/request.ts +5 -1
  344. package/src/common/queue.ts +22 -8
  345. package/src/config.ts +6 -7
  346. package/src/constants.ts +244 -97
  347. package/src/controls-options-manager/enums.ts +12 -0
  348. package/src/controls-options-manager/index.ts +116 -21
  349. package/src/controls-options-manager/types.ts +59 -0
  350. package/src/controls-options-manager/util.ts +294 -14
  351. package/src/index.ts +44 -0
  352. package/src/interceptors/index.ts +3 -0
  353. package/src/interceptors/locusRetry.ts +67 -0
  354. package/src/interpretation/README.md +60 -0
  355. package/src/interpretation/collection.ts +19 -0
  356. package/src/interpretation/index.ts +332 -0
  357. package/src/interpretation/siLanguage.ts +18 -0
  358. package/src/locus-info/controlsUtils.ts +110 -0
  359. package/src/locus-info/index.ts +449 -61
  360. package/src/locus-info/infoUtils.ts +14 -2
  361. package/src/locus-info/mediaSharesUtils.ts +64 -0
  362. package/src/locus-info/parser.ts +258 -47
  363. package/src/locus-info/selfUtils.ts +85 -2
  364. package/src/media/index.ts +153 -370
  365. package/src/media/properties.ts +106 -136
  366. package/src/media/util.ts +0 -21
  367. package/src/mediaQualityMetrics/config.ts +244 -377
  368. package/src/meeting/in-meeting-actions.ts +176 -0
  369. package/src/meeting/index.ts +3944 -2489
  370. package/src/meeting/locusMediaRequest.ts +313 -0
  371. package/src/meeting/muteState.ts +224 -138
  372. package/src/meeting/request.ts +207 -127
  373. package/src/meeting/request.type.ts +13 -0
  374. package/src/meeting/util.ts +590 -423
  375. package/src/meeting-info/index.ts +81 -8
  376. package/src/meeting-info/meeting-info-v2.ts +163 -13
  377. package/src/meeting-info/util.ts +1 -1
  378. package/src/meeting-info/utilv2.ts +28 -28
  379. package/src/meetings/collection.ts +33 -0
  380. package/src/meetings/index.ts +487 -126
  381. package/src/meetings/meetings.types.ts +12 -0
  382. package/src/meetings/request.ts +2 -0
  383. package/src/meetings/util.ts +116 -5
  384. package/src/member/index.ts +43 -1
  385. package/src/member/types.ts +38 -0
  386. package/src/member/util.ts +125 -28
  387. package/src/members/collection.ts +8 -0
  388. package/src/members/index.ts +187 -52
  389. package/src/members/request.ts +87 -27
  390. package/src/members/util.ts +332 -291
  391. package/src/metrics/constants.ts +15 -6
  392. package/src/metrics/index.ts +1 -471
  393. package/src/multistream/mediaRequestManager.ts +440 -0
  394. package/src/multistream/receiveSlot.ts +184 -0
  395. package/src/multistream/receiveSlotManager.ts +166 -0
  396. package/src/multistream/remoteMedia.ts +254 -0
  397. package/src/multistream/remoteMediaGroup.ts +284 -0
  398. package/src/multistream/remoteMediaManager.ts +1145 -0
  399. package/src/multistream/sendSlotManager.ts +170 -0
  400. package/src/networkQualityMonitor/index.ts +6 -6
  401. package/src/reachability/clusterReachability.ts +320 -0
  402. package/src/reachability/index.ts +243 -347
  403. package/src/reachability/request.ts +17 -8
  404. package/src/reachability/util.ts +24 -0
  405. package/src/reactions/constants.ts +4 -0
  406. package/src/reactions/reactions.ts +4 -4
  407. package/src/reactions/reactions.type.ts +30 -4
  408. package/src/reconnection-manager/index.ts +168 -156
  409. package/src/recording-controller/index.ts +20 -3
  410. package/src/recording-controller/util.ts +26 -9
  411. package/src/roap/index.ts +98 -241
  412. package/src/roap/request.ts +74 -148
  413. package/src/roap/turnDiscovery.ts +62 -56
  414. package/src/rtcMetrics/constants.ts +3 -0
  415. package/src/rtcMetrics/index.ts +124 -0
  416. package/src/statsAnalyzer/global.ts +1 -84
  417. package/src/statsAnalyzer/index.ts +477 -643
  418. package/src/statsAnalyzer/mqaUtil.ts +115 -114
  419. package/src/webinar/collection.ts +31 -0
  420. package/src/webinar/index.ts +62 -0
  421. package/test/integration/spec/converged-space-meetings.js +233 -0
  422. package/test/integration/spec/journey.js +320 -264
  423. package/test/integration/spec/space-meeting.js +77 -4
  424. package/test/unit/spec/annotation/index.ts +418 -0
  425. package/test/unit/spec/breakouts/breakout.ts +237 -0
  426. package/test/unit/spec/breakouts/collection.ts +15 -0
  427. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  428. package/test/unit/spec/breakouts/events.ts +89 -0
  429. package/test/unit/spec/breakouts/index.ts +1790 -0
  430. package/test/unit/spec/breakouts/request.ts +104 -0
  431. package/test/unit/spec/breakouts/utils.js +72 -0
  432. package/test/unit/spec/common/queue.js +31 -2
  433. package/test/unit/spec/controls-options-manager/index.js +163 -0
  434. package/test/unit/spec/controls-options-manager/util.js +576 -60
  435. package/test/unit/spec/fixture/locus.js +1 -0
  436. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  437. package/test/unit/spec/interpretation/collection.ts +15 -0
  438. package/test/unit/spec/interpretation/index.ts +589 -0
  439. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  440. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  441. package/test/unit/spec/locus-info/index.js +1390 -16
  442. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  443. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  444. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  445. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  446. package/test/unit/spec/locus-info/parser.js +116 -35
  447. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  448. package/test/unit/spec/media/index.ts +290 -0
  449. package/test/unit/spec/media/properties.ts +75 -84
  450. package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
  451. package/test/unit/spec/meeting/index.js +8187 -2769
  452. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  453. package/test/unit/spec/meeting/muteState.js +409 -213
  454. package/test/unit/spec/meeting/request.js +512 -42
  455. package/test/unit/spec/meeting/utils.js +741 -24
  456. package/test/unit/spec/meeting-info/index.js +300 -0
  457. package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
  458. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  459. package/test/unit/spec/meetings/collection.js +26 -0
  460. package/test/unit/spec/meetings/index.js +1313 -243
  461. package/test/unit/spec/meetings/utils.js +202 -2
  462. package/test/unit/spec/member/index.js +32 -9
  463. package/test/unit/spec/member/util.js +499 -61
  464. package/test/unit/spec/members/index.js +394 -5
  465. package/test/unit/spec/members/request.js +206 -27
  466. package/test/unit/spec/members/utils.js +173 -38
  467. package/test/unit/spec/metrics/index.js +1 -50
  468. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  469. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  470. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  471. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  472. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  473. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  474. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  475. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  476. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  477. package/test/unit/spec/reachability/index.ts +531 -24
  478. package/test/unit/spec/reachability/request.js +68 -0
  479. package/test/unit/spec/reachability/util.ts +40 -0
  480. package/test/unit/spec/reconnection-manager/index.js +162 -24
  481. package/test/unit/spec/recording-controller/index.js +293 -218
  482. package/test/unit/spec/recording-controller/util.js +223 -96
  483. package/test/unit/spec/roap/index.ts +200 -76
  484. package/test/unit/spec/roap/request.ts +255 -0
  485. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  486. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  487. package/test/unit/spec/stats-analyzer/index.js +261 -167
  488. package/test/unit/spec/webinar/collection.ts +13 -0
  489. package/test/unit/spec/webinar/index.ts +60 -0
  490. package/test/utils/constants.js +9 -0
  491. package/test/utils/integrationTestUtils.js +46 -0
  492. package/test/utils/testUtils.js +0 -45
  493. package/test/utils/webex-config.js +4 -0
  494. package/test/utils/webex-test-users.js +7 -3
  495. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  496. package/dist/meeting/effectsState.d.ts +0 -42
  497. package/dist/meeting/effectsState.js +0 -260
  498. package/dist/meeting/effectsState.js.map +0 -1
  499. package/dist/metrics/config.d.ts +0 -169
  500. package/dist/metrics/config.js +0 -289
  501. package/dist/metrics/config.js.map +0 -1
  502. package/dist/peer-connection-manager/index.d.ts +0 -6
  503. package/dist/peer-connection-manager/index.js +0 -671
  504. package/dist/peer-connection-manager/index.js.map +0 -1
  505. package/dist/peer-connection-manager/util.d.ts +0 -6
  506. package/dist/peer-connection-manager/util.js +0 -110
  507. package/dist/peer-connection-manager/util.js.map +0 -1
  508. package/dist/roap/collection.d.ts +0 -10
  509. package/dist/roap/collection.js +0 -63
  510. package/dist/roap/collection.js.map +0 -1
  511. package/dist/roap/handler.d.ts +0 -47
  512. package/dist/roap/handler.js +0 -279
  513. package/dist/roap/handler.js.map +0 -1
  514. package/dist/roap/state.d.ts +0 -9
  515. package/dist/roap/state.js +0 -127
  516. package/dist/roap/state.js.map +0 -1
  517. package/dist/roap/util.d.ts +0 -2
  518. package/dist/roap/util.js +0 -76
  519. package/dist/roap/util.js.map +0 -1
  520. package/src/index.js +0 -15
  521. package/src/meeting/effectsState.ts +0 -209
  522. package/src/metrics/config.ts +0 -485
  523. package/src/peer-connection-manager/index.ts +0 -847
  524. package/src/peer-connection-manager/util.ts +0 -119
  525. package/src/roap/collection.ts +0 -62
  526. package/src/roap/handler.ts +0 -294
  527. package/src/roap/state.ts +0 -156
  528. package/src/roap/util.ts +0 -100
  529. package/test/unit/spec/meeting/effectsState.js +0 -281
  530. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  531. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  532. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  533. package/test/unit/spec/roap/util.js +0 -30
  534. /package/dist/common/errors/{reclaim-host-role-error.d.ts → reclaim-host-role-errors.d.ts} +0 -0
  535. /package/src/common/errors/{reclaim-host-role-error.ts → reclaim-host-role-errors.ts} +0 -0
@@ -15,12 +15,10 @@ 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 _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
18
+ var _lodash = require("lodash");
19
19
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
20
20
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
21
21
  var _constants = require("../constants");
22
- var _metrics = _interopRequireDefault(require("../metrics"));
23
- var _config = require("../metrics/config");
24
22
  var _infoUtils = _interopRequireDefault(require("./infoUtils"));
25
23
  var _fullState = _interopRequireDefault(require("./fullState"));
26
24
  var _selfUtils = _interopRequireDefault(require("./selfUtils"));
@@ -29,6 +27,8 @@ var _controlsUtils = _interopRequireDefault(require("./controlsUtils"));
29
27
  var _embeddedAppsUtils = _interopRequireDefault(require("./embeddedAppsUtils"));
30
28
  var _mediaSharesUtils = _interopRequireDefault(require("./mediaSharesUtils"));
31
29
  var _parser = _interopRequireDefault(require("./parser"));
30
+ var _metrics = _interopRequireDefault(require("../metrics"));
31
+ var _constants2 = _interopRequireDefault(require("../metrics/constants"));
32
32
  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
33
  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
34
  /**
@@ -37,9 +37,16 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
37
37
  * @private
38
38
  * @class LocusInfo
39
39
  */
40
- var LocusInfo = /*#__PURE__*/function (_EventsScope) {
40
+ var LocusInfo = exports.default = /*#__PURE__*/function (_EventsScope) {
41
41
  (0, _inherits2.default)(LocusInfo, _EventsScope);
42
42
  var _super = _createSuper(LocusInfo);
43
+ /**
44
+ * Constructor
45
+ * @param {function} updateMeeting callback to update the meeting object from an object
46
+ * @param {object} webex
47
+ * @param {string} meetingId
48
+ * @returns {undefined}
49
+ */
43
50
  function LocusInfo(updateMeeting, webex, meetingId) {
44
51
  var _this;
45
52
  (0, _classCallCheck2.default)(this, LocusInfo);
@@ -68,10 +75,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
68
75
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fullState", void 0);
69
76
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "host", void 0);
70
77
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "info", void 0);
78
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roles", void 0);
71
79
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaShares", void 0);
72
80
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "replace", void 0);
73
81
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "url", void 0);
74
82
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "services", void 0);
83
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mainSessionLocusCache", void 0);
75
84
  _this.parsedLocus = {
76
85
  states: []
77
86
  };
@@ -85,38 +94,95 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
85
94
  }
86
95
 
87
96
  /**
88
- * Apply locus delta data to meeting
89
- * @param {string} action Locus delta action
90
- * @param {Locus} locus
97
+ * 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.
98
+ *
91
99
  * @param {Meeting} meeting
92
100
  * @returns {undefined}
93
101
  */
94
102
  (0, _createClass2.default)(LocusInfo, [{
103
+ key: "doLocusSync",
104
+ value: function doLocusSync(meeting) {
105
+ var _this2 = this;
106
+ var isDelta;
107
+ var url;
108
+ if (this.locusParser.workingCopy.syncUrl) {
109
+ url = this.locusParser.workingCopy.syncUrl;
110
+ isDelta = true;
111
+ } else {
112
+ url = meeting.locusUrl;
113
+ isDelta = false;
114
+ }
115
+ _loggerProxy.default.logger.info("Locus-info:index#doLocusSync --> doing Locus sync (getting ".concat(isDelta ? 'delta' : 'full', " DTO)"));
116
+
117
+ // return value ignored on purpose
118
+ meeting.meetingRequest.getLocusDTO({
119
+ url: url
120
+ }).catch(function (e) {
121
+ if (isDelta) {
122
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync');
123
+ _metrics.default.sendBehavioralMetric(_constants2.default.LOCUS_DELTA_SYNC_FAILED, {
124
+ correlationId: meeting.correlationId,
125
+ url: url,
126
+ reason: e.message,
127
+ errorName: e.name,
128
+ stack: e.stack,
129
+ code: e.code
130
+ });
131
+ isDelta = false;
132
+ return meeting.meetingRequest.getLocusDTO({
133
+ url: meeting.locusUrl
134
+ }).catch(function (err) {
135
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting');
136
+ _this2.webex.meetings.destroy(meeting, _constants.MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
137
+ throw err;
138
+ });
139
+ }
140
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting');
141
+ _this2.webex.meetings.destroy(meeting, _constants.MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
142
+ throw e;
143
+ }).then(function (res) {
144
+ if (isDelta) {
145
+ if (!(0, _lodash.isEmpty)(res.body)) {
146
+ meeting.locusInfo.handleLocusDelta(res.body, meeting);
147
+ } else {
148
+ _loggerProxy.default.logger.info('Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO');
149
+ }
150
+ } else {
151
+ meeting.locusInfo.onFullLocus(res.body);
152
+ }
153
+ // Notify parser to resume processing delta events.
154
+ // Any deltas in the queue that have now been superseded by this sync will simply be ignored
155
+ _this2.locusParser.resume();
156
+ });
157
+ }
158
+
159
+ /**
160
+ * Apply locus delta data to meeting
161
+ * @param {string} action Locus delta action
162
+ * @param {Locus} locus
163
+ * @param {Meeting} meeting
164
+ * @returns {undefined}
165
+ */
166
+ }, {
95
167
  key: "applyLocusDeltaData",
96
168
  value: function applyLocusDeltaData(action, locus, meeting) {
97
- var _this2 = this;
98
169
  var _LocusDeltaParser$loc = _parser.default.loci,
99
170
  DESYNC = _LocusDeltaParser$loc.DESYNC,
100
171
  USE_CURRENT = _LocusDeltaParser$loc.USE_CURRENT,
101
- USE_INCOMING = _LocusDeltaParser$loc.USE_INCOMING;
172
+ USE_INCOMING = _LocusDeltaParser$loc.USE_INCOMING,
173
+ WAIT = _LocusDeltaParser$loc.WAIT,
174
+ LOCUS_URL_CHANGED = _LocusDeltaParser$loc.LOCUS_URL_CHANGED;
102
175
  switch (action) {
103
176
  case USE_INCOMING:
104
177
  meeting.locusInfo.onDeltaLocus(locus);
105
178
  break;
106
179
  case USE_CURRENT:
107
- meeting.locusDesync = false;
108
- meeting.needToGetFullLocus = false;
180
+ case WAIT:
181
+ // do nothing
109
182
  break;
110
183
  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
- });
184
+ case LOCUS_URL_CHANGED:
185
+ this.doLocusSync(meeting);
120
186
  break;
121
187
  default:
122
188
  _loggerProxy.default.logger.info("Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ".concat(action));
@@ -186,13 +252,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
186
252
  * @member LocusInfo
187
253
  */
188
254
  this.deltaParticipants = [];
189
-
255
+ this.updateLocusCache(locus);
190
256
  // above section only updates the locusInfo object
191
257
  // The below section makes sure it updates the locusInfo as well as updates the meeting object
192
258
  this.updateParticipants(locus.participants);
193
259
  // For 1:1 space meeting the conversation Url does not exist in locus.conversation
194
260
  this.updateConversationUrl(locus.conversationUrl, locus.info);
195
- this.updateControls(locus.controls);
261
+ this.updateControls(locus.controls, locus.self);
196
262
  this.updateLocusUrl(locus.url);
197
263
  this.updateFullState(locus.fullState);
198
264
  this.updateMeetingInfo(locus.info);
@@ -212,6 +278,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
212
278
  }, {
213
279
  key: "initialSetup",
214
280
  value: function initialSetup(locus) {
281
+ this.updateLocusCache(locus);
215
282
  this.onFullLocus(locus);
216
283
 
217
284
  // Change it to true after it receives it first locus object
@@ -229,6 +296,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
229
296
  value: function parse(meeting, data) {
230
297
  // eslint-disable-next-line @typescript-eslint/no-shadow
231
298
  var eventType = data.eventType;
299
+ var locus = this.getTheLocusToUpdate(data.locus);
232
300
  _loggerProxy.default.logger.info("Locus-info:index#parse --> received locus data: ".concat(eventType));
233
301
  switch (eventType) {
234
302
  case _constants.LOCUSEVENT.PARTICIPANT_JOIN:
@@ -245,15 +313,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
245
313
  case _constants.LOCUSEVENT.PARTICIPANT_DECLINED:
246
314
  case _constants.LOCUSEVENT.FLOOR_GRANTED:
247
315
  case _constants.LOCUSEVENT.FLOOR_RELEASED:
248
- this.onFullLocus(data.locus, eventType);
316
+ this.onFullLocus(locus, eventType);
249
317
  break;
250
318
  case _constants.LOCUSEVENT.DIFFERENCE:
251
- this.handleLocusDelta(data.locus, meeting);
319
+ this.handleLocusDelta(locus, meeting);
252
320
  break;
253
321
  default:
254
322
  // Why will there be a event with no eventType ????
255
323
  // we may not need this, we can get full locus
256
- this.handleLocusDelta(data.locus, meeting);
324
+ this.handleLocusDelta(locus, meeting);
257
325
  }
258
326
  }
259
327
 
@@ -277,18 +345,22 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
277
345
  * @returns {object} null
278
346
  * @memberof LocusInfo
279
347
  */
280
- // eslint-disable-next-line @typescript-eslint/no-shadow
281
348
  }, {
282
349
  key: "onFullLocus",
283
350
  value: function onFullLocus(locus, eventType) {
284
351
  if (!locus) {
285
352
  _loggerProxy.default.logger.error('Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.');
286
353
  }
354
+ if (!this.locusParser.isNewFullLocus(locus)) {
355
+ _loggerProxy.default.logger.info("Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=".concat(eventType));
356
+ return;
357
+ }
287
358
  this.updateParticipantDeltas(locus.participants);
288
359
  this.scheduledMeeting = locus.meeting || null;
289
360
  this.participants = locus.participants;
361
+ var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
290
362
  this.updateLocusInfo(locus);
291
- this.updateParticipants(locus.participants);
363
+ this.updateParticipants(locus.participants, isReplaceMembers);
292
364
  this.isMeetingActive();
293
365
  this.handleOneOnOneEvent(eventType);
294
366
  this.updateEmbeddedApps(locus.embeddedApps);
@@ -340,8 +412,9 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
340
412
  }, {
341
413
  key: "onDeltaLocus",
342
414
  value: function onDeltaLocus(locus) {
415
+ var isReplaceMembers = _controlsUtils.default.isNeedReplaceMembers(this.controls, locus.controls);
343
416
  this.updateLocusInfo(locus);
344
- this.updateParticipants(locus.participants);
417
+ this.updateParticipants(locus.participants, isReplaceMembers);
345
418
  this.isMeetingActive();
346
419
  }
347
420
 
@@ -353,8 +426,14 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
353
426
  }, {
354
427
  key: "updateLocusInfo",
355
428
  value: function updateLocusInfo(locus) {
356
- var _locus$links2;
357
- this.updateControls(locus.controls);
429
+ var _locus$self, _locus$self2, _locus$links2;
430
+ 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') {
431
+ // When moved to a breakout session locus sends a message for the previous locus
432
+ // indicating that we have been moved. It isn't helpful to continue parsing this
433
+ // as it gets interpreted as if we have left the call
434
+ return;
435
+ }
436
+ this.updateControls(locus.controls, locus.self);
358
437
  this.updateConversationUrl(locus.conversationUrl, locus.info);
359
438
  this.updateCreated(locus.created);
360
439
  this.updateFullState(locus.fullState);
@@ -420,9 +499,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
420
499
  if (this.fullState && this.fullState.state === _constants.LOCUS.STATE.INACTIVE) {
421
500
  // TODO: update the meeting state
422
501
  _loggerProxy.default.logger.warn('Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.');
423
- _metrics.default.postEvent({
424
- event: _config.eventType.REMOTE_ENDED,
425
- meetingId: this.meetingId
502
+
503
+ // @ts-ignore
504
+ this.webex.internal.newMetrics.submitClientEvent({
505
+ name: 'client.call.remote-ended',
506
+ options: {
507
+ meetingId: this.meetingId
508
+ }
426
509
  });
427
510
  this.emitScoped({
428
511
  file: 'locus-info',
@@ -432,9 +515,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
432
515
  shouldLeave: false
433
516
  });
434
517
  } 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)) {
435
- _metrics.default.postEvent({
436
- event: _config.eventType.REMOTE_ENDED,
437
- meetingId: this.meetingId
518
+ // @ts-ignore
519
+ this.webex.internal.newMetrics.submitClientEvent({
520
+ name: 'client.call.remote-ended',
521
+ options: {
522
+ meetingId: this.meetingId
523
+ }
438
524
  });
439
525
  this.emitScoped({
440
526
  file: 'locus-info',
@@ -445,9 +531,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
445
531
  });
446
532
  } 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
447
533
  ) {
448
- _metrics.default.postEvent({
449
- event: _config.eventType.REMOTE_ENDED,
450
- meetingId: this.meetingId
534
+ // @ts-ignore
535
+ this.webex.internal.newMetrics.submitClientEvent({
536
+ name: 'client.call.remote-ended',
537
+ options: {
538
+ meetingId: this.meetingId
539
+ }
451
540
  });
452
541
  this.emitScoped({
453
542
  file: 'locus-info',
@@ -462,9 +551,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
462
551
  // @ts-ignore
463
552
  this.fullState.state === _constants.LOCUS.STATE.TERMINATING)) {
464
553
  _loggerProxy.default.logger.warn('Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating');
465
- _metrics.default.postEvent({
466
- event: _config.eventType.REMOTE_ENDED,
467
- meetingId: this.meetingId
554
+
555
+ // @ts-ignore
556
+ this.webex.internal.newMetrics.submitClientEvent({
557
+ name: 'client.call.remote-ended',
558
+ options: {
559
+ meetingId: this.meetingId
560
+ }
468
561
  });
469
562
  this.emitScoped({
470
563
  file: 'locus-info',
@@ -475,9 +568,13 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
475
568
  });
476
569
  } else if (this.fullState && this.fullState.removed) {
477
570
  // user has been dropped from a meeting
478
- _metrics.default.postEvent({
479
- event: _config.eventType.REMOTE_ENDED,
480
- meetingId: this.meetingId
571
+
572
+ // @ts-ignore
573
+ this.webex.internal.newMetrics.submitClientEvent({
574
+ name: 'client.call.remote-ended',
575
+ options: {
576
+ meetingId: this.meetingId
577
+ }
481
578
  });
482
579
  this.emitScoped({
483
580
  file: 'locus-info',
@@ -600,15 +697,15 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
600
697
  }
601
698
 
602
699
  /**
603
- *
700
+ * update meeting's members
604
701
  * @param {Object} participants new participants object
605
- * @param {boolen} deltaParticpantFlag delta event
702
+ * @param {Boolean} isReplace is replace the whole members
606
703
  * @returns {Array} updatedParticipants
607
704
  * @memberof LocusInfo
608
705
  */
609
706
  }, {
610
707
  key: "updateParticipants",
611
- value: function updateParticipants(participants) {
708
+ value: function updateParticipants(participants, isReplace) {
612
709
  var _this$parsedLocus$con;
613
710
  this.emitScoped({
614
711
  file: 'locus-info',
@@ -618,19 +715,21 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
618
715
  recordingId: this.parsedLocus.controls && ((_this$parsedLocus$con = this.parsedLocus.controls.record) === null || _this$parsedLocus$con === void 0 ? void 0 : _this$parsedLocus$con.modifiedBy),
619
716
  selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
620
717
  selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
621
- hostId: this.parsedLocus.host && this.parsedLocus.host.hostId
718
+ hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
719
+ isReplace: isReplace
622
720
  });
623
721
  }
624
722
 
625
723
  /**
626
724
  * @param {Object} controls
725
+ * @param {Object} self
627
726
  * @returns {undefined}
628
727
  * @memberof LocusInfo
629
728
  */
630
729
  }, {
631
730
  key: "updateControls",
632
- value: function updateControls(controls) {
633
- if (controls && !(0, _isEqual2.default)(this.controls, controls)) {
731
+ value: function updateControls(controls, self) {
732
+ if (controls && !(0, _lodash.isEqual)(this.controls, controls)) {
634
733
  this.parsedLocus.controls = _controlsUtils.default.parse(controls);
635
734
  var _ControlsUtils$getCon = _controlsUtils.default.getControls(this.controls, controls),
636
735
  _ControlsUtils$getCon2 = _ControlsUtils$getCon.updates,
@@ -639,7 +738,74 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
639
738
  hasMeetingContainerChanged = _ControlsUtils$getCon2.hasMeetingContainerChanged,
640
739
  hasTranscribeChanged = _ControlsUtils$getCon2.hasTranscribeChanged,
641
740
  hasEntryExitToneChanged = _ControlsUtils$getCon2.hasEntryExitToneChanged,
741
+ hasBreakoutChanged = _ControlsUtils$getCon2.hasBreakoutChanged,
742
+ hasVideoEnabledChanged = _ControlsUtils$getCon2.hasVideoEnabledChanged,
743
+ hasMuteOnEntryChanged = _ControlsUtils$getCon2.hasMuteOnEntryChanged,
744
+ hasShareControlChanged = _ControlsUtils$getCon2.hasShareControlChanged,
745
+ hasDisallowUnmuteChanged = _ControlsUtils$getCon2.hasDisallowUnmuteChanged,
746
+ hasReactionsChanged = _ControlsUtils$getCon2.hasReactionsChanged,
747
+ hasReactionDisplayNamesChanged = _ControlsUtils$getCon2.hasReactionDisplayNamesChanged,
748
+ hasViewTheParticipantListChanged = _ControlsUtils$getCon2.hasViewTheParticipantListChanged,
749
+ hasRaiseHandChanged = _ControlsUtils$getCon2.hasRaiseHandChanged,
750
+ hasVideoChanged = _ControlsUtils$getCon2.hasVideoChanged,
751
+ hasInterpretationChanged = _ControlsUtils$getCon2.hasInterpretationChanged,
642
752
  current = _ControlsUtils$getCon.current;
753
+ if (hasMuteOnEntryChanged) {
754
+ this.emitScoped({
755
+ file: 'locus-info',
756
+ function: 'updateControls'
757
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, {
758
+ state: current.muteOnEntry
759
+ });
760
+ }
761
+ if (hasShareControlChanged) {
762
+ this.emitScoped({
763
+ file: 'locus-info',
764
+ function: 'updateControls'
765
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, {
766
+ state: current.shareControl
767
+ });
768
+ }
769
+ if (hasDisallowUnmuteChanged) {
770
+ this.emitScoped({
771
+ file: 'locus-info',
772
+ function: 'updateControls'
773
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, {
774
+ state: current.disallowUnmute
775
+ });
776
+ }
777
+ if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
778
+ this.emitScoped({
779
+ file: 'locus-info',
780
+ function: 'updateControls'
781
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, {
782
+ state: current.reactions
783
+ });
784
+ }
785
+ if (hasViewTheParticipantListChanged) {
786
+ this.emitScoped({
787
+ file: 'locus-info',
788
+ function: 'updateControls'
789
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, {
790
+ state: current.viewTheParticipantList
791
+ });
792
+ }
793
+ if (hasRaiseHandChanged) {
794
+ this.emitScoped({
795
+ file: 'locus-info',
796
+ function: 'updateControls'
797
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, {
798
+ state: current.raiseHand
799
+ });
800
+ }
801
+ if (hasVideoChanged) {
802
+ this.emitScoped({
803
+ file: 'locus-info',
804
+ function: 'updateControls'
805
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, {
806
+ state: current.video
807
+ });
808
+ }
643
809
  if (hasRecordingChanged || hasRecordingPausedChanged) {
644
810
  var state = null;
645
811
  if (hasRecordingPausedChanged) {
@@ -682,16 +848,51 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
682
848
  caption: caption
683
849
  });
684
850
  }
851
+ if (hasBreakoutChanged) {
852
+ var breakout = current.breakout;
853
+ breakout.breakoutMoveId = _selfUtils.default.getReplacedBreakoutMoveId(self, this.webex.internal.device.url);
854
+ this.emitScoped({
855
+ file: 'locus-info',
856
+ function: 'updateControls'
857
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, {
858
+ breakout: breakout
859
+ });
860
+ }
861
+ if (hasInterpretationChanged) {
862
+ var interpretation = current.interpretation;
863
+ this.emitScoped({
864
+ file: 'locus-info',
865
+ function: 'updateControls'
866
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, {
867
+ interpretation: interpretation
868
+ });
869
+ }
685
870
  if (hasEntryExitToneChanged) {
686
871
  var entryExitTone = current.entryExitTone;
872
+ this.updateMeeting({
873
+ entryExitTone: entryExitTone
874
+ });
687
875
  this.emitScoped({
688
876
  file: 'locus-info',
689
877
  function: 'updateControls'
690
878
  }, _constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, {
691
879
  entryExitTone: entryExitTone
692
880
  });
881
+ }
882
+
883
+ // videoEnabled is handled differently than other controls,
884
+ // to fit with audio mute status logic
885
+ if (hasVideoEnabledChanged) {
886
+ var videoEnabled = current.videoEnabled;
693
887
  this.updateMeeting({
694
- entryExitTone: entryExitTone
888
+ unmuteVideoAllowed: videoEnabled
889
+ });
890
+ this.emitScoped({
891
+ file: 'locus-info',
892
+ function: 'updateControls'
893
+ }, _constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, {
894
+ // muted: not part of locus.controls
895
+ unmuteAllowed: videoEnabled
695
896
  });
696
897
  }
697
898
  this.controls = controls;
@@ -707,12 +908,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
707
908
  }, {
708
909
  key: "updateConversationUrl",
709
910
  value: function updateConversationUrl(conversationUrl, info) {
710
- if (conversationUrl && !(0, _isEqual2.default)(this.conversationUrl, conversationUrl)) {
911
+ if (conversationUrl && !(0, _lodash.isEqual)(this.conversationUrl, conversationUrl)) {
711
912
  this.conversationUrl = conversationUrl;
712
913
  this.updateMeeting({
713
914
  conversationUrl: conversationUrl
714
915
  });
715
- } else if (info && info.conversationUrl && !(0, _isEqual2.default)(this.conversationUrl, info.conversationUrl)) {
916
+ } else if (info && info.conversationUrl && !(0, _lodash.isEqual)(this.conversationUrl, info.conversationUrl)) {
716
917
  this.conversationUrl = info.conversationUrl;
717
918
  this.updateMeeting({
718
919
  conversationUrl: info.conversationUrl
@@ -728,7 +929,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
728
929
  }, {
729
930
  key: "updateCreated",
730
931
  value: function updateCreated(created) {
731
- if (created && !(0, _isEqual2.default)(this.created, created)) {
932
+ if (created && !(0, _lodash.isEqual)(this.created, created)) {
732
933
  this.created = created;
733
934
  }
734
935
  }
@@ -741,7 +942,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
741
942
  }, {
742
943
  key: "updateServices",
743
944
  value: function updateServices(services) {
744
- if (services && !(0, _isEqual2.default)(this.services, services)) {
945
+ if (services && !(0, _lodash.isEqual)(this.services, services)) {
745
946
  this.services = services;
746
947
  this.emitScoped({
747
948
  file: 'locus-info',
@@ -760,7 +961,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
760
961
  }, {
761
962
  key: "updateFullState",
762
963
  value: function updateFullState(fullState) {
763
- if (fullState && !(0, _isEqual2.default)(this.fullState, fullState)) {
964
+ if (fullState && !(0, _lodash.isEqual)(this.fullState, fullState)) {
764
965
  var result = _fullState.default.getFullState(this.fullState, fullState);
765
966
  this.updateMeeting(result.current);
766
967
  if (result.updates.meetingStateChangedTo) {
@@ -795,7 +996,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
795
996
  }, {
796
997
  key: "updateHostInfo",
797
998
  value: function updateHostInfo(host) {
798
- if (host && !(0, _isEqual2.default)(this.host, host)) {
999
+ if (host && !(0, _lodash.isEqual)(this.host, host)) {
799
1000
  var parsedHosts = _hostUtils.default.getHosts(this.host, host);
800
1001
  this.updateMeeting(parsedHosts.current);
801
1002
  this.parsedLocus.host = parsedHosts.current;
@@ -824,18 +1025,11 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
824
1025
  }, {
825
1026
  key: "updateMeetingInfo",
826
1027
  value: function updateMeetingInfo(info, self) {
827
- if (info && !(0, _isEqual2.default)(this.info, info)) {
828
- var _this$parsedLocus$sel;
829
- 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) || [];
1028
+ var _this$parsedLocus$sel;
1029
+ 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) || [];
1030
+ if (info && !(0, _lodash.isEqual)(this.info, info) || roles.length && !(0, _lodash.isEqual)(this.roles, roles) && info) {
830
1031
  var isJoined = _selfUtils.default.isJoined(self || this.parsedLocus.self);
831
1032
  var parsedInfo = _infoUtils.default.getInfos(this.parsedLocus.info, info, roles, isJoined);
832
- this.emitScoped({
833
- file: 'locus-info',
834
- function: 'updateMeetingInfo'
835
- }, _constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, {
836
- info: parsedInfo.current,
837
- self: self
838
- });
839
1033
  if (parsedInfo.updates.isLocked) {
840
1034
  this.emitScoped({
841
1035
  file: 'locus-info',
@@ -852,7 +1046,12 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
852
1046
  this.parsedLocus.info = parsedInfo.current;
853
1047
  // Parses the info and adds necessary values
854
1048
  this.updateMeeting(parsedInfo.current);
1049
+ this.emitScoped({
1050
+ file: 'locus-info',
1051
+ function: 'updateMeetingInfo'
1052
+ }, _constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED);
855
1053
  }
1054
+ this.roles = roles;
856
1055
  }
857
1056
 
858
1057
  /**
@@ -888,9 +1087,11 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
888
1087
  }, {
889
1088
  key: "updateMediaShares",
890
1089
  value: function updateMediaShares(mediaShares) {
891
- if (mediaShares && !(0, _isEqual2.default)(this.mediaShares, mediaShares)) {
1090
+ if (mediaShares && !(0, _lodash.isEqual)(this.mediaShares, mediaShares)) {
892
1091
  var parsedMediaShares = _mediaSharesUtils.default.getMediaShares(this.mediaShares, mediaShares);
893
1092
  this.updateMeeting(parsedMediaShares.current);
1093
+ this.parsedLocus.mediaShares = parsedMediaShares.current;
1094
+ this.mediaShares = mediaShares;
894
1095
  this.emitScoped({
895
1096
  file: 'locus-info',
896
1097
  function: 'updateMediaShares'
@@ -898,8 +1099,6 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
898
1099
  current: parsedMediaShares.current,
899
1100
  previous: parsedMediaShares.previous
900
1101
  });
901
- this.parsedLocus.mediaShares = parsedMediaShares.current;
902
- this.mediaShares = mediaShares;
903
1102
  }
904
1103
  }
905
1104
 
@@ -911,7 +1110,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
911
1110
  }, {
912
1111
  key: "updateParticipantsUrl",
913
1112
  value: function updateParticipantsUrl(participantsUrl) {
914
- if (participantsUrl && !(0, _isEqual2.default)(this.participantsUrl, participantsUrl)) {
1113
+ if (participantsUrl && !(0, _lodash.isEqual)(this.participantsUrl, participantsUrl)) {
915
1114
  this.participantsUrl = participantsUrl;
916
1115
  }
917
1116
  }
@@ -924,7 +1123,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
924
1123
  }, {
925
1124
  key: "updateReplace",
926
1125
  value: function updateReplace(replace) {
927
- if (replace && !(0, _isEqual2.default)(this.replace, replace)) {
1126
+ if (replace && !(0, _lodash.isEqual)(this.replace, replace)) {
928
1127
  this.replace = replace;
929
1128
  }
930
1129
  }
@@ -941,7 +1140,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
941
1140
  key: "updateSelf",
942
1141
  value: function updateSelf(self, participants) {
943
1142
  // @ts-ignore - check where this.self come from
944
- if (self && !(0, _isEqual2.default)(this.self, self)) {
1143
+ if (self && !(0, _lodash.isEqual)(this.self, self)) {
945
1144
  // @ts-ignore
946
1145
  var parsedSelves = _selfUtils.default.getSelves(this.self, self, this.webex.internal.device.url);
947
1146
  this.updateMeeting(parsedSelves.current);
@@ -970,6 +1169,23 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
970
1169
  layout: parsedSelves.current.layout
971
1170
  });
972
1171
  }
1172
+ if (parsedSelves.updates.breakoutsChanged) {
1173
+ this.emitScoped({
1174
+ file: 'locus-info',
1175
+ function: 'updateSelf'
1176
+ }, _constants.LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED, {
1177
+ breakoutSessions: parsedSelves.current.breakoutSessions
1178
+ });
1179
+ }
1180
+ if (parsedSelves.updates.interpretationChanged) {
1181
+ this.emitScoped({
1182
+ file: 'locus-info',
1183
+ function: 'updateSelf'
1184
+ }, _constants.LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED, {
1185
+ interpretation: parsedSelves.current.interpretation,
1186
+ selfParticipantId: parsedSelves.current.selfId
1187
+ });
1188
+ }
973
1189
  if (parsedSelves.updates.isMediaInactiveOrReleased) {
974
1190
  this.emitScoped({
975
1191
  file: 'locus-info',
@@ -984,6 +1200,26 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
984
1200
  function: 'updateSelf'
985
1201
  }, _constants.LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED, self);
986
1202
  }
1203
+ if (parsedSelves.updates.isRolesChanged) {
1204
+ var _parsedSelves$previou, _parsedSelves$current;
1205
+ this.emitScoped({
1206
+ file: 'locus-info',
1207
+ function: 'updateSelf'
1208
+ }, _constants.LOCUSINFO.EVENTS.SELF_ROLES_CHANGED, {
1209
+ oldRoles: (_parsedSelves$previou = parsedSelves.previous) === null || _parsedSelves$previou === void 0 ? void 0 : _parsedSelves$previou.roles,
1210
+ newRoles: (_parsedSelves$current = parsedSelves.current) === null || _parsedSelves$current === void 0 ? void 0 : _parsedSelves$current.roles
1211
+ });
1212
+ }
1213
+ if (parsedSelves.updates.isVideoMutedByOthersChanged) {
1214
+ this.emitScoped({
1215
+ file: 'locus-info',
1216
+ function: 'updateSelf'
1217
+ }, _constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, {
1218
+ muted: parsedSelves.current.remoteVideoMuted
1219
+ // unmuteAllowed: not part of .self
1220
+ });
1221
+ }
1222
+
987
1223
  if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
988
1224
  this.emitScoped({
989
1225
  file: 'locus-info',
@@ -1029,14 +1265,14 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1029
1265
  _constants.LOCUSINFO.EVENTS.MEDIA_INACTIVITY, _selfUtils.default.getMediaStatus(self.mediaSessions));
1030
1266
  }
1031
1267
  if (parsedSelves.updates.audioStateChange || parsedSelves.updates.videoStateChange || parsedSelves.updates.shareStateChange) {
1032
- var _parsedSelves$current, _parsedSelves$current2, _parsedSelves$current3;
1268
+ var _parsedSelves$current2, _parsedSelves$current3, _parsedSelves$current4;
1033
1269
  this.emitScoped({
1034
1270
  file: 'locus-info',
1035
1271
  function: 'updateSelf'
1036
1272
  }, _constants.LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE, {
1037
- audioStatus: (_parsedSelves$current = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current === void 0 ? void 0 : _parsedSelves$current.audio,
1038
- videoStatus: (_parsedSelves$current2 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current2 === void 0 ? void 0 : _parsedSelves$current2.video,
1039
- shareStatus: (_parsedSelves$current3 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current3 === void 0 ? void 0 : _parsedSelves$current3.share
1273
+ audioStatus: (_parsedSelves$current2 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current2 === void 0 ? void 0 : _parsedSelves$current2.audio,
1274
+ videoStatus: (_parsedSelves$current3 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current3 === void 0 ? void 0 : _parsedSelves$current3.video,
1275
+ shareStatus: (_parsedSelves$current4 = parsedSelves.current.currentMediaStatus) === null || _parsedSelves$current4 === void 0 ? void 0 : _parsedSelves$current4.share
1040
1276
  });
1041
1277
  }
1042
1278
  if (parsedSelves.updates.isUserObserving) {
@@ -1105,7 +1341,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1105
1341
  }, {
1106
1342
  key: "updateAclUrl",
1107
1343
  value: function updateAclUrl(aclUrl) {
1108
- if (aclUrl && !(0, _isEqual2.default)(this.aclUrl, aclUrl)) {
1344
+ if (aclUrl && !(0, _lodash.isEqual)(this.aclUrl, aclUrl)) {
1109
1345
  this.aclUrl = aclUrl;
1110
1346
  }
1111
1347
  }
@@ -1118,7 +1354,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1118
1354
  }, {
1119
1355
  key: "updateBasequence",
1120
1356
  value: function updateBasequence(baseSequence) {
1121
- if (baseSequence && !(0, _isEqual2.default)(this.baseSequence, baseSequence)) {
1357
+ if (baseSequence && !(0, _lodash.isEqual)(this.baseSequence, baseSequence)) {
1122
1358
  this.baseSequence = baseSequence;
1123
1359
  }
1124
1360
  }
@@ -1131,7 +1367,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1131
1367
  }, {
1132
1368
  key: "updateSequence",
1133
1369
  value: function updateSequence(sequence) {
1134
- if (sequence && !(0, _isEqual2.default)(this.sequence, sequence)) {
1370
+ if (sequence && !(0, _lodash.isEqual)(this.sequence, sequence)) {
1135
1371
  this.sequence = sequence;
1136
1372
  }
1137
1373
  }
@@ -1144,7 +1380,7 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1144
1380
  }, {
1145
1381
  key: "updateMemberShip",
1146
1382
  value: function updateMemberShip(membership) {
1147
- if (membership && !(0, _isEqual2.default)(this.membership, membership)) {
1383
+ if (membership && !(0, _lodash.isEqual)(this.membership, membership)) {
1148
1384
  this.membership = membership;
1149
1385
  }
1150
1386
  }
@@ -1157,12 +1393,117 @@ var LocusInfo = /*#__PURE__*/function (_EventsScope) {
1157
1393
  }, {
1158
1394
  key: "updateIdentifiers",
1159
1395
  value: function updateIdentifiers(identities) {
1160
- if (identities && !(0, _isEqual2.default)(this.identities, identities)) {
1396
+ if (identities && !(0, _lodash.isEqual)(this.identities, identities)) {
1161
1397
  this.identities = identities;
1162
1398
  }
1163
1399
  }
1400
+
1401
+ /**
1402
+ * check the locus is main session's one or not, if is main session's, update main session cache
1403
+ * @param {Object} locus
1404
+ * @returns {undefined}
1405
+ * @memberof LocusInfo
1406
+ */
1407
+ }, {
1408
+ key: "updateLocusCache",
1409
+ value: function updateLocusCache(locus) {
1410
+ var isMainSessionDTO = _controlsUtils.default.isMainSessionDTO(locus);
1411
+ if (isMainSessionDTO) {
1412
+ this.updateMainSessionLocusCache(locus);
1413
+ }
1414
+ }
1415
+
1416
+ /**
1417
+ * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
1418
+ * if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
1419
+ * @param {Object} newLocus
1420
+ * @returns {Object}
1421
+ * @memberof LocusInfo
1422
+ */
1423
+ }, {
1424
+ key: "getTheLocusToUpdate",
1425
+ value: function getTheLocusToUpdate(newLocus) {
1426
+ var switchStatus = _controlsUtils.default.getSessionSwitchStatus(this.controls, newLocus === null || newLocus === void 0 ? void 0 : newLocus.controls);
1427
+ if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
1428
+ return (0, _lodash.cloneDeep)(this.mainSessionLocusCache);
1429
+ }
1430
+ if (switchStatus.isJoinToBreakout) {
1431
+ this.emitScoped({
1432
+ file: 'locus-info',
1433
+ function: 'updateControls'
1434
+ }, _constants.LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN, {
1435
+ mainLocusUrl: this.url
1436
+ });
1437
+ }
1438
+ return newLocus;
1439
+ }
1440
+
1441
+ /**
1442
+ * merge participants by participant id
1443
+ * @param {Array} participants
1444
+ * @param {Array} sourceParticipants
1445
+ * @returns {Array} merged participants
1446
+ * @memberof LocusInfo
1447
+ */
1448
+ // eslint-disable-next-line class-methods-use-this
1449
+ }, {
1450
+ key: "mergeParticipants",
1451
+ value: function mergeParticipants(participants, sourceParticipants) {
1452
+ if (!sourceParticipants || !sourceParticipants.length) return participants;
1453
+ if (!participants || !participants.length) {
1454
+ return sourceParticipants;
1455
+ }
1456
+ sourceParticipants.forEach(function (participant) {
1457
+ var existIndex = participants.findIndex(function (p) {
1458
+ return p.id === participant.id;
1459
+ });
1460
+ if (existIndex > -1) {
1461
+ participants.splice(existIndex, 1, participant);
1462
+ } else {
1463
+ participants.push(participant);
1464
+ }
1465
+ });
1466
+ return participants;
1467
+ }
1468
+
1469
+ /**
1470
+ * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
1471
+ * @param {Object} mainLocus
1472
+ * @returns {undefined}
1473
+ * @memberof LocusInfo
1474
+ */
1475
+ }, {
1476
+ key: "updateMainSessionLocusCache",
1477
+ value: function updateMainSessionLocusCache(mainLocus) {
1478
+ var _this5 = this;
1479
+ if (!mainLocus) {
1480
+ return;
1481
+ }
1482
+ var locusClone = (0, _lodash.cloneDeep)(mainLocus);
1483
+ if (this.mainSessionLocusCache) {
1484
+ // shallow merge and do special merge for participants
1485
+ (0, _lodash.assignWith)(this.mainSessionLocusCache, locusClone, function (objValue, srcValue, key) {
1486
+ if (key === 'participants') {
1487
+ return _this5.mergeParticipants(objValue, srcValue);
1488
+ }
1489
+ return srcValue || objValue;
1490
+ });
1491
+ } else {
1492
+ this.mainSessionLocusCache = locusClone;
1493
+ }
1494
+ }
1495
+
1496
+ /**
1497
+ * clear main session cache
1498
+ * @returns {undefined}
1499
+ * @memberof LocusInfo
1500
+ */
1501
+ }, {
1502
+ key: "clearMainSessionLocusCache",
1503
+ value: function clearMainSessionLocusCache() {
1504
+ this.mainSessionLocusCache = null;
1505
+ }
1164
1506
  }]);
1165
1507
  return LocusInfo;
1166
1508
  }(_eventsScope.default);
1167
- exports.default = LocusInfo;
1168
1509
  //# sourceMappingURL=index.js.map