@webex/plugin-meetings 3.0.0-beta.10 → 3.0.0-beta.104

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 (512) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +5 -26
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +5 -26
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +6 -27
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +5 -26
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +5 -26
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +4 -25
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +5 -26
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +5 -26
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +6 -41
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +1 -24
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +35 -61
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +6 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +173 -52
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +327 -211
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +0 -38
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +88 -123
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +62 -147
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +71 -117
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +2 -9
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2396 -2388
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +252 -113
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +318 -283
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +58 -217
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +3 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +10 -33
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +263 -282
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +1 -16
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +24 -20
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +675 -593
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +23 -42
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +177 -155
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +80 -88
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -69
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +12 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +162 -204
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +58 -53
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +61 -161
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +167 -50
  168. package/dist/multistream/mediaRequestManager.js.map +1 -1
  169. package/dist/multistream/receiveSlot.js +58 -65
  170. package/dist/multistream/receiveSlot.js.map +1 -1
  171. package/dist/multistream/receiveSlotManager.js +74 -93
  172. package/dist/multistream/receiveSlotManager.js.map +1 -1
  173. package/dist/multistream/remoteMedia.js +55 -74
  174. package/dist/multistream/remoteMedia.js.map +1 -1
  175. package/dist/multistream/remoteMediaGroup.js +6 -40
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  177. package/dist/multistream/remoteMediaManager.js +466 -442
  178. package/dist/multistream/remoteMediaManager.js.map +1 -1
  179. package/dist/networkQualityMonitor/index.js +32 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +10 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +2 -33
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +190 -199
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +14 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +326 -465
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +38 -67
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +143 -134
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +149 -101
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -95
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +369 -461
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +13 -45
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +28 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/browser-detection.ts +9 -6
  341. package/src/common/collection.ts +3 -1
  342. package/src/common/errors/captcha-error.ts +6 -6
  343. package/src/common/errors/intent-to-join.ts +6 -6
  344. package/src/common/errors/join-meeting.ts +12 -8
  345. package/src/common/errors/media.ts +6 -6
  346. package/src/common/errors/parameter.ts +9 -6
  347. package/src/common/errors/password-error.ts +6 -6
  348. package/src/common/errors/permission.ts +5 -5
  349. package/src/common/errors/reconnection.ts +6 -6
  350. package/src/common/errors/stats.ts +6 -6
  351. package/src/common/errors/webex-errors.ts +7 -5
  352. package/src/common/errors/webex-meetings-error.ts +1 -1
  353. package/src/common/events/events-scope.ts +5 -1
  354. package/src/common/events/events.ts +5 -1
  355. package/src/common/events/trigger-proxy.ts +8 -3
  356. package/src/common/events/util.ts +1 -2
  357. package/src/common/logs/logger-proxy.ts +21 -10
  358. package/src/common/logs/request.ts +11 -8
  359. package/src/config.ts +16 -12
  360. package/src/constants.ts +119 -6
  361. package/src/controls-options-manager/constants.ts +5 -0
  362. package/src/controls-options-manager/enums.ts +16 -0
  363. package/src/controls-options-manager/index.ts +278 -0
  364. package/src/controls-options-manager/types.ts +49 -0
  365. package/src/controls-options-manager/util.ts +229 -0
  366. package/src/index.ts +33 -0
  367. package/src/locus-info/controlsUtils.ts +91 -24
  368. package/src/locus-info/fullState.ts +15 -11
  369. package/src/locus-info/hostUtils.ts +4 -3
  370. package/src/locus-info/index.ts +270 -54
  371. package/src/locus-info/infoUtils.ts +12 -4
  372. package/src/locus-info/mediaSharesUtils.ts +4 -4
  373. package/src/locus-info/parser.ts +46 -68
  374. package/src/locus-info/selfUtils.ts +187 -56
  375. package/src/media/index.ts +142 -172
  376. package/src/media/properties.ts +43 -36
  377. package/src/media/util.ts +1 -1
  378. package/src/mediaQualityMetrics/config.ts +380 -378
  379. package/src/meeting/in-meeting-actions.ts +123 -3
  380. package/src/meeting/index.ts +2617 -1545
  381. package/src/meeting/muteState.ts +271 -68
  382. package/src/meeting/request.ts +251 -132
  383. package/src/meeting/request.type.ts +13 -0
  384. package/src/meeting/state.ts +45 -30
  385. package/src/meeting/util.ts +119 -110
  386. package/src/meeting-info/collection.ts +2 -1
  387. package/src/meeting-info/index.ts +32 -30
  388. package/src/meeting-info/meeting-info-v2.ts +181 -109
  389. package/src/meeting-info/request.ts +9 -3
  390. package/src/meeting-info/util.ts +54 -46
  391. package/src/meeting-info/utilv2.ts +70 -55
  392. package/src/meetings/collection.ts +21 -1
  393. package/src/meetings/index.ts +749 -437
  394. package/src/meetings/request.ts +29 -25
  395. package/src/meetings/util.ts +122 -33
  396. package/src/member/index.ts +86 -49
  397. package/src/member/types.ts +24 -0
  398. package/src/member/util.ts +92 -13
  399. package/src/members/collection.ts +8 -1
  400. package/src/members/index.ts +281 -129
  401. package/src/members/request.ts +87 -14
  402. package/src/members/types.ts +28 -0
  403. package/src/members/util.ts +140 -49
  404. package/src/metrics/config.ts +256 -90
  405. package/src/metrics/constants.ts +1 -6
  406. package/src/metrics/index.ts +96 -96
  407. package/src/multistream/mediaRequestManager.ts +203 -45
  408. package/src/multistream/receiveSlot.ts +69 -26
  409. package/src/multistream/receiveSlotManager.ts +62 -38
  410. package/src/multistream/remoteMedia.ts +30 -4
  411. package/src/multistream/remoteMediaGroup.ts +4 -3
  412. package/src/multistream/remoteMediaManager.ts +230 -66
  413. package/src/networkQualityMonitor/index.ts +24 -27
  414. package/src/personal-meeting-room/index.ts +12 -16
  415. package/src/personal-meeting-room/request.ts +10 -3
  416. package/src/personal-meeting-room/util.ts +3 -3
  417. package/src/reachability/index.ts +131 -79
  418. package/src/reachability/request.ts +43 -34
  419. package/src/reactions/constants.ts +4 -0
  420. package/src/reactions/reactions.ts +104 -0
  421. package/src/reactions/reactions.type.ts +62 -0
  422. package/src/reconnection-manager/index.ts +193 -111
  423. package/src/recording-controller/enums.ts +8 -0
  424. package/src/recording-controller/index.ts +315 -0
  425. package/src/recording-controller/util.ts +58 -0
  426. package/src/roap/index.ts +63 -51
  427. package/src/roap/request.ts +86 -53
  428. package/src/roap/turnDiscovery.ts +105 -46
  429. package/src/statsAnalyzer/global.ts +8 -104
  430. package/src/statsAnalyzer/index.ts +624 -376
  431. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  432. package/src/transcription/index.ts +34 -32
  433. package/test/integration/spec/converged-space-meetings.js +177 -0
  434. package/test/integration/spec/journey.js +666 -464
  435. package/test/integration/spec/space-meeting.js +320 -204
  436. package/test/integration/spec/transcription.js +7 -8
  437. package/test/unit/spec/annotation/index.ts +435 -0
  438. package/test/unit/spec/breakouts/breakout.ts +184 -0
  439. package/test/unit/spec/breakouts/collection.ts +15 -0
  440. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  441. package/test/unit/spec/breakouts/events.ts +77 -0
  442. package/test/unit/spec/breakouts/index.ts +1504 -0
  443. package/test/unit/spec/breakouts/request.ts +104 -0
  444. package/test/unit/spec/breakouts/utils.js +72 -0
  445. package/test/unit/spec/common/browser-detection.js +9 -28
  446. package/test/unit/spec/controls-options-manager/index.js +287 -0
  447. package/test/unit/spec/controls-options-manager/util.js +403 -0
  448. package/test/unit/spec/fixture/locus.js +92 -90
  449. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  450. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  451. package/test/unit/spec/locus-info/index.js +493 -3
  452. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  453. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  454. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  455. package/test/unit/spec/locus-info/parser.js +3 -9
  456. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  457. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  458. package/test/unit/spec/media/index.ts +104 -8
  459. package/test/unit/spec/media/properties.ts +9 -9
  460. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  461. package/test/unit/spec/meeting/index.js +2649 -837
  462. package/test/unit/spec/meeting/muteState.js +368 -70
  463. package/test/unit/spec/meeting/request.js +217 -43
  464. package/test/unit/spec/meeting/utils.js +146 -165
  465. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  466. package/test/unit/spec/meeting-info/request.js +7 -9
  467. package/test/unit/spec/meeting-info/util.js +11 -12
  468. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  469. package/test/unit/spec/meetings/collection.js +15 -1
  470. package/test/unit/spec/meetings/index.js +1052 -329
  471. package/test/unit/spec/meetings/utils.js +163 -14
  472. package/test/unit/spec/member/index.js +24 -1
  473. package/test/unit/spec/member/util.js +359 -32
  474. package/test/unit/spec/members/index.js +402 -54
  475. package/test/unit/spec/members/request.js +76 -20
  476. package/test/unit/spec/members/utils.js +191 -4
  477. package/test/unit/spec/metrics/index.js +46 -20
  478. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  479. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  480. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  481. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  482. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  483. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  484. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  485. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  486. package/test/unit/spec/reachability/index.ts +176 -27
  487. package/test/unit/spec/reachability/request.js +66 -0
  488. package/test/unit/spec/reconnection-manager/index.js +62 -31
  489. package/test/unit/spec/recording-controller/index.js +231 -0
  490. package/test/unit/spec/recording-controller/util.js +102 -0
  491. package/test/unit/spec/roap/index.ts +21 -16
  492. package/test/unit/spec/roap/request.ts +217 -0
  493. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  494. package/test/unit/spec/stats-analyzer/index.js +116 -60
  495. package/test/utils/cmr.js +44 -42
  496. package/test/utils/constants.js +9 -0
  497. package/test/utils/integrationTestUtils.js +64 -0
  498. package/test/utils/testUtils.js +63 -99
  499. package/test/utils/webex-config.js +22 -18
  500. package/test/utils/webex-test-users.js +57 -50
  501. package/tsconfig.json +6 -0
  502. package/dist/media/internal-media-core-wrapper.js +0 -22
  503. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  504. package/dist/meeting/effectsState.js +0 -334
  505. package/dist/meeting/effectsState.js.map +0 -1
  506. package/dist/multistream/multistreamMedia.js +0 -116
  507. package/dist/multistream/multistreamMedia.js.map +0 -1
  508. package/src/index.js +0 -15
  509. package/src/media/internal-media-core-wrapper.ts +0 -9
  510. package/src/meeting/effectsState.ts +0 -211
  511. package/src/multistream/multistreamMedia.ts +0 -92
  512. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -9,6 +9,7 @@ import LoggerProxy from '../common/logs/logger-proxy';
9
9
  import {
10
10
  ALERT,
11
11
  ALTERNATE_REDIRECT_TRUE,
12
+ BREAKOUTS,
12
13
  CALL,
13
14
  CONTROLS,
14
15
  DECLINE,
@@ -22,9 +23,12 @@ import {
22
23
  PARTICIPANT,
23
24
  PROVISIONAL_TYPE_DIAL_IN,
24
25
  PROVISIONAL_TYPE_DIAL_OUT,
26
+ REACHABILITY,
25
27
  SEND_DTMF_ENDPOINT,
26
- _SLIDES_
28
+ _SLIDES_,
29
+ ANNOTATION,
27
30
  } from '../constants';
31
+ import {SendReactionOptions, ToggleReactionsOptions} from './request.type';
28
32
 
29
33
  /**
30
34
  * @class MeetingRequest
@@ -32,11 +36,45 @@ import {
32
36
  export default class MeetingRequest extends StatelessWebexPlugin {
33
37
  changeVideoLayoutDebounced: any;
34
38
 
39
+ /**
40
+ * Constructor
41
+ * @param {Object} attrs
42
+ * @param {Object} options
43
+ */
35
44
  constructor(attrs: any, options: any) {
36
45
  super(attrs, options);
37
- this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {leading: true, trailing: true});
46
+ this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {
47
+ leading: true,
48
+ trailing: true,
49
+ });
38
50
  }
39
51
 
52
+ /**
53
+ * Returns joinCookie from boundedStorage if present.
54
+ * @returns {Object} joinCookie
55
+ */
56
+ private getJoinCookie = async () => {
57
+ // @ts-ignore
58
+ const joinCookieRaw = await this.webex.boundedStorage
59
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
60
+ .catch(() => {});
61
+
62
+ if (joinCookieRaw) {
63
+ try {
64
+ const joinCookie = JSON.parse(joinCookieRaw);
65
+ if (joinCookie) {
66
+ return joinCookie;
67
+ }
68
+ } catch (e) {
69
+ LoggerProxy.logger.error(
70
+ `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`
71
+ );
72
+ }
73
+ }
74
+
75
+ return null;
76
+ };
77
+
40
78
  /**
41
79
  * Make a network request to join a meeting
42
80
  * @param {Object} options
@@ -50,6 +88,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
50
88
  * @param {boolean} options.pin
51
89
  * @param {boolean} options.moveToResource
52
90
  * @param {Object} options.roapMessage
91
+ * @param {boolean} options.breakoutsSupported
92
+ * @param {boolean} options.liveAnnotationSupported
53
93
  * @returns {Promise}
54
94
  */
55
95
  async joinMeeting(options: {
@@ -68,6 +108,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
68
108
  meetingNumber: any;
69
109
  permissionToken: any;
70
110
  preferTranscoding: any;
111
+ breakoutsSupported: boolean;
112
+ liveAnnotationSupported: boolean;
71
113
  }) {
72
114
  const {
73
115
  asResourceOccupant,
@@ -83,35 +125,48 @@ export default class MeetingRequest extends StatelessWebexPlugin {
83
125
  pin,
84
126
  moveToResource,
85
127
  roapMessage,
86
- preferTranscoding
128
+ preferTranscoding,
129
+ breakoutsSupported,
130
+ liveAnnotationSupported,
87
131
  } = options;
88
132
 
89
- LoggerProxy.logger.info(
90
- 'Meeting:request#joinMeeting --> Joining a meeting',
91
- correlationId
92
- );
133
+ LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);
93
134
 
94
135
  let url = '';
95
136
 
137
+ const joinCookie = await this.getJoinCookie();
138
+
96
139
  const body: any = {
97
140
  asResourceOccupant,
98
141
  device: {
99
142
  url: deviceUrl,
100
143
  // @ts-ignore - config comes from registerPlugin
101
- deviceType: this.config.meetings.deviceType
144
+ deviceType: this.config.meetings.deviceType,
102
145
  },
103
146
  usingResource: resourceId || null,
104
- moveMediaToResource: resourceId && moveToResource || false,
147
+ moveMediaToResource: (resourceId && moveToResource) || false,
105
148
  correlationId,
106
149
  respOnlySdp: true,
107
150
  allowMultiDevice: true,
108
151
  ensureConversation: ensureConversation || false,
109
152
  supportsNativeLobby: 1,
110
153
  clientMediaPreferences: {
111
- preferTranscoding: preferTranscoding ?? true
112
- }
154
+ preferTranscoding: preferTranscoding ?? true,
155
+ joinCookie,
156
+ },
113
157
  };
114
158
 
159
+ let deviceCapabilities = [];
160
+ if (breakoutsSupported) {
161
+ deviceCapabilities = [...deviceCapabilities, BREAKOUTS.BREAKOUTS_SUPPORTED];
162
+ }
163
+ if (liveAnnotationSupported) {
164
+ deviceCapabilities = [...deviceCapabilities, ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED];
165
+ }
166
+ if (deviceCapabilities.length > 0) {
167
+ body.deviceCapabilities = deviceCapabilities;
168
+ }
169
+
115
170
  // @ts-ignore
116
171
  if (this.webex.meetings.clientRegion) {
117
172
  // @ts-ignore
@@ -134,30 +189,29 @@ export default class MeetingRequest extends StatelessWebexPlugin {
134
189
 
135
190
  if (locusUrl) {
136
191
  url = `${locusUrl}/${PARTICIPANT}`;
137
- }
138
- else if (inviteeAddress || meetingNumber) {
192
+ } else if (inviteeAddress || meetingNumber) {
139
193
  try {
140
194
  // @ts-ignore
141
195
  await this.webex.internal.services.waitForCatalog('postauth');
142
196
  // @ts-ignore
143
197
  url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;
144
198
  body.invitee = {
145
- address: inviteeAddress || `wbxmn:${meetingNumber}`
199
+ address: inviteeAddress || `wbxmn:${meetingNumber}`,
146
200
  };
147
- }
148
- catch (e) {
149
- LoggerProxy.logger.error(`Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`);
150
- throw (e);
201
+ } catch (e) {
202
+ LoggerProxy.logger.error(
203
+ `Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`
204
+ );
205
+ throw e;
151
206
  }
152
207
  }
153
208
 
154
-
155
209
  // TODO: -- this will be resolved in SDK request
156
210
  url = url.concat(`?${ALTERNATE_REDIRECT_TRUE}`);
157
211
 
158
212
  if (resourceId === inviteeAddress) {
159
213
  body.callPreferences = {
160
- requestedMedia: [_SLIDES_]
214
+ requestedMedia: [_SLIDES_],
161
215
  };
162
216
  }
163
217
 
@@ -169,7 +223,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
169
223
  return this.request({
170
224
  method: HTTP_VERBS.POST,
171
225
  uri: url,
172
- body
226
+ body,
173
227
  });
174
228
  }
175
229
 
@@ -181,16 +235,22 @@ export default class MeetingRequest extends StatelessWebexPlugin {
181
235
  * @returns {Promise}
182
236
  * @private
183
237
  */
184
- private refreshCaptcha({ captchaRefreshUrl, captchaId }: { captchaRefreshUrl: string; captchaId: string }) {
238
+ private refreshCaptcha({
239
+ captchaRefreshUrl,
240
+ captchaId,
241
+ }: {
242
+ captchaRefreshUrl: string;
243
+ captchaId: string;
244
+ }) {
185
245
  const body = {
186
- captchaId
246
+ captchaId,
187
247
  };
188
248
 
189
249
  // @ts-ignore
190
250
  return this.request({
191
251
  method: HTTP_VERBS.POST,
192
252
  uri: captchaRefreshUrl,
193
- body
253
+ body,
194
254
  }).catch((err) => {
195
255
  LoggerProxy.logger.error(`Meeting:request#refreshCaptcha --> Error: ${err}`);
196
256
 
@@ -230,18 +290,20 @@ export default class MeetingRequest extends StatelessWebexPlugin {
230
290
  deviceType: deviceType.PROVISIONAL,
231
291
  provisionalType: PROVISIONAL_TYPE_DIAL_IN,
232
292
  url: dialInUrl,
233
- clientUrl
293
+ clientUrl,
234
294
  },
235
- correlationId
295
+ correlationId,
236
296
  };
237
297
 
238
298
  // @ts-ignore
239
299
  return this.request({
240
300
  method: HTTP_VERBS.POST,
241
301
  uri,
242
- body
302
+ body,
243
303
  }).catch((err) => {
244
- LoggerProxy.logger.error(`Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`);
304
+ LoggerProxy.logger.error(
305
+ `Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`
306
+ );
245
307
 
246
308
  throw err;
247
309
  });
@@ -283,18 +345,20 @@ export default class MeetingRequest extends StatelessWebexPlugin {
283
345
  provisionalType: PROVISIONAL_TYPE_DIAL_OUT,
284
346
  url: dialOutUrl,
285
347
  dialoutAddress: phoneNumber,
286
- clientUrl
348
+ clientUrl,
287
349
  },
288
- correlationId
350
+ correlationId,
289
351
  };
290
352
 
291
353
  // @ts-ignore
292
354
  return this.request({
293
355
  method: HTTP_VERBS.POST,
294
356
  uri,
295
- body
357
+ body,
296
358
  }).catch((err) => {
297
- LoggerProxy.logger.error(`Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`);
359
+ LoggerProxy.logger.error(
360
+ `Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`
361
+ );
298
362
 
299
363
  throw err;
300
364
  });
@@ -307,7 +371,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
307
371
  * @param {String} options.syncUrl sync url to get ht elatest locus delta
308
372
  * @returns {Promise}
309
373
  */
310
- syncMeeting(options: { desync: boolean; syncUrl: string }) {
374
+ syncMeeting(options: {desync: boolean; syncUrl: string}) {
311
375
  /* eslint-disable no-else-return */
312
376
  const {desync} = options;
313
377
  let {syncUrl} = options;
@@ -315,16 +379,20 @@ export default class MeetingRequest extends StatelessWebexPlugin {
315
379
  /* istanbul ignore else */
316
380
  if (desync) {
317
381
  // check for existing URL parameters
318
- syncUrl = syncUrl.concat(syncUrl.split('?')[1] ? '&' : '?').concat(`${LOCUS.SYNCDEBUG}=${desync}`);
382
+ syncUrl = syncUrl
383
+ .concat(syncUrl.split('?')[1] ? '&' : '?')
384
+ .concat(`${LOCUS.SYNCDEBUG}=${desync}`);
319
385
  }
320
386
 
321
387
  // @ts-ignore
322
388
  return this.request({
323
389
  method: HTTP_VERBS.GET,
324
- uri: syncUrl
390
+ uri: syncUrl,
325
391
  }) // TODO: Handle if delta sync failed . Get the full locus object
326
392
  .catch((err) => {
327
- LoggerProxy.logger.error(`Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`);
393
+ LoggerProxy.logger.error(
394
+ `Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`
395
+ );
328
396
 
329
397
  return err;
330
398
  });
@@ -337,7 +405,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
337
405
  * @param {String} options.locusUrl sync url to get ht elatest locus delta
338
406
  * @returns {Promise}
339
407
  */
340
- getFullLocus(options: { desync: boolean; locusUrl: string }) {
408
+ getFullLocus(options: {desync: boolean; locusUrl: string}) {
341
409
  let {locusUrl} = options;
342
410
  const {desync} = options;
343
411
 
@@ -349,9 +417,11 @@ export default class MeetingRequest extends StatelessWebexPlugin {
349
417
  // @ts-ignore
350
418
  return this.request({
351
419
  method: HTTP_VERBS.GET,
352
- uri: locusUrl
420
+ uri: locusUrl,
353
421
  }).catch((err) => {
354
- LoggerProxy.logger.error(`Meeting:request#getFullLocus --> Error getting full locus, error ${err}`);
422
+ LoggerProxy.logger.error(
423
+ `Meeting:request#getFullLocus --> Error getting full locus, error ${err}`
424
+ );
355
425
 
356
426
  return err;
357
427
  });
@@ -390,16 +460,16 @@ export default class MeetingRequest extends StatelessWebexPlugin {
390
460
  const body = {
391
461
  device: {
392
462
  deviceType: deviceType.PROVISIONAL,
393
- url: phoneUrl
463
+ url: phoneUrl,
394
464
  },
395
- correlationId
465
+ correlationId,
396
466
  };
397
467
 
398
468
  // @ts-ignore
399
469
  return this.request({
400
470
  method: HTTP_VERBS.PUT,
401
471
  uri,
402
- body
472
+ body,
403
473
  }).catch((err) => {
404
474
  LoggerProxy.logger.error(
405
475
  `Meeting:request#disconnectPhoneAudio --> Error when requesting phone ${phoneUrl} to leave, error ${err}`
@@ -432,27 +502,24 @@ export default class MeetingRequest extends StatelessWebexPlugin {
432
502
  resourceId: string;
433
503
  correlationId: string;
434
504
  }) {
435
- LoggerProxy.logger.info(
436
- 'Meeting:request#leaveMeeting --> Leaving a meeting',
437
- correlationId
438
- );
505
+ LoggerProxy.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);
439
506
 
440
507
  const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;
441
508
  const body = {
442
509
  device: {
443
510
  // @ts-ignore
444
511
  deviceType: this.config.meetings.deviceType,
445
- url
512
+ url,
446
513
  },
447
514
  usingResource: resourceId || null,
448
- correlationId
515
+ correlationId,
449
516
  };
450
517
 
451
518
  // @ts-ignore
452
519
  return this.request({
453
520
  method: HTTP_VERBS.PUT,
454
521
  uri,
455
- body
522
+ body,
456
523
  });
457
524
  }
458
525
 
@@ -464,47 +531,22 @@ export default class MeetingRequest extends StatelessWebexPlugin {
464
531
  * @param {String} options.correlationId
465
532
  * @returns {Promise}
466
533
  */
467
- acknowledgeMeeting(options: { locusUrl: string; deviceUrl: string; correlationId: string }) {
534
+ acknowledgeMeeting(options: {locusUrl: string; deviceUrl: string; correlationId: string}) {
468
535
  const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;
469
536
  const body = {
470
537
  device: {
471
538
  // @ts-ignore
472
539
  deviceType: this.config.meetings.deviceType,
473
- url: options.deviceUrl
540
+ url: options.deviceUrl,
474
541
  },
475
- correlationId: options.correlationId
542
+ correlationId: options.correlationId,
476
543
  };
477
544
 
478
545
  // @ts-ignore
479
546
  return this.request({
480
547
  method: HTTP_VERBS.PUT,
481
548
  uri,
482
- body
483
- });
484
- }
485
-
486
- /**
487
- * Make a network request to acknowledge a meeting
488
- * @param {Object} options
489
- * @param {String} options.locusUrl
490
- * @param {String} options.deviceUrl
491
- * @param {String} options.id
492
- * @returns {Promise}
493
- */
494
- recordMeeting(options: { locusUrl: string; deviceUrl: string; id: string, recording: any, paused: any }) {
495
- const uri = `${options.locusUrl}/${CONTROLS}`;
496
- const body = {
497
- record: {
498
- recording: options.recording,
499
- paused: options.paused
500
- }
501
- };
502
-
503
- // @ts-ignore
504
- return this.request({
505
- method: HTTP_VERBS.PATCH,
506
- uri,
507
- body
549
+ body,
508
550
  });
509
551
  }
510
552
 
@@ -512,15 +554,15 @@ export default class MeetingRequest extends StatelessWebexPlugin {
512
554
  const uri = `${options.locusUrl}/${CONTROLS}`;
513
555
  const body = {
514
556
  lock: {
515
- locked: options.lock
516
- }
557
+ locked: options.lock,
558
+ },
517
559
  };
518
560
 
519
561
  // @ts-ignore
520
562
  return this.request({
521
563
  method: HTTP_VERBS.PATCH,
522
564
  uri,
523
- body
565
+ body,
524
566
  });
525
567
  }
526
568
 
@@ -532,13 +574,13 @@ export default class MeetingRequest extends StatelessWebexPlugin {
532
574
  * @param {String} options.reason
533
575
  * @returns {Promise}
534
576
  */
535
- declineMeeting(options: { locusUrl: string; deviceUrl: string; reason: string }) {
577
+ declineMeeting(options: {locusUrl: string; deviceUrl: string; reason: string}) {
536
578
  const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;
537
579
  const body = {
538
580
  device: {
539
581
  // @ts-ignore
540
582
  deviceType: this.config.meetings.deviceType,
541
- url: options.deviceUrl
583
+ url: options.deviceUrl,
542
584
  },
543
585
  ...(options.reason && {reason: options.reason}),
544
586
  };
@@ -547,7 +589,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
547
589
  return this.request({
548
590
  method: HTTP_VERBS.PUT,
549
591
  uri,
550
- body
592
+ body,
551
593
  });
552
594
  }
553
595
 
@@ -562,34 +604,38 @@ export default class MeetingRequest extends StatelessWebexPlugin {
562
604
  * @param {Boolean} options.preferTranscoding false for multistream (Homer), true for transcoded media (Edonus)
563
605
  * @returns {Promise}
564
606
  */
565
- remoteAudioVideoToggle(options: {
566
- selfId: string;
567
- locusUrl: string;
568
- deviceUrl: string;
569
- resourceId: string;
570
- localMedias: string;
571
- } | any) {
607
+ remoteAudioVideoToggle(
608
+ options:
609
+ | {
610
+ selfId: string;
611
+ locusUrl: string;
612
+ deviceUrl: string;
613
+ resourceId: string;
614
+ localMedias: string;
615
+ }
616
+ | any
617
+ ) {
572
618
  const uri = `${options.locusUrl}/${PARTICIPANT}/${options.selfId}/${MEDIA}`;
573
619
  const body = {
574
620
  device: {
575
621
  // @ts-ignore
576
622
  deviceType: this.config.meetings.deviceType,
577
- url: options.deviceUrl
623
+ url: options.deviceUrl,
578
624
  },
579
625
  usingResource: options.resourceId || null,
580
626
  correlationId: options.correlationId,
581
627
  respOnlySdp: true,
582
628
  localMedias: options.localMedias,
583
629
  clientMediaPreferences: {
584
- preferTranscoding: options.preferTranscoding ?? true
585
- }
630
+ preferTranscoding: options.preferTranscoding ?? true,
631
+ },
586
632
  };
587
633
 
588
634
  // @ts-ignore
589
635
  return this.request({
590
636
  method: HTTP_VERBS.PUT,
591
637
  uri,
592
- body
638
+ body,
593
639
  });
594
640
  }
595
641
 
@@ -603,13 +649,18 @@ export default class MeetingRequest extends StatelessWebexPlugin {
603
649
  * @param {String} options.uri floor grant uri
604
650
  * @returns {Promise}
605
651
  */
606
- changeMeetingFloor(options: {
607
- disposition: string;
608
- personUrl: string;
609
- deviceUrl: string;
610
- resourceId: string;
611
- uri: string;
612
- } | any) {
652
+ changeMeetingFloor(
653
+ options:
654
+ | {
655
+ disposition: string;
656
+ personUrl: string;
657
+ deviceUrl: string;
658
+ resourceId: string;
659
+ uri: string;
660
+ annotation: any;
661
+ }
662
+ | any
663
+ ) {
613
664
  let floorReq: any = {disposition: options.disposition};
614
665
 
615
666
  /* istanbul ignore else */
@@ -621,31 +672,34 @@ export default class MeetingRequest extends StatelessWebexPlugin {
621
672
  {
622
673
  // @ts-ignore
623
674
  deviceType: this.config.meetings.deviceType,
624
- url: options.deviceUrl
625
- }
626
- ]
675
+ url: options.deviceUrl,
676
+ },
677
+ ],
627
678
  },
628
679
  disposition: options.disposition,
629
680
  requester: {
630
- url: options.personUrl
631
- }
681
+ url: options.personUrl,
682
+ },
632
683
  };
633
684
  }
634
685
 
635
686
  const body: any = {
636
687
  floor: floorReq,
637
- resourceUrl: options.resourceUrl
688
+ resourceUrl: options.resourceUrl,
638
689
  };
639
690
 
640
691
  if (options?.resourceToken) {
641
692
  body.resourceToken = options?.resourceToken;
642
693
  }
694
+ if (options?.annotation) {
695
+ body.annotation = options?.annotation;
696
+ }
643
697
 
644
698
  // @ts-ignore
645
699
  return this.request({
646
700
  uri: options.uri,
647
701
  method: HTTP_VERBS.PUT,
648
- body
702
+ body,
649
703
  });
650
704
  }
651
705
 
@@ -657,7 +711,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
657
711
  * @param {String} options.tones a string of one or more DTMF tones to send
658
712
  * @returns {Promise}
659
713
  */
660
- sendDTMF({ locusUrl, deviceUrl, tones }: { locusUrl: string; deviceUrl: string; tones: string }) {
714
+ sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {
661
715
  // @ts-ignore
662
716
  return this.request({
663
717
  method: HTTP_VERBS.POST,
@@ -666,9 +720,9 @@ export default class MeetingRequest extends StatelessWebexPlugin {
666
720
  deviceUrl,
667
721
  dtmf: {
668
722
  correlationId: uuid.v4(),
669
- tones
670
- }
671
- }
723
+ tones,
724
+ },
725
+ },
672
726
  });
673
727
  }
674
728
 
@@ -707,24 +761,37 @@ export default class MeetingRequest extends StatelessWebexPlugin {
707
761
  }) {
708
762
  // send main/content renderInfo only if both width and height are specified
709
763
  if (main && (!main.width || !main.height)) {
710
- return Promise.reject(new Error(`Both width and height must be specified. One of them is missing for main: ${JSON.stringify(main)}`));
764
+ return Promise.reject(
765
+ new Error(
766
+ `Both width and height must be specified. One of them is missing for main: ${JSON.stringify(
767
+ main
768
+ )}`
769
+ )
770
+ );
711
771
  }
712
772
 
713
773
  if (content && (!content.width || !content.height)) {
714
- return Promise.reject(new Error(`Both width and height must be specified. One of them is missing for content: ${JSON.stringify(content)}`));
774
+ return Promise.reject(
775
+ new Error(
776
+ `Both width and height must be specified. One of them is missing for content: ${JSON.stringify(
777
+ content
778
+ )}`
779
+ )
780
+ );
715
781
  }
716
782
 
717
- const renderInfoMain = (main) ? {width: main.width, height: main.height} : undefined;
718
- const renderInfoContent = (content) ? {width: content.width, height: content.height} : undefined;
783
+ const renderInfoMain = main ? {width: main.width, height: main.height} : undefined;
784
+ const renderInfoContent = content ? {width: content.width, height: content.height} : undefined;
719
785
 
720
- const layoutParams = (renderInfoMain || renderInfoContent) ?
721
- {
722
- renderInfo:
723
- {
724
- main: renderInfoMain,
725
- content: renderInfoContent
726
- }
727
- } : undefined;
786
+ const layoutParams =
787
+ renderInfoMain || renderInfoContent
788
+ ? {
789
+ renderInfo: {
790
+ main: renderInfoMain,
791
+ content: renderInfoContent,
792
+ },
793
+ }
794
+ : undefined;
728
795
 
729
796
  // @ts-ignore
730
797
  return this.request({
@@ -734,9 +801,9 @@ export default class MeetingRequest extends StatelessWebexPlugin {
734
801
  layout: {
735
802
  deviceUrl,
736
803
  type: layoutType,
737
- layoutParams
738
- }
739
- }
804
+ layoutParams,
805
+ },
806
+ },
740
807
  });
741
808
  }
742
809
 
@@ -746,13 +813,13 @@ export default class MeetingRequest extends StatelessWebexPlugin {
746
813
  * @param {Url} options.locusUrl
747
814
  * @returns {Promise}
748
815
  */
749
- endMeetingForAll({ locusUrl }: { locusUrl: string }) {
816
+ endMeetingForAll({locusUrl}: {locusUrl: string}) {
750
817
  const uri = `${locusUrl}/${END}`;
751
818
 
752
819
  // @ts-ignore
753
820
  return this.request({
754
821
  method: HTTP_VERBS.POST,
755
- uri
822
+ uri,
756
823
  });
757
824
  }
758
825
 
@@ -762,11 +829,63 @@ export default class MeetingRequest extends StatelessWebexPlugin {
762
829
  * @param {Url} options.keepAliveUrl
763
830
  * @returns {Promise}
764
831
  */
765
- keepAlive({ keepAliveUrl }: { keepAliveUrl: string }) {
832
+ keepAlive({keepAliveUrl}: {keepAliveUrl: string}) {
833
+ // @ts-ignore
834
+ return this.request({
835
+ method: HTTP_VERBS.GET,
836
+ uri: keepAliveUrl,
837
+ });
838
+ }
839
+
840
+ /**
841
+ * Make a network request to send a reaction.
842
+ * @param {Object} options
843
+ * @param {Url} options.reactionChannelUrl
844
+ * @param {Reaction} options.reaction
845
+ * @param {string} options.senderID
846
+ * @returns {Promise}
847
+ */
848
+ sendReaction({reactionChannelUrl, reaction, participantId}: SendReactionOptions) {
849
+ const uri = reactionChannelUrl;
850
+
851
+ // @ts-ignore
852
+ return this.request({
853
+ method: HTTP_VERBS.POST,
854
+ uri,
855
+ body: {
856
+ sender: {participantId},
857
+ reaction,
858
+ },
859
+ });
860
+ }
861
+
862
+ /**
863
+ * Make a network request to enable or disable reactions.
864
+ * @param {boolean} options.enable - determines if we need to enable or disable.
865
+ * @param {locusUrl} options.locusUrl
866
+ * @returns {Promise}
867
+ */
868
+ toggleReactions({enable, locusUrl, requestingParticipantId}: ToggleReactionsOptions) {
869
+ const uri = `${locusUrl}/${CONTROLS}`;
870
+
871
+ // @ts-ignore
872
+ return this.request({
873
+ method: HTTP_VERBS.PUT,
874
+ uri,
875
+ body: {
876
+ reactions: {
877
+ enabled: enable,
878
+ },
879
+ requestingParticipantId,
880
+ },
881
+ });
882
+ }
883
+
884
+ getLocusStatusByUrl(locusUrl: string) {
766
885
  // @ts-ignore
767
886
  return this.request({
768
887
  method: HTTP_VERBS.GET,
769
- uri: keepAliveUrl
888
+ uri: locusUrl,
770
889
  });
771
890
  }
772
891
  }