@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
@@ -18,31 +18,73 @@ import {
18
18
  HTTP_VERBS,
19
19
  LEAVE,
20
20
  LOCI,
21
- LOCUS,
22
- MEDIA,
23
21
  PARTICIPANT,
24
22
  PROVISIONAL_TYPE_DIAL_IN,
25
23
  PROVISIONAL_TYPE_DIAL_OUT,
24
+ REACHABILITY,
26
25
  SEND_DTMF_ENDPOINT,
27
26
  _SLIDES_,
27
+ ANNOTATION,
28
+ IP_VERSION,
28
29
  } from '../constants';
29
- import {Reaction} from '../reactions/reactions.type';
30
30
  import {SendReactionOptions, ToggleReactionsOptions} from './request.type';
31
+ import MeetingUtil from './util';
32
+ import {AnnotationInfo} from '../annotation/annotation.types';
31
33
 
32
34
  /**
33
35
  * @class MeetingRequest
34
36
  */
35
37
  export default class MeetingRequest extends StatelessWebexPlugin {
36
38
  changeVideoLayoutDebounced: any;
39
+ meetingRef: WeakRef<any>;
40
+ locusDeltaRequest: (options: object) => Promise<any>;
41
+ buildLocusDeltaRequestOptions: (options: object) => Promise<any>;
37
42
 
43
+ /**
44
+ * Constructor
45
+ * @param {Object} attrs
46
+ * @param {Object} options
47
+ */
38
48
  constructor(attrs: any, options: any) {
39
- super(attrs, options);
49
+ const {meeting, ...otherAttrs} = attrs;
50
+
51
+ super(otherAttrs, options);
52
+
53
+ this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);
54
+ this.buildLocusDeltaRequestOptions = MeetingUtil.generateBuildLocusDeltaRequestOptions(meeting);
55
+
40
56
  this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {
41
57
  leading: true,
42
58
  trailing: true,
43
59
  });
44
60
  }
45
61
 
62
+ /**
63
+ * Returns joinCookie from boundedStorage if present.
64
+ * @returns {Object} joinCookie
65
+ */
66
+ private getJoinCookie = async () => {
67
+ // @ts-ignore
68
+ const joinCookieRaw = await this.webex.boundedStorage
69
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
70
+ .catch(() => {});
71
+
72
+ if (joinCookieRaw) {
73
+ try {
74
+ const joinCookie = JSON.parse(joinCookieRaw);
75
+ if (joinCookie) {
76
+ return joinCookie;
77
+ }
78
+ } catch (e) {
79
+ LoggerProxy.logger.error(
80
+ `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`
81
+ );
82
+ }
83
+ }
84
+
85
+ return null;
86
+ };
87
+
46
88
  /**
47
89
  * Make a network request to join a meeting
48
90
  * @param {Object} options
@@ -57,12 +99,16 @@ export default class MeetingRequest extends StatelessWebexPlugin {
57
99
  * @param {boolean} options.moveToResource
58
100
  * @param {Object} options.roapMessage
59
101
  * @param {boolean} options.breakoutsSupported
102
+ * @param {String} options.locale,
103
+ * @param {Array} options.deviceCapabilities
104
+ * @param {boolean} options.liveAnnotationSupported
60
105
  * @returns {Promise}
61
106
  */
62
107
  async joinMeeting(options: {
63
108
  sipUri: string;
64
109
  deviceUrl: string;
65
110
  locusUrl: string;
111
+ locusClusterUrl: string;
66
112
  resourceId: string;
67
113
  correlationId: string;
68
114
  ensureConversation: boolean;
@@ -76,6 +122,10 @@ export default class MeetingRequest extends StatelessWebexPlugin {
76
122
  permissionToken: any;
77
123
  preferTranscoding: any;
78
124
  breakoutsSupported: boolean;
125
+ locale?: string;
126
+ deviceCapabilities?: Array<string>;
127
+ liveAnnotationSupported: boolean;
128
+ ipVersion?: IP_VERSION;
79
129
  }) {
80
130
  const {
81
131
  asResourceOccupant,
@@ -84,6 +134,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
84
134
  permissionToken,
85
135
  deviceUrl,
86
136
  locusUrl,
137
+ locusClusterUrl,
87
138
  resourceId,
88
139
  correlationId,
89
140
  ensureConversation,
@@ -93,12 +144,18 @@ export default class MeetingRequest extends StatelessWebexPlugin {
93
144
  roapMessage,
94
145
  preferTranscoding,
95
146
  breakoutsSupported,
147
+ locale,
148
+ deviceCapabilities = [],
149
+ liveAnnotationSupported,
150
+ ipVersion,
96
151
  } = options;
97
152
 
98
153
  LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);
99
154
 
100
155
  let url = '';
101
156
 
157
+ const joinCookie = await this.getJoinCookie();
158
+
102
159
  const body: any = {
103
160
  asResourceOccupant,
104
161
  device: {
@@ -115,19 +172,32 @@ export default class MeetingRequest extends StatelessWebexPlugin {
115
172
  supportsNativeLobby: 1,
116
173
  clientMediaPreferences: {
117
174
  preferTranscoding: preferTranscoding ?? true,
175
+ joinCookie,
176
+ ipver: ipVersion,
118
177
  },
119
178
  };
120
179
 
121
180
  if (breakoutsSupported) {
122
- body.deviceCapabilities = [BREAKOUTS.BREAKOUTS_SUPPORTED];
181
+ deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);
182
+ }
183
+ if (liveAnnotationSupported) {
184
+ deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);
123
185
  }
124
186
 
187
+ if (locale) {
188
+ body.locale = locale;
189
+ }
190
+
191
+ // add deviceCapabilities prop
192
+ if (deviceCapabilities.length) {
193
+ body.deviceCapabilities = deviceCapabilities;
194
+ }
125
195
  // @ts-ignore
126
- if (this.webex.meetings.clientRegion) {
196
+ if (this.webex.meetings.geoHintInfo) {
127
197
  // @ts-ignore
128
- body.device.countryCode = this.webex.meetings.clientRegion.countryCode;
198
+ body.device.countryCode = this.webex.meetings.geoHintInfo.countryCode;
129
199
  // @ts-ignore
130
- body.device.regionCode = this.webex.meetings.clientRegion.regionCode;
200
+ body.device.regionCode = this.webex.meetings.geoHintInfo.regionCode;
131
201
  }
132
202
 
133
203
  if (moderator !== undefined) {
@@ -146,10 +216,18 @@ export default class MeetingRequest extends StatelessWebexPlugin {
146
216
  url = `${locusUrl}/${PARTICIPANT}`;
147
217
  } else if (inviteeAddress || meetingNumber) {
148
218
  try {
149
- // @ts-ignore
150
- await this.webex.internal.services.waitForCatalog('postauth');
151
- // @ts-ignore
152
- url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;
219
+ let clusterUrl;
220
+
221
+ if (locusClusterUrl) {
222
+ clusterUrl = `https://${locusClusterUrl}/locus/api/v1`;
223
+ } else {
224
+ // @ts-ignore
225
+ await this.webex.internal.services.waitForCatalog('postauth');
226
+ // @ts-ignore
227
+ clusterUrl = this.webex.internal.services.get('locus');
228
+ }
229
+
230
+ url = `${clusterUrl}/${LOCI}/${CALL}`;
153
231
  body.invitee = {
154
232
  address: inviteeAddress || `wbxmn:${meetingNumber}`,
155
233
  };
@@ -251,7 +329,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
251
329
  };
252
330
 
253
331
  // @ts-ignore
254
- return this.request({
332
+ return this.locusDeltaRequest({
255
333
  method: HTTP_VERBS.POST,
256
334
  uri,
257
335
  body,
@@ -306,7 +384,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
306
384
  };
307
385
 
308
386
  // @ts-ignore
309
- return this.request({
387
+ return this.locusDeltaRequest({
310
388
  method: HTTP_VERBS.POST,
311
389
  uri,
312
390
  body,
@@ -320,65 +398,25 @@ export default class MeetingRequest extends StatelessWebexPlugin {
320
398
  }
321
399
 
322
400
  /**
323
- * Syns the missed delta event
401
+ * Sends a requests to get the latest locus DTO, it might be a full Locus or a delta, depending on the url provided
324
402
  * @param {Object} options
325
- * @param {boolean} options.desync flag to get partial or whole locus object
326
- * @param {String} options.syncUrl sync url to get ht elatest locus delta
327
- * @returns {Promise}
328
- */
329
- syncMeeting(options: {desync: boolean; syncUrl: string}) {
330
- /* eslint-disable no-else-return */
331
- const {desync} = options;
332
- let {syncUrl} = options;
333
-
334
- /* istanbul ignore else */
335
- if (desync) {
336
- // check for existing URL parameters
337
- syncUrl = syncUrl
338
- .concat(syncUrl.split('?')[1] ? '&' : '?')
339
- .concat(`${LOCUS.SYNCDEBUG}=${desync}`);
340
- }
341
-
342
- // @ts-ignore
343
- return this.request({
344
- method: HTTP_VERBS.GET,
345
- uri: syncUrl,
346
- }) // TODO: Handle if delta sync failed . Get the full locus object
347
- .catch((err) => {
348
- LoggerProxy.logger.error(
349
- `Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`
350
- );
351
-
352
- return err;
353
- });
354
- }
355
-
356
- /**
357
- * Request to get the complete locus object
358
- * @param {Object} options
359
- * @param {boolean} options.desync flag to get partial or whole locus object
360
403
  * @param {String} options.locusUrl sync url to get ht elatest locus delta
361
404
  * @returns {Promise}
362
405
  */
363
- getFullLocus(options: {desync: boolean; locusUrl: string}) {
364
- let {locusUrl} = options;
365
- const {desync} = options;
366
-
367
- if (locusUrl) {
368
- if (desync) {
369
- locusUrl += `?${LOCUS.SYNCDEBUG}=${desync}`;
370
- }
406
+ getLocusDTO(options: {url: string}) {
407
+ const {url} = options;
371
408
 
409
+ if (url) {
372
410
  // @ts-ignore
373
411
  return this.request({
374
412
  method: HTTP_VERBS.GET,
375
- uri: locusUrl,
413
+ uri: url,
376
414
  }).catch((err) => {
377
415
  LoggerProxy.logger.error(
378
- `Meeting:request#getFullLocus --> Error getting full locus, error ${err}`
416
+ `Meeting:request#getLocusDTO --> Error getting latest locus, error ${err}`
379
417
  );
380
418
 
381
- return err;
419
+ throw err;
382
420
  });
383
421
  }
384
422
 
@@ -421,7 +459,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
421
459
  };
422
460
 
423
461
  // @ts-ignore
424
- return this.request({
462
+ return this.locusDeltaRequest({
425
463
  method: HTTP_VERBS.PUT,
426
464
  uri,
427
465
  body,
@@ -435,13 +473,49 @@ export default class MeetingRequest extends StatelessWebexPlugin {
435
473
  }
436
474
 
437
475
  /**
438
- * Make a network request to leave a meeting
476
+ * Prepares request options to to leave a meeting
439
477
  * @param {Object} options
440
478
  * @param {Url} options.locusUrl
441
479
  * @param {String} options.selfId
442
480
  * @param {Url} options.deviceUrl
443
481
  * @param {String} options.resourceId,
444
482
  * @param {String} options.correlationId
483
+ * @returns {Object} request options
484
+ */
485
+ prepareLeaveMeetingRequestOptions({
486
+ locusUrl,
487
+ selfId,
488
+ deviceUrl: url,
489
+ resourceId,
490
+ correlationId,
491
+ }: {
492
+ locusUrl: string;
493
+ selfId: string;
494
+ deviceUrl: string;
495
+ resourceId: string;
496
+ correlationId: string;
497
+ }) {
498
+ const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;
499
+ const body = {
500
+ device: {
501
+ // @ts-ignore
502
+ deviceType: this.config.meetings.deviceType,
503
+ url,
504
+ },
505
+ usingResource: resourceId || null,
506
+ correlationId,
507
+ };
508
+
509
+ return {
510
+ method: HTTP_VERBS.PUT,
511
+ uri,
512
+ body,
513
+ };
514
+ }
515
+
516
+ /**
517
+ * Make a network request to leave a meeting
518
+ * @param {Object} options
445
519
  * @returns {Promise}
446
520
  */
447
521
  leaveMeeting({
@@ -470,14 +544,22 @@ export default class MeetingRequest extends StatelessWebexPlugin {
470
544
  correlationId,
471
545
  };
472
546
 
473
- // @ts-ignore
474
- return this.request({
547
+ return this.locusDeltaRequest({
475
548
  method: HTTP_VERBS.PUT,
476
549
  uri,
477
550
  body,
478
551
  });
479
552
  }
480
553
 
554
+ /**
555
+ * Builds request options to leave a meeting
556
+ * @param {Object} options
557
+ * @returns {Object} request options
558
+ */
559
+ buildLeaveMeetingRequestOptions(options: any) {
560
+ return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));
561
+ }
562
+
481
563
  /**
482
564
  * Make a network request to acknowledge a meeting
483
565
  * @param {Object} options
@@ -497,14 +579,19 @@ export default class MeetingRequest extends StatelessWebexPlugin {
497
579
  correlationId: options.correlationId,
498
580
  };
499
581
 
500
- // @ts-ignore
501
- return this.request({
582
+ return this.locusDeltaRequest({
502
583
  method: HTTP_VERBS.PUT,
503
584
  uri,
504
585
  body,
505
586
  });
506
587
  }
507
588
 
589
+ /**
590
+ * Makes a network request to lock the meeting
591
+ * @param {Object} options
592
+ * @param {Boolean} options.lock Whether it is locked or not
593
+ * @returns {Promise}
594
+ */
508
595
  lockMeeting(options) {
509
596
  const uri = `${options.locusUrl}/${CONTROLS}`;
510
597
  const body = {
@@ -513,8 +600,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
513
600
  },
514
601
  };
515
602
 
516
- // @ts-ignore
517
- return this.request({
603
+ return this.locusDeltaRequest({
518
604
  method: HTTP_VERBS.PATCH,
519
605
  uri,
520
606
  body,
@@ -540,54 +626,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
540
626
  ...(options.reason && {reason: options.reason}),
541
627
  };
542
628
 
543
- // @ts-ignore
544
- return this.request({
545
- method: HTTP_VERBS.PUT,
546
- uri,
547
- body,
548
- });
549
- }
550
-
551
- /**
552
- * Toggle remote audio and/or video
553
- * @param {Object} options options for toggling
554
- * @param {String} options.selfId Locus self id??
555
- * @param {String} options.locusUrl Locus url
556
- * @param {String} options.deviceUrl Url of a device
557
- * @param {String} options.resourceId Populated if you are paired to a device
558
- * @param {String} options.localMedias local sdps
559
- * @param {Boolean} options.preferTranscoding false for multistream (Homer), true for transcoded media (Edonus)
560
- * @returns {Promise}
561
- */
562
- remoteAudioVideoToggle(
563
- options:
564
- | {
565
- selfId: string;
566
- locusUrl: string;
567
- deviceUrl: string;
568
- resourceId: string;
569
- localMedias: string;
570
- }
571
- | any
572
- ) {
573
- const uri = `${options.locusUrl}/${PARTICIPANT}/${options.selfId}/${MEDIA}`;
574
- const body = {
575
- device: {
576
- // @ts-ignore
577
- deviceType: this.config.meetings.deviceType,
578
- url: options.deviceUrl,
579
- },
580
- usingResource: options.resourceId || null,
581
- correlationId: options.correlationId,
582
- respOnlySdp: true,
583
- localMedias: options.localMedias,
584
- clientMediaPreferences: {
585
- preferTranscoding: options.preferTranscoding ?? true,
586
- },
587
- };
588
-
589
- // @ts-ignore
590
- return this.request({
629
+ return this.locusDeltaRequest({
591
630
  method: HTTP_VERBS.PUT,
592
631
  uri,
593
632
  body,
@@ -612,6 +651,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
612
651
  deviceUrl: string;
613
652
  resourceId: string;
614
653
  uri: string;
654
+ annotationInfo: AnnotationInfo;
615
655
  }
616
656
  | any
617
657
  ) {
@@ -645,6 +685,9 @@ export default class MeetingRequest extends StatelessWebexPlugin {
645
685
  if (options?.resourceToken) {
646
686
  body.resourceToken = options?.resourceToken;
647
687
  }
688
+ if (options?.annotationInfo) {
689
+ body.annotation = options?.annotationInfo;
690
+ }
648
691
 
649
692
  // @ts-ignore
650
693
  return this.request({
@@ -664,7 +707,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
664
707
  */
665
708
  sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {
666
709
  // @ts-ignore
667
- return this.request({
710
+ return this.locusDeltaRequest({
668
711
  method: HTTP_VERBS.POST,
669
712
  uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,
670
713
  body: {
@@ -745,7 +788,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
745
788
  : undefined;
746
789
 
747
790
  // @ts-ignore
748
- return this.request({
791
+ return this.locusDeltaRequest({
749
792
  method: HTTP_VERBS.PUT,
750
793
  uri: `${locusUrl}/${CONTROLS}`,
751
794
  body: {
@@ -768,7 +811,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
768
811
  const uri = `${locusUrl}/${END}`;
769
812
 
770
813
  // @ts-ignore
771
- return this.request({
814
+ return this.locusDeltaRequest({
772
815
  method: HTTP_VERBS.POST,
773
816
  uri,
774
817
  });
@@ -820,7 +863,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
820
863
  const uri = `${locusUrl}/${CONTROLS}`;
821
864
 
822
865
  // @ts-ignore
823
- return this.request({
866
+ return this.locusDeltaRequest({
824
867
  method: HTTP_VERBS.PUT,
825
868
  uri,
826
869
  body: {
@@ -831,4 +874,12 @@ export default class MeetingRequest extends StatelessWebexPlugin {
831
874
  },
832
875
  });
833
876
  }
877
+
878
+ getLocusStatusByUrl(locusUrl: string) {
879
+ // @ts-ignore
880
+ return this.request({
881
+ method: HTTP_VERBS.GET,
882
+ uri: locusUrl,
883
+ });
884
+ }
834
885
  }