@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.131

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 (519) hide show
  1. package/README.md +45 -1
  2. package/UPGRADING.md +9 -9
  3. package/browsers.js +19 -24
  4. package/dist/annotation/annotation.types.js +7 -0
  5. package/dist/annotation/annotation.types.js.map +1 -0
  6. package/dist/annotation/constants.js +48 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +355 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +193 -0
  11. package/dist/breakouts/breakout.js.map +1 -0
  12. package/dist/breakouts/collection.js +23 -0
  13. package/dist/breakouts/collection.js.map +1 -0
  14. package/dist/breakouts/edit-lock-error.js +52 -0
  15. package/dist/breakouts/edit-lock-error.js.map +1 -0
  16. package/dist/breakouts/events.js +43 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +994 -0
  19. package/dist/breakouts/index.js.map +1 -0
  20. package/dist/breakouts/request.js +78 -0
  21. package/dist/breakouts/request.js.map +1 -0
  22. package/dist/breakouts/utils.js +67 -0
  23. package/dist/breakouts/utils.js.map +1 -0
  24. package/dist/common/browser-detection.js +1 -20
  25. package/dist/common/browser-detection.js.map +1 -1
  26. package/dist/common/collection.js +5 -20
  27. package/dist/common/collection.js.map +1 -1
  28. package/dist/common/config.js +0 -7
  29. package/dist/common/config.js.map +1 -1
  30. package/dist/common/errors/captcha-error.js +5 -26
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +5 -26
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +6 -27
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +5 -26
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/parameter.js +5 -33
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +5 -26
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +4 -25
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reconnection-in-progress.js +0 -17
  45. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  46. package/dist/common/errors/reconnection.js +5 -26
  47. package/dist/common/errors/reconnection.js.map +1 -1
  48. package/dist/common/errors/stats.js +5 -26
  49. package/dist/common/errors/stats.js.map +1 -1
  50. package/dist/common/errors/webex-errors.js +6 -41
  51. package/dist/common/errors/webex-errors.js.map +1 -1
  52. package/dist/common/errors/webex-meetings-error.js +1 -24
  53. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  54. package/dist/common/events/events-scope.js +0 -22
  55. package/dist/common/events/events-scope.js.map +1 -1
  56. package/dist/common/events/events.js +0 -23
  57. package/dist/common/events/events.js.map +1 -1
  58. package/dist/common/events/trigger-proxy.js +0 -12
  59. package/dist/common/events/trigger-proxy.js.map +1 -1
  60. package/dist/common/events/util.js +0 -15
  61. package/dist/common/events/util.js.map +1 -1
  62. package/dist/common/logs/logger-config.js +0 -4
  63. package/dist/common/logs/logger-config.js.map +1 -1
  64. package/dist/common/logs/logger-proxy.js +1 -8
  65. package/dist/common/logs/logger-proxy.js.map +1 -1
  66. package/dist/common/logs/request.js +35 -61
  67. package/dist/common/logs/request.js.map +1 -1
  68. package/dist/common/queue.js +4 -14
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.js +6 -6
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.js +203 -53
  73. package/dist/constants.js.map +1 -1
  74. package/dist/controls-options-manager/constants.js +14 -0
  75. package/dist/controls-options-manager/constants.js.map +1 -0
  76. package/dist/controls-options-manager/enums.js +27 -0
  77. package/dist/controls-options-manager/enums.js.map +1 -0
  78. package/dist/controls-options-manager/index.js +297 -0
  79. package/dist/controls-options-manager/index.js.map +1 -0
  80. package/dist/controls-options-manager/types.js +7 -0
  81. package/dist/controls-options-manager/types.js.map +1 -0
  82. package/dist/controls-options-manager/util.js +294 -0
  83. package/dist/controls-options-manager/util.js.map +1 -0
  84. package/dist/index.js +72 -17
  85. package/dist/index.js.map +1 -1
  86. package/dist/locus-info/controlsUtils.js +100 -29
  87. package/dist/locus-info/controlsUtils.js.map +1 -1
  88. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  89. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  90. package/dist/locus-info/fullState.js +0 -15
  91. package/dist/locus-info/fullState.js.map +1 -1
  92. package/dist/locus-info/hostUtils.js +4 -12
  93. package/dist/locus-info/hostUtils.js.map +1 -1
  94. package/dist/locus-info/index.js +406 -216
  95. package/dist/locus-info/index.js.map +1 -1
  96. package/dist/locus-info/infoUtils.js +0 -38
  97. package/dist/locus-info/infoUtils.js.map +1 -1
  98. package/dist/locus-info/mediaSharesUtils.js +54 -38
  99. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  100. package/dist/locus-info/parser.js +88 -123
  101. package/dist/locus-info/parser.js.map +1 -1
  102. package/dist/locus-info/selfUtils.js +105 -91
  103. package/dist/locus-info/selfUtils.js.map +1 -1
  104. package/dist/media/index.js +55 -165
  105. package/dist/media/index.js.map +1 -1
  106. package/dist/media/properties.js +71 -117
  107. package/dist/media/properties.js.map +1 -1
  108. package/dist/media/util.js +2 -9
  109. package/dist/media/util.js.map +1 -1
  110. package/dist/mediaQualityMetrics/config.js +505 -495
  111. package/dist/mediaQualityMetrics/config.js.map +1 -1
  112. package/dist/meeting/in-meeting-actions.js +77 -14
  113. package/dist/meeting/in-meeting-actions.js.map +1 -1
  114. package/dist/meeting/index.js +2603 -2462
  115. package/dist/meeting/index.js.map +1 -1
  116. package/dist/meeting/locusMediaRequest.js +291 -0
  117. package/dist/meeting/locusMediaRequest.js.map +1 -0
  118. package/dist/meeting/muteState.js +292 -138
  119. package/dist/meeting/muteState.js.map +1 -1
  120. package/dist/meeting/request.js +315 -336
  121. package/dist/meeting/request.js.map +1 -1
  122. package/dist/meeting/request.type.js +7 -0
  123. package/dist/meeting/request.type.js.map +1 -0
  124. package/dist/meeting/state.js +21 -31
  125. package/dist/meeting/state.js.map +1 -1
  126. package/dist/meeting/util.js +463 -583
  127. package/dist/meeting/util.js.map +1 -1
  128. package/dist/meeting-info/collection.js +3 -25
  129. package/dist/meeting-info/collection.js.map +1 -1
  130. package/dist/meeting-info/index.js +10 -33
  131. package/dist/meeting-info/index.js.map +1 -1
  132. package/dist/meeting-info/meeting-info-v2.js +305 -286
  133. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  134. package/dist/meeting-info/request.js +1 -16
  135. package/dist/meeting-info/request.js.map +1 -1
  136. package/dist/meeting-info/util.js +98 -183
  137. package/dist/meeting-info/util.js.map +1 -1
  138. package/dist/meeting-info/utilv2.js +156 -232
  139. package/dist/meeting-info/utilv2.js.map +1 -1
  140. package/dist/meetings/collection.js +24 -20
  141. package/dist/meetings/collection.js.map +1 -1
  142. package/dist/meetings/index.js +692 -593
  143. package/dist/meetings/index.js.map +1 -1
  144. package/dist/meetings/request.js +23 -42
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +186 -155
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.js +89 -88
  149. package/dist/member/index.js.map +1 -1
  150. package/dist/member/types.js +15 -0
  151. package/dist/member/types.js.map +1 -0
  152. package/dist/member/util.js +101 -69
  153. package/dist/member/util.js.map +1 -1
  154. package/dist/members/collection.js +12 -12
  155. package/dist/members/collection.js.map +1 -1
  156. package/dist/members/index.js +166 -205
  157. package/dist/members/index.js.map +1 -1
  158. package/dist/members/request.js +120 -85
  159. package/dist/members/request.js.map +1 -1
  160. package/dist/members/types.js +15 -0
  161. package/dist/members/types.js.map +1 -0
  162. package/dist/members/util.js +314 -260
  163. package/dist/members/util.js.map +1 -1
  164. package/dist/metrics/config.js +50 -16
  165. package/dist/metrics/config.js.map +1 -1
  166. package/dist/metrics/constants.js +4 -7
  167. package/dist/metrics/constants.js.map +1 -1
  168. package/dist/metrics/index.js +93 -162
  169. package/dist/metrics/index.js.map +1 -1
  170. package/dist/multistream/mediaRequestManager.js +167 -50
  171. package/dist/multistream/mediaRequestManager.js.map +1 -1
  172. package/dist/multistream/receiveSlot.js +58 -65
  173. package/dist/multistream/receiveSlot.js.map +1 -1
  174. package/dist/multistream/receiveSlotManager.js +74 -93
  175. package/dist/multistream/receiveSlotManager.js.map +1 -1
  176. package/dist/multistream/remoteMedia.js +55 -74
  177. package/dist/multistream/remoteMedia.js.map +1 -1
  178. package/dist/multistream/remoteMediaGroup.js +6 -40
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +466 -442
  181. package/dist/multistream/remoteMediaManager.js.map +1 -1
  182. package/dist/networkQualityMonitor/index.js +32 -59
  183. package/dist/networkQualityMonitor/index.js.map +1 -1
  184. package/dist/personal-meeting-room/index.js +10 -45
  185. package/dist/personal-meeting-room/index.js.map +1 -1
  186. package/dist/personal-meeting-room/request.js +2 -33
  187. package/dist/personal-meeting-room/request.js.map +1 -1
  188. package/dist/personal-meeting-room/util.js +0 -13
  189. package/dist/personal-meeting-room/util.js.map +1 -1
  190. package/dist/reachability/index.js +190 -199
  191. package/dist/reachability/index.js.map +1 -1
  192. package/dist/reachability/request.js +14 -23
  193. package/dist/reachability/request.js.map +1 -1
  194. package/dist/reactions/constants.js +13 -0
  195. package/dist/reactions/constants.js.map +1 -0
  196. package/dist/reactions/reactions.js +2 -4
  197. package/dist/reactions/reactions.js.map +1 -1
  198. package/dist/reactions/reactions.type.js +19 -23
  199. package/dist/reactions/reactions.type.js.map +1 -1
  200. package/dist/reconnection-manager/index.js +326 -465
  201. package/dist/reconnection-manager/index.js.map +1 -1
  202. package/dist/recording-controller/enums.js +17 -0
  203. package/dist/recording-controller/enums.js.map +1 -0
  204. package/dist/recording-controller/index.js +343 -0
  205. package/dist/recording-controller/index.js.map +1 -0
  206. package/dist/recording-controller/util.js +63 -0
  207. package/dist/recording-controller/util.js.map +1 -0
  208. package/dist/roap/index.js +31 -75
  209. package/dist/roap/index.js.map +1 -1
  210. package/dist/roap/request.js +129 -136
  211. package/dist/roap/request.js.map +1 -1
  212. package/dist/roap/turnDiscovery.js +143 -103
  213. package/dist/roap/turnDiscovery.js.map +1 -1
  214. package/dist/statsAnalyzer/global.js +1 -95
  215. package/dist/statsAnalyzer/global.js.map +1 -1
  216. package/dist/statsAnalyzer/index.js +369 -461
  217. package/dist/statsAnalyzer/index.js.map +1 -1
  218. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  219. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  220. package/dist/transcription/index.js +13 -45
  221. package/dist/transcription/index.js.map +1 -1
  222. package/dist/types/annotation/annotation.types.d.ts +35 -0
  223. package/dist/types/annotation/constants.d.ts +31 -0
  224. package/dist/types/annotation/index.d.ts +124 -0
  225. package/dist/types/breakouts/breakout.d.ts +8 -0
  226. package/dist/types/breakouts/collection.d.ts +5 -0
  227. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  228. package/dist/types/breakouts/events.d.ts +2 -0
  229. package/dist/types/breakouts/index.d.ts +5 -0
  230. package/dist/types/breakouts/request.d.ts +22 -0
  231. package/dist/types/breakouts/utils.d.ts +15 -0
  232. package/dist/types/common/browser-detection.d.ts +9 -0
  233. package/dist/types/common/collection.d.ts +48 -0
  234. package/dist/types/common/config.d.ts +2 -0
  235. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  236. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  237. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  238. package/dist/types/common/errors/media.d.ts +15 -0
  239. package/dist/types/common/errors/parameter.d.ts +15 -0
  240. package/dist/types/common/errors/password-error.d.ts +15 -0
  241. package/dist/types/common/errors/permission.d.ts +14 -0
  242. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  243. package/dist/types/common/errors/reconnection.d.ts +15 -0
  244. package/dist/types/common/errors/stats.d.ts +15 -0
  245. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  246. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  247. package/dist/types/common/events/events-scope.d.ts +17 -0
  248. package/dist/types/common/events/events.d.ts +12 -0
  249. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  250. package/dist/types/common/events/util.d.ts +2 -0
  251. package/dist/types/common/logs/logger-config.d.ts +2 -0
  252. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  253. package/dist/types/common/logs/request.d.ts +34 -0
  254. package/dist/types/common/queue.d.ts +32 -0
  255. package/dist/types/config.d.ts +78 -0
  256. package/dist/types/constants.d.ts +993 -0
  257. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  258. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  259. package/dist/types/controls-options-manager/index.d.ts +136 -0
  260. package/dist/types/controls-options-manager/types.d.ts +43 -0
  261. package/dist/types/controls-options-manager/util.d.ts +1 -0
  262. package/dist/types/index.d.ts +7 -0
  263. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  264. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  265. package/dist/types/locus-info/fullState.d.ts +2 -0
  266. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  267. package/dist/types/locus-info/index.d.ts +315 -0
  268. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  269. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  270. package/dist/types/locus-info/parser.d.ts +212 -0
  271. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  272. package/dist/types/media/index.d.ts +34 -0
  273. package/dist/types/media/properties.d.ts +108 -0
  274. package/dist/types/media/util.d.ts +2 -0
  275. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  276. package/dist/types/meeting/in-meeting-actions.d.ts +147 -0
  277. package/dist/types/meeting/index.d.ts +1762 -0
  278. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  279. package/dist/types/meeting/muteState.d.ts +186 -0
  280. package/dist/types/meeting/request.d.ts +269 -0
  281. package/dist/types/meeting/request.type.d.ts +11 -0
  282. package/dist/types/meeting/state.d.ts +9 -0
  283. package/dist/types/meeting/util.d.ts +76 -0
  284. package/dist/types/meeting-info/collection.d.ts +20 -0
  285. package/dist/types/meeting-info/index.d.ts +57 -0
  286. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  287. package/dist/types/meeting-info/request.d.ts +22 -0
  288. package/dist/types/meeting-info/util.d.ts +2 -0
  289. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  290. package/dist/types/meetings/collection.d.ts +31 -0
  291. package/dist/types/meetings/index.d.ts +345 -0
  292. package/dist/types/meetings/request.d.ts +27 -0
  293. package/dist/types/meetings/util.d.ts +18 -0
  294. package/dist/types/member/index.d.ts +157 -0
  295. package/dist/types/member/types.d.ts +21 -0
  296. package/dist/types/member/util.d.ts +2 -0
  297. package/dist/types/members/collection.d.ts +29 -0
  298. package/dist/types/members/index.d.ts +353 -0
  299. package/dist/types/members/request.d.ts +114 -0
  300. package/dist/types/members/types.d.ts +24 -0
  301. package/dist/types/members/util.d.ts +210 -0
  302. package/dist/types/metrics/config.d.ts +195 -0
  303. package/dist/types/metrics/constants.d.ts +55 -0
  304. package/dist/types/metrics/index.d.ts +169 -0
  305. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  306. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  307. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  308. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  309. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  310. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  311. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  312. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  313. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  314. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  315. package/dist/types/reachability/index.d.ts +152 -0
  316. package/dist/types/reachability/request.d.ts +37 -0
  317. package/dist/types/reactions/constants.d.ts +3 -0
  318. package/dist/types/reactions/reactions.d.ts +4 -0
  319. package/dist/types/reactions/reactions.type.d.ts +52 -0
  320. package/dist/types/reconnection-manager/index.d.ts +126 -0
  321. package/dist/types/recording-controller/enums.d.ts +7 -0
  322. package/dist/types/recording-controller/index.d.ts +193 -0
  323. package/dist/types/recording-controller/util.d.ts +13 -0
  324. package/dist/types/roap/index.d.ts +77 -0
  325. package/dist/types/roap/request.d.ts +36 -0
  326. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  327. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  328. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  329. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  330. package/dist/types/transcription/index.d.ts +64 -0
  331. package/internal-README.md +7 -6
  332. package/package.json +28 -21
  333. package/src/annotation/annotation.types.ts +42 -0
  334. package/src/annotation/constants.ts +36 -0
  335. package/src/annotation/index.ts +339 -0
  336. package/src/breakouts/README.md +220 -0
  337. package/src/breakouts/breakout.ts +163 -0
  338. package/src/breakouts/collection.ts +19 -0
  339. package/src/breakouts/edit-lock-error.ts +25 -0
  340. package/src/breakouts/events.ts +37 -0
  341. package/src/breakouts/index.ts +860 -0
  342. package/src/breakouts/request.ts +55 -0
  343. package/src/breakouts/utils.ts +57 -0
  344. package/src/common/browser-detection.ts +9 -6
  345. package/src/common/collection.ts +3 -1
  346. package/src/common/errors/captcha-error.ts +6 -6
  347. package/src/common/errors/intent-to-join.ts +6 -6
  348. package/src/common/errors/join-meeting.ts +12 -8
  349. package/src/common/errors/media.ts +6 -6
  350. package/src/common/errors/parameter.ts +9 -6
  351. package/src/common/errors/password-error.ts +6 -6
  352. package/src/common/errors/permission.ts +5 -5
  353. package/src/common/errors/reconnection.ts +6 -6
  354. package/src/common/errors/stats.ts +6 -6
  355. package/src/common/errors/webex-errors.ts +7 -5
  356. package/src/common/errors/webex-meetings-error.ts +1 -1
  357. package/src/common/events/events-scope.ts +5 -1
  358. package/src/common/events/events.ts +5 -1
  359. package/src/common/events/trigger-proxy.ts +8 -3
  360. package/src/common/events/util.ts +1 -2
  361. package/src/common/logs/logger-proxy.ts +21 -10
  362. package/src/common/logs/request.ts +11 -8
  363. package/src/config.ts +16 -12
  364. package/src/constants.ts +153 -7
  365. package/src/controls-options-manager/constants.ts +5 -0
  366. package/src/controls-options-manager/enums.ts +18 -0
  367. package/src/controls-options-manager/index.ts +278 -0
  368. package/src/controls-options-manager/types.ts +59 -0
  369. package/src/controls-options-manager/util.ts +281 -0
  370. package/src/index.ts +33 -0
  371. package/src/locus-info/controlsUtils.ts +142 -24
  372. package/src/locus-info/fullState.ts +15 -11
  373. package/src/locus-info/hostUtils.ts +4 -3
  374. package/src/locus-info/index.ts +346 -55
  375. package/src/locus-info/infoUtils.ts +12 -4
  376. package/src/locus-info/mediaSharesUtils.ts +52 -4
  377. package/src/locus-info/parser.ts +46 -68
  378. package/src/locus-info/selfUtils.ts +195 -56
  379. package/src/media/index.ts +139 -196
  380. package/src/media/properties.ts +43 -36
  381. package/src/media/util.ts +1 -1
  382. package/src/mediaQualityMetrics/config.ts +380 -378
  383. package/src/meeting/in-meeting-actions.ts +159 -3
  384. package/src/meeting/index.ts +2803 -1584
  385. package/src/meeting/locusMediaRequest.ts +309 -0
  386. package/src/meeting/muteState.ts +290 -72
  387. package/src/meeting/request.ts +247 -178
  388. package/src/meeting/request.type.ts +13 -0
  389. package/src/meeting/state.ts +45 -30
  390. package/src/meeting/util.ts +445 -395
  391. package/src/meeting-info/collection.ts +2 -1
  392. package/src/meeting-info/index.ts +32 -30
  393. package/src/meeting-info/meeting-info-v2.ts +235 -116
  394. package/src/meeting-info/request.ts +9 -3
  395. package/src/meeting-info/util.ts +54 -46
  396. package/src/meeting-info/utilv2.ts +71 -55
  397. package/src/meetings/collection.ts +21 -1
  398. package/src/meetings/index.ts +772 -437
  399. package/src/meetings/request.ts +29 -25
  400. package/src/meetings/util.ts +132 -33
  401. package/src/member/index.ts +95 -49
  402. package/src/member/types.ts +24 -0
  403. package/src/member/util.ts +106 -13
  404. package/src/members/collection.ts +8 -1
  405. package/src/members/index.ts +288 -130
  406. package/src/members/request.ts +144 -31
  407. package/src/members/types.ts +28 -0
  408. package/src/members/util.ts +316 -235
  409. package/src/metrics/config.ts +302 -90
  410. package/src/metrics/constants.ts +2 -6
  411. package/src/metrics/index.ts +124 -95
  412. package/src/multistream/mediaRequestManager.ts +203 -45
  413. package/src/multistream/receiveSlot.ts +69 -26
  414. package/src/multistream/receiveSlotManager.ts +62 -38
  415. package/src/multistream/remoteMedia.ts +30 -4
  416. package/src/multistream/remoteMediaGroup.ts +4 -3
  417. package/src/multistream/remoteMediaManager.ts +230 -66
  418. package/src/networkQualityMonitor/index.ts +24 -27
  419. package/src/personal-meeting-room/index.ts +12 -16
  420. package/src/personal-meeting-room/request.ts +10 -3
  421. package/src/personal-meeting-room/util.ts +3 -3
  422. package/src/reachability/index.ts +131 -79
  423. package/src/reachability/request.ts +43 -34
  424. package/src/reactions/constants.ts +4 -0
  425. package/src/reactions/reactions.ts +8 -8
  426. package/src/reactions/reactions.type.ts +31 -5
  427. package/src/reconnection-manager/index.ts +193 -111
  428. package/src/recording-controller/enums.ts +8 -0
  429. package/src/recording-controller/index.ts +315 -0
  430. package/src/recording-controller/util.ts +58 -0
  431. package/src/roap/index.ts +53 -53
  432. package/src/roap/request.ts +77 -64
  433. package/src/roap/turnDiscovery.ts +101 -48
  434. package/src/statsAnalyzer/global.ts +8 -104
  435. package/src/statsAnalyzer/index.ts +624 -376
  436. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  437. package/src/transcription/index.ts +34 -32
  438. package/test/integration/spec/converged-space-meetings.js +177 -0
  439. package/test/integration/spec/journey.js +670 -466
  440. package/test/integration/spec/space-meeting.js +320 -204
  441. package/test/integration/spec/transcription.js +7 -8
  442. package/test/unit/spec/annotation/index.ts +433 -0
  443. package/test/unit/spec/breakouts/breakout.ts +203 -0
  444. package/test/unit/spec/breakouts/collection.ts +15 -0
  445. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  446. package/test/unit/spec/breakouts/events.ts +77 -0
  447. package/test/unit/spec/breakouts/index.ts +1609 -0
  448. package/test/unit/spec/breakouts/request.ts +104 -0
  449. package/test/unit/spec/breakouts/utils.js +72 -0
  450. package/test/unit/spec/common/browser-detection.js +9 -28
  451. package/test/unit/spec/controls-options-manager/index.js +287 -0
  452. package/test/unit/spec/controls-options-manager/util.js +504 -0
  453. package/test/unit/spec/fixture/locus.js +93 -90
  454. package/test/unit/spec/locus-info/controlsUtils.js +305 -32
  455. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  456. package/test/unit/spec/locus-info/index.js +636 -5
  457. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  458. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  459. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  460. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  461. package/test/unit/spec/locus-info/parser.js +3 -9
  462. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  463. package/test/unit/spec/locus-info/selfUtils.js +252 -12
  464. package/test/unit/spec/media/index.ts +104 -8
  465. package/test/unit/spec/media/properties.ts +9 -9
  466. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -3
  467. package/test/unit/spec/meeting/index.js +3112 -921
  468. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  469. package/test/unit/spec/meeting/muteState.js +421 -94
  470. package/test/unit/spec/meeting/request.js +421 -79
  471. package/test/unit/spec/meeting/utils.js +326 -189
  472. package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
  473. package/test/unit/spec/meeting-info/request.js +7 -9
  474. package/test/unit/spec/meeting-info/util.js +11 -12
  475. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  476. package/test/unit/spec/meetings/collection.js +15 -1
  477. package/test/unit/spec/meetings/index.js +1126 -328
  478. package/test/unit/spec/meetings/utils.js +220 -14
  479. package/test/unit/spec/member/index.js +24 -1
  480. package/test/unit/spec/member/util.js +383 -32
  481. package/test/unit/spec/members/index.js +424 -55
  482. package/test/unit/spec/members/request.js +228 -40
  483. package/test/unit/spec/members/utils.js +191 -4
  484. package/test/unit/spec/metrics/index.js +113 -20
  485. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  486. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  487. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  488. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  489. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  490. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  491. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  492. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  493. package/test/unit/spec/reachability/index.ts +176 -27
  494. package/test/unit/spec/reachability/request.js +66 -0
  495. package/test/unit/spec/reconnection-manager/index.js +62 -31
  496. package/test/unit/spec/recording-controller/index.js +231 -0
  497. package/test/unit/spec/recording-controller/util.js +102 -0
  498. package/test/unit/spec/roap/index.ts +19 -49
  499. package/test/unit/spec/roap/request.ts +187 -0
  500. package/test/unit/spec/roap/turnDiscovery.ts +92 -50
  501. package/test/unit/spec/stats-analyzer/index.js +116 -60
  502. package/test/utils/cmr.js +44 -42
  503. package/test/utils/constants.js +9 -0
  504. package/test/utils/integrationTestUtils.js +64 -0
  505. package/test/utils/testUtils.js +63 -99
  506. package/test/utils/webex-config.js +22 -18
  507. package/test/utils/webex-test-users.js +57 -50
  508. package/tsconfig.json +6 -0
  509. package/dist/media/internal-media-core-wrapper.js +0 -22
  510. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  511. package/dist/meeting/effectsState.js +0 -334
  512. package/dist/meeting/effectsState.js.map +0 -1
  513. package/dist/multistream/multistreamMedia.js +0 -116
  514. package/dist/multistream/multistreamMedia.js.map +0 -1
  515. package/src/index.js +0 -15
  516. package/src/media/internal-media-core-wrapper.ts +0 -9
  517. package/src/meeting/effectsState.ts +0 -211
  518. package/src/multistream/multistreamMedia.ts +0 -92
  519. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -34,7 +34,8 @@ export default class MeetingInfoCollection extends Collection {
34
34
  return find(
35
35
  // @ts-ignore
36
36
  this.meetingInfos,
37
- (info) => info.sipUrl === id || info.locusId === id || info.userId === id || info.meetingLink === id
37
+ (info) =>
38
+ info.sipUrl === id || info.locusId === id || info.userId === id || info.meetingLink === id
38
39
  );
39
40
  }
40
41
  }
@@ -2,11 +2,7 @@
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
4
 
5
- import {
6
- _MEETING_LINK_,
7
- _SIP_URI_,
8
- _PERSONAL_ROOM_
9
- } from '../constants';
5
+ import {_MEETING_LINK_, _SIP_URI_, _PERSONAL_ROOM_} from '../constants';
10
6
  import LoggerProxy from '../common/logs/logger-proxy';
11
7
 
12
8
  import MeetingInfoCollection from './collection';
@@ -34,7 +30,7 @@ export default class MeetingInfo {
34
30
  * @type {Object}
35
31
  * @private
36
32
  * @memberof MeetingInfo
37
- */
33
+ */
38
34
  this.meetingInfoRequest = new MeetingInfoRequest(this.webex);
39
35
  /**
40
36
  * The meeting information collection interface
@@ -42,7 +38,7 @@ export default class MeetingInfo {
42
38
  * @type {Object}
43
39
  * @private
44
40
  * @memberof MeetingInfo
45
- */
41
+ */
46
42
  this.meetingInfoCollection = new MeetingInfoCollection();
47
43
  }
48
44
 
@@ -75,17 +71,22 @@ export default class MeetingInfo {
75
71
  * @memberof MeetingInfo
76
72
  */
77
73
  private requestFetchInfo(options: object) {
78
- return this.meetingInfoRequest.fetchMeetingInfo(options).then((info) => {
79
- if (info && info.body) {
80
- this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);
81
- }
74
+ return this.meetingInfoRequest
75
+ .fetchMeetingInfo(options)
76
+ .then((info) => {
77
+ if (info && info.body) {
78
+ this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);
79
+ }
82
80
 
83
- return info;
84
- }).catch((error) => {
85
- LoggerProxy.logger.error(`Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`);
81
+ return info;
82
+ })
83
+ .catch((error) => {
84
+ LoggerProxy.logger.error(
85
+ `Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`
86
+ );
86
87
 
87
- return Promise.reject(error);
88
- });
88
+ return Promise.reject(error);
89
+ });
89
90
  }
90
91
 
91
92
  /**
@@ -100,7 +101,7 @@ export default class MeetingInfo {
100
101
  return MeetingInfoUtil.generateOptions({
101
102
  destination,
102
103
  type,
103
- webex: this.webex
104
+ webex: this.webex,
104
105
  });
105
106
  }
106
107
 
@@ -117,19 +118,20 @@ export default class MeetingInfo {
117
118
  destination = this.webex.internal.device.userId;
118
119
  }
119
120
 
120
- return this.fetchInfoOptions(
121
- MeetingInfoUtil.extractDestination(destination, type),
122
- type
123
- ).then((options) =>
124
- // fetch meeting info
125
- this.requestFetchInfo(options).catch((error) => {
126
- // if it failed the first time as meeting link
127
- if (options.type === _MEETING_LINK_) {
128
- // convert the meeting link to sip URI and retry
129
- return this.requestFetchInfo(this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_));
130
- }
121
+ return this.fetchInfoOptions(MeetingInfoUtil.extractDestination(destination, type), type).then(
122
+ (options) =>
123
+ // fetch meeting info
124
+ this.requestFetchInfo(options).catch((error) => {
125
+ // if it failed the first time as meeting link
126
+ if (options.type === _MEETING_LINK_) {
127
+ // convert the meeting link to sip URI and retry
128
+ return this.requestFetchInfo(
129
+ this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_)
130
+ );
131
+ }
131
132
 
132
- return Promise.reject(error);
133
- }));
133
+ return Promise.reject(error);
134
+ })
135
+ );
134
136
  }
135
137
  }
@@ -1,13 +1,24 @@
1
- import { HTTP_VERBS, _CONVERSATION_URL_, WBXAPPAPI_SERVICE } from '../constants';
1
+ import lodash from 'lodash';
2
+ import {
3
+ HTTP_VERBS,
4
+ _CONVERSATION_URL_,
5
+ WBXAPPAPI_SERVICE,
6
+ DEFAULT_MEETING_INFO_REQUEST_BODY,
7
+ } from '../constants';
2
8
  import Metrics from '../metrics';
9
+ import {eventType} from '../metrics/config';
3
10
  import BEHAVIORAL_METRICS from '../metrics/constants';
4
11
 
5
12
  import MeetingInfoUtil from './utilv2';
6
13
 
7
- const PASSWORD_ERROR_DEFAULT_MESSAGE = 'Password required. Call fetchMeetingInfo() with password argument';
8
- const CAPTCHA_ERROR_DEFAULT_MESSAGE = 'Captcha required. Call fetchMeetingInfo() with captchaInfo argument';
9
- const ADHOC_MEETING_DEFAULT_ERROR = 'Failed starting the adhoc meeting, Please contact support team ';
14
+ const PASSWORD_ERROR_DEFAULT_MESSAGE =
15
+ 'Password required. Call fetchMeetingInfo() with password argument';
16
+ const CAPTCHA_ERROR_DEFAULT_MESSAGE =
17
+ 'Captcha required. Call fetchMeetingInfo() with captchaInfo argument';
18
+ const ADHOC_MEETING_DEFAULT_ERROR =
19
+ 'Failed starting the adhoc meeting, Please contact support team ';
10
20
  const CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES = [423005, 423006];
21
+ const POLICY_ERROR_CODES = [403049, 403104, 403103, 403048, 403102, 403101];
11
22
 
12
23
  /**
13
24
  * Error to indicate that wbxappapi requires a password
@@ -16,19 +27,24 @@ export class MeetingInfoV2PasswordError extends Error {
16
27
  meetingInfo: any;
17
28
  sdkMessage: any;
18
29
  wbxAppApiCode: any;
30
+ body: any;
19
31
 
20
32
  /**
21
- *
22
- * @constructor
23
- * @param {Number} [wbxAppApiErrorCode]
24
- * @param {Object} [meetingInfo]
25
- * @param {String} [message]
26
- */
27
- constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message: string = PASSWORD_ERROR_DEFAULT_MESSAGE) {
33
+ *
34
+ * @constructor
35
+ * @param {Number} [wbxAppApiErrorCode]
36
+ * @param {Object} [meetingInfo]
37
+ * @param {String} [message]
38
+ */
39
+ constructor(
40
+ wbxAppApiErrorCode?: number,
41
+ meetingInfo?: object,
42
+ message: string = PASSWORD_ERROR_DEFAULT_MESSAGE
43
+ ) {
28
44
  super(`${message}, code=${wbxAppApiErrorCode}`);
29
45
  this.name = 'MeetingInfoV2PasswordError';
30
46
  this.sdkMessage = message;
31
- this.stack = (new Error()).stack;
47
+ this.stack = new Error().stack;
32
48
  this.wbxAppApiCode = wbxAppApiErrorCode;
33
49
  this.meetingInfo = meetingInfo;
34
50
  }
@@ -41,40 +57,69 @@ export class MeetingInfoV2AdhocMeetingError extends Error {
41
57
  sdkMessage: any;
42
58
  wbxAppApiCode: any;
43
59
  /**
44
- *
45
- * @constructor
46
- * @param {Number} [wbxAppApiErrorCode]
47
- * @param {String} [message]
48
- */
60
+ *
61
+ * @constructor
62
+ * @param {Number} [wbxAppApiErrorCode]
63
+ * @param {String} [message]
64
+ */
49
65
  constructor(wbxAppApiErrorCode?: number, message: string = ADHOC_MEETING_DEFAULT_ERROR) {
50
66
  super(`${message}, code=${wbxAppApiErrorCode}`);
51
67
  this.name = 'MeetingInfoV2AdhocMeetingError';
52
68
  this.sdkMessage = message;
53
- this.stack = (new Error()).stack;
69
+ this.stack = new Error().stack;
54
70
  this.wbxAppApiCode = wbxAppApiErrorCode;
55
71
  }
56
72
  }
57
73
 
58
74
  /**
59
- * Error to indicate that preferred webex site not present to start adhoc meeting
75
+ * Error preventing join because of a meeting policy
76
+ */
77
+ export class MeetingInfoV2PolicyError extends Error {
78
+ meetingInfo: object;
79
+ sdkMessage: string;
80
+ wbxAppApiCode: number;
81
+ /**
82
+ *
83
+ * @constructor
84
+ * @param {Number} [wbxAppApiErrorCode]
85
+ * @param {Object} [meetingInfo]
86
+ * @param {String} [message]
60
87
  */
88
+ constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string) {
89
+ super(`${message}, code=${wbxAppApiErrorCode}`);
90
+ this.name = 'MeetingInfoV2AdhocMeetingError';
91
+ this.sdkMessage = message;
92
+ this.stack = new Error().stack;
93
+ this.wbxAppApiCode = wbxAppApiErrorCode;
94
+ this.meetingInfo = meetingInfo;
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Error to indicate that preferred webex site not present to start adhoc meeting
100
+ */
61
101
  export class MeetingInfoV2CaptchaError extends Error {
62
102
  captchaInfo: any;
63
103
  isPasswordRequired: any;
64
104
  sdkMessage: any;
65
105
  wbxAppApiCode: any;
106
+ body: any;
66
107
  /**
67
- *
68
- * @constructor
69
- * @param {Number} [wbxAppApiErrorCode]
70
- * @param {Object} [captchaInfo]
71
- * @param {String} [message]
72
- */
73
- constructor(wbxAppApiErrorCode?: number, captchaInfo?: object, message: string = CAPTCHA_ERROR_DEFAULT_MESSAGE) {
108
+ *
109
+ * @constructor
110
+ * @param {Number} [wbxAppApiErrorCode]
111
+ * @param {Object} [captchaInfo]
112
+ * @param {String} [message]
113
+ */
114
+ constructor(
115
+ wbxAppApiErrorCode?: number,
116
+ captchaInfo?: object,
117
+ message: string = CAPTCHA_ERROR_DEFAULT_MESSAGE
118
+ ) {
74
119
  super(`${message}, code=${wbxAppApiErrorCode}`);
75
120
  this.name = 'MeetingInfoV2PasswordError';
76
121
  this.sdkMessage = message;
77
- this.stack = (new Error()).stack;
122
+ this.stack = new Error().stack;
78
123
  this.wbxAppApiCode = wbxAppApiErrorCode;
79
124
  this.isPasswordRequired = CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES.includes(wbxAppApiErrorCode);
80
125
  this.captchaInfo = captchaInfo;
@@ -82,43 +127,67 @@ export class MeetingInfoV2CaptchaError extends Error {
82
127
  }
83
128
 
84
129
  /**
85
- * @class MeetingInfo
86
- */
130
+ * @class MeetingInfo
131
+ */
87
132
  export default class MeetingInfoV2 {
88
133
  webex: any;
89
134
 
90
135
  /**
91
- *
92
- * @param {WebexSDK} webex
93
- */
136
+ *
137
+ * @param {WebexSDK} webex
138
+ */
94
139
  constructor(webex) {
95
140
  this.webex = webex;
96
141
  }
97
142
 
98
143
  /**
99
- * converts hydra id into conversation url and persons Id
100
- * @param {String} destination one of many different types of destinations to look up info for
101
- * @param {String} [type] to match up with the destination value
102
- * @returns {Promise} destination and type
103
- * @public
104
- * @memberof MeetingInfo
105
- */
144
+ * converts hydra id into conversation url and persons Id
145
+ * @param {String} destination one of many different types of destinations to look up info for
146
+ * @param {String} [type] to match up with the destination value
147
+ * @returns {Promise} destination and type
148
+ * @public
149
+ * @memberof MeetingInfo
150
+ */
106
151
  fetchInfoOptions(destination: string, type: string = null) {
107
152
  return MeetingInfoUtil.getDestinationType({
108
153
  destination,
109
154
  type,
110
- webex: this.webex
155
+ webex: this.webex,
111
156
  });
112
157
  }
113
158
 
114
159
  /**
115
- * Creates adhoc space meetings for a space by fetching the conversation infomation
116
- * @param {String} conversationUrl conversationUrl to start adhoc meeting on
117
- * @returns {Promise} returns a meeting info object
118
- * @public
119
- * @memberof MeetingInfo
120
- */
121
- async createAdhocSpaceMeeting(conversationUrl: string) {
160
+ * Raises a MeetingInfoV2PolicyError for policy error codes
161
+ * @param {any} err the error from the request
162
+ * @returns {void}
163
+ */
164
+ handlePolicyError = (err) => {
165
+ if (!err.body) {
166
+ return;
167
+ }
168
+
169
+ if (POLICY_ERROR_CODES.includes(err.body?.code)) {
170
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_INFO_POLICY_ERROR, {
171
+ code: err.body?.code,
172
+ });
173
+
174
+ throw new MeetingInfoV2PolicyError(
175
+ err.body?.code,
176
+ err.body?.data?.meetingInfo,
177
+ err.body?.message
178
+ );
179
+ }
180
+ };
181
+
182
+ /**
183
+ * Creates adhoc space meetings for a space by fetching the conversation infomation
184
+ * @param {String} conversationUrl conversationUrl to start adhoc meeting on
185
+ * @param {String} installedOrgID org ID of user's machine
186
+ * @returns {Promise} returns a meeting info object
187
+ * @public
188
+ * @memberof MeetingInfo
189
+ */
190
+ async createAdhocSpaceMeeting(conversationUrl: string, installedOrgID?: string) {
122
191
  if (!this.webex.meetings.preferredWebexSite) {
123
192
  throw Error('No preferred webex site found');
124
193
  }
@@ -129,7 +198,7 @@ export default class MeetingInfoV2 {
129
198
  particpants.forEach((participant) => {
130
199
  invitees.push({
131
200
  email: participant.emailAddress,
132
- ciUserUuid: participant.entryUUID
201
+ ciUserUuid: participant.entryUUID,
133
202
  });
134
203
  });
135
204
  }
@@ -137,56 +206,70 @@ export default class MeetingInfoV2 {
137
206
  return invitees;
138
207
  };
139
208
 
140
- return this.webex.internal.conversation.get(
141
- {url: conversationUrl},
142
- {includeParticipants: true, disableTransform: true}
143
- )
209
+ return this.webex.internal.conversation
210
+ .get({url: conversationUrl}, {includeParticipants: true, disableTransform: true})
144
211
  .then((conversation) => {
145
- const body = {
212
+ const body: {
213
+ title: string;
214
+ spaceUrl: string;
215
+ keyUrl: string;
216
+ kroUrl: string;
217
+ invitees: any[];
218
+ installedOrgID?: string;
219
+ } = {
146
220
  title: conversation.displayName,
147
221
  spaceUrl: conversation.url,
148
222
  keyUrl: conversation.encryptionKeyUrl,
149
223
  kroUrl: conversation.kmsResourceObjectUrl,
150
- invitees: getInvitees(conversation.participants?.items)
224
+ invitees: getInvitees(conversation.participants?.items),
151
225
  };
152
226
 
153
- const uri = this.webex.meetings.preferredWebexSite ?
154
- `https://${this.webex.meetings.preferredWebexSite}/wbxappapi/v2/meetings/spaceInstant` : '';
227
+ if (installedOrgID) {
228
+ body.installedOrgID = installedOrgID;
229
+ }
155
230
 
156
- Metrics.sendBehavioralMetric(
157
- BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS
158
- );
231
+ const uri = this.webex.meetings.preferredWebexSite
232
+ ? `https://${this.webex.meetings.preferredWebexSite}/wbxappapi/v2/meetings/spaceInstant`
233
+ : '';
159
234
 
160
235
  return this.webex.request({
161
236
  method: HTTP_VERBS.POST,
162
237
  uri,
163
- body
238
+ body,
164
239
  });
165
240
  })
241
+ .then((requestResult) => {
242
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
243
+
244
+ return requestResult;
245
+ })
166
246
  .catch((err) => {
167
- Metrics.sendBehavioralMetric(
168
- BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE,
169
- {
170
- reason: err.message,
171
- stack: err.stack
172
- }
173
- );
247
+ this.handlePolicyError(err);
248
+
249
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE, {
250
+ reason: err.message,
251
+ stack: err.stack,
252
+ });
174
253
  throw new MeetingInfoV2AdhocMeetingError(err.body?.code, err.body?.message);
175
254
  });
176
255
  }
177
256
 
178
257
  /**
179
- * Fetches meeting info from the server
180
- * @param {String} destination one of many different types of destinations to look up info for
181
- * @param {String} [type] to match up with the destination value
182
- * @param {String} password
183
- * @param {Object} captchaInfo
184
- * @param {String} captchaInfo.code
185
- * @param {String} captchaInfo.id
186
- * @returns {Promise} returns a meeting info object
187
- * @public
188
- * @memberof MeetingInfo
189
- */
258
+ * Fetches meeting info from the server
259
+ * @param {String} destination one of many different types of destinations to look up info for
260
+ * @param {String} [type] to match up with the destination value
261
+ * @param {String} password
262
+ * @param {Object} captchaInfo
263
+ * @param {String} captchaInfo.code
264
+ * @param {String} captchaInfo.id
265
+ * @param {String} installedOrgID org ID of user's machine
266
+ * @param {String} locusId
267
+ * @param {Object} extraParams
268
+ * @param {Object} options
269
+ * @returns {Promise} returns a meeting info object
270
+ * @public
271
+ * @memberof MeetingInfo
272
+ */
190
273
  async fetchMeetingInfo(
191
274
  destination: string,
192
275
  type: string = null,
@@ -194,79 +277,115 @@ export default class MeetingInfoV2 {
194
277
  captchaInfo: {
195
278
  code: string;
196
279
  id: string;
197
- } = null
280
+ } = null,
281
+ installedOrgID = null,
282
+ locusId = null,
283
+ extraParams: object = {},
284
+ options: {meetingId?: string} = {}
198
285
  ) {
286
+ const {meetingId} = options;
287
+
199
288
  const destinationType = await MeetingInfoUtil.getDestinationType({
200
289
  destination,
201
290
  type,
202
- webex: this.webex
291
+ webex: this.webex,
203
292
  });
204
293
 
205
- if (destinationType.type === _CONVERSATION_URL_ && this.webex.config.meetings.experimental.enableAdhocMeetings && this.webex.meetings.preferredWebexSite) {
206
- return this.createAdhocSpaceMeeting(destinationType.destination);
294
+ if (
295
+ destinationType.type === _CONVERSATION_URL_ &&
296
+ this.webex.config.meetings.experimental.enableAdhocMeetings &&
297
+ this.webex.meetings.preferredWebexSite
298
+ ) {
299
+ return this.createAdhocSpaceMeeting(destinationType.destination, installedOrgID);
207
300
  }
208
301
 
209
- const body = await MeetingInfoUtil.getRequestBody({...destinationType, password, captchaInfo});
302
+ const body = await MeetingInfoUtil.getRequestBody({
303
+ ...destinationType,
304
+ password,
305
+ captchaInfo,
306
+ installedOrgID,
307
+ locusId,
308
+ extraParams,
309
+ });
310
+
311
+ // If the body only contains the default properties, we don't have enough to
312
+ // fetch the meeting info so don't bother trying.
313
+ if (
314
+ !lodash.difference(Object.keys(body), Object.keys(DEFAULT_MEETING_INFO_REQUEST_BODY)).length
315
+ ) {
316
+ const err = new Error('Not enough information to fetch meeting info');
317
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE, {
318
+ reason: err.message,
319
+ destinationType: destinationType?.type,
320
+ webExMeetingId: destinationType?.info?.webExMeetingId,
321
+ sipUri: destinationType?.info?.sipUri,
322
+ });
210
323
 
211
- const options: any = {
324
+ throw err;
325
+ }
326
+
327
+ const requestOptions: any = {
212
328
  method: HTTP_VERBS.POST,
213
- body
329
+ body,
214
330
  };
215
331
 
216
332
  const directURI = await MeetingInfoUtil.getDirectMeetingInfoURI(destinationType);
217
333
 
218
334
  if (directURI) {
219
- options.uri = directURI;
220
- }
221
- else {
222
- options.service = WBXAPPAPI_SERVICE;
223
- options.resource = 'meetingInfo';
335
+ requestOptions.uri = directURI;
336
+ } else {
337
+ requestOptions.service = WBXAPPAPI_SERVICE;
338
+ requestOptions.resource = 'meetingInfo';
224
339
  }
225
340
 
226
- return this.webex.request(options)
341
+ return this.webex
342
+ .request(requestOptions)
227
343
  .then((response) => {
228
- Metrics.sendBehavioralMetric(
229
- BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS
230
- );
344
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS);
231
345
 
232
346
  return response;
233
347
  })
234
348
  .catch((err) => {
349
+ if (meetingId) {
350
+ const parsedError = Metrics.parseWebexApiError(err, true);
351
+ Metrics.postEvent({
352
+ event: eventType.MEETING_INFO_RESPONSE,
353
+ meetingId,
354
+ data: {
355
+ errors: parsedError ? [parsedError] : undefined,
356
+ meetingLookupUrl: err?.url,
357
+ },
358
+ });
359
+ }
360
+
235
361
  if (err?.statusCode === 403) {
236
- Metrics.sendBehavioralMetric(
237
- BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR,
238
- {
239
- reason: err.message,
240
- stack: err.stack
241
- }
242
- );
362
+ this.handlePolicyError(err);
363
+
364
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR, {
365
+ reason: err.message,
366
+ stack: err.stack,
367
+ });
243
368
 
244
369
  throw new MeetingInfoV2PasswordError(err.body?.code, err.body?.data?.meetingInfo);
245
370
  }
246
371
  if (err?.statusCode === 423) {
247
- Metrics.sendBehavioralMetric(
248
- BEHAVIORAL_METRICS.VERIFY_CAPTCHA_ERROR,
249
- {
250
- reason: err.message,
251
- stack: err.stack
252
- }
253
- );
372
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_CAPTCHA_ERROR, {
373
+ reason: err.message,
374
+ stack: err.stack,
375
+ });
254
376
 
255
377
  throw new MeetingInfoV2CaptchaError(err.body?.code, {
256
378
  captchaId: err.body.captchaID,
257
379
  verificationImageURL: err.body.verificationImageURL,
258
380
  verificationAudioURL: err.body.verificationAudioURL,
259
- refreshURL: err.body.refreshURL
381
+ refreshURL: err.body.refreshURL,
260
382
  });
261
383
  }
262
384
 
263
- Metrics.sendBehavioralMetric(
264
- BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE,
265
- {
266
- reason: err.message,
267
- stack: err.stack
268
- }
269
- );
385
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE, {
386
+ reason: err.message,
387
+ stack: err.stack,
388
+ });
270
389
  throw err;
271
390
  });
272
391
  }
@@ -3,7 +3,6 @@ import ParameterError from '../common/errors/parameter';
3
3
 
4
4
  import MeetingInfoUtil from './util';
5
5
 
6
-
7
6
  /**
8
7
  * @class MeetingInfoRequest
9
8
  */
@@ -30,10 +29,17 @@ export default class MeetingInfoRequest {
30
29
  */
31
30
  fetchMeetingInfo(options: any) {
32
31
  if (!options || !options.type || !options.destination) {
33
- throw new ParameterError('MeetingInfo should be fetched with a type and destination specified, see list of valid types and their corresponding values in constants');
32
+ throw new ParameterError(
33
+ 'MeetingInfo should be fetched with a type and destination specified, see list of valid types and their corresponding values in constants'
34
+ );
34
35
  }
35
36
  const resourceUrl = MeetingInfoUtil.getResourceUrl(options.type, options.destination);
36
- const requestParams = MeetingInfoUtil.getRequestParams(resourceUrl, options.type, options.destination, API.LOCUS);
37
+ const requestParams = MeetingInfoUtil.getRequestParams(
38
+ resourceUrl,
39
+ options.type,
40
+ options.destination,
41
+ API.LOCUS
42
+ );
37
43
 
38
44
  return this.webex.request(requestParams);
39
45
  }