@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
@@ -14,13 +14,21 @@ import ParameterError from '@webex/plugin-meetings/src/common/errors/parameter';
14
14
  import Meetings from '@webex/plugin-meetings';
15
15
  import Members from '@webex/plugin-meetings/src/members';
16
16
  import MembersUtil from '@webex/plugin-meetings/src/members/util';
17
+ import * as MembersRequestImport from '@webex/plugin-meetings/src/members/request';
18
+ import Trigger from '@webex/plugin-meetings/src/common/events/trigger-proxy';
19
+ import {EVENT_TRIGGERS} from '@webex/plugin-meetings/src/constants';
20
+ import {
21
+ ReclaimHostEmptyWrongKeyError,
22
+ ReclaimHostIsHostAlreadyError,
23
+ ReclaimHostNotAllowedError,
24
+ ReclaimHostNotSupportedError,
25
+ } from '../../../../src/common/errors/reclaim-host-role-errors';
17
26
 
18
27
  const {assert} = chai;
19
28
 
20
29
  chai.use(chaiAsPromised);
21
30
  sinon.assert.expose(chai.assert, {prefix: ''});
22
31
 
23
-
24
32
  describe('plugin-meetings', () => {
25
33
  let webex;
26
34
  let url1;
@@ -34,37 +42,33 @@ describe('plugin-meetings', () => {
34
42
  id: '6eb08f8b-bf69-3251-a126-b161bead2d21',
35
43
  phoneNumber: '+18578675309',
36
44
  isExternal: true,
37
- primaryDisplayString: '+18578675309'
45
+ primaryDisplayString: '+18578675309',
38
46
  },
39
47
  devices: [
40
48
  {
41
49
  url: 'https://fakeURL.com',
42
50
  deviceType: 'SIP',
43
51
  state: 'JOINED',
44
- intents: [
45
- null
46
- ],
52
+ intents: [null],
47
53
  correlationId: '1234',
48
54
  provisionalUrl: 'dialout:///fake',
49
- isSparkPstn: true
55
+ isSparkPstn: true,
50
56
  },
51
57
  {
52
58
  url: 'dialout:///fakeagain',
53
59
  deviceType: 'PROVISIONAL',
54
60
  state: 'JOINED',
55
- intents: [
56
- null
57
- ],
61
+ intents: [null],
58
62
  correlationId: '4321',
59
63
  isVideoCallback: false,
60
64
  clientUrl: 'https://fakeURL',
61
65
  provisionalType: 'DIAL_OUT_ONLY',
62
- dialingStatus: 'SUCCESS'
63
- }
66
+ dialingStatus: 'SUCCESS',
67
+ },
64
68
  ],
65
69
  status: {
66
70
  audioStatus: 'SENDRECV',
67
- videoStatus: 'INACTIVE'
71
+ videoStatus: 'INACTIVE',
68
72
  },
69
73
  id: 'abc-123-abc-123',
70
74
  guest: true,
@@ -72,51 +76,70 @@ describe('plugin-meetings', () => {
72
76
  moderator: false,
73
77
  panelist: false,
74
78
  moveToLobbyNotAllowed: true,
75
- deviceUrl: 'https://fakeDeviceurl'
79
+ deviceUrl: 'https://fakeDeviceurl',
76
80
  },
77
81
  id: 'abc-123-abc-123',
78
82
  status: 'IN_MEETING',
79
83
  type: 'MEETING',
80
- isModerator: false
81
- }
84
+ isModerator: false,
85
+ },
82
86
  };
83
87
 
84
-
85
88
  describe('members', () => {
86
89
  const sandbox = sinon.createSandbox();
87
90
  let createMembers;
91
+ let meeting;
92
+ let membersRequestSpy;
88
93
 
89
94
  beforeEach(() => {
90
95
  webex = new MockWebex({
91
96
  children: {
92
97
  meetings: Meetings,
93
98
  credentials: Credentials,
94
- support: Support
99
+ support: Support,
95
100
  },
96
101
  config: {
97
102
  credentials: {
98
- client_id: 'mock-client-id'
103
+ client_id: 'mock-client-id',
99
104
  },
100
105
  meetings: {
101
106
  reconnection: {
102
- enabled: false
107
+ enabled: false,
103
108
  },
104
109
  mediaSettings: {},
105
110
  metrics: {},
106
- stats: {}
107
- }
108
- }
111
+ stats: {},
112
+ },
113
+ },
109
114
  });
110
115
 
111
116
  url1 = `https://example.com/${uuid.v4()}`;
112
117
 
113
- createMembers = (options) => new Members({locusUrl: options.url}, {parent: webex});
118
+ membersRequestSpy = sinon.spy(MembersRequestImport, 'default');
119
+
120
+ meeting = {
121
+ request: sinon.mock().returns(Promise.resolve()),
122
+ locusInfo: {
123
+ sequence: {}
124
+ }
125
+ }
126
+
127
+ createMembers = (options) => new Members({locusUrl: options.url, meeting}, {parent: webex});
114
128
  });
115
129
 
116
130
  afterEach(() => {
131
+ membersRequestSpy.restore();
117
132
  sandbox.restore();
118
133
  });
119
134
 
135
+ describe('constructor', () => {
136
+ it('passes the meeting to the MembersRequest', () => {
137
+ createMembers({});
138
+
139
+ assert.calledOnceWithExactly(membersRequestSpy, {meeting}, {parent: webex});
140
+ });
141
+ });
142
+
120
143
  describe('#addMembers', () => {
121
144
  it('should invoke isInvalidInvitee and generateAddMemberOptions from MembersUtil when addMember is called with valid params', async () => {
122
145
  sandbox.spy(MembersUtil, 'isInvalidInvitee');
@@ -136,6 +159,128 @@ describe('plugin-meetings', () => {
136
159
  });
137
160
  });
138
161
 
162
+ describe('#admitMembers', () => {
163
+ let members;
164
+ beforeEach(() => {
165
+ members = createMembers({url: url1});
166
+ members.membersRequest.admitMember = sinon.stub().returns(Promise.resolve(true));
167
+ });
168
+ it('should return error if param memberIds is not provided', async () => {
169
+ let error;
170
+ await members.admitMembers().catch((e) => {
171
+ error = e;
172
+ });
173
+ assert.deepEqual(error, new ParameterError('No member ids provided to admit.'));
174
+ });
175
+
176
+ it('should call membersRequest.admitMember as expected', async () => {
177
+ await members.admitMembers(['uuid']);
178
+ const arg1 = members.membersRequest.admitMember.getCall(0).args[0];
179
+ assert.equal(arg1.sessionLocusUrls, undefined);
180
+ assert.equal(arg1.locusUrl.includes('https://example.com/'), true);
181
+ assert.deepEqual(arg1.memberIds, ['uuid']);
182
+
183
+ const sessionLocusUrls = {
184
+ authorizingLocusUrl: 'authorizingLocusUrl',
185
+ mainLocusUrl: 'mainLocusUrl',
186
+ };
187
+ await members.admitMembers(['uuid'], sessionLocusUrls);
188
+ const arg2 = members.membersRequest.admitMember.getCall(1).args[0];
189
+ assert.equal(arg2.sessionLocusUrls, sessionLocusUrls);
190
+ assert.equal(arg1.locusUrl.includes('https://example.com/'), true);
191
+ assert.deepEqual(arg1.memberIds, ['uuid']);
192
+ });
193
+ });
194
+
195
+ describe('#muteMember', () => {
196
+ const testMuteMember = async (mute, isAudio) => {
197
+ sandbox.spy(MembersUtil, 'generateMuteMemberOptions');
198
+
199
+ const locusUrl = 'locus-url';
200
+ const members = createMembers({url: locusUrl});
201
+ const {membersRequest} = members;
202
+ sandbox.spy(membersRequest, 'muteMember');
203
+
204
+ const memberId = 'bob';
205
+
206
+ await members.muteMember(memberId, mute, isAudio);
207
+ assert.calledOnce(MembersUtil.generateMuteMemberOptions);
208
+ assert.calledWith(
209
+ MembersUtil.generateMuteMemberOptions,
210
+ memberId,
211
+ mute,
212
+ members.locusUrl,
213
+ isAudio
214
+ );
215
+
216
+ assert.calledOnce(membersRequest.muteMember);
217
+ assert.calledWith(membersRequest.muteMember, {memberId, muted: mute, locusUrl, isAudio});
218
+ };
219
+
220
+ it('invokes expected functions when muteMember is called for mute=true, isAudio=true', async () => {
221
+ testMuteMember(true, true);
222
+ });
223
+
224
+ it('invokes expected functions when muteMember is called for mute=true, isAudio=false', async () => {
225
+ testMuteMember(true, false);
226
+ });
227
+
228
+ it('invokes expected functions when muteMember is called for mute=false, isAudio=true', async () => {
229
+ testMuteMember(false, true);
230
+ });
231
+
232
+ it('invokes expected functions when muteMember is called for mute=false, isAudio=false', async () => {
233
+ testMuteMember(false, false);
234
+ });
235
+ });
236
+
237
+ describe('#clearMembers', () => {
238
+ it('should send clear event if clear members', () => {
239
+ const members = createMembers({url: url1});
240
+ members.membersCollection.setAll(fakeMembersCollection);
241
+ sinon.stub(Trigger, 'trigger');
242
+ members.clearMembers();
243
+ assert.deepEqual(members.membersCollection.members, {});
244
+ assert.calledWith(
245
+ Trigger.trigger,
246
+ members,
247
+ {
248
+ file: 'members',
249
+ function: 'clearMembers',
250
+ },
251
+ EVENT_TRIGGERS.MEMBERS_CLEAR,
252
+ {}
253
+ );
254
+ });
255
+ });
256
+ describe('#locusParticipantsUpdate', () => {
257
+ it('should send member update event with session info', () => {
258
+ const members = createMembers({url: url1});
259
+ const fakePayload = {
260
+ participants: {
261
+ forEach: sinon.stub(),
262
+ },
263
+ isReplace: true,
264
+ };
265
+
266
+ members.locusParticipantsUpdate(fakePayload);
267
+
268
+ assert.calledWith(
269
+ Trigger.trigger,
270
+ members,
271
+ {
272
+ file: 'members',
273
+ function: 'locusParticipantsUpdate',
274
+ },
275
+ EVENT_TRIGGERS.MEMBERS_UPDATE,
276
+ {
277
+ delta: {added: [], updated: []},
278
+ full: {},
279
+ isReplace: true,
280
+ }
281
+ );
282
+ });
283
+ });
139
284
  describe('#sendDialPadKey', () => {
140
285
  it('should throw a rejection when calling sendDialPadKey with no tones', async () => {
141
286
  const members = createMembers({url: url1});
@@ -155,7 +300,13 @@ describe('plugin-meetings', () => {
155
300
 
156
301
  members.membersCollection.setAll(fakeMembersCollection);
157
302
  await members.sendDialPadKey('1', 'test1');
158
- assert.calledWith(MembersUtil.genderateSendDTMFOptions, 'https://fakeURL.com', '1', 'test1', url1);
303
+ assert.calledWith(
304
+ MembersUtil.genderateSendDTMFOptions,
305
+ 'https://fakeURL.com',
306
+ '1',
307
+ 'test1',
308
+ url1
309
+ );
159
310
  });
160
311
 
161
312
  it('should call the sendDialPadKey method on membersRequest if the member is valid', async () => {
@@ -191,12 +342,213 @@ describe('plugin-meetings', () => {
191
342
  });
192
343
  });
193
344
 
345
+ describe('#assignRoles', () => {
346
+ const fakeRoles = [
347
+ {type: 'PRESENTER', hasRole: true},
348
+ {type: 'MODERATOR', hasRole: false},
349
+ {type: 'COHOST', hasRole: true},
350
+ ];
351
+
352
+ const resolvedValue = "it worked";
353
+
354
+ const genericMessage = 'Generic error from the API';
355
+
356
+ const setup = (locusUrl, errorCode) => {
357
+ const members = createMembers({url: locusUrl});
358
+
359
+ const spies = {
360
+ generateRoleAssignmentMemberOptions: sandbox.spy(
361
+ MembersUtil,
362
+ 'generateRoleAssignmentMemberOptions'
363
+ ),
364
+ };
365
+
366
+ if (errorCode) {
367
+ spies.assignRolesMember = sandbox.stub(members.membersRequest, 'assignRolesMember').rejects({body: {errorCode}, message: genericMessage});
368
+ } else {
369
+ spies.assignRolesMember = sandbox.stub(members.membersRequest, 'assignRolesMember').resolves(resolvedValue);
370
+ }
371
+
372
+ return {members, spies};
373
+ };
374
+
375
+ const checkInvalid = async (resultPromise, expectedMessage, spies) => {
376
+ await assert.isRejected(resultPromise, ParameterError, expectedMessage);
377
+ assert.notCalled(spies.generateRoleAssignmentMemberOptions);
378
+ assert.notCalled(spies.assignRolesMember);
379
+ };
380
+
381
+ const checkError = async (error, expectedMemberId, expectedRoles, expectedLocusUrl, resultPromise, expectedMessage, spies) => {
382
+ await assert.isRejected(resultPromise, error, expectedMessage);
383
+ assert.calledOnceWithExactly(
384
+ spies.generateRoleAssignmentMemberOptions,
385
+ expectedMemberId,
386
+ expectedRoles,
387
+ expectedLocusUrl
388
+ );
389
+ assert.calledOnceWithExactly(spies.assignRolesMember, {
390
+ memberId: expectedMemberId,
391
+ roles: expectedRoles,
392
+ locusUrl: expectedLocusUrl,
393
+ });
394
+ };
395
+
396
+ const checkValid = async (
397
+ resultPromise,
398
+ spies,
399
+ expectedMemberId,
400
+ expectedRoles,
401
+ expectedLocusUrl
402
+ ) => {
403
+ const resolvedValue = await assert.isFulfilled(resultPromise);
404
+ assert.calledOnceWithExactly(
405
+ spies.generateRoleAssignmentMemberOptions,
406
+ expectedMemberId,
407
+ expectedRoles,
408
+ expectedLocusUrl
409
+ );
410
+ assert.calledOnceWithExactly(spies.assignRolesMember, {
411
+ memberId: expectedMemberId,
412
+ roles: expectedRoles,
413
+ locusUrl: expectedLocusUrl,
414
+ });
415
+ assert.strictEqual(resolvedValue, resolvedValue);
416
+ };
417
+
418
+ it('should not make a request if there is no member id', async () => {
419
+ const {members, spies} = setup(url1);
420
+
421
+ const resultPromise = members.assignRoles();
422
+
423
+ await checkInvalid(
424
+ resultPromise,
425
+ 'The member id must be defined to assign the roles to a member.',
426
+ spies,
427
+ );
428
+ });
429
+
430
+ it('should not make a request if there is no locus url', async () => {
431
+ const {members, spies} = setup();
432
+
433
+ const resultPromise = members.assignRoles(uuid.v4());
434
+
435
+ await checkInvalid(
436
+ resultPromise,
437
+ 'The associated locus url for this meetings members object must be defined.',
438
+ spies,
439
+ );
440
+ });
441
+
442
+ it('should not make a request if locus throws ReclaimHostNotSupportedError', async () => {
443
+ const memberId = uuid.v4();
444
+ const {members, spies} = setup(url1, 2400127);
445
+
446
+ const resultPromise = members.assignRoles(memberId, fakeRoles);
447
+
448
+ await checkError(
449
+ ReclaimHostNotSupportedError,
450
+ memberId,
451
+ fakeRoles,
452
+ url1,
453
+ resultPromise,
454
+ 'Non converged meetings, PSTN or SIP users in converged meetings are not supported currently.',
455
+ spies,
456
+ );
457
+ });
458
+
459
+ it('should not make a request if locus throws ReclaimHostNotAllowedError', async () => {
460
+ const memberId = uuid.v4();
461
+ const {members, spies} = setup(url1, 2403135);
462
+
463
+ const resultPromise = members.assignRoles(memberId, fakeRoles);
464
+
465
+ await checkError(
466
+ ReclaimHostNotAllowedError,
467
+ memberId,
468
+ fakeRoles,
469
+ url1,
470
+ resultPromise,
471
+ 'Reclaim Host Role Not Allowed For Other Participants. Participants cannot claim host role in PMR meeting, space instant meeting or escalated instant meeting. However, the original host still can reclaim host role when it manually makes another participant to be the host.',
472
+ spies,
473
+ );
474
+ });
475
+
476
+ it('should not make a request if locus throws ReclaimHostEmptyWrongKeyError', async () => {
477
+ const memberId = uuid.v4();
478
+ const {members, spies} = setup(url1, 2403136);
479
+
480
+ const resultPromise = members.assignRoles(memberId, fakeRoles);
481
+
482
+ await checkError(
483
+ ReclaimHostEmptyWrongKeyError,
484
+ memberId,
485
+ fakeRoles,
486
+ url1,
487
+ resultPromise,
488
+ 'Host Key Not Specified Or Matched. The original host can reclaim the host role without entering the host key. However, any other person who claims the host role must enter the host key to get it.',
489
+ spies,
490
+ );
491
+ });
492
+
493
+ it('should not make a request if locus throws ReclaimHostIsHostAlreadyError', async () => {
494
+ const memberId = uuid.v4();
495
+ const {members, spies} = setup(url1, 2409150);
496
+
497
+ const resultPromise = members.assignRoles(memberId, fakeRoles);
498
+
499
+ await checkError(
500
+ ReclaimHostIsHostAlreadyError,
501
+ memberId,
502
+ fakeRoles,
503
+ url1,
504
+ resultPromise,
505
+ 'Participant Having Host Role Already. Participant who sends request to reclaim host role has already a host role.',
506
+ spies,
507
+ );
508
+ });
509
+
510
+ it('should not make a request if locus throws a different error', async () => {
511
+ const memberId = uuid.v4();
512
+ const {members, spies} = setup(url1, 1234);
513
+
514
+ const resultPromise = members.assignRoles(memberId, fakeRoles);
515
+
516
+ await checkError(
517
+ {body: {errorCode: 1234}, message: genericMessage},
518
+ memberId,
519
+ fakeRoles,
520
+ url1,
521
+ resultPromise,
522
+ genericMessage,
523
+ spies,
524
+ );
525
+ });
526
+
527
+ it('should make the correct request when called with roles', async () => {
528
+ const memberId = uuid.v4();
529
+ const {members, spies} = setup(url1);
530
+
531
+ const resultPromise = members.assignRoles(memberId, fakeRoles);
532
+
533
+ await checkValid(
534
+ resultPromise,
535
+ spies,
536
+ memberId,
537
+ fakeRoles,
538
+ url1,
539
+ );
540
+ });
541
+ });
542
+
194
543
  describe('#raiseOrLowerHand', () => {
195
544
  const setup = (locusUrl) => {
196
545
  const members = createMembers({url: locusUrl});
197
546
 
198
547
  const spies = {
199
- generateRaiseHandMemberOptions: sandbox.spy(MembersUtil, 'generateRaiseHandMemberOptions'),
548
+ generateRaiseHandMemberOptions: sandbox.spy(
549
+ MembersUtil,
550
+ 'generateRaiseHandMemberOptions'
551
+ ),
200
552
  raiseOrLowerHandMember: sandbox.spy(members.membersRequest, 'raiseOrLowerHandMember'),
201
553
  };
202
554
 
@@ -209,10 +561,25 @@ describe('plugin-meetings', () => {
209
561
  assert.notCalled(spies.raiseOrLowerHandMember);
210
562
  };
211
563
 
212
- const checkValid = async (resultPromise, spies, expectedMemberId, expectedRaise, expectedLocusUrl) => {
564
+ const checkValid = async (
565
+ resultPromise,
566
+ spies,
567
+ expectedMemberId,
568
+ expectedRaise,
569
+ expectedLocusUrl
570
+ ) => {
213
571
  await assert.isFulfilled(resultPromise);
214
- assert.calledOnceWithExactly(spies.generateRaiseHandMemberOptions, expectedMemberId, expectedRaise, expectedLocusUrl);
215
- assert.calledOnceWithExactly(spies.raiseOrLowerHandMember, {memberId: expectedMemberId, raised: expectedRaise, locusUrl: expectedLocusUrl});
572
+ assert.calledOnceWithExactly(
573
+ spies.generateRaiseHandMemberOptions,
574
+ expectedMemberId,
575
+ expectedRaise,
576
+ expectedLocusUrl
577
+ );
578
+ assert.calledOnceWithExactly(spies.raiseOrLowerHandMember, {
579
+ memberId: expectedMemberId,
580
+ raised: expectedRaise,
581
+ locusUrl: expectedLocusUrl,
582
+ });
216
583
  assert.strictEqual(resultPromise, spies.raiseOrLowerHandMember.getCall(0).returnValue);
217
584
  };
218
585
 
@@ -221,7 +588,11 @@ describe('plugin-meetings', () => {
221
588
 
222
589
  const resultPromise = members.raiseOrLowerHand();
223
590
 
224
- await checkInvalid(resultPromise, 'The member id must be defined to raise/lower the hand of the member.', spies);
591
+ await checkInvalid(
592
+ resultPromise,
593
+ 'The member id must be defined to raise/lower the hand of the member.',
594
+ spies
595
+ );
225
596
  });
226
597
 
227
598
  it('should not make a request if there is no locus url', async () => {
@@ -229,7 +600,11 @@ describe('plugin-meetings', () => {
229
600
 
230
601
  const resultPromise = members.raiseOrLowerHand(uuid.v4());
231
602
 
232
- await checkInvalid(resultPromise, 'The associated locus url for this meetings members object must be defined.', spies);
603
+ await checkInvalid(
604
+ resultPromise,
605
+ 'The associated locus url for this meetings members object must be defined.',
606
+ spies
607
+ );
233
608
  });
234
609
 
235
610
  it('should make the correct request when called with raise as true', async () => {
@@ -265,7 +640,10 @@ describe('plugin-meetings', () => {
265
640
  const members = createMembers({url: locusUrl});
266
641
 
267
642
  const spies = {
268
- generateLowerAllHandsMemberOptions: sandbox.spy(MembersUtil, 'generateLowerAllHandsMemberOptions'),
643
+ generateLowerAllHandsMemberOptions: sandbox.spy(
644
+ MembersUtil,
645
+ 'generateLowerAllHandsMemberOptions'
646
+ ),
269
647
  lowerAllHandsMember: sandbox.spy(members.membersRequest, 'lowerAllHandsMember'),
270
648
  };
271
649
 
@@ -278,10 +656,22 @@ describe('plugin-meetings', () => {
278
656
  assert.notCalled(spies.lowerAllHandsMember);
279
657
  };
280
658
 
281
- const checkValid = async (resultPromise, spies, expectedRequestingMemberId, expectedLocusUrl) => {
659
+ const checkValid = async (
660
+ resultPromise,
661
+ spies,
662
+ expectedRequestingMemberId,
663
+ expectedLocusUrl
664
+ ) => {
282
665
  await assert.isFulfilled(resultPromise);
283
- assert.calledOnceWithExactly(spies.generateLowerAllHandsMemberOptions, expectedRequestingMemberId, expectedLocusUrl);
284
- assert.calledOnceWithExactly(spies.lowerAllHandsMember, {requestingParticipantId: expectedRequestingMemberId, locusUrl: expectedLocusUrl});
666
+ assert.calledOnceWithExactly(
667
+ spies.generateLowerAllHandsMemberOptions,
668
+ expectedRequestingMemberId,
669
+ expectedLocusUrl
670
+ );
671
+ assert.calledOnceWithExactly(spies.lowerAllHandsMember, {
672
+ requestingParticipantId: expectedRequestingMemberId,
673
+ locusUrl: expectedLocusUrl,
674
+ });
285
675
  assert.strictEqual(resultPromise, spies.lowerAllHandsMember.getCall(0).returnValue);
286
676
  };
287
677
 
@@ -290,7 +680,11 @@ describe('plugin-meetings', () => {
290
680
 
291
681
  const resultPromise = members.lowerAllHands();
292
682
 
293
- await checkInvalid(resultPromise, 'The requestingMemberId must be defined to lower all hands in a meeting.', spies);
683
+ await checkInvalid(
684
+ resultPromise,
685
+ 'The requestingMemberId must be defined to lower all hands in a meeting.',
686
+ spies
687
+ );
294
688
  });
295
689
 
296
690
  it('should not make a request if there is no locus url', async () => {
@@ -298,7 +692,11 @@ describe('plugin-meetings', () => {
298
692
 
299
693
  const resultPromise = members.lowerAllHands(uuid.v4());
300
694
 
301
- await checkInvalid(resultPromise, 'The associated locus url for this meetings members object must be defined.', spies);
695
+ await checkInvalid(
696
+ resultPromise,
697
+ 'The associated locus url for this meetings members object must be defined.',
698
+ spies
699
+ );
302
700
  });
303
701
 
304
702
  it('should make the correct request when called with requestingMemberId', async () => {
@@ -311,19 +709,100 @@ describe('plugin-meetings', () => {
311
709
  });
312
710
  });
313
711
 
712
+ describe('#editDisplayName', () => {
713
+ const setup = (locusUrl) => {
714
+ const members = createMembers({url: locusUrl});
715
+
716
+ const spies = {
717
+ generateEditDisplayNameMemberOptions: sandbox.spy(
718
+ MembersUtil,
719
+ 'generateEditDisplayNameMemberOptions'
720
+ ),
721
+ editDisplayNameMember: sandbox.spy(members.membersRequest, 'editDisplayNameMember'),
722
+ };
723
+
724
+ return {members, spies};
725
+ };
726
+
727
+ const checkInvalid = async (resultPromise, expectedMessage, spies) => {
728
+ await assert.isRejected(resultPromise, ParameterError, expectedMessage);
729
+ assert.notCalled(spies.generateEditDisplayNameMemberOptions);
730
+ assert.notCalled(spies.editDisplayNameMember);
731
+ };
732
+
733
+ const checkValid = async (
734
+ resultPromise,
735
+ spies,
736
+ expectedMemberId,
737
+ expectedRequestingParticipantId,
738
+ expectedAlias,
739
+ expectedLocusUrl
740
+ ) => {
741
+ await assert.isFulfilled(resultPromise);
742
+ assert.calledOnceWithExactly(
743
+ spies.generateEditDisplayNameMemberOptions,
744
+ expectedMemberId,
745
+ expectedRequestingParticipantId,
746
+ expectedAlias,
747
+ expectedLocusUrl
748
+ );
749
+ assert.calledOnceWithExactly(spies.editDisplayNameMember, {
750
+ memberId: expectedMemberId,
751
+ requestingParticipantId: expectedRequestingParticipantId,
752
+ alias: expectedAlias,
753
+ locusUrl: expectedLocusUrl,
754
+ });
755
+ assert.strictEqual(resultPromise, spies.editDisplayNameMember.getCall(0).returnValue);
756
+ };
757
+
758
+ it('should not make a request if there is no memberId', async () => {
759
+ const {members, spies} = setup(url1);
760
+
761
+ const resultPromise = members.editDisplayName();
762
+
763
+ await checkInvalid(
764
+ resultPromise,
765
+ 'The member id must be defined to edit display name of the member.',
766
+ spies
767
+ );
768
+ });
769
+
770
+ it('should not make a request if there is no locus url', async () => {
771
+ const {members, spies} = setup();
772
+
773
+ const resultPromise = members.editDisplayName(uuid.v4());
774
+
775
+ await checkInvalid(
776
+ resultPromise,
777
+ 'The associated locus url for this meetings members object must be defined.',
778
+ spies
779
+ );
780
+ });
781
+
782
+ it('should make the correct request when called with respective parameters', async () => {
783
+ const requestingParticipantId = uuid.v4();
784
+ const memberId = uuid.v4();
785
+ const alias = 'aliasName';
786
+ const {members, spies} = setup(url1);
787
+
788
+ const resultPromise = members.editDisplayName(memberId, requestingParticipantId, alias);
789
+
790
+ await checkValid(resultPromise, spies, memberId, requestingParticipantId, alias, url1);
791
+ });
792
+ });
793
+
314
794
  describe('findMemberByCsi()', () => {
315
795
  let members;
316
796
 
317
797
  // fake collection that contains all combinations of members data structure (with respect to CSIs)
318
798
  const fakeCollection = {
319
799
  oneWithoutDevices: {
320
- participant: {
321
- }
800
+ participant: {},
322
801
  },
323
802
  oneWithEmptyDevices: {
324
803
  participant: {
325
804
  devices: [],
326
- }
805
+ },
327
806
  },
328
807
  oneWithDevicesWithoutCsis: {
329
808
  participant: {
@@ -338,7 +817,7 @@ describe('plugin-meetings', () => {
338
817
  url: 'dialout:///fakeagain',
339
818
  deviceType: 'PROVISIONAL',
340
819
  state: 'JOINED',
341
- }
820
+ },
342
821
  ],
343
822
  },
344
823
  id: 'abc-123-abc-123',
@@ -358,10 +837,10 @@ describe('plugin-meetings', () => {
358
837
  deviceType: 'SIP',
359
838
  state: 'JOINED',
360
839
  csis: [2000, 2001, 2002],
361
- }
362
- ]
363
- }
364
- }
840
+ },
841
+ ],
842
+ },
843
+ },
365
844
  };
366
845
 
367
846
  beforeEach(() => {
@@ -392,14 +871,13 @@ describe('plugin-meetings', () => {
392
871
  },
393
872
  oneWithoutDevices: {
394
873
  id: 'oneWithoutDevices',
395
- participant: {
396
- }
874
+ participant: {},
397
875
  },
398
876
  oneWithEmptyDevices: {
399
877
  id: 'oneWithEmptyDevices',
400
878
  participant: {
401
879
  devices: [],
402
- }
880
+ },
403
881
  },
404
882
  oneWithDevicesWithoutCsis: {
405
883
  id: 'oneWithDevicesWithoutCsis',
@@ -415,7 +893,7 @@ describe('plugin-meetings', () => {
415
893
  url: 'dialout:///fakeagain',
416
894
  deviceType: 'PROVISIONAL',
417
895
  state: 'JOINED',
418
- }
896
+ },
419
897
  ],
420
898
  },
421
899
  status: 'IN_MEETING',
@@ -431,7 +909,7 @@ describe('plugin-meetings', () => {
431
909
  mediaSessions: [
432
910
  {mediaType: 'audio', mediaContent: 'main', csi: 1000},
433
911
  {mediaType: 'video', mediaContent: 'main', csi: 1001},
434
- {mediaType: 'video', mediaContent: 'content', csi: 1002}
912
+ {mediaType: 'video', mediaContent: 'content', csi: 1002},
435
913
  ],
436
914
  },
437
915
  {
@@ -441,12 +919,12 @@ describe('plugin-meetings', () => {
441
919
  mediaSessions: [
442
920
  {mediaType: 'audio', mediaContent: 'main', csi: 2000},
443
921
  {mediaType: 'video', mediaContent: 'main', csi: 2001},
444
- {mediaType: 'video', mediaContent: 'content', csi: 2002}
922
+ {mediaType: 'video', mediaContent: 'content', csi: 2002},
445
923
  ],
446
- }
447
- ]
448
- }
449
- }
924
+ },
925
+ ],
926
+ },
927
+ },
450
928
  };
451
929
 
452
930
  beforeEach(() => {
@@ -470,7 +948,10 @@ describe('plugin-meetings', () => {
470
948
  });
471
949
 
472
950
  it('returns correct CSI values when there is a match', () => {
473
- assert.deepEqual(members.getCsisForMember('oneWithSomeCsis', 'video', 'main'), [1001, 2001]);
951
+ assert.deepEqual(
952
+ members.getCsisForMember('oneWithSomeCsis', 'video', 'main'),
953
+ [1001, 2001]
954
+ );
474
955
  });
475
956
  });
476
957
  });