@webex/plugin-meetings 3.0.0-beta.39 → 3.0.0-beta.391

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 (393) hide show
  1. package/README.md +58 -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 +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +671 -81
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +45 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/no-meeting-info.js +51 -0
  17. package/dist/common/errors/no-meeting-info.js.map +1 -0
  18. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  19. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +48 -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/logs/request.js +5 -1
  25. package/dist/common/logs/request.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +5 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +242 -33
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  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 +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +110 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/interceptors/index.js +15 -0
  43. package/dist/interceptors/index.js.map +1 -0
  44. package/dist/interceptors/locusRetry.js +93 -0
  45. package/dist/interceptors/locusRetry.js.map +1 -0
  46. package/dist/interpretation/collection.js +23 -0
  47. package/dist/interpretation/collection.js.map +1 -0
  48. package/dist/interpretation/index.js +380 -0
  49. package/dist/interpretation/index.js.map +1 -0
  50. package/dist/interpretation/siLanguage.js +25 -0
  51. package/dist/interpretation/siLanguage.js.map +1 -0
  52. package/dist/locus-info/controlsUtils.js +91 -2
  53. package/dist/locus-info/controlsUtils.js.map +1 -1
  54. package/dist/locus-info/index.js +386 -62
  55. package/dist/locus-info/index.js.map +1 -1
  56. package/dist/locus-info/infoUtils.js +7 -1
  57. package/dist/locus-info/infoUtils.js.map +1 -1
  58. package/dist/locus-info/mediaSharesUtils.js +71 -1
  59. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  60. package/dist/locus-info/parser.js +249 -72
  61. package/dist/locus-info/parser.js.map +1 -1
  62. package/dist/locus-info/selfUtils.js +89 -14
  63. package/dist/locus-info/selfUtils.js.map +1 -1
  64. package/dist/media/index.js +65 -102
  65. package/dist/media/index.js.map +1 -1
  66. package/dist/media/properties.js +73 -124
  67. package/dist/media/properties.js.map +1 -1
  68. package/dist/mediaQualityMetrics/config.js +135 -330
  69. package/dist/mediaQualityMetrics/config.js.map +1 -1
  70. package/dist/meeting/in-meeting-actions.js +86 -2
  71. package/dist/meeting/in-meeting-actions.js.map +1 -1
  72. package/dist/meeting/index.js +4075 -2827
  73. package/dist/meeting/index.js.map +1 -1
  74. package/dist/meeting/locusMediaRequest.js +292 -0
  75. package/dist/meeting/locusMediaRequest.js.map +1 -0
  76. package/dist/meeting/muteState.js +224 -136
  77. package/dist/meeting/muteState.js.map +1 -1
  78. package/dist/meeting/request.js +177 -152
  79. package/dist/meeting/request.js.map +1 -1
  80. package/dist/meeting/util.js +672 -417
  81. package/dist/meeting/util.js.map +1 -1
  82. package/dist/meeting-info/index.js +73 -7
  83. package/dist/meeting-info/index.js.map +1 -1
  84. package/dist/meeting-info/meeting-info-v2.js +192 -51
  85. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  86. package/dist/meeting-info/util.js +1 -1
  87. package/dist/meeting-info/util.js.map +1 -1
  88. package/dist/meeting-info/utilv2.js +36 -36
  89. package/dist/meeting-info/utilv2.js.map +1 -1
  90. package/dist/meetings/collection.js +39 -0
  91. package/dist/meetings/collection.js.map +1 -1
  92. package/dist/meetings/index.js +484 -119
  93. package/dist/meetings/index.js.map +1 -1
  94. package/dist/meetings/meetings.types.js +7 -0
  95. package/dist/meetings/meetings.types.js.map +1 -0
  96. package/dist/meetings/request.js +2 -0
  97. package/dist/meetings/request.js.map +1 -1
  98. package/dist/meetings/util.js +73 -7
  99. package/dist/meetings/util.js.map +1 -1
  100. package/dist/member/index.js +58 -0
  101. package/dist/member/index.js.map +1 -1
  102. package/dist/member/types.js +25 -0
  103. package/dist/member/types.js.map +1 -0
  104. package/dist/member/util.js +132 -25
  105. package/dist/member/util.js.map +1 -1
  106. package/dist/members/collection.js +10 -0
  107. package/dist/members/collection.js.map +1 -1
  108. package/dist/members/index.js +102 -6
  109. package/dist/members/index.js.map +1 -1
  110. package/dist/members/request.js +106 -38
  111. package/dist/members/request.js.map +1 -1
  112. package/dist/members/types.js +15 -0
  113. package/dist/members/types.js.map +1 -0
  114. package/dist/members/util.js +326 -232
  115. package/dist/members/util.js.map +1 -1
  116. package/dist/metrics/constants.js +18 -1
  117. package/dist/metrics/constants.js.map +1 -1
  118. package/dist/metrics/index.js +1 -446
  119. package/dist/metrics/index.js.map +1 -1
  120. package/dist/multistream/mediaRequestManager.js +223 -32
  121. package/dist/multistream/mediaRequestManager.js.map +1 -1
  122. package/dist/multistream/receiveSlot.js +10 -0
  123. package/dist/multistream/receiveSlot.js.map +1 -1
  124. package/dist/multistream/receiveSlotManager.js +39 -36
  125. package/dist/multistream/receiveSlotManager.js.map +1 -1
  126. package/dist/multistream/remoteMedia.js +3 -1
  127. package/dist/multistream/remoteMedia.js.map +1 -1
  128. package/dist/multistream/remoteMediaGroup.js +76 -5
  129. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  130. package/dist/multistream/remoteMediaManager.js +366 -104
  131. package/dist/multistream/remoteMediaManager.js.map +1 -1
  132. package/dist/multistream/sendSlotManager.js +255 -0
  133. package/dist/multistream/sendSlotManager.js.map +1 -0
  134. package/dist/reachability/clusterReachability.js +356 -0
  135. package/dist/reachability/clusterReachability.js.map +1 -0
  136. package/dist/reachability/index.js +263 -390
  137. package/dist/reachability/index.js.map +1 -1
  138. package/dist/reachability/request.js +6 -4
  139. package/dist/reachability/request.js.map +1 -1
  140. package/dist/reachability/util.js +29 -0
  141. package/dist/reachability/util.js.map +1 -0
  142. package/dist/reconnection-manager/index.js +266 -202
  143. package/dist/reconnection-manager/index.js.map +1 -1
  144. package/dist/recording-controller/index.js +21 -2
  145. package/dist/recording-controller/index.js.map +1 -1
  146. package/dist/recording-controller/util.js +9 -8
  147. package/dist/recording-controller/util.js.map +1 -1
  148. package/dist/roap/index.js +51 -28
  149. package/dist/roap/index.js.map +1 -1
  150. package/dist/roap/request.js +48 -64
  151. package/dist/roap/request.js.map +1 -1
  152. package/dist/roap/turnDiscovery.js +220 -70
  153. package/dist/roap/turnDiscovery.js.map +1 -1
  154. package/dist/rtcMetrics/constants.js +12 -0
  155. package/dist/rtcMetrics/constants.js.map +1 -0
  156. package/dist/rtcMetrics/index.js +179 -0
  157. package/dist/rtcMetrics/index.js.map +1 -0
  158. package/dist/statsAnalyzer/index.js +357 -295
  159. package/dist/statsAnalyzer/index.js.map +1 -1
  160. package/dist/statsAnalyzer/mqaUtil.js +296 -156
  161. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  162. package/dist/types/annotation/annotation.types.d.ts +42 -0
  163. package/dist/types/annotation/constants.d.ts +31 -0
  164. package/dist/types/annotation/index.d.ts +117 -0
  165. package/dist/types/breakouts/events.d.ts +8 -0
  166. package/dist/types/breakouts/utils.d.ts +14 -0
  167. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  168. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  169. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  170. package/dist/types/common/logs/request.d.ts +2 -0
  171. package/dist/types/common/queue.d.ts +9 -7
  172. package/dist/types/config.d.ts +2 -7
  173. package/dist/types/constants.d.ts +203 -31
  174. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  175. package/dist/types/controls-options-manager/index.d.ts +17 -1
  176. package/dist/types/controls-options-manager/types.d.ts +43 -0
  177. package/dist/types/controls-options-manager/util.d.ts +1 -7
  178. package/dist/types/index.d.ts +6 -5
  179. package/dist/types/interceptors/index.d.ts +2 -0
  180. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  181. package/dist/types/interpretation/collection.d.ts +5 -0
  182. package/dist/types/interpretation/index.d.ts +5 -0
  183. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  184. package/dist/types/locus-info/index.d.ts +57 -4
  185. package/dist/types/locus-info/parser.d.ts +66 -6
  186. package/dist/types/media/index.d.ts +2 -0
  187. package/dist/types/media/properties.d.ts +34 -49
  188. package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
  189. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  190. package/dist/types/meeting/index.d.ts +567 -496
  191. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  192. package/dist/types/meeting/muteState.d.ts +93 -25
  193. package/dist/types/meeting/request.d.ts +64 -43
  194. package/dist/types/meeting/util.d.ts +117 -1
  195. package/dist/types/meeting-info/index.d.ts +13 -1
  196. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  197. package/dist/types/meetings/collection.d.ts +17 -0
  198. package/dist/types/meetings/index.d.ts +113 -21
  199. package/dist/types/meetings/meetings.types.d.ts +4 -0
  200. package/dist/types/member/index.d.ts +14 -0
  201. package/dist/types/member/types.d.ts +32 -0
  202. package/dist/types/members/collection.d.ts +5 -0
  203. package/dist/types/members/index.d.ts +35 -2
  204. package/dist/types/members/request.d.ts +73 -9
  205. package/dist/types/members/types.d.ts +25 -0
  206. package/dist/types/members/util.d.ts +214 -1
  207. package/dist/types/metrics/constants.d.ts +17 -0
  208. package/dist/types/metrics/index.d.ts +4 -111
  209. package/dist/types/multistream/mediaRequestManager.d.ts +72 -3
  210. package/dist/types/multistream/receiveSlot.d.ts +7 -3
  211. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  212. package/dist/types/multistream/remoteMedia.d.ts +3 -31
  213. package/dist/types/multistream/remoteMediaGroup.d.ts +2 -9
  214. package/dist/types/multistream/remoteMediaManager.d.ts +62 -2
  215. package/dist/types/multistream/sendSlotManager.d.ts +70 -0
  216. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  217. package/dist/types/reachability/index.d.ts +60 -95
  218. package/dist/types/reachability/request.d.ts +3 -1
  219. package/dist/types/reachability/util.d.ts +8 -0
  220. package/dist/types/reconnection-manager/index.d.ts +19 -0
  221. package/dist/types/recording-controller/index.d.ts +15 -1
  222. package/dist/types/recording-controller/util.d.ts +5 -4
  223. package/dist/types/roap/index.d.ts +2 -1
  224. package/dist/types/roap/request.d.ts +9 -8
  225. package/dist/types/roap/turnDiscovery.d.ts +39 -5
  226. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  227. package/dist/types/rtcMetrics/index.d.ts +61 -0
  228. package/dist/types/statsAnalyzer/index.d.ts +34 -12
  229. package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
  230. package/dist/types/webinar/collection.d.ts +16 -0
  231. package/dist/types/webinar/index.d.ts +5 -0
  232. package/dist/webinar/collection.js +44 -0
  233. package/dist/webinar/collection.js.map +1 -0
  234. package/dist/webinar/index.js +69 -0
  235. package/dist/webinar/index.js.map +1 -0
  236. package/package.json +22 -19
  237. package/src/annotation/annotation.types.ts +50 -0
  238. package/src/annotation/constants.ts +36 -0
  239. package/src/annotation/index.ts +328 -0
  240. package/src/breakouts/README.md +35 -11
  241. package/src/breakouts/breakout.ts +67 -9
  242. package/src/breakouts/events.ts +56 -0
  243. package/src/breakouts/index.ts +558 -59
  244. package/src/breakouts/utils.ts +42 -0
  245. package/src/common/errors/no-meeting-info.ts +24 -0
  246. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  247. package/src/common/errors/webex-errors.ts +44 -2
  248. package/src/common/logs/logger-proxy.ts +1 -1
  249. package/src/common/logs/request.ts +5 -1
  250. package/src/common/queue.ts +22 -8
  251. package/src/config.ts +4 -9
  252. package/src/constants.ts +229 -21
  253. package/src/controls-options-manager/enums.ts +12 -0
  254. package/src/controls-options-manager/index.ts +116 -21
  255. package/src/controls-options-manager/types.ts +59 -0
  256. package/src/controls-options-manager/util.ts +294 -14
  257. package/src/index.ts +44 -0
  258. package/src/interceptors/index.ts +3 -0
  259. package/src/interceptors/locusRetry.ts +67 -0
  260. package/src/interpretation/README.md +60 -0
  261. package/src/interpretation/collection.ts +19 -0
  262. package/src/interpretation/index.ts +349 -0
  263. package/src/interpretation/siLanguage.ts +18 -0
  264. package/src/locus-info/controlsUtils.ts +108 -0
  265. package/src/locus-info/index.ts +417 -59
  266. package/src/locus-info/infoUtils.ts +10 -2
  267. package/src/locus-info/mediaSharesUtils.ts +80 -0
  268. package/src/locus-info/parser.ts +258 -47
  269. package/src/locus-info/selfUtils.ts +81 -5
  270. package/src/media/index.ts +100 -108
  271. package/src/media/properties.ts +88 -117
  272. package/src/mediaQualityMetrics/config.ts +103 -238
  273. package/src/meeting/in-meeting-actions.ts +171 -3
  274. package/src/meeting/index.ts +3411 -2435
  275. package/src/meeting/locusMediaRequest.ts +313 -0
  276. package/src/meeting/muteState.ts +223 -136
  277. package/src/meeting/request.ts +155 -120
  278. package/src/meeting/util.ts +685 -395
  279. package/src/meeting-info/index.ts +81 -8
  280. package/src/meeting-info/meeting-info-v2.ts +170 -14
  281. package/src/meeting-info/util.ts +1 -1
  282. package/src/meeting-info/utilv2.ts +23 -23
  283. package/src/meetings/collection.ts +33 -0
  284. package/src/meetings/index.ts +507 -127
  285. package/src/meetings/meetings.types.ts +12 -0
  286. package/src/meetings/request.ts +2 -0
  287. package/src/meetings/util.ts +81 -12
  288. package/src/member/index.ts +58 -0
  289. package/src/member/types.ts +38 -0
  290. package/src/member/util.ts +141 -25
  291. package/src/members/collection.ts +8 -0
  292. package/src/members/index.ts +134 -8
  293. package/src/members/request.ts +97 -17
  294. package/src/members/types.ts +29 -0
  295. package/src/members/util.ts +333 -240
  296. package/src/metrics/constants.ts +17 -0
  297. package/src/metrics/index.ts +1 -469
  298. package/src/multistream/mediaRequestManager.ts +271 -56
  299. package/src/multistream/receiveSlot.ts +11 -4
  300. package/src/multistream/receiveSlotManager.ts +34 -24
  301. package/src/multistream/remoteMedia.ts +5 -3
  302. package/src/multistream/remoteMediaGroup.ts +78 -0
  303. package/src/multistream/remoteMediaManager.ts +248 -44
  304. package/src/multistream/sendSlotManager.ts +199 -0
  305. package/src/reachability/clusterReachability.ts +320 -0
  306. package/src/reachability/index.ts +229 -346
  307. package/src/reachability/request.ts +8 -4
  308. package/src/reachability/util.ts +24 -0
  309. package/src/reconnection-manager/index.ts +128 -97
  310. package/src/recording-controller/index.ts +20 -3
  311. package/src/recording-controller/util.ts +26 -9
  312. package/src/roap/index.ts +52 -23
  313. package/src/roap/request.ts +48 -67
  314. package/src/roap/turnDiscovery.ts +147 -49
  315. package/src/rtcMetrics/constants.ts +3 -0
  316. package/src/rtcMetrics/index.ts +166 -0
  317. package/src/statsAnalyzer/index.ts +457 -416
  318. package/src/statsAnalyzer/mqaUtil.ts +317 -170
  319. package/src/webinar/collection.ts +31 -0
  320. package/src/webinar/index.ts +62 -0
  321. package/test/integration/spec/converged-space-meetings.js +60 -3
  322. package/test/integration/spec/journey.js +320 -261
  323. package/test/integration/spec/space-meeting.js +76 -3
  324. package/test/unit/spec/annotation/index.ts +418 -0
  325. package/test/unit/spec/breakouts/breakout.ts +118 -28
  326. package/test/unit/spec/breakouts/events.ts +89 -0
  327. package/test/unit/spec/breakouts/index.ts +1349 -114
  328. package/test/unit/spec/breakouts/utils.js +52 -1
  329. package/test/unit/spec/common/queue.js +31 -2
  330. package/test/unit/spec/controls-options-manager/index.js +163 -0
  331. package/test/unit/spec/controls-options-manager/util.js +576 -60
  332. package/test/unit/spec/fixture/locus.js +1 -0
  333. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  334. package/test/unit/spec/interpretation/collection.ts +15 -0
  335. package/test/unit/spec/interpretation/index.ts +625 -0
  336. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  337. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  338. package/test/unit/spec/locus-info/index.js +1363 -37
  339. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  340. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  341. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  342. package/test/unit/spec/locus-info/parser.js +116 -35
  343. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  344. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  345. package/test/unit/spec/media/index.ts +173 -81
  346. package/test/unit/spec/media/properties.ts +2 -2
  347. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  348. package/test/unit/spec/meeting/index.js +6821 -2172
  349. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  350. package/test/unit/spec/meeting/muteState.js +402 -212
  351. package/test/unit/spec/meeting/request.js +473 -54
  352. package/test/unit/spec/meeting/utils.js +773 -67
  353. package/test/unit/spec/meeting-info/index.js +300 -0
  354. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  355. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  356. package/test/unit/spec/meetings/collection.js +26 -0
  357. package/test/unit/spec/meetings/index.js +1415 -213
  358. package/test/unit/spec/meetings/utils.js +229 -2
  359. package/test/unit/spec/member/index.js +61 -6
  360. package/test/unit/spec/member/util.js +510 -34
  361. package/test/unit/spec/members/index.js +432 -1
  362. package/test/unit/spec/members/request.js +206 -27
  363. package/test/unit/spec/members/utils.js +210 -0
  364. package/test/unit/spec/metrics/index.js +1 -50
  365. package/test/unit/spec/multistream/mediaRequestManager.ts +781 -114
  366. package/test/unit/spec/multistream/receiveSlot.ts +9 -1
  367. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  368. package/test/unit/spec/multistream/remoteMedia.ts +2 -0
  369. package/test/unit/spec/multistream/remoteMediaGroup.ts +345 -0
  370. package/test/unit/spec/multistream/remoteMediaManager.ts +525 -0
  371. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  372. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  373. package/test/unit/spec/reachability/index.ts +551 -14
  374. package/test/unit/spec/reachability/request.js +3 -1
  375. package/test/unit/spec/reachability/util.ts +40 -0
  376. package/test/unit/spec/reconnection-manager/index.js +171 -11
  377. package/test/unit/spec/recording-controller/index.js +294 -218
  378. package/test/unit/spec/recording-controller/util.js +223 -96
  379. package/test/unit/spec/roap/index.ts +180 -83
  380. package/test/unit/spec/roap/request.ts +100 -62
  381. package/test/unit/spec/roap/turnDiscovery.ts +388 -96
  382. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  383. package/test/unit/spec/stats-analyzer/index.js +1252 -12
  384. package/test/unit/spec/webinar/collection.ts +13 -0
  385. package/test/unit/spec/webinar/index.ts +60 -0
  386. package/test/utils/integrationTestUtils.js +46 -0
  387. package/test/utils/testUtils.js +0 -57
  388. package/test/utils/webex-test-users.js +12 -4
  389. package/dist/metrics/config.js +0 -289
  390. package/dist/metrics/config.js.map +0 -1
  391. package/dist/types/metrics/config.d.ts +0 -169
  392. package/src/index.js +0 -18
  393. package/src/metrics/config.ts +0 -485
@@ -3,42 +3,89 @@ 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
+ import {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';
6
10
 
7
11
  describe('plugin-meetings', () => {
8
12
  let meetingsRequest;
13
+ let locusDeltaRequestSpy;
14
+ let webex;
15
+ const geoHintInfoDefaults = {
16
+ countryCode: 'US',
17
+ regionCode: 'WEST-COAST',
18
+ clientAddress: '127.0.0.1',
19
+ };
20
+ let anonymizeIpSpy;
9
21
 
10
22
  beforeEach(() => {
11
- const webex = new MockWebex({
23
+ webex = new MockWebex({
12
24
  children: {
13
25
  meetings: Meetings,
14
26
  },
15
27
  });
16
28
 
17
- webex.meetings.clientRegion = {
18
- countryCode: 'US',
19
- regionCode: 'WEST-COAST',
20
- };
29
+ webex.meetings.geoHintInfo = {...geoHintInfoDefaults};
21
30
 
22
31
  webex.internal = {
23
32
  services: {
24
33
  get: sinon.mock().returns('locusUrl'),
25
34
  waitForCatalog: sinon.mock().returns(Promise.resolve({})),
26
35
  },
36
+ device: {
37
+ config: {
38
+ installationId: 'installationId',
39
+ },
40
+ },
27
41
  };
28
42
 
29
- webex.boundedStorage.get = sinon.mock().returns(Promise.resolve(JSON.stringify({anycastEntryPoint: "aws-eu-west-1"})))
43
+ webex.boundedStorage.get = sinon
44
+ .mock()
45
+ .returns(Promise.resolve(JSON.stringify({anycastEntryPoint: 'aws-eu-west-1'})));
46
+
47
+ const request = sinon.mock().returns(Promise.resolve({}));
30
48
 
31
49
  meetingsRequest = new MeetingRequest(
32
- {},
50
+ {
51
+ meeting: {
52
+ request,
53
+ locusInfo: {
54
+ sequence: {},
55
+ },
56
+ },
57
+ },
33
58
  {
34
59
  parent: webex,
35
60
  }
36
61
  );
37
62
 
38
- meetingsRequest.request = sinon.mock().returns(Promise.resolve({}));
63
+ meetingsRequest.request = request;
64
+ locusDeltaRequestSpy = sinon.spy(meetingsRequest, 'locusDeltaRequest');
65
+ anonymizeIpSpy = sinon.spy(CallDiagnosticUtils, 'anonymizeIPAddress');
39
66
  });
40
67
 
68
+ afterEach(() => {
69
+ anonymizeIpSpy.restore();
70
+ });
71
+
72
+ const checkRequest = (expectedParams) => {
73
+ assert.calledOnceWithExactly(locusDeltaRequestSpy, expectedParams);
74
+ assert.calledOnceWithExactly(
75
+ meetingsRequest.request,
76
+ merge(expectedParams, {body: {sequence: {}}})
77
+ );
78
+ };
79
+
41
80
  describe('meeting request library', () => {
81
+ beforeEach(() => {
82
+ sinon.stub(uuid, 'v4').returns('12345');
83
+ });
84
+
85
+ afterEach(() => {
86
+ uuid.v4.restore();
87
+ });
88
+
42
89
  describe('#sendDTMF', () => {
43
90
  it('sends a POST to the sendDtmf locus endpoint', async () => {
44
91
  const locusUrl = 'locusURL';
@@ -50,12 +97,18 @@ describe('plugin-meetings', () => {
50
97
  deviceUrl,
51
98
  tones,
52
99
  });
53
- const requestParams = meetingsRequest.request.getCall(0).args[0];
54
100
 
55
- assert.equal(requestParams.method, 'POST');
56
- assert.equal(requestParams.uri, `${locusUrl}/sendDtmf`);
57
- assert.equal(requestParams.body.dtmf.tones, tones);
58
- assert.equal(requestParams.body.deviceUrl, deviceUrl);
101
+ checkRequest({
102
+ method: 'POST',
103
+ uri: `${locusUrl}/sendDtmf`,
104
+ body: {
105
+ deviceUrl: 'deviceUrl',
106
+ dtmf: {
107
+ correlationId: '12345',
108
+ tones: '1234',
109
+ },
110
+ },
111
+ });
59
112
  });
60
113
  });
61
114
 
@@ -72,14 +125,19 @@ describe('plugin-meetings', () => {
72
125
  main: {width: 640, height: 480},
73
126
  content: {width: 1280, height: 720},
74
127
  });
75
- const requestParams = meetingsRequest.request.getCall(0).args[0];
76
128
 
77
- assert.equal(requestParams.method, 'PUT');
78
- assert.equal(requestParams.uri, `${locusUrl}/controls`);
79
- assert.equal(requestParams.body.layout.type, layoutType);
80
- assert.equal(requestParams.body.layout.deviceUrl, deviceUrl);
81
- assert.deepEqual(requestParams.body.layout.layoutParams, {
82
- renderInfo: {main: {width: 640, height: 480}, content: {width: 1280, height: 720}},
129
+ checkRequest({
130
+ method: 'PUT',
131
+ uri: `${locusUrl}/controls`,
132
+ body: {
133
+ layout: {
134
+ deviceUrl,
135
+ type: layoutType,
136
+ layoutParams: {
137
+ renderInfo: {main: {width: 640, height: 480}, content: {width: 1280, height: 720}},
138
+ },
139
+ },
140
+ },
83
141
  });
84
142
  });
85
143
 
@@ -129,12 +187,13 @@ describe('plugin-meetings', () => {
129
187
  });
130
188
 
131
189
  describe('#joinMeeting', () => {
132
- it('sends /call requets for join', async () => {
190
+ it('sends /call request for join', async () => {
133
191
  const locusUrl = 'locusURL';
134
192
  const deviceUrl = 'deviceUrl';
135
193
  const correlationId = 'random-uuid';
136
194
  const roapMessage = 'roap-message';
137
195
  const permissionToken = 'permission-token';
196
+ const installationId = 'installationId';
138
197
 
139
198
  await meetingsRequest.joinMeeting({
140
199
  locusUrl,
@@ -148,9 +207,43 @@ describe('plugin-meetings', () => {
148
207
  assert.equal(requestParams.method, 'POST');
149
208
  assert.equal(requestParams.uri, `${locusUrl}/participant?alternateRedirect=true`);
150
209
  assert.equal(requestParams.body.device.url, deviceUrl);
210
+ assert.equal(requestParams.body.device.installationId, installationId);
151
211
  assert.equal(requestParams.body.device.countryCode, 'US');
152
212
  assert.equal(requestParams.body.permissionToken, 'permission-token');
153
213
  assert.equal(requestParams.body.device.regionCode, 'WEST-COAST');
214
+ assert.include(requestParams.body.device.localIp, '127.0.0');
215
+
216
+ assert.calledOnceWithExactly(anonymizeIpSpy, '127.0.0.1');
217
+ });
218
+
219
+ describe('clientAddress geoHintInfo undefined', () => {
220
+ beforeEach(() => {
221
+ webex.meetings.geoHintInfo = {};
222
+ });
223
+
224
+ // reset
225
+ afterEach(() => {
226
+ webex.meetings.geoHintInfo = {...geoHintInfoDefaults};
227
+ });
228
+
229
+ it('doesnt send the clientAddress if not available as localIp', async () => {
230
+ const locusUrl = 'locusURL';
231
+ const deviceUrl = 'deviceUrl';
232
+ const correlationId = 'random-uuid';
233
+ const roapMessage = 'roap-message';
234
+ const permissionToken = 'permission-token';
235
+
236
+ await meetingsRequest.joinMeeting({
237
+ locusUrl,
238
+ deviceUrl,
239
+ correlationId,
240
+ roapMessage,
241
+ permissionToken,
242
+ });
243
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
244
+
245
+ assert.equal(requestParams.body.device.localIp, undefined);
246
+ });
154
247
  });
155
248
 
156
249
  it('sends /call with meetingNumber if inviteeAddress does not exist', async () => {
@@ -193,25 +286,86 @@ describe('plugin-meetings', () => {
193
286
  assert.equal(requestParams.body.invitee.address, 'sipUrl');
194
287
  });
195
288
 
289
+ it('sends uses the locusClusterUrl if available', async () => {
290
+ const deviceUrl = 'deviceUrl';
291
+ const correlationId = 'random-uuid';
292
+ const roapMessage = 'roap-message';
293
+ const inviteeAddress = 'sipUrl';
294
+ const locusClusterUrl = 'locusClusterUrl';
295
+
296
+ await meetingsRequest.joinMeeting({
297
+ deviceUrl,
298
+ correlationId,
299
+ roapMessage,
300
+ locusClusterUrl,
301
+ inviteeAddress,
302
+ });
303
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
304
+
305
+ assert.equal(requestParams.method, 'POST');
306
+ assert.equal(
307
+ requestParams.uri,
308
+ 'https://locusClusterUrl/locus/api/v1/loci/call?alternateRedirect=true'
309
+ );
310
+ });
311
+
196
312
  it('adds deviceCapabilities to request when breakouts are supported', async () => {
197
313
  await meetingsRequest.joinMeeting({
198
- breakoutsSupported: true
314
+ breakoutsSupported: true,
199
315
  });
200
316
  const requestParams = meetingsRequest.request.getCall(0).args[0];
201
317
 
202
318
  assert.deepEqual(requestParams.body.deviceCapabilities, ['BREAKOUTS_SUPPORTED']);
203
319
  });
204
320
 
205
- it('does not add deviceCapabilities to request when breakouts are not supported', async () => {
321
+ it('adds deviceCapabilities to request when live annotation are supported', async () => {
322
+ await meetingsRequest.joinMeeting({
323
+ liveAnnotationSupported: true,
324
+ });
325
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
326
+ assert.deepEqual(requestParams.body.deviceCapabilities, ['ANNOTATION_ON_SHARE_SUPPORTED']);
327
+ });
328
+ it('adds deviceCapabilities to request when breakouts and live annotation are supported', async () => {
329
+ await meetingsRequest.joinMeeting({
330
+ liveAnnotationSupported: true,
331
+ breakoutsSupported: true,
332
+ });
333
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
334
+ assert.deepEqual(requestParams.body.deviceCapabilities, [
335
+ 'BREAKOUTS_SUPPORTED',
336
+ 'ANNOTATION_ON_SHARE_SUPPORTED',
337
+ ]);
338
+ });
339
+ it('does not add deviceCapabilities to request when breakouts and live annotation are not supported', async () => {
206
340
  await meetingsRequest.joinMeeting({});
207
341
 
208
342
  const requestParams = meetingsRequest.request.getCall(0).args[0];
209
343
 
210
344
  assert.deepEqual(requestParams.body.deviceCapabilities, undefined);
345
+ });
346
+
347
+ it('adds deviceCapabilities and locale to request when they are provided', async () => {
348
+ await meetingsRequest.joinMeeting({
349
+ locale: 'en_UK',
350
+ deviceCapabilities: ['SERVER_AUDIO_ANNOUNCEMENT_SUPPORTED'],
351
+ });
352
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
353
+
354
+ assert.deepEqual(requestParams.body.deviceCapabilities, [
355
+ 'SERVER_AUDIO_ANNOUNCEMENT_SUPPORTED',
356
+ ]);
357
+ assert.deepEqual(requestParams.body.locale, 'en_UK');
358
+ });
359
+
360
+ it('does not add deviceCapabilities and locale to request when they are not provided', async () => {
361
+ await meetingsRequest.joinMeeting({});
362
+ const requestParams = meetingsRequest.request.getCall(0).args[0];
211
363
 
364
+ assert.deepEqual(requestParams.body.deviceCapabilities, undefined);
365
+ assert.deepEqual(requestParams.body.locale, undefined);
212
366
  });
213
367
 
214
- it('includes joinCookie correctly', async () => {
368
+ it('includes joinCookie and ipver correctly', async () => {
215
369
  const locusUrl = 'locusURL';
216
370
  const deviceUrl = 'deviceUrl';
217
371
  const correlationId = 'random-uuid';
@@ -224,14 +378,16 @@ describe('plugin-meetings', () => {
224
378
  correlationId,
225
379
  roapMessage,
226
380
  permissionToken,
381
+ ipVersion: IP_VERSION.ipv4_and_ipv6,
227
382
  });
228
383
  const requestParams = meetingsRequest.request.getCall(0).args[0];
229
384
 
230
385
  assert.equal(requestParams.method, 'POST');
231
386
  assert.equal(requestParams.uri, `${locusUrl}/participant?alternateRedirect=true`);
232
387
  assert.deepEqual(requestParams.body.clientMediaPreferences, {
233
- "joinCookie": {anycastEntryPoint: "aws-eu-west-1"},
234
- "preferTranscoding": true
388
+ joinCookie: {anycastEntryPoint: 'aws-eu-west-1'},
389
+ preferTranscoding: true,
390
+ ipver: 1,
235
391
  });
236
392
  });
237
393
  });
@@ -249,14 +405,20 @@ describe('plugin-meetings', () => {
249
405
  correlationId,
250
406
  dialInUrl,
251
407
  });
252
- const requestParams = meetingsRequest.request.getCall(0).args[0];
253
408
 
254
- assert.equal(requestParams.method, 'POST');
255
- assert.equal(requestParams.uri, `${locusUrl}/participant`);
256
- assert.equal(requestParams.body.device.url, dialInUrl);
257
- assert.equal(requestParams.body.device.deviceType, 'PROVISIONAL');
258
- assert.equal(requestParams.body.device.provisionalType, 'DIAL_IN');
259
- assert.equal(requestParams.body.device.clientUrl, 'clientUrl');
409
+ checkRequest({
410
+ method: 'POST',
411
+ uri: `${locusUrl}/participant`,
412
+ body: {
413
+ device: {
414
+ url: dialInUrl,
415
+ deviceType: 'PROVISIONAL',
416
+ provisionalType: 'DIAL_IN',
417
+ clientUrl,
418
+ },
419
+ correlationId,
420
+ },
421
+ });
260
422
  });
261
423
 
262
424
  it('sends dial out pstn request', async () => {
@@ -273,15 +435,21 @@ describe('plugin-meetings', () => {
273
435
  dialOutUrl,
274
436
  phoneNumber,
275
437
  });
276
- const requestParams = meetingsRequest.request.getCall(0).args[0];
277
438
 
278
- assert.equal(requestParams.method, 'POST');
279
- assert.equal(requestParams.uri, `${locusUrl}/participant`);
280
- assert.equal(requestParams.body.device.url, dialOutUrl);
281
- assert.equal(requestParams.body.device.deviceType, 'PROVISIONAL');
282
- assert.equal(requestParams.body.device.provisionalType, 'DIAL_OUT');
283
- assert.equal(requestParams.body.device.clientUrl, 'clientUrl');
284
- assert.equal(requestParams.body.device.dialoutAddress, phoneNumber);
439
+ checkRequest({
440
+ method: 'POST',
441
+ uri: `${locusUrl}/participant`,
442
+ body: {
443
+ device: {
444
+ url: dialOutUrl,
445
+ deviceType: 'PROVISIONAL',
446
+ provisionalType: 'DIAL_OUT',
447
+ clientUrl,
448
+ dialoutAddress: phoneNumber,
449
+ },
450
+ correlationId,
451
+ },
452
+ });
285
453
  });
286
454
 
287
455
  it('sends disconnect phone audio request', async () => {
@@ -296,12 +464,92 @@ describe('plugin-meetings', () => {
296
464
  correlationId,
297
465
  phoneUrl,
298
466
  });
299
- const requestParams = meetingsRequest.request.getCall(0).args[0];
300
467
 
301
- assert.equal(requestParams.method, 'PUT');
302
- assert.equal(requestParams.uri, `${locusUrl}/participant/${selfId}/leave`);
303
- assert.equal(requestParams.body.device.url, phoneUrl);
304
- assert.equal(requestParams.body.device.deviceType, 'PROVISIONAL');
468
+ checkRequest({
469
+ method: 'PUT',
470
+ uri: `${locusUrl}/participant/${selfId}/leave`,
471
+ body: {
472
+ device: {
473
+ url: phoneUrl,
474
+ deviceType: 'PROVISIONAL',
475
+ },
476
+ correlationId,
477
+ },
478
+ });
479
+ });
480
+ });
481
+
482
+ describe('#leaveMeeting', () => {
483
+ it('sends the request to leave the meeting', async () => {
484
+ const locusUrl = 'locusUrl';
485
+ const selfId = 'selfId';
486
+ const correlationId = 'random-uuid';
487
+ const resourceId = 'resourceId';
488
+ const deviceUrl = 'deviceUrl';
489
+
490
+ meetingsRequest.config.meetings.deviceType = 'deviceType';
491
+
492
+ await meetingsRequest.leaveMeeting({
493
+ locusUrl,
494
+ selfId,
495
+ deviceUrl,
496
+ resourceId,
497
+ correlationId,
498
+ });
499
+
500
+ checkRequest({
501
+ method: 'PUT',
502
+ uri: 'locusUrl/participant/selfId/leave',
503
+ body: {
504
+ device: {deviceType: 'deviceType', url: 'deviceUrl'},
505
+ usingResource: 'resourceId',
506
+ correlationId: 'random-uuid',
507
+ },
508
+ });
509
+ });
510
+ });
511
+
512
+ describe('#acknowledgeMeeting', () => {
513
+ it('sends the request to acknowledge the meeting', async () => {
514
+ const locusUrl = 'locusUrl';
515
+ const correlationId = 'random-uuid';
516
+ const deviceUrl = 'deviceUrl';
517
+
518
+ meetingsRequest.config.meetings.deviceType = 'deviceType';
519
+
520
+ await meetingsRequest.acknowledgeMeeting({
521
+ locusUrl,
522
+ deviceUrl,
523
+ correlationId,
524
+ });
525
+
526
+ checkRequest({
527
+ method: 'PUT',
528
+ uri: 'locusUrl/participant/alert',
529
+ body: {
530
+ device: {deviceType: 'deviceType', url: 'deviceUrl'},
531
+ correlationId: 'random-uuid',
532
+ },
533
+ });
534
+ });
535
+ });
536
+
537
+ describe('#lockMeeting', () => {
538
+ it('sends request to lock the meeting', async () => {
539
+ const locusUrl = 'locusURL';
540
+
541
+ await meetingsRequest.lockMeeting({
542
+ locusUrl,
543
+ lock: true,
544
+ });
545
+
546
+ checkRequest({
547
+ method: 'PATCH',
548
+ uri: `${locusUrl}/controls`,
549
+ body: {
550
+ lock: {locked: true},
551
+ },
552
+ });
305
553
  });
306
554
  });
307
555
 
@@ -312,10 +560,11 @@ describe('plugin-meetings', () => {
312
560
  await meetingsRequest.endMeetingForAll({
313
561
  locusUrl,
314
562
  });
315
- const requestParams = meetingsRequest.request.getCall(0).args[0];
316
563
 
317
- assert.equal(requestParams.method, 'POST');
318
- assert.equal(requestParams.uri, `${locusUrl}/end`);
564
+ checkRequest({
565
+ method: 'POST',
566
+ uri: `${locusUrl}/end`,
567
+ });
319
568
  });
320
569
  });
321
570
 
@@ -368,12 +617,182 @@ describe('plugin-meetings', () => {
368
617
  locusUrl,
369
618
  requestingParticipantId,
370
619
  });
371
- const requestParams = meetingsRequest.request.getCall(0).args[0];
372
620
 
373
- assert.equal(requestParams.method, 'PUT');
374
- assert.equal(requestParams.uri, `${locusUrl}/controls`);
375
- assert.equal(requestParams.body.reactions.enabled, true);
376
- assert.equal(requestParams.body.requestingParticipantId, requestingParticipantId);
621
+ checkRequest({
622
+ method: 'PUT',
623
+ uri: `${locusUrl}/controls`,
624
+ body: {
625
+ reactions: {
626
+ enabled: true,
627
+ },
628
+ requestingParticipantId,
629
+ },
630
+ });
631
+ });
632
+ });
633
+
634
+ describe('#prepareLeaveMeetingRequestOptions', () => {
635
+ it('returns expected result', async () => {
636
+ const result = meetingsRequest.prepareLeaveMeetingRequestOptions({
637
+ locusUrl: 'locusUrl',
638
+ selfId: 'selfId',
639
+ correlationId: 'correlationId',
640
+ resourceId: 'resourceId',
641
+ deviceUrl: 'deviceUrl',
642
+ });
643
+
644
+ assert.deepEqual(result, {
645
+ body: {
646
+ correlationId: 'correlationId',
647
+ device: {
648
+ deviceType: undefined,
649
+ url: 'deviceUrl',
650
+ },
651
+ usingResource: 'resourceId',
652
+ },
653
+ method: 'PUT',
654
+ uri: 'locusUrl/participant/selfId/leave',
655
+ });
656
+ });
657
+ });
658
+
659
+ describe('#buildLeaveMeetingRequestOptions', () => {
660
+ it('calls expected functions and returns expected result', async () => {
661
+ // return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));
662
+ const prepareLeaveMeetingRequestOptionsSpy = sinon.spy(
663
+ meetingsRequest,
664
+ 'prepareLeaveMeetingRequestOptions'
665
+ );
666
+ const buildLocusDeltaRequestOptionsSpy = sinon.spy(
667
+ meetingsRequest,
668
+ 'buildLocusDeltaRequestOptions'
669
+ );
670
+
671
+ const inputOpts = {
672
+ locusUrl: 'locusUrl',
673
+ selfId: 'selfId',
674
+ correlationId: 'correlationId',
675
+ resourceId: 'resourceId',
676
+ deviceUrl: 'deviceUrl',
677
+ };
678
+
679
+ const result = meetingsRequest.buildLeaveMeetingRequestOptions(inputOpts);
680
+
681
+ assert.calledOnceWithExactly(prepareLeaveMeetingRequestOptionsSpy, inputOpts);
682
+ assert.calledOnceWithExactly(buildLocusDeltaRequestOptionsSpy, {
683
+ method: 'PUT',
684
+ uri: 'locusUrl/participant/selfId/leave',
685
+ body: {
686
+ device: {deviceType: undefined, url: 'deviceUrl'},
687
+ usingResource: 'resourceId',
688
+ correlationId: 'correlationId',
689
+ },
690
+ });
691
+
692
+ assert.deepEqual(result, {
693
+ body: {
694
+ correlationId: 'correlationId',
695
+ device: {
696
+ deviceType: undefined,
697
+ url: 'deviceUrl',
698
+ },
699
+ sequence: {},
700
+ usingResource: 'resourceId',
701
+ },
702
+ method: 'PUT',
703
+ uri: 'locusUrl/participant/selfId/leave',
704
+ });
705
+ });
706
+ });
707
+ });
708
+
709
+ describe('#declineMeeting', () => {
710
+ it('sends a request to decline the meeting', async () => {
711
+ const reason = 'reason';
712
+ const deviceUrl = 'deviceUrl';
713
+ const locusUrl = 'locusUrl';
714
+ meetingsRequest.config.meetings.deviceType = 'deviceType';
715
+
716
+ await meetingsRequest.declineMeeting({
717
+ locusUrl,
718
+ deviceUrl,
719
+ reason,
720
+ });
721
+
722
+ const expectedBody = {
723
+ device: {
724
+ deviceType: 'deviceType',
725
+ url: deviceUrl,
726
+ },
727
+ reason,
728
+ };
729
+
730
+ checkRequest({
731
+ method: 'PUT',
732
+ uri: `${locusUrl}/participant/decline`,
733
+ body: expectedBody,
734
+ });
735
+ });
736
+ });
737
+
738
+ describe('#getLocusStatusByUrl', () => {
739
+ it('check locus status', async () => {
740
+ const locusUrl = 'locusUrl';
741
+
742
+ await meetingsRequest.getLocusStatusByUrl(locusUrl);
743
+ assert.deepEqual(meetingsRequest.request.getCall(0).args[0], {
744
+ method: 'GET',
745
+ uri: locusUrl,
746
+ });
747
+ });
748
+ });
749
+
750
+ describe('#changeMeetingFloor', () => {
751
+ it('change meeting floor', async () => {
752
+ const options = {
753
+ disposition: 'GRANTED',
754
+ personUrl: 'personUrl',
755
+ deviceUrl: 'deviceUrl',
756
+ resourceId: 'resourceId',
757
+ resourceUrl: 'resourceUrl',
758
+ shareInstanceId: '12345',
759
+ uri: 'optionsUrl',
760
+ annotationInfo: {
761
+ version: '1',
762
+ policy: 'Approval',
763
+ },
764
+ };
765
+
766
+ const expectBody = {
767
+ annotation: {
768
+ policy: 'Approval',
769
+ version: '1',
770
+ },
771
+ floor: {
772
+ shareInstanceId: '12345',
773
+ beneficiary: {
774
+ devices: [
775
+ {
776
+ deviceType: undefined,
777
+ url: 'deviceUrl',
778
+ },
779
+ ],
780
+ url: 'personUrl',
781
+ },
782
+ disposition: 'GRANTED',
783
+ requester: {
784
+ url: 'personUrl',
785
+ },
786
+ },
787
+ resourceUrl: 'resourceUrl',
788
+ };
789
+
790
+ await meetingsRequest.changeMeetingFloor(options);
791
+
792
+ assert.deepEqual(meetingsRequest.request.getCall(0).args[0], {
793
+ method: 'PUT',
794
+ uri: 'optionsUrl',
795
+ body: expectBody,
377
796
  });
378
797
  });
379
798
  });