@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.104

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 (548) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +10 -24
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +11 -24
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +12 -25
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +10 -24
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +10 -24
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +9 -23
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +10 -24
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +10 -24
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +10 -69
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +5 -25
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +37 -60
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +7 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +184 -122
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +362 -208
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +3 -37
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +92 -118
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +113 -337
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +96 -135
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +1 -35
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2909 -2398
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +257 -112
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +330 -264
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +63 -261
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +6 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +14 -32
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +273 -280
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +3 -15
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +26 -19
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +741 -548
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +26 -41
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +194 -149
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +100 -85
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -68
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +13 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +227 -188
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +54 -39
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +67 -159
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +250 -0
  168. package/dist/multistream/mediaRequestManager.js.map +1 -0
  169. package/dist/multistream/receiveSlot.js +202 -0
  170. package/dist/multistream/receiveSlot.js.map +1 -0
  171. package/dist/multistream/receiveSlotManager.js +176 -0
  172. package/dist/multistream/receiveSlotManager.js.map +1 -0
  173. package/dist/multistream/remoteMedia.js +270 -0
  174. package/dist/multistream/remoteMedia.js.map +1 -0
  175. package/dist/multistream/remoteMediaGroup.js +209 -0
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  177. package/dist/multistream/remoteMediaManager.js +1137 -0
  178. package/dist/multistream/remoteMediaManager.js.map +1 -0
  179. package/dist/networkQualityMonitor/index.js +40 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +21 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +1 -31
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +192 -191
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +15 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +386 -527
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +84 -286
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +138 -238
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +164 -102
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -93
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +399 -470
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +22 -47
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +29 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  341. package/src/common/collection.ts +9 -7
  342. package/src/common/{config.js → config.ts} +1 -1
  343. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  344. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  345. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  346. package/src/common/errors/{media.js → media.ts} +11 -7
  347. package/src/common/errors/parameter.ts +11 -7
  348. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  349. package/src/common/errors/{permission.js → permission.ts} +10 -6
  350. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  351. package/src/common/errors/{stats.js → stats.ts} +11 -7
  352. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -25
  353. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  354. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  355. package/src/common/events/{events.js → events.ts} +5 -1
  356. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  357. package/src/common/events/{util.js → util.ts} +2 -3
  358. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  359. package/src/common/logs/logger-proxy.ts +44 -0
  360. package/src/common/logs/{request.js → request.ts} +22 -9
  361. package/src/common/queue.ts +1 -2
  362. package/src/{config.js → config.ts} +18 -12
  363. package/src/constants.ts +256 -183
  364. package/src/controls-options-manager/constants.ts +5 -0
  365. package/src/controls-options-manager/enums.ts +16 -0
  366. package/src/controls-options-manager/index.ts +278 -0
  367. package/src/controls-options-manager/types.ts +49 -0
  368. package/src/controls-options-manager/util.ts +229 -0
  369. package/src/index.ts +33 -0
  370. package/src/locus-info/controlsUtils.ts +169 -0
  371. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  372. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  373. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  374. package/src/locus-info/{index.js → index.ts} +331 -80
  375. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  376. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  377. package/src/locus-info/{parser.js → parser.ts} +67 -79
  378. package/src/locus-info/{selfUtils.js → selfUtils.ts} +196 -67
  379. package/src/media/index.ts +488 -0
  380. package/src/media/{properties.js → properties.ts} +67 -54
  381. package/src/media/util.ts +16 -0
  382. package/src/mediaQualityMetrics/config.ts +384 -0
  383. package/src/meeting/in-meeting-actions.ts +123 -3
  384. package/src/meeting/{index.js → index.ts} +3334 -1775
  385. package/src/meeting/muteState.ts +526 -0
  386. package/src/meeting/{request.js → request.ts} +350 -142
  387. package/src/meeting/request.type.ts +13 -0
  388. package/src/meeting/{state.js → state.ts} +50 -35
  389. package/src/meeting/{util.js → util.ts} +126 -159
  390. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  391. package/src/meeting-info/{index.js → index.ts} +42 -36
  392. package/src/meeting-info/meeting-info-v2.ts +345 -0
  393. package/src/meeting-info/{request.js → request.ts} +14 -4
  394. package/src/meeting-info/{util.js → util.ts} +60 -51
  395. package/src/meeting-info/{utilv2.js → utilv2.ts} +76 -60
  396. package/src/meetings/{collection.js → collection.ts} +26 -3
  397. package/src/meetings/index.ts +1394 -0
  398. package/src/meetings/{request.js → request.ts} +34 -25
  399. package/src/meetings/util.ts +288 -0
  400. package/src/member/{index.js → index.ts} +124 -56
  401. package/src/member/types.ts +24 -0
  402. package/src/member/{util.js → util.ts} +105 -25
  403. package/src/members/{collection.js → collection.ts} +10 -2
  404. package/src/members/{index.js → index.ts} +359 -139
  405. package/src/members/request.ts +215 -0
  406. package/src/members/types.ts +28 -0
  407. package/src/members/{util.js → util.ts} +145 -54
  408. package/src/metrics/{config.js → config.ts} +256 -92
  409. package/src/metrics/{constants.js → constants.ts} +1 -6
  410. package/src/metrics/{index.js → index.ts} +116 -97
  411. package/src/multistream/mediaRequestManager.ts +324 -0
  412. package/src/multistream/receiveSlot.ts +184 -0
  413. package/src/multistream/receiveSlotManager.ts +166 -0
  414. package/src/multistream/remoteMedia.ts +254 -0
  415. package/src/multistream/remoteMediaGroup.ts +225 -0
  416. package/src/multistream/remoteMediaManager.ts +1075 -0
  417. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  418. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  419. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  420. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  421. package/src/reachability/{index.js → index.ts} +157 -94
  422. package/src/reachability/request.ts +46 -35
  423. package/src/reactions/constants.ts +4 -0
  424. package/src/reactions/reactions.ts +104 -0
  425. package/src/reactions/reactions.type.ts +62 -0
  426. package/src/reconnection-manager/{index.js → index.ts} +261 -163
  427. package/src/recording-controller/enums.ts +8 -0
  428. package/src/recording-controller/index.ts +315 -0
  429. package/src/recording-controller/util.ts +58 -0
  430. package/src/roap/index.ts +241 -0
  431. package/src/roap/request.ts +172 -0
  432. package/src/roap/turnDiscovery.ts +127 -53
  433. package/src/statsAnalyzer/global.ts +37 -0
  434. package/src/statsAnalyzer/index.ts +1273 -0
  435. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  436. package/src/transcription/{index.js → index.ts} +46 -39
  437. package/test/integration/spec/converged-space-meetings.js +177 -0
  438. package/test/integration/spec/journey.js +666 -464
  439. package/test/integration/spec/space-meeting.js +321 -206
  440. package/test/integration/spec/transcription.js +7 -8
  441. package/test/unit/spec/annotation/index.ts +435 -0
  442. package/test/unit/spec/breakouts/breakout.ts +184 -0
  443. package/test/unit/spec/breakouts/collection.ts +15 -0
  444. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  445. package/test/unit/spec/breakouts/events.ts +77 -0
  446. package/test/unit/spec/breakouts/index.ts +1504 -0
  447. package/test/unit/spec/breakouts/request.ts +104 -0
  448. package/test/unit/spec/breakouts/utils.js +72 -0
  449. package/test/unit/spec/common/browser-detection.js +9 -28
  450. package/test/unit/spec/controls-options-manager/index.js +287 -0
  451. package/test/unit/spec/controls-options-manager/util.js +403 -0
  452. package/test/unit/spec/fixture/locus.js +92 -90
  453. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  454. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  455. package/test/unit/spec/locus-info/index.js +493 -3
  456. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  457. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  458. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  459. package/test/unit/spec/locus-info/parser.js +3 -9
  460. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  461. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  462. package/test/unit/spec/media/index.ts +303 -0
  463. package/test/unit/spec/media/properties.ts +73 -82
  464. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  465. package/test/unit/spec/meeting/index.js +3127 -975
  466. package/test/unit/spec/meeting/muteState.js +375 -70
  467. package/test/unit/spec/meeting/request.js +217 -43
  468. package/test/unit/spec/meeting/utils.js +205 -163
  469. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  470. package/test/unit/spec/meeting-info/request.js +7 -9
  471. package/test/unit/spec/meeting-info/util.js +11 -12
  472. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  473. package/test/unit/spec/meetings/collection.js +15 -1
  474. package/test/unit/spec/meetings/index.js +1052 -333
  475. package/test/unit/spec/meetings/utils.js +163 -14
  476. package/test/unit/spec/member/index.js +24 -1
  477. package/test/unit/spec/member/util.js +359 -32
  478. package/test/unit/spec/members/index.js +547 -37
  479. package/test/unit/spec/members/request.js +76 -20
  480. package/test/unit/spec/members/utils.js +191 -4
  481. package/test/unit/spec/metrics/index.js +46 -20
  482. package/test/unit/spec/multistream/mediaRequestManager.ts +1060 -0
  483. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  484. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  485. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  486. package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
  487. package/test/unit/spec/multistream/remoteMediaManager.ts +1793 -0
  488. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  489. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  490. package/test/unit/spec/reachability/index.ts +176 -27
  491. package/test/unit/spec/reachability/request.js +66 -0
  492. package/test/unit/spec/reconnection-manager/index.js +106 -9
  493. package/test/unit/spec/recording-controller/index.js +231 -0
  494. package/test/unit/spec/recording-controller/util.js +102 -0
  495. package/test/unit/spec/roap/index.ts +78 -45
  496. package/test/unit/spec/roap/request.ts +217 -0
  497. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  498. package/test/unit/spec/stats-analyzer/index.js +118 -65
  499. package/test/utils/cmr.js +44 -42
  500. package/test/utils/constants.js +9 -0
  501. package/test/utils/integrationTestUtils.js +64 -0
  502. package/test/utils/testUtils.js +63 -99
  503. package/test/utils/webex-config.js +22 -18
  504. package/test/utils/webex-test-users.js +57 -50
  505. package/tsconfig.json +6 -0
  506. package/dist/meeting/effectsState.js +0 -327
  507. package/dist/meeting/effectsState.js.map +0 -1
  508. package/dist/peer-connection-manager/index.js +0 -794
  509. package/dist/peer-connection-manager/index.js.map +0 -1
  510. package/dist/peer-connection-manager/util.js +0 -124
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.js +0 -73
  513. package/dist/roap/collection.js.map +0 -1
  514. package/dist/roap/handler.js +0 -337
  515. package/dist/roap/handler.js.map +0 -1
  516. package/dist/roap/state.js +0 -164
  517. package/dist/roap/state.js.map +0 -1
  518. package/dist/roap/util.js +0 -102
  519. package/dist/roap/util.js.map +0 -1
  520. package/src/common/logs/logger-proxy.js +0 -33
  521. package/src/index.js +0 -15
  522. package/src/locus-info/controlsUtils.js +0 -102
  523. package/src/media/index.js +0 -593
  524. package/src/media/util.js +0 -38
  525. package/src/mediaQualityMetrics/config.js +0 -382
  526. package/src/meeting/effectsState.js +0 -205
  527. package/src/meeting/muteState.js +0 -318
  528. package/src/meeting-info/meeting-info-v2.js +0 -255
  529. package/src/meetings/index.js +0 -986
  530. package/src/meetings/util.js +0 -176
  531. package/src/members/request.js +0 -131
  532. package/src/peer-connection-manager/index.js +0 -723
  533. package/src/peer-connection-manager/util.ts +0 -117
  534. package/src/roap/collection.js +0 -63
  535. package/src/roap/handler.js +0 -252
  536. package/src/roap/index.js +0 -380
  537. package/src/roap/request.js +0 -198
  538. package/src/roap/state.js +0 -149
  539. package/src/roap/util.js +0 -93
  540. package/src/statsAnalyzer/global.js +0 -131
  541. package/src/statsAnalyzer/index.js +0 -1020
  542. package/src/statsAnalyzer/mqaUtil.js +0 -173
  543. package/test/unit/spec/meeting/effectsState.js +0 -293
  544. package/test/unit/spec/peerconnection-manager/index.js +0 -188
  545. package/test/unit/spec/peerconnection-manager/utils.js +0 -48
  546. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  547. package/test/unit/spec/roap/util.js +0 -30
  548. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -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,12 @@ import {
11
13
  MEDIA_STATE,
12
14
  AUDIO,
13
15
  VIDEO,
14
- MediaContent
16
+ MediaContent,
17
+ SELF_ROLES,
15
18
  } from '../constants';
16
19
  import ParameterError from '../common/errors/parameter';
17
20
 
18
- const SelfUtils = {};
21
+ const SelfUtils: any = {};
19
22
  const PSTN_DEVICE_TYPE = 'PROVISIONAL';
20
23
 
21
24
  /**
@@ -24,12 +27,13 @@ const PSTN_DEVICE_TYPE = 'PROVISIONAL';
24
27
  * @param {String} deviceId
25
28
  * @returns {undefined}
26
29
  */
27
- SelfUtils.parse = (self, deviceId) => {
30
+ SelfUtils.parse = (self: any, deviceId: string) => {
28
31
  if (self) {
29
32
  const joinedWith = self.devices.find((device) => deviceId === device.url);
30
33
  const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);
31
34
 
32
35
  return {
36
+ remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),
33
37
  remoteMuted: SelfUtils.getRemoteMuted(self),
34
38
  unmuteAllowed: SelfUtils.getUnmuteAllowed(self),
35
39
  localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),
@@ -48,9 +52,7 @@ SelfUtils.parse = (self, deviceId) => {
48
52
  joinedWith,
49
53
  pstnDevices,
50
54
  // current media stats is for the current device who has joined
51
- currentMediaStatus: SelfUtils.getMediaStatus(
52
- joinedWith?.mediaSessions
53
- ),
55
+ currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),
54
56
  creator: self.isCreator, // check if its used,
55
57
  selfId: self.id,
56
58
  selfIdentity: SelfUtils.getSelfIdentity(self),
@@ -60,22 +62,29 @@ SelfUtils.parse = (self, deviceId) => {
60
62
  isUserUnadmitted: self.state === _IDLE_ && joinedWith?.intent?.type === _WAIT_,
61
63
  layout: SelfUtils.getLayout(self),
62
64
  canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),
63
- isSharingBlocked: SelfUtils.isSharingBlocked(self)
65
+ isSharingBlocked: SelfUtils.isSharingBlocked(self),
66
+ breakoutSessions: SelfUtils.getBreakoutSessions(self),
67
+ breakout: SelfUtils.getBreakout(self),
64
68
  };
65
69
  }
66
70
 
67
71
  return null;
68
72
  };
69
73
 
70
- SelfUtils.getLayout = (self) => (Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined);
74
+ SelfUtils.getBreakoutSessions = (self) => self?.controls?.breakout?.sessions;
75
+ SelfUtils.getBreakout = (self) => self?.controls?.breakout;
71
76
 
72
- SelfUtils.getRoles = (self) => (self?.controls?.role?.roles || []).reduce((roles, role) => {
73
- if (role.hasRole) {
74
- roles.push(role.type);
75
- }
77
+ SelfUtils.getLayout = (self) =>
78
+ Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined;
79
+
80
+ SelfUtils.getRoles = (self) =>
81
+ (self?.controls?.role?.roles || []).reduce((roles, role) => {
82
+ if (role.hasRole) {
83
+ roles.push(role.type);
84
+ }
76
85
 
77
- return roles;
78
- }, []);
86
+ return roles;
87
+ }, []);
79
88
 
80
89
  SelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;
81
90
 
@@ -84,30 +93,43 @@ SelfUtils.isSharingBlocked = (self) => !!self?.isSharingBlocked;
84
93
  SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
85
94
  const previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);
86
95
  const current = newSelf && SelfUtils.parse(newSelf, deviceId);
87
- const updates = {};
96
+ const updates: any = {};
88
97
 
89
98
  updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);
90
99
  updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
100
+ updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);
91
101
  updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
92
- updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);
93
- updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);
102
+ updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(
103
+ previous,
104
+ current
105
+ );
106
+ updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(
107
+ previous,
108
+ current
109
+ );
94
110
  updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);
111
+ updates.isUpgradeToModeratorOrCohost = SelfUtils.isUpgradeToModeratorOrCohost(previous, current);
95
112
  updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);
96
113
  updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);
97
114
  updates.layoutChanged = SelfUtils.layoutChanged(previous, current);
98
115
 
99
116
  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;
117
+ updates.audioStateChange =
118
+ previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;
119
+ updates.videoStateChange =
120
+ previous?.currentMediaStatus.video !== current.currentMediaStatus.video;
121
+ updates.shareStateChange =
122
+ previous?.currentMediaStatus.share !== current.currentMediaStatus.share;
123
+
124
+ updates.canNotViewTheParticipantListChanged =
125
+ previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;
105
126
  updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;
127
+ updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);
106
128
 
107
129
  return {
108
130
  previous,
109
131
  current,
110
- updates
132
+ updates,
111
133
  };
112
134
  };
113
135
 
@@ -115,18 +137,21 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
115
137
  * Checks if user has joined the meeting
116
138
  * @param {Object} self
117
139
  * @returns {boolean} isJoined
118
- */
119
- SelfUtils.isJoined = (self) => self?.state === _JOINED_;
140
+ */
141
+ SelfUtils.isJoined = (self: any) => self?.state === _JOINED_;
120
142
 
121
143
  /**
122
144
  * Validate if the Meeting Layout Controls Layout has changed.
123
145
  *
124
146
  * @param {Self} previous - Previous self state
125
147
  * @param {Self} current - Current self state [per event]
126
- * @returns {boolean} - If the MEeting Layout Controls Layout has changed.
148
+ * @returns {boolean} - If the Meeting Layout Controls Layout has changed.
127
149
  */
128
- SelfUtils.layoutChanged = (previous, current) => current?.layout && previous?.layout !== current?.layout;
150
+ SelfUtils.layoutChanged = (previous: any, current: any) =>
151
+ current?.layout && previous?.layout !== current?.layout;
129
152
 
153
+ SelfUtils.breakoutsChanged = (previous, current) =>
154
+ !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout;
130
155
 
131
156
  SelfUtils.isMediaInactive = (previous, current) => {
132
157
  if (
@@ -137,15 +162,12 @@ SelfUtils.isMediaInactive = (previous, current) => {
137
162
  current.joinedWith &&
138
163
  current.joinedWith.mediaSessions
139
164
  ) {
140
- const previousMediaStatus = SelfUtils.getMediaStatus(
141
- previous.joinedWith.mediaSessions
142
- );
143
- const currentMediaStatus = SelfUtils.getMediaStatus(
144
- current.joinedWith.mediaSessions
145
- );
165
+ const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);
166
+ const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);
146
167
 
147
168
  if (
148
- previousMediaStatus.audio && currentMediaStatus.audio &&
169
+ previousMediaStatus.audio &&
170
+ currentMediaStatus.audio &&
149
171
  previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&
150
172
  currentMediaStatus.audio.state === MEDIA_STATE.inactive &&
151
173
  currentMediaStatus.audio.direction !== MEDIA_STATE.inactive
@@ -154,7 +176,8 @@ SelfUtils.isMediaInactive = (previous, current) => {
154
176
  }
155
177
 
156
178
  if (
157
- previousMediaStatus.video && currentMediaStatus.video &&
179
+ previousMediaStatus.video &&
180
+ currentMediaStatus.video &&
158
181
  previousMediaStatus.video.state !== MEDIA_STATE.inactive &&
159
182
  currentMediaStatus.video.state === MEDIA_STATE.inactive &&
160
183
  currentMediaStatus.video.direction !== MEDIA_STATE.inactive
@@ -163,7 +186,8 @@ SelfUtils.isMediaInactive = (previous, current) => {
163
186
  }
164
187
 
165
188
  if (
166
- previousMediaStatus.share && currentMediaStatus.share &&
189
+ previousMediaStatus.share &&
190
+ currentMediaStatus.share &&
167
191
  previousMediaStatus.share.state !== MEDIA_STATE.inactive &&
168
192
  currentMediaStatus.share.state === MEDIA_STATE.inactive &&
169
193
  currentMediaStatus.share.direction !== MEDIA_STATE.inactive
@@ -178,7 +202,13 @@ SelfUtils.isMediaInactive = (previous, current) => {
178
202
  };
179
203
 
180
204
  SelfUtils.getLastModified = (self) => {
181
- if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.lastModified) {
205
+ if (
206
+ !self ||
207
+ !self.controls ||
208
+ !self.controls.audio ||
209
+ !self.controls.audio.meta ||
210
+ !self.controls.audio.meta.lastModified
211
+ ) {
182
212
  return null;
183
213
  }
184
214
 
@@ -186,7 +216,13 @@ SelfUtils.getLastModified = (self) => {
186
216
  };
187
217
 
188
218
  SelfUtils.getModifiedBy = (self) => {
189
- if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.modifiedBy) {
219
+ if (
220
+ !self ||
221
+ !self.controls ||
222
+ !self.controls.audio ||
223
+ !self.controls.audio.meta ||
224
+ !self.controls.audio.meta.modifiedBy
225
+ ) {
190
226
  return null;
191
227
  }
192
228
 
@@ -198,7 +234,7 @@ SelfUtils.getModifiedBy = (self) => {
198
234
  * @param {Object} self
199
235
  * @returns {String}
200
236
  */
201
- SelfUtils.getSelfIdentity = (self) => {
237
+ SelfUtils.getSelfIdentity = (self: any) => {
202
238
  if (!self && !self.person) {
203
239
  return null;
204
240
  }
@@ -206,12 +242,25 @@ SelfUtils.getSelfIdentity = (self) => {
206
242
  return self.person.id;
207
243
  };
208
244
 
245
+ /**
246
+ * get the "remote video mute" property from the self object
247
+ * @param {Object} self
248
+ * @returns {Boolean}
249
+ */
250
+ SelfUtils.getRemoteVideoMuted = (self: any) => {
251
+ if (!self || !self.controls || !self.controls.video) {
252
+ return null;
253
+ }
254
+
255
+ return self.controls.video.muted;
256
+ };
257
+
209
258
  /**
210
259
  * get the "remote mute" property from the self object
211
260
  * @param {Object} self
212
261
  * @returns {Boolean}
213
262
  */
214
- SelfUtils.getRemoteMuted = (self) => {
263
+ SelfUtils.getRemoteMuted = (self: any) => {
215
264
  if (!self || !self.controls || !self.controls.audio) {
216
265
  return null;
217
266
  }
@@ -229,43 +278,47 @@ SelfUtils.getUnmuteAllowed = (self) => {
229
278
  return !self.controls.audio.disallowUnmute;
230
279
  };
231
280
 
232
-
233
281
  SelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;
234
282
 
235
283
  SelfUtils.getStatus = (status) => ({
236
284
  audio: status.audioStatus,
237
285
  video: status.videoStatus,
238
- slides: status.videoSlidesStatus
286
+ slides: status.videoSlidesStatus,
239
287
  });
240
288
 
241
-
242
289
  /**
243
290
  * @param {Object} oldSelf
244
291
  * @param {Object} changedSelf
245
292
  * @returns {Boolean}
246
293
  */
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
-
294
+ SelfUtils.wasMediaInactiveOrReleased = (oldSelf: any = {}, changedSelf: any) =>
295
+ oldSelf.joinedWith &&
296
+ oldSelf.joinedWith.state === _JOINED_ &&
297
+ changedSelf.joinedWith &&
298
+ changedSelf.joinedWith.state === _LEFT_ &&
299
+ (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||
300
+ changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);
250
301
 
251
302
  /**
252
303
  * @param {Object} check
253
304
  * @returns {Boolean}
254
305
  */
255
- SelfUtils.isLocusUserUnadmitted = (check) => check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;
306
+ SelfUtils.isLocusUserUnadmitted = (check: any) =>
307
+ check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;
256
308
 
257
309
  /**
258
310
  * @param {Object} check
259
311
  * @returns {Boolean}
260
312
  */
261
- SelfUtils.isLocusUserAdmitted = (check) => check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;
313
+ SelfUtils.isLocusUserAdmitted = (check: any) =>
314
+ check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;
262
315
 
263
316
  /**
264
317
  * @param {Object} self
265
318
  * @returns {Boolean}
266
319
  * @throws {Error} when self is undefined
267
320
  */
268
- SelfUtils.isUserUnadmitted = (self) => {
321
+ SelfUtils.isUserUnadmitted = (self: object) => {
269
322
  if (!self) {
270
323
  throw new ParameterError('self must be defined to determine if self is unadmitted as guest.');
271
324
  }
@@ -278,12 +331,38 @@ SelfUtils.moderatorChanged = (oldSelf, changedSelf) => {
278
331
  return true;
279
332
  }
280
333
  if (!changedSelf) {
281
- throw new ParameterError('New self must be defined to determine if self transitioned moderator status.');
334
+ throw new ParameterError(
335
+ 'New self must be defined to determine if self transitioned moderator status.'
336
+ );
282
337
  }
283
338
 
284
339
  return oldSelf.moderator !== changedSelf.moderator;
285
340
  };
286
341
 
342
+ /**
343
+ * @param {Object} oldSelf
344
+ * @param {Object} changedSelf
345
+ * @returns {Boolean}
346
+ * @throws {Error} if changed self was undefined
347
+ */
348
+ SelfUtils.isUpgradeToModeratorOrCohost = (oldSelf, changedSelf) => {
349
+ if (!oldSelf) {
350
+ return false;
351
+ }
352
+ if (!changedSelf) {
353
+ throw new ParameterError(
354
+ 'New self must be defined to determine if self transitioned moderator or cohost status.'
355
+ );
356
+ }
357
+ const isAttendeeOnly =
358
+ oldSelf.roles.includes(SELF_ROLES.ATTENDEE) &&
359
+ !oldSelf.roles.includes(SELF_ROLES.COHOST) &&
360
+ !oldSelf.roles.includes(SELF_ROLES.MODERATOR);
361
+ const isCohost = changedSelf.roles.includes(SELF_ROLES.COHOST);
362
+ const isModerator = changedSelf.roles.includes(SELF_ROLES.MODERATOR);
363
+
364
+ return isAttendeeOnly && (isCohost || isModerator);
365
+ };
287
366
 
288
367
  /**
289
368
  * @param {Object} oldSelf
@@ -291,7 +370,11 @@ SelfUtils.moderatorChanged = (oldSelf, changedSelf) => {
291
370
  * @returns {Boolean}
292
371
  * @throws {Error} if changed self was undefined
293
372
  */
294
- SelfUtils.isDeviceObserving = (oldSelf, changedSelf) => oldSelf && oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ && changedSelf && changedSelf.joinedWith?.intent?.type === _OBSERVE_;
373
+ SelfUtils.isDeviceObserving = (oldSelf: any, changedSelf: any) =>
374
+ oldSelf &&
375
+ oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&
376
+ changedSelf &&
377
+ changedSelf.joinedWith?.intent?.type === _OBSERVE_;
295
378
 
296
379
  /**
297
380
  * @param {Object} oldSelf
@@ -299,24 +382,45 @@ SelfUtils.isDeviceObserving = (oldSelf, changedSelf) => oldSelf && oldSelf.joine
299
382
  * @returns {Boolean}
300
383
  * @throws {Error} if changed self was undefined
301
384
  */
302
- SelfUtils.isUserAdmitted = (oldSelf, changedSelf) => {
385
+ SelfUtils.isUserAdmitted = (oldSelf: object, changedSelf: object) => {
303
386
  if (!oldSelf) {
304
387
  // if there was no previous locus, it couldn't have been admitted yet
305
388
  return false;
306
389
  }
307
390
  if (!changedSelf) {
308
- throw new ParameterError('New self must be defined to determine if self transitioned to admitted as guest.');
391
+ throw new ParameterError(
392
+ 'New self must be defined to determine if self transitioned to admitted as guest.'
393
+ );
309
394
  }
310
395
 
311
396
  return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
312
397
  };
313
398
 
399
+ SelfUtils.videoMutedByOthersChanged = (oldSelf, changedSelf) => {
400
+ if (!changedSelf) {
401
+ throw new ParameterError(
402
+ 'New self must be defined to determine if self was video muted by others.'
403
+ );
404
+ }
405
+
406
+ if (!oldSelf || oldSelf.remoteVideoMuted === null) {
407
+ if (changedSelf.remoteVideoMuted) {
408
+ return true; // this happens when host disables "Allow start video"
409
+ }
410
+
411
+ // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join
412
+ return false;
413
+ }
414
+
415
+ return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;
416
+ };
417
+
314
418
  SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
315
419
  if (!changedSelf) {
316
420
  throw new ParameterError('New self must be defined to determine if self was muted by others.');
317
421
  }
318
422
 
319
- if (!oldSelf || (oldSelf.remoteMuted === null)) {
423
+ if (!oldSelf || oldSelf.remoteMuted === null) {
320
424
  if (changedSelf.remoteMuted) {
321
425
  return true; // this happens when mute on-entry is enabled
322
426
  }
@@ -325,25 +429,35 @@ SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
325
429
  return false;
326
430
  }
327
431
 
328
- return (changedSelf.remoteMuted !== null) &&
329
- ((oldSelf.remoteMuted !== changedSelf.remoteMuted) || (changedSelf.remoteMuted && (oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed)));
432
+ return (
433
+ changedSelf.remoteMuted !== null &&
434
+ (oldSelf.remoteMuted !== changedSelf.remoteMuted ||
435
+ (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))
436
+ );
330
437
  };
331
438
 
332
- SelfUtils.localAudioUnmuteRequestedByServer = (oldSelf = {}, changedSelf) => {
439
+ SelfUtils.localAudioUnmuteRequestedByServer = (oldSelf: any = {}, changedSelf: any) => {
333
440
  if (!changedSelf) {
334
- throw new ParameterError('New self must be defined to determine if self received request to unmute.');
441
+ throw new ParameterError(
442
+ 'New self must be defined to determine if self received request to unmute.'
443
+ );
335
444
  }
336
445
 
337
446
  return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;
338
447
  };
339
448
 
340
-
341
- SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf = {}, changedSelf) => {
449
+ SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf: any = {}, changedSelf: any) => {
342
450
  if (!changedSelf) {
343
- throw new ParameterError('New self must be defined to determine if localAudioUnmuteRequired changed.');
451
+ throw new ParameterError(
452
+ 'New self must be defined to determine if localAudioUnmuteRequired changed.'
453
+ );
344
454
  }
345
455
 
346
- return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && (oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired);
456
+ return (
457
+ !changedSelf.remoteMuted &&
458
+ changedSelf.localAudioUnmuteRequired &&
459
+ oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired
460
+ );
347
461
  };
348
462
 
349
463
  /**
@@ -353,7 +467,7 @@ SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf = {}, changedSelf) => {
353
467
  * @returns {Object}
354
468
  */
355
469
 
356
- SelfUtils.getSipUrl = (partner, type, sipUri) => {
470
+ SelfUtils.getSipUrl = (partner: any, type, sipUri) => {
357
471
  // For webex meeting the sipUrl gets updated in info parser
358
472
  if (partner && type === _CALL_) {
359
473
  return {sipUri: partner.person.sipUrl || partner.person.id};
@@ -366,15 +480,30 @@ SelfUtils.getMediaStatus = (mediaSessions = []) => {
366
480
  const mediaStatus = {
367
481
  audio: {},
368
482
  video: {},
369
- share: {}
483
+ share: {},
370
484
  };
371
485
 
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);
486
+ mediaStatus.audio = mediaSessions.find(
487
+ (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main
488
+ );
489
+ mediaStatus.video = mediaSessions.find(
490
+ (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main
491
+ );
492
+ mediaStatus.share = mediaSessions.find(
493
+ (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides
494
+ );
375
495
 
376
496
  return mediaStatus;
377
497
  };
378
498
 
499
+ SelfUtils.getReplacedBreakoutMoveId = (self: any, deviceId: string) => {
500
+ if (self && Array.isArray(self.devices)) {
501
+ const joinedDevice = self.devices.find((device) => deviceId === device.url);
502
+ if (Array.isArray(joinedDevice?.replaces)) {
503
+ return joinedDevice.replaces[0]?.breakoutMoveId;
504
+ }
505
+ }
379
506
 
507
+ return null;
508
+ };
380
509
  export default SelfUtils;