@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.400

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 (629) hide show
  1. package/README.md +58 -8
  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/no-meeting-info.js +51 -0
  39. package/dist/common/errors/no-meeting-info.js.map +1 -0
  40. package/dist/common/errors/parameter.js +5 -33
  41. package/dist/common/errors/parameter.js.map +1 -1
  42. package/dist/common/errors/password-error.js +10 -24
  43. package/dist/common/errors/password-error.js.map +1 -1
  44. package/dist/common/errors/permission.js +9 -23
  45. package/dist/common/errors/permission.js.map +1 -1
  46. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  47. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  48. package/dist/common/errors/reconnection-in-progress.js +0 -17
  49. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  50. package/dist/common/errors/reconnection.js +10 -24
  51. package/dist/common/errors/reconnection.js.map +1 -1
  52. package/dist/common/errors/stats.js +10 -24
  53. package/dist/common/errors/stats.js.map +1 -1
  54. package/dist/common/errors/webex-errors.js +54 -48
  55. package/dist/common/errors/webex-errors.js.map +1 -1
  56. package/dist/common/errors/webex-meetings-error.js +5 -25
  57. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  58. package/dist/common/events/events-scope.js +0 -22
  59. package/dist/common/events/events-scope.js.map +1 -1
  60. package/dist/common/events/events.js +0 -23
  61. package/dist/common/events/events.js.map +1 -1
  62. package/dist/common/events/trigger-proxy.js +0 -12
  63. package/dist/common/events/trigger-proxy.js.map +1 -1
  64. package/dist/common/events/util.js +0 -15
  65. package/dist/common/events/util.js.map +1 -1
  66. package/dist/common/logs/logger-config.js +0 -4
  67. package/dist/common/logs/logger-config.js.map +1 -1
  68. package/dist/common/logs/logger-proxy.js +1 -8
  69. package/dist/common/logs/logger-proxy.js.map +1 -1
  70. package/dist/common/logs/request.js +41 -60
  71. package/dist/common/logs/request.js.map +1 -1
  72. package/dist/common/queue.js +28 -23
  73. package/dist/common/queue.js.map +1 -1
  74. package/dist/config.js +11 -15
  75. package/dist/config.js.map +1 -1
  76. package/dist/constants.js +347 -74
  77. package/dist/constants.js.map +1 -1
  78. package/dist/controls-options-manager/constants.js +14 -0
  79. package/dist/controls-options-manager/constants.js.map +1 -0
  80. package/dist/controls-options-manager/enums.js +27 -0
  81. package/dist/controls-options-manager/enums.js.map +1 -0
  82. package/dist/controls-options-manager/index.js +297 -0
  83. package/dist/controls-options-manager/index.js.map +1 -0
  84. package/dist/controls-options-manager/types.js +7 -0
  85. package/dist/controls-options-manager/types.js.map +1 -0
  86. package/dist/controls-options-manager/util.js +319 -0
  87. package/dist/controls-options-manager/util.js.map +1 -0
  88. package/dist/index.js +125 -18
  89. package/dist/index.js.map +1 -1
  90. package/dist/interceptors/index.js +15 -0
  91. package/dist/interceptors/index.js.map +1 -0
  92. package/dist/interceptors/locusRetry.js +93 -0
  93. package/dist/interceptors/locusRetry.js.map +1 -0
  94. package/dist/interpretation/collection.js +23 -0
  95. package/dist/interpretation/collection.js.map +1 -0
  96. package/dist/interpretation/index.js +380 -0
  97. package/dist/interpretation/index.js.map +1 -0
  98. package/dist/interpretation/siLanguage.js +25 -0
  99. package/dist/interpretation/siLanguage.js.map +1 -0
  100. package/dist/locus-info/controlsUtils.js +101 -29
  101. package/dist/locus-info/controlsUtils.js.map +1 -1
  102. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  103. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  104. package/dist/locus-info/fullState.js +0 -15
  105. package/dist/locus-info/fullState.js.map +1 -1
  106. package/dist/locus-info/hostUtils.js +4 -12
  107. package/dist/locus-info/hostUtils.js.map +1 -1
  108. package/dist/locus-info/index.js +564 -246
  109. package/dist/locus-info/index.js.map +1 -1
  110. package/dist/locus-info/infoUtils.js +10 -38
  111. package/dist/locus-info/infoUtils.js.map +1 -1
  112. package/dist/locus-info/mediaSharesUtils.js +82 -38
  113. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  114. package/dist/locus-info/parser.js +314 -163
  115. package/dist/locus-info/parser.js.map +1 -1
  116. package/dist/locus-info/selfUtils.js +110 -92
  117. package/dist/locus-info/selfUtils.js.map +1 -1
  118. package/dist/media/index.js +107 -231
  119. package/dist/media/index.js.map +1 -1
  120. package/dist/media/properties.js +137 -222
  121. package/dist/media/properties.js.map +1 -1
  122. package/dist/media/util.js +2 -9
  123. package/dist/media/util.js.map +1 -1
  124. package/dist/mediaQualityMetrics/config.js +316 -501
  125. package/dist/mediaQualityMetrics/config.js.map +1 -1
  126. package/dist/meeting/in-meeting-actions.js +97 -14
  127. package/dist/meeting/in-meeting-actions.js.map +1 -1
  128. package/dist/meeting/index.js +5311 -3871
  129. package/dist/meeting/index.js.map +1 -1
  130. package/dist/meeting/locusMediaRequest.js +292 -0
  131. package/dist/meeting/locusMediaRequest.js.map +1 -0
  132. package/dist/meeting/muteState.js +260 -183
  133. package/dist/meeting/muteState.js.map +1 -1
  134. package/dist/meeting/request.js +421 -347
  135. package/dist/meeting/request.js.map +1 -1
  136. package/dist/meeting/request.type.js +7 -0
  137. package/dist/meeting/request.type.js.map +1 -0
  138. package/dist/meeting/state.js +21 -31
  139. package/dist/meeting/state.js.map +1 -1
  140. package/dist/meeting/util.js +672 -585
  141. package/dist/meeting/util.js.map +1 -1
  142. package/dist/meeting/voicea-meeting.js +172 -0
  143. package/dist/meeting/voicea-meeting.js.map +1 -0
  144. package/dist/meeting-info/collection.js +6 -25
  145. package/dist/meeting-info/collection.js.map +1 -1
  146. package/dist/meeting-info/index.js +87 -39
  147. package/dist/meeting-info/index.js.map +1 -1
  148. package/dist/meeting-info/meeting-info-v2.js +352 -283
  149. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  150. package/dist/meeting-info/request.js +3 -15
  151. package/dist/meeting-info/request.js.map +1 -1
  152. package/dist/meeting-info/util.js +99 -183
  153. package/dist/meeting-info/util.js.map +1 -1
  154. package/dist/meeting-info/utilv2.js +147 -234
  155. package/dist/meeting-info/utilv2.js.map +1 -1
  156. package/dist/meetings/collection.js +43 -19
  157. package/dist/meetings/collection.js.map +1 -1
  158. package/dist/meetings/index.js +895 -600
  159. package/dist/meetings/index.js.map +1 -1
  160. package/dist/meetings/meetings.types.js +7 -0
  161. package/dist/meetings/meetings.types.js.map +1 -0
  162. package/dist/meetings/request.js +26 -41
  163. package/dist/meetings/request.js.map +1 -1
  164. package/dist/meetings/util.js +184 -157
  165. package/dist/meetings/util.js.map +1 -1
  166. package/dist/member/index.js +134 -85
  167. package/dist/member/index.js.map +1 -1
  168. package/dist/member/types.js +25 -0
  169. package/dist/member/types.js.map +1 -0
  170. package/dist/member/util.js +158 -88
  171. package/dist/member/util.js.map +1 -1
  172. package/dist/members/collection.js +13 -12
  173. package/dist/members/collection.js.map +1 -1
  174. package/dist/members/index.js +194 -204
  175. package/dist/members/index.js.map +1 -1
  176. package/dist/members/request.js +113 -68
  177. package/dist/members/request.js.map +1 -1
  178. package/dist/members/types.js +15 -0
  179. package/dist/members/types.js.map +1 -0
  180. package/dist/members/util.js +324 -259
  181. package/dist/members/util.js.map +1 -1
  182. package/dist/metrics/constants.js +19 -7
  183. package/dist/metrics/constants.js.map +1 -1
  184. package/dist/metrics/index.js +11 -558
  185. package/dist/metrics/index.js.map +1 -1
  186. package/dist/multistream/mediaRequestManager.js +263 -50
  187. package/dist/multistream/mediaRequestManager.js.map +1 -1
  188. package/dist/multistream/receiveSlot.js +58 -65
  189. package/dist/multistream/receiveSlot.js.map +1 -1
  190. package/dist/multistream/receiveSlotManager.js +76 -95
  191. package/dist/multistream/receiveSlotManager.js.map +1 -1
  192. package/dist/multistream/remoteMedia.js +62 -76
  193. package/dist/multistream/remoteMedia.js.map +1 -1
  194. package/dist/multistream/remoteMediaGroup.js +82 -45
  195. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  196. package/dist/multistream/remoteMediaManager.js +657 -448
  197. package/dist/multistream/remoteMediaManager.js.map +1 -1
  198. package/dist/multistream/sendSlotManager.js +255 -0
  199. package/dist/multistream/sendSlotManager.js.map +1 -0
  200. package/dist/networkQualityMonitor/index.js +40 -59
  201. package/dist/networkQualityMonitor/index.js.map +1 -1
  202. package/dist/personal-meeting-room/index.js +21 -45
  203. package/dist/personal-meeting-room/index.js.map +1 -1
  204. package/dist/personal-meeting-room/request.js +1 -31
  205. package/dist/personal-meeting-room/request.js.map +1 -1
  206. package/dist/personal-meeting-room/util.js +0 -13
  207. package/dist/personal-meeting-room/util.js.map +1 -1
  208. package/dist/reachability/clusterReachability.js +356 -0
  209. package/dist/reachability/clusterReachability.js.map +1 -0
  210. package/dist/reachability/index.js +297 -460
  211. package/dist/reachability/index.js.map +1 -1
  212. package/dist/reachability/request.js +20 -26
  213. package/dist/reachability/request.js.map +1 -1
  214. package/dist/reachability/util.js +29 -0
  215. package/dist/reachability/util.js.map +1 -0
  216. package/dist/reactions/constants.js +13 -0
  217. package/dist/reactions/constants.js.map +1 -0
  218. package/dist/reactions/reactions.js +109 -0
  219. package/dist/reactions/reactions.js.map +1 -0
  220. package/dist/reactions/reactions.type.js +36 -0
  221. package/dist/reactions/reactions.type.js.map +1 -0
  222. package/dist/reconnection-manager/index.js +413 -483
  223. package/dist/reconnection-manager/index.js.map +1 -1
  224. package/dist/recording-controller/enums.js +17 -0
  225. package/dist/recording-controller/enums.js.map +1 -0
  226. package/dist/recording-controller/index.js +362 -0
  227. package/dist/recording-controller/index.js.map +1 -0
  228. package/dist/recording-controller/util.js +64 -0
  229. package/dist/recording-controller/util.js.map +1 -0
  230. package/dist/roap/index.js +102 -86
  231. package/dist/roap/index.js.map +1 -1
  232. package/dist/roap/request.js +131 -135
  233. package/dist/roap/request.js.map +1 -1
  234. package/dist/roap/turnDiscovery.js +437 -116
  235. package/dist/roap/turnDiscovery.js.map +1 -1
  236. package/dist/rtcMetrics/constants.js +12 -0
  237. package/dist/rtcMetrics/constants.js.map +1 -0
  238. package/dist/rtcMetrics/index.js +179 -0
  239. package/dist/rtcMetrics/index.js.map +1 -0
  240. package/dist/statsAnalyzer/global.js +1 -95
  241. package/dist/statsAnalyzer/global.js.map +1 -1
  242. package/dist/statsAnalyzer/index.js +557 -583
  243. package/dist/statsAnalyzer/index.js.map +1 -1
  244. package/dist/statsAnalyzer/mqaUtil.js +326 -130
  245. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  246. package/dist/transcription/index.js +22 -47
  247. package/dist/transcription/index.js.map +1 -1
  248. package/dist/types/annotation/annotation.types.d.ts +42 -0
  249. package/dist/types/annotation/constants.d.ts +31 -0
  250. package/dist/types/annotation/index.d.ts +117 -0
  251. package/dist/types/breakouts/breakout.d.ts +8 -0
  252. package/dist/types/breakouts/collection.d.ts +5 -0
  253. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  254. package/dist/types/breakouts/events.d.ts +8 -0
  255. package/dist/types/breakouts/index.d.ts +5 -0
  256. package/dist/types/breakouts/request.d.ts +22 -0
  257. package/dist/types/breakouts/utils.d.ts +15 -0
  258. package/dist/types/common/browser-detection.d.ts +9 -0
  259. package/dist/types/common/collection.d.ts +48 -0
  260. package/dist/types/common/config.d.ts +2 -0
  261. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  262. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  263. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  264. package/dist/types/common/errors/media.d.ts +15 -0
  265. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  266. package/dist/types/common/errors/parameter.d.ts +15 -0
  267. package/dist/types/common/errors/password-error.d.ts +15 -0
  268. package/dist/types/common/errors/permission.d.ts +14 -0
  269. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  270. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  271. package/dist/types/common/errors/reconnection.d.ts +15 -0
  272. package/dist/types/common/errors/stats.d.ts +15 -0
  273. package/dist/types/common/errors/webex-errors.d.ts +93 -0
  274. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  275. package/dist/types/common/events/events-scope.d.ts +17 -0
  276. package/dist/types/common/events/events.d.ts +12 -0
  277. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  278. package/dist/types/common/events/util.d.ts +2 -0
  279. package/dist/types/common/logs/logger-config.d.ts +2 -0
  280. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  281. package/dist/types/common/logs/request.d.ts +36 -0
  282. package/dist/types/common/queue.d.ts +34 -0
  283. package/dist/types/config.d.ts +72 -0
  284. package/dist/types/constants.d.ts +1088 -0
  285. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  286. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  287. package/dist/types/controls-options-manager/index.d.ts +136 -0
  288. package/dist/types/controls-options-manager/types.d.ts +43 -0
  289. package/dist/types/controls-options-manager/util.d.ts +1 -0
  290. package/dist/types/index.d.ts +7 -0
  291. package/dist/types/interceptors/index.d.ts +2 -0
  292. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  293. package/dist/types/interpretation/collection.d.ts +5 -0
  294. package/dist/types/interpretation/index.d.ts +5 -0
  295. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  296. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  297. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  298. package/dist/types/locus-info/fullState.d.ts +2 -0
  299. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  300. package/dist/types/locus-info/index.d.ts +322 -0
  301. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  302. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  303. package/dist/types/locus-info/parser.d.ts +272 -0
  304. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  305. package/dist/types/media/index.d.ts +34 -0
  306. package/dist/types/media/properties.d.ts +93 -0
  307. package/dist/types/media/util.d.ts +2 -0
  308. package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
  309. package/dist/types/meeting/in-meeting-actions.d.ts +167 -0
  310. package/dist/types/meeting/index.d.ts +1824 -0
  311. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  312. package/dist/types/meeting/muteState.d.ts +178 -0
  313. package/dist/types/meeting/request.d.ts +293 -0
  314. package/dist/types/meeting/request.type.d.ts +11 -0
  315. package/dist/types/meeting/state.d.ts +9 -0
  316. package/dist/types/meeting/util.d.ts +118 -0
  317. package/dist/types/meeting/voicea-meeting.d.ts +16 -0
  318. package/dist/types/meeting-info/collection.d.ts +20 -0
  319. package/dist/types/meeting-info/index.d.ts +69 -0
  320. package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -0
  321. package/dist/types/meeting-info/request.d.ts +22 -0
  322. package/dist/types/meeting-info/util.d.ts +2 -0
  323. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  324. package/dist/types/meetings/collection.d.ts +40 -0
  325. package/dist/types/meetings/index.d.ts +389 -0
  326. package/dist/types/meetings/meetings.types.d.ts +4 -0
  327. package/dist/types/meetings/request.d.ts +27 -0
  328. package/dist/types/meetings/util.d.ts +18 -0
  329. package/dist/types/member/index.d.ts +160 -0
  330. package/dist/types/member/types.d.ts +32 -0
  331. package/dist/types/member/util.d.ts +2 -0
  332. package/dist/types/members/collection.d.ts +29 -0
  333. package/dist/types/members/index.d.ts +353 -0
  334. package/dist/types/members/request.d.ts +114 -0
  335. package/dist/types/members/types.d.ts +25 -0
  336. package/dist/types/members/util.d.ts +215 -0
  337. package/dist/types/metrics/constants.d.ts +70 -0
  338. package/dist/types/metrics/index.d.ts +45 -0
  339. package/dist/types/multistream/mediaRequestManager.d.ts +120 -0
  340. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  341. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  342. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  343. package/dist/types/multistream/remoteMediaGroup.d.ts +49 -0
  344. package/dist/types/multistream/remoteMediaManager.d.ts +301 -0
  345. package/dist/types/multistream/sendSlotManager.d.ts +70 -0
  346. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  347. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  348. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  349. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  350. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  351. package/dist/types/reachability/index.d.ts +105 -0
  352. package/dist/types/reachability/request.d.ts +39 -0
  353. package/dist/types/reachability/util.d.ts +8 -0
  354. package/dist/types/reactions/constants.d.ts +3 -0
  355. package/dist/types/reactions/reactions.d.ts +4 -0
  356. package/dist/types/reactions/reactions.type.d.ts +52 -0
  357. package/dist/types/reconnection-manager/index.d.ts +136 -0
  358. package/dist/types/recording-controller/enums.d.ts +7 -0
  359. package/dist/types/recording-controller/index.d.ts +207 -0
  360. package/dist/types/recording-controller/util.d.ts +14 -0
  361. package/dist/types/roap/index.d.ts +86 -0
  362. package/dist/types/roap/request.d.ts +39 -0
  363. package/dist/types/roap/turnDiscovery.d.ts +155 -0
  364. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  365. package/dist/types/rtcMetrics/index.d.ts +61 -0
  366. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  367. package/dist/types/statsAnalyzer/index.d.ts +217 -0
  368. package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
  369. package/dist/types/transcription/index.d.ts +64 -0
  370. package/dist/types/webinar/collection.d.ts +16 -0
  371. package/dist/types/webinar/index.d.ts +5 -0
  372. package/dist/webinar/collection.js +44 -0
  373. package/dist/webinar/collection.js.map +1 -0
  374. package/dist/webinar/index.js +69 -0
  375. package/dist/webinar/index.js.map +1 -0
  376. package/internal-README.md +7 -6
  377. package/package.json +30 -21
  378. package/src/annotation/annotation.types.ts +50 -0
  379. package/src/annotation/constants.ts +36 -0
  380. package/src/annotation/index.ts +328 -0
  381. package/src/breakouts/README.md +220 -0
  382. package/src/breakouts/breakout.ts +188 -0
  383. package/src/breakouts/collection.ts +19 -0
  384. package/src/breakouts/edit-lock-error.ts +25 -0
  385. package/src/breakouts/events.ts +56 -0
  386. package/src/breakouts/index.ts +925 -0
  387. package/src/breakouts/request.ts +55 -0
  388. package/src/breakouts/utils.ts +57 -0
  389. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  390. package/src/common/collection.ts +9 -7
  391. package/src/common/{config.js → config.ts} +1 -1
  392. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  393. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  394. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  395. package/src/common/errors/{media.js → media.ts} +11 -7
  396. package/src/common/errors/no-meeting-info.ts +24 -0
  397. package/src/common/errors/parameter.ts +11 -7
  398. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  399. package/src/common/errors/{permission.js → permission.ts} +10 -6
  400. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  401. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  402. package/src/common/errors/{stats.js → stats.ts} +11 -7
  403. package/src/common/errors/{webex-errors.js → webex-errors.ts} +51 -8
  404. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  405. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  406. package/src/common/events/{events.js → events.ts} +5 -1
  407. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  408. package/src/common/events/{util.js → util.ts} +2 -3
  409. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  410. package/src/common/logs/logger-proxy.ts +44 -0
  411. package/src/common/logs/{request.js → request.ts} +26 -9
  412. package/src/common/queue.ts +22 -9
  413. package/src/{config.js → config.ts} +19 -21
  414. package/src/constants.ts +296 -27
  415. package/src/controls-options-manager/constants.ts +5 -0
  416. package/src/controls-options-manager/enums.ts +18 -0
  417. package/src/controls-options-manager/index.ts +278 -0
  418. package/src/controls-options-manager/types.ts +59 -0
  419. package/src/controls-options-manager/util.ts +300 -0
  420. package/src/index.ts +45 -0
  421. package/src/interceptors/index.ts +3 -0
  422. package/src/interceptors/locusRetry.ts +67 -0
  423. package/src/interpretation/README.md +60 -0
  424. package/src/interpretation/collection.ts +19 -0
  425. package/src/interpretation/index.ts +349 -0
  426. package/src/interpretation/siLanguage.ts +18 -0
  427. package/src/locus-info/controlsUtils.ts +222 -0
  428. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  429. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  430. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  431. package/src/locus-info/{index.js → index.ts} +561 -119
  432. package/src/locus-info/{infoUtils.js → infoUtils.ts} +29 -10
  433. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +97 -17
  434. package/src/locus-info/{parser.js → parser.ts} +303 -104
  435. package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
  436. package/src/media/index.ts +460 -0
  437. package/src/media/properties.ts +283 -0
  438. package/src/media/{util.js → util.ts} +2 -2
  439. package/src/mediaQualityMetrics/config.ts +249 -0
  440. package/src/meeting/in-meeting-actions.ts +199 -3
  441. package/src/meeting/index.ts +8494 -0
  442. package/src/meeting/locusMediaRequest.ts +313 -0
  443. package/src/meeting/muteState.ts +465 -0
  444. package/src/meeting/request.ts +912 -0
  445. package/src/meeting/request.type.ts +13 -0
  446. package/src/meeting/{state.js → state.ts} +50 -35
  447. package/src/meeting/util.ts +799 -0
  448. package/src/meeting/voicea-meeting.ts +122 -0
  449. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  450. package/src/meeting-info/index.ts +210 -0
  451. package/src/meeting-info/meeting-info-v2.ts +423 -0
  452. package/src/meeting-info/{request.js → request.ts} +14 -4
  453. package/src/meeting-info/{util.js → util.ts} +70 -58
  454. package/src/meeting-info/{utilv2.js → utilv2.ts} +99 -82
  455. package/src/meetings/collection.ts +76 -0
  456. package/src/meetings/index.ts +1539 -0
  457. package/src/meetings/meetings.types.ts +12 -0
  458. package/src/meetings/{request.js → request.ts} +34 -25
  459. package/src/meetings/{util.js → util.ts} +133 -38
  460. package/src/member/{index.js → index.ts} +159 -56
  461. package/src/member/types.ts +38 -0
  462. package/src/member/util.ts +397 -0
  463. package/src/members/{collection.js → collection.ts} +10 -2
  464. package/src/members/{index.js → index.ts} +351 -146
  465. package/src/members/request.ts +255 -0
  466. package/src/members/types.ts +29 -0
  467. package/src/members/util.ts +353 -0
  468. package/src/metrics/{constants.js → constants.ts} +17 -6
  469. package/src/metrics/index.ts +73 -0
  470. package/src/multistream/mediaRequestManager.ts +341 -64
  471. package/src/multistream/receiveSlot.ts +69 -26
  472. package/src/multistream/receiveSlotManager.ts +66 -42
  473. package/src/multistream/remoteMedia.ts +40 -5
  474. package/src/multistream/remoteMediaGroup.ts +82 -3
  475. package/src/multistream/remoteMediaManager.ts +401 -81
  476. package/src/multistream/sendSlotManager.ts +199 -0
  477. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  478. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  479. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  480. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  481. package/src/reachability/clusterReachability.ts +320 -0
  482. package/src/reachability/index.ts +371 -0
  483. package/src/reachability/request.ts +50 -35
  484. package/src/reachability/util.ts +24 -0
  485. package/src/reactions/constants.ts +4 -0
  486. package/src/reactions/reactions.ts +104 -0
  487. package/src/reactions/reactions.type.ts +62 -0
  488. package/src/reconnection-manager/index.ts +643 -0
  489. package/src/recording-controller/enums.ts +8 -0
  490. package/src/recording-controller/index.ts +332 -0
  491. package/src/recording-controller/util.ts +75 -0
  492. package/src/roap/index.ts +288 -0
  493. package/src/roap/request.ts +153 -0
  494. package/src/roap/turnDiscovery.ts +374 -70
  495. package/src/rtcMetrics/constants.ts +3 -0
  496. package/src/rtcMetrics/index.ts +166 -0
  497. package/src/statsAnalyzer/global.ts +37 -0
  498. package/src/statsAnalyzer/index.ts +1275 -0
  499. package/src/statsAnalyzer/mqaUtil.ts +440 -0
  500. package/src/transcription/{index.js → index.ts} +46 -39
  501. package/src/webinar/collection.ts +31 -0
  502. package/src/webinar/index.ts +62 -0
  503. package/test/integration/spec/converged-space-meetings.js +233 -0
  504. package/test/integration/spec/journey.js +791 -531
  505. package/test/integration/spec/space-meeting.js +391 -204
  506. package/test/integration/spec/transcription.js +7 -8
  507. package/test/unit/spec/annotation/index.ts +418 -0
  508. package/test/unit/spec/breakouts/breakout.ts +238 -0
  509. package/test/unit/spec/breakouts/collection.ts +15 -0
  510. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  511. package/test/unit/spec/breakouts/events.ts +89 -0
  512. package/test/unit/spec/breakouts/index.ts +1793 -0
  513. package/test/unit/spec/breakouts/request.ts +104 -0
  514. package/test/unit/spec/breakouts/utils.js +72 -0
  515. package/test/unit/spec/common/browser-detection.js +9 -28
  516. package/test/unit/spec/common/queue.js +31 -2
  517. package/test/unit/spec/controls-options-manager/index.js +287 -0
  518. package/test/unit/spec/controls-options-manager/util.js +582 -0
  519. package/test/unit/spec/fixture/locus.js +93 -90
  520. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  521. package/test/unit/spec/interpretation/collection.ts +15 -0
  522. package/test/unit/spec/interpretation/index.ts +625 -0
  523. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  524. package/test/unit/spec/locus-info/controlsUtils.js +325 -32
  525. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  526. package/test/unit/spec/locus-info/index.js +1458 -21
  527. package/test/unit/spec/locus-info/infoUtils.js +71 -40
  528. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  529. package/test/unit/spec/locus-info/lib/SeqCmp.json +529 -685
  530. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  531. package/test/unit/spec/locus-info/parser.js +119 -44
  532. package/test/unit/spec/locus-info/selfConstant.js +120 -103
  533. package/test/unit/spec/locus-info/selfUtils.js +291 -12
  534. package/test/unit/spec/media/index.ts +194 -111
  535. package/test/unit/spec/media/properties.ts +11 -11
  536. package/test/unit/spec/meeting/in-meeting-actions.ts +96 -3
  537. package/test/unit/spec/meeting/index.js +8616 -1921
  538. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  539. package/test/unit/spec/meeting/muteState.js +568 -207
  540. package/test/unit/spec/meeting/request.js +602 -82
  541. package/test/unit/spec/meeting/utils.js +867 -179
  542. package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
  543. package/test/unit/spec/meeting-info/index.js +300 -0
  544. package/test/unit/spec/meeting-info/meetinginfov2.js +631 -78
  545. package/test/unit/spec/meeting-info/request.js +7 -9
  546. package/test/unit/spec/meeting-info/util.js +11 -12
  547. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  548. package/test/unit/spec/meetings/collection.js +27 -1
  549. package/test/unit/spec/meetings/index.js +1826 -374
  550. package/test/unit/spec/meetings/utils.js +243 -14
  551. package/test/unit/spec/member/index.js +61 -7
  552. package/test/unit/spec/member/util.js +526 -26
  553. package/test/unit/spec/members/index.js +536 -55
  554. package/test/unit/spec/members/request.js +228 -40
  555. package/test/unit/spec/members/utils.js +217 -4
  556. package/test/unit/spec/metrics/index.js +13 -68
  557. package/test/unit/spec/multistream/mediaRequestManager.ts +1032 -110
  558. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  559. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  560. package/test/unit/spec/multistream/remoteMedia.ts +40 -2
  561. package/test/unit/spec/multistream/remoteMediaGroup.ts +350 -5
  562. package/test/unit/spec/multistream/remoteMediaManager.ts +937 -65
  563. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  564. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  565. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  566. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  567. package/test/unit/spec/reachability/index.ts +606 -26
  568. package/test/unit/spec/reachability/request.js +68 -0
  569. package/test/unit/spec/reachability/util.ts +40 -0
  570. package/test/unit/spec/reconnection-manager/index.js +222 -34
  571. package/test/unit/spec/recording-controller/index.js +306 -0
  572. package/test/unit/spec/recording-controller/util.js +229 -0
  573. package/test/unit/spec/roap/index.ts +238 -82
  574. package/test/unit/spec/roap/request.ts +255 -0
  575. package/test/unit/spec/roap/turnDiscovery.ts +707 -110
  576. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  577. package/test/unit/spec/stats-analyzer/index.js +1331 -62
  578. package/test/unit/spec/webinar/collection.ts +13 -0
  579. package/test/unit/spec/webinar/index.ts +60 -0
  580. package/test/utils/cmr.js +44 -42
  581. package/test/utils/constants.js +9 -0
  582. package/test/utils/integrationTestUtils.js +46 -0
  583. package/test/utils/testUtils.js +63 -99
  584. package/test/utils/webex-config.js +22 -18
  585. package/test/utils/webex-test-users.js +65 -50
  586. package/tsconfig.json +6 -0
  587. package/dist/media/internal-media-core-wrapper.js +0 -22
  588. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  589. package/dist/meeting/effectsState.js +0 -327
  590. package/dist/meeting/effectsState.js.map +0 -1
  591. package/dist/metrics/config.js +0 -301
  592. package/dist/metrics/config.js.map +0 -1
  593. package/dist/multistream/multistreamMedia.js +0 -116
  594. package/dist/multistream/multistreamMedia.js.map +0 -1
  595. package/dist/peer-connection-manager/util.js +0 -124
  596. package/dist/peer-connection-manager/util.js.map +0 -1
  597. package/src/common/logs/logger-proxy.js +0 -33
  598. package/src/index.js +0 -15
  599. package/src/locus-info/controlsUtils.js +0 -102
  600. package/src/media/index.js +0 -459
  601. package/src/media/internal-media-core-wrapper.ts +0 -9
  602. package/src/media/properties.js +0 -289
  603. package/src/mediaQualityMetrics/config.js +0 -382
  604. package/src/meeting/effectsState.js +0 -205
  605. package/src/meeting/index.js +0 -6284
  606. package/src/meeting/muteState.js +0 -318
  607. package/src/meeting/request.js +0 -684
  608. package/src/meeting/util.js +0 -506
  609. package/src/meeting-info/index.js +0 -131
  610. package/src/meeting-info/meeting-info-v2.js +0 -255
  611. package/src/meetings/collection.js +0 -40
  612. package/src/meetings/index.js +0 -1015
  613. package/src/member/util.js +0 -254
  614. package/src/members/request.js +0 -131
  615. package/src/members/util.js +0 -258
  616. package/src/metrics/config.js +0 -324
  617. package/src/metrics/index.js +0 -530
  618. package/src/multistream/multistreamMedia.ts +0 -92
  619. package/src/peer-connection-manager/util.ts +0 -117
  620. package/src/reachability/index.js +0 -464
  621. package/src/reconnection-manager/index.js +0 -519
  622. package/src/roap/index.js +0 -220
  623. package/src/roap/request.js +0 -127
  624. package/src/statsAnalyzer/global.js +0 -133
  625. package/src/statsAnalyzer/index.js +0 -1006
  626. package/src/statsAnalyzer/mqaUtil.js +0 -173
  627. package/test/unit/spec/meeting/effectsState.js +0 -291
  628. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  629. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -0,0 +1,440 @@
1
+ /* eslint-disable no-param-reassign, prefer-destructuring */
2
+
3
+ import {mean, max} from 'lodash';
4
+
5
+ import {STATS} from '../constants';
6
+
7
+ /**
8
+ * Get the totals of a certain value from a certain media type.
9
+ *
10
+ * @param {object} stats - The large stats object.
11
+ * @param {string} sendrecvType - "send" or "recv".
12
+ * @param {string} baseMediaType - audio or video _and_ share or non-share.
13
+ * @param {string} value - The value we want to get the totals of.
14
+ * @returns {number}
15
+ */
16
+ const getTotalValueFromBaseType = (
17
+ stats: object,
18
+ sendrecvType: string,
19
+ baseMediaType: string,
20
+ value: string
21
+ ): number =>
22
+ Object.keys(stats)
23
+ .filter((mt) => mt.includes(baseMediaType))
24
+ .reduce((acc, mt) => acc + (stats[mt]?.[sendrecvType]?.[value] || 0), 0);
25
+
26
+ export const getAudioReceiverMqa = ({
27
+ audioReceiver,
28
+ statsResults,
29
+ lastMqaDataSent,
30
+ baseMediaType,
31
+ }) => {
32
+ const sendrecvType = STATS.RECEIVE_DIRECTION;
33
+
34
+ const getLastTotalValue = (value: string) =>
35
+ getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
36
+ const getTotalValue = (value: string) =>
37
+ getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
38
+
39
+ const lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
40
+ const lastPacketsLost = getLastTotalValue('totalPacketsLost');
41
+ const lastBytesReceived = getLastTotalValue('totalBytesReceived');
42
+ const lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');
43
+ const lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');
44
+
45
+ const totalPacketsReceived = getTotalValue('totalPacketsReceived');
46
+ const packetsLost = getTotalValue('totalPacketsLost');
47
+ const totalBytesReceived = getTotalValue('totalBytesReceived');
48
+ const totalFecPacketsReceived = getTotalValue('fecPacketsReceived');
49
+ const totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');
50
+
51
+ audioReceiver.common.common.direction =
52
+ statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]
53
+ ?.direction || 'inactive';
54
+ audioReceiver.common.common.isMain = !baseMediaType.includes('-share');
55
+ audioReceiver.common.transportType = statsResults.connectionType.local.transport;
56
+
57
+ // add rtpPacket info inside common as also for call analyzer
58
+ audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;
59
+
60
+ // Hop by hop are numbers and not percentage so we compare on what we sent the last min
61
+ // collect the packets received for the last min
62
+ const totalPacketsLost = packetsLost - lastPacketsLost;
63
+ audioReceiver.common.mediaHopByHopLost = totalPacketsLost;
64
+ audioReceiver.common.rtpHopByHopLost = totalPacketsLost;
65
+
66
+ const fecRecovered =
67
+ totalFecPacketsReceived -
68
+ lastFecPacketsReceived -
69
+ (totalFecPacketsDiscarded - lastFecPacketsDiscarded);
70
+ audioReceiver.common.fecPackets = fecRecovered;
71
+
72
+ audioReceiver.common.rtpBitrate = ((totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;
73
+ };
74
+
75
+ export const getAudioReceiverStreamMqa = ({
76
+ audioReceiverStream,
77
+ statsResults,
78
+ lastMqaDataSent,
79
+ mediaType,
80
+ }) => {
81
+ const sendrecvType = STATS.RECEIVE_DIRECTION;
82
+
83
+ const lastPacketsDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesDecoded || 0;
84
+ const lastSamplesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesReceived || 0;
85
+ const lastConcealedSamples = lastMqaDataSent[mediaType]?.[sendrecvType].concealedSamples || 0;
86
+ const lastBytesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesReceived || 0;
87
+ const lastFecPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsReceived || 0;
88
+ const lastFecPacketsDiscarded =
89
+ lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsDiscarded || 0;
90
+ const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;
91
+ const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;
92
+
93
+ const {csi} = statsResults[mediaType];
94
+ if (csi && !audioReceiverStream.common.csi.includes(csi)) {
95
+ audioReceiverStream.common.csi.push(csi);
96
+ }
97
+
98
+ audioReceiverStream.common.rtpPackets =
99
+ statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
100
+
101
+ audioReceiverStream.common.maxRtpJitter =
102
+ // @ts-ignore
103
+ max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
104
+ audioReceiverStream.common.meanRtpJitter =
105
+ mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
106
+ audioReceiverStream.common.rtpJitter = audioReceiverStream.common.maxRtpJitter;
107
+
108
+ // Fec packets do come in as part of the FEC only for audio
109
+ const fecRecovered =
110
+ statsResults[mediaType][sendrecvType].fecPacketsReceived -
111
+ lastFecPacketsReceived -
112
+ (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);
113
+
114
+ audioReceiverStream.common.rtpEndToEndLost =
115
+ statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;
116
+
117
+ audioReceiverStream.common.framesDropped =
118
+ statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;
119
+ audioReceiverStream.common.renderedFrameRate =
120
+ (audioReceiverStream.common.framesDropped * 100) / 60 || 0;
121
+
122
+ audioReceiverStream.common.framesReceived =
123
+ statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;
124
+ audioReceiverStream.common.concealedFrames =
125
+ statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;
126
+ audioReceiverStream.common.receivedBitrate =
127
+ ((statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;
128
+ };
129
+
130
+ export const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent, baseMediaType}) => {
131
+ const sendrecvType = STATS.SEND_DIRECTION;
132
+
133
+ const getLastTotalValue = (value: string) =>
134
+ getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
135
+ const getTotalValue = (value: string) =>
136
+ getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
137
+
138
+ const lastPacketsSent = getLastTotalValue('totalPacketsSent');
139
+ const lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
140
+
141
+ const totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
142
+ const totalPacketsSent = getTotalValue('totalPacketsSent');
143
+
144
+ const meanRemoteJitter = Object.keys(statsResults)
145
+ .filter((mt) => mt.includes(baseMediaType))
146
+ .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
147
+ const meanRoundTripTime = Object.keys(statsResults)
148
+ .filter((mt) => mt.includes(baseMediaType))
149
+ .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
150
+
151
+ audioSender.common.common.direction =
152
+ statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]
153
+ ?.direction || 'inactive';
154
+ audioSender.common.common.isMain = !baseMediaType.includes('-share');
155
+ audioSender.common.transportType = statsResults.connectionType.local.transport;
156
+
157
+ audioSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;
158
+ audioSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;
159
+
160
+ audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;
161
+ // audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;
162
+ // From candidate-pair
163
+ audioSender.common.availableBitrate = getTotalValueFromBaseType(
164
+ statsResults,
165
+ sendrecvType,
166
+ baseMediaType,
167
+ 'availableOutgoingBitrate'
168
+ );
169
+ // Calculate based on how much packets lost of received compated to how to the client sent
170
+
171
+ const totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
172
+ audioSender.common.remoteLossRate =
173
+ totalPacketsSent - lastPacketsSent > 0
174
+ ? (totalPacketsLostForaMin * 100) / (totalPacketsSent - lastPacketsSent)
175
+ : 0; // This is the packets sent with in last min
176
+
177
+ audioSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000 || 0;
178
+ audioSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000 || 0;
179
+ audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;
180
+
181
+ // Calculate the outgoing bitrate
182
+ const totalBytesSentInaMin =
183
+ getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') -
184
+ getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');
185
+
186
+ audioSender.common.rtpBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin * 8) / 60 : 0;
187
+ };
188
+
189
+ export const getAudioSenderStreamMqa = ({
190
+ audioSenderStream,
191
+ statsResults,
192
+ lastMqaDataSent,
193
+ mediaType,
194
+ }) => {
195
+ const sendrecvType = STATS.SEND_DIRECTION;
196
+
197
+ const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;
198
+ const lastFramesEncoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;
199
+ const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;
200
+ const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;
201
+
202
+ const {csi} = statsResults[mediaType];
203
+ if (csi && !audioSenderStream.common.csi.includes(csi)) {
204
+ audioSenderStream.common.csi.push(csi);
205
+ }
206
+
207
+ audioSenderStream.common.rtpPackets =
208
+ statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
209
+
210
+ const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
211
+ audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin
212
+ ? (totalBytesSentInaMin * 8) / 60
213
+ : 0;
214
+
215
+ audioSenderStream.transmittedKeyFrames =
216
+ statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;
217
+ audioSenderStream.requestedKeyFrames =
218
+ statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
219
+ };
220
+
221
+ export const getVideoReceiverMqa = ({
222
+ videoReceiver,
223
+ statsResults,
224
+ lastMqaDataSent,
225
+ baseMediaType,
226
+ }) => {
227
+ const sendrecvType = STATS.RECEIVE_DIRECTION;
228
+
229
+ const getLastTotalValue = (value: string) =>
230
+ getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
231
+ const getTotalValue = (value: string) =>
232
+ getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
233
+
234
+ const lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
235
+ const lastPacketsLost = getLastTotalValue('totalPacketsLost');
236
+ const lastBytesReceived = getLastTotalValue('totalBytesReceived');
237
+
238
+ const packetsLost = getTotalValue('totalPacketsLost');
239
+ const totalPacketsReceived = getTotalValue('totalPacketsReceived');
240
+ const totalBytesReceived = getTotalValue('totalBytesReceived');
241
+
242
+ const meanRemoteJitter = Object.keys(statsResults)
243
+ .filter((mt) => mt.includes(baseMediaType))
244
+ .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
245
+
246
+ videoReceiver.common.common.direction =
247
+ statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]
248
+ ?.direction || 'inactive';
249
+ videoReceiver.common.common.isMain = !baseMediaType.includes('-share');
250
+ videoReceiver.common.transportType = statsResults.connectionType.local.transport;
251
+
252
+ // collect the packets received for the last min
253
+ videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;
254
+
255
+ // Hop by hop are numbers and not percentage so we compare on what we sent the last min
256
+ // this is including packet lost
257
+ const totalPacketsLost = packetsLost - lastPacketsLost;
258
+ videoReceiver.common.mediaHopByHopLost = totalPacketsLost;
259
+ videoReceiver.common.rtpHopByHopLost = totalPacketsLost;
260
+
261
+ // calculate this values
262
+ videoReceiver.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;
263
+ videoReceiver.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;
264
+
265
+ // Calculate the outgoing bitrate
266
+ const totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;
267
+
268
+ videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin
269
+ ? (totalBytesReceivedInaMin * 8) / 60
270
+ : 0;
271
+ };
272
+
273
+ export const getVideoReceiverStreamMqa = ({
274
+ videoReceiverStream,
275
+ statsResults,
276
+ lastMqaDataSent,
277
+ mediaType,
278
+ }) => {
279
+ const sendrecvType = STATS.RECEIVE_DIRECTION;
280
+
281
+ const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;
282
+ const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;
283
+ const lastBytesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesReceived || 0;
284
+ const lastFramesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].framesReceived || 0;
285
+ const lastFramesDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].framesDecoded || 0;
286
+ const lastFramesDropped = lastMqaDataSent[mediaType]?.[sendrecvType].framesDropped || 0;
287
+ const lastKeyFramesDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].keyFramesDecoded || 0;
288
+ const lastPliCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalPliCount || 0;
289
+
290
+ const {csi} = statsResults[mediaType];
291
+ if (csi && !videoReceiverStream.common.csi.includes(csi)) {
292
+ videoReceiverStream.common.csi.push(csi);
293
+ }
294
+
295
+ videoReceiverStream.common.rtpPackets =
296
+ statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
297
+
298
+ const totalPacketLoss =
299
+ statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;
300
+
301
+ // End to end packetloss is after recovery
302
+ videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;
303
+
304
+ videoReceiverStream.common.rtpJitter =
305
+ // @ts-ignore
306
+ max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
307
+
308
+ const totalBytesReceivedInaMin =
309
+ statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;
310
+ videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin
311
+ ? (totalBytesReceivedInaMin * 8) / 60
312
+ : 0;
313
+
314
+ const totalFrameReceivedInaMin =
315
+ statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;
316
+ const totalFrameDecodedInaMin =
317
+ statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;
318
+
319
+ videoReceiverStream.common.receivedFrameRate = Math.round(
320
+ totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0
321
+ );
322
+ videoReceiverStream.common.renderedFrameRate = Math.round(
323
+ totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0
324
+ );
325
+
326
+ videoReceiverStream.common.framesDropped =
327
+ statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;
328
+ videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;
329
+ videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;
330
+ videoReceiverStream.receivedFrameSize =
331
+ (videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth) / 256;
332
+
333
+ videoReceiverStream.receivedKeyFrames =
334
+ statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;
335
+ videoReceiverStream.requestedKeyFrames =
336
+ statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;
337
+ };
338
+
339
+ export const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, baseMediaType}) => {
340
+ const sendrecvType = STATS.SEND_DIRECTION;
341
+
342
+ const getLastTotalValue = (value: string) =>
343
+ getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
344
+ const getTotalValue = (value: string) =>
345
+ getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
346
+
347
+ const lastPacketsSent = getLastTotalValue('totalPacketsSent');
348
+ const lastBytesSent = getLastTotalValue('totalBytesSent');
349
+ const lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
350
+
351
+ const totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
352
+ const totalPacketsSent = getTotalValue('totalPacketsSent');
353
+ const totalBytesSent = getTotalValue('totalBytesSent');
354
+ const availableOutgoingBitrate = getTotalValue('availableOutgoingBitrate');
355
+
356
+ videoSender.common.common.direction =
357
+ statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]
358
+ ?.direction || 'inactive';
359
+ videoSender.common.common.isMain = !baseMediaType.includes('-share');
360
+ videoSender.common.transportType = statsResults.connectionType.local.transport;
361
+
362
+ const meanRemoteJitter = Object.keys(statsResults)
363
+ .filter((mt) => mt.includes(baseMediaType))
364
+ .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
365
+ const meanRoundTripTime = Object.keys(statsResults)
366
+ .filter((mt) => mt.includes(baseMediaType))
367
+ .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
368
+
369
+ // @ts-ignore
370
+ videoSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;
371
+ videoSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;
372
+
373
+ videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;
374
+ videoSender.common.availableBitrate = availableOutgoingBitrate;
375
+
376
+ // Calculate based on how much packets lost of received compated to how to the client sent
377
+ const totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
378
+
379
+ videoSender.common.remoteLossRate =
380
+ totalPacketsSent - lastPacketsSent > 0
381
+ ? (totalPacketsLostForaMin * 100) / (totalPacketsSent - lastPacketsSent)
382
+ : 0; // This is the packets sent with in last min || 0;
383
+
384
+ videoSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000 || 0;
385
+ videoSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000 || 0;
386
+ videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;
387
+
388
+ // Calculate the outgoing bitrate
389
+ const totalBytesSentInaMin = totalBytesSent - lastBytesSent;
390
+
391
+ videoSender.common.rtpBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin * 8) / 60 : 0;
392
+ };
393
+
394
+ export const getVideoSenderStreamMqa = ({
395
+ videoSenderStream,
396
+ statsResults,
397
+ lastMqaDataSent,
398
+ mediaType,
399
+ }) => {
400
+ const sendrecvType = STATS.SEND_DIRECTION;
401
+
402
+ const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;
403
+ const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;
404
+ const lastKeyFramesEncoded =
405
+ lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;
406
+ const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;
407
+ const lastFramesSent = lastMqaDataSent[mediaType]?.[sendrecvType].framesSent || 0;
408
+
409
+ const {csi} = statsResults[mediaType];
410
+ if (csi && !videoSenderStream.common.csi.includes(csi)) {
411
+ videoSenderStream.common.csi.push(csi);
412
+ }
413
+
414
+ videoSenderStream.common.rtpPackets =
415
+ statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
416
+
417
+ // Calculate the outgoing bitrate
418
+ const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
419
+
420
+ videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin
421
+ ? (totalBytesSentInaMin * 8) / 60
422
+ : 0;
423
+
424
+ videoSenderStream.transmittedKeyFrames =
425
+ statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;
426
+ videoSenderStream.requestedKeyFrames =
427
+ statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
428
+
429
+ // From tracks //TODO: calculate a proper one
430
+ const totalFrameSentInaMin =
431
+ statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);
432
+
433
+ videoSenderStream.common.transmittedFrameRate = Math.round(
434
+ totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0
435
+ );
436
+ videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;
437
+ videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;
438
+ videoSenderStream.transmittedFrameSize =
439
+ (videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth) / 256;
440
+ };
@@ -6,6 +6,12 @@ import {v4 as uuidv4} from 'uuid';
6
6
  * @class Transcription
7
7
  */
8
8
  export default class Transcription {
9
+ webSocketUrl: any;
10
+ sessionID: any;
11
+ members: any;
12
+ memberCSIs: any;
13
+ webSocket: any;
14
+
9
15
  /**
10
16
  * @param {string} webSocketUrl
11
17
  * @param {sessionID} sessionId
@@ -13,7 +19,7 @@ export default class Transcription {
13
19
  * @constructor
14
20
  * @memberof Transcription
15
21
  */
16
- constructor(webSocketUrl, sessionId, members) {
22
+ constructor(webSocketUrl: string, sessionId: any, members: object) {
17
23
  this.webSocketUrl = webSocketUrl;
18
24
  this.sessionID = sessionId;
19
25
  this.members = members;
@@ -32,24 +38,26 @@ export default class Transcription {
32
38
  * @param {string} sessionID
33
39
  * @returns {void}
34
40
  */
35
- connect(token) {
41
+ connect(token: string) {
36
42
  this.webSocket.onopen = () => {
37
- this.webSocket.send(JSON.stringify({
38
- id: uuidv4(),
39
- type: 'authorization',
40
- data: {token: `Bearer ${token}`},
41
- trackingId: `webex-js-sdk_${this.sessionID}${Date.now.toString()}`
42
- }));
43
+ this.webSocket.send(
44
+ JSON.stringify({
45
+ id: uuidv4(),
46
+ type: 'authorization',
47
+ data: {token: `Bearer ${token}`},
48
+ trackingId: `webex-js-sdk_${this.sessionID}${Date.now.toString()}`,
49
+ })
50
+ );
43
51
  };
44
52
  }
45
53
 
46
54
  /**
47
55
  * Sets callback to invoke when the web socket connection is closed.
48
56
  *
49
- * @param {function} callback
57
+ * @param {Function} callback
50
58
  * @returns {void}
51
59
  */
52
- onCloseSocket(callback) {
60
+ onCloseSocket(callback: any) {
53
61
  if (callback) {
54
62
  this.webSocket.onclose = (event) => {
55
63
  callback(event);
@@ -61,10 +69,10 @@ export default class Transcription {
61
69
  * Sets callback to invoke when a web socket connection error occurs.
62
70
  * An event parameter will be send to the callback.
63
71
  *
64
- * @param {function} callback
72
+ * @param {Function} callback
65
73
  * @returns {void}
66
74
  */
67
- onErrorSocket(callback) {
75
+ onErrorSocket(callback: any) {
68
76
  if (callback) {
69
77
  this.webSocket.onerror = (event) => {
70
78
  callback(event);
@@ -79,7 +87,7 @@ export default class Transcription {
79
87
  * @param {object} csis
80
88
  * @returns {object}
81
89
  */
82
- getSpeaker(csis) {
90
+ private getSpeaker(csis: any) {
83
91
  for (const csi of csis) {
84
92
  const member = this.memberCSIs[csi];
85
93
 
@@ -88,31 +96,33 @@ export default class Transcription {
88
96
  }
89
97
  }
90
98
 
91
- return Object.values(this.members.membersCollection.members)
92
- .find((member) => {
93
- const memberCSIs = member.participant.status.csis;
94
- let selfIsSpeaking = false;
95
-
96
- for (const csi of csis) {
97
- if (memberCSIs.includes(csi)) {
98
- this.memberCSIs[csi] = member;
99
- selfIsSpeaking = true;
100
- break;
101
- }
99
+ return Object.values(this.members.membersCollection.members).find((member: any) => {
100
+ const memberCSIs = member.participant.status.csis;
101
+ let selfIsSpeaking = false;
102
+
103
+ for (const csi of csis) {
104
+ if (memberCSIs.includes(csi)) {
105
+ this.memberCSIs[csi] = member;
106
+ selfIsSpeaking = true;
107
+ break;
102
108
  }
109
+ }
103
110
 
104
- return selfIsSpeaking;
105
- });
111
+ return selfIsSpeaking;
112
+ });
106
113
  }
107
114
 
108
115
  /**
109
116
  * Sends transcription data to given callback as it arrives.
110
117
  *
111
- * @param {function} callback
118
+ * @param {Function} callback
112
119
  * @returns {void}
113
120
  */
114
- subscribe(callback) {
115
- let data, csis, speaker, transcription;
121
+ subscribe(callback: any) {
122
+ let data;
123
+ let csis;
124
+ let speaker;
125
+ let transcription;
116
126
 
117
127
  this.webSocket.onmessage = (event) => {
118
128
  data = JSON.parse(event.data);
@@ -123,15 +133,13 @@ export default class Transcription {
123
133
  this.webSocket.send(JSON.stringify({messageID: data.id, type: 'ack'}));
124
134
 
125
135
  if (transcription) {
126
- callback(
127
- {
128
- id: data.data?.voiceaPayload?.transcript_id,
129
- personID: speaker?.id,
130
- transcription,
131
- timestamp: data.timestamp,
132
- type: data?.data?.voiceaPayload?.type
133
- }
134
- );
136
+ callback({
137
+ id: data.data?.voiceaPayload?.transcript_id,
138
+ personID: speaker?.id,
139
+ transcription,
140
+ timestamp: data.timestamp,
141
+ type: data?.data?.voiceaPayload?.type,
142
+ });
135
143
  }
136
144
  };
137
145
  }
@@ -144,4 +152,3 @@ export default class Transcription {
144
152
  this.webSocket.close();
145
153
  }
146
154
  }
147
-
@@ -0,0 +1,31 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {MEETINGS} from '../constants';
6
+
7
+ class WebinarCollection {
8
+ webinarInfo: any;
9
+
10
+ namespace = MEETINGS;
11
+
12
+ mainIndex = 'sessionId';
13
+
14
+ constructor() {
15
+ this.webinarInfo = {};
16
+ }
17
+
18
+ set(id, info) {
19
+ this.webinarInfo[id] = info;
20
+ }
21
+
22
+ /**
23
+ * @param {String} id
24
+ * @returns {Member}
25
+ */
26
+ get(id: string) {
27
+ return this.webinarInfo[id];
28
+ }
29
+ }
30
+
31
+ export default WebinarCollection;
@@ -0,0 +1,62 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+ import {WebexPlugin} from '@webex/webex-core';
5
+ import {MEETINGS} from '../constants';
6
+
7
+ import WebinarCollection from './collection';
8
+
9
+ /**
10
+ * @class Webinar
11
+ */
12
+ const Webinar = WebexPlugin.extend({
13
+ namespace: MEETINGS,
14
+ collections: {
15
+ webinar: WebinarCollection,
16
+ },
17
+
18
+ props: {
19
+ locusUrl: 'string', // appears current webinar's locus url
20
+ webcastUrl: 'string', // current webinar's webcast url
21
+ webinarAttendeesSearchingUrl: 'string', // current webinarAttendeesSearching url
22
+ canManageWebcast: 'boolean', // appears the ability to manage webcast
23
+ },
24
+
25
+ /**
26
+ * Update the current locus url of the webinar
27
+ * @param {string} locusUrl // locus url
28
+ * @returns {void}
29
+ */
30
+ locusUrlUpdate(locusUrl) {
31
+ this.set('locusUrl', locusUrl);
32
+ },
33
+
34
+ /**
35
+ * Update the current webcast url of the meeting
36
+ * @param {string} webcastUrl // webcast url
37
+ * @returns {void}
38
+ */
39
+ webcastUrlUpdate(webcastUrl) {
40
+ this.set('webcastUrl', webcastUrl);
41
+ },
42
+
43
+ /**
44
+ * Update the current webinarAttendeesSearching url of the meeting
45
+ * @param {string} webinarAttendeesSearchingUrl // webinarAttendeesSearching url
46
+ * @returns {void}
47
+ */
48
+ webinarAttendeesSearchingUrlUpdate(webinarAttendeesSearchingUrl) {
49
+ this.set('webinarAttendeesSearchingUrl', webinarAttendeesSearchingUrl);
50
+ },
51
+
52
+ /**
53
+ * Update whether self has capability to manage start/stop webcast (only host can manage it)
54
+ * @param {boolean} canManageWebcast
55
+ * @returns {void}
56
+ */
57
+ updateCanManageWebcast(canManageWebcast) {
58
+ this.set('canManageWebcast', canManageWebcast);
59
+ },
60
+ });
61
+
62
+ export default Webinar;