@webex/plugin-meetings 3.0.0-beta.28 → 3.0.0-beta.280

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 (363) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +763 -31
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/no-meeting-info.js +51 -0
  21. package/dist/common/errors/no-meeting-info.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +28 -7
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +5 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +203 -28
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +112 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +366 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +383 -62
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +57 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +249 -72
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +58 -116
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +72 -123
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +82 -2
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +3123 -2814
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +292 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +230 -124
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +256 -196
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/util.js +601 -417
  75. package/dist/meeting/util.js.map +1 -1
  76. package/dist/meeting-info/index.js +73 -7
  77. package/dist/meeting-info/index.js.map +1 -1
  78. package/dist/meeting-info/meeting-info-v2.js +192 -51
  79. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  80. package/dist/meeting-info/util.js +1 -1
  81. package/dist/meeting-info/util.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +36 -36
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +394 -94
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +71 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -6
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +12 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +40 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +39 -36
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +209 -59
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/multistream/sendSlotManager.js +233 -0
  127. package/dist/multistream/sendSlotManager.js.map +1 -0
  128. package/dist/reachability/index.js +225 -59
  129. package/dist/reachability/index.js.map +1 -1
  130. package/dist/reachability/request.js +17 -8
  131. package/dist/reachability/request.js.map +1 -1
  132. package/dist/reconnection-manager/index.js +199 -154
  133. package/dist/reconnection-manager/index.js.map +1 -1
  134. package/dist/recording-controller/index.js +21 -2
  135. package/dist/recording-controller/index.js.map +1 -1
  136. package/dist/recording-controller/util.js +9 -8
  137. package/dist/recording-controller/util.js.map +1 -1
  138. package/dist/roap/index.js +23 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +112 -97
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +96 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/rtcMetrics/constants.js +12 -0
  145. package/dist/rtcMetrics/constants.js.map +1 -0
  146. package/dist/rtcMetrics/index.js +117 -0
  147. package/dist/rtcMetrics/index.js.map +1 -0
  148. package/dist/statsAnalyzer/index.js +67 -73
  149. package/dist/statsAnalyzer/index.js.map +1 -1
  150. package/dist/statsAnalyzer/mqaUtil.js +11 -10
  151. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  152. package/dist/types/annotation/annotation.types.d.ts +42 -0
  153. package/dist/types/annotation/constants.d.ts +31 -0
  154. package/dist/types/annotation/index.d.ts +117 -0
  155. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  156. package/dist/types/breakouts/events.d.ts +8 -0
  157. package/dist/types/breakouts/request.d.ts +22 -0
  158. package/dist/types/breakouts/utils.d.ts +15 -0
  159. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  160. package/dist/types/common/errors/webex-errors.d.ts +13 -1
  161. package/dist/types/common/queue.d.ts +9 -7
  162. package/dist/types/config.d.ts +1 -6
  163. package/dist/types/constants.d.ts +161 -21
  164. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  165. package/dist/types/controls-options-manager/index.d.ts +17 -1
  166. package/dist/types/controls-options-manager/types.d.ts +43 -0
  167. package/dist/types/controls-options-manager/util.d.ts +1 -7
  168. package/dist/types/index.d.ts +6 -4
  169. package/dist/types/interpretation/collection.d.ts +5 -0
  170. package/dist/types/interpretation/index.d.ts +5 -0
  171. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  172. package/dist/types/locus-info/index.d.ts +57 -4
  173. package/dist/types/locus-info/parser.d.ts +67 -6
  174. package/dist/types/media/index.d.ts +2 -0
  175. package/dist/types/media/properties.d.ts +34 -48
  176. package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
  177. package/dist/types/meeting/index.d.ts +345 -507
  178. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  179. package/dist/types/meeting/muteState.d.ts +99 -23
  180. package/dist/types/meeting/request.d.ts +72 -43
  181. package/dist/types/meeting/util.d.ts +101 -1
  182. package/dist/types/meeting-info/index.d.ts +13 -1
  183. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  184. package/dist/types/meetings/collection.d.ts +8 -0
  185. package/dist/types/meetings/index.d.ts +88 -12
  186. package/dist/types/meetings/meetings.types.d.ts +4 -0
  187. package/dist/types/member/index.d.ts +13 -0
  188. package/dist/types/member/types.d.ts +32 -0
  189. package/dist/types/members/collection.d.ts +5 -0
  190. package/dist/types/members/index.d.ts +35 -2
  191. package/dist/types/members/request.d.ts +73 -9
  192. package/dist/types/members/types.d.ts +24 -0
  193. package/dist/types/members/util.d.ts +209 -1
  194. package/dist/types/metrics/constants.d.ts +11 -4
  195. package/dist/types/metrics/index.d.ts +4 -119
  196. package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
  197. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  198. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  199. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  200. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  201. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  202. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  203. package/dist/types/reachability/index.d.ts +61 -7
  204. package/dist/types/reachability/request.d.ts +7 -3
  205. package/dist/types/reconnection-manager/index.d.ts +9 -0
  206. package/dist/types/recording-controller/index.d.ts +15 -1
  207. package/dist/types/recording-controller/util.d.ts +5 -4
  208. package/dist/types/roap/request.d.ts +15 -11
  209. package/dist/types/roap/turnDiscovery.d.ts +18 -1
  210. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  211. package/dist/types/rtcMetrics/index.d.ts +47 -0
  212. package/dist/types/statsAnalyzer/index.d.ts +6 -1
  213. package/package.json +23 -20
  214. package/src/annotation/annotation.types.ts +50 -0
  215. package/src/annotation/constants.ts +36 -0
  216. package/src/annotation/index.ts +328 -0
  217. package/src/breakouts/README.md +44 -14
  218. package/src/breakouts/breakout.ts +87 -9
  219. package/src/breakouts/edit-lock-error.ts +25 -0
  220. package/src/breakouts/events.ts +56 -0
  221. package/src/breakouts/index.ts +646 -18
  222. package/src/breakouts/request.ts +55 -0
  223. package/src/breakouts/utils.ts +57 -0
  224. package/src/common/errors/no-meeting-info.ts +24 -0
  225. package/src/common/errors/webex-errors.ts +27 -2
  226. package/src/common/logs/logger-proxy.ts +1 -1
  227. package/src/common/queue.ts +22 -8
  228. package/src/config.ts +4 -9
  229. package/src/constants.ts +184 -18
  230. package/src/controls-options-manager/enums.ts +12 -0
  231. package/src/controls-options-manager/index.ts +116 -21
  232. package/src/controls-options-manager/types.ts +59 -0
  233. package/src/controls-options-manager/util.ts +294 -14
  234. package/src/index.ts +40 -0
  235. package/src/interpretation/README.md +60 -0
  236. package/src/interpretation/collection.ts +19 -0
  237. package/src/interpretation/index.ts +332 -0
  238. package/src/interpretation/siLanguage.ts +18 -0
  239. package/src/locus-info/controlsUtils.ts +108 -0
  240. package/src/locus-info/index.ts +413 -59
  241. package/src/locus-info/infoUtils.ts +10 -2
  242. package/src/locus-info/mediaSharesUtils.ts +64 -0
  243. package/src/locus-info/parser.ts +258 -47
  244. package/src/locus-info/selfUtils.ts +81 -5
  245. package/src/media/index.ts +100 -122
  246. package/src/media/properties.ts +85 -108
  247. package/src/meeting/in-meeting-actions.ts +163 -3
  248. package/src/meeting/index.ts +2541 -2309
  249. package/src/meeting/locusMediaRequest.ts +313 -0
  250. package/src/meeting/muteState.ts +229 -131
  251. package/src/meeting/request.ts +172 -121
  252. package/src/meeting/util.ts +588 -394
  253. package/src/meeting-info/index.ts +81 -8
  254. package/src/meeting-info/meeting-info-v2.ts +170 -14
  255. package/src/meeting-info/util.ts +1 -1
  256. package/src/meeting-info/utilv2.ts +23 -23
  257. package/src/meetings/collection.ts +20 -0
  258. package/src/meetings/index.ts +428 -108
  259. package/src/meetings/meetings.types.ts +12 -0
  260. package/src/meetings/request.ts +2 -0
  261. package/src/meetings/util.ts +79 -4
  262. package/src/member/index.ts +49 -0
  263. package/src/member/types.ts +38 -0
  264. package/src/member/util.ts +127 -25
  265. package/src/members/collection.ts +8 -0
  266. package/src/members/index.ts +106 -7
  267. package/src/members/request.ts +97 -17
  268. package/src/members/types.ts +28 -0
  269. package/src/members/util.ts +319 -240
  270. package/src/metrics/constants.ts +11 -4
  271. package/src/metrics/index.ts +1 -490
  272. package/src/multistream/mediaRequestManager.ts +289 -79
  273. package/src/multistream/receiveSlot.ts +47 -17
  274. package/src/multistream/receiveSlotManager.ts +34 -24
  275. package/src/multistream/remoteMedia.ts +27 -2
  276. package/src/multistream/remoteMediaGroup.ts +59 -0
  277. package/src/multistream/remoteMediaManager.ts +148 -30
  278. package/src/multistream/sendSlotManager.ts +170 -0
  279. package/src/reachability/index.ts +228 -37
  280. package/src/reachability/request.ts +17 -8
  281. package/src/reconnection-manager/index.ts +81 -54
  282. package/src/recording-controller/index.ts +20 -3
  283. package/src/recording-controller/util.ts +26 -9
  284. package/src/roap/index.ts +23 -30
  285. package/src/roap/request.ts +100 -104
  286. package/src/roap/turnDiscovery.ts +51 -25
  287. package/src/rtcMetrics/constants.ts +3 -0
  288. package/src/rtcMetrics/index.ts +100 -0
  289. package/src/statsAnalyzer/index.ts +88 -88
  290. package/src/statsAnalyzer/mqaUtil.ts +13 -14
  291. package/test/integration/spec/converged-space-meetings.js +60 -3
  292. package/test/integration/spec/journey.js +320 -261
  293. package/test/integration/spec/space-meeting.js +76 -3
  294. package/test/unit/spec/annotation/index.ts +418 -0
  295. package/test/unit/spec/breakouts/breakout.ts +142 -24
  296. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  297. package/test/unit/spec/breakouts/events.ts +89 -0
  298. package/test/unit/spec/breakouts/index.ts +1488 -67
  299. package/test/unit/spec/breakouts/request.ts +104 -0
  300. package/test/unit/spec/breakouts/utils.js +72 -0
  301. package/test/unit/spec/common/queue.js +31 -2
  302. package/test/unit/spec/controls-options-manager/index.js +163 -0
  303. package/test/unit/spec/controls-options-manager/util.js +576 -60
  304. package/test/unit/spec/fixture/locus.js +1 -0
  305. package/test/unit/spec/interpretation/collection.ts +15 -0
  306. package/test/unit/spec/interpretation/index.ts +589 -0
  307. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  308. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  309. package/test/unit/spec/locus-info/index.js +1304 -33
  310. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  311. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  312. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  313. package/test/unit/spec/locus-info/parser.js +116 -35
  314. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  315. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  316. package/test/unit/spec/media/index.ts +104 -37
  317. package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
  318. package/test/unit/spec/meeting/index.js +4515 -1932
  319. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  320. package/test/unit/spec/meeting/muteState.js +408 -208
  321. package/test/unit/spec/meeting/request.js +440 -45
  322. package/test/unit/spec/meeting/utils.js +679 -64
  323. package/test/unit/spec/meeting-info/index.js +295 -0
  324. package/test/unit/spec/meeting-info/meetinginfov2.js +521 -5
  325. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  326. package/test/unit/spec/meetings/collection.js +14 -0
  327. package/test/unit/spec/meetings/index.js +1007 -177
  328. package/test/unit/spec/meetings/utils.js +206 -2
  329. package/test/unit/spec/member/index.js +58 -4
  330. package/test/unit/spec/member/util.js +479 -35
  331. package/test/unit/spec/members/index.js +319 -1
  332. package/test/unit/spec/members/request.js +206 -27
  333. package/test/unit/spec/members/utils.js +184 -0
  334. package/test/unit/spec/metrics/index.js +1 -50
  335. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  336. package/test/unit/spec/multistream/receiveSlot.ts +43 -20
  337. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  338. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  339. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  340. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  341. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  342. package/test/unit/spec/reachability/index.ts +549 -9
  343. package/test/unit/spec/reachability/request.js +68 -0
  344. package/test/unit/spec/reconnection-manager/index.js +84 -9
  345. package/test/unit/spec/recording-controller/index.js +294 -218
  346. package/test/unit/spec/recording-controller/util.js +223 -96
  347. package/test/unit/spec/roap/index.ts +31 -51
  348. package/test/unit/spec/roap/request.ts +203 -85
  349. package/test/unit/spec/roap/turnDiscovery.ts +48 -13
  350. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  351. package/test/unit/spec/stats-analyzer/index.js +64 -2
  352. package/test/utils/integrationTestUtils.js +46 -0
  353. package/test/utils/testUtils.js +0 -52
  354. package/dist/meeting/effectsState.js +0 -262
  355. package/dist/meeting/effectsState.js.map +0 -1
  356. package/dist/metrics/config.js +0 -299
  357. package/dist/metrics/config.js.map +0 -1
  358. package/dist/types/meeting/effectsState.d.ts +0 -42
  359. package/dist/types/metrics/config.d.ts +0 -178
  360. package/src/index.js +0 -16
  361. package/src/meeting/effectsState.ts +0 -211
  362. package/src/metrics/config.ts +0 -495
  363. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -1,17 +1,25 @@
1
1
  "use strict";
2
2
 
3
+ var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
3
4
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
5
+ var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
6
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
7
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
8
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
9
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
4
10
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
11
+ var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
5
12
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
13
  _Object$defineProperty(exports, "__esModule", {
7
14
  value: true
8
15
  });
9
16
  exports.default = void 0;
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
11
17
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
12
18
  var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
13
19
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
14
20
  var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
21
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
22
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
15
23
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
16
24
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
17
25
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
@@ -22,13 +30,14 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
22
30
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
23
31
  require("@webex/internal-plugin-mercury");
24
32
  require("@webex/internal-plugin-conversation");
33
+ require("@webex/internal-plugin-metrics");
25
34
  var _webexCore = require("@webex/webex-core");
26
35
  var _internalMediaCore = require("@webex/internal-media-core");
36
+ var mediaHelpersModule = _interopRequireWildcard(require("@webex/media-helpers"));
27
37
  require("webrtc-adapter");
28
38
  var _metrics = _interopRequireDefault(require("../metrics"));
29
- var _config = require("../metrics/config");
30
39
  var _loggerConfig = _interopRequireDefault(require("../common/logs/logger-config"));
31
- var _config2 = _interopRequireDefault(require("../common/config"));
40
+ var _config = _interopRequireDefault(require("../common/config"));
32
41
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
33
42
  var _request = _interopRequireDefault(require("../common/logs/request"));
34
43
  var _triggerProxy = _interopRequireDefault(require("../common/events/trigger-proxy"));
@@ -46,6 +55,13 @@ var _passwordError = _interopRequireDefault(require("../common/errors/password-e
46
55
  var _captchaError = _interopRequireDefault(require("../common/errors/captcha-error"));
47
56
  var _collection = _interopRequireDefault(require("./collection"));
48
57
  var _util2 = _interopRequireDefault(require("./util"));
58
+ var _permission = _interopRequireDefault(require("../common/errors/permission"));
59
+ var _webexErrors = require("../common/errors/webex-errors");
60
+ var _noMeetingInfo = _interopRequireDefault(require("../common/errors/no-meeting-info"));
61
+ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
62
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
63
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
64
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
49
65
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
50
66
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
51
67
  var mediaLogger;
@@ -157,13 +173,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
157
173
  _this = _super.call.apply(_super, [this].concat(args));
158
174
 
159
175
  /**
160
- * The Meetings request to interact with server
176
+ * The webrtc-core media helpers. This is a temporary solution required for the SDK sample app
177
+ * to be able to call media helper functions.
178
+ *
161
179
  * @instance
162
180
  * @type {Object}
163
181
  * @private
164
182
  * @memberof Meetings
165
183
  */
166
- // @ts-ignore
167
184
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "loggerRequest", void 0);
168
185
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "media", void 0);
169
186
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meetingCollection", void 0);
@@ -174,7 +191,61 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
174
191
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "request", void 0);
175
192
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "geoHintInfo", void 0);
176
193
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meetingInfo", void 0);
194
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaHelpers", void 0);
195
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "breakoutLocusForHandleLater", void 0);
177
196
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "namespace", _constants.MEETINGS);
197
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "createNoiseReductionEffect", /*#__PURE__*/function () {
198
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(options) {
199
+ var authToken;
200
+ return _regenerator.default.wrap(function _callee$(_context) {
201
+ while (1) switch (_context.prev = _context.next) {
202
+ case 0:
203
+ // @ts-ignore
204
+ authToken = _this.webex.credentials.supertoken.access_token;
205
+ return _context.abrupt("return", new mediaHelpersModule.NoiseReductionEffect(_objectSpread({
206
+ authToken: authToken
207
+ }, options)));
208
+ case 2:
209
+ case "end":
210
+ return _context.stop();
211
+ }
212
+ }, _callee);
213
+ }));
214
+ return function (_x) {
215
+ return _ref.apply(this, arguments);
216
+ };
217
+ }());
218
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "createVirtualBackgroundEffect", /*#__PURE__*/function () {
219
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(options) {
220
+ var authToken;
221
+ return _regenerator.default.wrap(function _callee2$(_context2) {
222
+ while (1) switch (_context2.prev = _context2.next) {
223
+ case 0:
224
+ // @ts-ignore
225
+ authToken = _this.webex.credentials.supertoken.access_token;
226
+ return _context2.abrupt("return", new mediaHelpersModule.VirtualBackgroundEffect(_objectSpread({
227
+ authToken: authToken
228
+ }, options)));
229
+ case 2:
230
+ case "end":
231
+ return _context2.stop();
232
+ }
233
+ }, _callee2);
234
+ }));
235
+ return function (_x2) {
236
+ return _ref2.apply(this, arguments);
237
+ };
238
+ }());
239
+ _this.mediaHelpers = mediaHelpersModule;
240
+
241
+ /**
242
+ * The Meetings request to interact with server
243
+ * @instance
244
+ * @type {Object}
245
+ * @private
246
+ * @memberof Meetings
247
+ */
248
+ // @ts-ignore
178
249
  _this.request = new _request2.default({}, {
179
250
  parent: _this.webex
180
251
  });
@@ -198,15 +269,17 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
198
269
  * @memberof Meetings
199
270
  */
200
271
  _this.personalMeetingRoom = null;
272
+
201
273
  /**
202
- * The Reachability object to interact with server, starts as null until {@link Meeting#setReachability} is called
274
+ * The Reachability object to interact with server
203
275
  * starts as null
204
276
  * @instance
205
277
  * @type {Object}
206
278
  * @private
207
279
  * @memberof Meetings
208
280
  */
209
- _this.reachability = null;
281
+ // @ts-ignore
282
+ _this.reachability = new _reachability.default(_this.webex);
210
283
 
211
284
  /**
212
285
  * If the meetings plugin has been registered and listening via {@link Meetings#register}
@@ -235,50 +308,152 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
235
308
  * @memberof Meetings
236
309
  */
237
310
  _this.media = {
238
- getUserMedia: _media.default.getUserMedia,
239
- getSupportedDevice: _media.default.getSupportedDevice
311
+ getUserMedia: _media.default.getUserMedia
240
312
  };
241
313
  _this.onReady();
242
314
  return _this;
243
315
  }
244
316
 
245
317
  /**
246
- * handle locus events and takes meeting actions with them as they come in
247
- * @param {Object} data a locus event
248
- * @param {String} data.locusUrl
249
- * @param {Object} data.locus
250
- * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
251
- * @param {String} data.eventType
252
- * @returns {undefined}
318
+ * check whether you need to handle this main session's locus data or not
319
+ * @param {Object} meeting current meeting data
320
+ * @param {Object} newLocus new locus data
321
+ * @returns {boolean}
253
322
  * @private
254
323
  * @memberof Meetings
255
324
  */
256
325
  (0, _createClass2.default)(Meetings, [{
257
- key: "handleLocusEvent",
258
- value: function handleLocusEvent(data) {
259
- var _data$locus$info,
260
- _data$locus,
261
- _data$locus$replaces,
262
- _this2 = this;
263
- var useRandomDelayForInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
264
- var meeting = null;
326
+ key: "isNeedHandleMainLocus",
327
+ value: function isNeedHandleMainLocus(meeting, newLocus) {
328
+ var _newLocus$controls, _newLocus$controls$br, _newLocus$self, _newLocus$self2, _newLocus$self3, _breakoutLocus$joined, _newLocus$self4;
329
+ var breakoutUrl = (_newLocus$controls = newLocus.controls) === null || _newLocus$controls === void 0 ? void 0 : (_newLocus$controls$br = _newLocus$controls.breakout) === null || _newLocus$controls$br === void 0 ? void 0 : _newLocus$controls$br.url;
330
+ var breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);
331
+ var isSelfJoined = (newLocus === null || newLocus === void 0 ? void 0 : (_newLocus$self = newLocus.self) === null || _newLocus$self === void 0 ? void 0 : _newLocus$self.state) === _constants._JOINED_;
332
+ var isSelfMoved = (newLocus === null || newLocus === void 0 ? void 0 : (_newLocus$self2 = newLocus.self) === null || _newLocus$self2 === void 0 ? void 0 : _newLocus$self2.state) === _constants._LEFT_ && (newLocus === null || newLocus === void 0 ? void 0 : (_newLocus$self3 = newLocus.self) === null || _newLocus$self3 === void 0 ? void 0 : _newLocus$self3.reason) === _constants._MOVED_;
333
+ // @ts-ignore
334
+ var deviceFromNewLocus = _util2.default.getThisDevice(newLocus, this.webex.internal.device.url);
335
+ var isResourceMovedOnThisDevice = (deviceFromNewLocus === null || deviceFromNewLocus === void 0 ? void 0 : deviceFromNewLocus.state) === _constants._LEFT_ && (deviceFromNewLocus === null || deviceFromNewLocus === void 0 ? void 0 : deviceFromNewLocus.reason) === _constants._MOVED_;
336
+ var isNewLocusJoinThisDevice = _util2.default.joinedOnThisDevice(meeting, newLocus,
337
+ // @ts-ignore
338
+ this.webex.internal.device.url);
339
+ var isBreakoutLocusJoinThisDevice = (breakoutLocus === null || breakoutLocus === void 0 ? void 0 : (_breakoutLocus$joined = breakoutLocus.joinedWith) === null || _breakoutLocus$joined === void 0 ? void 0 : _breakoutLocus$joined.correlationId) && breakoutLocus.joinedWith.correlationId === (meeting === null || meeting === void 0 ? void 0 : meeting.correlationId);
340
+ if (isSelfJoined && isNewLocusJoinThisDevice) {
341
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session');
342
+ if (breakoutLocus !== null && breakoutLocus !== void 0 && breakoutLocus.joinedWith && deviceFromNewLocus) {
343
+ var _breakoutLocus$joined2, _deviceFromNewLocus$r;
344
+ var breakoutReplaceAt = ((_breakoutLocus$joined2 = breakoutLocus.joinedWith.replaces) === null || _breakoutLocus$joined2 === void 0 ? void 0 : _breakoutLocus$joined2.length) > 0 ? breakoutLocus.joinedWith.replaces[0].replaceAt : '';
345
+ var newLocusReplaceAt = ((_deviceFromNewLocus$r = deviceFromNewLocus.replaces) === null || _deviceFromNewLocus$r === void 0 ? void 0 : _deviceFromNewLocus$r.length) > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';
346
+ if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {
347
+ _loggerProxy.default.logger.log("Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ".concat(newLocusReplaceAt, " bo replacedAt ").concat(breakoutReplaceAt));
348
+ return false;
349
+ }
350
+ }
351
+ return true;
352
+ }
353
+ if (isBreakoutLocusJoinThisDevice) {
354
+ _loggerProxy.default.logger.log("Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ".concat(breakoutUrl));
355
+ return false;
356
+ }
357
+ if (isSelfMoved && (newLocus !== null && newLocus !== void 0 && (_newLocus$self4 = newLocus.self) !== null && _newLocus$self4 !== void 0 && _newLocus$self4.removed || isResourceMovedOnThisDevice)) {
358
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle');
359
+ return false;
360
+ }
361
+ if (isSelfJoined && isResourceMovedOnThisDevice) {
362
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle');
363
+ return false;
364
+ }
365
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case');
366
+ return true;
367
+ }
368
+
369
+ /**
370
+ * check whether you need to handle this locus data or not
371
+ * @param {Object} meeting old locus data
372
+ * @param {Object} newLocus new locus data
373
+ * @returns {boolean}
374
+ * @private
375
+ * @memberof Meetings
376
+ */
377
+ }, {
378
+ key: "isNeedHandleLocusDTO",
379
+ value: function isNeedHandleLocusDTO(meeting, newLocus) {
380
+ if (newLocus) {
381
+ var _newLocus$self5, _newLocus$self6;
382
+ var isNewLocusAsBreakout = _util2.default.isBreakoutLocusDTO(newLocus);
383
+ var isSelfMoved = (newLocus === null || newLocus === void 0 ? void 0 : (_newLocus$self5 = newLocus.self) === null || _newLocus$self5 === void 0 ? void 0 : _newLocus$self5.state) === _constants._LEFT_ && (newLocus === null || newLocus === void 0 ? void 0 : (_newLocus$self6 = newLocus.self) === null || _newLocus$self6 === void 0 ? void 0 : _newLocus$self6.reason) === _constants._MOVED_;
384
+ if (!meeting) {
385
+ if (isNewLocusAsBreakout) {
386
+ var _newLocus$fullState, _newLocus$self7;
387
+ _loggerProxy.default.logger.log("Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ".concat((_newLocus$fullState = newLocus.fullState) === null || _newLocus$fullState === void 0 ? void 0 : _newLocus$fullState.active));
388
+ return ((_newLocus$self7 = newLocus.self) === null || _newLocus$self7 === void 0 ? void 0 : _newLocus$self7.state) === _constants._JOINED_;
389
+ }
390
+ return this.isNeedHandleMainLocus(meeting, newLocus);
391
+ }
392
+ if (!isNewLocusAsBreakout) {
393
+ return this.isNeedHandleMainLocus(meeting, newLocus);
394
+ }
395
+ return !isSelfMoved;
396
+ }
397
+ return true;
398
+ }
265
399
 
400
+ /**
401
+ * get corresponding meeting object by locus data
402
+ * @param {Object} data a locus event
403
+ * @param {String} data.locusUrl
404
+ * @param {Object} data.locus
405
+ * @returns {Object}
406
+ * @private
407
+ * @memberof Meetings
408
+ */
409
+ }, {
410
+ key: "getCorrespondingMeetingByLocus",
411
+ value: function getCorrespondingMeetingByLocus(data) {
412
+ var _data$locus$info, _data$locus, _data$locus$info2;
266
413
  // getting meeting by correlationId. This will happen for the new event
267
414
  // Either the locus
268
415
  // TODO : Add check for the callBack Address
269
- meeting = this.meetingCollection.getByKey(_constants.LOCUS_URL, data.locusUrl) ||
416
+ return this.meetingCollection.getByKey(_constants.LOCUS_URL, data.locusUrl) ||
270
417
  // @ts-ignore
271
418
  this.meetingCollection.getByKey(_constants.CORRELATION_ID,
272
419
  // @ts-ignore
273
- _util2.default.checkForCorrelationId(this.webex.internal.device.url, data.locus)) || this.meetingCollection.getByKey(_constants.SIP_URI, data.locus.self && data.locus.self.callbackInfo && data.locus.self.callbackInfo.callbackAddress) || ((_data$locus$info = data.locus.info) !== null && _data$locus$info !== void 0 && _data$locus$info.isUnifiedSpaceMeeting ? undefined : this.meetingCollection.getByKey(_constants.CONVERSATION_URL, data.locus.conversationUrl));
420
+ _util2.default.checkForCorrelationId(this.webex.internal.device.url, data.locus)) || this.meetingCollection.getByKey(_constants.SIP_URI, data.locus.self && data.locus.self.callbackInfo && data.locus.self.callbackInfo.callbackAddress) || ((_data$locus$info = data.locus.info) !== null && _data$locus$info !== void 0 && _data$locus$info.isUnifiedSpaceMeeting ? undefined : this.meetingCollection.getByKey(_constants.CONVERSATION_URL, data.locus.conversationUrl)) || this.meetingCollection.getByKey(_constants.MEETINGNUMBER, (_data$locus = data.locus) === null || _data$locus === void 0 ? void 0 : (_data$locus$info2 = _data$locus.info) === null || _data$locus$info2 === void 0 ? void 0 : _data$locus$info2.webExMeetingId);
421
+ }
422
+
423
+ /**
424
+ * handle locus events and takes meeting actions with them as they come in
425
+ * @param {Object} data a locus event
426
+ * @param {String} data.locusUrl
427
+ * @param {Object} data.locus
428
+ * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
429
+ * @param {String} data.eventType
430
+ * @returns {undefined}
431
+ * @private
432
+ * @memberof Meetings
433
+ */
434
+ }, {
435
+ key: "handleLocusEvent",
436
+ value: function handleLocusEvent(data) {
437
+ var _data$locus2,
438
+ _data$locus2$replaces,
439
+ _this2 = this;
440
+ var useRandomDelayForInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
441
+ var meeting = this.getCorrespondingMeetingByLocus(data);
274
442
 
275
443
  // Special case when locus has got replaced, This only happend once if a replace locus exists
276
444
  // https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call
277
445
 
278
- if (!meeting && ((_data$locus = data.locus) === null || _data$locus === void 0 ? void 0 : (_data$locus$replaces = _data$locus.replaces) === null || _data$locus$replaces === void 0 ? void 0 : _data$locus$replaces.length) > 0) {
446
+ if (!meeting && ((_data$locus2 = data.locus) === null || _data$locus2 === void 0 ? void 0 : (_data$locus2$replaces = _data$locus2.replaces) === null || _data$locus2$replaces === void 0 ? void 0 : _data$locus2$replaces.length) > 0) {
279
447
  // Always the last element in the replace is the active one
280
448
  meeting = this.meetingCollection.getByKey(_constants.LOCUS_URL, data.locus.replaces[data.locus.replaces.length - 1].locusUrl);
281
449
  }
450
+ if (meeting && !_util2.default.isBreakoutLocusDTO(data.locus)) {
451
+ meeting.locusInfo.updateMainSessionLocusCache(data.locus);
452
+ }
453
+ if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {
454
+ _loggerProxy.default.logger.log("Meetings:index#handleLocusEvent --> doesn't need to process locus event");
455
+ return;
456
+ }
282
457
  if (!meeting) {
283
458
  // TODO: create meeting when we get a meeting object
284
459
  // const checkForEnded = (locus) => {
@@ -318,6 +493,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
318
493
 
319
494
  // It's a new meeting so initialize the locus data
320
495
  meeting.locusInfo.initialSetup(data.locus);
496
+ _this2.checkHandleBreakoutLocus(data.locus);
321
497
  }).catch(function (e) {
322
498
  _loggerProxy.default.logger.error(e);
323
499
  }).finally(function () {
@@ -325,11 +501,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
325
501
  // because the other user left so before sending 'added' event make sure it exists in the collection
326
502
 
327
503
  if (_this2.getMeetingByType(_constants._ID_, meeting.id)) {
328
- _metrics.default.postEvent({
329
- event: _config.eventType.REMOTE_STARTED,
330
- meeting: meeting,
331
- data: {
332
- trigger: _config.trigger.MERCURY_EVENT
504
+ // @ts-ignore
505
+ _this2.webex.internal.newMetrics.submitClientEvent({
506
+ name: 'client.call.remote-started',
507
+ payload: {
508
+ trigger: 'mercury-event'
509
+ },
510
+ options: {
511
+ meetingId: meeting.id
333
512
  }
334
513
  });
335
514
  _triggerProxy.default.trigger(_this2, {
@@ -443,7 +622,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
443
622
  // @ts-ignore
444
623
  this.webex.once(_constants.READY, function () {
445
624
  // @ts-ignore
446
- _config2.default.set(_this4.config);
625
+ _config.default.set(_this4.config);
447
626
  // @ts-ignore
448
627
  _loggerConfig.default.set(_this4.config.logging);
449
628
  // @ts-ignore
@@ -480,7 +659,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
480
659
  disableNotifications: true
481
660
  });
482
661
  // @ts-ignore
483
- _metrics.default.initialSetup(_this4.meetingCollection, _this4.webex);
662
+ _metrics.default.initialSetup(_this4.webex);
484
663
  });
485
664
  }
486
665
 
@@ -630,6 +809,17 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
630
809
  );
631
810
  }
632
811
 
812
+ /**
813
+ * Creates a noise reduction effect
814
+ *
815
+ * @param {INoiseReductionEffect} options optional custom effect options
816
+ * @returns {Promise<effect>} noise reduction effect.
817
+ * @public
818
+ * @memberof Meetings
819
+ */
820
+ }, {
821
+ key: "uploadLogs",
822
+ value:
633
823
  /**
634
824
  * Uploads logs to the webex services for tracking
635
825
  * @param {Object} [options={}]
@@ -642,14 +832,13 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
642
832
  * @param {String} [options.orgId] org id
643
833
  * @returns {String} feedback ID logs were submitted under
644
834
  */
645
- }, {
646
- key: "uploadLogs",
647
- value: function uploadLogs() {
835
+ function uploadLogs() {
648
836
  var _this7 = this;
649
837
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
650
838
  _loggerProxy.default.logger.info('Meetings:index#uploadLogs --> uploading logs');
651
839
  return this.loggerRequest.uploadLogs(options).then(function (uploadResult) {
652
840
  _loggerProxy.default.logger.info('Meetings:index#uploadLogs --> Upload logs for meeting completed.', uploadResult);
841
+ _metrics.default.sendBehavioralMetric(_constants2.default.UPLOAD_LOGS_SUCCESS, options);
653
842
  _triggerProxy.default.trigger(_this7, {
654
843
  file: 'meetings',
655
844
  function: 'uploadLogs'
@@ -667,29 +856,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
667
856
  meetingId: options.meetingId,
668
857
  reason: uploadError
669
858
  });
670
- _metrics.default.sendBehavioralMetric(_constants2.default.UPLOAD_LOGS_FAILURE, {
671
- // @ts-ignore - seems like typo
672
- meetingId: options.meetingsId,
859
+ _metrics.default.sendBehavioralMetric(_constants2.default.UPLOAD_LOGS_FAILURE, _objectSpread(_objectSpread({}, options), {}, {
673
860
  reason: uploadError.message,
674
861
  stack: uploadError.stack,
675
862
  code: uploadError.code
676
- });
863
+ }));
677
864
  });
678
865
  }
679
866
 
680
- /**
681
- * initializes the reachability instance for Meetings
682
- * @returns {undefined}
683
- * @public
684
- * @memberof Meetings
685
- */
686
- }, {
687
- key: "setReachability",
688
- value: function setReachability() {
689
- // @ts-ignore
690
- this.reachability = new _reachability.default(this.webex);
691
- }
692
-
693
867
  /**
694
868
  * gets the reachability instance for Meetings
695
869
  * @returns {Reachability}
@@ -711,9 +885,6 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
711
885
  }, {
712
886
  key: "startReachability",
713
887
  value: function startReachability() {
714
- if (!this.reachability) {
715
- this.setReachability();
716
- }
717
888
  return this.getReachability().gatherReachability();
718
889
  }
719
890
 
@@ -747,6 +918,23 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
747
918
  if (res) {
748
919
  _this9.preferredWebexSite = _util2.default.parseDefaultSiteFromMeetingPreferences(res);
749
920
  }
921
+
922
+ // fall back to getting the preferred site from the user information
923
+ if (!_this9.preferredWebexSite) {
924
+ // @ts-ignore
925
+ return _this9.webex.internal.user.get().then(function (user) {
926
+ var _user$userPreferences, _user$userPreferences2;
927
+ var preferredWebexSite = user === null || user === void 0 ? void 0 : (_user$userPreferences = user.userPreferences) === null || _user$userPreferences === void 0 ? void 0 : (_user$userPreferences2 = _user$userPreferences.userPreferencesItems) === null || _user$userPreferences2 === void 0 ? void 0 : _user$userPreferences2.preferredWebExSite;
928
+ if (preferredWebexSite) {
929
+ _this9.preferredWebexSite = preferredWebexSite;
930
+ } else {
931
+ throw new Error('site not found');
932
+ }
933
+ }).catch(function () {
934
+ _loggerProxy.default.logger.error('Failed to fetch preferred site from user - no site will be set');
935
+ });
936
+ }
937
+ return _promise.default.resolve();
750
938
  });
751
939
  }
752
940
 
@@ -786,9 +974,12 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
786
974
 
787
975
  /**
788
976
  * Create a meeting.
789
- * @param {string} destination - sipURL, spaceId, phonenumber, or locus object}
977
+ * @param {string} destination - sipURL, phonenumber, or locus object}
790
978
  * @param {string} [type] - the optional specified type, such as locusId
791
979
  * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
980
+ * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
981
+ * @param {string} correlationId - the optional specified correlationId
982
+ * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
792
983
  * @returns {Promise<Meeting>} A new Meeting.
793
984
  * @public
794
985
  * @memberof Meetings
@@ -799,6 +990,9 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
799
990
  var _this10 = this;
800
991
  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
801
992
  var useRandomDelayForInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
993
+ var infoExtraParams = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
994
+ var correlationId = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
995
+ var failOnMissingMeetingInfo = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
802
996
  // TODO: type should be from a dictionary
803
997
 
804
998
  // Validate meeting information based on the provided destination and
@@ -808,7 +1002,10 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
808
1002
  return this.meetingInfo.fetchInfoOptions(destination, type)
809
1003
  // Catch a failure to fetch info options.
810
1004
  .catch(function (error) {
811
- _loggerProxy.default.logger.info("Meetings:index#create --> INFO, unable to determine info options: ".concat(error.message));
1005
+ _loggerProxy.default.logger.error("Meetings:index#create --> ERROR, unable to determine info options: ".concat(error.message));
1006
+ if (error instanceof _webexErrors.SpaceIDDeprecatedError) {
1007
+ throw new _webexErrors.SpaceIDDeprecatedError();
1008
+ }
812
1009
  }).then(function () {
813
1010
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
814
1011
  // Normalize the destination.
@@ -837,7 +1034,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
837
1034
  // Validate if a meeting was found.
838
1035
  if (!meeting) {
839
1036
  // Create a meeting based on the normalized destination and type.
840
- return _this10.createMeeting(targetDest, type, useRandomDelayForInfo).then(function (createdMeeting) {
1037
+ return _this10.createMeeting(targetDest, type, useRandomDelayForInfo, infoExtraParams, correlationId, failOnMissingMeetingInfo).then(function (createdMeeting) {
841
1038
  // If the meeting was successfully created.
842
1039
  if (createdMeeting && createdMeeting.on) {
843
1040
  // Create a destruction event for the meeting.
@@ -889,6 +1086,9 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
889
1086
  * @param {String} destination see create()
890
1087
  * @param {String} type see create()
891
1088
  * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
1089
+ * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
1090
+ * @param {String} correlationId the optional specified correlationId
1091
+ * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
892
1092
  * @returns {Promise} a new meeting instance complete with meeting info and destination
893
1093
  * @private
894
1094
  * @memberof Meetings
@@ -896,9 +1096,12 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
896
1096
  }, {
897
1097
  key: "createMeeting",
898
1098
  value: function () {
899
- var _createMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(destination) {
1099
+ var _createMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(destination) {
900
1100
  var type,
901
1101
  useRandomDelayForInfo,
1102
+ infoExtraParams,
1103
+ correlationId,
1104
+ failOnMissingMeetingInfo,
902
1105
  meeting,
903
1106
  _destination$fullStat,
904
1107
  waitingTime,
@@ -910,12 +1113,15 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
910
1113
  isMeetingActive,
911
1114
  enableUnifiedMeetings,
912
1115
  meetingAddedType,
913
- _args = arguments;
914
- return _regenerator.default.wrap(function _callee$(_context) {
915
- while (1) switch (_context.prev = _context.next) {
1116
+ _args3 = arguments;
1117
+ return _regenerator.default.wrap(function _callee3$(_context3) {
1118
+ while (1) switch (_context3.prev = _context3.next) {
916
1119
  case 0:
917
- type = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
918
- useRandomDelayForInfo = _args.length > 2 && _args[2] !== undefined ? _args[2] : false;
1120
+ type = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : null;
1121
+ useRandomDelayForInfo = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : false;
1122
+ infoExtraParams = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : {};
1123
+ correlationId = _args3.length > 4 && _args3[4] !== undefined ? _args3[4] : undefined;
1124
+ failOnMissingMeetingInfo = _args3.length > 5 && _args3[5] !== undefined ? _args3[5] : false;
919
1125
  meeting = new _meeting.default({
920
1126
  // @ts-ignore
921
1127
  userId: this.webex.internal.device.userId,
@@ -927,13 +1133,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
927
1133
  // pass the locus object if present
928
1134
  meetingInfoProvider: this.meetingInfo,
929
1135
  destination: destination,
930
- destinationType: type
1136
+ destinationType: type,
1137
+ correlationId: correlationId
931
1138
  }, {
932
1139
  // @ts-ignore
933
1140
  parent: this.webex
934
1141
  });
935
1142
  this.meetingCollection.set(meeting);
936
- _context.prev = 4;
1143
+ _context3.prev = 7;
937
1144
  // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,
938
1145
  // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo
939
1146
  // between 5 and 2 min (random between 3 minutes) before the meeting starts
@@ -950,32 +1157,50 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
950
1157
  isMeetingActive = !!((_destination$fullStat = destination.fullState) !== null && _destination$fullStat !== void 0 && _destination$fullStat.active); // @ts-ignore
951
1158
  enableUnifiedMeetings = this.config.experimental.enableUnifiedMeetings;
952
1159
  if (!(enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0)) {
953
- _context.next = 14;
1160
+ _context3.next = 17;
954
1161
  break;
955
1162
  }
956
1163
  meeting.fetchMeetingInfoTimeoutId = setTimeout(function () {
957
- return meeting.fetchMeetingInfo({});
1164
+ return meeting.fetchMeetingInfo({
1165
+ extraParams: infoExtraParams,
1166
+ sendCAevents: !!correlationId // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user
1167
+ });
958
1168
  }, waitingTime);
959
1169
  meeting.parseMeetingInfo(undefined, destination);
960
- _context.next = 16;
1170
+ _context3.next = 19;
961
1171
  break;
962
- case 14:
963
- _context.next = 16;
964
- return meeting.fetchMeetingInfo({});
965
- case 16:
966
- _context.next = 22;
1172
+ case 17:
1173
+ _context3.next = 19;
1174
+ return meeting.fetchMeetingInfo({
1175
+ extraParams: infoExtraParams,
1176
+ sendCAevents: !!correlationId // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user
1177
+ });
1178
+ case 19:
1179
+ _context3.next = 31;
967
1180
  break;
968
- case 18:
969
- _context.prev = 18;
970
- _context.t0 = _context["catch"](4);
971
- if (!(_context.t0 instanceof _captchaError.default) && !(_context.t0 instanceof _passwordError.default)) {
972
- // if there is no meeting info we assume its a 1:1 call or wireless share
973
- _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Info Unable to fetch meeting info for ".concat(destination, "."));
974
- _loggerProxy.default.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
1181
+ case 21:
1182
+ _context3.prev = 21;
1183
+ _context3.t0 = _context3["catch"](7);
1184
+ if (!(!(_context3.t0 instanceof _captchaError.default) && !(_context3.t0 instanceof _passwordError.default) && !(_context3.t0 instanceof _permission.default))) {
1185
+ _context3.next = 30;
1186
+ break;
1187
+ }
1188
+ _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Info Unable to fetch meeting info for ".concat(destination, "."));
1189
+ if (!failOnMissingMeetingInfo) {
1190
+ _context3.next = 29;
1191
+ break;
975
1192
  }
976
- _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context.t0, " fetching /meetingInfo for creation."));
977
- case 22:
978
- _context.prev = 22;
1193
+ _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Destroying meeting due to missing meeting info.");
1194
+ // @ts-ignore
1195
+ this.destroy(meeting, _constants.MEETING_REMOVED_REASON.MISSING_MEETING_INFO);
1196
+ throw new _noMeetingInfo.default();
1197
+ case 29:
1198
+ // if there is no meeting info and no error should be thrown then we assume its a 1:1 call or wireless share
1199
+ _loggerProxy.default.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
1200
+ case 30:
1201
+ _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context3.t0, " fetching /meetingInfo for creation."));
1202
+ case 31:
1203
+ _context3.prev = 31;
979
1204
  // For type LOCUS_ID we need to parse the locus object to get the information
980
1205
  // about the caller and callee
981
1206
  // Meeting Added event will be created in `handleLocusEvent`
@@ -995,16 +1220,16 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
995
1220
  type: meetingAddedType
996
1221
  });
997
1222
  }
998
- return _context.finish(22);
999
- case 25:
1000
- return _context.abrupt("return", meeting);
1001
- case 26:
1223
+ return _context3.finish(31);
1224
+ case 34:
1225
+ return _context3.abrupt("return", meeting);
1226
+ case 35:
1002
1227
  case "end":
1003
- return _context.stop();
1228
+ return _context3.stop();
1004
1229
  }
1005
- }, _callee, this, [[4, 18, 22, 25]]);
1230
+ }, _callee3, this, [[7, 21, 31, 34]]);
1006
1231
  }));
1007
- function createMeeting(_x) {
1232
+ function createMeeting(_x3) {
1008
1233
  return _createMeeting.apply(this, arguments);
1009
1234
  }
1010
1235
  return createMeeting;
@@ -1054,7 +1279,8 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1054
1279
  return this.request.getActiveMeetings().then(function (locusArray) {
1055
1280
  var activeLocusUrl = [];
1056
1281
  if (locusArray !== null && locusArray !== void 0 && locusArray.loci && locusArray.loci.length > 0) {
1057
- locusArray.loci.forEach(function (locus) {
1282
+ var lociToUpdate = _this11.sortLocusArrayToUpdate(locusArray.loci);
1283
+ lociToUpdate.forEach(function (locus) {
1058
1284
  activeLocusUrl.push(locus.url);
1059
1285
  _this11.handleLocusEvent({
1060
1286
  locus: locus,
@@ -1076,7 +1302,81 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1076
1302
  }
1077
1303
  }
1078
1304
  }
1305
+ }).catch(function (error) {
1306
+ _loggerProxy.default.logger.error("Meetings:index#syncMeetings --> failed to sync meetings, ".concat(error));
1307
+ throw new Error(error);
1308
+ });
1309
+ }
1310
+
1311
+ /**
1312
+ * sort out locus array for initial creating
1313
+ * @param {Array} loci original locus array
1314
+ * @returns {undefined}
1315
+ * @public
1316
+ * @memberof Meetings
1317
+ */
1318
+ }, {
1319
+ key: "sortLocusArrayToUpdate",
1320
+ value: function sortLocusArrayToUpdate(loci) {
1321
+ var _this12 = this;
1322
+ var mainLoci = loci.filter(function (locus) {
1323
+ return !_util2.default.isBreakoutLocusDTO(locus);
1324
+ });
1325
+ var breakoutLoci = loci.filter(function (locus) {
1326
+ return _util2.default.isValidBreakoutLocus(locus);
1327
+ });
1328
+ this.breakoutLocusForHandleLater = [];
1329
+ var lociToUpdate = (0, _toConsumableArray2.default)(mainLoci);
1330
+ breakoutLoci.forEach(function (breakoutLocus) {
1331
+ var associateMainLocus = mainLoci.find(function (mainLocus) {
1332
+ var _mainLocus$controls, _mainLocus$controls$b, _breakoutLocus$contro, _breakoutLocus$contro2;
1333
+ return ((_mainLocus$controls = mainLocus.controls) === null || _mainLocus$controls === void 0 ? void 0 : (_mainLocus$controls$b = _mainLocus$controls.breakout) === null || _mainLocus$controls$b === void 0 ? void 0 : _mainLocus$controls$b.url) === ((_breakoutLocus$contro = breakoutLocus.controls) === null || _breakoutLocus$contro === void 0 ? void 0 : (_breakoutLocus$contro2 = _breakoutLocus$contro.breakout) === null || _breakoutLocus$contro2 === void 0 ? void 0 : _breakoutLocus$contro2.url);
1334
+ });
1335
+ var existCorrespondingMeeting = _this12.getCorrespondingMeetingByLocus({
1336
+ locus: breakoutLocus,
1337
+ locusUrl: breakoutLocus.url
1338
+ });
1339
+ if (associateMainLocus && !existCorrespondingMeeting) {
1340
+ // if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,
1341
+ // after meeting create with main locus, then handle the associate breakout locus.
1342
+ // if only handle breakout locus, will miss some date
1343
+ _this12.breakoutLocusForHandleLater.push(breakoutLocus);
1344
+ } else {
1345
+ lociToUpdate.push(breakoutLocus);
1346
+ }
1347
+ });
1348
+ return lociToUpdate;
1349
+ }
1350
+
1351
+ /**
1352
+ * check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus
1353
+ * @param {Object} newCreatedLocus the locus which just create meeting object of it
1354
+ * @returns {undefined}
1355
+ * @public
1356
+ * @memberof Meetings
1357
+ */
1358
+ }, {
1359
+ key: "checkHandleBreakoutLocus",
1360
+ value: function checkHandleBreakoutLocus(newCreatedLocus) {
1361
+ if (!newCreatedLocus || !this.breakoutLocusForHandleLater || !this.breakoutLocusForHandleLater.length) {
1362
+ return;
1363
+ }
1364
+ if (_util2.default.isBreakoutLocusDTO(newCreatedLocus)) {
1365
+ return;
1366
+ }
1367
+ var existIndex = this.breakoutLocusForHandleLater.findIndex(function (breakoutLocus) {
1368
+ var _breakoutLocus$contro3, _breakoutLocus$contro4, _newCreatedLocus$cont, _newCreatedLocus$cont2;
1369
+ return ((_breakoutLocus$contro3 = breakoutLocus.controls) === null || _breakoutLocus$contro3 === void 0 ? void 0 : (_breakoutLocus$contro4 = _breakoutLocus$contro3.breakout) === null || _breakoutLocus$contro4 === void 0 ? void 0 : _breakoutLocus$contro4.url) === ((_newCreatedLocus$cont = newCreatedLocus.controls) === null || _newCreatedLocus$cont === void 0 ? void 0 : (_newCreatedLocus$cont2 = _newCreatedLocus$cont.breakout) === null || _newCreatedLocus$cont2 === void 0 ? void 0 : _newCreatedLocus$cont2.url);
1370
+ });
1371
+ if (existIndex < 0) {
1372
+ return;
1373
+ }
1374
+ var associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];
1375
+ this.handleLocusEvent({
1376
+ locus: associateBreakoutLocus,
1377
+ locusUrl: associateBreakoutLocus.url
1079
1378
  });
1379
+ this.breakoutLocusForHandleLater.splice(existIndex, 1);
1080
1380
  }
1081
1381
 
1082
1382
  /**