@webex/plugin-meetings 3.0.0-beta.15 → 3.0.0-beta.151

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 (480) hide show
  1. package/README.md +45 -1
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +359 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +193 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +23 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +52 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +43 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1046 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +78 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +67 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/browser-detection.js +1 -21
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +5 -20
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +0 -7
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +0 -21
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +0 -21
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +0 -21
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +0 -21
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/parameter.js +0 -28
  37. package/dist/common/errors/parameter.js.map +1 -1
  38. package/dist/common/errors/password-error.js +0 -21
  39. package/dist/common/errors/password-error.js.map +1 -1
  40. package/dist/common/errors/permission.js +0 -21
  41. package/dist/common/errors/permission.js.map +1 -1
  42. package/dist/common/errors/reconnection-in-progress.js +0 -17
  43. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  44. package/dist/common/errors/reconnection.js +0 -21
  45. package/dist/common/errors/reconnection.js.map +1 -1
  46. package/dist/common/errors/stats.js +0 -21
  47. package/dist/common/errors/stats.js.map +1 -1
  48. package/dist/common/errors/webex-errors.js +9 -43
  49. package/dist/common/errors/webex-errors.js.map +1 -1
  50. package/dist/common/errors/webex-meetings-error.js +1 -24
  51. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  52. package/dist/common/events/events-scope.js +0 -22
  53. package/dist/common/events/events-scope.js.map +1 -1
  54. package/dist/common/events/events.js +0 -23
  55. package/dist/common/events/events.js.map +1 -1
  56. package/dist/common/events/trigger-proxy.js +0 -12
  57. package/dist/common/events/trigger-proxy.js.map +1 -1
  58. package/dist/common/events/util.js +0 -15
  59. package/dist/common/events/util.js.map +1 -1
  60. package/dist/common/logs/logger-config.js +0 -4
  61. package/dist/common/logs/logger-config.js.map +1 -1
  62. package/dist/common/logs/logger-proxy.js +1 -8
  63. package/dist/common/logs/logger-proxy.js.map +1 -1
  64. package/dist/common/logs/request.js +35 -61
  65. package/dist/common/logs/request.js.map +1 -1
  66. package/dist/common/queue.js +4 -14
  67. package/dist/common/queue.js.map +1 -1
  68. package/dist/config.js +7 -13
  69. package/dist/config.js.map +1 -1
  70. package/dist/constants.js +208 -64
  71. package/dist/constants.js.map +1 -1
  72. package/dist/controls-options-manager/constants.js +14 -0
  73. package/dist/controls-options-manager/constants.js.map +1 -0
  74. package/dist/controls-options-manager/enums.js +27 -0
  75. package/dist/controls-options-manager/enums.js.map +1 -0
  76. package/dist/controls-options-manager/index.js +297 -0
  77. package/dist/controls-options-manager/index.js.map +1 -0
  78. package/dist/controls-options-manager/types.js +7 -0
  79. package/dist/controls-options-manager/types.js.map +1 -0
  80. package/dist/controls-options-manager/util.js +300 -0
  81. package/dist/controls-options-manager/util.js.map +1 -0
  82. package/dist/index.js +78 -17
  83. package/dist/index.js.map +1 -1
  84. package/dist/locus-info/controlsUtils.js +100 -29
  85. package/dist/locus-info/controlsUtils.js.map +1 -1
  86. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  87. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  88. package/dist/locus-info/fullState.js +0 -15
  89. package/dist/locus-info/fullState.js.map +1 -1
  90. package/dist/locus-info/hostUtils.js +4 -12
  91. package/dist/locus-info/hostUtils.js.map +1 -1
  92. package/dist/locus-info/index.js +387 -208
  93. package/dist/locus-info/index.js.map +1 -1
  94. package/dist/locus-info/infoUtils.js +0 -38
  95. package/dist/locus-info/infoUtils.js.map +1 -1
  96. package/dist/locus-info/mediaSharesUtils.js +54 -38
  97. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  98. package/dist/locus-info/parser.js +90 -126
  99. package/dist/locus-info/parser.js.map +1 -1
  100. package/dist/locus-info/selfUtils.js +93 -92
  101. package/dist/locus-info/selfUtils.js.map +1 -1
  102. package/dist/media/index.js +70 -219
  103. package/dist/media/index.js.map +1 -1
  104. package/dist/media/properties.js +74 -198
  105. package/dist/media/properties.js.map +1 -1
  106. package/dist/media/util.js +1 -8
  107. package/dist/media/util.js.map +1 -1
  108. package/dist/mediaQualityMetrics/config.js +505 -495
  109. package/dist/mediaQualityMetrics/config.js.map +1 -1
  110. package/dist/meeting/in-meeting-actions.js +79 -14
  111. package/dist/meeting/in-meeting-actions.js.map +1 -1
  112. package/dist/meeting/index.js +2685 -3324
  113. package/dist/meeting/index.js.map +1 -1
  114. package/dist/meeting/locusMediaRequest.js +291 -0
  115. package/dist/meeting/locusMediaRequest.js.map +1 -0
  116. package/dist/meeting/muteState.js +243 -185
  117. package/dist/meeting/muteState.js.map +1 -1
  118. package/dist/meeting/request.js +296 -342
  119. package/dist/meeting/request.js.map +1 -1
  120. package/dist/meeting/request.type.js +0 -1
  121. package/dist/meeting/request.type.js.map +1 -1
  122. package/dist/meeting/state.js +16 -26
  123. package/dist/meeting/state.js.map +1 -1
  124. package/dist/meeting/util.js +446 -585
  125. package/dist/meeting/util.js.map +1 -1
  126. package/dist/meeting-info/collection.js +3 -25
  127. package/dist/meeting-info/collection.js.map +1 -1
  128. package/dist/meeting-info/index.js +8 -31
  129. package/dist/meeting-info/index.js.map +1 -1
  130. package/dist/meeting-info/meeting-info-v2.js +261 -242
  131. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  132. package/dist/meeting-info/request.js +1 -16
  133. package/dist/meeting-info/request.js.map +1 -1
  134. package/dist/meeting-info/util.js +98 -183
  135. package/dist/meeting-info/util.js.map +1 -1
  136. package/dist/meeting-info/utilv2.js +156 -232
  137. package/dist/meeting-info/utilv2.js.map +1 -1
  138. package/dist/meetings/collection.js +24 -20
  139. package/dist/meetings/collection.js.map +1 -1
  140. package/dist/meetings/index.js +526 -372
  141. package/dist/meetings/index.js.map +1 -1
  142. package/dist/meetings/meetings.types.js +7 -0
  143. package/dist/meetings/meetings.types.js.map +1 -0
  144. package/dist/meetings/request.js +21 -40
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +172 -141
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.js +58 -57
  149. package/dist/member/index.js.map +1 -1
  150. package/dist/member/types.js +15 -0
  151. package/dist/member/types.js.map +1 -0
  152. package/dist/member/util.js +101 -69
  153. package/dist/member/util.js.map +1 -1
  154. package/dist/members/collection.js +12 -12
  155. package/dist/members/collection.js.map +1 -1
  156. package/dist/members/index.js +123 -162
  157. package/dist/members/index.js.map +1 -1
  158. package/dist/members/request.js +120 -85
  159. package/dist/members/request.js.map +1 -1
  160. package/dist/members/types.js +15 -0
  161. package/dist/members/types.js.map +1 -0
  162. package/dist/members/util.js +314 -260
  163. package/dist/members/util.js.map +1 -1
  164. package/dist/metrics/config.js +50 -16
  165. package/dist/metrics/config.js.map +1 -1
  166. package/dist/metrics/constants.js +4 -7
  167. package/dist/metrics/constants.js.map +1 -1
  168. package/dist/metrics/index.js +75 -147
  169. package/dist/metrics/index.js.map +1 -1
  170. package/dist/multistream/mediaRequestManager.js +170 -50
  171. package/dist/multistream/mediaRequestManager.js.map +1 -1
  172. package/dist/multistream/receiveSlot.js +58 -65
  173. package/dist/multistream/receiveSlot.js.map +1 -1
  174. package/dist/multistream/receiveSlotManager.js +73 -94
  175. package/dist/multistream/receiveSlotManager.js.map +1 -1
  176. package/dist/multistream/remoteMedia.js +55 -74
  177. package/dist/multistream/remoteMedia.js.map +1 -1
  178. package/dist/multistream/remoteMediaGroup.js +66 -43
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +502 -442
  181. package/dist/multistream/remoteMediaManager.js.map +1 -1
  182. package/dist/networkQualityMonitor/index.js +24 -51
  183. package/dist/networkQualityMonitor/index.js.map +1 -1
  184. package/dist/personal-meeting-room/index.js +3 -38
  185. package/dist/personal-meeting-room/index.js.map +1 -1
  186. package/dist/personal-meeting-room/request.js +2 -33
  187. package/dist/personal-meeting-room/request.js.map +1 -1
  188. package/dist/personal-meeting-room/util.js +0 -13
  189. package/dist/personal-meeting-room/util.js.map +1 -1
  190. package/dist/reachability/index.js +190 -199
  191. package/dist/reachability/index.js.map +1 -1
  192. package/dist/reachability/request.js +14 -23
  193. package/dist/reachability/request.js.map +1 -1
  194. package/dist/reactions/constants.js +13 -0
  195. package/dist/reactions/constants.js.map +1 -0
  196. package/dist/reactions/reactions.js +2 -4
  197. package/dist/reactions/reactions.js.map +1 -1
  198. package/dist/reactions/reactions.type.js +18 -24
  199. package/dist/reactions/reactions.type.js.map +1 -1
  200. package/dist/reconnection-manager/index.js +356 -476
  201. package/dist/reconnection-manager/index.js.map +1 -1
  202. package/dist/recording-controller/enums.js +17 -0
  203. package/dist/recording-controller/enums.js.map +1 -0
  204. package/dist/recording-controller/index.js +343 -0
  205. package/dist/recording-controller/index.js.map +1 -0
  206. package/dist/recording-controller/util.js +63 -0
  207. package/dist/recording-controller/util.js.map +1 -0
  208. package/dist/roap/index.js +32 -75
  209. package/dist/roap/index.js.map +1 -1
  210. package/dist/roap/request.js +129 -136
  211. package/dist/roap/request.js.map +1 -1
  212. package/dist/roap/turnDiscovery.js +143 -103
  213. package/dist/roap/turnDiscovery.js.map +1 -1
  214. package/dist/statsAnalyzer/global.js +1 -95
  215. package/dist/statsAnalyzer/global.js.map +1 -1
  216. package/dist/statsAnalyzer/index.js +369 -462
  217. package/dist/statsAnalyzer/index.js.map +1 -1
  218. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  219. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  220. package/dist/transcription/index.js +9 -44
  221. package/dist/transcription/index.js.map +1 -1
  222. package/dist/types/annotation/annotation.types.d.ts +43 -0
  223. package/dist/types/annotation/constants.d.ts +31 -0
  224. package/dist/types/annotation/index.d.ts +124 -0
  225. package/dist/types/breakouts/breakout.d.ts +8 -0
  226. package/dist/types/breakouts/collection.d.ts +5 -0
  227. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  228. package/dist/types/breakouts/events.d.ts +2 -0
  229. package/dist/types/breakouts/index.d.ts +5 -0
  230. package/dist/types/breakouts/request.d.ts +22 -0
  231. package/dist/types/breakouts/utils.d.ts +15 -0
  232. package/dist/types/common/browser-detection.d.ts +9 -0
  233. package/dist/types/common/collection.d.ts +48 -0
  234. package/dist/types/common/config.d.ts +2 -0
  235. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  236. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  237. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  238. package/dist/types/common/errors/media.d.ts +15 -0
  239. package/dist/types/common/errors/parameter.d.ts +15 -0
  240. package/dist/types/common/errors/password-error.d.ts +15 -0
  241. package/dist/types/common/errors/permission.d.ts +14 -0
  242. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  243. package/dist/types/common/errors/reconnection.d.ts +15 -0
  244. package/dist/types/common/errors/stats.d.ts +15 -0
  245. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  246. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  247. package/dist/types/common/events/events-scope.d.ts +17 -0
  248. package/dist/types/common/events/events.d.ts +12 -0
  249. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  250. package/dist/types/common/events/util.d.ts +2 -0
  251. package/dist/types/common/logs/logger-config.d.ts +2 -0
  252. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  253. package/dist/types/common/logs/request.d.ts +34 -0
  254. package/dist/types/common/queue.d.ts +32 -0
  255. package/dist/types/config.d.ts +72 -0
  256. package/dist/types/constants.d.ts +978 -0
  257. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  258. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  259. package/dist/types/controls-options-manager/index.d.ts +136 -0
  260. package/dist/types/controls-options-manager/types.d.ts +43 -0
  261. package/dist/types/controls-options-manager/util.d.ts +1 -0
  262. package/dist/types/index.d.ts +7 -0
  263. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  264. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  265. package/dist/types/locus-info/fullState.d.ts +2 -0
  266. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  267. package/dist/types/locus-info/index.d.ts +315 -0
  268. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  269. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  270. package/dist/types/locus-info/parser.d.ts +212 -0
  271. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  272. package/dist/types/media/index.d.ts +34 -0
  273. package/dist/types/media/properties.d.ts +86 -0
  274. package/dist/types/media/util.d.ts +2 -0
  275. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  276. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  277. package/dist/types/meeting/index.d.ts +1509 -0
  278. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  279. package/dist/types/meeting/muteState.d.ts +184 -0
  280. package/dist/types/meeting/request.d.ts +270 -0
  281. package/dist/types/meeting/request.type.d.ts +11 -0
  282. package/dist/types/meeting/state.d.ts +9 -0
  283. package/dist/types/meeting/util.d.ts +75 -0
  284. package/dist/types/meeting-info/collection.d.ts +20 -0
  285. package/dist/types/meeting-info/index.d.ts +57 -0
  286. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  287. package/dist/types/meeting-info/request.d.ts +22 -0
  288. package/dist/types/meeting-info/util.d.ts +2 -0
  289. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  290. package/dist/types/meetings/collection.d.ts +31 -0
  291. package/dist/types/meetings/index.d.ts +364 -0
  292. package/dist/types/meetings/meetings.types.d.ts +4 -0
  293. package/dist/types/meetings/request.d.ts +27 -0
  294. package/dist/types/meetings/util.d.ts +18 -0
  295. package/dist/types/member/index.d.ts +157 -0
  296. package/dist/types/member/types.d.ts +21 -0
  297. package/dist/types/member/util.d.ts +2 -0
  298. package/dist/types/members/collection.d.ts +29 -0
  299. package/dist/types/members/index.d.ts +353 -0
  300. package/dist/types/members/request.d.ts +114 -0
  301. package/dist/types/members/types.d.ts +24 -0
  302. package/dist/types/members/util.d.ts +210 -0
  303. package/dist/types/metrics/config.d.ts +195 -0
  304. package/dist/types/metrics/constants.d.ts +55 -0
  305. package/dist/types/metrics/index.d.ts +169 -0
  306. package/dist/types/multistream/mediaRequestManager.d.ts +104 -0
  307. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  308. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  309. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  310. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  311. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  312. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  313. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  314. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  315. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  316. package/dist/types/reachability/index.d.ts +152 -0
  317. package/dist/types/reachability/request.d.ts +37 -0
  318. package/dist/types/reactions/constants.d.ts +3 -0
  319. package/dist/types/reactions/reactions.d.ts +4 -0
  320. package/dist/types/reactions/reactions.type.d.ts +52 -0
  321. package/dist/types/reconnection-manager/index.d.ts +126 -0
  322. package/dist/types/recording-controller/enums.d.ts +7 -0
  323. package/dist/types/recording-controller/index.d.ts +193 -0
  324. package/dist/types/recording-controller/util.d.ts +13 -0
  325. package/dist/types/roap/index.d.ts +77 -0
  326. package/dist/types/roap/request.d.ts +36 -0
  327. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  328. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  329. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  330. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  331. package/dist/types/transcription/index.d.ts +64 -0
  332. package/package.json +28 -21
  333. package/src/annotation/annotation.types.ts +52 -0
  334. package/src/annotation/constants.ts +36 -0
  335. package/src/annotation/index.ts +343 -0
  336. package/src/breakouts/README.md +220 -0
  337. package/src/breakouts/breakout.ts +163 -0
  338. package/src/breakouts/collection.ts +19 -0
  339. package/src/breakouts/edit-lock-error.ts +25 -0
  340. package/src/breakouts/events.ts +37 -0
  341. package/src/breakouts/index.ts +921 -0
  342. package/src/breakouts/request.ts +55 -0
  343. package/src/breakouts/utils.ts +57 -0
  344. package/src/common/errors/webex-errors.ts +6 -2
  345. package/src/common/logs/logger-proxy.ts +1 -1
  346. package/src/config.ts +5 -7
  347. package/src/constants.ts +155 -20
  348. package/src/controls-options-manager/constants.ts +5 -0
  349. package/src/controls-options-manager/enums.ts +18 -0
  350. package/src/controls-options-manager/index.ts +278 -0
  351. package/src/controls-options-manager/types.ts +59 -0
  352. package/src/controls-options-manager/util.ts +286 -0
  353. package/src/index.ts +34 -0
  354. package/src/locus-info/controlsUtils.ts +108 -0
  355. package/src/locus-info/index.ts +310 -21
  356. package/src/locus-info/mediaSharesUtils.ts +48 -0
  357. package/src/locus-info/parser.ts +2 -1
  358. package/src/locus-info/selfUtils.ts +71 -1
  359. package/src/media/index.ts +70 -142
  360. package/src/media/properties.ts +41 -104
  361. package/src/mediaQualityMetrics/config.ts +379 -377
  362. package/src/meeting/in-meeting-actions.ts +156 -0
  363. package/src/meeting/index.ts +1730 -1768
  364. package/src/meeting/locusMediaRequest.ts +309 -0
  365. package/src/meeting/muteState.ts +228 -132
  366. package/src/meeting/request.ts +100 -91
  367. package/src/meeting/request.type.ts +2 -0
  368. package/src/meeting/util.ts +421 -421
  369. package/src/meeting-info/meeting-info-v2.ts +134 -13
  370. package/src/meeting-info/utilv2.ts +13 -3
  371. package/src/meetings/collection.ts +20 -0
  372. package/src/meetings/index.ts +375 -83
  373. package/src/meetings/meetings.types.ts +9 -0
  374. package/src/meetings/request.ts +3 -1
  375. package/src/meetings/util.ts +103 -4
  376. package/src/member/index.ts +40 -0
  377. package/src/member/types.ts +24 -0
  378. package/src/member/util.ts +81 -1
  379. package/src/members/collection.ts +8 -0
  380. package/src/members/index.ts +108 -6
  381. package/src/members/request.ts +98 -17
  382. package/src/members/types.ts +28 -0
  383. package/src/members/util.ts +319 -240
  384. package/src/metrics/config.ts +49 -10
  385. package/src/metrics/constants.ts +2 -4
  386. package/src/metrics/index.ts +43 -27
  387. package/src/multistream/mediaRequestManager.ts +210 -45
  388. package/src/multistream/receiveSlot.ts +68 -26
  389. package/src/multistream/receiveSlotManager.ts +61 -38
  390. package/src/multistream/remoteMedia.ts +29 -3
  391. package/src/multistream/remoteMediaGroup.ts +61 -2
  392. package/src/multistream/remoteMediaManager.ts +260 -66
  393. package/src/networkQualityMonitor/index.ts +6 -6
  394. package/src/reachability/index.ts +75 -25
  395. package/src/reachability/request.ts +10 -5
  396. package/src/reactions/constants.ts +4 -0
  397. package/src/reactions/reactions.ts +4 -4
  398. package/src/reactions/reactions.type.ts +28 -3
  399. package/src/reconnection-manager/index.ts +53 -32
  400. package/src/recording-controller/enums.ts +8 -0
  401. package/src/recording-controller/index.ts +315 -0
  402. package/src/recording-controller/util.ts +58 -0
  403. package/src/roap/index.ts +21 -30
  404. package/src/roap/request.ts +51 -52
  405. package/src/roap/turnDiscovery.ts +51 -27
  406. package/src/statsAnalyzer/global.ts +1 -94
  407. package/src/statsAnalyzer/index.ts +380 -390
  408. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  409. package/test/integration/spec/converged-space-meetings.js +233 -0
  410. package/test/integration/spec/journey.js +332 -255
  411. package/test/integration/spec/space-meeting.js +78 -5
  412. package/test/integration/spec/transcription.js +1 -1
  413. package/test/unit/spec/annotation/index.ts +436 -0
  414. package/test/unit/spec/breakouts/breakout.ts +203 -0
  415. package/test/unit/spec/breakouts/collection.ts +15 -0
  416. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  417. package/test/unit/spec/breakouts/events.ts +77 -0
  418. package/test/unit/spec/breakouts/index.ts +1790 -0
  419. package/test/unit/spec/breakouts/request.ts +104 -0
  420. package/test/unit/spec/breakouts/utils.js +72 -0
  421. package/test/unit/spec/controls-options-manager/index.js +287 -0
  422. package/test/unit/spec/controls-options-manager/util.js +518 -0
  423. package/test/unit/spec/fixture/locus.js +1 -0
  424. package/test/unit/spec/locus-info/controlsUtils.js +303 -30
  425. package/test/unit/spec/locus-info/index.js +615 -4
  426. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  427. package/test/unit/spec/locus-info/selfConstant.js +38 -0
  428. package/test/unit/spec/locus-info/selfUtils.js +200 -0
  429. package/test/unit/spec/media/index.ts +118 -22
  430. package/test/unit/spec/media/properties.ts +9 -9
  431. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -0
  432. package/test/unit/spec/meeting/index.js +2394 -1381
  433. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  434. package/test/unit/spec/meeting/muteState.js +370 -208
  435. package/test/unit/spec/meeting/request.js +354 -42
  436. package/test/unit/spec/meeting/utils.js +268 -156
  437. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  438. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  439. package/test/unit/spec/meetings/collection.js +14 -0
  440. package/test/unit/spec/meetings/index.js +842 -128
  441. package/test/unit/spec/meetings/utils.js +206 -2
  442. package/test/unit/spec/member/index.js +24 -0
  443. package/test/unit/spec/member/util.js +384 -32
  444. package/test/unit/spec/members/index.js +320 -1
  445. package/test/unit/spec/members/request.js +206 -27
  446. package/test/unit/spec/members/utils.js +184 -0
  447. package/test/unit/spec/metrics/index.js +98 -0
  448. package/test/unit/spec/multistream/mediaRequestManager.ts +676 -105
  449. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  450. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  451. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  452. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  453. package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
  454. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  455. package/test/unit/spec/reachability/index.ts +176 -25
  456. package/test/unit/spec/reachability/request.js +66 -0
  457. package/test/unit/spec/reconnection-manager/index.js +46 -13
  458. package/test/unit/spec/recording-controller/index.js +231 -0
  459. package/test/unit/spec/recording-controller/util.js +102 -0
  460. package/test/unit/spec/roap/index.ts +21 -51
  461. package/test/unit/spec/roap/request.ts +187 -0
  462. package/test/unit/spec/roap/turnDiscovery.ts +73 -34
  463. package/test/unit/spec/stats-analyzer/index.js +94 -43
  464. package/test/utils/constants.js +9 -0
  465. package/test/utils/integrationTestUtils.js +46 -0
  466. package/test/utils/testUtils.js +0 -45
  467. package/test/utils/webex-config.js +4 -0
  468. package/test/utils/webex-test-users.js +7 -3
  469. package/tsconfig.json +6 -0
  470. package/dist/media/internal-media-core-wrapper.js +0 -22
  471. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  472. package/dist/meeting/effectsState.js +0 -334
  473. package/dist/meeting/effectsState.js.map +0 -1
  474. package/dist/multistream/multistreamMedia.js +0 -117
  475. package/dist/multistream/multistreamMedia.js.map +0 -1
  476. package/src/index.js +0 -15
  477. package/src/media/internal-media-core-wrapper.ts +0 -9
  478. package/src/meeting/effectsState.ts +0 -211
  479. package/src/multistream/multistreamMedia.ts +0 -93
  480. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -14,6 +14,9 @@ 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';
17
20
 
18
21
  const {assert} = chai;
19
22
 
@@ -79,6 +82,8 @@ describe('plugin-meetings', () => {
79
82
  describe('members', () => {
80
83
  const sandbox = sinon.createSandbox();
81
84
  let createMembers;
85
+ let meeting;
86
+ let membersRequestSpy;
82
87
 
83
88
  beforeEach(() => {
84
89
  webex = new MockWebex({
@@ -104,13 +109,31 @@ describe('plugin-meetings', () => {
104
109
 
105
110
  url1 = `https://example.com/${uuid.v4()}`;
106
111
 
107
- createMembers = (options) => new Members({locusUrl: options.url}, {parent: webex});
112
+ membersRequestSpy = sinon.spy(MembersRequestImport, 'default');
113
+
114
+ meeting = {
115
+ request: sinon.mock().returns(Promise.resolve()),
116
+ locusInfo: {
117
+ sequence: {}
118
+ }
119
+ }
120
+
121
+ createMembers = (options) => new Members({locusUrl: options.url, meeting}, {parent: webex});
108
122
  });
109
123
 
110
124
  afterEach(() => {
125
+ membersRequestSpy.restore();
111
126
  sandbox.restore();
112
127
  });
113
128
 
129
+ describe('constructor', () => {
130
+ it('passes the meeting to the MembersRequest', () => {
131
+ createMembers({});
132
+
133
+ assert.calledOnceWithExactly(membersRequestSpy, {meeting}, {parent: webex});
134
+ });
135
+ });
136
+
114
137
  describe('#addMembers', () => {
115
138
  it('should invoke isInvalidInvitee and generateAddMemberOptions from MembersUtil when addMember is called with valid params', async () => {
116
139
  sandbox.spy(MembersUtil, 'isInvalidInvitee');
@@ -130,6 +153,129 @@ describe('plugin-meetings', () => {
130
153
  });
131
154
  });
132
155
 
156
+ describe('#admitMembers', () => {
157
+ let members;
158
+ beforeEach(() => {
159
+ members = createMembers({url: url1});
160
+ members.membersRequest.admitMember = sinon.stub().returns(Promise.resolve(true));
161
+ });
162
+ it('should return error if param memberIds is not provided', async () => {
163
+ let error;
164
+ await members.admitMembers().catch((e) => {
165
+ error = e;
166
+ });
167
+ assert.deepEqual(error, new ParameterError('No member ids provided to admit.'));
168
+ });
169
+
170
+ it('should call membersRequest.admitMember as expected', async () => {
171
+ await members.admitMembers(['uuid']);
172
+ const arg1 = members.membersRequest.admitMember.getCall(0).args[0];
173
+ assert.equal(arg1.sessionLocusUrls, undefined);
174
+ assert.equal(arg1.locusUrl.includes('https://example.com/'), true);
175
+ assert.deepEqual(arg1.memberIds, ['uuid']);
176
+
177
+ const sessionLocusUrls = {
178
+ authorizingLocusUrl: 'authorizingLocusUrl',
179
+ mainLocusUrl: 'mainLocusUrl',
180
+ };
181
+ await members.admitMembers(['uuid'], sessionLocusUrls);
182
+ const arg2 = members.membersRequest.admitMember.getCall(1).args[0];
183
+ assert.equal(arg2.sessionLocusUrls, sessionLocusUrls);
184
+ assert.equal(arg1.locusUrl.includes('https://example.com/'), true);
185
+ assert.deepEqual(arg1.memberIds, ['uuid']);
186
+ });
187
+ });
188
+
189
+ describe('#muteMember', () => {
190
+ const testMuteMember = async (mute, isAudio) => {
191
+ sandbox.spy(MembersUtil, 'generateMuteMemberOptions');
192
+
193
+ const locusUrl = 'locus-url';
194
+ const members = createMembers({url: locusUrl});
195
+ const {membersRequest} = members;
196
+ sandbox.spy(membersRequest, 'muteMember');
197
+
198
+ const memberId = 'bob';
199
+
200
+ await members.muteMember(memberId, mute, isAudio);
201
+ assert.calledOnce(MembersUtil.generateMuteMemberOptions);
202
+ assert.calledWith(
203
+ MembersUtil.generateMuteMemberOptions,
204
+ memberId,
205
+ mute,
206
+ members.locusUrl,
207
+ isAudio
208
+ );
209
+
210
+ assert.calledOnce(membersRequest.muteMember);
211
+ assert.calledWith(membersRequest.muteMember, {memberId, muted: mute, locusUrl, isAudio});
212
+ };
213
+
214
+ it('invokes expected functions when muteMember is called for mute=true, isAudio=true', async () => {
215
+ testMuteMember(true, true);
216
+ });
217
+
218
+ it('invokes expected functions when muteMember is called for mute=true, isAudio=false', async () => {
219
+ testMuteMember(true, false);
220
+ });
221
+
222
+ it('invokes expected functions when muteMember is called for mute=false, isAudio=true', async () => {
223
+ testMuteMember(false, true);
224
+ });
225
+
226
+ it('invokes expected functions when muteMember is called for mute=false, isAudio=false', async () => {
227
+ testMuteMember(false, false);
228
+ });
229
+ });
230
+
231
+ describe('#clearMembers', () => {
232
+ it('should send clear event if clear members', () => {
233
+ const members = createMembers({url: url1});
234
+ members.membersCollection.setAll(fakeMembersCollection);
235
+ Trigger.trigger = sinon.stub();
236
+ members.clearMembers();
237
+ assert.deepEqual(members.membersCollection.members, {});
238
+ assert.calledWith(
239
+ Trigger.trigger,
240
+ members,
241
+ {
242
+ file: 'members',
243
+ function: 'clearMembers',
244
+ },
245
+ EVENT_TRIGGERS.MEMBERS_CLEAR,
246
+ {}
247
+ );
248
+ });
249
+ });
250
+ describe('#locusParticipantsUpdate', () => {
251
+ it('should send member update event with session info', () => {
252
+ const members = createMembers({url: url1});
253
+ Trigger.trigger = sinon.stub();
254
+ const fakePayload = {
255
+ participants: {
256
+ forEach: sinon.stub(),
257
+ },
258
+ isReplace: true,
259
+ };
260
+
261
+ members.locusParticipantsUpdate(fakePayload);
262
+
263
+ assert.calledWith(
264
+ Trigger.trigger,
265
+ members,
266
+ {
267
+ file: 'members',
268
+ function: 'locusParticipantsUpdate',
269
+ },
270
+ EVENT_TRIGGERS.MEMBERS_UPDATE,
271
+ {
272
+ delta: {added: [], updated: []},
273
+ full: {},
274
+ isReplace: true,
275
+ }
276
+ );
277
+ });
278
+ });
133
279
  describe('#sendDialPadKey', () => {
134
280
  it('should throw a rejection when calling sendDialPadKey with no tones', async () => {
135
281
  const members = createMembers({url: url1});
@@ -191,6 +337,97 @@ describe('plugin-meetings', () => {
191
337
  });
192
338
  });
193
339
 
340
+ describe('#assignRoles', () => {
341
+ const setup = (locusUrl) => {
342
+ const members = createMembers({url: locusUrl});
343
+
344
+ const spies = {
345
+ generateRoleAssignmentMemberOptions: sandbox.spy(
346
+ MembersUtil,
347
+ 'generateRoleAssignmentMemberOptions'
348
+ ),
349
+ assignRolesMember: sandbox.spy(members.membersRequest, 'assignRolesMember'),
350
+ };
351
+
352
+ return {members, spies};
353
+ };
354
+
355
+ const checkInvalid = async (resultPromise, expectedMessage, spies) => {
356
+ await assert.isRejected(resultPromise, ParameterError, expectedMessage);
357
+ assert.notCalled(spies.generateRoleAssignmentMemberOptions);
358
+ assert.notCalled(spies.assignRolesMember);
359
+ };
360
+
361
+ const checkValid = async (
362
+ resultPromise,
363
+ spies,
364
+ expectedMemberId,
365
+ expectedRoles,
366
+ expectedLocusUrl
367
+ ) => {
368
+ await assert.isFulfilled(resultPromise);
369
+ assert.calledOnceWithExactly(
370
+ spies.generateRoleAssignmentMemberOptions,
371
+ expectedMemberId,
372
+ expectedRoles,
373
+ expectedLocusUrl
374
+ );
375
+ assert.calledOnceWithExactly(spies.assignRolesMember, {
376
+ memberId: expectedMemberId,
377
+ roles: expectedRoles,
378
+ locusUrl: expectedLocusUrl,
379
+ });
380
+ assert.strictEqual(resultPromise, spies.assignRolesMember.getCall(0).returnValue);
381
+ };
382
+
383
+ it('should not make a request if there is no member id', async () => {
384
+ const {members, spies} = setup(url1);
385
+
386
+ const resultPromise = members.assignRoles();
387
+
388
+ await checkInvalid(
389
+ resultPromise,
390
+ 'The member id must be defined to assign the roles to a member.',
391
+ spies
392
+ );
393
+ });
394
+
395
+ it('should not make a request if there is no locus url', async () => {
396
+ const {members, spies} = setup();
397
+
398
+ const resultPromise = members.assignRoles(uuid.v4());
399
+
400
+ await checkInvalid(
401
+ resultPromise,
402
+ 'The associated locus url for this meetings members object must be defined.',
403
+ spies
404
+ );
405
+ });
406
+
407
+ it('should make the correct request when called with roles', async () => {
408
+ const memberId = uuid.v4();
409
+ const {members, spies} = setup(url1);
410
+
411
+ const resultPromise = members.assignRoles(memberId, [
412
+ {type: 'PRESENTER', hasRole: true},
413
+ {type: 'MODERATOR', hasRole: false},
414
+ {type: 'COHOST', hasRole: true},
415
+ ]);
416
+
417
+ await checkValid(
418
+ resultPromise,
419
+ spies,
420
+ memberId,
421
+ [
422
+ {type: 'PRESENTER', hasRole: true},
423
+ {type: 'MODERATOR', hasRole: false},
424
+ {type: 'COHOST', hasRole: true},
425
+ ],
426
+ url1
427
+ );
428
+ });
429
+ });
430
+
194
431
  describe('#raiseOrLowerHand', () => {
195
432
  const setup = (locusUrl) => {
196
433
  const members = createMembers({url: locusUrl});
@@ -360,6 +597,88 @@ describe('plugin-meetings', () => {
360
597
  });
361
598
  });
362
599
 
600
+ describe('#editDisplayName', () => {
601
+ const setup = (locusUrl) => {
602
+ const members = createMembers({url: locusUrl});
603
+
604
+ const spies = {
605
+ generateEditDisplayNameMemberOptions: sandbox.spy(
606
+ MembersUtil,
607
+ 'generateEditDisplayNameMemberOptions'
608
+ ),
609
+ editDisplayNameMember: sandbox.spy(members.membersRequest, 'editDisplayNameMember'),
610
+ };
611
+
612
+ return {members, spies};
613
+ };
614
+
615
+ const checkInvalid = async (resultPromise, expectedMessage, spies) => {
616
+ await assert.isRejected(resultPromise, ParameterError, expectedMessage);
617
+ assert.notCalled(spies.generateEditDisplayNameMemberOptions);
618
+ assert.notCalled(spies.editDisplayNameMember);
619
+ };
620
+
621
+ const checkValid = async (
622
+ resultPromise,
623
+ spies,
624
+ expectedMemberId,
625
+ expectedRequestingParticipantId,
626
+ expectedAlias,
627
+ expectedLocusUrl
628
+ ) => {
629
+ await assert.isFulfilled(resultPromise);
630
+ assert.calledOnceWithExactly(
631
+ spies.generateEditDisplayNameMemberOptions,
632
+ expectedMemberId,
633
+ expectedRequestingParticipantId,
634
+ expectedAlias,
635
+ expectedLocusUrl
636
+ );
637
+ assert.calledOnceWithExactly(spies.editDisplayNameMember, {
638
+ memberId: expectedMemberId,
639
+ requestingParticipantId: expectedRequestingParticipantId,
640
+ alias: expectedAlias,
641
+ locusUrl: expectedLocusUrl,
642
+ });
643
+ assert.strictEqual(resultPromise, spies.editDisplayNameMember.getCall(0).returnValue);
644
+ };
645
+
646
+ it('should not make a request if there is no memberId', async () => {
647
+ const {members, spies} = setup(url1);
648
+
649
+ const resultPromise = members.editDisplayName();
650
+
651
+ await checkInvalid(
652
+ resultPromise,
653
+ 'The member id must be defined to edit display name of the member.',
654
+ spies
655
+ );
656
+ });
657
+
658
+ it('should not make a request if there is no locus url', async () => {
659
+ const {members, spies} = setup();
660
+
661
+ const resultPromise = members.editDisplayName(uuid.v4());
662
+
663
+ await checkInvalid(
664
+ resultPromise,
665
+ 'The associated locus url for this meetings members object must be defined.',
666
+ spies
667
+ );
668
+ });
669
+
670
+ it('should make the correct request when called with respective parameters', async () => {
671
+ const requestingParticipantId = uuid.v4();
672
+ const memberId = uuid.v4();
673
+ const alias = 'aliasName';
674
+ const {members, spies} = setup(url1);
675
+
676
+ const resultPromise = members.editDisplayName(memberId, requestingParticipantId, alias);
677
+
678
+ await checkValid(resultPromise, spies, memberId, requestingParticipantId, alias, url1);
679
+ });
680
+ });
681
+
363
682
  describe('findMemberByCsi()', () => {
364
683
  let members;
365
684
 
@@ -8,6 +8,7 @@ import Meetings from '@webex/plugin-meetings';
8
8
  import MembersRequest from '@webex/plugin-meetings/src/members/request';
9
9
  import membersUtil from '@webex/plugin-meetings/src/members/util';
10
10
  import ParameterError from '@webex/plugin-meetings/src/common/errors/parameter';
11
+ import { merge } from 'lodash';
11
12
 
12
13
  const {assert} = chai;
13
14
 
@@ -18,6 +19,10 @@ describe('plugin-meetings', () => {
18
19
  let membersRequest;
19
20
  let url1;
20
21
  let sandbox;
22
+ const sequence = {some: 'sequenceData'};
23
+ const requestResponse = {some: 'data'};
24
+ let locusDeltaRequestSpy;
25
+ const correlationId = '12345';
21
26
 
22
27
  beforeEach(() => {
23
28
  const webex = new MockWebex({
@@ -28,21 +33,43 @@ describe('plugin-meetings', () => {
28
33
 
29
34
  sandbox = sinon.createSandbox();
30
35
 
36
+ sinon.stub(uuid, 'v4').returns(correlationId);
37
+
31
38
  url1 = `https://example.com/${uuid.v4()}`;
32
39
 
40
+ const request = sinon.mock().returns(Promise.resolve(requestResponse));
41
+
33
42
  membersRequest = new MembersRequest(
34
- {},
43
+ {
44
+ meeting: {
45
+ request,
46
+ locusInfo: {
47
+ sequence,
48
+ },
49
+ },
50
+ },
35
51
  {
36
52
  parent: webex,
37
53
  }
38
54
  );
39
- membersRequest.request = sinon.mock().returns(Promise.resolve({}));
55
+ locusDeltaRequestSpy = sinon.spy(membersRequest, 'locusDeltaRequest');
56
+
57
+ membersRequest.request = request;
40
58
  });
41
59
 
42
60
  afterEach(() => {
43
61
  sandbox.restore();
62
+ uuid.v4.restore();
44
63
  });
45
64
 
65
+ const checkRequest = (expectedParams) => {
66
+ assert.calledOnceWithExactly(locusDeltaRequestSpy, expectedParams);
67
+ assert.calledOnceWithExactly(
68
+ membersRequest.request,
69
+ merge(expectedParams, {body: {sequence}})
70
+ );
71
+ };
72
+
46
73
  describe('members request library', () => {
47
74
  describe('#sendDialPadKey', () => {
48
75
  it('sends a POST to the sendDtmf locus endpoint', async () => {
@@ -57,12 +84,22 @@ describe('plugin-meetings', () => {
57
84
  memberId,
58
85
  locusUrl,
59
86
  });
60
- const requestParams = membersRequest.request.getCall(0).args[0];
61
87
 
62
- assert.equal(requestParams.method, 'POST');
63
- assert.equal(requestParams.uri, `${locusUrl}/participant/${memberId}/sendDtmf`);
64
- assert.equal(requestParams.body.dtmf.tones, tones);
65
- assert.equal(requestParams.body.device.url, url);
88
+ checkRequest({
89
+ method: 'POST',
90
+ uri: `${locusUrl}/participant/${memberId}/sendDtmf`,
91
+ body: {
92
+ memberId,
93
+ dtmf: {
94
+ direction: 'transmit',
95
+ correlationId,
96
+ tones,
97
+ },
98
+ device: {
99
+ url,
100
+ }
101
+ }
102
+ });
66
103
  });
67
104
  });
68
105
 
@@ -76,11 +113,91 @@ describe('plugin-meetings', () => {
76
113
  };
77
114
 
78
115
  await membersRequest.addMembers(options);
79
- const requestParams = membersRequest.request.getCall(0).args[0];
80
116
 
81
- assert.equal(requestParams.method, 'PUT');
82
- assert.equal(requestParams.uri, url1);
83
- assert.equal(requestParams.body.invitees[0].address, '+18578675309');
117
+ checkRequest({
118
+ method: 'PUT',
119
+ uri: url1,
120
+ body: {
121
+ alertIfActive: undefined,
122
+ invitees: [{address: '+18578675309'}]
123
+ }
124
+ })
125
+ });
126
+ });
127
+
128
+ describe('#admitMember', () => {
129
+ it('sends a request to admit members', async () => {
130
+ const options = {
131
+ locusUrl: url1,
132
+ memberIds: ['1', '2'],
133
+ };
134
+
135
+ await membersRequest.admitMember(options)
136
+
137
+ checkRequest({
138
+ method: 'PUT',
139
+ uri: 'https://example.com/12345/controls',
140
+ body: {
141
+ admit: {
142
+ participantIds: options.memberIds
143
+ }
144
+ }
145
+ });
146
+ });
147
+ });
148
+
149
+ describe('#removeMember', () => {
150
+ it('sends a request to remove a member', async () => {
151
+ const options = {
152
+ locusUrl: url1,
153
+ memberId: 'member1',
154
+ };
155
+
156
+ await membersRequest.removeMember(options);
157
+
158
+ checkRequest({
159
+ method: 'PUT',
160
+ uri: 'https://example.com/12345/participant/member1/leave',
161
+ body: {
162
+ reason: undefined
163
+ },
164
+ });
165
+ });
166
+ });
167
+
168
+ describe('#muteMember', () => {
169
+ it('sends a request to mute a member', async () => {
170
+ const options = {
171
+ locusUrl: url1,
172
+ memberId: 'member1',
173
+ muted: true,
174
+ };
175
+
176
+ await membersRequest.muteMember(options);
177
+
178
+ checkRequest({
179
+ method: 'PATCH',
180
+ uri: 'https://example.com/12345/participant/member1/controls',
181
+ body: {audio: {muted: true}},
182
+ });
183
+ });
184
+ });
185
+
186
+ describe('#transferHostToMember', () => {
187
+ it('sends a request to transfer host to a member', async () => {
188
+ const options = {
189
+ locusUrl: url1,
190
+ memberId: 'member1',
191
+ moderator: true,
192
+ };
193
+
194
+ await membersRequest.transferHostToMember(options);
195
+
196
+ checkRequest({
197
+ method: 'PATCH',
198
+ uri: 'https://example.com/12345/participant/member1/controls',
199
+ body: {role: {moderator: true}},
200
+ });
84
201
  });
85
202
  });
86
203
 
@@ -94,12 +211,45 @@ describe('plugin-meetings', () => {
94
211
  };
95
212
 
96
213
  await membersRequest.cancelPhoneInvite(options);
97
- const requestParams = membersRequest.request.getCall(0).args[0];
98
214
 
99
- assert.equal(requestParams.method, 'PUT');
100
- assert.equal(requestParams.uri, url1);
101
- assert.equal(requestParams.body.invitees[0].address, '+18578675309');
102
- assert.equal(requestParams.body.actionType, 'REMOVE');
215
+ checkRequest({
216
+ method: 'PUT',
217
+ uri: url1,
218
+ body: {
219
+ invitees: [{address: '+18578675309'}],
220
+ actionType: 'REMOVE',
221
+ },
222
+ });
223
+ });
224
+ });
225
+
226
+ describe('#assignRolesMember', () => {
227
+ it('sends a PATCH to the locus endpoint', async () => {
228
+ const locusUrl = url1;
229
+ const memberId = 'test1';
230
+ const roles = [
231
+ {type: 'PRESENTER', hasRole: true},
232
+ {type: 'MODERATOR', hasRole: false},
233
+ {type: 'COHOST', hasRole: true},
234
+ ];
235
+
236
+ const options = {
237
+ memberId,
238
+ locusUrl,
239
+ roles,
240
+ };
241
+
242
+ await membersRequest.assignRolesMember(options);
243
+
244
+ checkRequest({
245
+ method: 'PATCH',
246
+ uri: `${locusUrl}/participant/${memberId}/controls`,
247
+ body: {
248
+ role: {
249
+ roles
250
+ }
251
+ }
252
+ });
103
253
  });
104
254
  });
105
255
 
@@ -115,11 +265,16 @@ describe('plugin-meetings', () => {
115
265
  };
116
266
 
117
267
  await membersRequest.raiseOrLowerHandMember(options);
118
- const requestParams = membersRequest.request.getCall(0).args[0];
119
268
 
120
- assert.equal(requestParams.method, 'PATCH');
121
- assert.equal(requestParams.uri, `${locusUrl}/participant/${memberId}/controls`);
122
- assert.equal(requestParams.body.hand.raised, true);
269
+ checkRequest({
270
+ method: 'PATCH',
271
+ uri: `${locusUrl}/participant/${memberId}/controls`,
272
+ body: {
273
+ hand: {
274
+ raised: true
275
+ }
276
+ }
277
+ });
123
278
  });
124
279
  });
125
280
 
@@ -158,10 +313,9 @@ describe('plugin-meetings', () => {
158
313
  locusUrl,
159
314
  };
160
315
 
161
- assert.strictEqual(
162
- membersRequest.lowerAllHandsMember(options),
163
- membersRequest.request.getCall(0).returnValue
164
- );
316
+ const result = await membersRequest.lowerAllHandsMember(options);
317
+
318
+ assert.strictEqual(result, requestResponse);
165
319
  });
166
320
 
167
321
  it('sends a PATCH to the locus endpoint', async () => {
@@ -182,9 +336,7 @@ describe('plugin-meetings', () => {
182
336
  locusUrl: url1,
183
337
  });
184
338
 
185
- const requestParams = membersRequest.request.getCall(0).args[0];
186
-
187
- assert.deepEqual(requestParams, {
339
+ checkRequest({
188
340
  method: 'PATCH',
189
341
  uri: `${locusUrl}/controls`,
190
342
  body: {
@@ -196,5 +348,32 @@ describe('plugin-meetings', () => {
196
348
  });
197
349
  });
198
350
  });
351
+
352
+ describe('#editDisplayName', () => {
353
+ it('sends a POST request to the locus endpoint', async () => {
354
+ const locusUrl = url1;
355
+ const memberId = 'test1';
356
+ const requestingParticipantId = 'test2';
357
+ const aliasValue = 'alias';
358
+
359
+ const options = {
360
+ memberId,
361
+ requestingParticipantId,
362
+ alias: aliasValue,
363
+ locusUrl,
364
+ };
365
+
366
+ await membersRequest.editDisplayNameMember(options);
367
+
368
+ checkRequest({
369
+ method: 'POST',
370
+ uri: `${locusUrl}/participant/${memberId}/alias`,
371
+ body: {
372
+ aliasValue,
373
+ requestingParticipantId,
374
+ }
375
+ });
376
+ });
377
+ });
199
378
  });
200
379
  });