@webex/plugin-meetings 3.0.0-beta.3 → 3.0.0-beta.300

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