@webex/plugin-meetings 3.0.0-beta.15 → 3.0.0-beta.151

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 (480) hide show
  1. package/README.md +45 -1
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +359 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +193 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +23 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +52 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +43 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1046 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +78 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +67 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/browser-detection.js +1 -21
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +5 -20
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +0 -7
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +0 -21
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +0 -21
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +0 -21
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +0 -21
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/parameter.js +0 -28
  37. package/dist/common/errors/parameter.js.map +1 -1
  38. package/dist/common/errors/password-error.js +0 -21
  39. package/dist/common/errors/password-error.js.map +1 -1
  40. package/dist/common/errors/permission.js +0 -21
  41. package/dist/common/errors/permission.js.map +1 -1
  42. package/dist/common/errors/reconnection-in-progress.js +0 -17
  43. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  44. package/dist/common/errors/reconnection.js +0 -21
  45. package/dist/common/errors/reconnection.js.map +1 -1
  46. package/dist/common/errors/stats.js +0 -21
  47. package/dist/common/errors/stats.js.map +1 -1
  48. package/dist/common/errors/webex-errors.js +9 -43
  49. package/dist/common/errors/webex-errors.js.map +1 -1
  50. package/dist/common/errors/webex-meetings-error.js +1 -24
  51. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  52. package/dist/common/events/events-scope.js +0 -22
  53. package/dist/common/events/events-scope.js.map +1 -1
  54. package/dist/common/events/events.js +0 -23
  55. package/dist/common/events/events.js.map +1 -1
  56. package/dist/common/events/trigger-proxy.js +0 -12
  57. package/dist/common/events/trigger-proxy.js.map +1 -1
  58. package/dist/common/events/util.js +0 -15
  59. package/dist/common/events/util.js.map +1 -1
  60. package/dist/common/logs/logger-config.js +0 -4
  61. package/dist/common/logs/logger-config.js.map +1 -1
  62. package/dist/common/logs/logger-proxy.js +1 -8
  63. package/dist/common/logs/logger-proxy.js.map +1 -1
  64. package/dist/common/logs/request.js +35 -61
  65. package/dist/common/logs/request.js.map +1 -1
  66. package/dist/common/queue.js +4 -14
  67. package/dist/common/queue.js.map +1 -1
  68. package/dist/config.js +7 -13
  69. package/dist/config.js.map +1 -1
  70. package/dist/constants.js +208 -64
  71. package/dist/constants.js.map +1 -1
  72. package/dist/controls-options-manager/constants.js +14 -0
  73. package/dist/controls-options-manager/constants.js.map +1 -0
  74. package/dist/controls-options-manager/enums.js +27 -0
  75. package/dist/controls-options-manager/enums.js.map +1 -0
  76. package/dist/controls-options-manager/index.js +297 -0
  77. package/dist/controls-options-manager/index.js.map +1 -0
  78. package/dist/controls-options-manager/types.js +7 -0
  79. package/dist/controls-options-manager/types.js.map +1 -0
  80. package/dist/controls-options-manager/util.js +300 -0
  81. package/dist/controls-options-manager/util.js.map +1 -0
  82. package/dist/index.js +78 -17
  83. package/dist/index.js.map +1 -1
  84. package/dist/locus-info/controlsUtils.js +100 -29
  85. package/dist/locus-info/controlsUtils.js.map +1 -1
  86. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  87. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  88. package/dist/locus-info/fullState.js +0 -15
  89. package/dist/locus-info/fullState.js.map +1 -1
  90. package/dist/locus-info/hostUtils.js +4 -12
  91. package/dist/locus-info/hostUtils.js.map +1 -1
  92. package/dist/locus-info/index.js +387 -208
  93. package/dist/locus-info/index.js.map +1 -1
  94. package/dist/locus-info/infoUtils.js +0 -38
  95. package/dist/locus-info/infoUtils.js.map +1 -1
  96. package/dist/locus-info/mediaSharesUtils.js +54 -38
  97. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  98. package/dist/locus-info/parser.js +90 -126
  99. package/dist/locus-info/parser.js.map +1 -1
  100. package/dist/locus-info/selfUtils.js +93 -92
  101. package/dist/locus-info/selfUtils.js.map +1 -1
  102. package/dist/media/index.js +70 -219
  103. package/dist/media/index.js.map +1 -1
  104. package/dist/media/properties.js +74 -198
  105. package/dist/media/properties.js.map +1 -1
  106. package/dist/media/util.js +1 -8
  107. package/dist/media/util.js.map +1 -1
  108. package/dist/mediaQualityMetrics/config.js +505 -495
  109. package/dist/mediaQualityMetrics/config.js.map +1 -1
  110. package/dist/meeting/in-meeting-actions.js +79 -14
  111. package/dist/meeting/in-meeting-actions.js.map +1 -1
  112. package/dist/meeting/index.js +2685 -3324
  113. package/dist/meeting/index.js.map +1 -1
  114. package/dist/meeting/locusMediaRequest.js +291 -0
  115. package/dist/meeting/locusMediaRequest.js.map +1 -0
  116. package/dist/meeting/muteState.js +243 -185
  117. package/dist/meeting/muteState.js.map +1 -1
  118. package/dist/meeting/request.js +296 -342
  119. package/dist/meeting/request.js.map +1 -1
  120. package/dist/meeting/request.type.js +0 -1
  121. package/dist/meeting/request.type.js.map +1 -1
  122. package/dist/meeting/state.js +16 -26
  123. package/dist/meeting/state.js.map +1 -1
  124. package/dist/meeting/util.js +446 -585
  125. package/dist/meeting/util.js.map +1 -1
  126. package/dist/meeting-info/collection.js +3 -25
  127. package/dist/meeting-info/collection.js.map +1 -1
  128. package/dist/meeting-info/index.js +8 -31
  129. package/dist/meeting-info/index.js.map +1 -1
  130. package/dist/meeting-info/meeting-info-v2.js +261 -242
  131. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  132. package/dist/meeting-info/request.js +1 -16
  133. package/dist/meeting-info/request.js.map +1 -1
  134. package/dist/meeting-info/util.js +98 -183
  135. package/dist/meeting-info/util.js.map +1 -1
  136. package/dist/meeting-info/utilv2.js +156 -232
  137. package/dist/meeting-info/utilv2.js.map +1 -1
  138. package/dist/meetings/collection.js +24 -20
  139. package/dist/meetings/collection.js.map +1 -1
  140. package/dist/meetings/index.js +526 -372
  141. package/dist/meetings/index.js.map +1 -1
  142. package/dist/meetings/meetings.types.js +7 -0
  143. package/dist/meetings/meetings.types.js.map +1 -0
  144. package/dist/meetings/request.js +21 -40
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +172 -141
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.js +58 -57
  149. package/dist/member/index.js.map +1 -1
  150. package/dist/member/types.js +15 -0
  151. package/dist/member/types.js.map +1 -0
  152. package/dist/member/util.js +101 -69
  153. package/dist/member/util.js.map +1 -1
  154. package/dist/members/collection.js +12 -12
  155. package/dist/members/collection.js.map +1 -1
  156. package/dist/members/index.js +123 -162
  157. package/dist/members/index.js.map +1 -1
  158. package/dist/members/request.js +120 -85
  159. package/dist/members/request.js.map +1 -1
  160. package/dist/members/types.js +15 -0
  161. package/dist/members/types.js.map +1 -0
  162. package/dist/members/util.js +314 -260
  163. package/dist/members/util.js.map +1 -1
  164. package/dist/metrics/config.js +50 -16
  165. package/dist/metrics/config.js.map +1 -1
  166. package/dist/metrics/constants.js +4 -7
  167. package/dist/metrics/constants.js.map +1 -1
  168. package/dist/metrics/index.js +75 -147
  169. package/dist/metrics/index.js.map +1 -1
  170. package/dist/multistream/mediaRequestManager.js +170 -50
  171. package/dist/multistream/mediaRequestManager.js.map +1 -1
  172. package/dist/multistream/receiveSlot.js +58 -65
  173. package/dist/multistream/receiveSlot.js.map +1 -1
  174. package/dist/multistream/receiveSlotManager.js +73 -94
  175. package/dist/multistream/receiveSlotManager.js.map +1 -1
  176. package/dist/multistream/remoteMedia.js +55 -74
  177. package/dist/multistream/remoteMedia.js.map +1 -1
  178. package/dist/multistream/remoteMediaGroup.js +66 -43
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +502 -442
  181. package/dist/multistream/remoteMediaManager.js.map +1 -1
  182. package/dist/networkQualityMonitor/index.js +24 -51
  183. package/dist/networkQualityMonitor/index.js.map +1 -1
  184. package/dist/personal-meeting-room/index.js +3 -38
  185. package/dist/personal-meeting-room/index.js.map +1 -1
  186. package/dist/personal-meeting-room/request.js +2 -33
  187. package/dist/personal-meeting-room/request.js.map +1 -1
  188. package/dist/personal-meeting-room/util.js +0 -13
  189. package/dist/personal-meeting-room/util.js.map +1 -1
  190. package/dist/reachability/index.js +190 -199
  191. package/dist/reachability/index.js.map +1 -1
  192. package/dist/reachability/request.js +14 -23
  193. package/dist/reachability/request.js.map +1 -1
  194. package/dist/reactions/constants.js +13 -0
  195. package/dist/reactions/constants.js.map +1 -0
  196. package/dist/reactions/reactions.js +2 -4
  197. package/dist/reactions/reactions.js.map +1 -1
  198. package/dist/reactions/reactions.type.js +18 -24
  199. package/dist/reactions/reactions.type.js.map +1 -1
  200. package/dist/reconnection-manager/index.js +356 -476
  201. package/dist/reconnection-manager/index.js.map +1 -1
  202. package/dist/recording-controller/enums.js +17 -0
  203. package/dist/recording-controller/enums.js.map +1 -0
  204. package/dist/recording-controller/index.js +343 -0
  205. package/dist/recording-controller/index.js.map +1 -0
  206. package/dist/recording-controller/util.js +63 -0
  207. package/dist/recording-controller/util.js.map +1 -0
  208. package/dist/roap/index.js +32 -75
  209. package/dist/roap/index.js.map +1 -1
  210. package/dist/roap/request.js +129 -136
  211. package/dist/roap/request.js.map +1 -1
  212. package/dist/roap/turnDiscovery.js +143 -103
  213. package/dist/roap/turnDiscovery.js.map +1 -1
  214. package/dist/statsAnalyzer/global.js +1 -95
  215. package/dist/statsAnalyzer/global.js.map +1 -1
  216. package/dist/statsAnalyzer/index.js +369 -462
  217. package/dist/statsAnalyzer/index.js.map +1 -1
  218. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  219. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  220. package/dist/transcription/index.js +9 -44
  221. package/dist/transcription/index.js.map +1 -1
  222. package/dist/types/annotation/annotation.types.d.ts +43 -0
  223. package/dist/types/annotation/constants.d.ts +31 -0
  224. package/dist/types/annotation/index.d.ts +124 -0
  225. package/dist/types/breakouts/breakout.d.ts +8 -0
  226. package/dist/types/breakouts/collection.d.ts +5 -0
  227. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  228. package/dist/types/breakouts/events.d.ts +2 -0
  229. package/dist/types/breakouts/index.d.ts +5 -0
  230. package/dist/types/breakouts/request.d.ts +22 -0
  231. package/dist/types/breakouts/utils.d.ts +15 -0
  232. package/dist/types/common/browser-detection.d.ts +9 -0
  233. package/dist/types/common/collection.d.ts +48 -0
  234. package/dist/types/common/config.d.ts +2 -0
  235. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  236. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  237. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  238. package/dist/types/common/errors/media.d.ts +15 -0
  239. package/dist/types/common/errors/parameter.d.ts +15 -0
  240. package/dist/types/common/errors/password-error.d.ts +15 -0
  241. package/dist/types/common/errors/permission.d.ts +14 -0
  242. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  243. package/dist/types/common/errors/reconnection.d.ts +15 -0
  244. package/dist/types/common/errors/stats.d.ts +15 -0
  245. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  246. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  247. package/dist/types/common/events/events-scope.d.ts +17 -0
  248. package/dist/types/common/events/events.d.ts +12 -0
  249. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  250. package/dist/types/common/events/util.d.ts +2 -0
  251. package/dist/types/common/logs/logger-config.d.ts +2 -0
  252. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  253. package/dist/types/common/logs/request.d.ts +34 -0
  254. package/dist/types/common/queue.d.ts +32 -0
  255. package/dist/types/config.d.ts +72 -0
  256. package/dist/types/constants.d.ts +978 -0
  257. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  258. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  259. package/dist/types/controls-options-manager/index.d.ts +136 -0
  260. package/dist/types/controls-options-manager/types.d.ts +43 -0
  261. package/dist/types/controls-options-manager/util.d.ts +1 -0
  262. package/dist/types/index.d.ts +7 -0
  263. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  264. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  265. package/dist/types/locus-info/fullState.d.ts +2 -0
  266. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  267. package/dist/types/locus-info/index.d.ts +315 -0
  268. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  269. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  270. package/dist/types/locus-info/parser.d.ts +212 -0
  271. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  272. package/dist/types/media/index.d.ts +34 -0
  273. package/dist/types/media/properties.d.ts +86 -0
  274. package/dist/types/media/util.d.ts +2 -0
  275. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  276. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  277. package/dist/types/meeting/index.d.ts +1509 -0
  278. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  279. package/dist/types/meeting/muteState.d.ts +184 -0
  280. package/dist/types/meeting/request.d.ts +270 -0
  281. package/dist/types/meeting/request.type.d.ts +11 -0
  282. package/dist/types/meeting/state.d.ts +9 -0
  283. package/dist/types/meeting/util.d.ts +75 -0
  284. package/dist/types/meeting-info/collection.d.ts +20 -0
  285. package/dist/types/meeting-info/index.d.ts +57 -0
  286. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  287. package/dist/types/meeting-info/request.d.ts +22 -0
  288. package/dist/types/meeting-info/util.d.ts +2 -0
  289. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  290. package/dist/types/meetings/collection.d.ts +31 -0
  291. package/dist/types/meetings/index.d.ts +364 -0
  292. package/dist/types/meetings/meetings.types.d.ts +4 -0
  293. package/dist/types/meetings/request.d.ts +27 -0
  294. package/dist/types/meetings/util.d.ts +18 -0
  295. package/dist/types/member/index.d.ts +157 -0
  296. package/dist/types/member/types.d.ts +21 -0
  297. package/dist/types/member/util.d.ts +2 -0
  298. package/dist/types/members/collection.d.ts +29 -0
  299. package/dist/types/members/index.d.ts +353 -0
  300. package/dist/types/members/request.d.ts +114 -0
  301. package/dist/types/members/types.d.ts +24 -0
  302. package/dist/types/members/util.d.ts +210 -0
  303. package/dist/types/metrics/config.d.ts +195 -0
  304. package/dist/types/metrics/constants.d.ts +55 -0
  305. package/dist/types/metrics/index.d.ts +169 -0
  306. package/dist/types/multistream/mediaRequestManager.d.ts +104 -0
  307. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  308. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  309. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  310. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  311. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  312. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  313. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  314. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  315. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  316. package/dist/types/reachability/index.d.ts +152 -0
  317. package/dist/types/reachability/request.d.ts +37 -0
  318. package/dist/types/reactions/constants.d.ts +3 -0
  319. package/dist/types/reactions/reactions.d.ts +4 -0
  320. package/dist/types/reactions/reactions.type.d.ts +52 -0
  321. package/dist/types/reconnection-manager/index.d.ts +126 -0
  322. package/dist/types/recording-controller/enums.d.ts +7 -0
  323. package/dist/types/recording-controller/index.d.ts +193 -0
  324. package/dist/types/recording-controller/util.d.ts +13 -0
  325. package/dist/types/roap/index.d.ts +77 -0
  326. package/dist/types/roap/request.d.ts +36 -0
  327. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  328. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  329. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  330. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  331. package/dist/types/transcription/index.d.ts +64 -0
  332. package/package.json +28 -21
  333. package/src/annotation/annotation.types.ts +52 -0
  334. package/src/annotation/constants.ts +36 -0
  335. package/src/annotation/index.ts +343 -0
  336. package/src/breakouts/README.md +220 -0
  337. package/src/breakouts/breakout.ts +163 -0
  338. package/src/breakouts/collection.ts +19 -0
  339. package/src/breakouts/edit-lock-error.ts +25 -0
  340. package/src/breakouts/events.ts +37 -0
  341. package/src/breakouts/index.ts +921 -0
  342. package/src/breakouts/request.ts +55 -0
  343. package/src/breakouts/utils.ts +57 -0
  344. package/src/common/errors/webex-errors.ts +6 -2
  345. package/src/common/logs/logger-proxy.ts +1 -1
  346. package/src/config.ts +5 -7
  347. package/src/constants.ts +155 -20
  348. package/src/controls-options-manager/constants.ts +5 -0
  349. package/src/controls-options-manager/enums.ts +18 -0
  350. package/src/controls-options-manager/index.ts +278 -0
  351. package/src/controls-options-manager/types.ts +59 -0
  352. package/src/controls-options-manager/util.ts +286 -0
  353. package/src/index.ts +34 -0
  354. package/src/locus-info/controlsUtils.ts +108 -0
  355. package/src/locus-info/index.ts +310 -21
  356. package/src/locus-info/mediaSharesUtils.ts +48 -0
  357. package/src/locus-info/parser.ts +2 -1
  358. package/src/locus-info/selfUtils.ts +71 -1
  359. package/src/media/index.ts +70 -142
  360. package/src/media/properties.ts +41 -104
  361. package/src/mediaQualityMetrics/config.ts +379 -377
  362. package/src/meeting/in-meeting-actions.ts +156 -0
  363. package/src/meeting/index.ts +1730 -1768
  364. package/src/meeting/locusMediaRequest.ts +309 -0
  365. package/src/meeting/muteState.ts +228 -132
  366. package/src/meeting/request.ts +100 -91
  367. package/src/meeting/request.type.ts +2 -0
  368. package/src/meeting/util.ts +421 -421
  369. package/src/meeting-info/meeting-info-v2.ts +134 -13
  370. package/src/meeting-info/utilv2.ts +13 -3
  371. package/src/meetings/collection.ts +20 -0
  372. package/src/meetings/index.ts +375 -83
  373. package/src/meetings/meetings.types.ts +9 -0
  374. package/src/meetings/request.ts +3 -1
  375. package/src/meetings/util.ts +103 -4
  376. package/src/member/index.ts +40 -0
  377. package/src/member/types.ts +24 -0
  378. package/src/member/util.ts +81 -1
  379. package/src/members/collection.ts +8 -0
  380. package/src/members/index.ts +108 -6
  381. package/src/members/request.ts +98 -17
  382. package/src/members/types.ts +28 -0
  383. package/src/members/util.ts +319 -240
  384. package/src/metrics/config.ts +49 -10
  385. package/src/metrics/constants.ts +2 -4
  386. package/src/metrics/index.ts +43 -27
  387. package/src/multistream/mediaRequestManager.ts +210 -45
  388. package/src/multistream/receiveSlot.ts +68 -26
  389. package/src/multistream/receiveSlotManager.ts +61 -38
  390. package/src/multistream/remoteMedia.ts +29 -3
  391. package/src/multistream/remoteMediaGroup.ts +61 -2
  392. package/src/multistream/remoteMediaManager.ts +260 -66
  393. package/src/networkQualityMonitor/index.ts +6 -6
  394. package/src/reachability/index.ts +75 -25
  395. package/src/reachability/request.ts +10 -5
  396. package/src/reactions/constants.ts +4 -0
  397. package/src/reactions/reactions.ts +4 -4
  398. package/src/reactions/reactions.type.ts +28 -3
  399. package/src/reconnection-manager/index.ts +53 -32
  400. package/src/recording-controller/enums.ts +8 -0
  401. package/src/recording-controller/index.ts +315 -0
  402. package/src/recording-controller/util.ts +58 -0
  403. package/src/roap/index.ts +21 -30
  404. package/src/roap/request.ts +51 -52
  405. package/src/roap/turnDiscovery.ts +51 -27
  406. package/src/statsAnalyzer/global.ts +1 -94
  407. package/src/statsAnalyzer/index.ts +380 -390
  408. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  409. package/test/integration/spec/converged-space-meetings.js +233 -0
  410. package/test/integration/spec/journey.js +332 -255
  411. package/test/integration/spec/space-meeting.js +78 -5
  412. package/test/integration/spec/transcription.js +1 -1
  413. package/test/unit/spec/annotation/index.ts +436 -0
  414. package/test/unit/spec/breakouts/breakout.ts +203 -0
  415. package/test/unit/spec/breakouts/collection.ts +15 -0
  416. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  417. package/test/unit/spec/breakouts/events.ts +77 -0
  418. package/test/unit/spec/breakouts/index.ts +1790 -0
  419. package/test/unit/spec/breakouts/request.ts +104 -0
  420. package/test/unit/spec/breakouts/utils.js +72 -0
  421. package/test/unit/spec/controls-options-manager/index.js +287 -0
  422. package/test/unit/spec/controls-options-manager/util.js +518 -0
  423. package/test/unit/spec/fixture/locus.js +1 -0
  424. package/test/unit/spec/locus-info/controlsUtils.js +303 -30
  425. package/test/unit/spec/locus-info/index.js +615 -4
  426. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  427. package/test/unit/spec/locus-info/selfConstant.js +38 -0
  428. package/test/unit/spec/locus-info/selfUtils.js +200 -0
  429. package/test/unit/spec/media/index.ts +118 -22
  430. package/test/unit/spec/media/properties.ts +9 -9
  431. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -0
  432. package/test/unit/spec/meeting/index.js +2394 -1381
  433. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  434. package/test/unit/spec/meeting/muteState.js +370 -208
  435. package/test/unit/spec/meeting/request.js +354 -42
  436. package/test/unit/spec/meeting/utils.js +268 -156
  437. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  438. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  439. package/test/unit/spec/meetings/collection.js +14 -0
  440. package/test/unit/spec/meetings/index.js +842 -128
  441. package/test/unit/spec/meetings/utils.js +206 -2
  442. package/test/unit/spec/member/index.js +24 -0
  443. package/test/unit/spec/member/util.js +384 -32
  444. package/test/unit/spec/members/index.js +320 -1
  445. package/test/unit/spec/members/request.js +206 -27
  446. package/test/unit/spec/members/utils.js +184 -0
  447. package/test/unit/spec/metrics/index.js +98 -0
  448. package/test/unit/spec/multistream/mediaRequestManager.ts +676 -105
  449. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  450. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  451. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  452. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  453. package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
  454. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  455. package/test/unit/spec/reachability/index.ts +176 -25
  456. package/test/unit/spec/reachability/request.js +66 -0
  457. package/test/unit/spec/reconnection-manager/index.js +46 -13
  458. package/test/unit/spec/recording-controller/index.js +231 -0
  459. package/test/unit/spec/recording-controller/util.js +102 -0
  460. package/test/unit/spec/roap/index.ts +21 -51
  461. package/test/unit/spec/roap/request.ts +187 -0
  462. package/test/unit/spec/roap/turnDiscovery.ts +73 -34
  463. package/test/unit/spec/stats-analyzer/index.js +94 -43
  464. package/test/utils/constants.js +9 -0
  465. package/test/utils/integrationTestUtils.js +46 -0
  466. package/test/utils/testUtils.js +0 -45
  467. package/test/utils/webex-config.js +4 -0
  468. package/test/utils/webex-test-users.js +7 -3
  469. package/tsconfig.json +6 -0
  470. package/dist/media/internal-media-core-wrapper.js +0 -22
  471. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  472. package/dist/meeting/effectsState.js +0 -334
  473. package/dist/meeting/effectsState.js.map +0 -1
  474. package/dist/multistream/multistreamMedia.js +0 -117
  475. package/dist/multistream/multistreamMedia.js.map +0 -1
  476. package/src/index.js +0 -15
  477. package/src/media/internal-media-core-wrapper.ts +0 -9
  478. package/src/meeting/effectsState.ts +0 -211
  479. package/src/multistream/multistreamMedia.ts +0 -93
  480. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -1 +1 @@
1
- {"version":3,"names":["Parser","queue","SimpleQueue","status","IDLE","onDeltaAction","workingCopy","newLoci","isValid","isLoci","setStatus","LoggerProxy","logger","info","PAUSED","size","processDeltaEvent","action","locus","loci","enqueue","WORKING","DESYNC","USE_INCOMING","extract","extractComparisonState","dequeue","isValidLocus","result","compare","lociComparison","debug","pause","call","nextEvent","current","incoming","comparison","min","max","GT","LT","currentIsNotUnique","unique","length","incomingIsNotUnique","currentTotalRange","end","incomingTotalRange","EQ","currentIsUnique","incomingIsUnique","currentUniqueMin","incomingUniqueMin","currentHasNoRange","start","incomingHasNoRange","neitherSeqHasRange","hasUniqOverlap","list","some","seq","currentUniqOverlap","incomingUniqOverlap","debugInfo","isSequenceEmpty","pack","packComparisonResult","baseSequence","compareDelta","compareSequence","sequence","compareToAction","local","getMetaData","delta","getUniqueSequences","rules","checkSequenceOverlap","checkUnequalRanges","checkForUniqueEntries","checkIfOutOfSync","rule","ERROR","USE_CURRENT","lociComparisonResult","split","entries","first","last","slice","rangeStart","rangeEnd","baseLoci","otherLoci","diff","getNumbersOutOfRange","output","filter","num","sort","a","b","hasEmptyEntries","hasEmptyRange","hasProp","prop","Object","prototype","hasOwnProperty","newData","oldData","debugCode","mStr","strings","join","replace","resolutionMap","debugMap","SO001","title","description","logic","SO002","UR001","UR002","UR003","UE001","UE002","OOS001","OOS002","OOS003","debugObj","resolution"],"sources":["parser.ts"],"sourcesContent":["import {difference} from 'lodash';\n\nimport SimpleQueue from '../common/queue';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * Locus Delta Parser\n * @private\n * https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Delta-Events\n */\nexport default class Parser {\n // processing status\n static status = {\n IDLE: 'IDLE',\n PAUSED: 'PAUSED',\n WORKING: 'WORKING',\n };\n\n // loci comparison states\n static loci = {\n EQ: 'EQUAL',\n GT: 'GREATER_THAN',\n LT: 'LESS_THAN',\n DESYNC: 'DESYNC',\n USE_INCOMING: 'USE_INCOMING',\n USE_CURRENT: 'USE_CURRENT',\n ERROR: 'ERROR',\n };\n\n queue: any;\n workingCopy: any;\n\n /**\n * @constructs Parser\n */\n constructor() {\n this.queue = new SimpleQueue();\n // @ts-ignore - This is declared as static class member and again being initialized here from same\n this.status = Parser.status.IDLE;\n this.onDeltaAction = null;\n this.workingCopy = null;\n }\n\n /**\n * Checks if two sequences overlap in time,\n * the sequence with the higher minimum value is greater.\n * Chooses sequence with most recent data.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkSequenceOverlap(current, incoming) {\n let comparison = null;\n\n // if earliest working copy sequence is more recent than last incoming sequence\n if (current.min > incoming.max) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:SO001`;\n }\n // if last working copy sequence is before the earliest incoming sequence\n else if (current.max < incoming.min) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:SO002`;\n }\n\n // if no match above, defaults to null\n return comparison;\n }\n\n /**\n * Checks if two sequences have unequal ranges.\n * Chooses sequence with most larger range.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {object} loci comparison\n */\n static checkUnequalRanges(current, incoming) {\n let comparison = null;\n const currentIsNotUnique = current.unique.length === 0;\n const incomingIsNotUnique = incoming.unique.length === 0;\n const currentTotalRange = current.end - current.min;\n const incomingTotalRange = incoming.end - incoming.min;\n\n // no unique values for both loci\n if (currentIsNotUnique && incomingIsNotUnique) {\n // current working copy loci has a larger range\n if (currentTotalRange > incomingTotalRange) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:UR001`;\n }\n // incoming delta loci has a larger range\n else if (currentTotalRange < incomingTotalRange) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:UR002`;\n } else {\n // with no unique entries and with ranges either absent or\n // of the same size, the sequences are considered equal.\n comparison = `${Parser.loci.EQ}:UR003`;\n }\n }\n\n return comparison;\n }\n\n /**\n * Checks if either sequences has unique entries.\n * Entries are considered unique if they do not overlap\n * with other Loci sequences or range values.\n * Chooses sequence with the unique entries.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkForUniqueEntries(current, incoming) {\n let comparison = null;\n const currentIsUnique = current.unique.length > 0;\n const incomingIsUnique = incoming.unique.length > 0;\n\n // current has unique entries and incoming does not\n if (currentIsUnique && !incomingIsUnique) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:UE001`;\n }\n // current has no unique entries but incoming does\n else if (!currentIsUnique && incomingIsUnique) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:UE002`;\n }\n\n return comparison;\n }\n\n /**\n * Checks both Locus Delta objects to see if they are\n * out of sync with one another. If so sends a DESYNC\n * request to the server.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkIfOutOfSync(current, incoming) {\n let comparison = null;\n const currentUniqueMin = current.unique[0];\n const incomingUniqueMin = incoming.unique[0];\n\n const currentHasNoRange = !current.start && !current.end;\n const incomingHasNoRange = !incoming.start && !incoming.end;\n const neitherSeqHasRange = currentHasNoRange && incomingHasNoRange;\n\n const hasUniqOverlap = (list, min, max) => list.some((seq) => min < seq && seq < max);\n // current unique entries overlap the total range of incoming\n const currentUniqOverlap = hasUniqOverlap(current.unique, incoming.min, incoming.max);\n // vice-versa, incoming unique entries overlap the total range of current\n const incomingUniqOverlap = hasUniqOverlap(incoming.unique, current.min, current.max);\n\n if (neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap) {\n // outputs string indicating which condition occurred. ex: 0,1,0\n const debugInfo = `${+neitherSeqHasRange},${+currentUniqOverlap},${+incomingUniqOverlap}`;\n\n // send DESYNC to server\n comparison = `${Parser.loci.DESYNC}:OOS001:${debugInfo}`;\n } else if (currentUniqueMin > incomingUniqueMin) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:OOS002`;\n } else {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:OOS003`;\n }\n\n return comparison;\n }\n\n /**\n * Compares two loci to determine which one contains the most recent state\n * @instance\n * @memberof Locus\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static compare(current, incoming) {\n const {isSequenceEmpty} = Parser;\n const {extractComparisonState: extract} = Parser;\n const {packComparisonResult: pack} = Parser;\n\n if (isSequenceEmpty(current) || isSequenceEmpty(incoming)) {\n return pack(Parser.loci.USE_INCOMING, 'C001');\n }\n\n if (incoming.baseSequence) {\n return pack(Parser.compareDelta(current, incoming), 'C002');\n }\n\n const result = Parser.compareSequence(current.sequence, incoming.sequence);\n const action = Parser.compareToAction(extract(result));\n\n return pack(action, result);\n }\n\n /**\n * Compares two loci sequences (with delta params) and indicates what action\n * to take.\n * @instance\n * @memberof Locus\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @private\n * @returns {string} loci comparison state\n */\n private static compareDelta(current, incoming) {\n const {LT, GT, EQ, DESYNC, USE_INCOMING} = Parser.loci;\n\n const {extractComparisonState: extract} = Parser;\n const {packComparisonResult: pack} = Parser;\n\n const result = Parser.compareSequence(current.sequence, incoming.sequence);\n let comparison = extract(result);\n\n if (comparison !== LT) {\n return pack(Parser.compareToAction(comparison), result);\n }\n\n comparison = Parser.compareSequence(current.sequence, incoming.baseSequence);\n\n switch (extract(comparison)) {\n case GT:\n case EQ:\n comparison = USE_INCOMING;\n break;\n\n default:\n comparison = DESYNC;\n }\n\n return pack(comparison, result);\n }\n\n /**\n * Compares Locus sequences\n * @param {Types~Locus} current Current working copy\n * @param {Types~Locus} incoming New Locus delta\n * @returns {string}\n */\n static compareSequence(current, incoming) {\n // Locus sequence comparison rules in order of priority.\n // https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Sequence-Comparison-Algorithm\n\n const local: any = Parser.getMetaData(current);\n const delta: any = Parser.getMetaData(incoming);\n\n // update loci metadata\n local.unique = Parser.getUniqueSequences(local, delta);\n delta.unique = Parser.getUniqueSequences(delta, local);\n\n // Locus sequence comparison rules\n // order matters\n const rules = [\n Parser.checkSequenceOverlap,\n Parser.checkUnequalRanges,\n Parser.checkForUniqueEntries,\n Parser.checkIfOutOfSync,\n ];\n\n for (const rule of rules) {\n // Rule only returns a value if the rule applies,\n // otherwise returns null.\n const result = rule(local, delta);\n\n if (result) {\n return result;\n }\n }\n\n // error, none of rules above applied\n // should never get here as last rule\n // should be catch all.\n return Parser.loci.ERROR;\n }\n\n /**\n * Transates the result of a sequence comparison into an intended behavior\n * @param {string} result\n * @returns {string} Locus comparison action\n */\n static compareToAction(result: string) {\n const {DESYNC, EQ, ERROR, GT, LT, USE_CURRENT, USE_INCOMING} = Parser.loci;\n\n let action = ERROR;\n\n switch (result) {\n case EQ:\n case GT:\n action = USE_CURRENT;\n break;\n case LT:\n action = USE_INCOMING;\n break;\n case DESYNC:\n action = DESYNC;\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:parser#compareToAction --> Error: ${result} is not a recognized sequence comparison result.`\n );\n }\n\n return action;\n }\n\n /**\n * Extracts a loci comparison from a string of data.\n * @param {string} lociComparisonResult Comparison result with extra data\n * @returns {string} Comparison of EQ, LT, GT, or DESYNC.\n */\n static extractComparisonState(lociComparisonResult: string) {\n return lociComparisonResult.split(':')[0];\n }\n\n /**\n * @typedef {object} LociMetadata\n * @property {number} start - Starting sequence number\n * @property {number} end - Ending sequence number\n * @property {number} first - First sequence number\n * @property {number} last - Last sequence number\n * @property {number} min - Minimum sequence number\n * @property {number} max - Maximum sequence number\n * @property {number} entries - Loci sequence entries\n */\n\n /**\n * Metadata for Locus delta\n * @param {Array.<number>} sequence Locus delta sequence\n * @returns {LociMetadata} Locus Delta Metadata\n */\n static getMetaData(sequence: any) {\n const {entries} = sequence;\n const first = entries[0];\n const last = entries.slice(-1)[0];\n\n // rangeStart or rangeEnd is 0 if a range doesn't exist\n const start = sequence.rangeStart;\n const end = sequence.rangeEnd;\n\n // sequence data\n return {\n start,\n end,\n first,\n last,\n // Rule is: rangeStart <= rangeEnd <= min(entries)\n min: start || first,\n // Grab last entry if exist else default to rangeEnd\n max: last || end,\n // keep reference to actual sequence entries\n entries,\n };\n }\n\n /**\n * Compares two Locus delta objects and notes unique\n * values contained within baseLoci.\n * @param {LociMetadata} baseLoci\n * @param {LociMetadata} otherLoci\n * @returns {Array.<number>} List of unique sequences\n */\n static getUniqueSequences(baseLoci: any, otherLoci: any) {\n const diff: any = difference(baseLoci.entries, otherLoci.entries);\n\n const {start, end} = otherLoci;\n\n return Parser.getNumbersOutOfRange(diff, start, end);\n }\n\n /**\n * Returns an array of numbers outside of a given range.\n * @param {Array.<number>} list Array to filter\n * @param {number} rangeStart Start of range\n * @param {number} rangeEnd End of range\n * @returns {Array.<number>} Array of numbers sorted ASC\n */\n static getNumbersOutOfRange(list: Array<number>, rangeStart: number, rangeEnd: number) {\n // Collect all numbers if number is outside of specified range\n const output = list.filter((num) => num < rangeStart || num > rangeEnd);\n\n // sort ascending\n return output.sort((a, b) => a - b);\n }\n\n /**\n * Checks if newLoci or workingCopy is invalid.\n * @param {Types~Locus} newLoci\n * @returns {boolean}\n */\n isValidLocus(newLoci) {\n let isValid = false;\n const {IDLE} = Parser.status;\n const {isLoci} = Parser;\n // @ts-ignore\n const setStatus = (status) => {\n this.status = status;\n };\n\n // one or both objects are not locus delta events\n if (!isLoci(this.workingCopy) || !isLoci(newLoci)) {\n setStatus(IDLE);\n LoggerProxy.logger.info(\n 'Locus-info:parser#processDeltaEvent --> Ignoring non-locus object. workingCopy:',\n this.workingCopy,\n 'newLoci:',\n newLoci\n );\n } else {\n isValid = true;\n }\n\n return isValid;\n }\n\n /**\n * Determines if a paricular locus's sequence is empty\n * @param {Types~Locus} locus\n * @returns {bool}\n */\n static isSequenceEmpty(locus) {\n const {sequence} = locus;\n const hasEmptyEntries = !sequence.entries?.length;\n const hasEmptyRange = sequence.rangeStart === 0 && sequence.rangeEnd === 0;\n\n return hasEmptyEntries && hasEmptyRange;\n }\n\n /**\n * Determines if an object has basic\n * structure of a locus object.\n * @param {Types~Locus} loci\n * @returns {boolean}\n */\n static isLoci(loci) {\n if (!loci || !loci.sequence) {\n return false;\n }\n const hasProp = (prop) => Object.prototype.hasOwnProperty.call(loci.sequence, prop);\n\n if (hasProp('rangeStart') && hasProp('rangeEnd')) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Processes next event in queue,\n * if queue is empty sets status to idle.\n * @returns {undefined}\n */\n nextEvent() {\n // @ts-ignore\n if (this.status === Parser.status.PAUSED) {\n LoggerProxy.logger.info('Locus-info:parser#nextEvent --> Locus parser paused.');\n\n return;\n }\n\n // continue processing until queue is empty\n if (this.queue.size() > 0) {\n this.processDeltaEvent();\n } else {\n // @ts-ignore\n this.status = Parser.status.IDLE;\n }\n }\n\n /**\n * Function handler for delta actions,\n * is set by instance callee.\n * @param {string} action Locus delta action\n * @param {Types~Locus} locus Locus delta\n * @returns {undefined}\n */\n // eslint-disable-next-line no-unused-vars\n onDeltaAction(action: string, locus) {}\n\n /**\n * Event handler for locus delta events\n * @param {Types~Locus} loci Locus Delta\n * @returns {undefined}\n */\n onDeltaEvent(loci) {\n // enqueue the new loci\n this.queue.enqueue(loci);\n // start processing events in the queue if idle\n // and a function handler is defined\n // @ts-ignore\n if (this.status === Parser.status.IDLE && this.onDeltaAction) {\n // Update status, ensure we only process one event at a time.\n // @ts-ignore\n this.status = Parser.status.WORKING;\n\n this.processDeltaEvent();\n }\n }\n\n /**\n * Appends new data onto a string of existing data.\n * @param {string} newData\n * @param {string} oldData\n * @returns {string}\n */\n static packComparisonResult(newData: string, oldData: string) {\n return `${newData}:${oldData}`;\n }\n\n /**\n * Pause locus processing\n * @returns {undefined}\n */\n pause() {\n // @ts-ignore\n this.status = Parser.status.PAUSED;\n LoggerProxy.logger.info('Locus-info:parser#pause --> Locus parser paused.');\n }\n\n /**\n * Processes next locus delta in the queue,\n * continues until the queue is empty\n * or cleared.\n * @returns {undefined}\n */\n processDeltaEvent() {\n const {DESYNC, USE_INCOMING} = Parser.loci;\n const {extractComparisonState: extract} = Parser;\n const newLoci = this.queue.dequeue();\n\n if (!this.isValidLocus(newLoci)) {\n return;\n }\n\n const result = Parser.compare(this.workingCopy, newLoci);\n const lociComparison = extract(result);\n\n // limited debugging, use chrome extension\n // for full debugging.\n LoggerProxy.logger.debug(`Locus-info:parser#processDeltaEvent --> Locus Debug: ${result}`);\n\n if (lociComparison === DESYNC) {\n // wait for desync response\n this.pause();\n } else if (lociComparison === USE_INCOMING) {\n // update working copy for future comparisons.\n // Note: The working copy of parser gets updated in .onFullLocus()\n // and here when USE_INCOMING locus.\n this.workingCopy = newLoci;\n }\n\n if (this.onDeltaAction) {\n LoggerProxy.logger.info(\n `Locus-info:parser#processDeltaEvent --> Locus Delta Action: ${lociComparison}`\n );\n\n // eslint-disable-next-line no-useless-call\n this.onDeltaAction.call(this, lociComparison, newLoci);\n }\n\n this.nextEvent();\n }\n\n /**\n * Resume from a paused state\n * @returns {undefined}\n */\n resume() {\n LoggerProxy.logger.info('Locus-info:parser#resume --> Locus parser resumed.');\n // @ts-ignore\n this.status = Parser.status.WORKING;\n this.nextEvent();\n }\n\n /**\n * Gets related debug info for given error code\n * @param {string} debugCode Debug code\n * @param {string} comparison Locus comparison string\n * @returns {object} Debug message\n */\n static getDebugMessage(debugCode: string, comparison: string) {\n // removes extra spaces from multiline string\n const mStr = (strings) => strings.join('').replace(/\\s{2,}/g, ' ');\n\n const resolutionMap = {\n EQ: `${Parser.loci.LT}: is equal (current == incoming).`,\n LT: `${Parser.loci.LT}: choose right side (incoming).`,\n GT: `${Parser.loci.GT}: choose left side (current).`,\n };\n\n const debugMap = {\n SO001: {\n title: 'checkSequenceOverlap-001',\n description: mStr`Occurs if earliest working copy sequence is more \\\n recent than last incoming sequence.`,\n logic: 'current.min > incoming.max',\n },\n\n SO002: {\n title: 'checkSequenceOverlap-002',\n description: mStr`Occurs if last working copy sequence is before the \\\n earliest incoming sequence.`,\n logic: 'current.max < incoming.min',\n },\n\n UR001: {\n title: 'checkUnequalRanges-001',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and the current working copy loci has a larger range.`,\n logic: 'currentTotalRange > incomingTotalRange',\n },\n\n UR002: {\n title: 'checkUnequalRanges-002',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and the incoming delta loci has a larger range.`,\n logic: 'currentTotalRange < incomingTotalRange',\n },\n\n UR003: {\n title: 'checkUnequalRanges-003',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and with ranges either absent or of the same size, the sequences \\\n are considered equal.`,\n logic: 'currentTotalRange == incomingTotalRange',\n },\n\n UE001: {\n title: 'checkForUniqueEntries-001',\n description: mStr`Occurs if current loci has unique entries and \\\n incoming does not. Entries are considered unique if they \\\n do not overlap with other Loci sequences or range values.`,\n logic: 'currentIsUnique && !incomingIsUnique',\n },\n\n UE002: {\n title: 'checkForUniqueEntries-002',\n description: mStr`Occurs if current has no unique entries but \\\n incoming does. Entries are considered unique if they \\\n do not overlap with other Loci sequences or range values.`,\n logic: '!currentIsUnique && incomingIsUnique',\n },\n\n OOS001: {\n title: 'checkIfOutOfSync-001',\n description: mStr`Occurs if neither sequence has a range, or \\\n if the current loci unique entries overlap the total range of the \\\n incoming sequence, or if the incoming unique entries overlap \\\n the total range of current sequence.`,\n logic: 'neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap',\n },\n\n OOS002: {\n title: 'checkIfOutOfSync-002',\n description: mStr`Occurs if the minimum value from sequences that are \\\n unique to the current loci is greater than the minimum value from \\\n sequences that are unique to the incoming loci.`,\n logic: 'currentUniqueMin > incomingUniqueMin',\n },\n\n OOS003: {\n title: 'checkIfOutOfSync-003',\n description: mStr`Occurs if none of the comparison rules applied. \\\n It is a catch all.`,\n logic: 'else (catch all)',\n },\n };\n\n const debugObj = debugMap[debugCode];\n\n debugObj.title = `Debug: ${debugObj.title}`;\n debugObj.resolution = resolutionMap[comparison];\n\n return debugObj;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Parser","queue","SimpleQueue","status","IDLE","onDeltaAction","workingCopy","newLoci","isValid","isLoci","setStatus","LoggerProxy","logger","info","PAUSED","size","processDeltaEvent","action","locus","loci","enqueue","WORKING","DESYNC","USE_INCOMING","extract","extractComparisonState","dequeue","isValidLocus","result","compare","lociComparison","debug","pause","call","nextEvent","current","incoming","comparison","min","max","GT","LT","currentIsNotUnique","unique","length","incomingIsNotUnique","currentTotalRange","end","incomingTotalRange","EQ","currentIsUnique","incomingIsUnique","currentUniqueMin","incomingUniqueMin","currentHasNoRange","start","incomingHasNoRange","neitherSeqHasRange","hasUniqOverlap","list","some","seq","currentUniqOverlap","incomingUniqOverlap","debugInfo","isSequenceEmpty","pack","packComparisonResult","baseSequence","compareDelta","compareSequence","sequence","compareToAction","local","getMetaData","delta","getUniqueSequences","rules","checkSequenceOverlap","checkUnequalRanges","checkForUniqueEntries","checkIfOutOfSync","rule","ERROR","USE_CURRENT","lociComparisonResult","split","entries","first","last","slice","rangeStart","rangeEnd","baseLoci","otherLoci","diff","getNumbersOutOfRange","output","filter","num","sort","a","b","hasEmptyEntries","hasEmptyRange","hasProp","prop","Object","prototype","hasOwnProperty","newData","oldData","debugCode","mStr","strings","join","replace","resolutionMap","debugMap","SO001","title","description","logic","SO002","UR001","UR002","UR003","UE001","UE002","OOS001","OOS002","OOS003","debugObj","resolution"],"sources":["parser.ts"],"sourcesContent":["import {difference} from 'lodash';\n\nimport SimpleQueue from '../common/queue';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * Locus Delta Parser\n * @private\n * https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Delta-Events\n */\nexport default class Parser {\n // processing status\n static status = {\n IDLE: 'IDLE',\n PAUSED: 'PAUSED',\n WORKING: 'WORKING',\n };\n\n // loci comparison states\n static loci = {\n EQ: 'EQUAL',\n GT: 'GREATER_THAN',\n LT: 'LESS_THAN',\n DESYNC: 'DESYNC',\n USE_INCOMING: 'USE_INCOMING',\n USE_CURRENT: 'USE_CURRENT',\n ERROR: 'ERROR',\n };\n\n queue: any;\n workingCopy: any;\n\n /**\n * @constructs Parser\n */\n constructor() {\n this.queue = new SimpleQueue();\n // @ts-ignore - This is declared as static class member and again being initialized here from same\n this.status = Parser.status.IDLE;\n this.onDeltaAction = null;\n this.workingCopy = null;\n }\n\n /**\n * Checks if two sequences overlap in time,\n * the sequence with the higher minimum value is greater.\n * Chooses sequence with most recent data.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkSequenceOverlap(current, incoming) {\n let comparison = null;\n\n // if earliest working copy sequence is more recent than last incoming sequence\n if (current.min > incoming.max) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:SO001`;\n }\n // if last working copy sequence is before the earliest incoming sequence\n else if (current.max < incoming.min) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:SO002`;\n }\n\n // if no match above, defaults to null\n return comparison;\n }\n\n /**\n * Checks if two sequences have unequal ranges.\n * Chooses sequence with most larger range.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {object} loci comparison\n */\n static checkUnequalRanges(current, incoming) {\n let comparison = null;\n const currentIsNotUnique = current.unique.length === 0;\n const incomingIsNotUnique = incoming.unique.length === 0;\n const currentTotalRange = current.end - current.min;\n const incomingTotalRange = incoming.end - incoming.min;\n\n // no unique values for both loci\n if (currentIsNotUnique && incomingIsNotUnique) {\n // current working copy loci has a larger range\n if (currentTotalRange > incomingTotalRange) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:UR001`;\n }\n // incoming delta loci has a larger range\n else if (currentTotalRange < incomingTotalRange) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:UR002`;\n } else {\n // with no unique entries and with ranges either absent or\n // of the same size, the sequences are considered equal.\n comparison = `${Parser.loci.EQ}:UR003`;\n }\n }\n\n return comparison;\n }\n\n /**\n * Checks if either sequences has unique entries.\n * Entries are considered unique if they do not overlap\n * with other Loci sequences or range values.\n * Chooses sequence with the unique entries.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkForUniqueEntries(current, incoming) {\n let comparison = null;\n const currentIsUnique = current.unique.length > 0;\n const incomingIsUnique = incoming.unique.length > 0;\n\n // current has unique entries and incoming does not\n if (currentIsUnique && !incomingIsUnique) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:UE001`;\n }\n // current has no unique entries but incoming does\n else if (!currentIsUnique && incomingIsUnique) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:UE002`;\n }\n\n return comparison;\n }\n\n /**\n * Checks both Locus Delta objects to see if they are\n * out of sync with one another. If so sends a DESYNC\n * request to the server.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkIfOutOfSync(current, incoming) {\n let comparison = null;\n const currentUniqueMin = current.unique[0];\n const incomingUniqueMin = incoming.unique[0];\n\n const currentHasNoRange = !current.start && !current.end;\n const incomingHasNoRange = !incoming.start && !incoming.end;\n const neitherSeqHasRange = currentHasNoRange && incomingHasNoRange;\n\n const hasUniqOverlap = (list, min, max) => list.some((seq) => min < seq && seq < max);\n // current unique entries overlap the total range of incoming\n const currentUniqOverlap = hasUniqOverlap(current.unique, incoming.min, incoming.max);\n // vice-versa, incoming unique entries overlap the total range of current\n const incomingUniqOverlap = hasUniqOverlap(incoming.unique, current.min, current.max);\n\n if (neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap) {\n // outputs string indicating which condition occurred. ex: 0,1,0\n const debugInfo = `${+neitherSeqHasRange},${+currentUniqOverlap},${+incomingUniqOverlap}`;\n\n // send DESYNC to server\n comparison = `${Parser.loci.DESYNC}:OOS001:${debugInfo}`;\n } else if (currentUniqueMin > incomingUniqueMin) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:OOS002`;\n } else {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:OOS003`;\n }\n\n return comparison;\n }\n\n /**\n * Compares two loci to determine which one contains the most recent state\n * @instance\n * @memberof Locus\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static compare(current, incoming) {\n const {isSequenceEmpty} = Parser;\n const {extractComparisonState: extract} = Parser;\n const {packComparisonResult: pack} = Parser;\n\n if (isSequenceEmpty(current) || isSequenceEmpty(incoming)) {\n return pack(Parser.loci.USE_INCOMING, 'C001');\n }\n\n if (incoming.baseSequence) {\n return pack(Parser.compareDelta(current, incoming), 'C002');\n }\n\n const result = Parser.compareSequence(current.sequence, incoming.sequence);\n const action = Parser.compareToAction(extract(result));\n\n return pack(action, result);\n }\n\n /**\n * Compares two loci sequences (with delta params) and indicates what action\n * to take.\n * @instance\n * @memberof Locus\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @private\n * @returns {string} loci comparison state\n */\n private static compareDelta(current, incoming) {\n const {LT, GT, EQ, DESYNC, USE_INCOMING} = Parser.loci;\n\n const {extractComparisonState: extract} = Parser;\n const {packComparisonResult: pack} = Parser;\n\n const result = Parser.compareSequence(current.sequence, incoming.sequence);\n let comparison = extract(result);\n\n if (comparison !== LT) {\n return pack(Parser.compareToAction(comparison), result);\n }\n\n comparison = Parser.compareSequence(current.sequence, incoming.baseSequence);\n\n switch (extract(comparison)) {\n case GT:\n case EQ:\n comparison = USE_INCOMING;\n break;\n\n default:\n comparison = DESYNC;\n }\n\n return pack(comparison, result);\n }\n\n /**\n * Compares Locus sequences\n * @param {Types~Locus} current Current working copy\n * @param {Types~Locus} incoming New Locus delta\n * @returns {string}\n */\n static compareSequence(current, incoming) {\n // Locus sequence comparison rules in order of priority.\n // https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Sequence-Comparison-Algorithm\n\n const local: any = Parser.getMetaData(current);\n const delta: any = Parser.getMetaData(incoming);\n\n // update loci metadata\n local.unique = Parser.getUniqueSequences(local, delta);\n delta.unique = Parser.getUniqueSequences(delta, local);\n\n // Locus sequence comparison rules\n // order matters\n const rules = [\n Parser.checkSequenceOverlap,\n Parser.checkUnequalRanges,\n Parser.checkForUniqueEntries,\n Parser.checkIfOutOfSync,\n ];\n\n for (const rule of rules) {\n // Rule only returns a value if the rule applies,\n // otherwise returns null.\n const result = rule(local, delta);\n\n if (result) {\n return result;\n }\n }\n\n // error, none of rules above applied\n // should never get here as last rule\n // should be catch all.\n return Parser.loci.ERROR;\n }\n\n /**\n * Transates the result of a sequence comparison into an intended behavior\n * @param {string} result\n * @returns {string} Locus comparison action\n */\n static compareToAction(result: string) {\n const {DESYNC, EQ, ERROR, GT, LT, USE_CURRENT, USE_INCOMING} = Parser.loci;\n\n let action = ERROR;\n\n switch (result) {\n case EQ:\n case GT:\n action = USE_CURRENT;\n break;\n case LT:\n action = USE_INCOMING;\n break;\n case DESYNC:\n action = DESYNC;\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:parser#compareToAction --> Error: ${result} is not a recognized sequence comparison result.`\n );\n }\n\n return action;\n }\n\n /**\n * Extracts a loci comparison from a string of data.\n * @param {string} lociComparisonResult Comparison result with extra data\n * @returns {string} Comparison of EQ, LT, GT, or DESYNC.\n */\n static extractComparisonState(lociComparisonResult: string) {\n return lociComparisonResult.split(':')[0];\n }\n\n /**\n * @typedef {object} LociMetadata\n * @property {number} start - Starting sequence number\n * @property {number} end - Ending sequence number\n * @property {number} first - First sequence number\n * @property {number} last - Last sequence number\n * @property {number} min - Minimum sequence number\n * @property {number} max - Maximum sequence number\n * @property {number} entries - Loci sequence entries\n */\n\n /**\n * Metadata for Locus delta\n * @param {Array.<number>} sequence Locus delta sequence\n * @returns {LociMetadata} Locus Delta Metadata\n */\n static getMetaData(sequence: any) {\n const {entries} = sequence;\n const first = entries[0];\n const last = entries.slice(-1)[0];\n\n // rangeStart or rangeEnd is 0 if a range doesn't exist\n const start = sequence.rangeStart;\n const end = sequence.rangeEnd;\n\n // sequence data\n return {\n start,\n end,\n first,\n last,\n // Rule is: rangeStart <= rangeEnd <= min(entries)\n min: start || first,\n // Grab last entry if exist else default to rangeEnd\n max: last || end,\n // keep reference to actual sequence entries\n entries,\n };\n }\n\n /**\n * Compares two Locus delta objects and notes unique\n * values contained within baseLoci.\n * @param {LociMetadata} baseLoci\n * @param {LociMetadata} otherLoci\n * @returns {Array.<number>} List of unique sequences\n */\n static getUniqueSequences(baseLoci: any, otherLoci: any) {\n const diff: any = difference(baseLoci.entries, otherLoci.entries);\n\n const {start, end} = otherLoci;\n\n return Parser.getNumbersOutOfRange(diff, start, end);\n }\n\n /**\n * Returns an array of numbers outside of a given range.\n * @param {Array.<number>} list Array to filter\n * @param {number} rangeStart Start of range\n * @param {number} rangeEnd End of range\n * @returns {Array.<number>} Array of numbers sorted ASC\n */\n static getNumbersOutOfRange(list: Array<number>, rangeStart: number, rangeEnd: number) {\n // Collect all numbers if number is outside of specified range\n const output = list.filter((num) => num < rangeStart || num > rangeEnd);\n\n // sort ascending\n return output.sort((a, b) => a - b);\n }\n\n /**\n * Checks if newLoci or workingCopy is invalid.\n * @param {Types~Locus} newLoci\n * @returns {boolean}\n */\n isValidLocus(newLoci) {\n let isValid = false;\n const {IDLE} = Parser.status;\n const {isLoci} = Parser;\n // @ts-ignore\n const setStatus = (status) => {\n // @ts-ignore\n this.status = status;\n };\n\n // one or both objects are not locus delta events\n if (!isLoci(this.workingCopy) || !isLoci(newLoci)) {\n setStatus(IDLE);\n LoggerProxy.logger.info(\n 'Locus-info:parser#processDeltaEvent --> Ignoring non-locus object. workingCopy:',\n this.workingCopy,\n 'newLoci:',\n newLoci\n );\n } else {\n isValid = true;\n }\n\n return isValid;\n }\n\n /**\n * Determines if a paricular locus's sequence is empty\n * @param {Types~Locus} locus\n * @returns {bool}\n */\n static isSequenceEmpty(locus) {\n const {sequence} = locus;\n const hasEmptyEntries = !sequence.entries?.length;\n const hasEmptyRange = sequence.rangeStart === 0 && sequence.rangeEnd === 0;\n\n return hasEmptyEntries && hasEmptyRange;\n }\n\n /**\n * Determines if an object has basic\n * structure of a locus object.\n * @param {Types~Locus} loci\n * @returns {boolean}\n */\n static isLoci(loci) {\n if (!loci || !loci.sequence) {\n return false;\n }\n const hasProp = (prop) => Object.prototype.hasOwnProperty.call(loci.sequence, prop);\n\n if (hasProp('rangeStart') && hasProp('rangeEnd')) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Processes next event in queue,\n * if queue is empty sets status to idle.\n * @returns {undefined}\n */\n nextEvent() {\n // @ts-ignore\n if (this.status === Parser.status.PAUSED) {\n LoggerProxy.logger.info('Locus-info:parser#nextEvent --> Locus parser paused.');\n\n return;\n }\n\n // continue processing until queue is empty\n if (this.queue.size() > 0) {\n this.processDeltaEvent();\n } else {\n // @ts-ignore\n this.status = Parser.status.IDLE;\n }\n }\n\n /**\n * Function handler for delta actions,\n * is set by instance callee.\n * @param {string} action Locus delta action\n * @param {Types~Locus} locus Locus delta\n * @returns {undefined}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onDeltaAction(action: string, locus) {}\n\n /**\n * Event handler for locus delta events\n * @param {Types~Locus} loci Locus Delta\n * @returns {undefined}\n */\n onDeltaEvent(loci) {\n // enqueue the new loci\n this.queue.enqueue(loci);\n // start processing events in the queue if idle\n // and a function handler is defined\n // @ts-ignore\n if (this.status === Parser.status.IDLE && this.onDeltaAction) {\n // Update status, ensure we only process one event at a time.\n // @ts-ignore\n this.status = Parser.status.WORKING;\n\n this.processDeltaEvent();\n }\n }\n\n /**\n * Appends new data onto a string of existing data.\n * @param {string} newData\n * @param {string} oldData\n * @returns {string}\n */\n static packComparisonResult(newData: string, oldData: string) {\n return `${newData}:${oldData}`;\n }\n\n /**\n * Pause locus processing\n * @returns {undefined}\n */\n pause() {\n // @ts-ignore\n this.status = Parser.status.PAUSED;\n LoggerProxy.logger.info('Locus-info:parser#pause --> Locus parser paused.');\n }\n\n /**\n * Processes next locus delta in the queue,\n * continues until the queue is empty\n * or cleared.\n * @returns {undefined}\n */\n processDeltaEvent() {\n const {DESYNC, USE_INCOMING} = Parser.loci;\n const {extractComparisonState: extract} = Parser;\n const newLoci = this.queue.dequeue();\n\n if (!this.isValidLocus(newLoci)) {\n return;\n }\n\n const result = Parser.compare(this.workingCopy, newLoci);\n const lociComparison = extract(result);\n\n // limited debugging, use chrome extension\n // for full debugging.\n LoggerProxy.logger.debug(`Locus-info:parser#processDeltaEvent --> Locus Debug: ${result}`);\n\n if (lociComparison === DESYNC) {\n // wait for desync response\n this.pause();\n } else if (lociComparison === USE_INCOMING) {\n // update working copy for future comparisons.\n // Note: The working copy of parser gets updated in .onFullLocus()\n // and here when USE_INCOMING locus.\n this.workingCopy = newLoci;\n }\n\n if (this.onDeltaAction) {\n LoggerProxy.logger.info(\n `Locus-info:parser#processDeltaEvent --> Locus Delta Action: ${lociComparison}`\n );\n\n // eslint-disable-next-line no-useless-call\n this.onDeltaAction.call(this, lociComparison, newLoci);\n }\n\n this.nextEvent();\n }\n\n /**\n * Resume from a paused state\n * @returns {undefined}\n */\n resume() {\n LoggerProxy.logger.info('Locus-info:parser#resume --> Locus parser resumed.');\n // @ts-ignore\n this.status = Parser.status.WORKING;\n this.nextEvent();\n }\n\n /**\n * Gets related debug info for given error code\n * @param {string} debugCode Debug code\n * @param {string} comparison Locus comparison string\n * @returns {object} Debug message\n */\n static getDebugMessage(debugCode: string, comparison: string) {\n // removes extra spaces from multiline string\n const mStr = (strings) => strings.join('').replace(/\\s{2,}/g, ' ');\n\n const resolutionMap = {\n EQ: `${Parser.loci.LT}: is equal (current == incoming).`,\n LT: `${Parser.loci.LT}: choose right side (incoming).`,\n GT: `${Parser.loci.GT}: choose left side (current).`,\n };\n\n const debugMap = {\n SO001: {\n title: 'checkSequenceOverlap-001',\n description: mStr`Occurs if earliest working copy sequence is more \\\n recent than last incoming sequence.`,\n logic: 'current.min > incoming.max',\n },\n\n SO002: {\n title: 'checkSequenceOverlap-002',\n description: mStr`Occurs if last working copy sequence is before the \\\n earliest incoming sequence.`,\n logic: 'current.max < incoming.min',\n },\n\n UR001: {\n title: 'checkUnequalRanges-001',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and the current working copy loci has a larger range.`,\n logic: 'currentTotalRange > incomingTotalRange',\n },\n\n UR002: {\n title: 'checkUnequalRanges-002',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and the incoming delta loci has a larger range.`,\n logic: 'currentTotalRange < incomingTotalRange',\n },\n\n UR003: {\n title: 'checkUnequalRanges-003',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and with ranges either absent or of the same size, the sequences \\\n are considered equal.`,\n logic: 'currentTotalRange == incomingTotalRange',\n },\n\n UE001: {\n title: 'checkForUniqueEntries-001',\n description: mStr`Occurs if current loci has unique entries and \\\n incoming does not. Entries are considered unique if they \\\n do not overlap with other Loci sequences or range values.`,\n logic: 'currentIsUnique && !incomingIsUnique',\n },\n\n UE002: {\n title: 'checkForUniqueEntries-002',\n description: mStr`Occurs if current has no unique entries but \\\n incoming does. Entries are considered unique if they \\\n do not overlap with other Loci sequences or range values.`,\n logic: '!currentIsUnique && incomingIsUnique',\n },\n\n OOS001: {\n title: 'checkIfOutOfSync-001',\n description: mStr`Occurs if neither sequence has a range, or \\\n if the current loci unique entries overlap the total range of the \\\n incoming sequence, or if the incoming unique entries overlap \\\n the total range of current sequence.`,\n logic: 'neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap',\n },\n\n OOS002: {\n title: 'checkIfOutOfSync-002',\n description: mStr`Occurs if the minimum value from sequences that are \\\n unique to the current loci is greater than the minimum value from \\\n sequences that are unique to the incoming loci.`,\n logic: 'currentUniqueMin > incomingUniqueMin',\n },\n\n OOS003: {\n title: 'checkIfOutOfSync-003',\n description: mStr`Occurs if none of the comparison rules applied. \\\n It is a catch all.`,\n logic: 'else (catch all)',\n },\n };\n\n const debugObj = debugMap[debugCode];\n\n debugObj.title = `Debug: ${debugObj.title}`;\n debugObj.resolution = resolutionMap[comparison];\n\n return debugObj;\n }\n}\n"],"mappings":"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"}
@@ -1,35 +1,27 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array"));
14
-
10
+ var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
15
11
  var _constants = require("../constants");
16
-
17
12
  var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
18
-
19
- /* eslint-disable default-param-last */
20
13
  var SelfUtils = {};
21
14
  var PSTN_DEVICE_TYPE = 'PROVISIONAL';
15
+
22
16
  /**
23
17
  * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id
24
18
  * @param {Object} self
25
19
  * @param {String} deviceId
26
20
  * @returns {undefined}
27
21
  */
28
-
29
22
  SelfUtils.parse = function (self, deviceId) {
30
23
  if (self) {
31
24
  var _joinedWith$intent;
32
-
33
25
  var joinedWith = self.devices.find(function (device) {
34
26
  return deviceId === device.url;
35
27
  });
@@ -37,6 +29,7 @@ SelfUtils.parse = function (self, deviceId) {
37
29
  return PSTN_DEVICE_TYPE === device.deviceType;
38
30
  });
39
31
  return {
32
+ remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),
40
33
  remoteMuted: SelfUtils.getRemoteMuted(self),
41
34
  unmuteAllowed: SelfUtils.getUnmuteAllowed(self),
42
35
  localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),
@@ -66,49 +59,52 @@ SelfUtils.parse = function (self, deviceId) {
66
59
  isUserUnadmitted: self.state === _constants._IDLE_ && (joinedWith === null || joinedWith === void 0 ? void 0 : (_joinedWith$intent = joinedWith.intent) === null || _joinedWith$intent === void 0 ? void 0 : _joinedWith$intent.type) === _constants._WAIT_,
67
60
  layout: SelfUtils.getLayout(self),
68
61
  canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),
69
- isSharingBlocked: SelfUtils.isSharingBlocked(self)
62
+ isSharingBlocked: SelfUtils.isSharingBlocked(self),
63
+ breakoutSessions: SelfUtils.getBreakoutSessions(self),
64
+ breakout: SelfUtils.getBreakout(self)
70
65
  };
71
66
  }
72
-
73
67
  return null;
74
68
  };
75
-
69
+ SelfUtils.getBreakoutSessions = function (self) {
70
+ var _self$controls, _self$controls$breako;
71
+ return self === null || self === void 0 ? void 0 : (_self$controls = self.controls) === null || _self$controls === void 0 ? void 0 : (_self$controls$breako = _self$controls.breakout) === null || _self$controls$breako === void 0 ? void 0 : _self$controls$breako.sessions;
72
+ };
73
+ SelfUtils.getBreakout = function (self) {
74
+ var _self$controls2;
75
+ return self === null || self === void 0 ? void 0 : (_self$controls2 = self.controls) === null || _self$controls2 === void 0 ? void 0 : _self$controls2.breakout;
76
+ };
76
77
  SelfUtils.getLayout = function (self) {
77
- var _self$controls;
78
-
79
- return (0, _isArray.default)(self === null || self === void 0 ? void 0 : (_self$controls = self.controls) === null || _self$controls === void 0 ? void 0 : _self$controls.layouts) ? self.controls.layouts[0].type : undefined;
78
+ var _self$controls3;
79
+ return (0, _isArray.default)(self === null || self === void 0 ? void 0 : (_self$controls3 = self.controls) === null || _self$controls3 === void 0 ? void 0 : _self$controls3.layouts) ? self.controls.layouts[0].type : undefined;
80
80
  };
81
-
82
81
  SelfUtils.getRoles = function (self) {
83
- var _self$controls2, _self$controls2$role;
84
-
85
- return ((self === null || self === void 0 ? void 0 : (_self$controls2 = self.controls) === null || _self$controls2 === void 0 ? void 0 : (_self$controls2$role = _self$controls2.role) === null || _self$controls2$role === void 0 ? void 0 : _self$controls2$role.roles) || []).reduce(function (roles, role) {
82
+ var _self$controls4, _self$controls4$role;
83
+ return ((self === null || self === void 0 ? void 0 : (_self$controls4 = self.controls) === null || _self$controls4 === void 0 ? void 0 : (_self$controls4$role = _self$controls4.role) === null || _self$controls4$role === void 0 ? void 0 : _self$controls4$role.roles) || []).reduce(function (roles, role) {
86
84
  if (role.hasRole) {
87
85
  roles.push(role.type);
88
86
  }
89
-
90
87
  return roles;
91
88
  }, []);
92
89
  };
93
-
94
90
  SelfUtils.canNotViewTheParticipantList = function (self) {
95
91
  return !!(self !== null && self !== void 0 && self.canNotViewTheParticipantList);
96
92
  };
97
-
98
93
  SelfUtils.isSharingBlocked = function (self) {
99
94
  return !!(self !== null && self !== void 0 && self.isSharingBlocked);
100
95
  };
101
-
102
96
  SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
103
97
  var previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);
104
98
  var current = newSelf && SelfUtils.parse(newSelf, deviceId);
105
99
  var updates = {};
106
100
  updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);
107
101
  updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
102
+ updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);
108
103
  updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
109
104
  updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);
110
105
  updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);
111
106
  updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);
107
+ updates.isRolesChanged = SelfUtils.isRolesChanged(previous, current);
112
108
  updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);
113
109
  updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);
114
110
  updates.layoutChanged = SelfUtils.layoutChanged(previous, current);
@@ -118,122 +114,115 @@ SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
118
114
  updates.shareStateChange = (previous === null || previous === void 0 ? void 0 : previous.currentMediaStatus.share) !== current.currentMediaStatus.share;
119
115
  updates.canNotViewTheParticipantListChanged = (previous === null || previous === void 0 ? void 0 : previous.canNotViewTheParticipantList) !== current.canNotViewTheParticipantList;
120
116
  updates.isSharingBlockedChanged = (previous === null || previous === void 0 ? void 0 : previous.isSharingBlocked) !== current.isSharingBlocked;
117
+ updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);
121
118
  return {
122
119
  previous: previous,
123
120
  current: current,
124
121
  updates: updates
125
122
  };
126
123
  };
124
+
127
125
  /**
128
126
  * Checks if user has joined the meeting
129
127
  * @param {Object} self
130
128
  * @returns {boolean} isJoined
131
129
  */
132
-
133
-
134
130
  SelfUtils.isJoined = function (self) {
135
131
  return (self === null || self === void 0 ? void 0 : self.state) === _constants._JOINED_;
136
132
  };
133
+
137
134
  /**
138
135
  * Validate if the Meeting Layout Controls Layout has changed.
139
136
  *
140
137
  * @param {Self} previous - Previous self state
141
138
  * @param {Self} current - Current self state [per event]
142
- * @returns {boolean} - If the MEeting Layout Controls Layout has changed.
139
+ * @returns {boolean} - If the Meeting Layout Controls Layout has changed.
143
140
  */
144
-
145
-
146
141
  SelfUtils.layoutChanged = function (previous, current) {
147
142
  return (current === null || current === void 0 ? void 0 : current.layout) && (previous === null || previous === void 0 ? void 0 : previous.layout) !== (current === null || current === void 0 ? void 0 : current.layout);
148
143
  };
149
-
144
+ SelfUtils.breakoutsChanged = function (previous, current) {
145
+ return !(0, _isEqual2.default)(previous === null || previous === void 0 ? void 0 : previous.breakoutSessions, current === null || current === void 0 ? void 0 : current.breakoutSessions) && !!(current !== null && current !== void 0 && current.breakout);
146
+ };
150
147
  SelfUtils.isMediaInactive = function (previous, current) {
151
148
  if (previous && previous.joinedWith && previous.joinedWith.mediaSessions && current && current.joinedWith && current.joinedWith.mediaSessions) {
152
149
  var previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);
153
150
  var currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);
154
-
155
151
  if (previousMediaStatus.audio && currentMediaStatus.audio && previousMediaStatus.audio.state !== _constants.MEDIA_STATE.inactive && currentMediaStatus.audio.state === _constants.MEDIA_STATE.inactive && currentMediaStatus.audio.direction !== _constants.MEDIA_STATE.inactive) {
156
152
  return true;
157
153
  }
158
-
159
154
  if (previousMediaStatus.video && currentMediaStatus.video && previousMediaStatus.video.state !== _constants.MEDIA_STATE.inactive && currentMediaStatus.video.state === _constants.MEDIA_STATE.inactive && currentMediaStatus.video.direction !== _constants.MEDIA_STATE.inactive) {
160
155
  return true;
161
156
  }
162
-
163
157
  if (previousMediaStatus.share && currentMediaStatus.share && previousMediaStatus.share.state !== _constants.MEDIA_STATE.inactive && currentMediaStatus.share.state === _constants.MEDIA_STATE.inactive && currentMediaStatus.share.direction !== _constants.MEDIA_STATE.inactive) {
164
158
  return true;
165
159
  }
166
-
167
160
  return false;
168
161
  }
169
-
170
162
  return false;
171
163
  };
172
-
173
164
  SelfUtils.getLastModified = function (self) {
174
165
  if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.lastModified) {
175
166
  return null;
176
167
  }
177
-
178
168
  return self.controls.audio.meta.lastModified;
179
169
  };
180
-
181
170
  SelfUtils.getModifiedBy = function (self) {
182
171
  if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.modifiedBy) {
183
172
  return null;
184
173
  }
185
-
186
174
  return self.controls.audio.meta.modifiedBy;
187
175
  };
176
+
188
177
  /**
189
178
  * get the id from the self object
190
179
  * @param {Object} self
191
180
  * @returns {String}
192
181
  */
193
-
194
-
195
182
  SelfUtils.getSelfIdentity = function (self) {
196
183
  if (!self && !self.person) {
197
184
  return null;
198
185
  }
199
-
200
186
  return self.person.id;
201
187
  };
188
+
202
189
  /**
203
- * get the "remote mute" property from the self object
190
+ * get the "remote video mute" property from the self object
204
191
  * @param {Object} self
205
192
  * @returns {Boolean}
206
193
  */
194
+ SelfUtils.getRemoteVideoMuted = function (self) {
195
+ if (!self || !self.controls || !self.controls.video) {
196
+ return null;
197
+ }
198
+ return self.controls.video.muted;
199
+ };
207
200
 
208
-
201
+ /**
202
+ * get the "remote mute" property from the self object
203
+ * @param {Object} self
204
+ * @returns {Boolean}
205
+ */
209
206
  SelfUtils.getRemoteMuted = function (self) {
210
207
  if (!self || !self.controls || !self.controls.audio) {
211
208
  return null;
212
209
  }
213
-
214
210
  return self.controls.audio.muted;
215
211
  };
216
-
217
212
  SelfUtils.getLocalAudioUnmuteRequested = function (self) {
218
- var _self$controls3, _self$controls3$audio;
219
-
220
- return !!(self !== null && self !== void 0 && (_self$controls3 = self.controls) !== null && _self$controls3 !== void 0 && (_self$controls3$audio = _self$controls3.audio) !== null && _self$controls3$audio !== void 0 && _self$controls3$audio.requestedToUnmute);
213
+ var _self$controls5, _self$controls5$audio;
214
+ return !!(self !== null && self !== void 0 && (_self$controls5 = self.controls) !== null && _self$controls5 !== void 0 && (_self$controls5$audio = _self$controls5.audio) !== null && _self$controls5$audio !== void 0 && _self$controls5$audio.requestedToUnmute);
221
215
  };
222
-
223
216
  SelfUtils.getUnmuteAllowed = function (self) {
224
217
  if (!self || !self.controls || !self.controls.audio) {
225
218
  return null;
226
219
  }
227
-
228
220
  return !self.controls.audio.disallowUnmute;
229
221
  };
230
-
231
222
  SelfUtils.getLocalAudioUnmuteRequired = function (self) {
232
- var _self$controls4, _self$controls4$audio;
233
-
234
- return !!(self !== null && self !== void 0 && (_self$controls4 = self.controls) !== null && _self$controls4 !== void 0 && (_self$controls4$audio = _self$controls4.audio) !== null && _self$controls4$audio !== void 0 && _self$controls4$audio.localAudioUnmuteRequired);
223
+ var _self$controls6, _self$controls6$audio;
224
+ return !!(self !== null && self !== void 0 && (_self$controls6 = self.controls) !== null && _self$controls6 !== void 0 && (_self$controls6$audio = _self$controls6.audio) !== null && _self$controls6$audio !== void 0 && _self$controls6$audio.localAudioUnmuteRequired);
235
225
  };
236
-
237
226
  SelfUtils.getStatus = function (status) {
238
227
  return {
239
228
  audio: status.audioStatus,
@@ -241,138 +230,142 @@ SelfUtils.getStatus = function (status) {
241
230
  slides: status.videoSlidesStatus
242
231
  };
243
232
  };
233
+
244
234
  /**
245
235
  * @param {Object} oldSelf
246
236
  * @param {Object} changedSelf
247
237
  * @returns {Boolean}
248
238
  */
249
-
250
-
251
239
  SelfUtils.wasMediaInactiveOrReleased = function () {
252
240
  var oldSelf = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
253
241
  var changedSelf = arguments.length > 1 ? arguments[1] : undefined;
254
- return oldSelf.joinedWith && oldSelf.joinedWith.state === _constants._JOINED_ && changedSelf.joinedWith.state === _constants._LEFT_ && (changedSelf.joinedWith.reason === _constants.MEETING_END_REASON.INACTIVE || changedSelf.joinedWith.reason === _constants.MEETING_END_REASON.MEDIA_RELEASED);
242
+ return oldSelf.joinedWith && oldSelf.joinedWith.state === _constants._JOINED_ && changedSelf.joinedWith && changedSelf.joinedWith.state === _constants._LEFT_ && (changedSelf.joinedWith.reason === _constants.MEETING_END_REASON.INACTIVE || changedSelf.joinedWith.reason === _constants.MEETING_END_REASON.MEDIA_RELEASED);
255
243
  };
244
+
256
245
  /**
257
246
  * @param {Object} check
258
247
  * @returns {Boolean}
259
248
  */
260
-
261
-
262
249
  SelfUtils.isLocusUserUnadmitted = function (check) {
263
250
  var _check$joinedWith, _check$joinedWith$int;
264
-
265
251
  return check && ((_check$joinedWith = check.joinedWith) === null || _check$joinedWith === void 0 ? void 0 : (_check$joinedWith$int = _check$joinedWith.intent) === null || _check$joinedWith$int === void 0 ? void 0 : _check$joinedWith$int.type) === _constants._WAIT_ && check.state === _constants._IDLE_;
266
252
  };
253
+
267
254
  /**
268
255
  * @param {Object} check
269
256
  * @returns {Boolean}
270
257
  */
271
-
272
-
273
258
  SelfUtils.isLocusUserAdmitted = function (check) {
274
259
  var _check$joinedWith2, _check$joinedWith2$in;
275
-
276
260
  return check && ((_check$joinedWith2 = check.joinedWith) === null || _check$joinedWith2 === void 0 ? void 0 : (_check$joinedWith2$in = _check$joinedWith2.intent) === null || _check$joinedWith2$in === void 0 ? void 0 : _check$joinedWith2$in.type) !== _constants._WAIT_ && check.state === _constants._JOINED_;
277
261
  };
262
+
278
263
  /**
279
264
  * @param {Object} self
280
265
  * @returns {Boolean}
281
266
  * @throws {Error} when self is undefined
282
267
  */
283
-
284
-
285
268
  SelfUtils.isUserUnadmitted = function (self) {
286
269
  if (!self) {
287
270
  throw new _parameter.default('self must be defined to determine if self is unadmitted as guest.');
288
271
  }
289
-
290
272
  return SelfUtils.isLocusUserUnadmitted(self);
291
273
  };
292
-
293
274
  SelfUtils.moderatorChanged = function (oldSelf, changedSelf) {
294
275
  if (!oldSelf) {
295
276
  return true;
296
277
  }
297
-
298
278
  if (!changedSelf) {
299
279
  throw new _parameter.default('New self must be defined to determine if self transitioned moderator status.');
300
280
  }
301
-
302
281
  return oldSelf.moderator !== changedSelf.moderator;
303
282
  };
283
+
284
+ /**
285
+ * determine whether the roles of self is changed or not
286
+ * @param {Object} oldSelf
287
+ * @param {Object} changedSelf
288
+ * @returns {Boolean}
289
+ */
290
+ SelfUtils.isRolesChanged = function (oldSelf, changedSelf) {
291
+ if (!changedSelf) {
292
+ // no new self means no change
293
+ return false;
294
+ }
295
+ return !(0, _isEqual2.default)(oldSelf === null || oldSelf === void 0 ? void 0 : oldSelf.roles, changedSelf === null || changedSelf === void 0 ? void 0 : changedSelf.roles);
296
+ };
304
297
  /**
305
298
  * @param {Object} oldSelf
306
299
  * @param {Object} changedSelf
307
300
  * @returns {Boolean}
308
301
  * @throws {Error} if changed self was undefined
309
302
  */
310
-
311
-
312
303
  SelfUtils.isDeviceObserving = function (oldSelf, changedSelf) {
313
304
  var _oldSelf$joinedWith, _oldSelf$joinedWith$i, _changedSelf$joinedWi, _changedSelf$joinedWi2;
314
-
315
305
  return oldSelf && ((_oldSelf$joinedWith = oldSelf.joinedWith) === null || _oldSelf$joinedWith === void 0 ? void 0 : (_oldSelf$joinedWith$i = _oldSelf$joinedWith.intent) === null || _oldSelf$joinedWith$i === void 0 ? void 0 : _oldSelf$joinedWith$i.type) === _constants._MOVE_MEDIA_ && changedSelf && ((_changedSelf$joinedWi = changedSelf.joinedWith) === null || _changedSelf$joinedWi === void 0 ? void 0 : (_changedSelf$joinedWi2 = _changedSelf$joinedWi.intent) === null || _changedSelf$joinedWi2 === void 0 ? void 0 : _changedSelf$joinedWi2.type) === _constants._OBSERVE_;
316
306
  };
307
+
317
308
  /**
318
309
  * @param {Object} oldSelf
319
310
  * @param {Object} changedSelf
320
311
  * @returns {Boolean}
321
312
  * @throws {Error} if changed self was undefined
322
313
  */
323
-
324
-
325
314
  SelfUtils.isUserAdmitted = function (oldSelf, changedSelf) {
326
315
  if (!oldSelf) {
327
316
  // if there was no previous locus, it couldn't have been admitted yet
328
317
  return false;
329
318
  }
330
-
331
319
  if (!changedSelf) {
332
320
  throw new _parameter.default('New self must be defined to determine if self transitioned to admitted as guest.');
333
321
  }
334
-
335
322
  return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
336
323
  };
324
+ SelfUtils.videoMutedByOthersChanged = function (oldSelf, changedSelf) {
325
+ if (!changedSelf) {
326
+ throw new _parameter.default('New self must be defined to determine if self was video muted by others.');
327
+ }
328
+ if (!oldSelf || oldSelf.remoteVideoMuted === null) {
329
+ if (changedSelf.remoteVideoMuted) {
330
+ return true; // this happens when host disables "Allow start video"
331
+ }
337
332
 
333
+ // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join
334
+ return false;
335
+ }
336
+ return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;
337
+ };
338
338
  SelfUtils.mutedByOthersChanged = function (oldSelf, changedSelf) {
339
339
  if (!changedSelf) {
340
340
  throw new _parameter.default('New self must be defined to determine if self was muted by others.');
341
341
  }
342
-
343
342
  if (!oldSelf || oldSelf.remoteMuted === null) {
344
343
  if (changedSelf.remoteMuted) {
345
344
  return true; // this happens when mute on-entry is enabled
346
- } // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join
347
-
345
+ }
348
346
 
347
+ // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join
349
348
  return false;
350
349
  }
351
-
352
350
  return changedSelf.remoteMuted !== null && (oldSelf.remoteMuted !== changedSelf.remoteMuted || changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed);
353
351
  };
354
-
355
352
  SelfUtils.localAudioUnmuteRequestedByServer = function () {
356
353
  var oldSelf = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
357
354
  var changedSelf = arguments.length > 1 ? arguments[1] : undefined;
358
-
359
355
  if (!changedSelf) {
360
356
  throw new _parameter.default('New self must be defined to determine if self received request to unmute.');
361
357
  }
362
-
363
358
  return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;
364
359
  };
365
-
366
360
  SelfUtils.localAudioUnmuteRequiredByServer = function () {
367
361
  var oldSelf = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
368
362
  var changedSelf = arguments.length > 1 ? arguments[1] : undefined;
369
-
370
363
  if (!changedSelf) {
371
364
  throw new _parameter.default('New self must be defined to determine if localAudioUnmuteRequired changed.');
372
365
  }
373
-
374
366
  return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired;
375
367
  };
368
+
376
369
  /**
377
370
  * extract the sipUrl from the partner
378
371
  * @param {Object} partner
@@ -380,7 +373,6 @@ SelfUtils.localAudioUnmuteRequiredByServer = function () {
380
373
  * @returns {Object}
381
374
  */
382
375
 
383
-
384
376
  SelfUtils.getSipUrl = function (partner, type, sipUri) {
385
377
  // For webex meeting the sipUrl gets updated in info parser
386
378
  if (partner && type === _constants._CALL_) {
@@ -388,12 +380,10 @@ SelfUtils.getSipUrl = function (partner, type, sipUri) {
388
380
  sipUri: partner.person.sipUrl || partner.person.id
389
381
  };
390
382
  }
391
-
392
383
  return {
393
384
  sipUri: sipUri
394
385
  };
395
386
  };
396
-
397
387
  SelfUtils.getMediaStatus = function () {
398
388
  var mediaSessions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
399
389
  var mediaStatus = {
@@ -412,7 +402,18 @@ SelfUtils.getMediaStatus = function () {
412
402
  });
413
403
  return mediaStatus;
414
404
  };
415
-
405
+ SelfUtils.getReplacedBreakoutMoveId = function (self, deviceId) {
406
+ if (self && (0, _isArray.default)(self.devices)) {
407
+ var joinedDevice = self.devices.find(function (device) {
408
+ return deviceId === device.url;
409
+ });
410
+ if ((0, _isArray.default)(joinedDevice === null || joinedDevice === void 0 ? void 0 : joinedDevice.replaces)) {
411
+ var _joinedDevice$replace;
412
+ return (_joinedDevice$replace = joinedDevice.replaces[0]) === null || _joinedDevice$replace === void 0 ? void 0 : _joinedDevice$replace.breakoutMoveId;
413
+ }
414
+ }
415
+ return null;
416
+ };
416
417
  var _default = SelfUtils;
417
418
  exports.default = _default;
418
419
  //# sourceMappingURL=selfUtils.js.map