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

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