@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.131

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 (519) hide show
  1. package/README.md +45 -1
  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 +48 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +355 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +193 -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 +43 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +994 -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 +5 -26
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +5 -26
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +6 -27
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +5 -26
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/parameter.js +5 -33
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +5 -26
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +4 -25
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reconnection-in-progress.js +0 -17
  45. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  46. package/dist/common/errors/reconnection.js +5 -26
  47. package/dist/common/errors/reconnection.js.map +1 -1
  48. package/dist/common/errors/stats.js +5 -26
  49. package/dist/common/errors/stats.js.map +1 -1
  50. package/dist/common/errors/webex-errors.js +6 -41
  51. package/dist/common/errors/webex-errors.js.map +1 -1
  52. package/dist/common/errors/webex-meetings-error.js +1 -24
  53. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  54. package/dist/common/events/events-scope.js +0 -22
  55. package/dist/common/events/events-scope.js.map +1 -1
  56. package/dist/common/events/events.js +0 -23
  57. package/dist/common/events/events.js.map +1 -1
  58. package/dist/common/events/trigger-proxy.js +0 -12
  59. package/dist/common/events/trigger-proxy.js.map +1 -1
  60. package/dist/common/events/util.js +0 -15
  61. package/dist/common/events/util.js.map +1 -1
  62. package/dist/common/logs/logger-config.js +0 -4
  63. package/dist/common/logs/logger-config.js.map +1 -1
  64. package/dist/common/logs/logger-proxy.js +1 -8
  65. package/dist/common/logs/logger-proxy.js.map +1 -1
  66. package/dist/common/logs/request.js +35 -61
  67. package/dist/common/logs/request.js.map +1 -1
  68. package/dist/common/queue.js +4 -14
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.js +6 -6
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.js +203 -53
  73. package/dist/constants.js.map +1 -1
  74. package/dist/controls-options-manager/constants.js +14 -0
  75. package/dist/controls-options-manager/constants.js.map +1 -0
  76. package/dist/controls-options-manager/enums.js +27 -0
  77. package/dist/controls-options-manager/enums.js.map +1 -0
  78. package/dist/controls-options-manager/index.js +297 -0
  79. package/dist/controls-options-manager/index.js.map +1 -0
  80. package/dist/controls-options-manager/types.js +7 -0
  81. package/dist/controls-options-manager/types.js.map +1 -0
  82. package/dist/controls-options-manager/util.js +294 -0
  83. package/dist/controls-options-manager/util.js.map +1 -0
  84. package/dist/index.js +72 -17
  85. package/dist/index.js.map +1 -1
  86. package/dist/locus-info/controlsUtils.js +100 -29
  87. package/dist/locus-info/controlsUtils.js.map +1 -1
  88. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  89. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  90. package/dist/locus-info/fullState.js +0 -15
  91. package/dist/locus-info/fullState.js.map +1 -1
  92. package/dist/locus-info/hostUtils.js +4 -12
  93. package/dist/locus-info/hostUtils.js.map +1 -1
  94. package/dist/locus-info/index.js +406 -216
  95. package/dist/locus-info/index.js.map +1 -1
  96. package/dist/locus-info/infoUtils.js +0 -38
  97. package/dist/locus-info/infoUtils.js.map +1 -1
  98. package/dist/locus-info/mediaSharesUtils.js +54 -38
  99. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  100. package/dist/locus-info/parser.js +88 -123
  101. package/dist/locus-info/parser.js.map +1 -1
  102. package/dist/locus-info/selfUtils.js +105 -91
  103. package/dist/locus-info/selfUtils.js.map +1 -1
  104. package/dist/media/index.js +55 -165
  105. package/dist/media/index.js.map +1 -1
  106. package/dist/media/properties.js +71 -117
  107. package/dist/media/properties.js.map +1 -1
  108. package/dist/media/util.js +2 -9
  109. package/dist/media/util.js.map +1 -1
  110. package/dist/mediaQualityMetrics/config.js +505 -495
  111. package/dist/mediaQualityMetrics/config.js.map +1 -1
  112. package/dist/meeting/in-meeting-actions.js +77 -14
  113. package/dist/meeting/in-meeting-actions.js.map +1 -1
  114. package/dist/meeting/index.js +2603 -2462
  115. package/dist/meeting/index.js.map +1 -1
  116. package/dist/meeting/locusMediaRequest.js +291 -0
  117. package/dist/meeting/locusMediaRequest.js.map +1 -0
  118. package/dist/meeting/muteState.js +292 -138
  119. package/dist/meeting/muteState.js.map +1 -1
  120. package/dist/meeting/request.js +315 -336
  121. package/dist/meeting/request.js.map +1 -1
  122. package/dist/meeting/request.type.js +7 -0
  123. package/dist/meeting/request.type.js.map +1 -0
  124. package/dist/meeting/state.js +21 -31
  125. package/dist/meeting/state.js.map +1 -1
  126. package/dist/meeting/util.js +463 -583
  127. package/dist/meeting/util.js.map +1 -1
  128. package/dist/meeting-info/collection.js +3 -25
  129. package/dist/meeting-info/collection.js.map +1 -1
  130. package/dist/meeting-info/index.js +10 -33
  131. package/dist/meeting-info/index.js.map +1 -1
  132. package/dist/meeting-info/meeting-info-v2.js +305 -286
  133. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  134. package/dist/meeting-info/request.js +1 -16
  135. package/dist/meeting-info/request.js.map +1 -1
  136. package/dist/meeting-info/util.js +98 -183
  137. package/dist/meeting-info/util.js.map +1 -1
  138. package/dist/meeting-info/utilv2.js +156 -232
  139. package/dist/meeting-info/utilv2.js.map +1 -1
  140. package/dist/meetings/collection.js +24 -20
  141. package/dist/meetings/collection.js.map +1 -1
  142. package/dist/meetings/index.js +692 -593
  143. package/dist/meetings/index.js.map +1 -1
  144. package/dist/meetings/request.js +23 -42
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +186 -155
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.js +89 -88
  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 +166 -205
  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 +93 -162
  169. package/dist/metrics/index.js.map +1 -1
  170. package/dist/multistream/mediaRequestManager.js +167 -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 +74 -93
  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 +6 -40
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +466 -442
  181. package/dist/multistream/remoteMediaManager.js.map +1 -1
  182. package/dist/networkQualityMonitor/index.js +32 -59
  183. package/dist/networkQualityMonitor/index.js.map +1 -1
  184. package/dist/personal-meeting-room/index.js +10 -45
  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 +19 -23
  199. package/dist/reactions/reactions.type.js.map +1 -1
  200. package/dist/reconnection-manager/index.js +326 -465
  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 +31 -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 -461
  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 +13 -45
  221. package/dist/transcription/index.js.map +1 -1
  222. package/dist/types/annotation/annotation.types.d.ts +35 -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 +78 -0
  256. package/dist/types/constants.d.ts +993 -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 +108 -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 +147 -0
  277. package/dist/types/meeting/index.d.ts +1762 -0
  278. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  279. package/dist/types/meeting/muteState.d.ts +186 -0
  280. package/dist/types/meeting/request.d.ts +269 -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 +76 -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 +345 -0
  292. package/dist/types/meetings/request.d.ts +27 -0
  293. package/dist/types/meetings/util.d.ts +18 -0
  294. package/dist/types/member/index.d.ts +157 -0
  295. package/dist/types/member/types.d.ts +21 -0
  296. package/dist/types/member/util.d.ts +2 -0
  297. package/dist/types/members/collection.d.ts +29 -0
  298. package/dist/types/members/index.d.ts +353 -0
  299. package/dist/types/members/request.d.ts +114 -0
  300. package/dist/types/members/types.d.ts +24 -0
  301. package/dist/types/members/util.d.ts +210 -0
  302. package/dist/types/metrics/config.d.ts +195 -0
  303. package/dist/types/metrics/constants.d.ts +55 -0
  304. package/dist/types/metrics/index.d.ts +169 -0
  305. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  306. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  307. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  308. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  309. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  310. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  311. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  312. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  313. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  314. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  315. package/dist/types/reachability/index.d.ts +152 -0
  316. package/dist/types/reachability/request.d.ts +37 -0
  317. package/dist/types/reactions/constants.d.ts +3 -0
  318. package/dist/types/reactions/reactions.d.ts +4 -0
  319. package/dist/types/reactions/reactions.type.d.ts +52 -0
  320. package/dist/types/reconnection-manager/index.d.ts +126 -0
  321. package/dist/types/recording-controller/enums.d.ts +7 -0
  322. package/dist/types/recording-controller/index.d.ts +193 -0
  323. package/dist/types/recording-controller/util.d.ts +13 -0
  324. package/dist/types/roap/index.d.ts +77 -0
  325. package/dist/types/roap/request.d.ts +36 -0
  326. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  327. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  328. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  329. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  330. package/dist/types/transcription/index.d.ts +64 -0
  331. package/internal-README.md +7 -6
  332. package/package.json +28 -21
  333. package/src/annotation/annotation.types.ts +42 -0
  334. package/src/annotation/constants.ts +36 -0
  335. package/src/annotation/index.ts +339 -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 +860 -0
  342. package/src/breakouts/request.ts +55 -0
  343. package/src/breakouts/utils.ts +57 -0
  344. package/src/common/browser-detection.ts +9 -6
  345. package/src/common/collection.ts +3 -1
  346. package/src/common/errors/captcha-error.ts +6 -6
  347. package/src/common/errors/intent-to-join.ts +6 -6
  348. package/src/common/errors/join-meeting.ts +12 -8
  349. package/src/common/errors/media.ts +6 -6
  350. package/src/common/errors/parameter.ts +9 -6
  351. package/src/common/errors/password-error.ts +6 -6
  352. package/src/common/errors/permission.ts +5 -5
  353. package/src/common/errors/reconnection.ts +6 -6
  354. package/src/common/errors/stats.ts +6 -6
  355. package/src/common/errors/webex-errors.ts +7 -5
  356. package/src/common/errors/webex-meetings-error.ts +1 -1
  357. package/src/common/events/events-scope.ts +5 -1
  358. package/src/common/events/events.ts +5 -1
  359. package/src/common/events/trigger-proxy.ts +8 -3
  360. package/src/common/events/util.ts +1 -2
  361. package/src/common/logs/logger-proxy.ts +21 -10
  362. package/src/common/logs/request.ts +11 -8
  363. package/src/config.ts +16 -12
  364. package/src/constants.ts +153 -7
  365. package/src/controls-options-manager/constants.ts +5 -0
  366. package/src/controls-options-manager/enums.ts +18 -0
  367. package/src/controls-options-manager/index.ts +278 -0
  368. package/src/controls-options-manager/types.ts +59 -0
  369. package/src/controls-options-manager/util.ts +281 -0
  370. package/src/index.ts +33 -0
  371. package/src/locus-info/controlsUtils.ts +142 -24
  372. package/src/locus-info/fullState.ts +15 -11
  373. package/src/locus-info/hostUtils.ts +4 -3
  374. package/src/locus-info/index.ts +346 -55
  375. package/src/locus-info/infoUtils.ts +12 -4
  376. package/src/locus-info/mediaSharesUtils.ts +52 -4
  377. package/src/locus-info/parser.ts +46 -68
  378. package/src/locus-info/selfUtils.ts +195 -56
  379. package/src/media/index.ts +139 -196
  380. package/src/media/properties.ts +43 -36
  381. package/src/media/util.ts +1 -1
  382. package/src/mediaQualityMetrics/config.ts +380 -378
  383. package/src/meeting/in-meeting-actions.ts +159 -3
  384. package/src/meeting/index.ts +2803 -1584
  385. package/src/meeting/locusMediaRequest.ts +309 -0
  386. package/src/meeting/muteState.ts +290 -72
  387. package/src/meeting/request.ts +247 -178
  388. package/src/meeting/request.type.ts +13 -0
  389. package/src/meeting/state.ts +45 -30
  390. package/src/meeting/util.ts +445 -395
  391. package/src/meeting-info/collection.ts +2 -1
  392. package/src/meeting-info/index.ts +32 -30
  393. package/src/meeting-info/meeting-info-v2.ts +235 -116
  394. package/src/meeting-info/request.ts +9 -3
  395. package/src/meeting-info/util.ts +54 -46
  396. package/src/meeting-info/utilv2.ts +71 -55
  397. package/src/meetings/collection.ts +21 -1
  398. package/src/meetings/index.ts +772 -437
  399. package/src/meetings/request.ts +29 -25
  400. package/src/meetings/util.ts +132 -33
  401. package/src/member/index.ts +95 -49
  402. package/src/member/types.ts +24 -0
  403. package/src/member/util.ts +106 -13
  404. package/src/members/collection.ts +8 -1
  405. package/src/members/index.ts +288 -130
  406. package/src/members/request.ts +144 -31
  407. package/src/members/types.ts +28 -0
  408. package/src/members/util.ts +316 -235
  409. package/src/metrics/config.ts +302 -90
  410. package/src/metrics/constants.ts +2 -6
  411. package/src/metrics/index.ts +124 -95
  412. package/src/multistream/mediaRequestManager.ts +203 -45
  413. package/src/multistream/receiveSlot.ts +69 -26
  414. package/src/multistream/receiveSlotManager.ts +62 -38
  415. package/src/multistream/remoteMedia.ts +30 -4
  416. package/src/multistream/remoteMediaGroup.ts +4 -3
  417. package/src/multistream/remoteMediaManager.ts +230 -66
  418. package/src/networkQualityMonitor/index.ts +24 -27
  419. package/src/personal-meeting-room/index.ts +12 -16
  420. package/src/personal-meeting-room/request.ts +10 -3
  421. package/src/personal-meeting-room/util.ts +3 -3
  422. package/src/reachability/index.ts +131 -79
  423. package/src/reachability/request.ts +43 -34
  424. package/src/reactions/constants.ts +4 -0
  425. package/src/reactions/reactions.ts +8 -8
  426. package/src/reactions/reactions.type.ts +31 -5
  427. package/src/reconnection-manager/index.ts +193 -111
  428. package/src/recording-controller/enums.ts +8 -0
  429. package/src/recording-controller/index.ts +315 -0
  430. package/src/recording-controller/util.ts +58 -0
  431. package/src/roap/index.ts +53 -53
  432. package/src/roap/request.ts +77 -64
  433. package/src/roap/turnDiscovery.ts +101 -48
  434. package/src/statsAnalyzer/global.ts +8 -104
  435. package/src/statsAnalyzer/index.ts +624 -376
  436. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  437. package/src/transcription/index.ts +34 -32
  438. package/test/integration/spec/converged-space-meetings.js +177 -0
  439. package/test/integration/spec/journey.js +670 -466
  440. package/test/integration/spec/space-meeting.js +320 -204
  441. package/test/integration/spec/transcription.js +7 -8
  442. package/test/unit/spec/annotation/index.ts +433 -0
  443. package/test/unit/spec/breakouts/breakout.ts +203 -0
  444. package/test/unit/spec/breakouts/collection.ts +15 -0
  445. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  446. package/test/unit/spec/breakouts/events.ts +77 -0
  447. package/test/unit/spec/breakouts/index.ts +1609 -0
  448. package/test/unit/spec/breakouts/request.ts +104 -0
  449. package/test/unit/spec/breakouts/utils.js +72 -0
  450. package/test/unit/spec/common/browser-detection.js +9 -28
  451. package/test/unit/spec/controls-options-manager/index.js +287 -0
  452. package/test/unit/spec/controls-options-manager/util.js +504 -0
  453. package/test/unit/spec/fixture/locus.js +93 -90
  454. package/test/unit/spec/locus-info/controlsUtils.js +305 -32
  455. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  456. package/test/unit/spec/locus-info/index.js +636 -5
  457. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  458. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  459. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  460. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  461. package/test/unit/spec/locus-info/parser.js +3 -9
  462. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  463. package/test/unit/spec/locus-info/selfUtils.js +252 -12
  464. package/test/unit/spec/media/index.ts +104 -8
  465. package/test/unit/spec/media/properties.ts +9 -9
  466. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -3
  467. package/test/unit/spec/meeting/index.js +3112 -921
  468. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  469. package/test/unit/spec/meeting/muteState.js +421 -94
  470. package/test/unit/spec/meeting/request.js +421 -79
  471. package/test/unit/spec/meeting/utils.js +326 -189
  472. package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
  473. package/test/unit/spec/meeting-info/request.js +7 -9
  474. package/test/unit/spec/meeting-info/util.js +11 -12
  475. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  476. package/test/unit/spec/meetings/collection.js +15 -1
  477. package/test/unit/spec/meetings/index.js +1126 -328
  478. package/test/unit/spec/meetings/utils.js +220 -14
  479. package/test/unit/spec/member/index.js +24 -1
  480. package/test/unit/spec/member/util.js +383 -32
  481. package/test/unit/spec/members/index.js +424 -55
  482. package/test/unit/spec/members/request.js +228 -40
  483. package/test/unit/spec/members/utils.js +191 -4
  484. package/test/unit/spec/metrics/index.js +113 -20
  485. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  486. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  487. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  488. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  489. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  490. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  491. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  492. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  493. package/test/unit/spec/reachability/index.ts +176 -27
  494. package/test/unit/spec/reachability/request.js +66 -0
  495. package/test/unit/spec/reconnection-manager/index.js +62 -31
  496. package/test/unit/spec/recording-controller/index.js +231 -0
  497. package/test/unit/spec/recording-controller/util.js +102 -0
  498. package/test/unit/spec/roap/index.ts +19 -49
  499. package/test/unit/spec/roap/request.ts +187 -0
  500. package/test/unit/spec/roap/turnDiscovery.ts +92 -50
  501. package/test/unit/spec/stats-analyzer/index.js +116 -60
  502. package/test/utils/cmr.js +44 -42
  503. package/test/utils/constants.js +9 -0
  504. package/test/utils/integrationTestUtils.js +64 -0
  505. package/test/utils/testUtils.js +63 -99
  506. package/test/utils/webex-config.js +22 -18
  507. package/test/utils/webex-test-users.js +57 -50
  508. package/tsconfig.json +6 -0
  509. package/dist/media/internal-media-core-wrapper.js +0 -22
  510. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  511. package/dist/meeting/effectsState.js +0 -334
  512. package/dist/meeting/effectsState.js.map +0 -1
  513. package/dist/multistream/multistreamMedia.js +0 -116
  514. package/dist/multistream/multistreamMedia.js.map +0 -1
  515. package/src/index.js +0 -15
  516. package/src/media/internal-media-core-wrapper.ts +0 -9
  517. package/src/meeting/effectsState.ts +0 -211
  518. package/src/multistream/multistreamMedia.ts +0 -92
  519. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -14,13 +14,15 @@ 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
 
20
23
  chai.use(chaiAsPromised);
21
24
  sinon.assert.expose(chai.assert, {prefix: ''});
22
25
 
23
-
24
26
  describe('plugin-meetings', () => {
25
27
  let webex;
26
28
  let url1;
@@ -34,37 +36,33 @@ describe('plugin-meetings', () => {
34
36
  id: '6eb08f8b-bf69-3251-a126-b161bead2d21',
35
37
  phoneNumber: '+18578675309',
36
38
  isExternal: true,
37
- primaryDisplayString: '+18578675309'
39
+ primaryDisplayString: '+18578675309',
38
40
  },
39
41
  devices: [
40
42
  {
41
43
  url: 'https://fakeURL.com',
42
44
  deviceType: 'SIP',
43
45
  state: 'JOINED',
44
- intents: [
45
- null
46
- ],
46
+ intents: [null],
47
47
  correlationId: '1234',
48
48
  provisionalUrl: 'dialout:///fake',
49
- isSparkPstn: true
49
+ isSparkPstn: true,
50
50
  },
51
51
  {
52
52
  url: 'dialout:///fakeagain',
53
53
  deviceType: 'PROVISIONAL',
54
54
  state: 'JOINED',
55
- intents: [
56
- null
57
- ],
55
+ intents: [null],
58
56
  correlationId: '4321',
59
57
  isVideoCallback: false,
60
58
  clientUrl: 'https://fakeURL',
61
59
  provisionalType: 'DIAL_OUT_ONLY',
62
- dialingStatus: 'SUCCESS'
63
- }
60
+ dialingStatus: 'SUCCESS',
61
+ },
64
62
  ],
65
63
  status: {
66
64
  audioStatus: 'SENDRECV',
67
- videoStatus: 'INACTIVE'
65
+ videoStatus: 'INACTIVE',
68
66
  },
69
67
  id: 'abc-123-abc-123',
70
68
  guest: true,
@@ -72,51 +70,70 @@ describe('plugin-meetings', () => {
72
70
  moderator: false,
73
71
  panelist: false,
74
72
  moveToLobbyNotAllowed: true,
75
- deviceUrl: 'https://fakeDeviceurl'
73
+ deviceUrl: 'https://fakeDeviceurl',
76
74
  },
77
75
  id: 'abc-123-abc-123',
78
76
  status: 'IN_MEETING',
79
77
  type: 'MEETING',
80
- isModerator: false
81
- }
78
+ isModerator: false,
79
+ },
82
80
  };
83
81
 
84
-
85
82
  describe('members', () => {
86
83
  const sandbox = sinon.createSandbox();
87
84
  let createMembers;
85
+ let meeting;
86
+ let membersRequestSpy;
88
87
 
89
88
  beforeEach(() => {
90
89
  webex = new MockWebex({
91
90
  children: {
92
91
  meetings: Meetings,
93
92
  credentials: Credentials,
94
- support: Support
93
+ support: Support,
95
94
  },
96
95
  config: {
97
96
  credentials: {
98
- client_id: 'mock-client-id'
97
+ client_id: 'mock-client-id',
99
98
  },
100
99
  meetings: {
101
100
  reconnection: {
102
- enabled: false
101
+ enabled: false,
103
102
  },
104
103
  mediaSettings: {},
105
104
  metrics: {},
106
- stats: {}
107
- }
108
- }
105
+ stats: {},
106
+ },
107
+ },
109
108
  });
110
109
 
111
110
  url1 = `https://example.com/${uuid.v4()}`;
112
111
 
113
- 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});
114
122
  });
115
123
 
116
124
  afterEach(() => {
125
+ membersRequestSpy.restore();
117
126
  sandbox.restore();
118
127
  });
119
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
+
120
137
  describe('#addMembers', () => {
121
138
  it('should invoke isInvalidInvitee and generateAddMemberOptions from MembersUtil when addMember is called with valid params', async () => {
122
139
  sandbox.spy(MembersUtil, 'isInvalidInvitee');
@@ -136,6 +153,129 @@ describe('plugin-meetings', () => {
136
153
  });
137
154
  });
138
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
+ });
139
279
  describe('#sendDialPadKey', () => {
140
280
  it('should throw a rejection when calling sendDialPadKey with no tones', async () => {
141
281
  const members = createMembers({url: url1});
@@ -155,7 +295,13 @@ describe('plugin-meetings', () => {
155
295
 
156
296
  members.membersCollection.setAll(fakeMembersCollection);
157
297
  await members.sendDialPadKey('1', 'test1');
158
- assert.calledWith(MembersUtil.genderateSendDTMFOptions, 'https://fakeURL.com', '1', 'test1', url1);
298
+ assert.calledWith(
299
+ MembersUtil.genderateSendDTMFOptions,
300
+ 'https://fakeURL.com',
301
+ '1',
302
+ 'test1',
303
+ url1
304
+ );
159
305
  });
160
306
 
161
307
  it('should call the sendDialPadKey method on membersRequest if the member is valid', async () => {
@@ -191,12 +337,106 @@ 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});
197
434
 
198
435
  const spies = {
199
- generateRaiseHandMemberOptions: sandbox.spy(MembersUtil, 'generateRaiseHandMemberOptions'),
436
+ generateRaiseHandMemberOptions: sandbox.spy(
437
+ MembersUtil,
438
+ 'generateRaiseHandMemberOptions'
439
+ ),
200
440
  raiseOrLowerHandMember: sandbox.spy(members.membersRequest, 'raiseOrLowerHandMember'),
201
441
  };
202
442
 
@@ -209,10 +449,25 @@ describe('plugin-meetings', () => {
209
449
  assert.notCalled(spies.raiseOrLowerHandMember);
210
450
  };
211
451
 
212
- const checkValid = async (resultPromise, spies, expectedMemberId, expectedRaise, expectedLocusUrl) => {
452
+ const checkValid = async (
453
+ resultPromise,
454
+ spies,
455
+ expectedMemberId,
456
+ expectedRaise,
457
+ expectedLocusUrl
458
+ ) => {
213
459
  await assert.isFulfilled(resultPromise);
214
- assert.calledOnceWithExactly(spies.generateRaiseHandMemberOptions, expectedMemberId, expectedRaise, expectedLocusUrl);
215
- assert.calledOnceWithExactly(spies.raiseOrLowerHandMember, {memberId: expectedMemberId, raised: expectedRaise, locusUrl: expectedLocusUrl});
460
+ assert.calledOnceWithExactly(
461
+ spies.generateRaiseHandMemberOptions,
462
+ expectedMemberId,
463
+ expectedRaise,
464
+ expectedLocusUrl
465
+ );
466
+ assert.calledOnceWithExactly(spies.raiseOrLowerHandMember, {
467
+ memberId: expectedMemberId,
468
+ raised: expectedRaise,
469
+ locusUrl: expectedLocusUrl,
470
+ });
216
471
  assert.strictEqual(resultPromise, spies.raiseOrLowerHandMember.getCall(0).returnValue);
217
472
  };
218
473
 
@@ -221,7 +476,11 @@ describe('plugin-meetings', () => {
221
476
 
222
477
  const resultPromise = members.raiseOrLowerHand();
223
478
 
224
- await checkInvalid(resultPromise, 'The member id must be defined to raise/lower the hand of the member.', spies);
479
+ await checkInvalid(
480
+ resultPromise,
481
+ 'The member id must be defined to raise/lower the hand of the member.',
482
+ spies
483
+ );
225
484
  });
226
485
 
227
486
  it('should not make a request if there is no locus url', async () => {
@@ -229,7 +488,11 @@ describe('plugin-meetings', () => {
229
488
 
230
489
  const resultPromise = members.raiseOrLowerHand(uuid.v4());
231
490
 
232
- await checkInvalid(resultPromise, 'The associated locus url for this meetings members object must be defined.', spies);
491
+ await checkInvalid(
492
+ resultPromise,
493
+ 'The associated locus url for this meetings members object must be defined.',
494
+ spies
495
+ );
233
496
  });
234
497
 
235
498
  it('should make the correct request when called with raise as true', async () => {
@@ -265,7 +528,10 @@ describe('plugin-meetings', () => {
265
528
  const members = createMembers({url: locusUrl});
266
529
 
267
530
  const spies = {
268
- generateLowerAllHandsMemberOptions: sandbox.spy(MembersUtil, 'generateLowerAllHandsMemberOptions'),
531
+ generateLowerAllHandsMemberOptions: sandbox.spy(
532
+ MembersUtil,
533
+ 'generateLowerAllHandsMemberOptions'
534
+ ),
269
535
  lowerAllHandsMember: sandbox.spy(members.membersRequest, 'lowerAllHandsMember'),
270
536
  };
271
537
 
@@ -278,10 +544,22 @@ describe('plugin-meetings', () => {
278
544
  assert.notCalled(spies.lowerAllHandsMember);
279
545
  };
280
546
 
281
- const checkValid = async (resultPromise, spies, expectedRequestingMemberId, expectedLocusUrl) => {
547
+ const checkValid = async (
548
+ resultPromise,
549
+ spies,
550
+ expectedRequestingMemberId,
551
+ expectedLocusUrl
552
+ ) => {
282
553
  await assert.isFulfilled(resultPromise);
283
- assert.calledOnceWithExactly(spies.generateLowerAllHandsMemberOptions, expectedRequestingMemberId, expectedLocusUrl);
284
- assert.calledOnceWithExactly(spies.lowerAllHandsMember, {requestingParticipantId: expectedRequestingMemberId, locusUrl: expectedLocusUrl});
554
+ assert.calledOnceWithExactly(
555
+ spies.generateLowerAllHandsMemberOptions,
556
+ expectedRequestingMemberId,
557
+ expectedLocusUrl
558
+ );
559
+ assert.calledOnceWithExactly(spies.lowerAllHandsMember, {
560
+ requestingParticipantId: expectedRequestingMemberId,
561
+ locusUrl: expectedLocusUrl,
562
+ });
285
563
  assert.strictEqual(resultPromise, spies.lowerAllHandsMember.getCall(0).returnValue);
286
564
  };
287
565
 
@@ -290,7 +568,11 @@ describe('plugin-meetings', () => {
290
568
 
291
569
  const resultPromise = members.lowerAllHands();
292
570
 
293
- await checkInvalid(resultPromise, 'The requestingMemberId must be defined to lower all hands in a meeting.', spies);
571
+ await checkInvalid(
572
+ resultPromise,
573
+ 'The requestingMemberId must be defined to lower all hands in a meeting.',
574
+ spies
575
+ );
294
576
  });
295
577
 
296
578
  it('should not make a request if there is no locus url', async () => {
@@ -298,7 +580,11 @@ describe('plugin-meetings', () => {
298
580
 
299
581
  const resultPromise = members.lowerAllHands(uuid.v4());
300
582
 
301
- await checkInvalid(resultPromise, 'The associated locus url for this meetings members object must be defined.', spies);
583
+ await checkInvalid(
584
+ resultPromise,
585
+ 'The associated locus url for this meetings members object must be defined.',
586
+ spies
587
+ );
302
588
  });
303
589
 
304
590
  it('should make the correct request when called with requestingMemberId', async () => {
@@ -311,19 +597,100 @@ describe('plugin-meetings', () => {
311
597
  });
312
598
  });
313
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
+
314
682
  describe('findMemberByCsi()', () => {
315
683
  let members;
316
684
 
317
685
  // fake collection that contains all combinations of members data structure (with respect to CSIs)
318
686
  const fakeCollection = {
319
687
  oneWithoutDevices: {
320
- participant: {
321
- }
688
+ participant: {},
322
689
  },
323
690
  oneWithEmptyDevices: {
324
691
  participant: {
325
692
  devices: [],
326
- }
693
+ },
327
694
  },
328
695
  oneWithDevicesWithoutCsis: {
329
696
  participant: {
@@ -338,7 +705,7 @@ describe('plugin-meetings', () => {
338
705
  url: 'dialout:///fakeagain',
339
706
  deviceType: 'PROVISIONAL',
340
707
  state: 'JOINED',
341
- }
708
+ },
342
709
  ],
343
710
  },
344
711
  id: 'abc-123-abc-123',
@@ -358,10 +725,10 @@ describe('plugin-meetings', () => {
358
725
  deviceType: 'SIP',
359
726
  state: 'JOINED',
360
727
  csis: [2000, 2001, 2002],
361
- }
362
- ]
363
- }
364
- }
728
+ },
729
+ ],
730
+ },
731
+ },
365
732
  };
366
733
 
367
734
  beforeEach(() => {
@@ -392,14 +759,13 @@ describe('plugin-meetings', () => {
392
759
  },
393
760
  oneWithoutDevices: {
394
761
  id: 'oneWithoutDevices',
395
- participant: {
396
- }
762
+ participant: {},
397
763
  },
398
764
  oneWithEmptyDevices: {
399
765
  id: 'oneWithEmptyDevices',
400
766
  participant: {
401
767
  devices: [],
402
- }
768
+ },
403
769
  },
404
770
  oneWithDevicesWithoutCsis: {
405
771
  id: 'oneWithDevicesWithoutCsis',
@@ -415,7 +781,7 @@ describe('plugin-meetings', () => {
415
781
  url: 'dialout:///fakeagain',
416
782
  deviceType: 'PROVISIONAL',
417
783
  state: 'JOINED',
418
- }
784
+ },
419
785
  ],
420
786
  },
421
787
  status: 'IN_MEETING',
@@ -431,7 +797,7 @@ describe('plugin-meetings', () => {
431
797
  mediaSessions: [
432
798
  {mediaType: 'audio', mediaContent: 'main', csi: 1000},
433
799
  {mediaType: 'video', mediaContent: 'main', csi: 1001},
434
- {mediaType: 'video', mediaContent: 'content', csi: 1002}
800
+ {mediaType: 'video', mediaContent: 'content', csi: 1002},
435
801
  ],
436
802
  },
437
803
  {
@@ -441,12 +807,12 @@ describe('plugin-meetings', () => {
441
807
  mediaSessions: [
442
808
  {mediaType: 'audio', mediaContent: 'main', csi: 2000},
443
809
  {mediaType: 'video', mediaContent: 'main', csi: 2001},
444
- {mediaType: 'video', mediaContent: 'content', csi: 2002}
810
+ {mediaType: 'video', mediaContent: 'content', csi: 2002},
445
811
  ],
446
- }
447
- ]
448
- }
449
- }
812
+ },
813
+ ],
814
+ },
815
+ },
450
816
  };
451
817
 
452
818
  beforeEach(() => {
@@ -470,7 +836,10 @@ describe('plugin-meetings', () => {
470
836
  });
471
837
 
472
838
  it('returns correct CSI values when there is a match', () => {
473
- assert.deepEqual(members.getCsisForMember('oneWithSomeCsis', 'video', 'main'), [1001, 2001]);
839
+ assert.deepEqual(
840
+ members.getCsisForMember('oneWithSomeCsis', 'video', 'main'),
841
+ [1001, 2001]
842
+ );
474
843
  });
475
844
  });
476
845
  });