@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.20

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 (365) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +116 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/index.js +226 -0
  8. package/dist/breakouts/index.js.map +1 -0
  9. package/dist/common/browser-detection.js +1 -20
  10. package/dist/common/browser-detection.js.map +1 -1
  11. package/dist/common/collection.js +5 -20
  12. package/dist/common/collection.js.map +1 -1
  13. package/dist/common/config.js +0 -7
  14. package/dist/common/config.js.map +1 -1
  15. package/dist/common/errors/captcha-error.js +10 -24
  16. package/dist/common/errors/captcha-error.js.map +1 -1
  17. package/dist/common/errors/intent-to-join.js +11 -24
  18. package/dist/common/errors/intent-to-join.js.map +1 -1
  19. package/dist/common/errors/join-meeting.js +12 -25
  20. package/dist/common/errors/join-meeting.js.map +1 -1
  21. package/dist/common/errors/media.js +10 -24
  22. package/dist/common/errors/media.js.map +1 -1
  23. package/dist/common/errors/parameter.js +5 -33
  24. package/dist/common/errors/parameter.js.map +1 -1
  25. package/dist/common/errors/password-error.js +10 -24
  26. package/dist/common/errors/password-error.js.map +1 -1
  27. package/dist/common/errors/permission.js +9 -23
  28. package/dist/common/errors/permission.js.map +1 -1
  29. package/dist/common/errors/reconnection-in-progress.js +0 -17
  30. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  31. package/dist/common/errors/reconnection.js +10 -24
  32. package/dist/common/errors/reconnection.js.map +1 -1
  33. package/dist/common/errors/stats.js +10 -24
  34. package/dist/common/errors/stats.js.map +1 -1
  35. package/dist/common/errors/webex-errors.js +6 -41
  36. package/dist/common/errors/webex-errors.js.map +1 -1
  37. package/dist/common/errors/webex-meetings-error.js +5 -25
  38. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  39. package/dist/common/events/events-scope.js +0 -22
  40. package/dist/common/events/events-scope.js.map +1 -1
  41. package/dist/common/events/events.js +0 -23
  42. package/dist/common/events/events.js.map +1 -1
  43. package/dist/common/events/trigger-proxy.js +0 -12
  44. package/dist/common/events/trigger-proxy.js.map +1 -1
  45. package/dist/common/events/util.js +0 -15
  46. package/dist/common/events/util.js.map +1 -1
  47. package/dist/common/logs/logger-config.js +0 -4
  48. package/dist/common/logs/logger-config.js.map +1 -1
  49. package/dist/common/logs/logger-proxy.js +1 -8
  50. package/dist/common/logs/logger-proxy.js.map +1 -1
  51. package/dist/common/logs/request.js +37 -60
  52. package/dist/common/logs/request.js.map +1 -1
  53. package/dist/common/queue.js +4 -14
  54. package/dist/common/queue.js.map +1 -1
  55. package/dist/config.js +6 -6
  56. package/dist/config.js.map +1 -1
  57. package/dist/constants.js +88 -46
  58. package/dist/constants.js.map +1 -1
  59. package/dist/index.js +1 -17
  60. package/dist/index.js.map +1 -1
  61. package/dist/locus-info/controlsUtils.js +12 -29
  62. package/dist/locus-info/controlsUtils.js.map +1 -1
  63. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  64. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  65. package/dist/locus-info/fullState.js +0 -15
  66. package/dist/locus-info/fullState.js.map +1 -1
  67. package/dist/locus-info/hostUtils.js +4 -12
  68. package/dist/locus-info/hostUtils.js.map +1 -1
  69. package/dist/locus-info/index.js +184 -190
  70. package/dist/locus-info/index.js.map +1 -1
  71. package/dist/locus-info/infoUtils.js +3 -37
  72. package/dist/locus-info/infoUtils.js.map +1 -1
  73. package/dist/locus-info/mediaSharesUtils.js +12 -38
  74. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  75. package/dist/locus-info/parser.js +92 -118
  76. package/dist/locus-info/parser.js.map +1 -1
  77. package/dist/locus-info/selfUtils.js +34 -91
  78. package/dist/locus-info/selfUtils.js.map +1 -1
  79. package/dist/media/index.js +67 -111
  80. package/dist/media/index.js.map +1 -1
  81. package/dist/media/properties.js +80 -114
  82. package/dist/media/properties.js.map +1 -1
  83. package/dist/media/util.js +2 -9
  84. package/dist/media/util.js.map +1 -1
  85. package/dist/mediaQualityMetrics/config.js +10 -12
  86. package/dist/mediaQualityMetrics/config.js.map +1 -1
  87. package/dist/meeting/effectsState.js +125 -190
  88. package/dist/meeting/effectsState.js.map +1 -1
  89. package/dist/meeting/in-meeting-actions.js +5 -14
  90. package/dist/meeting/in-meeting-actions.js.map +1 -1
  91. package/dist/meeting/index.js +1692 -1925
  92. package/dist/meeting/index.js.map +1 -1
  93. package/dist/meeting/muteState.js +36 -77
  94. package/dist/meeting/muteState.js.map +1 -1
  95. package/dist/meeting/request.js +224 -230
  96. package/dist/meeting/request.js.map +1 -1
  97. package/dist/meeting/request.type.js +7 -0
  98. package/dist/meeting/request.type.js.map +1 -0
  99. package/dist/meeting/state.js +21 -31
  100. package/dist/meeting/state.js.map +1 -1
  101. package/dist/meeting/util.js +43 -215
  102. package/dist/meeting/util.js.map +1 -1
  103. package/dist/meeting-info/collection.js +6 -25
  104. package/dist/meeting-info/collection.js.map +1 -1
  105. package/dist/meeting-info/index.js +14 -32
  106. package/dist/meeting-info/index.js.map +1 -1
  107. package/dist/meeting-info/meeting-info-v2.js +193 -268
  108. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  109. package/dist/meeting-info/request.js +3 -15
  110. package/dist/meeting-info/request.js.map +1 -1
  111. package/dist/meeting-info/util.js +98 -183
  112. package/dist/meeting-info/util.js.map +1 -1
  113. package/dist/meeting-info/utilv2.js +137 -228
  114. package/dist/meeting-info/utilv2.js.map +1 -1
  115. package/dist/meetings/collection.js +5 -20
  116. package/dist/meetings/collection.js.map +1 -1
  117. package/dist/meetings/index.js +490 -560
  118. package/dist/meetings/index.js.map +1 -1
  119. package/dist/meetings/request.js +24 -41
  120. package/dist/meetings/request.js.map +1 -1
  121. package/dist/meetings/util.js +99 -155
  122. package/dist/meetings/util.js.map +1 -1
  123. package/dist/member/index.js +78 -86
  124. package/dist/member/index.js.map +1 -1
  125. package/dist/member/util.js +31 -68
  126. package/dist/member/util.js.map +1 -1
  127. package/dist/members/collection.js +3 -12
  128. package/dist/members/collection.js.map +1 -1
  129. package/dist/members/index.js +93 -200
  130. package/dist/members/index.js.map +1 -1
  131. package/dist/members/request.js +16 -39
  132. package/dist/members/request.js.map +1 -1
  133. package/dist/members/util.js +9 -38
  134. package/dist/members/util.js.map +1 -1
  135. package/dist/metrics/config.js +0 -2
  136. package/dist/metrics/config.js.map +1 -1
  137. package/dist/metrics/constants.js +1 -2
  138. package/dist/metrics/constants.js.map +1 -1
  139. package/dist/metrics/index.js +55 -135
  140. package/dist/metrics/index.js.map +1 -1
  141. package/dist/multistream/mediaRequestManager.js +57 -32
  142. package/dist/multistream/mediaRequestManager.js.map +1 -1
  143. package/dist/multistream/multistreamMedia.js +15 -21
  144. package/dist/multistream/multistreamMedia.js.map +1 -1
  145. package/dist/multistream/receiveSlot.js +10 -50
  146. package/dist/multistream/receiveSlot.js.map +1 -1
  147. package/dist/multistream/receiveSlotManager.js +45 -82
  148. package/dist/multistream/receiveSlotManager.js.map +1 -1
  149. package/dist/multistream/remoteMedia.js +18 -58
  150. package/dist/multistream/remoteMedia.js.map +1 -1
  151. package/dist/multistream/remoteMediaGroup.js +6 -40
  152. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  153. package/dist/multistream/remoteMediaManager.js +362 -416
  154. package/dist/multistream/remoteMediaManager.js.map +1 -1
  155. package/dist/networkQualityMonitor/index.js +36 -57
  156. package/dist/networkQualityMonitor/index.js.map +1 -1
  157. package/dist/personal-meeting-room/index.js +21 -45
  158. package/dist/personal-meeting-room/index.js.map +1 -1
  159. package/dist/personal-meeting-room/request.js +1 -31
  160. package/dist/personal-meeting-room/request.js.map +1 -1
  161. package/dist/personal-meeting-room/util.js +0 -13
  162. package/dist/personal-meeting-room/util.js.map +1 -1
  163. package/dist/reachability/index.js +138 -182
  164. package/dist/reachability/index.js.map +1 -1
  165. package/dist/reachability/request.js +3 -18
  166. package/dist/reachability/request.js.map +1 -1
  167. package/dist/reactions/constants.js +13 -0
  168. package/dist/reactions/constants.js.map +1 -0
  169. package/dist/reactions/reactions.js +109 -0
  170. package/dist/reactions/reactions.js.map +1 -0
  171. package/dist/reactions/reactions.type.js +36 -0
  172. package/dist/reactions/reactions.type.js.map +1 -0
  173. package/dist/reconnection-manager/index.js +322 -455
  174. package/dist/reconnection-manager/index.js.map +1 -1
  175. package/dist/recording-controller/enums.js +17 -0
  176. package/dist/recording-controller/enums.js.map +1 -0
  177. package/dist/recording-controller/index.js +343 -0
  178. package/dist/recording-controller/index.js.map +1 -0
  179. package/dist/recording-controller/util.js +63 -0
  180. package/dist/recording-controller/util.js.map +1 -0
  181. package/dist/roap/index.js +39 -64
  182. package/dist/roap/index.js.map +1 -1
  183. package/dist/roap/request.js +94 -113
  184. package/dist/roap/request.js.map +1 -1
  185. package/dist/roap/turnDiscovery.js +85 -94
  186. package/dist/roap/turnDiscovery.js.map +1 -1
  187. package/dist/statsAnalyzer/global.js +0 -2
  188. package/dist/statsAnalyzer/global.js.map +1 -1
  189. package/dist/statsAnalyzer/index.js +85 -175
  190. package/dist/statsAnalyzer/index.js.map +1 -1
  191. package/dist/statsAnalyzer/mqaUtil.js +72 -53
  192. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  193. package/dist/transcription/index.js +22 -47
  194. package/dist/transcription/index.js.map +1 -1
  195. package/internal-README.md +7 -6
  196. package/package.json +25 -20
  197. package/src/breakouts/README.md +190 -0
  198. package/src/breakouts/breakout.ts +110 -0
  199. package/src/breakouts/collection.ts +19 -0
  200. package/src/breakouts/index.ts +225 -0
  201. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  202. package/src/common/collection.ts +9 -7
  203. package/src/common/{config.js → config.ts} +1 -1
  204. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  205. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  206. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  207. package/src/common/errors/{media.js → media.ts} +11 -7
  208. package/src/common/errors/parameter.ts +11 -7
  209. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  210. package/src/common/errors/{permission.js → permission.ts} +10 -6
  211. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  212. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  213. package/src/common/errors/{stats.js → stats.ts} +11 -7
  214. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  215. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  216. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  217. package/src/common/events/{events.js → events.ts} +5 -1
  218. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  219. package/src/common/events/{util.js → util.ts} +2 -3
  220. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  221. package/src/common/logs/logger-proxy.ts +44 -0
  222. package/src/common/logs/{request.js → request.ts} +22 -9
  223. package/src/common/queue.ts +1 -2
  224. package/src/{config.js → config.ts} +17 -12
  225. package/src/constants.ts +40 -1
  226. package/src/index.js +1 -1
  227. package/src/locus-info/controlsUtils.ts +114 -0
  228. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  229. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  230. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  231. package/src/locus-info/{index.js → index.ts} +148 -64
  232. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  233. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  234. package/src/locus-info/{parser.js → parser.ts} +67 -79
  235. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  236. package/src/media/{index.js → index.ts} +181 -131
  237. package/src/media/{properties.js → properties.ts} +47 -28
  238. package/src/media/{util.js → util.ts} +2 -2
  239. package/src/mediaQualityMetrics/{config.js → config.ts} +46 -46
  240. package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
  241. package/src/meeting/in-meeting-actions.ts +15 -3
  242. package/src/meeting/{index.js → index.ts} +2263 -1427
  243. package/src/meeting/{muteState.js → muteState.ts} +78 -42
  244. package/src/meeting/{request.js → request.ts} +292 -142
  245. package/src/meeting/request.type.ts +13 -0
  246. package/src/meeting/{state.js → state.ts} +50 -35
  247. package/src/meeting/{util.js → util.ts} +112 -115
  248. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  249. package/src/meeting-info/{index.js → index.ts} +42 -36
  250. package/src/meeting-info/meeting-info-v2.ts +273 -0
  251. package/src/meeting-info/{request.js → request.ts} +14 -4
  252. package/src/meeting-info/{util.js → util.ts} +60 -51
  253. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  254. package/src/meetings/{collection.js → collection.ts} +6 -3
  255. package/src/meetings/index.ts +1159 -0
  256. package/src/meetings/{request.js → request.ts} +32 -25
  257. package/src/meetings/{util.js → util.ts} +34 -32
  258. package/src/member/{index.js → index.ts} +102 -56
  259. package/src/member/{util.js → util.ts} +52 -25
  260. package/src/members/{collection.js → collection.ts} +2 -2
  261. package/src/members/{index.js → index.ts} +219 -142
  262. package/src/members/{request.js → request.ts} +60 -16
  263. package/src/members/{util.js → util.ts} +50 -48
  264. package/src/metrics/{config.js → config.ts} +254 -83
  265. package/src/metrics/{constants.js → constants.ts} +0 -2
  266. package/src/metrics/{index.js → index.ts} +106 -74
  267. package/src/multistream/mediaRequestManager.ts +81 -15
  268. package/src/multistream/multistreamMedia.ts +5 -0
  269. package/src/multistream/receiveSlot.ts +18 -12
  270. package/src/multistream/receiveSlotManager.ts +23 -21
  271. package/src/multistream/remoteMedia.ts +15 -5
  272. package/src/multistream/remoteMediaGroup.ts +4 -3
  273. package/src/multistream/remoteMediaManager.ts +153 -37
  274. package/src/networkQualityMonitor/{index.js → index.ts} +37 -25
  275. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  276. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  277. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  278. package/src/reachability/{index.js → index.ts} +99 -83
  279. package/src/reachability/request.ts +39 -33
  280. package/src/reactions/constants.ts +4 -0
  281. package/src/reactions/reactions.ts +104 -0
  282. package/src/reactions/reactions.type.ts +62 -0
  283. package/src/reconnection-manager/{index.js → index.ts} +195 -102
  284. package/src/recording-controller/enums.ts +8 -0
  285. package/src/recording-controller/index.ts +315 -0
  286. package/src/recording-controller/util.ts +58 -0
  287. package/src/roap/{index.js → index.ts} +73 -56
  288. package/src/roap/request.ts +157 -0
  289. package/src/roap/turnDiscovery.ts +77 -37
  290. package/src/statsAnalyzer/{global.js → global.ts} +30 -33
  291. package/src/statsAnalyzer/{index.js → index.ts} +468 -192
  292. package/src/statsAnalyzer/mqaUtil.ts +290 -0
  293. package/src/transcription/{index.js → index.ts} +46 -39
  294. package/test/integration/spec/journey.js +664 -463
  295. package/test/integration/spec/space-meeting.js +320 -206
  296. package/test/integration/spec/transcription.js +7 -8
  297. package/test/unit/spec/breakouts/breakout.ts +119 -0
  298. package/test/unit/spec/breakouts/collection.ts +15 -0
  299. package/test/unit/spec/breakouts/index.ts +293 -0
  300. package/test/unit/spec/common/browser-detection.js +9 -28
  301. package/test/unit/spec/fixture/locus.js +92 -90
  302. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  303. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  304. package/test/unit/spec/locus-info/index.js +104 -2
  305. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  306. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  307. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  308. package/test/unit/spec/locus-info/parser.js +3 -9
  309. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  310. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  311. package/test/unit/spec/media/index.ts +31 -47
  312. package/test/unit/spec/media/properties.ts +9 -9
  313. package/test/unit/spec/meeting/effectsState.js +39 -45
  314. package/test/unit/spec/meeting/in-meeting-actions.ts +5 -2
  315. package/test/unit/spec/meeting/index.js +2017 -742
  316. package/test/unit/spec/meeting/muteState.js +42 -33
  317. package/test/unit/spec/meeting/request.js +115 -44
  318. package/test/unit/spec/meeting/utils.js +104 -171
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  320. package/test/unit/spec/meeting-info/request.js +7 -9
  321. package/test/unit/spec/meeting-info/util.js +11 -12
  322. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  323. package/test/unit/spec/meetings/collection.js +1 -1
  324. package/test/unit/spec/meetings/index.js +439 -257
  325. package/test/unit/spec/meetings/utils.js +14 -12
  326. package/test/unit/spec/member/index.js +0 -1
  327. package/test/unit/spec/member/util.js +31 -7
  328. package/test/unit/spec/members/index.js +104 -54
  329. package/test/unit/spec/members/request.js +29 -20
  330. package/test/unit/spec/members/utils.js +8 -5
  331. package/test/unit/spec/metrics/index.js +16 -21
  332. package/test/unit/spec/multistream/mediaRequestManager.ts +316 -50
  333. package/test/unit/spec/multistream/receiveSlot.ts +6 -6
  334. package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
  335. package/test/unit/spec/multistream/remoteMedia.ts +10 -2
  336. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  337. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  338. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  339. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  340. package/test/unit/spec/reachability/index.ts +58 -26
  341. package/test/unit/spec/reconnection-manager/index.js +102 -9
  342. package/test/unit/spec/recording-controller/index.js +231 -0
  343. package/test/unit/spec/recording-controller/util.js +102 -0
  344. package/test/unit/spec/roap/index.ts +2 -1
  345. package/test/unit/spec/roap/request.ts +114 -0
  346. package/test/unit/spec/roap/turnDiscovery.ts +64 -45
  347. package/test/unit/spec/stats-analyzer/index.js +27 -22
  348. package/test/utils/cmr.js +44 -42
  349. package/test/utils/testUtils.js +83 -74
  350. package/test/utils/webex-config.js +18 -18
  351. package/test/utils/webex-test-users.js +54 -50
  352. package/tsconfig.json +6 -0
  353. package/dist/media/internal-media-core-wrapper.js +0 -22
  354. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  355. package/dist/peer-connection-manager/util.js +0 -124
  356. package/dist/peer-connection-manager/util.js.map +0 -1
  357. package/src/common/logs/logger-proxy.js +0 -33
  358. package/src/locus-info/controlsUtils.js +0 -102
  359. package/src/media/internal-media-core-wrapper.ts +0 -9
  360. package/src/meeting-info/meeting-info-v2.js +0 -255
  361. package/src/meetings/index.js +0 -1015
  362. package/src/peer-connection-manager/util.ts +0 -117
  363. package/src/roap/request.js +0 -127
  364. package/src/statsAnalyzer/mqaUtil.js +0 -173
  365. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
@@ -1,4 +1,6 @@
1
+ /* eslint-disable default-param-last */
1
2
 
3
+ import {isEqual} from 'lodash';
2
4
  import {
3
5
  _IDLE_,
4
6
  _JOINED_,
@@ -11,11 +13,11 @@ import {
11
13
  MEDIA_STATE,
12
14
  AUDIO,
13
15
  VIDEO,
14
- MediaContent
16
+ MediaContent,
15
17
  } from '../constants';
16
18
  import ParameterError from '../common/errors/parameter';
17
19
 
18
- const SelfUtils = {};
20
+ const SelfUtils: any = {};
19
21
  const PSTN_DEVICE_TYPE = 'PROVISIONAL';
20
22
 
21
23
  /**
@@ -24,7 +26,7 @@ const PSTN_DEVICE_TYPE = 'PROVISIONAL';
24
26
  * @param {String} deviceId
25
27
  * @returns {undefined}
26
28
  */
27
- SelfUtils.parse = (self, deviceId) => {
29
+ SelfUtils.parse = (self: any, deviceId: string) => {
28
30
  if (self) {
29
31
  const joinedWith = self.devices.find((device) => deviceId === device.url);
30
32
  const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);
@@ -48,9 +50,7 @@ SelfUtils.parse = (self, deviceId) => {
48
50
  joinedWith,
49
51
  pstnDevices,
50
52
  // current media stats is for the current device who has joined
51
- currentMediaStatus: SelfUtils.getMediaStatus(
52
- joinedWith?.mediaSessions
53
- ),
53
+ currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),
54
54
  creator: self.isCreator, // check if its used,
55
55
  selfId: self.id,
56
56
  selfIdentity: SelfUtils.getSelfIdentity(self),
@@ -60,22 +60,27 @@ SelfUtils.parse = (self, deviceId) => {
60
60
  isUserUnadmitted: self.state === _IDLE_ && joinedWith?.intent?.type === _WAIT_,
61
61
  layout: SelfUtils.getLayout(self),
62
62
  canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),
63
- isSharingBlocked: SelfUtils.isSharingBlocked(self)
63
+ isSharingBlocked: SelfUtils.isSharingBlocked(self),
64
+ breakoutSessions: SelfUtils.getBreakouts(self),
64
65
  };
65
66
  }
66
67
 
67
68
  return null;
68
69
  };
69
70
 
70
- SelfUtils.getLayout = (self) => (Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined);
71
+ SelfUtils.getBreakouts = (self) => self?.controls?.breakout?.sessions;
71
72
 
72
- SelfUtils.getRoles = (self) => (self?.controls?.role?.roles || []).reduce((roles, role) => {
73
- if (role.hasRole) {
74
- roles.push(role.type);
75
- }
73
+ SelfUtils.getLayout = (self) =>
74
+ Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined;
75
+
76
+ SelfUtils.getRoles = (self) =>
77
+ (self?.controls?.role?.roles || []).reduce((roles, role) => {
78
+ if (role.hasRole) {
79
+ roles.push(role.type);
80
+ }
76
81
 
77
- return roles;
78
- }, []);
82
+ return roles;
83
+ }, []);
79
84
 
80
85
  SelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;
81
86
 
@@ -84,30 +89,41 @@ SelfUtils.isSharingBlocked = (self) => !!self?.isSharingBlocked;
84
89
  SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
85
90
  const previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);
86
91
  const current = newSelf && SelfUtils.parse(newSelf, deviceId);
87
- const updates = {};
92
+ const updates: any = {};
88
93
 
89
94
  updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);
90
95
  updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
91
96
  updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
92
- updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);
93
- updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);
97
+ updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(
98
+ previous,
99
+ current
100
+ );
101
+ updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(
102
+ previous,
103
+ current
104
+ );
94
105
  updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);
95
106
  updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);
96
107
  updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);
97
108
  updates.layoutChanged = SelfUtils.layoutChanged(previous, current);
98
109
 
99
110
  updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);
100
- updates.audioStateChange = previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;
101
- updates.videoStateChange = previous?.currentMediaStatus.video !== current.currentMediaStatus.video;
102
- updates.shareStateChange = previous?.currentMediaStatus.share !== current.currentMediaStatus.share;
103
-
104
- updates.canNotViewTheParticipantListChanged = previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;
111
+ updates.audioStateChange =
112
+ previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;
113
+ updates.videoStateChange =
114
+ previous?.currentMediaStatus.video !== current.currentMediaStatus.video;
115
+ updates.shareStateChange =
116
+ previous?.currentMediaStatus.share !== current.currentMediaStatus.share;
117
+
118
+ updates.canNotViewTheParticipantListChanged =
119
+ previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;
105
120
  updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;
121
+ updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);
106
122
 
107
123
  return {
108
124
  previous,
109
125
  current,
110
- updates
126
+ updates,
111
127
  };
112
128
  };
113
129
 
@@ -115,8 +131,8 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
115
131
  * Checks if user has joined the meeting
116
132
  * @param {Object} self
117
133
  * @returns {boolean} isJoined
118
- */
119
- SelfUtils.isJoined = (self) => self?.state === _JOINED_;
134
+ */
135
+ SelfUtils.isJoined = (self: any) => self?.state === _JOINED_;
120
136
 
121
137
  /**
122
138
  * Validate if the Meeting Layout Controls Layout has changed.
@@ -125,8 +141,11 @@ SelfUtils.isJoined = (self) => self?.state === _JOINED_;
125
141
  * @param {Self} current - Current self state [per event]
126
142
  * @returns {boolean} - If the MEeting Layout Controls Layout has changed.
127
143
  */
128
- SelfUtils.layoutChanged = (previous, current) => current?.layout && previous?.layout !== current?.layout;
144
+ SelfUtils.layoutChanged = (previous: any, current: any) =>
145
+ current?.layout && previous?.layout !== current?.layout;
129
146
 
147
+ SelfUtils.breakoutsChanged = (previous, current) =>
148
+ !isEqual(previous?.breakoutSessions, current?.breakoutSessions);
130
149
 
131
150
  SelfUtils.isMediaInactive = (previous, current) => {
132
151
  if (
@@ -137,15 +156,12 @@ SelfUtils.isMediaInactive = (previous, current) => {
137
156
  current.joinedWith &&
138
157
  current.joinedWith.mediaSessions
139
158
  ) {
140
- const previousMediaStatus = SelfUtils.getMediaStatus(
141
- previous.joinedWith.mediaSessions
142
- );
143
- const currentMediaStatus = SelfUtils.getMediaStatus(
144
- current.joinedWith.mediaSessions
145
- );
159
+ const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);
160
+ const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);
146
161
 
147
162
  if (
148
- previousMediaStatus.audio && currentMediaStatus.audio &&
163
+ previousMediaStatus.audio &&
164
+ currentMediaStatus.audio &&
149
165
  previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&
150
166
  currentMediaStatus.audio.state === MEDIA_STATE.inactive &&
151
167
  currentMediaStatus.audio.direction !== MEDIA_STATE.inactive
@@ -154,7 +170,8 @@ SelfUtils.isMediaInactive = (previous, current) => {
154
170
  }
155
171
 
156
172
  if (
157
- previousMediaStatus.video && currentMediaStatus.video &&
173
+ previousMediaStatus.video &&
174
+ currentMediaStatus.video &&
158
175
  previousMediaStatus.video.state !== MEDIA_STATE.inactive &&
159
176
  currentMediaStatus.video.state === MEDIA_STATE.inactive &&
160
177
  currentMediaStatus.video.direction !== MEDIA_STATE.inactive
@@ -163,7 +180,8 @@ SelfUtils.isMediaInactive = (previous, current) => {
163
180
  }
164
181
 
165
182
  if (
166
- previousMediaStatus.share && currentMediaStatus.share &&
183
+ previousMediaStatus.share &&
184
+ currentMediaStatus.share &&
167
185
  previousMediaStatus.share.state !== MEDIA_STATE.inactive &&
168
186
  currentMediaStatus.share.state === MEDIA_STATE.inactive &&
169
187
  currentMediaStatus.share.direction !== MEDIA_STATE.inactive
@@ -178,7 +196,13 @@ SelfUtils.isMediaInactive = (previous, current) => {
178
196
  };
179
197
 
180
198
  SelfUtils.getLastModified = (self) => {
181
- if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.lastModified) {
199
+ if (
200
+ !self ||
201
+ !self.controls ||
202
+ !self.controls.audio ||
203
+ !self.controls.audio.meta ||
204
+ !self.controls.audio.meta.lastModified
205
+ ) {
182
206
  return null;
183
207
  }
184
208
 
@@ -186,7 +210,13 @@ SelfUtils.getLastModified = (self) => {
186
210
  };
187
211
 
188
212
  SelfUtils.getModifiedBy = (self) => {
189
- if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.modifiedBy) {
213
+ if (
214
+ !self ||
215
+ !self.controls ||
216
+ !self.controls.audio ||
217
+ !self.controls.audio.meta ||
218
+ !self.controls.audio.meta.modifiedBy
219
+ ) {
190
220
  return null;
191
221
  }
192
222
 
@@ -198,7 +228,7 @@ SelfUtils.getModifiedBy = (self) => {
198
228
  * @param {Object} self
199
229
  * @returns {String}
200
230
  */
201
- SelfUtils.getSelfIdentity = (self) => {
231
+ SelfUtils.getSelfIdentity = (self: any) => {
202
232
  if (!self && !self.person) {
203
233
  return null;
204
234
  }
@@ -211,7 +241,7 @@ SelfUtils.getSelfIdentity = (self) => {
211
241
  * @param {Object} self
212
242
  * @returns {Boolean}
213
243
  */
214
- SelfUtils.getRemoteMuted = (self) => {
244
+ SelfUtils.getRemoteMuted = (self: any) => {
215
245
  if (!self || !self.controls || !self.controls.audio) {
216
246
  return null;
217
247
  }
@@ -229,43 +259,46 @@ SelfUtils.getUnmuteAllowed = (self) => {
229
259
  return !self.controls.audio.disallowUnmute;
230
260
  };
231
261
 
232
-
233
262
  SelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;
234
263
 
235
264
  SelfUtils.getStatus = (status) => ({
236
265
  audio: status.audioStatus,
237
266
  video: status.videoStatus,
238
- slides: status.videoSlidesStatus
267
+ slides: status.videoSlidesStatus,
239
268
  });
240
269
 
241
-
242
270
  /**
243
271
  * @param {Object} oldSelf
244
272
  * @param {Object} changedSelf
245
273
  * @returns {Boolean}
246
274
  */
247
- SelfUtils.wasMediaInactiveOrReleased = (oldSelf = {}, changedSelf) => oldSelf.joinedWith && oldSelf.joinedWith.state === _JOINED_ && changedSelf.joinedWith.state === _LEFT_ &&
248
- (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE || changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);
249
-
275
+ SelfUtils.wasMediaInactiveOrReleased = (oldSelf: any = {}, changedSelf: any) =>
276
+ oldSelf.joinedWith &&
277
+ oldSelf.joinedWith.state === _JOINED_ &&
278
+ changedSelf.joinedWith.state === _LEFT_ &&
279
+ (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||
280
+ changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);
250
281
 
251
282
  /**
252
283
  * @param {Object} check
253
284
  * @returns {Boolean}
254
285
  */
255
- SelfUtils.isLocusUserUnadmitted = (check) => check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;
286
+ SelfUtils.isLocusUserUnadmitted = (check: any) =>
287
+ check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;
256
288
 
257
289
  /**
258
290
  * @param {Object} check
259
291
  * @returns {Boolean}
260
292
  */
261
- SelfUtils.isLocusUserAdmitted = (check) => check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;
293
+ SelfUtils.isLocusUserAdmitted = (check: any) =>
294
+ check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;
262
295
 
263
296
  /**
264
297
  * @param {Object} self
265
298
  * @returns {Boolean}
266
299
  * @throws {Error} when self is undefined
267
300
  */
268
- SelfUtils.isUserUnadmitted = (self) => {
301
+ SelfUtils.isUserUnadmitted = (self: object) => {
269
302
  if (!self) {
270
303
  throw new ParameterError('self must be defined to determine if self is unadmitted as guest.');
271
304
  }
@@ -278,20 +311,25 @@ SelfUtils.moderatorChanged = (oldSelf, changedSelf) => {
278
311
  return true;
279
312
  }
280
313
  if (!changedSelf) {
281
- throw new ParameterError('New self must be defined to determine if self transitioned moderator status.');
314
+ throw new ParameterError(
315
+ 'New self must be defined to determine if self transitioned moderator status.'
316
+ );
282
317
  }
283
318
 
284
319
  return oldSelf.moderator !== changedSelf.moderator;
285
320
  };
286
321
 
287
-
288
322
  /**
289
323
  * @param {Object} oldSelf
290
324
  * @param {Object} changedSelf
291
325
  * @returns {Boolean}
292
326
  * @throws {Error} if changed self was undefined
293
327
  */
294
- SelfUtils.isDeviceObserving = (oldSelf, changedSelf) => oldSelf && oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ && changedSelf && changedSelf.joinedWith?.intent?.type === _OBSERVE_;
328
+ SelfUtils.isDeviceObserving = (oldSelf: any, changedSelf: any) =>
329
+ oldSelf &&
330
+ oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&
331
+ changedSelf &&
332
+ changedSelf.joinedWith?.intent?.type === _OBSERVE_;
295
333
 
296
334
  /**
297
335
  * @param {Object} oldSelf
@@ -299,13 +337,15 @@ SelfUtils.isDeviceObserving = (oldSelf, changedSelf) => oldSelf && oldSelf.joine
299
337
  * @returns {Boolean}
300
338
  * @throws {Error} if changed self was undefined
301
339
  */
302
- SelfUtils.isUserAdmitted = (oldSelf, changedSelf) => {
340
+ SelfUtils.isUserAdmitted = (oldSelf: object, changedSelf: object) => {
303
341
  if (!oldSelf) {
304
342
  // if there was no previous locus, it couldn't have been admitted yet
305
343
  return false;
306
344
  }
307
345
  if (!changedSelf) {
308
- throw new ParameterError('New self must be defined to determine if self transitioned to admitted as guest.');
346
+ throw new ParameterError(
347
+ 'New self must be defined to determine if self transitioned to admitted as guest.'
348
+ );
309
349
  }
310
350
 
311
351
  return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
@@ -316,7 +356,7 @@ SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
316
356
  throw new ParameterError('New self must be defined to determine if self was muted by others.');
317
357
  }
318
358
 
319
- if (!oldSelf || (oldSelf.remoteMuted === null)) {
359
+ if (!oldSelf || oldSelf.remoteMuted === null) {
320
360
  if (changedSelf.remoteMuted) {
321
361
  return true; // this happens when mute on-entry is enabled
322
362
  }
@@ -325,25 +365,35 @@ SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
325
365
  return false;
326
366
  }
327
367
 
328
- return (changedSelf.remoteMuted !== null) &&
329
- ((oldSelf.remoteMuted !== changedSelf.remoteMuted) || (changedSelf.remoteMuted && (oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed)));
368
+ return (
369
+ changedSelf.remoteMuted !== null &&
370
+ (oldSelf.remoteMuted !== changedSelf.remoteMuted ||
371
+ (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))
372
+ );
330
373
  };
331
374
 
332
- SelfUtils.localAudioUnmuteRequestedByServer = (oldSelf = {}, changedSelf) => {
375
+ SelfUtils.localAudioUnmuteRequestedByServer = (oldSelf: any = {}, changedSelf: any) => {
333
376
  if (!changedSelf) {
334
- throw new ParameterError('New self must be defined to determine if self received request to unmute.');
377
+ throw new ParameterError(
378
+ 'New self must be defined to determine if self received request to unmute.'
379
+ );
335
380
  }
336
381
 
337
382
  return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;
338
383
  };
339
384
 
340
-
341
- SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf = {}, changedSelf) => {
385
+ SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf: any = {}, changedSelf: any) => {
342
386
  if (!changedSelf) {
343
- throw new ParameterError('New self must be defined to determine if localAudioUnmuteRequired changed.');
387
+ throw new ParameterError(
388
+ 'New self must be defined to determine if localAudioUnmuteRequired changed.'
389
+ );
344
390
  }
345
391
 
346
- return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && (oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired);
392
+ return (
393
+ !changedSelf.remoteMuted &&
394
+ changedSelf.localAudioUnmuteRequired &&
395
+ oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired
396
+ );
347
397
  };
348
398
 
349
399
  /**
@@ -353,7 +403,7 @@ SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf = {}, changedSelf) => {
353
403
  * @returns {Object}
354
404
  */
355
405
 
356
- SelfUtils.getSipUrl = (partner, type, sipUri) => {
406
+ SelfUtils.getSipUrl = (partner: any, type, sipUri) => {
357
407
  // For webex meeting the sipUrl gets updated in info parser
358
408
  if (partner && type === _CALL_) {
359
409
  return {sipUri: partner.person.sipUrl || partner.person.id};
@@ -366,15 +416,20 @@ SelfUtils.getMediaStatus = (mediaSessions = []) => {
366
416
  const mediaStatus = {
367
417
  audio: {},
368
418
  video: {},
369
- share: {}
419
+ share: {},
370
420
  };
371
421
 
372
- mediaStatus.audio = mediaSessions.find((media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main);
373
- mediaStatus.video = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main);
374
- mediaStatus.share = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides);
422
+ mediaStatus.audio = mediaSessions.find(
423
+ (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main
424
+ );
425
+ mediaStatus.video = mediaSessions.find(
426
+ (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main
427
+ );
428
+ mediaStatus.share = mediaSessions.find(
429
+ (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides
430
+ );
375
431
 
376
432
  return mediaStatus;
377
433
  };
378
434
 
379
-
380
435
  export default SelfUtils;