@webex/plugin-meetings 3.0.0-beta.18 → 3.0.0-beta.181

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 (410) hide show
  1. package/README.md +45 -7
  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 +114 -14
  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 +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +3 -2
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/config.js +3 -8
  25. package/dist/config.js.map +1 -1
  26. package/dist/constants.js +172 -30
  27. package/dist/constants.js.map +1 -1
  28. package/dist/controls-options-manager/constants.js +14 -0
  29. package/dist/controls-options-manager/constants.js.map +1 -0
  30. package/dist/controls-options-manager/enums.js +27 -0
  31. package/dist/controls-options-manager/enums.js.map +1 -0
  32. package/dist/controls-options-manager/index.js +297 -0
  33. package/dist/controls-options-manager/index.js.map +1 -0
  34. package/dist/controls-options-manager/types.js +7 -0
  35. package/dist/controls-options-manager/types.js.map +1 -0
  36. package/dist/controls-options-manager/util.js +319 -0
  37. package/dist/controls-options-manager/util.js.map +1 -0
  38. package/dist/index.js +107 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/interpretation/collection.js +23 -0
  41. package/dist/interpretation/collection.js.map +1 -0
  42. package/dist/interpretation/index.js +352 -0
  43. package/dist/interpretation/index.js.map +1 -0
  44. package/dist/interpretation/siLanguage.js +25 -0
  45. package/dist/interpretation/siLanguage.js.map +1 -0
  46. package/dist/locus-info/controlsUtils.js +91 -2
  47. package/dist/locus-info/controlsUtils.js.map +1 -1
  48. package/dist/locus-info/index.js +302 -41
  49. package/dist/locus-info/index.js.map +1 -1
  50. package/dist/locus-info/mediaSharesUtils.js +43 -1
  51. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  52. package/dist/locus-info/parser.js +1 -1
  53. package/dist/locus-info/parser.js.map +1 -1
  54. package/dist/locus-info/selfUtils.js +89 -14
  55. package/dist/locus-info/selfUtils.js.map +1 -1
  56. package/dist/media/index.js +39 -134
  57. package/dist/media/index.js.map +1 -1
  58. package/dist/media/properties.js +29 -90
  59. package/dist/media/properties.js.map +1 -1
  60. package/dist/mediaQualityMetrics/config.js +505 -493
  61. package/dist/mediaQualityMetrics/config.js.map +1 -1
  62. package/dist/meeting/in-meeting-actions.js +76 -2
  63. package/dist/meeting/in-meeting-actions.js.map +1 -1
  64. package/dist/meeting/index.js +2622 -2465
  65. package/dist/meeting/index.js.map +1 -1
  66. package/dist/meeting/locusMediaRequest.js +291 -0
  67. package/dist/meeting/locusMediaRequest.js.map +1 -0
  68. package/dist/meeting/muteState.js +229 -124
  69. package/dist/meeting/muteState.js.map +1 -1
  70. package/dist/meeting/request.js +189 -146
  71. package/dist/meeting/request.js.map +1 -1
  72. package/dist/meeting/util.js +478 -414
  73. package/dist/meeting/util.js.map +1 -1
  74. package/dist/meeting-info/index.js +48 -7
  75. package/dist/meeting-info/index.js.map +1 -1
  76. package/dist/meeting-info/meeting-info-v2.js +171 -51
  77. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  78. package/dist/meeting-info/utilv2.js +20 -5
  79. package/dist/meeting-info/utilv2.js.map +1 -1
  80. package/dist/meetings/collection.js +22 -0
  81. package/dist/meetings/collection.js.map +1 -1
  82. package/dist/meetings/index.js +350 -65
  83. package/dist/meetings/index.js.map +1 -1
  84. package/dist/meetings/meetings.types.js +7 -0
  85. package/dist/meetings/meetings.types.js.map +1 -0
  86. package/dist/meetings/request.js +2 -0
  87. package/dist/meetings/request.js.map +1 -1
  88. package/dist/meetings/util.js +88 -1
  89. package/dist/meetings/util.js.map +1 -1
  90. package/dist/member/index.js +49 -0
  91. package/dist/member/index.js.map +1 -1
  92. package/dist/member/types.js +25 -0
  93. package/dist/member/types.js.map +1 -0
  94. package/dist/member/util.js +98 -2
  95. package/dist/member/util.js.map +1 -1
  96. package/dist/members/collection.js +10 -0
  97. package/dist/members/collection.js.map +1 -1
  98. package/dist/members/index.js +86 -5
  99. package/dist/members/index.js.map +1 -1
  100. package/dist/members/request.js +106 -38
  101. package/dist/members/request.js.map +1 -1
  102. package/dist/members/types.js +15 -0
  103. package/dist/members/types.js.map +1 -0
  104. package/dist/members/util.js +316 -233
  105. package/dist/members/util.js.map +1 -1
  106. package/dist/metrics/constants.js +3 -5
  107. package/dist/metrics/constants.js.map +1 -1
  108. package/dist/metrics/index.js +1 -468
  109. package/dist/metrics/index.js.map +1 -1
  110. package/dist/multistream/mediaRequestManager.js +238 -49
  111. package/dist/multistream/mediaRequestManager.js.map +1 -1
  112. package/dist/multistream/receiveSlot.js +49 -16
  113. package/dist/multistream/receiveSlot.js.map +1 -1
  114. package/dist/multistream/receiveSlotManager.js +48 -30
  115. package/dist/multistream/receiveSlotManager.js.map +1 -1
  116. package/dist/multistream/remoteMedia.js +44 -18
  117. package/dist/multistream/remoteMedia.js.map +1 -1
  118. package/dist/multistream/remoteMediaGroup.js +60 -3
  119. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  120. package/dist/multistream/remoteMediaManager.js +173 -59
  121. package/dist/multistream/remoteMediaManager.js.map +1 -1
  122. package/dist/networkQualityMonitor/index.js +4 -2
  123. package/dist/networkQualityMonitor/index.js.map +1 -1
  124. package/dist/reachability/index.js +72 -27
  125. package/dist/reachability/index.js.map +1 -1
  126. package/dist/reachability/request.js +12 -5
  127. package/dist/reachability/request.js.map +1 -1
  128. package/dist/reactions/reactions.js +2 -2
  129. package/dist/reactions/reactions.js.map +1 -1
  130. package/dist/reactions/reactions.type.js +18 -18
  131. package/dist/reactions/reactions.type.js.map +1 -1
  132. package/dist/reconnection-manager/index.js +196 -155
  133. package/dist/reconnection-manager/index.js.map +1 -1
  134. package/dist/recording-controller/index.js +21 -1
  135. package/dist/recording-controller/index.js.map +1 -1
  136. package/dist/recording-controller/util.js +9 -8
  137. package/dist/recording-controller/util.js.map +1 -1
  138. package/dist/roap/index.js +21 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +110 -89
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +93 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/statsAnalyzer/global.js +1 -93
  145. package/dist/statsAnalyzer/global.js.map +1 -1
  146. package/dist/statsAnalyzer/index.js +326 -311
  147. package/dist/statsAnalyzer/index.js.map +1 -1
  148. package/dist/statsAnalyzer/mqaUtil.js +90 -53
  149. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  150. package/dist/types/annotation/annotation.types.d.ts +42 -0
  151. package/dist/types/annotation/constants.d.ts +31 -0
  152. package/dist/types/annotation/index.d.ts +117 -0
  153. package/dist/types/breakouts/breakout.d.ts +8 -0
  154. package/dist/types/breakouts/collection.d.ts +5 -0
  155. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  156. package/dist/types/breakouts/events.d.ts +8 -0
  157. package/dist/types/breakouts/index.d.ts +5 -0
  158. package/dist/types/breakouts/request.d.ts +22 -0
  159. package/dist/types/breakouts/utils.d.ts +15 -0
  160. package/dist/types/common/browser-detection.d.ts +9 -0
  161. package/dist/types/common/collection.d.ts +48 -0
  162. package/dist/types/common/config.d.ts +2 -0
  163. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  164. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  165. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  166. package/dist/types/common/errors/media.d.ts +15 -0
  167. package/dist/types/common/errors/parameter.d.ts +15 -0
  168. package/dist/types/common/errors/password-error.d.ts +15 -0
  169. package/dist/types/common/errors/permission.d.ts +14 -0
  170. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  171. package/dist/types/common/errors/reconnection.d.ts +15 -0
  172. package/dist/types/common/errors/stats.d.ts +15 -0
  173. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  174. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  175. package/dist/types/common/events/events-scope.d.ts +17 -0
  176. package/dist/types/common/events/events.d.ts +12 -0
  177. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  178. package/dist/types/common/events/util.d.ts +2 -0
  179. package/dist/types/common/logs/logger-config.d.ts +2 -0
  180. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  181. package/dist/types/common/logs/request.d.ts +34 -0
  182. package/dist/types/common/queue.d.ts +32 -0
  183. package/dist/types/config.d.ts +72 -0
  184. package/dist/types/constants.d.ts +1016 -0
  185. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  186. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  187. package/dist/types/controls-options-manager/index.d.ts +136 -0
  188. package/dist/types/controls-options-manager/types.d.ts +43 -0
  189. package/dist/types/controls-options-manager/util.d.ts +1 -0
  190. package/dist/types/index.d.ts +7 -0
  191. package/dist/types/interpretation/collection.d.ts +5 -0
  192. package/dist/types/interpretation/index.d.ts +5 -0
  193. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  194. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  195. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  196. package/dist/types/locus-info/fullState.d.ts +2 -0
  197. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  198. package/dist/types/locus-info/index.d.ts +315 -0
  199. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  200. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  201. package/dist/types/locus-info/parser.d.ts +212 -0
  202. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  203. package/dist/types/media/index.d.ts +34 -0
  204. package/dist/types/media/properties.d.ts +93 -0
  205. package/dist/types/media/util.d.ts +2 -0
  206. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  207. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  208. package/dist/types/meeting/index.d.ts +1467 -0
  209. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  210. package/dist/types/meeting/muteState.d.ts +184 -0
  211. package/dist/types/meeting/request.d.ts +270 -0
  212. package/dist/types/meeting/request.type.d.ts +11 -0
  213. package/dist/types/meeting/state.d.ts +9 -0
  214. package/dist/types/meeting/util.d.ts +77 -0
  215. package/dist/types/meeting-info/collection.d.ts +20 -0
  216. package/dist/types/meeting-info/index.d.ts +62 -0
  217. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  218. package/dist/types/meeting-info/request.d.ts +22 -0
  219. package/dist/types/meeting-info/util.d.ts +2 -0
  220. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  221. package/dist/types/meetings/collection.d.ts +31 -0
  222. package/dist/types/meetings/index.d.ts +365 -0
  223. package/dist/types/meetings/meetings.types.d.ts +4 -0
  224. package/dist/types/meetings/request.d.ts +27 -0
  225. package/dist/types/meetings/util.d.ts +18 -0
  226. package/dist/types/member/index.d.ts +159 -0
  227. package/dist/types/member/types.d.ts +32 -0
  228. package/dist/types/member/util.d.ts +2 -0
  229. package/dist/types/members/collection.d.ts +29 -0
  230. package/dist/types/members/index.d.ts +353 -0
  231. package/dist/types/members/request.d.ts +114 -0
  232. package/dist/types/members/types.d.ts +24 -0
  233. package/dist/types/members/util.d.ts +210 -0
  234. package/dist/types/metrics/constants.d.ts +55 -0
  235. package/dist/types/metrics/index.d.ts +45 -0
  236. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  237. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  238. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  239. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  240. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  241. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  242. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  243. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  244. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  245. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  246. package/dist/types/reachability/index.d.ts +152 -0
  247. package/dist/types/reachability/request.d.ts +37 -0
  248. package/dist/types/reactions/constants.d.ts +3 -0
  249. package/dist/types/reactions/reactions.d.ts +4 -0
  250. package/dist/types/reactions/reactions.type.d.ts +52 -0
  251. package/dist/types/reconnection-manager/index.d.ts +126 -0
  252. package/dist/types/recording-controller/enums.d.ts +7 -0
  253. package/dist/types/recording-controller/index.d.ts +208 -0
  254. package/dist/types/recording-controller/util.d.ts +14 -0
  255. package/dist/types/roap/index.d.ts +77 -0
  256. package/dist/types/roap/request.d.ts +36 -0
  257. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  258. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  259. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  260. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  261. package/dist/types/transcription/index.d.ts +64 -0
  262. package/package.json +26 -23
  263. package/src/annotation/annotation.types.ts +50 -0
  264. package/src/annotation/constants.ts +36 -0
  265. package/src/annotation/index.ts +328 -0
  266. package/src/breakouts/README.md +44 -14
  267. package/src/breakouts/breakout.ts +87 -9
  268. package/src/breakouts/edit-lock-error.ts +25 -0
  269. package/src/breakouts/events.ts +56 -0
  270. package/src/breakouts/index.ts +710 -10
  271. package/src/breakouts/request.ts +55 -0
  272. package/src/breakouts/utils.ts +57 -0
  273. package/src/common/errors/webex-errors.ts +6 -2
  274. package/src/common/logs/logger-proxy.ts +1 -1
  275. package/src/config.ts +2 -7
  276. package/src/constants.ts +157 -21
  277. package/src/controls-options-manager/constants.ts +5 -0
  278. package/src/controls-options-manager/enums.ts +18 -0
  279. package/src/controls-options-manager/index.ts +278 -0
  280. package/src/controls-options-manager/types.ts +59 -0
  281. package/src/controls-options-manager/util.ts +300 -0
  282. package/src/index.ts +39 -0
  283. package/src/interpretation/README.md +60 -0
  284. package/src/interpretation/collection.ts +19 -0
  285. package/src/interpretation/index.ts +318 -0
  286. package/src/interpretation/siLanguage.ts +18 -0
  287. package/src/locus-info/controlsUtils.ts +108 -0
  288. package/src/locus-info/index.ts +316 -38
  289. package/src/locus-info/mediaSharesUtils.ts +48 -0
  290. package/src/locus-info/parser.ts +1 -1
  291. package/src/locus-info/selfUtils.ts +81 -5
  292. package/src/media/index.ts +77 -142
  293. package/src/media/properties.ts +49 -90
  294. package/src/mediaQualityMetrics/config.ts +379 -377
  295. package/src/meeting/in-meeting-actions.ts +151 -3
  296. package/src/meeting/index.ts +1940 -2002
  297. package/src/meeting/locusMediaRequest.ts +309 -0
  298. package/src/meeting/muteState.ts +228 -132
  299. package/src/meeting/request.ts +96 -65
  300. package/src/meeting/util.ts +464 -396
  301. package/src/meeting-info/index.ts +54 -8
  302. package/src/meeting-info/meeting-info-v2.ts +148 -14
  303. package/src/meeting-info/utilv2.ts +13 -3
  304. package/src/meetings/collection.ts +20 -0
  305. package/src/meetings/index.ts +386 -84
  306. package/src/meetings/meetings.types.ts +12 -0
  307. package/src/meetings/request.ts +2 -0
  308. package/src/meetings/util.ts +103 -4
  309. package/src/member/index.ts +49 -0
  310. package/src/member/types.ts +38 -0
  311. package/src/member/util.ts +103 -0
  312. package/src/members/collection.ts +8 -0
  313. package/src/members/index.ts +107 -6
  314. package/src/members/request.ts +97 -17
  315. package/src/members/types.ts +28 -0
  316. package/src/members/util.ts +319 -240
  317. package/src/metrics/constants.ts +2 -4
  318. package/src/metrics/index.ts +1 -490
  319. package/src/multistream/mediaRequestManager.ts +289 -79
  320. package/src/multistream/receiveSlot.ts +55 -18
  321. package/src/multistream/receiveSlotManager.ts +42 -20
  322. package/src/multistream/remoteMedia.ts +28 -2
  323. package/src/multistream/remoteMediaGroup.ts +59 -0
  324. package/src/multistream/remoteMediaManager.ts +113 -32
  325. package/src/networkQualityMonitor/index.ts +6 -6
  326. package/src/reachability/index.ts +62 -15
  327. package/src/reachability/request.ts +10 -5
  328. package/src/reactions/reactions.ts +4 -4
  329. package/src/reactions/reactions.type.ts +3 -3
  330. package/src/reconnection-manager/index.ts +68 -43
  331. package/src/recording-controller/index.ts +20 -2
  332. package/src/recording-controller/util.ts +26 -9
  333. package/src/roap/index.ts +21 -30
  334. package/src/roap/request.ts +101 -95
  335. package/src/roap/turnDiscovery.ts +47 -25
  336. package/src/statsAnalyzer/global.ts +1 -94
  337. package/src/statsAnalyzer/index.ts +376 -386
  338. package/src/statsAnalyzer/mqaUtil.ts +100 -99
  339. package/test/integration/spec/converged-space-meetings.js +233 -0
  340. package/test/integration/spec/journey.js +336 -259
  341. package/test/integration/spec/space-meeting.js +77 -4
  342. package/test/unit/spec/annotation/index.ts +418 -0
  343. package/test/unit/spec/breakouts/breakout.ts +142 -24
  344. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  345. package/test/unit/spec/breakouts/events.ts +89 -0
  346. package/test/unit/spec/breakouts/index.ts +1545 -48
  347. package/test/unit/spec/breakouts/request.ts +104 -0
  348. package/test/unit/spec/breakouts/utils.js +72 -0
  349. package/test/unit/spec/controls-options-manager/index.js +287 -0
  350. package/test/unit/spec/controls-options-manager/util.js +582 -0
  351. package/test/unit/spec/fixture/locus.js +1 -0
  352. package/test/unit/spec/interpretation/collection.ts +15 -0
  353. package/test/unit/spec/interpretation/index.ts +570 -0
  354. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  355. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  356. package/test/unit/spec/locus-info/index.js +707 -22
  357. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  358. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  359. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  360. package/test/unit/spec/media/index.ts +129 -23
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +75 -3
  362. package/test/unit/spec/meeting/index.js +2812 -1375
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  364. package/test/unit/spec/meeting/muteState.js +370 -208
  365. package/test/unit/spec/meeting/request.js +338 -43
  366. package/test/unit/spec/meeting/utils.js +378 -55
  367. package/test/unit/spec/meeting-info/index.js +181 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +14 -0
  371. package/test/unit/spec/meetings/index.js +846 -121
  372. package/test/unit/spec/meetings/utils.js +206 -2
  373. package/test/unit/spec/member/index.js +58 -4
  374. package/test/unit/spec/member/util.js +415 -33
  375. package/test/unit/spec/members/index.js +320 -1
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +184 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  380. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  382. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
  385. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  386. package/test/unit/spec/reachability/index.ts +125 -8
  387. package/test/unit/spec/reachability/request.js +66 -0
  388. package/test/unit/spec/reconnection-manager/index.js +59 -6
  389. package/test/unit/spec/recording-controller/index.js +294 -218
  390. package/test/unit/spec/recording-controller/util.js +223 -96
  391. package/test/unit/spec/roap/index.ts +26 -51
  392. package/test/unit/spec/roap/request.ts +196 -85
  393. package/test/unit/spec/roap/turnDiscovery.ts +30 -7
  394. package/test/unit/spec/stats-analyzer/index.js +92 -41
  395. package/test/utils/constants.js +9 -0
  396. package/test/utils/integrationTestUtils.js +46 -0
  397. package/test/utils/testUtils.js +0 -45
  398. package/test/utils/webex-config.js +4 -0
  399. package/test/utils/webex-test-users.js +6 -3
  400. package/dist/meeting/effectsState.js +0 -262
  401. package/dist/meeting/effectsState.js.map +0 -1
  402. package/dist/metrics/config.js +0 -299
  403. package/dist/metrics/config.js.map +0 -1
  404. package/dist/multistream/multistreamMedia.js +0 -110
  405. package/dist/multistream/multistreamMedia.js.map +0 -1
  406. package/src/index.js +0 -15
  407. package/src/meeting/effectsState.ts +0 -211
  408. package/src/metrics/config.ts +0 -495
  409. package/src/multistream/multistreamMedia.ts +0 -97
  410. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -1,4 +1,4 @@
1
- import {isEqual} from 'lodash';
1
+ import {isEqual, assignWith, cloneDeep} from 'lodash';
2
2
 
3
3
  import LoggerProxy from '../common/logs/logger-proxy';
4
4
  import EventsScope from '../common/events/events-scope';
@@ -17,8 +17,6 @@ import {
17
17
  CALL_REMOVED_REASON,
18
18
  RECORDING_STATE,
19
19
  } from '../constants';
20
- import Metrics from '../metrics';
21
- import {eventType} from '../metrics/config';
22
20
  import InfoUtils from './infoUtils';
23
21
  import FullState from './fullState';
24
22
  import SelfUtils from './selfUtils';
@@ -59,11 +57,19 @@ export default class LocusInfo extends EventsScope {
59
57
  fullState: any;
60
58
  host: any;
61
59
  info: any;
60
+ roles: any;
62
61
  mediaShares: any;
63
62
  replace: any;
64
63
  url: any;
65
64
  services: any;
66
-
65
+ mainSessionLocusCache: any;
66
+ /**
67
+ * Constructor
68
+ * @param {boolean} updateMeeting true if the meeting should be updated
69
+ * @param {object} webex
70
+ * @param {string} meetingId
71
+ * @returns {undefined}
72
+ */
67
73
  constructor(updateMeeting, webex, meetingId) {
68
74
  super();
69
75
  this.parsedLocus = {
@@ -99,7 +105,7 @@ export default class LocusInfo extends EventsScope {
99
105
  meeting.meetingRequest
100
106
  .getFullLocus({
101
107
  desync: true,
102
- locusUrl: meeting.locusUrl,
108
+ locusUrl: locus.url ? locus.url : meeting.locusUrl,
103
109
  })
104
110
  .then((res) => {
105
111
  meeting.locusInfo.onFullLocus(res.body);
@@ -172,12 +178,13 @@ export default class LocusInfo extends EventsScope {
172
178
  */
173
179
  this.deltaParticipants = [];
174
180
 
181
+ this.updateLocusCache(locus);
175
182
  // above section only updates the locusInfo object
176
183
  // The below section makes sure it updates the locusInfo as well as updates the meeting object
177
184
  this.updateParticipants(locus.participants);
178
185
  // For 1:1 space meeting the conversation Url does not exist in locus.conversation
179
186
  this.updateConversationUrl(locus.conversationUrl, locus.info);
180
- this.updateControls(locus.controls);
187
+ this.updateControls(locus.controls, locus.self);
181
188
  this.updateLocusUrl(locus.url);
182
189
  this.updateFullState(locus.fullState);
183
190
  this.updateMeetingInfo(locus.info);
@@ -195,6 +202,7 @@ export default class LocusInfo extends EventsScope {
195
202
  * @memberof LocusInfo
196
203
  */
197
204
  initialSetup(locus: object) {
205
+ this.updateLocusCache(locus);
198
206
  this.onFullLocus(locus);
199
207
 
200
208
  // Change it to true after it receives it first locus object
@@ -210,7 +218,7 @@ export default class LocusInfo extends EventsScope {
210
218
  parse(meeting: any, data: any) {
211
219
  // eslint-disable-next-line @typescript-eslint/no-shadow
212
220
  const {eventType} = data;
213
-
221
+ const locus = this.getTheLocusToUpdate(data.locus);
214
222
  LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);
215
223
 
216
224
  switch (eventType) {
@@ -228,16 +236,16 @@ export default class LocusInfo extends EventsScope {
228
236
  case LOCUSEVENT.PARTICIPANT_DECLINED:
229
237
  case LOCUSEVENT.FLOOR_GRANTED:
230
238
  case LOCUSEVENT.FLOOR_RELEASED:
231
- this.onFullLocus(data.locus, eventType);
239
+ this.onFullLocus(locus, eventType);
232
240
  break;
233
241
  case LOCUSEVENT.DIFFERENCE:
234
- this.handleLocusDelta(data.locus, meeting);
242
+ this.handleLocusDelta(locus, meeting);
235
243
  break;
236
244
 
237
245
  default:
238
246
  // Why will there be a event with no eventType ????
239
247
  // we may not need this, we can get full locus
240
- this.handleLocusDelta(data.locus, meeting);
248
+ this.handleLocusDelta(locus, meeting);
241
249
  }
242
250
  }
243
251
 
@@ -269,8 +277,9 @@ export default class LocusInfo extends EventsScope {
269
277
  this.updateParticipantDeltas(locus.participants);
270
278
  this.scheduledMeeting = locus.meeting || null;
271
279
  this.participants = locus.participants;
280
+ const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
272
281
  this.updateLocusInfo(locus);
273
- this.updateParticipants(locus.participants);
282
+ this.updateParticipants(locus.participants, isReplaceMembers);
274
283
  this.isMeetingActive();
275
284
  this.handleOneOnOneEvent(eventType);
276
285
  this.updateEmbeddedApps(locus.embeddedApps);
@@ -329,8 +338,9 @@ export default class LocusInfo extends EventsScope {
329
338
  * @memberof LocusInfo
330
339
  */
331
340
  onDeltaLocus(locus: any) {
341
+ const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
332
342
  this.updateLocusInfo(locus);
333
- this.updateParticipants(locus.participants);
343
+ this.updateParticipants(locus.participants, isReplaceMembers);
334
344
  this.isMeetingActive();
335
345
  }
336
346
 
@@ -347,7 +357,7 @@ export default class LocusInfo extends EventsScope {
347
357
  return;
348
358
  }
349
359
 
350
- this.updateControls(locus.controls);
360
+ this.updateControls(locus.controls, locus.self);
351
361
  this.updateConversationUrl(locus.conversationUrl, locus.info);
352
362
  this.updateCreated(locus.created);
353
363
  this.updateFullState(locus.fullState);
@@ -418,10 +428,15 @@ export default class LocusInfo extends EventsScope {
418
428
  LoggerProxy.logger.warn(
419
429
  'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'
420
430
  );
421
- Metrics.postEvent({
422
- event: eventType.REMOTE_ENDED,
423
- meetingId: this.meetingId,
431
+
432
+ // @ts-ignore
433
+ this.webex.internal.newMetrics.submitClientEvent({
434
+ name: 'client.call.remote-ended',
435
+ options: {
436
+ meetingId: this.meetingId,
437
+ },
424
438
  });
439
+
425
440
  this.emitScoped(
426
441
  {
427
442
  file: 'locus-info',
@@ -440,9 +455,12 @@ export default class LocusInfo extends EventsScope {
440
455
  this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||
441
456
  this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)
442
457
  ) {
443
- Metrics.postEvent({
444
- event: eventType.REMOTE_ENDED,
445
- meetingId: this.meetingId,
458
+ // @ts-ignore
459
+ this.webex.internal.newMetrics.submitClientEvent({
460
+ name: 'client.call.remote-ended',
461
+ options: {
462
+ meetingId: this.meetingId,
463
+ },
446
464
  });
447
465
  this.emitScoped(
448
466
  {
@@ -464,10 +482,14 @@ export default class LocusInfo extends EventsScope {
464
482
  partner.state === MEETING_STATE.STATES.NOTIFIED ||
465
483
  partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media
466
484
  ) {
467
- Metrics.postEvent({
468
- event: eventType.REMOTE_ENDED,
469
- meetingId: this.meetingId,
485
+ // @ts-ignore
486
+ this.webex.internal.newMetrics.submitClientEvent({
487
+ name: 'client.call.remote-ended',
488
+ options: {
489
+ meetingId: this.meetingId,
490
+ },
470
491
  });
492
+
471
493
  this.emitScoped(
472
494
  {
473
495
  file: 'locus-info',
@@ -490,9 +512,13 @@ export default class LocusInfo extends EventsScope {
490
512
  LoggerProxy.logger.warn(
491
513
  'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'
492
514
  );
493
- Metrics.postEvent({
494
- event: eventType.REMOTE_ENDED,
495
- meetingId: this.meetingId,
515
+
516
+ // @ts-ignore
517
+ this.webex.internal.newMetrics.submitClientEvent({
518
+ name: 'client.call.remote-ended',
519
+ options: {
520
+ meetingId: this.meetingId,
521
+ },
496
522
  });
497
523
  this.emitScoped(
498
524
  {
@@ -507,9 +533,13 @@ export default class LocusInfo extends EventsScope {
507
533
  );
508
534
  } else if (this.fullState && this.fullState.removed) {
509
535
  // user has been dropped from a meeting
510
- Metrics.postEvent({
511
- event: eventType.REMOTE_ENDED,
512
- meetingId: this.meetingId,
536
+
537
+ // @ts-ignore
538
+ this.webex.internal.newMetrics.submitClientEvent({
539
+ name: 'client.call.remote-ended',
540
+ options: {
541
+ meetingId: this.meetingId,
542
+ },
513
543
  });
514
544
  this.emitScoped(
515
545
  {
@@ -646,13 +676,13 @@ export default class LocusInfo extends EventsScope {
646
676
  }
647
677
 
648
678
  /**
649
- *
679
+ * update meeting's members
650
680
  * @param {Object} participants new participants object
651
- * @param {boolen} deltaParticpantFlag delta event
681
+ * @param {Boolean} isReplace is replace the whole members
652
682
  * @returns {Array} updatedParticipants
653
683
  * @memberof LocusInfo
654
684
  */
655
- updateParticipants(participants: object) {
685
+ updateParticipants(participants: object, isReplace?: boolean) {
656
686
  this.emitScoped(
657
687
  {
658
688
  file: 'locus-info',
@@ -665,16 +695,18 @@ export default class LocusInfo extends EventsScope {
665
695
  selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
666
696
  selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
667
697
  hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
698
+ isReplace,
668
699
  }
669
700
  );
670
701
  }
671
702
 
672
703
  /**
673
704
  * @param {Object} controls
705
+ * @param {Object} self
674
706
  * @returns {undefined}
675
707
  * @memberof LocusInfo
676
708
  */
677
- updateControls(controls: object) {
709
+ updateControls(controls: object, self: object) {
678
710
  if (controls && !isEqual(this.controls, controls)) {
679
711
  this.parsedLocus.controls = ControlsUtils.parse(controls);
680
712
  const {
@@ -685,10 +717,76 @@ export default class LocusInfo extends EventsScope {
685
717
  hasTranscribeChanged,
686
718
  hasEntryExitToneChanged,
687
719
  hasBreakoutChanged,
720
+ hasVideoEnabledChanged,
721
+ hasMuteOnEntryChanged,
722
+ hasShareControlChanged,
723
+ hasDisallowUnmuteChanged,
724
+ hasReactionsChanged,
725
+ hasReactionDisplayNamesChanged,
726
+ hasViewTheParticipantListChanged,
727
+ hasRaiseHandChanged,
728
+ hasVideoChanged,
729
+ hasInterpretationChanged,
688
730
  },
689
731
  current,
690
732
  } = ControlsUtils.getControls(this.controls, controls);
691
733
 
734
+ if (hasMuteOnEntryChanged) {
735
+ this.emitScoped(
736
+ {file: 'locus-info', function: 'updateControls'},
737
+ LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,
738
+ {state: current.muteOnEntry}
739
+ );
740
+ }
741
+
742
+ if (hasShareControlChanged) {
743
+ this.emitScoped(
744
+ {file: 'locus-info', function: 'updateControls'},
745
+ LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,
746
+ {state: current.shareControl}
747
+ );
748
+ }
749
+
750
+ if (hasDisallowUnmuteChanged) {
751
+ this.emitScoped(
752
+ {file: 'locus-info', function: 'updateControls'},
753
+ LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,
754
+ {state: current.disallowUnmute}
755
+ );
756
+ }
757
+
758
+ if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
759
+ this.emitScoped(
760
+ {file: 'locus-info', function: 'updateControls'},
761
+ LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,
762
+ {state: current.reactions}
763
+ );
764
+ }
765
+
766
+ if (hasViewTheParticipantListChanged) {
767
+ this.emitScoped(
768
+ {file: 'locus-info', function: 'updateControls'},
769
+ LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,
770
+ {state: current.viewTheParticipantList}
771
+ );
772
+ }
773
+
774
+ if (hasRaiseHandChanged) {
775
+ this.emitScoped(
776
+ {file: 'locus-info', function: 'updateControls'},
777
+ LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,
778
+ {state: current.raiseHand}
779
+ );
780
+ }
781
+
782
+ if (hasVideoChanged) {
783
+ this.emitScoped(
784
+ {file: 'locus-info', function: 'updateControls'},
785
+ LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,
786
+ {state: current.video}
787
+ );
788
+ }
789
+
692
790
  if (hasRecordingChanged || hasRecordingPausedChanged) {
693
791
  let state = null;
694
792
 
@@ -750,7 +848,10 @@ export default class LocusInfo extends EventsScope {
750
848
 
751
849
  if (hasBreakoutChanged) {
752
850
  const {breakout} = current;
753
-
851
+ breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(
852
+ self,
853
+ this.webex.internal.device.url
854
+ );
754
855
  this.emitScoped(
755
856
  {
756
857
  file: 'locus-info',
@@ -763,9 +864,25 @@ export default class LocusInfo extends EventsScope {
763
864
  );
764
865
  }
765
866
 
867
+ if (hasInterpretationChanged) {
868
+ const {interpretation} = current;
869
+ this.emitScoped(
870
+ {
871
+ file: 'locus-info',
872
+ function: 'updateControls',
873
+ },
874
+ LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,
875
+ {
876
+ interpretation,
877
+ }
878
+ );
879
+ }
880
+
766
881
  if (hasEntryExitToneChanged) {
767
882
  const {entryExitTone} = current;
768
883
 
884
+ this.updateMeeting({entryExitTone});
885
+
769
886
  this.emitScoped(
770
887
  {
771
888
  file: 'locus-info',
@@ -776,8 +893,26 @@ export default class LocusInfo extends EventsScope {
776
893
  entryExitTone,
777
894
  }
778
895
  );
896
+ }
779
897
 
780
- this.updateMeeting({entryExitTone});
898
+ // videoEnabled is handled differently than other controls,
899
+ // to fit with audio mute status logic
900
+ if (hasVideoEnabledChanged) {
901
+ const {videoEnabled} = current;
902
+
903
+ this.updateMeeting({unmuteVideoAllowed: videoEnabled});
904
+
905
+ this.emitScoped(
906
+ {
907
+ file: 'locus-info',
908
+ function: 'updateControls',
909
+ },
910
+ LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
911
+ {
912
+ // muted: not part of locus.controls
913
+ unmuteAllowed: videoEnabled,
914
+ }
915
+ );
781
916
  }
782
917
 
783
918
  this.controls = controls;
@@ -918,8 +1053,11 @@ export default class LocusInfo extends EventsScope {
918
1053
  * @memberof LocusInfo
919
1054
  */
920
1055
  updateMeetingInfo(info: object, self?: object) {
921
- if (info && !isEqual(this.info, info)) {
922
- const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
1056
+ const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
1057
+ if (
1058
+ (info && !isEqual(this.info, info)) ||
1059
+ (roles.length && !isEqual(this.roles, roles) && info)
1060
+ ) {
923
1061
  const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
924
1062
  const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
925
1063
 
@@ -958,6 +1096,7 @@ export default class LocusInfo extends EventsScope {
958
1096
  // Parses the info and adds necessary values
959
1097
  this.updateMeeting(parsedInfo.current);
960
1098
  }
1099
+ this.roles = roles;
961
1100
  }
962
1101
 
963
1102
  /**
@@ -998,6 +1137,8 @@ export default class LocusInfo extends EventsScope {
998
1137
  const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);
999
1138
 
1000
1139
  this.updateMeeting(parsedMediaShares.current);
1140
+ this.parsedLocus.mediaShares = parsedMediaShares.current;
1141
+ this.mediaShares = mediaShares;
1001
1142
  this.emitScoped(
1002
1143
  {
1003
1144
  file: 'locus-info',
@@ -1009,8 +1150,6 @@ export default class LocusInfo extends EventsScope {
1009
1150
  previous: parsedMediaShares.previous,
1010
1151
  }
1011
1152
  );
1012
- this.parsedLocus.mediaShares = parsedMediaShares.current;
1013
- this.mediaShares = mediaShares;
1014
1153
  }
1015
1154
  }
1016
1155
 
@@ -1099,6 +1238,20 @@ export default class LocusInfo extends EventsScope {
1099
1238
  );
1100
1239
  }
1101
1240
 
1241
+ if (parsedSelves.updates.interpretationChanged) {
1242
+ this.emitScoped(
1243
+ {
1244
+ file: 'locus-info',
1245
+ function: 'updateSelf',
1246
+ },
1247
+ LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,
1248
+ {
1249
+ interpretation: parsedSelves.current.interpretation,
1250
+ selfParticipantId: parsedSelves.current.selfId,
1251
+ }
1252
+ );
1253
+ }
1254
+
1102
1255
  if (parsedSelves.updates.isMediaInactiveOrReleased) {
1103
1256
  this.emitScoped(
1104
1257
  {
@@ -1120,6 +1273,31 @@ export default class LocusInfo extends EventsScope {
1120
1273
  self
1121
1274
  );
1122
1275
  }
1276
+
1277
+ if (parsedSelves.updates.isRolesChanged) {
1278
+ this.emitScoped(
1279
+ {
1280
+ file: 'locus-info',
1281
+ function: 'updateSelf',
1282
+ },
1283
+ LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,
1284
+ {oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}
1285
+ );
1286
+ }
1287
+
1288
+ if (parsedSelves.updates.isVideoMutedByOthersChanged) {
1289
+ this.emitScoped(
1290
+ {
1291
+ file: 'locus-info',
1292
+ function: 'updateSelf',
1293
+ },
1294
+ LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
1295
+ {
1296
+ muted: parsedSelves.current.remoteVideoMuted,
1297
+ // unmuteAllowed: not part of .self
1298
+ }
1299
+ );
1300
+ }
1123
1301
  if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
1124
1302
  this.emitScoped(
1125
1303
  {
@@ -1334,4 +1512,104 @@ export default class LocusInfo extends EventsScope {
1334
1512
  this.identities = identities;
1335
1513
  }
1336
1514
  }
1515
+
1516
+ /**
1517
+ * check the locus is main session's one or not, if is main session's, update main session cache
1518
+ * @param {Object} locus
1519
+ * @returns {undefined}
1520
+ * @memberof LocusInfo
1521
+ */
1522
+ updateLocusCache(locus: any) {
1523
+ const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);
1524
+ if (isMainSessionDTO) {
1525
+ this.updateMainSessionLocusCache(locus);
1526
+ }
1527
+ }
1528
+
1529
+ /**
1530
+ * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
1531
+ * if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
1532
+ * @param {Object} newLocus
1533
+ * @returns {Object}
1534
+ * @memberof LocusInfo
1535
+ */
1536
+ getTheLocusToUpdate(newLocus: any) {
1537
+ const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus?.controls);
1538
+ if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
1539
+ return cloneDeep(this.mainSessionLocusCache);
1540
+ }
1541
+ if (switchStatus.isJoinToBreakout) {
1542
+ this.emitScoped(
1543
+ {
1544
+ file: 'locus-info',
1545
+ function: 'updateControls',
1546
+ },
1547
+ LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,
1548
+ {
1549
+ mainLocusUrl: this.url,
1550
+ }
1551
+ );
1552
+ }
1553
+
1554
+ return newLocus;
1555
+ }
1556
+
1557
+ /**
1558
+ * merge participants by participant id
1559
+ * @param {Array} participants
1560
+ * @param {Array} sourceParticipants
1561
+ * @returns {Array} merged participants
1562
+ * @memberof LocusInfo
1563
+ */
1564
+ // eslint-disable-next-line class-methods-use-this
1565
+ mergeParticipants(participants, sourceParticipants) {
1566
+ if (!sourceParticipants || !sourceParticipants.length) return participants;
1567
+ if (!participants || !participants.length) {
1568
+ return sourceParticipants;
1569
+ }
1570
+ sourceParticipants.forEach((participant) => {
1571
+ const existIndex = participants.findIndex((p) => p.id === participant.id);
1572
+ if (existIndex > -1) {
1573
+ participants.splice(existIndex, 1, participant);
1574
+ } else {
1575
+ participants.push(participant);
1576
+ }
1577
+ });
1578
+
1579
+ return participants;
1580
+ }
1581
+
1582
+ /**
1583
+ * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
1584
+ * @param {Object} mainLocus
1585
+ * @returns {undefined}
1586
+ * @memberof LocusInfo
1587
+ */
1588
+ updateMainSessionLocusCache(mainLocus: any) {
1589
+ if (!mainLocus) {
1590
+ return;
1591
+ }
1592
+ const locusClone = cloneDeep(mainLocus);
1593
+ if (this.mainSessionLocusCache) {
1594
+ // shallow merge and do special merge for participants
1595
+ assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {
1596
+ if (key === 'participants') {
1597
+ return this.mergeParticipants(objValue, srcValue);
1598
+ }
1599
+
1600
+ return srcValue || objValue;
1601
+ });
1602
+ } else {
1603
+ this.mainSessionLocusCache = locusClone;
1604
+ }
1605
+ }
1606
+
1607
+ /**
1608
+ * clear main session cache
1609
+ * @returns {undefined}
1610
+ * @memberof LocusInfo
1611
+ */
1612
+ clearMainSessionLocusCache() {
1613
+ this.mainSessionLocusCache = null;
1614
+ }
1337
1615
  }
@@ -13,6 +13,9 @@ MediaSharesUtils.parse = (mediaShares: object) => {
13
13
  content: {
14
14
  beneficiaryId: MediaSharesUtils.getContentBeneficiaryId(mediaShares),
15
15
  disposition: MediaSharesUtils.getContentDisposition(mediaShares),
16
+ annotation: MediaSharesUtils.getContentAnnotation(mediaShares),
17
+ url: MediaSharesUtils.getContentUrl(mediaShares),
18
+ shareInstanceId: MediaSharesUtils.getShareInstanceId(mediaShares),
16
19
  },
17
20
  whiteboard: {
18
21
  beneficiaryId: MediaSharesUtils.getWhiteboardBeneficiaryId(mediaShares),
@@ -140,6 +143,51 @@ MediaSharesUtils.getContentBeneficiaryId = (mediaShares: object) => {
140
143
  return contentFloor.beneficiary.id;
141
144
  };
142
145
 
146
+ /**
147
+ * get live annotation is sharing from media shares (content)
148
+ * @param {Object} mediaShares
149
+ * @returns {Object}
150
+ */
151
+ MediaSharesUtils.getContentAnnotation = (mediaShares: object) => {
152
+ const extractContent = MediaSharesUtils.extractContent(mediaShares);
153
+
154
+ if (!extractContent || !extractContent.annotation) {
155
+ return undefined;
156
+ }
157
+
158
+ return extractContent.annotation;
159
+ };
160
+
161
+ /**
162
+ * get url is sharing from media shares (content)
163
+ * @param {Object} mediaShares
164
+ * @returns {Object}
165
+ */
166
+ MediaSharesUtils.getContentUrl = (mediaShares: object) => {
167
+ const extractContent = MediaSharesUtils.extractContent(mediaShares);
168
+
169
+ if (!extractContent || !extractContent.url) {
170
+ return undefined;
171
+ }
172
+
173
+ return extractContent.url;
174
+ };
175
+
176
+ /**
177
+ * get shareInstanceId is sharing from media shares (content)
178
+ * @param {Object} mediaShares
179
+ * @returns {Object}
180
+ */
181
+ MediaSharesUtils.getShareInstanceId = (mediaShares: object) => {
182
+ const extractContent = MediaSharesUtils.extractContent(mediaShares);
183
+
184
+ if (!extractContent || !extractContent.floor || !extractContent.floor.shareInstanceId) {
185
+ return undefined;
186
+ }
187
+
188
+ return extractContent.floor.shareInstanceId;
189
+ };
190
+
143
191
  /**
144
192
  * get who is sharing from media shares (whiteboard)
145
193
  * @param {Object} mediaShares
@@ -478,7 +478,7 @@ export default class Parser {
478
478
  * @param {Types~Locus} locus Locus delta
479
479
  * @returns {undefined}
480
480
  */
481
- // eslint-disable-next-line no-unused-vars
481
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
482
482
  onDeltaAction(action: string, locus) {}
483
483
 
484
484
  /**