@webex/plugin-meetings 3.0.0-beta.24 → 3.0.0-beta.241

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 (360) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +28 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/queue.js +24 -9
  25. package/dist/common/queue.js.map +1 -1
  26. package/dist/config.js +5 -10
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +190 -27
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +319 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +106 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +366 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +357 -62
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +43 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +219 -63
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +49 -106
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +29 -90
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +90 -2
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +2593 -2558
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +292 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +228 -123
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +255 -195
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/util.js +601 -417
  75. package/dist/meeting/util.js.map +1 -1
  76. package/dist/meeting-info/index.js +48 -7
  77. package/dist/meeting-info/index.js.map +1 -1
  78. package/dist/meeting-info/meeting-info-v2.js +171 -51
  79. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  80. package/dist/meeting-info/util.js +1 -1
  81. package/dist/meeting-info/util.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +36 -36
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +370 -90
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +88 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -5
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +4 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +49 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +52 -34
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +213 -62
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/reachability/index.js +81 -30
  127. package/dist/reachability/index.js.map +1 -1
  128. package/dist/reachability/request.js +16 -7
  129. package/dist/reachability/request.js.map +1 -1
  130. package/dist/reconnection-manager/index.js +199 -154
  131. package/dist/reconnection-manager/index.js.map +1 -1
  132. package/dist/recording-controller/index.js +21 -2
  133. package/dist/recording-controller/index.js.map +1 -1
  134. package/dist/recording-controller/util.js +9 -8
  135. package/dist/recording-controller/util.js.map +1 -1
  136. package/dist/roap/index.js +23 -29
  137. package/dist/roap/index.js.map +1 -1
  138. package/dist/roap/request.js +112 -89
  139. package/dist/roap/request.js.map +1 -1
  140. package/dist/roap/turnDiscovery.js +96 -36
  141. package/dist/roap/turnDiscovery.js.map +1 -1
  142. package/dist/rtcMetrics/constants.js +12 -0
  143. package/dist/rtcMetrics/constants.js.map +1 -0
  144. package/dist/rtcMetrics/index.js +117 -0
  145. package/dist/rtcMetrics/index.js.map +1 -0
  146. package/dist/statsAnalyzer/index.js +51 -34
  147. package/dist/statsAnalyzer/index.js.map +1 -1
  148. package/dist/statsAnalyzer/mqaUtil.js +6 -6
  149. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  150. package/dist/types/annotation/annotation.types.d.ts +42 -0
  151. package/dist/types/annotation/constants.d.ts +31 -0
  152. package/dist/types/annotation/index.d.ts +117 -0
  153. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  154. package/dist/types/breakouts/events.d.ts +8 -0
  155. package/dist/types/breakouts/request.d.ts +22 -0
  156. package/dist/types/breakouts/utils.d.ts +15 -0
  157. package/dist/types/common/errors/webex-errors.d.ts +13 -1
  158. package/dist/types/common/queue.d.ts +9 -7
  159. package/dist/types/config.d.ts +1 -6
  160. package/dist/types/constants.d.ts +154 -21
  161. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  162. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  163. package/dist/types/controls-options-manager/index.d.ts +136 -0
  164. package/dist/types/controls-options-manager/types.d.ts +43 -0
  165. package/dist/types/controls-options-manager/util.d.ts +1 -0
  166. package/dist/types/index.d.ts +6 -4
  167. package/dist/types/interpretation/collection.d.ts +5 -0
  168. package/dist/types/interpretation/index.d.ts +5 -0
  169. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  170. package/dist/types/locus-info/index.d.ts +57 -4
  171. package/dist/types/locus-info/parser.d.ts +65 -6
  172. package/dist/types/media/index.d.ts +2 -0
  173. package/dist/types/media/properties.d.ts +22 -36
  174. package/dist/types/meeting/in-meeting-actions.d.ts +90 -2
  175. package/dist/types/meeting/index.d.ts +297 -491
  176. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  177. package/dist/types/meeting/muteState.d.ts +98 -22
  178. package/dist/types/meeting/request.d.ts +72 -43
  179. package/dist/types/meeting/util.d.ts +101 -1
  180. package/dist/types/meeting-info/index.d.ts +6 -1
  181. package/dist/types/meeting-info/meeting-info-v2.d.ts +30 -1
  182. package/dist/types/meetings/collection.d.ts +8 -0
  183. package/dist/types/meetings/index.d.ts +76 -12
  184. package/dist/types/meetings/meetings.types.d.ts +4 -0
  185. package/dist/types/member/index.d.ts +13 -0
  186. package/dist/types/member/types.d.ts +32 -0
  187. package/dist/types/members/collection.d.ts +5 -0
  188. package/dist/types/members/index.d.ts +35 -2
  189. package/dist/types/members/request.d.ts +73 -9
  190. package/dist/types/members/types.d.ts +24 -0
  191. package/dist/types/members/util.d.ts +209 -1
  192. package/dist/types/metrics/constants.d.ts +3 -4
  193. package/dist/types/metrics/index.d.ts +4 -119
  194. package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
  195. package/dist/types/multistream/receiveSlot.d.ts +16 -12
  196. package/dist/types/multistream/receiveSlotManager.d.ts +19 -4
  197. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  198. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  199. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  200. package/dist/types/reachability/index.d.ts +15 -3
  201. package/dist/types/reachability/request.d.ts +7 -3
  202. package/dist/types/reconnection-manager/index.d.ts +9 -0
  203. package/dist/types/recording-controller/index.d.ts +15 -1
  204. package/dist/types/recording-controller/util.d.ts +5 -4
  205. package/dist/types/roap/request.d.ts +15 -11
  206. package/dist/types/roap/turnDiscovery.d.ts +18 -1
  207. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  208. package/dist/types/rtcMetrics/index.d.ts +47 -0
  209. package/dist/types/statsAnalyzer/index.d.ts +6 -1
  210. package/package.json +23 -20
  211. package/src/annotation/annotation.types.ts +50 -0
  212. package/src/annotation/constants.ts +36 -0
  213. package/src/annotation/index.ts +328 -0
  214. package/src/breakouts/README.md +44 -14
  215. package/src/breakouts/breakout.ts +87 -9
  216. package/src/breakouts/edit-lock-error.ts +25 -0
  217. package/src/breakouts/events.ts +56 -0
  218. package/src/breakouts/index.ts +710 -10
  219. package/src/breakouts/request.ts +55 -0
  220. package/src/breakouts/utils.ts +57 -0
  221. package/src/common/errors/webex-errors.ts +27 -2
  222. package/src/common/logs/logger-proxy.ts +1 -1
  223. package/src/common/queue.ts +22 -8
  224. package/src/config.ts +4 -9
  225. package/src/constants.ts +175 -18
  226. package/src/controls-options-manager/constants.ts +5 -0
  227. package/src/controls-options-manager/enums.ts +18 -0
  228. package/src/controls-options-manager/index.ts +278 -0
  229. package/src/controls-options-manager/types.ts +59 -0
  230. package/src/controls-options-manager/util.ts +300 -0
  231. package/src/index.ts +39 -0
  232. package/src/interpretation/README.md +60 -0
  233. package/src/interpretation/collection.ts +19 -0
  234. package/src/interpretation/index.ts +332 -0
  235. package/src/interpretation/siLanguage.ts +18 -0
  236. package/src/locus-info/controlsUtils.ts +108 -0
  237. package/src/locus-info/index.ts +381 -59
  238. package/src/locus-info/infoUtils.ts +10 -2
  239. package/src/locus-info/mediaSharesUtils.ts +48 -0
  240. package/src/locus-info/parser.ts +224 -39
  241. package/src/locus-info/selfUtils.ts +81 -5
  242. package/src/media/index.ts +89 -109
  243. package/src/media/properties.ts +48 -87
  244. package/src/meeting/in-meeting-actions.ts +179 -3
  245. package/src/meeting/index.ts +2086 -2151
  246. package/src/meeting/locusMediaRequest.ts +313 -0
  247. package/src/meeting/muteState.ts +227 -130
  248. package/src/meeting/request.ts +171 -120
  249. package/src/meeting/util.ts +588 -395
  250. package/src/meeting-info/index.ts +54 -8
  251. package/src/meeting-info/meeting-info-v2.ts +148 -14
  252. package/src/meeting-info/util.ts +1 -1
  253. package/src/meeting-info/utilv2.ts +23 -23
  254. package/src/meetings/collection.ts +20 -0
  255. package/src/meetings/index.ts +407 -108
  256. package/src/meetings/meetings.types.ts +12 -0
  257. package/src/meetings/request.ts +2 -0
  258. package/src/meetings/util.ts +103 -4
  259. package/src/member/index.ts +49 -0
  260. package/src/member/types.ts +38 -0
  261. package/src/member/util.ts +127 -25
  262. package/src/members/collection.ts +8 -0
  263. package/src/members/index.ts +107 -6
  264. package/src/members/request.ts +97 -17
  265. package/src/members/types.ts +28 -0
  266. package/src/members/util.ts +319 -240
  267. package/src/metrics/constants.ts +3 -4
  268. package/src/metrics/index.ts +1 -490
  269. package/src/multistream/mediaRequestManager.ts +289 -79
  270. package/src/multistream/receiveSlot.ts +55 -18
  271. package/src/multistream/receiveSlotManager.ts +46 -24
  272. package/src/multistream/remoteMedia.ts +27 -2
  273. package/src/multistream/remoteMediaGroup.ts +59 -0
  274. package/src/multistream/remoteMediaManager.ts +150 -32
  275. package/src/reachability/index.ts +69 -17
  276. package/src/reachability/request.ts +16 -7
  277. package/src/reconnection-manager/index.ts +81 -54
  278. package/src/recording-controller/index.ts +20 -3
  279. package/src/recording-controller/util.ts +26 -9
  280. package/src/roap/index.ts +23 -30
  281. package/src/roap/request.ts +104 -95
  282. package/src/roap/turnDiscovery.ts +50 -25
  283. package/src/rtcMetrics/constants.ts +3 -0
  284. package/src/rtcMetrics/index.ts +100 -0
  285. package/src/statsAnalyzer/index.ts +73 -35
  286. package/src/statsAnalyzer/mqaUtil.ts +8 -10
  287. package/test/integration/spec/converged-space-meetings.js +233 -0
  288. package/test/integration/spec/journey.js +336 -259
  289. package/test/integration/spec/space-meeting.js +76 -3
  290. package/test/unit/spec/annotation/index.ts +418 -0
  291. package/test/unit/spec/breakouts/breakout.ts +142 -24
  292. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  293. package/test/unit/spec/breakouts/events.ts +89 -0
  294. package/test/unit/spec/breakouts/index.ts +1545 -48
  295. package/test/unit/spec/breakouts/request.ts +104 -0
  296. package/test/unit/spec/breakouts/utils.js +72 -0
  297. package/test/unit/spec/common/queue.js +31 -2
  298. package/test/unit/spec/controls-options-manager/index.js +287 -0
  299. package/test/unit/spec/controls-options-manager/util.js +582 -0
  300. package/test/unit/spec/fixture/locus.js +1 -0
  301. package/test/unit/spec/interpretation/collection.ts +15 -0
  302. package/test/unit/spec/interpretation/index.ts +589 -0
  303. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  304. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  305. package/test/unit/spec/locus-info/index.js +1169 -36
  306. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  307. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  308. package/test/unit/spec/locus-info/parser.js +62 -22
  309. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  310. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  311. package/test/unit/spec/media/index.ts +138 -28
  312. package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
  313. package/test/unit/spec/meeting/index.js +3514 -1746
  314. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  315. package/test/unit/spec/meeting/muteState.js +370 -208
  316. package/test/unit/spec/meeting/request.js +440 -45
  317. package/test/unit/spec/meeting/utils.js +671 -54
  318. package/test/unit/spec/meeting-info/index.js +181 -0
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  320. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  321. package/test/unit/spec/meetings/collection.js +14 -0
  322. package/test/unit/spec/meetings/index.js +939 -150
  323. package/test/unit/spec/meetings/utils.js +206 -2
  324. package/test/unit/spec/member/index.js +58 -4
  325. package/test/unit/spec/member/util.js +479 -35
  326. package/test/unit/spec/members/index.js +319 -1
  327. package/test/unit/spec/members/request.js +206 -27
  328. package/test/unit/spec/members/utils.js +184 -0
  329. package/test/unit/spec/metrics/index.js +1 -50
  330. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  331. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  332. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  333. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  334. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  335. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  336. package/test/unit/spec/reachability/index.ts +185 -7
  337. package/test/unit/spec/reachability/request.js +68 -0
  338. package/test/unit/spec/reconnection-manager/index.js +80 -6
  339. package/test/unit/spec/recording-controller/index.js +294 -218
  340. package/test/unit/spec/recording-controller/util.js +223 -96
  341. package/test/unit/spec/roap/index.ts +31 -51
  342. package/test/unit/spec/roap/request.ts +202 -85
  343. package/test/unit/spec/roap/turnDiscovery.ts +45 -10
  344. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  345. package/test/unit/spec/stats-analyzer/index.js +29 -2
  346. package/test/utils/constants.js +9 -0
  347. package/test/utils/integrationTestUtils.js +46 -0
  348. package/test/utils/testUtils.js +0 -45
  349. package/test/utils/webex-config.js +4 -0
  350. package/test/utils/webex-test-users.js +6 -3
  351. package/dist/meeting/effectsState.js +0 -262
  352. package/dist/meeting/effectsState.js.map +0 -1
  353. package/dist/metrics/config.js +0 -299
  354. package/dist/metrics/config.js.map +0 -1
  355. package/dist/types/meeting/effectsState.d.ts +0 -42
  356. package/dist/types/metrics/config.d.ts +0 -178
  357. package/src/index.js +0 -16
  358. package/src/meeting/effectsState.ts +0 -211
  359. package/src/metrics/config.ts +0 -495
  360. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -3,9 +3,14 @@ import {assert} from '@webex/test-helper-chai';
3
3
  import MockWebex from '@webex/test-helper-mock-webex';
4
4
  import Meetings from '@webex/plugin-meetings';
5
5
  import MeetingRequest from '@webex/plugin-meetings/src/meeting/request';
6
+ import uuid from 'uuid';
7
+ import { merge } from 'lodash';
8
+ import {IP_VERSION} from '@webex/plugin-meetings/src/constants';
9
+
6
10
 
7
11
  describe('plugin-meetings', () => {
8
12
  let meetingsRequest;
13
+ let locusDeltaRequestSpy;
9
14
 
10
15
  beforeEach(() => {
11
16
  const webex = new MockWebex({
@@ -14,7 +19,7 @@ describe('plugin-meetings', () => {
14
19
  },
15
20
  });
16
21
 
17
- webex.meetings.clientRegion = {
22
+ webex.meetings.geoHintInfo = {
18
23
  countryCode: 'US',
19
24
  regionCode: 'WEST-COAST',
20
25
  };
@@ -26,17 +31,47 @@ describe('plugin-meetings', () => {
26
31
  },
27
32
  };
28
33
 
34
+ webex.boundedStorage.get = sinon
35
+ .mock()
36
+ .returns(Promise.resolve(JSON.stringify({anycastEntryPoint: 'aws-eu-west-1'})));
37
+
38
+ const request = sinon.mock().returns(Promise.resolve({}));
39
+
29
40
  meetingsRequest = new MeetingRequest(
30
- {},
41
+ {
42
+ meeting: {
43
+ request,
44
+ locusInfo: {
45
+ sequence: {},
46
+ },
47
+ },
48
+ },
31
49
  {
32
50
  parent: webex,
33
51
  }
34
52
  );
35
53
 
36
- meetingsRequest.request = sinon.mock().returns(Promise.resolve({}));
54
+ meetingsRequest.request = request;
55
+ locusDeltaRequestSpy = sinon.spy(meetingsRequest, 'locusDeltaRequest');
37
56
  });
38
57
 
58
+ const checkRequest = (expectedParams) => {
59
+ assert.calledOnceWithExactly(locusDeltaRequestSpy, expectedParams);
60
+ assert.calledOnceWithExactly(
61
+ meetingsRequest.request,
62
+ merge(expectedParams, {body: {sequence: {}}})
63
+ );
64
+ };
65
+
39
66
  describe('meeting request library', () => {
67
+ beforeEach(() => {
68
+ sinon.stub(uuid, 'v4').returns('12345');
69
+ });
70
+
71
+ afterEach(() => {
72
+ uuid.v4.restore();
73
+ });
74
+
40
75
  describe('#sendDTMF', () => {
41
76
  it('sends a POST to the sendDtmf locus endpoint', async () => {
42
77
  const locusUrl = 'locusURL';
@@ -48,12 +83,18 @@ describe('plugin-meetings', () => {
48
83
  deviceUrl,
49
84
  tones,
50
85
  });
51
- const requestParams = meetingsRequest.request.getCall(0).args[0];
52
86
 
53
- assert.equal(requestParams.method, 'POST');
54
- assert.equal(requestParams.uri, `${locusUrl}/sendDtmf`);
55
- assert.equal(requestParams.body.dtmf.tones, tones);
56
- assert.equal(requestParams.body.deviceUrl, deviceUrl);
87
+ checkRequest({
88
+ method: 'POST',
89
+ uri: `${locusUrl}/sendDtmf`,
90
+ body: {
91
+ deviceUrl: 'deviceUrl',
92
+ dtmf: {
93
+ correlationId: '12345',
94
+ tones: '1234',
95
+ },
96
+ },
97
+ });
57
98
  });
58
99
  });
59
100
 
@@ -70,14 +111,19 @@ describe('plugin-meetings', () => {
70
111
  main: {width: 640, height: 480},
71
112
  content: {width: 1280, height: 720},
72
113
  });
73
- const requestParams = meetingsRequest.request.getCall(0).args[0];
74
114
 
75
- assert.equal(requestParams.method, 'PUT');
76
- assert.equal(requestParams.uri, `${locusUrl}/controls`);
77
- assert.equal(requestParams.body.layout.type, layoutType);
78
- assert.equal(requestParams.body.layout.deviceUrl, deviceUrl);
79
- assert.deepEqual(requestParams.body.layout.layoutParams, {
80
- renderInfo: {main: {width: 640, height: 480}, content: {width: 1280, height: 720}},
115
+ checkRequest({
116
+ method: 'PUT',
117
+ uri: `${locusUrl}/controls`,
118
+ body: {
119
+ layout: {
120
+ deviceUrl,
121
+ type: layoutType,
122
+ layoutParams: {
123
+ renderInfo: {main: {width: 640, height: 480}, content: {width: 1280, height: 720}},
124
+ },
125
+ },
126
+ },
81
127
  });
82
128
  });
83
129
 
@@ -191,22 +237,110 @@ describe('plugin-meetings', () => {
191
237
  assert.equal(requestParams.body.invitee.address, 'sipUrl');
192
238
  });
193
239
 
240
+ it('sends uses the locusClusterUrl if available', async () => {
241
+ const deviceUrl = 'deviceUrl';
242
+ const correlationId = 'random-uuid';
243
+ const roapMessage = 'roap-message';
244
+ const inviteeAddress = 'sipUrl';
245
+ const locusClusterUrl = 'locusClusterUrl';
246
+
247
+ await meetingsRequest.joinMeeting({
248
+ deviceUrl,
249
+ correlationId,
250
+ roapMessage,
251
+ locusClusterUrl,
252
+ inviteeAddress,
253
+ });
254
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
255
+
256
+ assert.equal(requestParams.method, 'POST');
257
+ assert.equal(
258
+ requestParams.uri,
259
+ 'https://locusClusterUrl/locus/api/v1/loci/call?alternateRedirect=true'
260
+ );
261
+ });
262
+
194
263
  it('adds deviceCapabilities to request when breakouts are supported', async () => {
195
264
  await meetingsRequest.joinMeeting({
196
- breakoutsSupported: true
265
+ breakoutsSupported: true,
197
266
  });
198
267
  const requestParams = meetingsRequest.request.getCall(0).args[0];
199
268
 
200
269
  assert.deepEqual(requestParams.body.deviceCapabilities, ['BREAKOUTS_SUPPORTED']);
201
270
  });
202
271
 
203
- it('does not add deviceCapabilities to request when breakouts are not supported', async () => {
272
+ it('adds deviceCapabilities to request when live annotation are supported', async () => {
273
+ await meetingsRequest.joinMeeting({
274
+ liveAnnotationSupported: true,
275
+ });
276
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
277
+ assert.deepEqual(requestParams.body.deviceCapabilities, ['ANNOTATION_ON_SHARE_SUPPORTED']);
278
+ });
279
+ it('adds deviceCapabilities to request when breakouts and live annotation are supported', async () => {
280
+ await meetingsRequest.joinMeeting({
281
+ liveAnnotationSupported: true,
282
+ breakoutsSupported: true,
283
+ });
284
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
285
+ assert.deepEqual(requestParams.body.deviceCapabilities, [
286
+ 'BREAKOUTS_SUPPORTED',
287
+ 'ANNOTATION_ON_SHARE_SUPPORTED',
288
+ ]);
289
+ });
290
+ it('does not add deviceCapabilities to request when breakouts and live annotation are not supported', async () => {
204
291
  await meetingsRequest.joinMeeting({});
205
292
 
206
293
  const requestParams = meetingsRequest.request.getCall(0).args[0];
207
294
 
208
295
  assert.deepEqual(requestParams.body.deviceCapabilities, undefined);
209
296
  });
297
+
298
+ it('adds deviceCapabilities and locale to request when they are provided', async () => {
299
+ await meetingsRequest.joinMeeting({
300
+ locale: 'en_UK',
301
+ deviceCapabilities: ['SERVER_AUDIO_ANNOUNCEMENT_SUPPORTED'],
302
+ });
303
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
304
+
305
+ assert.deepEqual(requestParams.body.deviceCapabilities, [
306
+ 'SERVER_AUDIO_ANNOUNCEMENT_SUPPORTED',
307
+ ]);
308
+ assert.deepEqual(requestParams.body.locale, 'en_UK');
309
+ });
310
+
311
+ it('does not add deviceCapabilities and locale to request when they are not provided', async () => {
312
+ await meetingsRequest.joinMeeting({});
313
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
314
+
315
+ assert.deepEqual(requestParams.body.deviceCapabilities, undefined);
316
+ assert.deepEqual(requestParams.body.locale, undefined);
317
+ });
318
+
319
+ it('includes joinCookie and ipver correctly', async () => {
320
+ const locusUrl = 'locusURL';
321
+ const deviceUrl = 'deviceUrl';
322
+ const correlationId = 'random-uuid';
323
+ const roapMessage = 'roap-message';
324
+ const permissionToken = 'permission-token';
325
+
326
+ await meetingsRequest.joinMeeting({
327
+ locusUrl,
328
+ deviceUrl,
329
+ correlationId,
330
+ roapMessage,
331
+ permissionToken,
332
+ ipVersion: IP_VERSION.ipv4_and_ipv6
333
+ });
334
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
335
+
336
+ assert.equal(requestParams.method, 'POST');
337
+ assert.equal(requestParams.uri, `${locusUrl}/participant?alternateRedirect=true`);
338
+ assert.deepEqual(requestParams.body.clientMediaPreferences, {
339
+ "joinCookie": {anycastEntryPoint: "aws-eu-west-1"},
340
+ "preferTranscoding": true,
341
+ "ipver": 1
342
+ });
343
+ });
210
344
  });
211
345
 
212
346
  describe('#pstn', () => {
@@ -222,14 +356,20 @@ describe('plugin-meetings', () => {
222
356
  correlationId,
223
357
  dialInUrl,
224
358
  });
225
- const requestParams = meetingsRequest.request.getCall(0).args[0];
226
359
 
227
- assert.equal(requestParams.method, 'POST');
228
- assert.equal(requestParams.uri, `${locusUrl}/participant`);
229
- assert.equal(requestParams.body.device.url, dialInUrl);
230
- assert.equal(requestParams.body.device.deviceType, 'PROVISIONAL');
231
- assert.equal(requestParams.body.device.provisionalType, 'DIAL_IN');
232
- assert.equal(requestParams.body.device.clientUrl, 'clientUrl');
360
+ checkRequest({
361
+ method: 'POST',
362
+ uri: `${locusUrl}/participant`,
363
+ body: {
364
+ device: {
365
+ url: dialInUrl,
366
+ deviceType: 'PROVISIONAL',
367
+ provisionalType: 'DIAL_IN',
368
+ clientUrl,
369
+ },
370
+ correlationId,
371
+ },
372
+ });
233
373
  });
234
374
 
235
375
  it('sends dial out pstn request', async () => {
@@ -246,15 +386,21 @@ describe('plugin-meetings', () => {
246
386
  dialOutUrl,
247
387
  phoneNumber,
248
388
  });
249
- const requestParams = meetingsRequest.request.getCall(0).args[0];
250
389
 
251
- assert.equal(requestParams.method, 'POST');
252
- assert.equal(requestParams.uri, `${locusUrl}/participant`);
253
- assert.equal(requestParams.body.device.url, dialOutUrl);
254
- assert.equal(requestParams.body.device.deviceType, 'PROVISIONAL');
255
- assert.equal(requestParams.body.device.provisionalType, 'DIAL_OUT');
256
- assert.equal(requestParams.body.device.clientUrl, 'clientUrl');
257
- assert.equal(requestParams.body.device.dialoutAddress, phoneNumber);
390
+ checkRequest({
391
+ method: 'POST',
392
+ uri: `${locusUrl}/participant`,
393
+ body: {
394
+ device: {
395
+ url: dialOutUrl,
396
+ deviceType: 'PROVISIONAL',
397
+ provisionalType: 'DIAL_OUT',
398
+ clientUrl,
399
+ dialoutAddress: phoneNumber,
400
+ },
401
+ correlationId,
402
+ },
403
+ });
258
404
  });
259
405
 
260
406
  it('sends disconnect phone audio request', async () => {
@@ -269,12 +415,92 @@ describe('plugin-meetings', () => {
269
415
  correlationId,
270
416
  phoneUrl,
271
417
  });
272
- const requestParams = meetingsRequest.request.getCall(0).args[0];
273
418
 
274
- assert.equal(requestParams.method, 'PUT');
275
- assert.equal(requestParams.uri, `${locusUrl}/participant/${selfId}/leave`);
276
- assert.equal(requestParams.body.device.url, phoneUrl);
277
- assert.equal(requestParams.body.device.deviceType, 'PROVISIONAL');
419
+ checkRequest({
420
+ method: 'PUT',
421
+ uri: `${locusUrl}/participant/${selfId}/leave`,
422
+ body: {
423
+ device: {
424
+ url: phoneUrl,
425
+ deviceType: 'PROVISIONAL',
426
+ },
427
+ correlationId,
428
+ },
429
+ });
430
+ });
431
+ });
432
+
433
+ describe('#leaveMeeting', () => {
434
+ it('sends the request to leave the meeting', async () => {
435
+ const locusUrl = 'locusUrl';
436
+ const selfId = 'selfId';
437
+ const correlationId = 'random-uuid';
438
+ const resourceId = 'resourceId';
439
+ const deviceUrl = 'deviceUrl';
440
+
441
+ meetingsRequest.config.meetings.deviceType = 'deviceType';
442
+
443
+ await meetingsRequest.leaveMeeting({
444
+ locusUrl,
445
+ selfId,
446
+ deviceUrl,
447
+ resourceId,
448
+ correlationId,
449
+ });
450
+
451
+ checkRequest({
452
+ method: 'PUT',
453
+ uri: 'locusUrl/participant/selfId/leave',
454
+ body: {
455
+ device: {deviceType: 'deviceType', url: 'deviceUrl'},
456
+ usingResource: 'resourceId',
457
+ correlationId: 'random-uuid',
458
+ },
459
+ });
460
+ });
461
+ });
462
+
463
+ describe('#acknowledgeMeeting', () => {
464
+ it('sends the request to acknowledge the meeting', async () => {
465
+ const locusUrl = 'locusUrl';
466
+ const correlationId = 'random-uuid';
467
+ const deviceUrl = 'deviceUrl';
468
+
469
+ meetingsRequest.config.meetings.deviceType = 'deviceType';
470
+
471
+ await meetingsRequest.acknowledgeMeeting({
472
+ locusUrl,
473
+ deviceUrl,
474
+ correlationId,
475
+ });
476
+
477
+ checkRequest({
478
+ method: 'PUT',
479
+ uri: 'locusUrl/participant/alert',
480
+ body: {
481
+ device: {deviceType: 'deviceType', url: 'deviceUrl'},
482
+ correlationId: 'random-uuid',
483
+ },
484
+ });
485
+ });
486
+ });
487
+
488
+ describe('#lockMeeting', () => {
489
+ it('sends request to lock the meeting', async () => {
490
+ const locusUrl = 'locusURL';
491
+
492
+ await meetingsRequest.lockMeeting({
493
+ locusUrl,
494
+ lock: true,
495
+ });
496
+
497
+ checkRequest({
498
+ method: 'PATCH',
499
+ uri: `${locusUrl}/controls`,
500
+ body: {
501
+ lock: {locked: true},
502
+ },
503
+ });
278
504
  });
279
505
  });
280
506
 
@@ -285,10 +511,11 @@ describe('plugin-meetings', () => {
285
511
  await meetingsRequest.endMeetingForAll({
286
512
  locusUrl,
287
513
  });
288
- const requestParams = meetingsRequest.request.getCall(0).args[0];
289
514
 
290
- assert.equal(requestParams.method, 'POST');
291
- assert.equal(requestParams.uri, `${locusUrl}/end`);
515
+ checkRequest({
516
+ method: 'POST',
517
+ uri: `${locusUrl}/end`,
518
+ });
292
519
  });
293
520
  });
294
521
 
@@ -341,12 +568,180 @@ describe('plugin-meetings', () => {
341
568
  locusUrl,
342
569
  requestingParticipantId,
343
570
  });
344
- const requestParams = meetingsRequest.request.getCall(0).args[0];
345
571
 
346
- assert.equal(requestParams.method, 'PUT');
347
- assert.equal(requestParams.uri, `${locusUrl}/controls`);
348
- assert.equal(requestParams.body.reactions.enabled, true);
349
- assert.equal(requestParams.body.requestingParticipantId, requestingParticipantId);
572
+ checkRequest({
573
+ method: 'PUT',
574
+ uri: `${locusUrl}/controls`,
575
+ body: {
576
+ reactions: {
577
+ enabled: true,
578
+ },
579
+ requestingParticipantId,
580
+ },
581
+ });
582
+ });
583
+ });
584
+
585
+ describe('#prepareLeaveMeetingRequestOptions', () => {
586
+ it('returns expected result', async () => {
587
+ const result = meetingsRequest.prepareLeaveMeetingRequestOptions({
588
+ locusUrl: 'locusUrl',
589
+ selfId: 'selfId',
590
+ correlationId: 'correlationId',
591
+ resourceId: 'resourceId',
592
+ deviceUrl: 'deviceUrl',
593
+ });
594
+
595
+ assert.deepEqual(result, {
596
+ body: {
597
+ correlationId: 'correlationId',
598
+ device: {
599
+ deviceType: undefined,
600
+ url: 'deviceUrl',
601
+ },
602
+ usingResource: 'resourceId',
603
+ },
604
+ method: 'PUT',
605
+ uri: 'locusUrl/participant/selfId/leave',
606
+ });
607
+ });
608
+ });
609
+
610
+ describe('#buildLeaveMeetingRequestOptions', () => {
611
+ it('calls expected functions and returns expected result', async () => {
612
+ // return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));
613
+ const prepareLeaveMeetingRequestOptionsSpy = sinon.spy(
614
+ meetingsRequest,
615
+ 'prepareLeaveMeetingRequestOptions'
616
+ );
617
+ const buildLocusDeltaRequestOptionsSpy = sinon.spy(
618
+ meetingsRequest,
619
+ 'buildLocusDeltaRequestOptions'
620
+ );
621
+
622
+ const inputOpts = {
623
+ locusUrl: 'locusUrl',
624
+ selfId: 'selfId',
625
+ correlationId: 'correlationId',
626
+ resourceId: 'resourceId',
627
+ deviceUrl: 'deviceUrl',
628
+ };
629
+
630
+ const result = meetingsRequest.buildLeaveMeetingRequestOptions(inputOpts);
631
+
632
+ assert.calledOnceWithExactly(prepareLeaveMeetingRequestOptionsSpy, inputOpts);
633
+ assert.calledOnceWithExactly(buildLocusDeltaRequestOptionsSpy, {
634
+ method: 'PUT',
635
+ uri: 'locusUrl/participant/selfId/leave',
636
+ body: {
637
+ device: {deviceType: undefined, url: 'deviceUrl'},
638
+ usingResource: 'resourceId',
639
+ correlationId: 'correlationId',
640
+ },
641
+ });
642
+
643
+ assert.deepEqual(result, {
644
+ body: {
645
+ correlationId: 'correlationId',
646
+ device: {
647
+ deviceType: undefined,
648
+ url: 'deviceUrl',
649
+ },
650
+ sequence: {},
651
+ usingResource: 'resourceId',
652
+ },
653
+ method: 'PUT',
654
+ uri: 'locusUrl/participant/selfId/leave',
655
+ });
656
+ });
657
+ });
658
+ });
659
+
660
+ describe('#declineMeeting', () => {
661
+ it('sends a request to decline the meeting', async () => {
662
+ const reason = 'reason';
663
+ const deviceUrl = 'deviceUrl';
664
+ const locusUrl = 'locusUrl';
665
+ meetingsRequest.config.meetings.deviceType = 'deviceType';
666
+
667
+ await meetingsRequest.declineMeeting({
668
+ locusUrl,
669
+ deviceUrl,
670
+ reason,
671
+ });
672
+
673
+ const expectedBody = {
674
+ device: {
675
+ deviceType: 'deviceType',
676
+ url: deviceUrl,
677
+ },
678
+ reason,
679
+ };
680
+
681
+ checkRequest({
682
+ method: 'PUT',
683
+ uri: `${locusUrl}/participant/decline`,
684
+ body: expectedBody,
685
+ });
686
+ });
687
+ });
688
+
689
+ describe('#getLocusStatusByUrl', () => {
690
+ it('check locus status', async () => {
691
+ const locusUrl = 'locusUrl';
692
+
693
+ await meetingsRequest.getLocusStatusByUrl(locusUrl);
694
+ assert.deepEqual(meetingsRequest.request.getCall(0).args[0], {
695
+ method: 'GET',
696
+ uri: locusUrl,
697
+ });
698
+ });
699
+ });
700
+
701
+ describe('#changeMeetingFloor', () => {
702
+ it('change meeting floor', async () => {
703
+ const options = {
704
+ disposition: 'GRANTED',
705
+ personUrl: 'personUrl',
706
+ deviceUrl: 'deviceUrl',
707
+ resourceId: 'resourceId',
708
+ resourceUrl: 'resourceUrl',
709
+ uri: 'optionsUrl',
710
+ annotationInfo: {
711
+ version: '1',
712
+ policy: 'Approval',
713
+ },
714
+ };
715
+
716
+ const expectBody = {
717
+ annotation: {
718
+ policy: 'Approval',
719
+ version: '1',
720
+ },
721
+ floor: {
722
+ beneficiary: {
723
+ devices: [
724
+ {
725
+ deviceType: undefined,
726
+ url: 'deviceUrl',
727
+ },
728
+ ],
729
+ url: 'personUrl',
730
+ },
731
+ disposition: 'GRANTED',
732
+ requester: {
733
+ url: 'personUrl',
734
+ },
735
+ },
736
+ resourceUrl: 'resourceUrl',
737
+ };
738
+
739
+ await meetingsRequest.changeMeetingFloor(options);
740
+
741
+ assert.deepEqual(meetingsRequest.request.getCall(0).args[0], {
742
+ method: 'PUT',
743
+ uri: 'optionsUrl',
744
+ body: expectBody,
350
745
  });
351
746
  });
352
747
  });