@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.104

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 (548) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +10 -24
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +11 -24
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +12 -25
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +10 -24
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +10 -24
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +9 -23
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +10 -24
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +10 -24
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +10 -69
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +5 -25
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +37 -60
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +7 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +184 -122
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +362 -208
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +3 -37
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +92 -118
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +113 -337
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +96 -135
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +1 -35
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2909 -2398
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +257 -112
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +330 -264
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +63 -261
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +6 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +14 -32
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +273 -280
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +3 -15
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +26 -19
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +741 -548
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +26 -41
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +194 -149
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +100 -85
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -68
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +13 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +227 -188
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +54 -39
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +67 -159
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +250 -0
  168. package/dist/multistream/mediaRequestManager.js.map +1 -0
  169. package/dist/multistream/receiveSlot.js +202 -0
  170. package/dist/multistream/receiveSlot.js.map +1 -0
  171. package/dist/multistream/receiveSlotManager.js +176 -0
  172. package/dist/multistream/receiveSlotManager.js.map +1 -0
  173. package/dist/multistream/remoteMedia.js +270 -0
  174. package/dist/multistream/remoteMedia.js.map +1 -0
  175. package/dist/multistream/remoteMediaGroup.js +209 -0
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  177. package/dist/multistream/remoteMediaManager.js +1137 -0
  178. package/dist/multistream/remoteMediaManager.js.map +1 -0
  179. package/dist/networkQualityMonitor/index.js +40 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +21 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +1 -31
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +192 -191
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +15 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +386 -527
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +84 -286
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +138 -238
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +164 -102
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -93
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +399 -470
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +22 -47
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +29 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  341. package/src/common/collection.ts +9 -7
  342. package/src/common/{config.js → config.ts} +1 -1
  343. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  344. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  345. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  346. package/src/common/errors/{media.js → media.ts} +11 -7
  347. package/src/common/errors/parameter.ts +11 -7
  348. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  349. package/src/common/errors/{permission.js → permission.ts} +10 -6
  350. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  351. package/src/common/errors/{stats.js → stats.ts} +11 -7
  352. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -25
  353. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  354. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  355. package/src/common/events/{events.js → events.ts} +5 -1
  356. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  357. package/src/common/events/{util.js → util.ts} +2 -3
  358. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  359. package/src/common/logs/logger-proxy.ts +44 -0
  360. package/src/common/logs/{request.js → request.ts} +22 -9
  361. package/src/common/queue.ts +1 -2
  362. package/src/{config.js → config.ts} +18 -12
  363. package/src/constants.ts +256 -183
  364. package/src/controls-options-manager/constants.ts +5 -0
  365. package/src/controls-options-manager/enums.ts +16 -0
  366. package/src/controls-options-manager/index.ts +278 -0
  367. package/src/controls-options-manager/types.ts +49 -0
  368. package/src/controls-options-manager/util.ts +229 -0
  369. package/src/index.ts +33 -0
  370. package/src/locus-info/controlsUtils.ts +169 -0
  371. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  372. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  373. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  374. package/src/locus-info/{index.js → index.ts} +331 -80
  375. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  376. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  377. package/src/locus-info/{parser.js → parser.ts} +67 -79
  378. package/src/locus-info/{selfUtils.js → selfUtils.ts} +196 -67
  379. package/src/media/index.ts +488 -0
  380. package/src/media/{properties.js → properties.ts} +67 -54
  381. package/src/media/util.ts +16 -0
  382. package/src/mediaQualityMetrics/config.ts +384 -0
  383. package/src/meeting/in-meeting-actions.ts +123 -3
  384. package/src/meeting/{index.js → index.ts} +3334 -1775
  385. package/src/meeting/muteState.ts +526 -0
  386. package/src/meeting/{request.js → request.ts} +350 -142
  387. package/src/meeting/request.type.ts +13 -0
  388. package/src/meeting/{state.js → state.ts} +50 -35
  389. package/src/meeting/{util.js → util.ts} +126 -159
  390. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  391. package/src/meeting-info/{index.js → index.ts} +42 -36
  392. package/src/meeting-info/meeting-info-v2.ts +345 -0
  393. package/src/meeting-info/{request.js → request.ts} +14 -4
  394. package/src/meeting-info/{util.js → util.ts} +60 -51
  395. package/src/meeting-info/{utilv2.js → utilv2.ts} +76 -60
  396. package/src/meetings/{collection.js → collection.ts} +26 -3
  397. package/src/meetings/index.ts +1394 -0
  398. package/src/meetings/{request.js → request.ts} +34 -25
  399. package/src/meetings/util.ts +288 -0
  400. package/src/member/{index.js → index.ts} +124 -56
  401. package/src/member/types.ts +24 -0
  402. package/src/member/{util.js → util.ts} +105 -25
  403. package/src/members/{collection.js → collection.ts} +10 -2
  404. package/src/members/{index.js → index.ts} +359 -139
  405. package/src/members/request.ts +215 -0
  406. package/src/members/types.ts +28 -0
  407. package/src/members/{util.js → util.ts} +145 -54
  408. package/src/metrics/{config.js → config.ts} +256 -92
  409. package/src/metrics/{constants.js → constants.ts} +1 -6
  410. package/src/metrics/{index.js → index.ts} +116 -97
  411. package/src/multistream/mediaRequestManager.ts +324 -0
  412. package/src/multistream/receiveSlot.ts +184 -0
  413. package/src/multistream/receiveSlotManager.ts +166 -0
  414. package/src/multistream/remoteMedia.ts +254 -0
  415. package/src/multistream/remoteMediaGroup.ts +225 -0
  416. package/src/multistream/remoteMediaManager.ts +1075 -0
  417. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  418. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  419. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  420. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  421. package/src/reachability/{index.js → index.ts} +157 -94
  422. package/src/reachability/request.ts +46 -35
  423. package/src/reactions/constants.ts +4 -0
  424. package/src/reactions/reactions.ts +104 -0
  425. package/src/reactions/reactions.type.ts +62 -0
  426. package/src/reconnection-manager/{index.js → index.ts} +261 -163
  427. package/src/recording-controller/enums.ts +8 -0
  428. package/src/recording-controller/index.ts +315 -0
  429. package/src/recording-controller/util.ts +58 -0
  430. package/src/roap/index.ts +241 -0
  431. package/src/roap/request.ts +172 -0
  432. package/src/roap/turnDiscovery.ts +127 -53
  433. package/src/statsAnalyzer/global.ts +37 -0
  434. package/src/statsAnalyzer/index.ts +1273 -0
  435. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  436. package/src/transcription/{index.js → index.ts} +46 -39
  437. package/test/integration/spec/converged-space-meetings.js +177 -0
  438. package/test/integration/spec/journey.js +666 -464
  439. package/test/integration/spec/space-meeting.js +321 -206
  440. package/test/integration/spec/transcription.js +7 -8
  441. package/test/unit/spec/annotation/index.ts +435 -0
  442. package/test/unit/spec/breakouts/breakout.ts +184 -0
  443. package/test/unit/spec/breakouts/collection.ts +15 -0
  444. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  445. package/test/unit/spec/breakouts/events.ts +77 -0
  446. package/test/unit/spec/breakouts/index.ts +1504 -0
  447. package/test/unit/spec/breakouts/request.ts +104 -0
  448. package/test/unit/spec/breakouts/utils.js +72 -0
  449. package/test/unit/spec/common/browser-detection.js +9 -28
  450. package/test/unit/spec/controls-options-manager/index.js +287 -0
  451. package/test/unit/spec/controls-options-manager/util.js +403 -0
  452. package/test/unit/spec/fixture/locus.js +92 -90
  453. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  454. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  455. package/test/unit/spec/locus-info/index.js +493 -3
  456. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  457. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  458. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  459. package/test/unit/spec/locus-info/parser.js +3 -9
  460. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  461. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  462. package/test/unit/spec/media/index.ts +303 -0
  463. package/test/unit/spec/media/properties.ts +73 -82
  464. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  465. package/test/unit/spec/meeting/index.js +3127 -975
  466. package/test/unit/spec/meeting/muteState.js +375 -70
  467. package/test/unit/spec/meeting/request.js +217 -43
  468. package/test/unit/spec/meeting/utils.js +205 -163
  469. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  470. package/test/unit/spec/meeting-info/request.js +7 -9
  471. package/test/unit/spec/meeting-info/util.js +11 -12
  472. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  473. package/test/unit/spec/meetings/collection.js +15 -1
  474. package/test/unit/spec/meetings/index.js +1052 -333
  475. package/test/unit/spec/meetings/utils.js +163 -14
  476. package/test/unit/spec/member/index.js +24 -1
  477. package/test/unit/spec/member/util.js +359 -32
  478. package/test/unit/spec/members/index.js +547 -37
  479. package/test/unit/spec/members/request.js +76 -20
  480. package/test/unit/spec/members/utils.js +191 -4
  481. package/test/unit/spec/metrics/index.js +46 -20
  482. package/test/unit/spec/multistream/mediaRequestManager.ts +1060 -0
  483. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  484. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  485. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  486. package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
  487. package/test/unit/spec/multistream/remoteMediaManager.ts +1793 -0
  488. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  489. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  490. package/test/unit/spec/reachability/index.ts +176 -27
  491. package/test/unit/spec/reachability/request.js +66 -0
  492. package/test/unit/spec/reconnection-manager/index.js +106 -9
  493. package/test/unit/spec/recording-controller/index.js +231 -0
  494. package/test/unit/spec/recording-controller/util.js +102 -0
  495. package/test/unit/spec/roap/index.ts +78 -45
  496. package/test/unit/spec/roap/request.ts +217 -0
  497. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  498. package/test/unit/spec/stats-analyzer/index.js +118 -65
  499. package/test/utils/cmr.js +44 -42
  500. package/test/utils/constants.js +9 -0
  501. package/test/utils/integrationTestUtils.js +64 -0
  502. package/test/utils/testUtils.js +63 -99
  503. package/test/utils/webex-config.js +22 -18
  504. package/test/utils/webex-test-users.js +57 -50
  505. package/tsconfig.json +6 -0
  506. package/dist/meeting/effectsState.js +0 -327
  507. package/dist/meeting/effectsState.js.map +0 -1
  508. package/dist/peer-connection-manager/index.js +0 -794
  509. package/dist/peer-connection-manager/index.js.map +0 -1
  510. package/dist/peer-connection-manager/util.js +0 -124
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.js +0 -73
  513. package/dist/roap/collection.js.map +0 -1
  514. package/dist/roap/handler.js +0 -337
  515. package/dist/roap/handler.js.map +0 -1
  516. package/dist/roap/state.js +0 -164
  517. package/dist/roap/state.js.map +0 -1
  518. package/dist/roap/util.js +0 -102
  519. package/dist/roap/util.js.map +0 -1
  520. package/src/common/logs/logger-proxy.js +0 -33
  521. package/src/index.js +0 -15
  522. package/src/locus-info/controlsUtils.js +0 -102
  523. package/src/media/index.js +0 -593
  524. package/src/media/util.js +0 -38
  525. package/src/mediaQualityMetrics/config.js +0 -382
  526. package/src/meeting/effectsState.js +0 -205
  527. package/src/meeting/muteState.js +0 -318
  528. package/src/meeting-info/meeting-info-v2.js +0 -255
  529. package/src/meetings/index.js +0 -986
  530. package/src/meetings/util.js +0 -176
  531. package/src/members/request.js +0 -131
  532. package/src/peer-connection-manager/index.js +0 -723
  533. package/src/peer-connection-manager/util.ts +0 -117
  534. package/src/roap/collection.js +0 -63
  535. package/src/roap/handler.js +0 -252
  536. package/src/roap/index.js +0 -380
  537. package/src/roap/request.js +0 -198
  538. package/src/roap/state.js +0 -149
  539. package/src/roap/util.js +0 -93
  540. package/src/statsAnalyzer/global.js +0 -131
  541. package/src/statsAnalyzer/index.js +0 -1020
  542. package/src/statsAnalyzer/mqaUtil.js +0 -173
  543. package/test/unit/spec/meeting/effectsState.js +0 -293
  544. package/test/unit/spec/peerconnection-manager/index.js +0 -188
  545. package/test/unit/spec/peerconnection-manager/utils.js +0 -48
  546. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  547. package/test/unit/spec/roap/util.js +0 -30
  548. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -10,18 +10,18 @@ import chaiAsPromised from 'chai-as-promised';
10
10
  import {Credentials} from '@webex/webex-core';
11
11
  import Support from '@webex/internal-plugin-support';
12
12
  import MockWebex from '@webex/test-helper-mock-webex';
13
-
14
- import Meetings from '@webex/plugin-meetings';
15
13
  import ParameterError from '@webex/plugin-meetings/src/common/errors/parameter';
14
+ import Meetings from '@webex/plugin-meetings';
16
15
  import Members from '@webex/plugin-meetings/src/members';
17
16
  import MembersUtil from '@webex/plugin-meetings/src/members/util';
17
+ import Trigger from '@webex/plugin-meetings/src/common/events/trigger-proxy';
18
+ import {EVENT_TRIGGERS} from '@webex/plugin-meetings/src/constants';
18
19
 
19
20
  const {assert} = chai;
20
21
 
21
22
  chai.use(chaiAsPromised);
22
23
  sinon.assert.expose(chai.assert, {prefix: ''});
23
24
 
24
-
25
25
  describe('plugin-meetings', () => {
26
26
  let webex;
27
27
  let url1;
@@ -35,37 +35,33 @@ describe('plugin-meetings', () => {
35
35
  id: '6eb08f8b-bf69-3251-a126-b161bead2d21',
36
36
  phoneNumber: '+18578675309',
37
37
  isExternal: true,
38
- primaryDisplayString: '+18578675309'
38
+ primaryDisplayString: '+18578675309',
39
39
  },
40
40
  devices: [
41
41
  {
42
42
  url: 'https://fakeURL.com',
43
43
  deviceType: 'SIP',
44
44
  state: 'JOINED',
45
- intents: [
46
- null
47
- ],
45
+ intents: [null],
48
46
  correlationId: '1234',
49
47
  provisionalUrl: 'dialout:///fake',
50
- isSparkPstn: true
48
+ isSparkPstn: true,
51
49
  },
52
50
  {
53
51
  url: 'dialout:///fakeagain',
54
52
  deviceType: 'PROVISIONAL',
55
53
  state: 'JOINED',
56
- intents: [
57
- null
58
- ],
54
+ intents: [null],
59
55
  correlationId: '4321',
60
56
  isVideoCallback: false,
61
57
  clientUrl: 'https://fakeURL',
62
58
  provisionalType: 'DIAL_OUT_ONLY',
63
- dialingStatus: 'SUCCESS'
64
- }
59
+ dialingStatus: 'SUCCESS',
60
+ },
65
61
  ],
66
62
  status: {
67
63
  audioStatus: 'SENDRECV',
68
- videoStatus: 'INACTIVE'
64
+ videoStatus: 'INACTIVE',
69
65
  },
70
66
  id: 'abc-123-abc-123',
71
67
  guest: true,
@@ -73,16 +69,15 @@ describe('plugin-meetings', () => {
73
69
  moderator: false,
74
70
  panelist: false,
75
71
  moveToLobbyNotAllowed: true,
76
- deviceUrl: 'https://fakeDeviceurl'
72
+ deviceUrl: 'https://fakeDeviceurl',
77
73
  },
78
74
  id: 'abc-123-abc-123',
79
75
  status: 'IN_MEETING',
80
76
  type: 'MEETING',
81
- isModerator: false
82
- }
77
+ isModerator: false,
78
+ },
83
79
  };
84
80
 
85
-
86
81
  describe('members', () => {
87
82
  const sandbox = sinon.createSandbox();
88
83
  let createMembers;
@@ -92,21 +87,21 @@ describe('plugin-meetings', () => {
92
87
  children: {
93
88
  meetings: Meetings,
94
89
  credentials: Credentials,
95
- support: Support
90
+ support: Support,
96
91
  },
97
92
  config: {
98
93
  credentials: {
99
- client_id: 'mock-client-id'
94
+ client_id: 'mock-client-id',
100
95
  },
101
96
  meetings: {
102
97
  reconnection: {
103
- enabled: false
98
+ enabled: false,
104
99
  },
105
100
  mediaSettings: {},
106
101
  metrics: {},
107
- stats: {}
108
- }
109
- }
102
+ stats: {},
103
+ },
104
+ },
110
105
  });
111
106
 
112
107
  url1 = `https://example.com/${uuid.v4()}`;
@@ -137,6 +132,129 @@ describe('plugin-meetings', () => {
137
132
  });
138
133
  });
139
134
 
135
+ describe('#admitMembers', () => {
136
+ let members;
137
+ beforeEach(() => {
138
+ members = createMembers({url: url1});
139
+ members.membersRequest.admitMember = sinon.stub().returns(Promise.resolve(true));
140
+ });
141
+ it('should return error if param memberIds is not provided', async () => {
142
+ let error;
143
+ await members.admitMembers().catch((e) => {
144
+ error = e;
145
+ });
146
+ assert.deepEqual(error, new ParameterError('No member ids provided to admit.'));
147
+ });
148
+
149
+ it('should call membersRequest.admitMember as expected', async () => {
150
+ await members.admitMembers(['uuid']);
151
+ const arg1 = members.membersRequest.admitMember.getCall(0).args[0];
152
+ assert.equal(arg1.sessionLocusUrls, undefined);
153
+ assert.equal(arg1.locusUrl.includes('https://example.com/'), true);
154
+ assert.deepEqual(arg1.memberIds, ['uuid']);
155
+
156
+ const sessionLocusUrls = {
157
+ authorizingLocusUrl: 'authorizingLocusUrl',
158
+ mainLocusUrl: 'mainLocusUrl',
159
+ };
160
+ await members.admitMembers(['uuid'], sessionLocusUrls);
161
+ const arg2 = members.membersRequest.admitMember.getCall(1).args[0];
162
+ assert.equal(arg2.sessionLocusUrls, sessionLocusUrls);
163
+ assert.equal(arg1.locusUrl.includes('https://example.com/'), true);
164
+ assert.deepEqual(arg1.memberIds, ['uuid']);
165
+ });
166
+ });
167
+
168
+ describe('#muteMember', () => {
169
+ const testMuteMember = async (mute, isAudio) => {
170
+ sandbox.spy(MembersUtil, 'generateMuteMemberOptions');
171
+
172
+ const locusUrl = 'locus-url';
173
+ const members = createMembers({url: locusUrl});
174
+ const {membersRequest} = members;
175
+ sandbox.spy(membersRequest, 'muteMember');
176
+
177
+ const memberId = 'bob';
178
+
179
+ await members.muteMember(memberId, mute, isAudio);
180
+ assert.calledOnce(MembersUtil.generateMuteMemberOptions);
181
+ assert.calledWith(
182
+ MembersUtil.generateMuteMemberOptions,
183
+ memberId,
184
+ mute,
185
+ members.locusUrl,
186
+ isAudio
187
+ );
188
+
189
+ assert.calledOnce(membersRequest.muteMember);
190
+ assert.calledWith(membersRequest.muteMember, {memberId, muted: mute, locusUrl, isAudio});
191
+ };
192
+
193
+ it('invokes expected functions when muteMember is called for mute=true, isAudio=true', async () => {
194
+ testMuteMember(true, true);
195
+ });
196
+
197
+ it('invokes expected functions when muteMember is called for mute=true, isAudio=false', async () => {
198
+ testMuteMember(true, false);
199
+ });
200
+
201
+ it('invokes expected functions when muteMember is called for mute=false, isAudio=true', async () => {
202
+ testMuteMember(false, true);
203
+ });
204
+
205
+ it('invokes expected functions when muteMember is called for mute=false, isAudio=false', async () => {
206
+ testMuteMember(false, false);
207
+ });
208
+ });
209
+
210
+ describe('#clearMembers', () => {
211
+ it('should send clear event if clear members', () => {
212
+ const members = createMembers({url: url1});
213
+ members.membersCollection.setAll(fakeMembersCollection);
214
+ Trigger.trigger = sinon.stub();
215
+ members.clearMembers();
216
+ assert.deepEqual(members.membersCollection.members, {});
217
+ assert.calledWith(
218
+ Trigger.trigger,
219
+ members,
220
+ {
221
+ file: 'members',
222
+ function: 'clearMembers',
223
+ },
224
+ EVENT_TRIGGERS.MEMBERS_CLEAR,
225
+ {}
226
+ );
227
+ });
228
+ });
229
+ describe('#locusParticipantsUpdate', () => {
230
+ it('should send member update event with session info', () => {
231
+ const members = createMembers({url: url1});
232
+ Trigger.trigger = sinon.stub();
233
+ const fakePayload = {
234
+ participants: {
235
+ forEach: sinon.stub(),
236
+ },
237
+ isReplace: true,
238
+ };
239
+
240
+ members.locusParticipantsUpdate(fakePayload);
241
+
242
+ assert.calledWith(
243
+ Trigger.trigger,
244
+ members,
245
+ {
246
+ file: 'members',
247
+ function: 'locusParticipantsUpdate',
248
+ },
249
+ EVENT_TRIGGERS.MEMBERS_UPDATE,
250
+ {
251
+ delta: {added: [], updated: []},
252
+ full: {},
253
+ isReplace: true,
254
+ }
255
+ );
256
+ });
257
+ });
140
258
  describe('#sendDialPadKey', () => {
141
259
  it('should throw a rejection when calling sendDialPadKey with no tones', async () => {
142
260
  const members = createMembers({url: url1});
@@ -156,7 +274,13 @@ describe('plugin-meetings', () => {
156
274
 
157
275
  members.membersCollection.setAll(fakeMembersCollection);
158
276
  await members.sendDialPadKey('1', 'test1');
159
- assert.calledWith(MembersUtil.genderateSendDTMFOptions, 'https://fakeURL.com', '1', 'test1', url1);
277
+ assert.calledWith(
278
+ MembersUtil.genderateSendDTMFOptions,
279
+ 'https://fakeURL.com',
280
+ '1',
281
+ 'test1',
282
+ url1
283
+ );
160
284
  });
161
285
 
162
286
  it('should call the sendDialPadKey method on membersRequest if the member is valid', async () => {
@@ -192,12 +316,106 @@ describe('plugin-meetings', () => {
192
316
  });
193
317
  });
194
318
 
319
+ describe('#assignRoles', () => {
320
+ const setup = (locusUrl) => {
321
+ const members = createMembers({url: locusUrl});
322
+
323
+ const spies = {
324
+ generateRoleAssignmentMemberOptions: sandbox.spy(
325
+ MembersUtil,
326
+ 'generateRoleAssignmentMemberOptions'
327
+ ),
328
+ assignRolesMember: sandbox.spy(members.membersRequest, 'assignRolesMember'),
329
+ };
330
+
331
+ return {members, spies};
332
+ };
333
+
334
+ const checkInvalid = async (resultPromise, expectedMessage, spies) => {
335
+ await assert.isRejected(resultPromise, ParameterError, expectedMessage);
336
+ assert.notCalled(spies.generateRoleAssignmentMemberOptions);
337
+ assert.notCalled(spies.assignRolesMember);
338
+ };
339
+
340
+ const checkValid = async (
341
+ resultPromise,
342
+ spies,
343
+ expectedMemberId,
344
+ expectedRoles,
345
+ expectedLocusUrl
346
+ ) => {
347
+ await assert.isFulfilled(resultPromise);
348
+ assert.calledOnceWithExactly(
349
+ spies.generateRoleAssignmentMemberOptions,
350
+ expectedMemberId,
351
+ expectedRoles,
352
+ expectedLocusUrl
353
+ );
354
+ assert.calledOnceWithExactly(spies.assignRolesMember, {
355
+ memberId: expectedMemberId,
356
+ roles: expectedRoles,
357
+ locusUrl: expectedLocusUrl,
358
+ });
359
+ assert.strictEqual(resultPromise, spies.assignRolesMember.getCall(0).returnValue);
360
+ };
361
+
362
+ it('should not make a request if there is no member id', async () => {
363
+ const {members, spies} = setup(url1);
364
+
365
+ const resultPromise = members.assignRoles();
366
+
367
+ await checkInvalid(
368
+ resultPromise,
369
+ 'The member id must be defined to assign the roles to a member.',
370
+ spies
371
+ );
372
+ });
373
+
374
+ it('should not make a request if there is no locus url', async () => {
375
+ const {members, spies} = setup();
376
+
377
+ const resultPromise = members.assignRoles(uuid.v4());
378
+
379
+ await checkInvalid(
380
+ resultPromise,
381
+ 'The associated locus url for this meetings members object must be defined.',
382
+ spies
383
+ );
384
+ });
385
+
386
+ it('should make the correct request when called with roles', async () => {
387
+ const memberId = uuid.v4();
388
+ const {members, spies} = setup(url1);
389
+
390
+ const resultPromise = members.assignRoles(memberId, [
391
+ {type: 'PRESENTER', hasRole: true},
392
+ {type: 'MODERATOR', hasRole: false},
393
+ {type: 'COHOST', hasRole: true},
394
+ ]);
395
+
396
+ await checkValid(
397
+ resultPromise,
398
+ spies,
399
+ memberId,
400
+ [
401
+ {type: 'PRESENTER', hasRole: true},
402
+ {type: 'MODERATOR', hasRole: false},
403
+ {type: 'COHOST', hasRole: true},
404
+ ],
405
+ url1
406
+ );
407
+ });
408
+ });
409
+
195
410
  describe('#raiseOrLowerHand', () => {
196
411
  const setup = (locusUrl) => {
197
412
  const members = createMembers({url: locusUrl});
198
413
 
199
414
  const spies = {
200
- generateRaiseHandMemberOptions: sandbox.spy(MembersUtil, 'generateRaiseHandMemberOptions'),
415
+ generateRaiseHandMemberOptions: sandbox.spy(
416
+ MembersUtil,
417
+ 'generateRaiseHandMemberOptions'
418
+ ),
201
419
  raiseOrLowerHandMember: sandbox.spy(members.membersRequest, 'raiseOrLowerHandMember'),
202
420
  };
203
421
 
@@ -210,10 +428,25 @@ describe('plugin-meetings', () => {
210
428
  assert.notCalled(spies.raiseOrLowerHandMember);
211
429
  };
212
430
 
213
- const checkValid = async (resultPromise, spies, expectedMemberId, expectedRaise, expectedLocusUrl) => {
431
+ const checkValid = async (
432
+ resultPromise,
433
+ spies,
434
+ expectedMemberId,
435
+ expectedRaise,
436
+ expectedLocusUrl
437
+ ) => {
214
438
  await assert.isFulfilled(resultPromise);
215
- assert.calledOnceWithExactly(spies.generateRaiseHandMemberOptions, expectedMemberId, expectedRaise, expectedLocusUrl);
216
- assert.calledOnceWithExactly(spies.raiseOrLowerHandMember, {memberId: expectedMemberId, raised: expectedRaise, locusUrl: expectedLocusUrl});
439
+ assert.calledOnceWithExactly(
440
+ spies.generateRaiseHandMemberOptions,
441
+ expectedMemberId,
442
+ expectedRaise,
443
+ expectedLocusUrl
444
+ );
445
+ assert.calledOnceWithExactly(spies.raiseOrLowerHandMember, {
446
+ memberId: expectedMemberId,
447
+ raised: expectedRaise,
448
+ locusUrl: expectedLocusUrl,
449
+ });
217
450
  assert.strictEqual(resultPromise, spies.raiseOrLowerHandMember.getCall(0).returnValue);
218
451
  };
219
452
 
@@ -222,7 +455,11 @@ describe('plugin-meetings', () => {
222
455
 
223
456
  const resultPromise = members.raiseOrLowerHand();
224
457
 
225
- await checkInvalid(resultPromise, 'The member id must be defined to raise/lower the hand of the member.', spies);
458
+ await checkInvalid(
459
+ resultPromise,
460
+ 'The member id must be defined to raise/lower the hand of the member.',
461
+ spies
462
+ );
226
463
  });
227
464
 
228
465
  it('should not make a request if there is no locus url', async () => {
@@ -230,7 +467,11 @@ describe('plugin-meetings', () => {
230
467
 
231
468
  const resultPromise = members.raiseOrLowerHand(uuid.v4());
232
469
 
233
- await checkInvalid(resultPromise, 'The associated locus url for this meetings members object must be defined.', spies);
470
+ await checkInvalid(
471
+ resultPromise,
472
+ 'The associated locus url for this meetings members object must be defined.',
473
+ spies
474
+ );
234
475
  });
235
476
 
236
477
  it('should make the correct request when called with raise as true', async () => {
@@ -266,7 +507,10 @@ describe('plugin-meetings', () => {
266
507
  const members = createMembers({url: locusUrl});
267
508
 
268
509
  const spies = {
269
- generateLowerAllHandsMemberOptions: sandbox.spy(MembersUtil, 'generateLowerAllHandsMemberOptions'),
510
+ generateLowerAllHandsMemberOptions: sandbox.spy(
511
+ MembersUtil,
512
+ 'generateLowerAllHandsMemberOptions'
513
+ ),
270
514
  lowerAllHandsMember: sandbox.spy(members.membersRequest, 'lowerAllHandsMember'),
271
515
  };
272
516
 
@@ -279,10 +523,22 @@ describe('plugin-meetings', () => {
279
523
  assert.notCalled(spies.lowerAllHandsMember);
280
524
  };
281
525
 
282
- const checkValid = async (resultPromise, spies, expectedRequestingMemberId, expectedLocusUrl) => {
526
+ const checkValid = async (
527
+ resultPromise,
528
+ spies,
529
+ expectedRequestingMemberId,
530
+ expectedLocusUrl
531
+ ) => {
283
532
  await assert.isFulfilled(resultPromise);
284
- assert.calledOnceWithExactly(spies.generateLowerAllHandsMemberOptions, expectedRequestingMemberId, expectedLocusUrl);
285
- assert.calledOnceWithExactly(spies.lowerAllHandsMember, {requestingParticipantId: expectedRequestingMemberId, locusUrl: expectedLocusUrl});
533
+ assert.calledOnceWithExactly(
534
+ spies.generateLowerAllHandsMemberOptions,
535
+ expectedRequestingMemberId,
536
+ expectedLocusUrl
537
+ );
538
+ assert.calledOnceWithExactly(spies.lowerAllHandsMember, {
539
+ requestingParticipantId: expectedRequestingMemberId,
540
+ locusUrl: expectedLocusUrl,
541
+ });
286
542
  assert.strictEqual(resultPromise, spies.lowerAllHandsMember.getCall(0).returnValue);
287
543
  };
288
544
 
@@ -291,7 +547,11 @@ describe('plugin-meetings', () => {
291
547
 
292
548
  const resultPromise = members.lowerAllHands();
293
549
 
294
- await checkInvalid(resultPromise, 'The requestingMemberId must be defined to lower all hands in a meeting.', spies);
550
+ await checkInvalid(
551
+ resultPromise,
552
+ 'The requestingMemberId must be defined to lower all hands in a meeting.',
553
+ spies
554
+ );
295
555
  });
296
556
 
297
557
  it('should not make a request if there is no locus url', async () => {
@@ -299,7 +559,11 @@ describe('plugin-meetings', () => {
299
559
 
300
560
  const resultPromise = members.lowerAllHands(uuid.v4());
301
561
 
302
- await checkInvalid(resultPromise, 'The associated locus url for this meetings members object must be defined.', spies);
562
+ await checkInvalid(
563
+ resultPromise,
564
+ 'The associated locus url for this meetings members object must be defined.',
565
+ spies
566
+ );
303
567
  });
304
568
 
305
569
  it('should make the correct request when called with requestingMemberId', async () => {
@@ -311,5 +575,251 @@ describe('plugin-meetings', () => {
311
575
  await checkValid(resultPromise, spies, requestingMemberId, url1);
312
576
  });
313
577
  });
578
+
579
+ describe('#editDisplayName', () => {
580
+ const setup = (locusUrl) => {
581
+ const members = createMembers({url: locusUrl});
582
+
583
+ const spies = {
584
+ generateEditDisplayNameMemberOptions: sandbox.spy(
585
+ MembersUtil,
586
+ 'generateEditDisplayNameMemberOptions'
587
+ ),
588
+ editDisplayNameMember: sandbox.spy(members.membersRequest, 'editDisplayNameMember'),
589
+ };
590
+
591
+ return {members, spies};
592
+ };
593
+
594
+ const checkInvalid = async (resultPromise, expectedMessage, spies) => {
595
+ await assert.isRejected(resultPromise, ParameterError, expectedMessage);
596
+ assert.notCalled(spies.generateEditDisplayNameMemberOptions);
597
+ assert.notCalled(spies.editDisplayNameMember);
598
+ };
599
+
600
+ const checkValid = async (
601
+ resultPromise,
602
+ spies,
603
+ expectedMemberId,
604
+ expectedRequestingParticipantId,
605
+ expectedAlias,
606
+ expectedLocusUrl
607
+ ) => {
608
+ await assert.isFulfilled(resultPromise);
609
+ assert.calledOnceWithExactly(
610
+ spies.generateEditDisplayNameMemberOptions,
611
+ expectedMemberId,
612
+ expectedRequestingParticipantId,
613
+ expectedAlias,
614
+ expectedLocusUrl
615
+ );
616
+ assert.calledOnceWithExactly(spies.editDisplayNameMember, {
617
+ memberId: expectedMemberId,
618
+ requestingParticipantId: expectedRequestingParticipantId,
619
+ alias: expectedAlias,
620
+ locusUrl: expectedLocusUrl,
621
+ });
622
+ assert.strictEqual(resultPromise, spies.editDisplayNameMember.getCall(0).returnValue);
623
+ };
624
+
625
+ it('should not make a request if there is no memberId', async () => {
626
+ const {members, spies} = setup(url1);
627
+
628
+ const resultPromise = members.editDisplayName();
629
+
630
+ await checkInvalid(
631
+ resultPromise,
632
+ 'The member id must be defined to edit display name of the member.',
633
+ spies
634
+ );
635
+ });
636
+
637
+ it('should not make a request if there is no locus url', async () => {
638
+ const {members, spies} = setup();
639
+
640
+ const resultPromise = members.editDisplayName(uuid.v4());
641
+
642
+ await checkInvalid(
643
+ resultPromise,
644
+ 'The associated locus url for this meetings members object must be defined.',
645
+ spies
646
+ );
647
+ });
648
+
649
+ it('should make the correct request when called with respective parameters', async () => {
650
+ const requestingParticipantId = uuid.v4();
651
+ const memberId = uuid.v4();
652
+ const alias = 'aliasName';
653
+ const {members, spies} = setup(url1);
654
+
655
+ const resultPromise = members.editDisplayName(memberId, requestingParticipantId, alias);
656
+
657
+ await checkValid(resultPromise, spies, memberId, requestingParticipantId, alias, url1);
658
+ });
659
+ });
660
+
661
+ describe('findMemberByCsi()', () => {
662
+ let members;
663
+
664
+ // fake collection that contains all combinations of members data structure (with respect to CSIs)
665
+ const fakeCollection = {
666
+ oneWithoutDevices: {
667
+ participant: {},
668
+ },
669
+ oneWithEmptyDevices: {
670
+ participant: {
671
+ devices: [],
672
+ },
673
+ },
674
+ oneWithDevicesWithoutCsis: {
675
+ participant: {
676
+ devices: [
677
+ {
678
+ url: 'https://fakeURL1.com',
679
+ deviceType: 'SIP',
680
+ state: 'JOINED',
681
+ csis: [],
682
+ },
683
+ {
684
+ url: 'dialout:///fakeagain',
685
+ deviceType: 'PROVISIONAL',
686
+ state: 'JOINED',
687
+ },
688
+ ],
689
+ },
690
+ id: 'abc-123-abc-123',
691
+ status: 'IN_MEETING',
692
+ },
693
+ oneWithSomeCsis: {
694
+ participant: {
695
+ devices: [
696
+ {
697
+ url: 'https://fakeURL2.com',
698
+ deviceType: 'SIP',
699
+ state: 'JOINED',
700
+ csis: [1000, 1001, 1002],
701
+ },
702
+ {
703
+ url: 'https://fakeURL3.com',
704
+ deviceType: 'SIP',
705
+ state: 'JOINED',
706
+ csis: [2000, 2001, 2002],
707
+ },
708
+ ],
709
+ },
710
+ },
711
+ };
712
+
713
+ beforeEach(() => {
714
+ members = createMembers({url: url1});
715
+ members.membersCollection.setAll(fakeCollection);
716
+ });
717
+
718
+ it('returns undefined if member not found', () => {
719
+ assert.strictEqual(members.findMemberByCsi(123), undefined);
720
+ });
721
+
722
+ it('returns correct member when CSI matches the first device', () => {
723
+ assert.strictEqual(members.findMemberByCsi(1001), fakeCollection.oneWithSomeCsis);
724
+ });
725
+
726
+ it('returns correct member when CSI matches the second device', () => {
727
+ assert.strictEqual(members.findMemberByCsi(2001), fakeCollection.oneWithSomeCsis);
728
+ });
729
+ });
730
+
731
+ describe('getCsisForMember()', () => {
732
+ let members;
733
+
734
+ // fake collection that contains all combinations of members data structure (with respect to CSIs)
735
+ const fakeCollection = {
736
+ oneWithoutParticipant: {
737
+ id: 'oneWithoutParticipant',
738
+ },
739
+ oneWithoutDevices: {
740
+ id: 'oneWithoutDevices',
741
+ participant: {},
742
+ },
743
+ oneWithEmptyDevices: {
744
+ id: 'oneWithEmptyDevices',
745
+ participant: {
746
+ devices: [],
747
+ },
748
+ },
749
+ oneWithDevicesWithoutCsis: {
750
+ id: 'oneWithDevicesWithoutCsis',
751
+ participant: {
752
+ devices: [
753
+ {
754
+ url: 'https://fakeURL1.com',
755
+ deviceType: 'SIP',
756
+ state: 'JOINED',
757
+ mediaSessions: [],
758
+ },
759
+ {
760
+ url: 'dialout:///fakeagain',
761
+ deviceType: 'PROVISIONAL',
762
+ state: 'JOINED',
763
+ },
764
+ ],
765
+ },
766
+ status: 'IN_MEETING',
767
+ },
768
+ oneWithSomeCsis: {
769
+ id: 'oneWithSomeCsis',
770
+ participant: {
771
+ devices: [
772
+ {
773
+ url: 'https://fakeURL2.com',
774
+ deviceType: 'SIP',
775
+ state: 'JOINED',
776
+ mediaSessions: [
777
+ {mediaType: 'audio', mediaContent: 'main', csi: 1000},
778
+ {mediaType: 'video', mediaContent: 'main', csi: 1001},
779
+ {mediaType: 'video', mediaContent: 'content', csi: 1002},
780
+ ],
781
+ },
782
+ {
783
+ url: 'https://fakeURL3.com',
784
+ deviceType: 'SIP',
785
+ state: 'JOINED',
786
+ mediaSessions: [
787
+ {mediaType: 'audio', mediaContent: 'main', csi: 2000},
788
+ {mediaType: 'video', mediaContent: 'main', csi: 2001},
789
+ {mediaType: 'video', mediaContent: 'content', csi: 2002},
790
+ ],
791
+ },
792
+ ],
793
+ },
794
+ },
795
+ };
796
+
797
+ beforeEach(() => {
798
+ members = createMembers({url: url1});
799
+ members.membersCollection.setAll(fakeCollection);
800
+ });
801
+
802
+ it('returns empty array if member not found', () => {
803
+ assert.deepEqual(members.getCsisForMember('wrong id'), []);
804
+ });
805
+
806
+ it('returns empty array if member does not have CSIs', () => {
807
+ assert.deepEqual(members.getCsisForMember('oneWithoutParticipant'), []);
808
+ assert.deepEqual(members.getCsisForMember('oneWithoutDevices'), []);
809
+ assert.deepEqual(members.getCsisForMember('oneWithEmptyDevices'), []);
810
+ assert.deepEqual(members.getCsisForMember('oneWithDevicesWithoutCsis'), []);
811
+ });
812
+
813
+ it('returns empty array if mediaType and mediaContent do not match', () => {
814
+ assert.deepEqual(members.getCsisForMember('oneWithSomeCsis', 'audio', 'content'), []);
815
+ });
816
+
817
+ it('returns correct CSI values when there is a match', () => {
818
+ assert.deepEqual(
819
+ members.getCsisForMember('oneWithSomeCsis', 'video', 'main'),
820
+ [1001, 2001]
821
+ );
822
+ });
823
+ });
314
824
  });
315
825
  });