@webex/plugin-meetings 3.0.0-beta.26 → 3.0.0-beta.261

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 (361) 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 +196 -28
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/enums.js +14 -2
  31. package/dist/controls-options-manager/enums.js.map +1 -1
  32. package/dist/controls-options-manager/index.js +109 -15
  33. package/dist/controls-options-manager/index.js.map +1 -1
  34. package/dist/controls-options-manager/types.js +7 -0
  35. package/dist/controls-options-manager/types.js.map +1 -0
  36. package/dist/controls-options-manager/util.js +309 -18
  37. package/dist/controls-options-manager/util.js.map +1 -1
  38. package/dist/index.js +112 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/interpretation/collection.js +23 -0
  41. package/dist/interpretation/collection.js.map +1 -0
  42. package/dist/interpretation/index.js +366 -0
  43. package/dist/interpretation/index.js.map +1 -0
  44. package/dist/interpretation/siLanguage.js +25 -0
  45. package/dist/interpretation/siLanguage.js.map +1 -0
  46. package/dist/locus-info/controlsUtils.js +91 -2
  47. package/dist/locus-info/controlsUtils.js.map +1 -1
  48. package/dist/locus-info/index.js +381 -62
  49. package/dist/locus-info/index.js.map +1 -1
  50. package/dist/locus-info/infoUtils.js +7 -1
  51. package/dist/locus-info/infoUtils.js.map +1 -1
  52. package/dist/locus-info/mediaSharesUtils.js +43 -1
  53. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  54. package/dist/locus-info/parser.js +224 -63
  55. package/dist/locus-info/parser.js.map +1 -1
  56. package/dist/locus-info/selfUtils.js +89 -14
  57. package/dist/locus-info/selfUtils.js.map +1 -1
  58. package/dist/media/index.js +58 -116
  59. package/dist/media/index.js.map +1 -1
  60. package/dist/media/properties.js +60 -121
  61. package/dist/media/properties.js.map +1 -1
  62. package/dist/meeting/in-meeting-actions.js +82 -2
  63. package/dist/meeting/in-meeting-actions.js.map +1 -1
  64. package/dist/meeting/index.js +3022 -2795
  65. package/dist/meeting/index.js.map +1 -1
  66. package/dist/meeting/locusMediaRequest.js +292 -0
  67. package/dist/meeting/locusMediaRequest.js.map +1 -0
  68. package/dist/meeting/muteState.js +230 -124
  69. package/dist/meeting/muteState.js.map +1 -1
  70. package/dist/meeting/request.js +256 -196
  71. package/dist/meeting/request.js.map +1 -1
  72. package/dist/meeting/util.js +601 -417
  73. package/dist/meeting/util.js.map +1 -1
  74. package/dist/meeting-info/index.js +70 -7
  75. package/dist/meeting-info/index.js.map +1 -1
  76. package/dist/meeting-info/meeting-info-v2.js +189 -51
  77. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  78. package/dist/meeting-info/util.js +1 -1
  79. package/dist/meeting-info/util.js.map +1 -1
  80. package/dist/meeting-info/utilv2.js +36 -36
  81. package/dist/meeting-info/utilv2.js.map +1 -1
  82. package/dist/meetings/collection.js +22 -0
  83. package/dist/meetings/collection.js.map +1 -1
  84. package/dist/meetings/index.js +372 -90
  85. package/dist/meetings/index.js.map +1 -1
  86. package/dist/meetings/meetings.types.js +7 -0
  87. package/dist/meetings/meetings.types.js.map +1 -0
  88. package/dist/meetings/request.js +2 -0
  89. package/dist/meetings/request.js.map +1 -1
  90. package/dist/meetings/util.js +88 -1
  91. package/dist/meetings/util.js.map +1 -1
  92. package/dist/member/index.js +49 -0
  93. package/dist/member/index.js.map +1 -1
  94. package/dist/member/types.js +25 -0
  95. package/dist/member/types.js.map +1 -0
  96. package/dist/member/util.js +121 -25
  97. package/dist/member/util.js.map +1 -1
  98. package/dist/members/collection.js +10 -0
  99. package/dist/members/collection.js.map +1 -1
  100. package/dist/members/index.js +86 -5
  101. package/dist/members/index.js.map +1 -1
  102. package/dist/members/request.js +106 -38
  103. package/dist/members/request.js.map +1 -1
  104. package/dist/members/types.js +15 -0
  105. package/dist/members/types.js.map +1 -0
  106. package/dist/members/util.js +316 -233
  107. package/dist/members/util.js.map +1 -1
  108. package/dist/metrics/constants.js +10 -5
  109. package/dist/metrics/constants.js.map +1 -1
  110. package/dist/metrics/index.js +1 -468
  111. package/dist/metrics/index.js.map +1 -1
  112. package/dist/multistream/mediaRequestManager.js +238 -49
  113. package/dist/multistream/mediaRequestManager.js.map +1 -1
  114. package/dist/multistream/receiveSlot.js +49 -16
  115. package/dist/multistream/receiveSlot.js.map +1 -1
  116. package/dist/multistream/receiveSlotManager.js +52 -34
  117. package/dist/multistream/receiveSlotManager.js.map +1 -1
  118. package/dist/multistream/remoteMedia.js +44 -18
  119. package/dist/multistream/remoteMedia.js.map +1 -1
  120. package/dist/multistream/remoteMediaGroup.js +60 -3
  121. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  122. package/dist/multistream/remoteMediaManager.js +209 -59
  123. package/dist/multistream/remoteMediaManager.js.map +1 -1
  124. package/dist/multistream/sendSlotManager.js +233 -0
  125. package/dist/multistream/sendSlotManager.js.map +1 -0
  126. package/dist/reachability/index.js +161 -57
  127. package/dist/reachability/index.js.map +1 -1
  128. package/dist/reachability/request.js +17 -8
  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 -97
  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 +155 -21
  161. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  162. package/dist/types/controls-options-manager/index.d.ts +17 -1
  163. package/dist/types/controls-options-manager/types.d.ts +43 -0
  164. package/dist/types/controls-options-manager/util.d.ts +1 -7
  165. package/dist/types/index.d.ts +6 -4
  166. package/dist/types/interpretation/collection.d.ts +5 -0
  167. package/dist/types/interpretation/index.d.ts +5 -0
  168. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  169. package/dist/types/locus-info/index.d.ts +57 -4
  170. package/dist/types/locus-info/parser.d.ts +65 -6
  171. package/dist/types/media/index.d.ts +2 -0
  172. package/dist/types/media/properties.d.ts +34 -48
  173. package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
  174. package/dist/types/meeting/index.d.ts +344 -506
  175. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  176. package/dist/types/meeting/muteState.d.ts +99 -23
  177. package/dist/types/meeting/request.d.ts +72 -43
  178. package/dist/types/meeting/util.d.ts +101 -1
  179. package/dist/types/meeting-info/index.d.ts +13 -1
  180. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  181. package/dist/types/meetings/collection.d.ts +8 -0
  182. package/dist/types/meetings/index.d.ts +86 -12
  183. package/dist/types/meetings/meetings.types.d.ts +4 -0
  184. package/dist/types/member/index.d.ts +13 -0
  185. package/dist/types/member/types.d.ts +32 -0
  186. package/dist/types/members/collection.d.ts +5 -0
  187. package/dist/types/members/index.d.ts +35 -2
  188. package/dist/types/members/request.d.ts +73 -9
  189. package/dist/types/members/types.d.ts +24 -0
  190. package/dist/types/members/util.d.ts +209 -1
  191. package/dist/types/metrics/constants.d.ts +9 -4
  192. package/dist/types/metrics/index.d.ts +4 -119
  193. package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
  194. package/dist/types/multistream/receiveSlot.d.ts +16 -12
  195. package/dist/types/multistream/receiveSlotManager.d.ts +19 -4
  196. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  197. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  198. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  199. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  200. package/dist/types/reachability/index.d.ts +44 -7
  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 +178 -18
  226. package/src/controls-options-manager/enums.ts +12 -0
  227. package/src/controls-options-manager/index.ts +116 -21
  228. package/src/controls-options-manager/types.ts +59 -0
  229. package/src/controls-options-manager/util.ts +294 -14
  230. package/src/index.ts +40 -0
  231. package/src/interpretation/README.md +60 -0
  232. package/src/interpretation/collection.ts +19 -0
  233. package/src/interpretation/index.ts +332 -0
  234. package/src/interpretation/siLanguage.ts +18 -0
  235. package/src/locus-info/controlsUtils.ts +108 -0
  236. package/src/locus-info/index.ts +412 -59
  237. package/src/locus-info/infoUtils.ts +10 -2
  238. package/src/locus-info/mediaSharesUtils.ts +48 -0
  239. package/src/locus-info/parser.ts +231 -39
  240. package/src/locus-info/selfUtils.ts +81 -5
  241. package/src/media/index.ts +100 -122
  242. package/src/media/properties.ts +70 -108
  243. package/src/meeting/in-meeting-actions.ts +163 -3
  244. package/src/meeting/index.ts +2471 -2306
  245. package/src/meeting/locusMediaRequest.ts +313 -0
  246. package/src/meeting/muteState.ts +229 -131
  247. package/src/meeting/request.ts +172 -121
  248. package/src/meeting/util.ts +588 -394
  249. package/src/meeting-info/index.ts +79 -8
  250. package/src/meeting-info/meeting-info-v2.ts +168 -14
  251. package/src/meeting-info/util.ts +1 -1
  252. package/src/meeting-info/utilv2.ts +23 -23
  253. package/src/meetings/collection.ts +20 -0
  254. package/src/meetings/index.ts +414 -108
  255. package/src/meetings/meetings.types.ts +12 -0
  256. package/src/meetings/request.ts +2 -0
  257. package/src/meetings/util.ts +103 -4
  258. package/src/member/index.ts +49 -0
  259. package/src/member/types.ts +38 -0
  260. package/src/member/util.ts +127 -25
  261. package/src/members/collection.ts +8 -0
  262. package/src/members/index.ts +107 -6
  263. package/src/members/request.ts +97 -17
  264. package/src/members/types.ts +28 -0
  265. package/src/members/util.ts +319 -240
  266. package/src/metrics/constants.ts +9 -4
  267. package/src/metrics/index.ts +1 -490
  268. package/src/multistream/mediaRequestManager.ts +289 -79
  269. package/src/multistream/receiveSlot.ts +55 -18
  270. package/src/multistream/receiveSlotManager.ts +46 -24
  271. package/src/multistream/remoteMedia.ts +27 -2
  272. package/src/multistream/remoteMediaGroup.ts +59 -0
  273. package/src/multistream/remoteMediaManager.ts +148 -30
  274. package/src/multistream/sendSlotManager.ts +170 -0
  275. package/src/reachability/index.ts +165 -37
  276. package/src/reachability/request.ts +17 -8
  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 +100 -104
  282. package/src/roap/turnDiscovery.ts +51 -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 +320 -261
  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 +163 -0
  299. package/test/unit/spec/controls-options-manager/util.js +576 -60
  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 +1283 -33
  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 +104 -37
  312. package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
  313. package/test/unit/spec/meeting/index.js +4095 -1913
  314. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  315. package/test/unit/spec/meeting/muteState.js +408 -208
  316. package/test/unit/spec/meeting/request.js +440 -45
  317. package/test/unit/spec/meeting/utils.js +679 -64
  318. package/test/unit/spec/meeting-info/index.js +293 -0
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +517 -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 +941 -151
  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/multistream/sendSlotManager.ts +242 -0
  337. package/test/unit/spec/reachability/index.ts +343 -9
  338. package/test/unit/spec/reachability/request.js +68 -0
  339. package/test/unit/spec/reconnection-manager/index.js +84 -9
  340. package/test/unit/spec/recording-controller/index.js +294 -218
  341. package/test/unit/spec/recording-controller/util.js +223 -96
  342. package/test/unit/spec/roap/index.ts +31 -51
  343. package/test/unit/spec/roap/request.ts +203 -85
  344. package/test/unit/spec/roap/turnDiscovery.ts +48 -13
  345. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  346. package/test/unit/spec/stats-analyzer/index.js +29 -2
  347. package/test/utils/constants.js +9 -0
  348. package/test/utils/integrationTestUtils.js +46 -0
  349. package/test/utils/testUtils.js +0 -45
  350. package/test/utils/webex-config.js +4 -0
  351. package/test/utils/webex-test-users.js +6 -3
  352. package/dist/meeting/effectsState.js +0 -262
  353. package/dist/meeting/effectsState.js.map +0 -1
  354. package/dist/metrics/config.js +0 -299
  355. package/dist/metrics/config.js.map +0 -1
  356. package/dist/types/meeting/effectsState.d.ts +0 -42
  357. package/dist/types/metrics/config.d.ts +0 -178
  358. package/src/index.js +0 -16
  359. package/src/meeting/effectsState.ts +0 -211
  360. package/src/metrics/config.ts +0 -495
  361. 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
  });