@webex/plugin-meetings 3.0.0-beta.31 → 3.0.0-beta.310

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 (378) 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 +94 -15
  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 +709 -35
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/utils.js +45 -1
  17. package/dist/breakouts/utils.js.map +1 -1
  18. package/dist/common/errors/no-meeting-info.js +51 -0
  19. package/dist/common/errors/no-meeting-info.js.map +1 -0
  20. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  21. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +48 -7
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/common/logs/request.js +5 -1
  27. package/dist/common/logs/request.js.map +1 -1
  28. package/dist/common/queue.js +24 -9
  29. package/dist/common/queue.js.map +1 -1
  30. package/dist/config.js +5 -11
  31. package/dist/config.js.map +1 -1
  32. package/dist/constants.js +233 -29
  33. package/dist/constants.js.map +1 -1
  34. package/dist/controls-options-manager/enums.js +14 -2
  35. package/dist/controls-options-manager/enums.js.map +1 -1
  36. package/dist/controls-options-manager/index.js +109 -15
  37. package/dist/controls-options-manager/index.js.map +1 -1
  38. package/dist/controls-options-manager/types.js +7 -0
  39. package/dist/controls-options-manager/types.js.map +1 -0
  40. package/dist/controls-options-manager/util.js +309 -18
  41. package/dist/controls-options-manager/util.js.map +1 -1
  42. package/dist/index.js +112 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/interpretation/collection.js +23 -0
  45. package/dist/interpretation/collection.js.map +1 -0
  46. package/dist/interpretation/index.js +366 -0
  47. package/dist/interpretation/index.js.map +1 -0
  48. package/dist/interpretation/siLanguage.js +25 -0
  49. package/dist/interpretation/siLanguage.js.map +1 -0
  50. package/dist/locus-info/controlsUtils.js +91 -2
  51. package/dist/locus-info/controlsUtils.js.map +1 -1
  52. package/dist/locus-info/index.js +383 -62
  53. package/dist/locus-info/index.js.map +1 -1
  54. package/dist/locus-info/infoUtils.js +7 -1
  55. package/dist/locus-info/infoUtils.js.map +1 -1
  56. package/dist/locus-info/mediaSharesUtils.js +57 -1
  57. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  58. package/dist/locus-info/parser.js +249 -72
  59. package/dist/locus-info/parser.js.map +1 -1
  60. package/dist/locus-info/selfUtils.js +89 -14
  61. package/dist/locus-info/selfUtils.js.map +1 -1
  62. package/dist/media/index.js +61 -116
  63. package/dist/media/index.js.map +1 -1
  64. package/dist/media/properties.js +73 -124
  65. package/dist/media/properties.js.map +1 -1
  66. package/dist/meeting/in-meeting-actions.js +82 -2
  67. package/dist/meeting/in-meeting-actions.js.map +1 -1
  68. package/dist/meeting/index.js +3777 -2929
  69. package/dist/meeting/index.js.map +1 -1
  70. package/dist/meeting/locusMediaRequest.js +292 -0
  71. package/dist/meeting/locusMediaRequest.js.map +1 -0
  72. package/dist/meeting/muteState.js +230 -124
  73. package/dist/meeting/muteState.js.map +1 -1
  74. package/dist/meeting/request.js +260 -196
  75. package/dist/meeting/request.js.map +1 -1
  76. package/dist/meeting/util.js +601 -417
  77. package/dist/meeting/util.js.map +1 -1
  78. package/dist/meeting-info/index.js +73 -7
  79. package/dist/meeting-info/index.js.map +1 -1
  80. package/dist/meeting-info/meeting-info-v2.js +192 -51
  81. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  82. package/dist/meeting-info/util.js +1 -1
  83. package/dist/meeting-info/util.js.map +1 -1
  84. package/dist/meeting-info/utilv2.js +36 -36
  85. package/dist/meeting-info/utilv2.js.map +1 -1
  86. package/dist/meetings/collection.js +39 -0
  87. package/dist/meetings/collection.js.map +1 -1
  88. package/dist/meetings/index.js +415 -115
  89. package/dist/meetings/index.js.map +1 -1
  90. package/dist/meetings/meetings.types.js +7 -0
  91. package/dist/meetings/meetings.types.js.map +1 -0
  92. package/dist/meetings/request.js +2 -0
  93. package/dist/meetings/request.js.map +1 -1
  94. package/dist/meetings/util.js +72 -6
  95. package/dist/meetings/util.js.map +1 -1
  96. package/dist/member/index.js +58 -0
  97. package/dist/member/index.js.map +1 -1
  98. package/dist/member/types.js +25 -0
  99. package/dist/member/types.js.map +1 -0
  100. package/dist/member/util.js +132 -25
  101. package/dist/member/util.js.map +1 -1
  102. package/dist/members/collection.js +10 -0
  103. package/dist/members/collection.js.map +1 -1
  104. package/dist/members/index.js +102 -6
  105. package/dist/members/index.js.map +1 -1
  106. package/dist/members/request.js +106 -38
  107. package/dist/members/request.js.map +1 -1
  108. package/dist/members/types.js +15 -0
  109. package/dist/members/types.js.map +1 -0
  110. package/dist/members/util.js +326 -232
  111. package/dist/members/util.js.map +1 -1
  112. package/dist/metrics/constants.js +13 -5
  113. package/dist/metrics/constants.js.map +1 -1
  114. package/dist/metrics/index.js +1 -468
  115. package/dist/metrics/index.js.map +1 -1
  116. package/dist/multistream/mediaRequestManager.js +238 -49
  117. package/dist/multistream/mediaRequestManager.js.map +1 -1
  118. package/dist/multistream/receiveSlot.js +29 -16
  119. package/dist/multistream/receiveSlot.js.map +1 -1
  120. package/dist/multistream/receiveSlotManager.js +39 -36
  121. package/dist/multistream/receiveSlotManager.js.map +1 -1
  122. package/dist/multistream/remoteMedia.js +44 -18
  123. package/dist/multistream/remoteMedia.js.map +1 -1
  124. package/dist/multistream/remoteMediaGroup.js +60 -3
  125. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  126. package/dist/multistream/remoteMediaManager.js +209 -59
  127. package/dist/multistream/remoteMediaManager.js.map +1 -1
  128. package/dist/multistream/sendSlotManager.js +233 -0
  129. package/dist/multistream/sendSlotManager.js.map +1 -0
  130. package/dist/reachability/index.js +225 -59
  131. package/dist/reachability/index.js.map +1 -1
  132. package/dist/reachability/request.js +17 -8
  133. package/dist/reachability/request.js.map +1 -1
  134. package/dist/reconnection-manager/index.js +201 -156
  135. package/dist/reconnection-manager/index.js.map +1 -1
  136. package/dist/recording-controller/index.js +21 -2
  137. package/dist/recording-controller/index.js.map +1 -1
  138. package/dist/recording-controller/util.js +9 -8
  139. package/dist/recording-controller/util.js.map +1 -1
  140. package/dist/roap/index.js +62 -32
  141. package/dist/roap/index.js.map +1 -1
  142. package/dist/roap/request.js +112 -97
  143. package/dist/roap/request.js.map +1 -1
  144. package/dist/roap/turnDiscovery.js +95 -36
  145. package/dist/roap/turnDiscovery.js.map +1 -1
  146. package/dist/rtcMetrics/constants.js +12 -0
  147. package/dist/rtcMetrics/constants.js.map +1 -0
  148. package/dist/rtcMetrics/index.js +117 -0
  149. package/dist/rtcMetrics/index.js.map +1 -0
  150. package/dist/statsAnalyzer/index.js +86 -78
  151. package/dist/statsAnalyzer/index.js.map +1 -1
  152. package/dist/statsAnalyzer/mqaUtil.js +11 -10
  153. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  154. package/dist/types/annotation/annotation.types.d.ts +42 -0
  155. package/dist/types/annotation/constants.d.ts +31 -0
  156. package/dist/types/annotation/index.d.ts +117 -0
  157. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  158. package/dist/types/breakouts/events.d.ts +8 -0
  159. package/dist/types/breakouts/utils.d.ts +14 -0
  160. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  161. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  162. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  163. package/dist/types/common/logs/request.d.ts +2 -0
  164. package/dist/types/common/queue.d.ts +9 -7
  165. package/dist/types/config.d.ts +1 -7
  166. package/dist/types/constants.d.ts +194 -24
  167. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  168. package/dist/types/controls-options-manager/index.d.ts +17 -1
  169. package/dist/types/controls-options-manager/types.d.ts +43 -0
  170. package/dist/types/controls-options-manager/util.d.ts +1 -7
  171. package/dist/types/index.d.ts +6 -4
  172. package/dist/types/interpretation/collection.d.ts +5 -0
  173. package/dist/types/interpretation/index.d.ts +5 -0
  174. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  175. package/dist/types/locus-info/index.d.ts +57 -4
  176. package/dist/types/locus-info/parser.d.ts +67 -6
  177. package/dist/types/media/index.d.ts +2 -0
  178. package/dist/types/media/properties.d.ts +34 -48
  179. package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
  180. package/dist/types/meeting/index.d.ts +463 -510
  181. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  182. package/dist/types/meeting/muteState.d.ts +99 -23
  183. package/dist/types/meeting/request.d.ts +72 -43
  184. package/dist/types/meeting/util.d.ts +101 -1
  185. package/dist/types/meeting-info/index.d.ts +13 -1
  186. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  187. package/dist/types/meetings/collection.d.ts +17 -0
  188. package/dist/types/meetings/index.d.ts +98 -20
  189. package/dist/types/meetings/meetings.types.d.ts +4 -0
  190. package/dist/types/member/index.d.ts +14 -0
  191. package/dist/types/member/types.d.ts +32 -0
  192. package/dist/types/members/collection.d.ts +5 -0
  193. package/dist/types/members/index.d.ts +35 -2
  194. package/dist/types/members/request.d.ts +73 -9
  195. package/dist/types/members/types.d.ts +25 -0
  196. package/dist/types/members/util.d.ts +214 -1
  197. package/dist/types/metrics/constants.d.ts +12 -4
  198. package/dist/types/metrics/index.d.ts +4 -119
  199. package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
  200. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  201. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  202. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  203. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  204. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  205. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  206. package/dist/types/reachability/index.d.ts +61 -7
  207. package/dist/types/reachability/request.d.ts +7 -3
  208. package/dist/types/reconnection-manager/index.d.ts +9 -0
  209. package/dist/types/recording-controller/index.d.ts +15 -1
  210. package/dist/types/recording-controller/util.d.ts +5 -4
  211. package/dist/types/roap/index.d.ts +2 -1
  212. package/dist/types/roap/request.d.ts +15 -11
  213. package/dist/types/roap/turnDiscovery.d.ts +21 -3
  214. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  215. package/dist/types/rtcMetrics/index.d.ts +47 -0
  216. package/dist/types/statsAnalyzer/index.d.ts +7 -1
  217. package/dist/types/webinar/collection.d.ts +16 -0
  218. package/dist/types/webinar/index.d.ts +5 -0
  219. package/dist/webinar/collection.js +44 -0
  220. package/dist/webinar/collection.js.map +1 -0
  221. package/dist/webinar/index.js +69 -0
  222. package/dist/webinar/index.js.map +1 -0
  223. package/package.json +23 -20
  224. package/src/annotation/annotation.types.ts +50 -0
  225. package/src/annotation/constants.ts +36 -0
  226. package/src/annotation/index.ts +328 -0
  227. package/src/breakouts/README.md +42 -12
  228. package/src/breakouts/breakout.ts +67 -9
  229. package/src/breakouts/edit-lock-error.ts +25 -0
  230. package/src/breakouts/events.ts +56 -0
  231. package/src/breakouts/index.ts +592 -20
  232. package/src/breakouts/utils.ts +42 -0
  233. package/src/common/errors/no-meeting-info.ts +24 -0
  234. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  235. package/src/common/errors/webex-errors.ts +44 -2
  236. package/src/common/logs/logger-proxy.ts +1 -1
  237. package/src/common/logs/request.ts +5 -1
  238. package/src/common/queue.ts +22 -8
  239. package/src/config.ts +4 -10
  240. package/src/constants.ts +221 -19
  241. package/src/controls-options-manager/enums.ts +12 -0
  242. package/src/controls-options-manager/index.ts +116 -21
  243. package/src/controls-options-manager/types.ts +59 -0
  244. package/src/controls-options-manager/util.ts +294 -14
  245. package/src/index.ts +40 -0
  246. package/src/interpretation/README.md +60 -0
  247. package/src/interpretation/collection.ts +19 -0
  248. package/src/interpretation/index.ts +332 -0
  249. package/src/interpretation/siLanguage.ts +18 -0
  250. package/src/locus-info/controlsUtils.ts +108 -0
  251. package/src/locus-info/index.ts +413 -59
  252. package/src/locus-info/infoUtils.ts +10 -2
  253. package/src/locus-info/mediaSharesUtils.ts +64 -0
  254. package/src/locus-info/parser.ts +258 -47
  255. package/src/locus-info/selfUtils.ts +81 -5
  256. package/src/media/index.ts +102 -122
  257. package/src/media/properties.ts +87 -110
  258. package/src/meeting/in-meeting-actions.ts +163 -3
  259. package/src/meeting/index.ts +3132 -2541
  260. package/src/meeting/locusMediaRequest.ts +313 -0
  261. package/src/meeting/muteState.ts +229 -131
  262. package/src/meeting/request.ts +177 -121
  263. package/src/meeting/util.ts +588 -394
  264. package/src/meeting-info/index.ts +81 -8
  265. package/src/meeting-info/meeting-info-v2.ts +170 -14
  266. package/src/meeting-info/util.ts +1 -1
  267. package/src/meeting-info/utilv2.ts +23 -23
  268. package/src/meetings/collection.ts +33 -0
  269. package/src/meetings/index.ts +445 -123
  270. package/src/meetings/meetings.types.ts +12 -0
  271. package/src/meetings/request.ts +2 -0
  272. package/src/meetings/util.ts +80 -11
  273. package/src/member/index.ts +58 -0
  274. package/src/member/types.ts +38 -0
  275. package/src/member/util.ts +141 -25
  276. package/src/members/collection.ts +8 -0
  277. package/src/members/index.ts +134 -8
  278. package/src/members/request.ts +97 -17
  279. package/src/members/types.ts +29 -0
  280. package/src/members/util.ts +333 -240
  281. package/src/metrics/constants.ts +12 -4
  282. package/src/metrics/index.ts +1 -490
  283. package/src/multistream/mediaRequestManager.ts +289 -79
  284. package/src/multistream/receiveSlot.ts +31 -17
  285. package/src/multistream/receiveSlotManager.ts +34 -24
  286. package/src/multistream/remoteMedia.ts +27 -2
  287. package/src/multistream/remoteMediaGroup.ts +59 -0
  288. package/src/multistream/remoteMediaManager.ts +148 -30
  289. package/src/multistream/sendSlotManager.ts +170 -0
  290. package/src/reachability/index.ts +228 -37
  291. package/src/reachability/request.ts +17 -8
  292. package/src/reconnection-manager/index.ts +83 -56
  293. package/src/recording-controller/index.ts +20 -3
  294. package/src/recording-controller/util.ts +26 -9
  295. package/src/roap/index.ts +63 -32
  296. package/src/roap/request.ts +100 -104
  297. package/src/roap/turnDiscovery.ts +48 -26
  298. package/src/rtcMetrics/constants.ts +3 -0
  299. package/src/rtcMetrics/index.ts +100 -0
  300. package/src/statsAnalyzer/index.ts +105 -91
  301. package/src/statsAnalyzer/mqaUtil.ts +13 -14
  302. package/src/webinar/collection.ts +31 -0
  303. package/src/webinar/index.ts +62 -0
  304. package/test/integration/spec/converged-space-meetings.js +60 -3
  305. package/test/integration/spec/journey.js +320 -261
  306. package/test/integration/spec/space-meeting.js +76 -3
  307. package/test/unit/spec/annotation/index.ts +418 -0
  308. package/test/unit/spec/breakouts/breakout.ts +118 -28
  309. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  310. package/test/unit/spec/breakouts/events.ts +89 -0
  311. package/test/unit/spec/breakouts/index.ts +1395 -69
  312. package/test/unit/spec/breakouts/utils.js +52 -1
  313. package/test/unit/spec/common/queue.js +31 -2
  314. package/test/unit/spec/controls-options-manager/index.js +163 -0
  315. package/test/unit/spec/controls-options-manager/util.js +576 -60
  316. package/test/unit/spec/fixture/locus.js +1 -0
  317. package/test/unit/spec/interpretation/collection.ts +15 -0
  318. package/test/unit/spec/interpretation/index.ts +589 -0
  319. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  320. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  321. package/test/unit/spec/locus-info/index.js +1304 -33
  322. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  323. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  324. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  325. package/test/unit/spec/locus-info/parser.js +116 -35
  326. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  327. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  328. package/test/unit/spec/media/index.ts +104 -37
  329. package/test/unit/spec/media/properties.ts +2 -2
  330. package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
  331. package/test/unit/spec/meeting/index.js +5216 -1956
  332. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  333. package/test/unit/spec/meeting/muteState.js +408 -208
  334. package/test/unit/spec/meeting/request.js +483 -49
  335. package/test/unit/spec/meeting/utils.js +679 -64
  336. package/test/unit/spec/meeting-info/index.js +300 -0
  337. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  338. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  339. package/test/unit/spec/meetings/collection.js +26 -0
  340. package/test/unit/spec/meetings/index.js +1011 -205
  341. package/test/unit/spec/meetings/utils.js +202 -2
  342. package/test/unit/spec/member/index.js +61 -6
  343. package/test/unit/spec/member/util.js +510 -34
  344. package/test/unit/spec/members/index.js +432 -1
  345. package/test/unit/spec/members/request.js +206 -27
  346. package/test/unit/spec/members/utils.js +210 -0
  347. package/test/unit/spec/metrics/index.js +1 -50
  348. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  349. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  350. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  351. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  352. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  353. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  354. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  355. package/test/unit/spec/reachability/index.ts +549 -9
  356. package/test/unit/spec/reachability/request.js +68 -0
  357. package/test/unit/spec/reconnection-manager/index.js +85 -9
  358. package/test/unit/spec/recording-controller/index.js +294 -218
  359. package/test/unit/spec/recording-controller/util.js +223 -96
  360. package/test/unit/spec/roap/index.ts +178 -64
  361. package/test/unit/spec/roap/request.ts +203 -85
  362. package/test/unit/spec/roap/turnDiscovery.ts +82 -36
  363. package/test/unit/spec/rtcMetrics/index.ts +73 -0
  364. package/test/unit/spec/stats-analyzer/index.js +136 -2
  365. package/test/unit/spec/webinar/collection.ts +13 -0
  366. package/test/unit/spec/webinar/index.ts +60 -0
  367. package/test/utils/integrationTestUtils.js +46 -0
  368. package/test/utils/testUtils.js +0 -52
  369. package/dist/meeting/effectsState.js +0 -262
  370. package/dist/meeting/effectsState.js.map +0 -1
  371. package/dist/metrics/config.js +0 -299
  372. package/dist/metrics/config.js.map +0 -1
  373. package/dist/types/meeting/effectsState.d.ts +0 -42
  374. package/dist/types/metrics/config.d.ts +0 -178
  375. package/src/index.js +0 -16
  376. package/src/meeting/effectsState.ts +0 -211
  377. package/src/metrics/config.ts +0 -495
  378. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -4,6 +4,7 @@ import {debounce} from 'lodash';
4
4
  import {StatelessWebexPlugin} from '@webex/webex-core';
5
5
  // @ts-ignore
6
6
  import {deviceType} from '@webex/common';
7
+ import {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';
7
8
 
8
9
  import LoggerProxy from '../common/logs/logger-proxy';
9
10
  import {
@@ -18,31 +19,73 @@ import {
18
19
  HTTP_VERBS,
19
20
  LEAVE,
20
21
  LOCI,
21
- LOCUS,
22
- MEDIA,
23
22
  PARTICIPANT,
24
23
  PROVISIONAL_TYPE_DIAL_IN,
25
24
  PROVISIONAL_TYPE_DIAL_OUT,
25
+ REACHABILITY,
26
26
  SEND_DTMF_ENDPOINT,
27
27
  _SLIDES_,
28
+ ANNOTATION,
29
+ IP_VERSION,
28
30
  } from '../constants';
29
- import {Reaction} from '../reactions/reactions.type';
30
31
  import {SendReactionOptions, ToggleReactionsOptions} from './request.type';
32
+ import MeetingUtil from './util';
33
+ import {AnnotationInfo} from '../annotation/annotation.types';
31
34
 
32
35
  /**
33
36
  * @class MeetingRequest
34
37
  */
35
38
  export default class MeetingRequest extends StatelessWebexPlugin {
36
39
  changeVideoLayoutDebounced: any;
40
+ meetingRef: WeakRef<any>;
41
+ locusDeltaRequest: (options: object) => Promise<any>;
42
+ buildLocusDeltaRequestOptions: (options: object) => Promise<any>;
37
43
 
44
+ /**
45
+ * Constructor
46
+ * @param {Object} attrs
47
+ * @param {Object} options
48
+ */
38
49
  constructor(attrs: any, options: any) {
39
- super(attrs, options);
50
+ const {meeting, ...otherAttrs} = attrs;
51
+
52
+ super(otherAttrs, options);
53
+
54
+ this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);
55
+ this.buildLocusDeltaRequestOptions = MeetingUtil.generateBuildLocusDeltaRequestOptions(meeting);
56
+
40
57
  this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {
41
58
  leading: true,
42
59
  trailing: true,
43
60
  });
44
61
  }
45
62
 
63
+ /**
64
+ * Returns joinCookie from boundedStorage if present.
65
+ * @returns {Object} joinCookie
66
+ */
67
+ private getJoinCookie = async () => {
68
+ // @ts-ignore
69
+ const joinCookieRaw = await this.webex.boundedStorage
70
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
71
+ .catch(() => {});
72
+
73
+ if (joinCookieRaw) {
74
+ try {
75
+ const joinCookie = JSON.parse(joinCookieRaw);
76
+ if (joinCookie) {
77
+ return joinCookie;
78
+ }
79
+ } catch (e) {
80
+ LoggerProxy.logger.error(
81
+ `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`
82
+ );
83
+ }
84
+ }
85
+
86
+ return null;
87
+ };
88
+
46
89
  /**
47
90
  * Make a network request to join a meeting
48
91
  * @param {Object} options
@@ -57,12 +100,16 @@ export default class MeetingRequest extends StatelessWebexPlugin {
57
100
  * @param {boolean} options.moveToResource
58
101
  * @param {Object} options.roapMessage
59
102
  * @param {boolean} options.breakoutsSupported
103
+ * @param {String} options.locale,
104
+ * @param {Array} options.deviceCapabilities
105
+ * @param {boolean} options.liveAnnotationSupported
60
106
  * @returns {Promise}
61
107
  */
62
108
  async joinMeeting(options: {
63
109
  sipUri: string;
64
110
  deviceUrl: string;
65
111
  locusUrl: string;
112
+ locusClusterUrl: string;
66
113
  resourceId: string;
67
114
  correlationId: string;
68
115
  ensureConversation: boolean;
@@ -76,6 +123,10 @@ export default class MeetingRequest extends StatelessWebexPlugin {
76
123
  permissionToken: any;
77
124
  preferTranscoding: any;
78
125
  breakoutsSupported: boolean;
126
+ locale?: string;
127
+ deviceCapabilities?: Array<string>;
128
+ liveAnnotationSupported: boolean;
129
+ ipVersion?: IP_VERSION;
79
130
  }) {
80
131
  const {
81
132
  asResourceOccupant,
@@ -84,6 +135,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
84
135
  permissionToken,
85
136
  deviceUrl,
86
137
  locusUrl,
138
+ locusClusterUrl,
87
139
  resourceId,
88
140
  correlationId,
89
141
  ensureConversation,
@@ -93,12 +145,18 @@ export default class MeetingRequest extends StatelessWebexPlugin {
93
145
  roapMessage,
94
146
  preferTranscoding,
95
147
  breakoutsSupported,
148
+ locale,
149
+ deviceCapabilities = [],
150
+ liveAnnotationSupported,
151
+ ipVersion,
96
152
  } = options;
97
153
 
98
154
  LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);
99
155
 
100
156
  let url = '';
101
157
 
158
+ const joinCookie = await this.getJoinCookie();
159
+
102
160
  const body: any = {
103
161
  asResourceOccupant,
104
162
  device: {
@@ -115,19 +173,36 @@ export default class MeetingRequest extends StatelessWebexPlugin {
115
173
  supportsNativeLobby: 1,
116
174
  clientMediaPreferences: {
117
175
  preferTranscoding: preferTranscoding ?? true,
176
+ joinCookie,
177
+ ipver: ipVersion,
118
178
  },
119
179
  };
120
180
 
121
181
  if (breakoutsSupported) {
122
- body.deviceCapabilities = [BREAKOUTS.BREAKOUTS_SUPPORTED];
182
+ deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);
183
+ }
184
+ if (liveAnnotationSupported) {
185
+ deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);
123
186
  }
124
187
 
188
+ if (locale) {
189
+ body.locale = locale;
190
+ }
191
+
192
+ // add deviceCapabilities prop
193
+ if (deviceCapabilities.length) {
194
+ body.deviceCapabilities = deviceCapabilities;
195
+ }
125
196
  // @ts-ignore
126
- if (this.webex.meetings.clientRegion) {
197
+ if (this.webex.meetings.geoHintInfo) {
127
198
  // @ts-ignore
128
- body.device.countryCode = this.webex.meetings.clientRegion.countryCode;
199
+ body.device.countryCode = this.webex.meetings.geoHintInfo.countryCode;
129
200
  // @ts-ignore
130
- body.device.regionCode = this.webex.meetings.clientRegion.regionCode;
201
+ body.device.regionCode = this.webex.meetings.geoHintInfo.regionCode;
202
+ body.device.localIp =
203
+ // @ts-ignore
204
+ CallDiagnosticUtils.anonymizeIPAddress(this.webex.meetings.geoHintInfo.clientAddress) ||
205
+ undefined;
131
206
  }
132
207
 
133
208
  if (moderator !== undefined) {
@@ -146,10 +221,18 @@ export default class MeetingRequest extends StatelessWebexPlugin {
146
221
  url = `${locusUrl}/${PARTICIPANT}`;
147
222
  } else if (inviteeAddress || meetingNumber) {
148
223
  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}`;
224
+ let clusterUrl;
225
+
226
+ if (locusClusterUrl) {
227
+ clusterUrl = `https://${locusClusterUrl}/locus/api/v1`;
228
+ } else {
229
+ // @ts-ignore
230
+ await this.webex.internal.services.waitForCatalog('postauth');
231
+ // @ts-ignore
232
+ clusterUrl = this.webex.internal.services.get('locus');
233
+ }
234
+
235
+ url = `${clusterUrl}/${LOCI}/${CALL}`;
153
236
  body.invitee = {
154
237
  address: inviteeAddress || `wbxmn:${meetingNumber}`,
155
238
  };
@@ -251,7 +334,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
251
334
  };
252
335
 
253
336
  // @ts-ignore
254
- return this.request({
337
+ return this.locusDeltaRequest({
255
338
  method: HTTP_VERBS.POST,
256
339
  uri,
257
340
  body,
@@ -306,7 +389,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
306
389
  };
307
390
 
308
391
  // @ts-ignore
309
- return this.request({
392
+ return this.locusDeltaRequest({
310
393
  method: HTTP_VERBS.POST,
311
394
  uri,
312
395
  body,
@@ -320,65 +403,25 @@ export default class MeetingRequest extends StatelessWebexPlugin {
320
403
  }
321
404
 
322
405
  /**
323
- * Syns the missed delta event
406
+ * Sends a requests to get the latest locus DTO, it might be a full Locus or a delta, depending on the url provided
324
407
  * @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
408
  * @param {String} options.locusUrl sync url to get ht elatest locus delta
361
409
  * @returns {Promise}
362
410
  */
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
- }
411
+ getLocusDTO(options: {url: string}) {
412
+ const {url} = options;
371
413
 
414
+ if (url) {
372
415
  // @ts-ignore
373
416
  return this.request({
374
417
  method: HTTP_VERBS.GET,
375
- uri: locusUrl,
418
+ uri: url,
376
419
  }).catch((err) => {
377
420
  LoggerProxy.logger.error(
378
- `Meeting:request#getFullLocus --> Error getting full locus, error ${err}`
421
+ `Meeting:request#getLocusDTO --> Error getting latest locus, error ${err}`
379
422
  );
380
423
 
381
- return err;
424
+ throw err;
382
425
  });
383
426
  }
384
427
 
@@ -421,7 +464,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
421
464
  };
422
465
 
423
466
  // @ts-ignore
424
- return this.request({
467
+ return this.locusDeltaRequest({
425
468
  method: HTTP_VERBS.PUT,
426
469
  uri,
427
470
  body,
@@ -435,13 +478,49 @@ export default class MeetingRequest extends StatelessWebexPlugin {
435
478
  }
436
479
 
437
480
  /**
438
- * Make a network request to leave a meeting
481
+ * Prepares request options to to leave a meeting
439
482
  * @param {Object} options
440
483
  * @param {Url} options.locusUrl
441
484
  * @param {String} options.selfId
442
485
  * @param {Url} options.deviceUrl
443
486
  * @param {String} options.resourceId,
444
487
  * @param {String} options.correlationId
488
+ * @returns {Object} request options
489
+ */
490
+ prepareLeaveMeetingRequestOptions({
491
+ locusUrl,
492
+ selfId,
493
+ deviceUrl: url,
494
+ resourceId,
495
+ correlationId,
496
+ }: {
497
+ locusUrl: string;
498
+ selfId: string;
499
+ deviceUrl: string;
500
+ resourceId: string;
501
+ correlationId: string;
502
+ }) {
503
+ const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;
504
+ const body = {
505
+ device: {
506
+ // @ts-ignore
507
+ deviceType: this.config.meetings.deviceType,
508
+ url,
509
+ },
510
+ usingResource: resourceId || null,
511
+ correlationId,
512
+ };
513
+
514
+ return {
515
+ method: HTTP_VERBS.PUT,
516
+ uri,
517
+ body,
518
+ };
519
+ }
520
+
521
+ /**
522
+ * Make a network request to leave a meeting
523
+ * @param {Object} options
445
524
  * @returns {Promise}
446
525
  */
447
526
  leaveMeeting({
@@ -470,14 +549,22 @@ export default class MeetingRequest extends StatelessWebexPlugin {
470
549
  correlationId,
471
550
  };
472
551
 
473
- // @ts-ignore
474
- return this.request({
552
+ return this.locusDeltaRequest({
475
553
  method: HTTP_VERBS.PUT,
476
554
  uri,
477
555
  body,
478
556
  });
479
557
  }
480
558
 
559
+ /**
560
+ * Builds request options to leave a meeting
561
+ * @param {Object} options
562
+ * @returns {Object} request options
563
+ */
564
+ buildLeaveMeetingRequestOptions(options: any) {
565
+ return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));
566
+ }
567
+
481
568
  /**
482
569
  * Make a network request to acknowledge a meeting
483
570
  * @param {Object} options
@@ -497,14 +584,19 @@ export default class MeetingRequest extends StatelessWebexPlugin {
497
584
  correlationId: options.correlationId,
498
585
  };
499
586
 
500
- // @ts-ignore
501
- return this.request({
587
+ return this.locusDeltaRequest({
502
588
  method: HTTP_VERBS.PUT,
503
589
  uri,
504
590
  body,
505
591
  });
506
592
  }
507
593
 
594
+ /**
595
+ * Makes a network request to lock the meeting
596
+ * @param {Object} options
597
+ * @param {Boolean} options.lock Whether it is locked or not
598
+ * @returns {Promise}
599
+ */
508
600
  lockMeeting(options) {
509
601
  const uri = `${options.locusUrl}/${CONTROLS}`;
510
602
  const body = {
@@ -513,8 +605,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
513
605
  },
514
606
  };
515
607
 
516
- // @ts-ignore
517
- return this.request({
608
+ return this.locusDeltaRequest({
518
609
  method: HTTP_VERBS.PATCH,
519
610
  uri,
520
611
  body,
@@ -540,54 +631,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
540
631
  ...(options.reason && {reason: options.reason}),
541
632
  };
542
633
 
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({
634
+ return this.locusDeltaRequest({
591
635
  method: HTTP_VERBS.PUT,
592
636
  uri,
593
637
  body,
@@ -612,6 +656,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
612
656
  deviceUrl: string;
613
657
  resourceId: string;
614
658
  uri: string;
659
+ annotationInfo: AnnotationInfo;
615
660
  }
616
661
  | any
617
662
  ) {
@@ -645,6 +690,9 @@ export default class MeetingRequest extends StatelessWebexPlugin {
645
690
  if (options?.resourceToken) {
646
691
  body.resourceToken = options?.resourceToken;
647
692
  }
693
+ if (options?.annotationInfo) {
694
+ body.annotation = options?.annotationInfo;
695
+ }
648
696
 
649
697
  // @ts-ignore
650
698
  return this.request({
@@ -664,7 +712,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
664
712
  */
665
713
  sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {
666
714
  // @ts-ignore
667
- return this.request({
715
+ return this.locusDeltaRequest({
668
716
  method: HTTP_VERBS.POST,
669
717
  uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,
670
718
  body: {
@@ -745,7 +793,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
745
793
  : undefined;
746
794
 
747
795
  // @ts-ignore
748
- return this.request({
796
+ return this.locusDeltaRequest({
749
797
  method: HTTP_VERBS.PUT,
750
798
  uri: `${locusUrl}/${CONTROLS}`,
751
799
  body: {
@@ -768,7 +816,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
768
816
  const uri = `${locusUrl}/${END}`;
769
817
 
770
818
  // @ts-ignore
771
- return this.request({
819
+ return this.locusDeltaRequest({
772
820
  method: HTTP_VERBS.POST,
773
821
  uri,
774
822
  });
@@ -820,7 +868,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
820
868
  const uri = `${locusUrl}/${CONTROLS}`;
821
869
 
822
870
  // @ts-ignore
823
- return this.request({
871
+ return this.locusDeltaRequest({
824
872
  method: HTTP_VERBS.PUT,
825
873
  uri,
826
874
  body: {
@@ -831,4 +879,12 @@ export default class MeetingRequest extends StatelessWebexPlugin {
831
879
  },
832
880
  });
833
881
  }
882
+
883
+ getLocusStatusByUrl(locusUrl: string) {
884
+ // @ts-ignore
885
+ return this.request({
886
+ method: HTTP_VERBS.GET,
887
+ uri: locusUrl,
888
+ });
889
+ }
834
890
  }