@webex/plugin-meetings 3.0.0-beta.39 → 3.0.0-beta.391

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 (393) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +671 -81
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +45 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/no-meeting-info.js +51 -0
  17. package/dist/common/errors/no-meeting-info.js.map +1 -0
  18. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  19. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +48 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/logs/request.js +5 -1
  25. package/dist/common/logs/request.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 +242 -33
  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 +110 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/interceptors/index.js +15 -0
  43. package/dist/interceptors/index.js.map +1 -0
  44. package/dist/interceptors/locusRetry.js +93 -0
  45. package/dist/interceptors/locusRetry.js.map +1 -0
  46. package/dist/interpretation/collection.js +23 -0
  47. package/dist/interpretation/collection.js.map +1 -0
  48. package/dist/interpretation/index.js +380 -0
  49. package/dist/interpretation/index.js.map +1 -0
  50. package/dist/interpretation/siLanguage.js +25 -0
  51. package/dist/interpretation/siLanguage.js.map +1 -0
  52. package/dist/locus-info/controlsUtils.js +91 -2
  53. package/dist/locus-info/controlsUtils.js.map +1 -1
  54. package/dist/locus-info/index.js +386 -62
  55. package/dist/locus-info/index.js.map +1 -1
  56. package/dist/locus-info/infoUtils.js +7 -1
  57. package/dist/locus-info/infoUtils.js.map +1 -1
  58. package/dist/locus-info/mediaSharesUtils.js +71 -1
  59. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  60. package/dist/locus-info/parser.js +249 -72
  61. package/dist/locus-info/parser.js.map +1 -1
  62. package/dist/locus-info/selfUtils.js +89 -14
  63. package/dist/locus-info/selfUtils.js.map +1 -1
  64. package/dist/media/index.js +65 -102
  65. package/dist/media/index.js.map +1 -1
  66. package/dist/media/properties.js +73 -124
  67. package/dist/media/properties.js.map +1 -1
  68. package/dist/mediaQualityMetrics/config.js +135 -330
  69. package/dist/mediaQualityMetrics/config.js.map +1 -1
  70. package/dist/meeting/in-meeting-actions.js +86 -2
  71. package/dist/meeting/in-meeting-actions.js.map +1 -1
  72. package/dist/meeting/index.js +4075 -2827
  73. package/dist/meeting/index.js.map +1 -1
  74. package/dist/meeting/locusMediaRequest.js +292 -0
  75. package/dist/meeting/locusMediaRequest.js.map +1 -0
  76. package/dist/meeting/muteState.js +224 -136
  77. package/dist/meeting/muteState.js.map +1 -1
  78. package/dist/meeting/request.js +177 -152
  79. package/dist/meeting/request.js.map +1 -1
  80. package/dist/meeting/util.js +672 -417
  81. package/dist/meeting/util.js.map +1 -1
  82. package/dist/meeting-info/index.js +73 -7
  83. package/dist/meeting-info/index.js.map +1 -1
  84. package/dist/meeting-info/meeting-info-v2.js +192 -51
  85. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  86. package/dist/meeting-info/util.js +1 -1
  87. package/dist/meeting-info/util.js.map +1 -1
  88. package/dist/meeting-info/utilv2.js +36 -36
  89. package/dist/meeting-info/utilv2.js.map +1 -1
  90. package/dist/meetings/collection.js +39 -0
  91. package/dist/meetings/collection.js.map +1 -1
  92. package/dist/meetings/index.js +484 -119
  93. package/dist/meetings/index.js.map +1 -1
  94. package/dist/meetings/meetings.types.js +7 -0
  95. package/dist/meetings/meetings.types.js.map +1 -0
  96. package/dist/meetings/request.js +2 -0
  97. package/dist/meetings/request.js.map +1 -1
  98. package/dist/meetings/util.js +73 -7
  99. package/dist/meetings/util.js.map +1 -1
  100. package/dist/member/index.js +58 -0
  101. package/dist/member/index.js.map +1 -1
  102. package/dist/member/types.js +25 -0
  103. package/dist/member/types.js.map +1 -0
  104. package/dist/member/util.js +132 -25
  105. package/dist/member/util.js.map +1 -1
  106. package/dist/members/collection.js +10 -0
  107. package/dist/members/collection.js.map +1 -1
  108. package/dist/members/index.js +102 -6
  109. package/dist/members/index.js.map +1 -1
  110. package/dist/members/request.js +106 -38
  111. package/dist/members/request.js.map +1 -1
  112. package/dist/members/types.js +15 -0
  113. package/dist/members/types.js.map +1 -0
  114. package/dist/members/util.js +326 -232
  115. package/dist/members/util.js.map +1 -1
  116. package/dist/metrics/constants.js +18 -1
  117. package/dist/metrics/constants.js.map +1 -1
  118. package/dist/metrics/index.js +1 -446
  119. package/dist/metrics/index.js.map +1 -1
  120. package/dist/multistream/mediaRequestManager.js +223 -32
  121. package/dist/multistream/mediaRequestManager.js.map +1 -1
  122. package/dist/multistream/receiveSlot.js +10 -0
  123. package/dist/multistream/receiveSlot.js.map +1 -1
  124. package/dist/multistream/receiveSlotManager.js +39 -36
  125. package/dist/multistream/receiveSlotManager.js.map +1 -1
  126. package/dist/multistream/remoteMedia.js +3 -1
  127. package/dist/multistream/remoteMedia.js.map +1 -1
  128. package/dist/multistream/remoteMediaGroup.js +76 -5
  129. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  130. package/dist/multistream/remoteMediaManager.js +366 -104
  131. package/dist/multistream/remoteMediaManager.js.map +1 -1
  132. package/dist/multistream/sendSlotManager.js +255 -0
  133. package/dist/multistream/sendSlotManager.js.map +1 -0
  134. package/dist/reachability/clusterReachability.js +356 -0
  135. package/dist/reachability/clusterReachability.js.map +1 -0
  136. package/dist/reachability/index.js +263 -390
  137. package/dist/reachability/index.js.map +1 -1
  138. package/dist/reachability/request.js +6 -4
  139. package/dist/reachability/request.js.map +1 -1
  140. package/dist/reachability/util.js +29 -0
  141. package/dist/reachability/util.js.map +1 -0
  142. package/dist/reconnection-manager/index.js +266 -202
  143. package/dist/reconnection-manager/index.js.map +1 -1
  144. package/dist/recording-controller/index.js +21 -2
  145. package/dist/recording-controller/index.js.map +1 -1
  146. package/dist/recording-controller/util.js +9 -8
  147. package/dist/recording-controller/util.js.map +1 -1
  148. package/dist/roap/index.js +51 -28
  149. package/dist/roap/index.js.map +1 -1
  150. package/dist/roap/request.js +48 -64
  151. package/dist/roap/request.js.map +1 -1
  152. package/dist/roap/turnDiscovery.js +220 -70
  153. package/dist/roap/turnDiscovery.js.map +1 -1
  154. package/dist/rtcMetrics/constants.js +12 -0
  155. package/dist/rtcMetrics/constants.js.map +1 -0
  156. package/dist/rtcMetrics/index.js +179 -0
  157. package/dist/rtcMetrics/index.js.map +1 -0
  158. package/dist/statsAnalyzer/index.js +357 -295
  159. package/dist/statsAnalyzer/index.js.map +1 -1
  160. package/dist/statsAnalyzer/mqaUtil.js +296 -156
  161. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  162. package/dist/types/annotation/annotation.types.d.ts +42 -0
  163. package/dist/types/annotation/constants.d.ts +31 -0
  164. package/dist/types/annotation/index.d.ts +117 -0
  165. package/dist/types/breakouts/events.d.ts +8 -0
  166. package/dist/types/breakouts/utils.d.ts +14 -0
  167. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  168. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  169. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  170. package/dist/types/common/logs/request.d.ts +2 -0
  171. package/dist/types/common/queue.d.ts +9 -7
  172. package/dist/types/config.d.ts +2 -7
  173. package/dist/types/constants.d.ts +203 -31
  174. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  175. package/dist/types/controls-options-manager/index.d.ts +17 -1
  176. package/dist/types/controls-options-manager/types.d.ts +43 -0
  177. package/dist/types/controls-options-manager/util.d.ts +1 -7
  178. package/dist/types/index.d.ts +6 -5
  179. package/dist/types/interceptors/index.d.ts +2 -0
  180. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  181. package/dist/types/interpretation/collection.d.ts +5 -0
  182. package/dist/types/interpretation/index.d.ts +5 -0
  183. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  184. package/dist/types/locus-info/index.d.ts +57 -4
  185. package/dist/types/locus-info/parser.d.ts +66 -6
  186. package/dist/types/media/index.d.ts +2 -0
  187. package/dist/types/media/properties.d.ts +34 -49
  188. package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
  189. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  190. package/dist/types/meeting/index.d.ts +567 -496
  191. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  192. package/dist/types/meeting/muteState.d.ts +93 -25
  193. package/dist/types/meeting/request.d.ts +64 -43
  194. package/dist/types/meeting/util.d.ts +117 -1
  195. package/dist/types/meeting-info/index.d.ts +13 -1
  196. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  197. package/dist/types/meetings/collection.d.ts +17 -0
  198. package/dist/types/meetings/index.d.ts +113 -21
  199. package/dist/types/meetings/meetings.types.d.ts +4 -0
  200. package/dist/types/member/index.d.ts +14 -0
  201. package/dist/types/member/types.d.ts +32 -0
  202. package/dist/types/members/collection.d.ts +5 -0
  203. package/dist/types/members/index.d.ts +35 -2
  204. package/dist/types/members/request.d.ts +73 -9
  205. package/dist/types/members/types.d.ts +25 -0
  206. package/dist/types/members/util.d.ts +214 -1
  207. package/dist/types/metrics/constants.d.ts +17 -0
  208. package/dist/types/metrics/index.d.ts +4 -111
  209. package/dist/types/multistream/mediaRequestManager.d.ts +72 -3
  210. package/dist/types/multistream/receiveSlot.d.ts +7 -3
  211. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  212. package/dist/types/multistream/remoteMedia.d.ts +3 -31
  213. package/dist/types/multistream/remoteMediaGroup.d.ts +2 -9
  214. package/dist/types/multistream/remoteMediaManager.d.ts +62 -2
  215. package/dist/types/multistream/sendSlotManager.d.ts +70 -0
  216. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  217. package/dist/types/reachability/index.d.ts +60 -95
  218. package/dist/types/reachability/request.d.ts +3 -1
  219. package/dist/types/reachability/util.d.ts +8 -0
  220. package/dist/types/reconnection-manager/index.d.ts +19 -0
  221. package/dist/types/recording-controller/index.d.ts +15 -1
  222. package/dist/types/recording-controller/util.d.ts +5 -4
  223. package/dist/types/roap/index.d.ts +2 -1
  224. package/dist/types/roap/request.d.ts +9 -8
  225. package/dist/types/roap/turnDiscovery.d.ts +39 -5
  226. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  227. package/dist/types/rtcMetrics/index.d.ts +61 -0
  228. package/dist/types/statsAnalyzer/index.d.ts +34 -12
  229. package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
  230. package/dist/types/webinar/collection.d.ts +16 -0
  231. package/dist/types/webinar/index.d.ts +5 -0
  232. package/dist/webinar/collection.js +44 -0
  233. package/dist/webinar/collection.js.map +1 -0
  234. package/dist/webinar/index.js +69 -0
  235. package/dist/webinar/index.js.map +1 -0
  236. package/package.json +22 -19
  237. package/src/annotation/annotation.types.ts +50 -0
  238. package/src/annotation/constants.ts +36 -0
  239. package/src/annotation/index.ts +328 -0
  240. package/src/breakouts/README.md +35 -11
  241. package/src/breakouts/breakout.ts +67 -9
  242. package/src/breakouts/events.ts +56 -0
  243. package/src/breakouts/index.ts +558 -59
  244. package/src/breakouts/utils.ts +42 -0
  245. package/src/common/errors/no-meeting-info.ts +24 -0
  246. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  247. package/src/common/errors/webex-errors.ts +44 -2
  248. package/src/common/logs/logger-proxy.ts +1 -1
  249. package/src/common/logs/request.ts +5 -1
  250. package/src/common/queue.ts +22 -8
  251. package/src/config.ts +4 -9
  252. package/src/constants.ts +229 -21
  253. package/src/controls-options-manager/enums.ts +12 -0
  254. package/src/controls-options-manager/index.ts +116 -21
  255. package/src/controls-options-manager/types.ts +59 -0
  256. package/src/controls-options-manager/util.ts +294 -14
  257. package/src/index.ts +44 -0
  258. package/src/interceptors/index.ts +3 -0
  259. package/src/interceptors/locusRetry.ts +67 -0
  260. package/src/interpretation/README.md +60 -0
  261. package/src/interpretation/collection.ts +19 -0
  262. package/src/interpretation/index.ts +349 -0
  263. package/src/interpretation/siLanguage.ts +18 -0
  264. package/src/locus-info/controlsUtils.ts +108 -0
  265. package/src/locus-info/index.ts +417 -59
  266. package/src/locus-info/infoUtils.ts +10 -2
  267. package/src/locus-info/mediaSharesUtils.ts +80 -0
  268. package/src/locus-info/parser.ts +258 -47
  269. package/src/locus-info/selfUtils.ts +81 -5
  270. package/src/media/index.ts +100 -108
  271. package/src/media/properties.ts +88 -117
  272. package/src/mediaQualityMetrics/config.ts +103 -238
  273. package/src/meeting/in-meeting-actions.ts +171 -3
  274. package/src/meeting/index.ts +3411 -2435
  275. package/src/meeting/locusMediaRequest.ts +313 -0
  276. package/src/meeting/muteState.ts +223 -136
  277. package/src/meeting/request.ts +155 -120
  278. package/src/meeting/util.ts +685 -395
  279. package/src/meeting-info/index.ts +81 -8
  280. package/src/meeting-info/meeting-info-v2.ts +170 -14
  281. package/src/meeting-info/util.ts +1 -1
  282. package/src/meeting-info/utilv2.ts +23 -23
  283. package/src/meetings/collection.ts +33 -0
  284. package/src/meetings/index.ts +507 -127
  285. package/src/meetings/meetings.types.ts +12 -0
  286. package/src/meetings/request.ts +2 -0
  287. package/src/meetings/util.ts +81 -12
  288. package/src/member/index.ts +58 -0
  289. package/src/member/types.ts +38 -0
  290. package/src/member/util.ts +141 -25
  291. package/src/members/collection.ts +8 -0
  292. package/src/members/index.ts +134 -8
  293. package/src/members/request.ts +97 -17
  294. package/src/members/types.ts +29 -0
  295. package/src/members/util.ts +333 -240
  296. package/src/metrics/constants.ts +17 -0
  297. package/src/metrics/index.ts +1 -469
  298. package/src/multistream/mediaRequestManager.ts +271 -56
  299. package/src/multistream/receiveSlot.ts +11 -4
  300. package/src/multistream/receiveSlotManager.ts +34 -24
  301. package/src/multistream/remoteMedia.ts +5 -3
  302. package/src/multistream/remoteMediaGroup.ts +78 -0
  303. package/src/multistream/remoteMediaManager.ts +248 -44
  304. package/src/multistream/sendSlotManager.ts +199 -0
  305. package/src/reachability/clusterReachability.ts +320 -0
  306. package/src/reachability/index.ts +229 -346
  307. package/src/reachability/request.ts +8 -4
  308. package/src/reachability/util.ts +24 -0
  309. package/src/reconnection-manager/index.ts +128 -97
  310. package/src/recording-controller/index.ts +20 -3
  311. package/src/recording-controller/util.ts +26 -9
  312. package/src/roap/index.ts +52 -23
  313. package/src/roap/request.ts +48 -67
  314. package/src/roap/turnDiscovery.ts +147 -49
  315. package/src/rtcMetrics/constants.ts +3 -0
  316. package/src/rtcMetrics/index.ts +166 -0
  317. package/src/statsAnalyzer/index.ts +457 -416
  318. package/src/statsAnalyzer/mqaUtil.ts +317 -170
  319. package/src/webinar/collection.ts +31 -0
  320. package/src/webinar/index.ts +62 -0
  321. package/test/integration/spec/converged-space-meetings.js +60 -3
  322. package/test/integration/spec/journey.js +320 -261
  323. package/test/integration/spec/space-meeting.js +76 -3
  324. package/test/unit/spec/annotation/index.ts +418 -0
  325. package/test/unit/spec/breakouts/breakout.ts +118 -28
  326. package/test/unit/spec/breakouts/events.ts +89 -0
  327. package/test/unit/spec/breakouts/index.ts +1349 -114
  328. package/test/unit/spec/breakouts/utils.js +52 -1
  329. package/test/unit/spec/common/queue.js +31 -2
  330. package/test/unit/spec/controls-options-manager/index.js +163 -0
  331. package/test/unit/spec/controls-options-manager/util.js +576 -60
  332. package/test/unit/spec/fixture/locus.js +1 -0
  333. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  334. package/test/unit/spec/interpretation/collection.ts +15 -0
  335. package/test/unit/spec/interpretation/index.ts +625 -0
  336. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  337. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  338. package/test/unit/spec/locus-info/index.js +1363 -37
  339. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  340. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  341. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  342. package/test/unit/spec/locus-info/parser.js +116 -35
  343. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  344. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  345. package/test/unit/spec/media/index.ts +173 -81
  346. package/test/unit/spec/media/properties.ts +2 -2
  347. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  348. package/test/unit/spec/meeting/index.js +6821 -2172
  349. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  350. package/test/unit/spec/meeting/muteState.js +402 -212
  351. package/test/unit/spec/meeting/request.js +473 -54
  352. package/test/unit/spec/meeting/utils.js +773 -67
  353. package/test/unit/spec/meeting-info/index.js +300 -0
  354. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  355. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  356. package/test/unit/spec/meetings/collection.js +26 -0
  357. package/test/unit/spec/meetings/index.js +1415 -213
  358. package/test/unit/spec/meetings/utils.js +229 -2
  359. package/test/unit/spec/member/index.js +61 -6
  360. package/test/unit/spec/member/util.js +510 -34
  361. package/test/unit/spec/members/index.js +432 -1
  362. package/test/unit/spec/members/request.js +206 -27
  363. package/test/unit/spec/members/utils.js +210 -0
  364. package/test/unit/spec/metrics/index.js +1 -50
  365. package/test/unit/spec/multistream/mediaRequestManager.ts +781 -114
  366. package/test/unit/spec/multistream/receiveSlot.ts +9 -1
  367. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  368. package/test/unit/spec/multistream/remoteMedia.ts +2 -0
  369. package/test/unit/spec/multistream/remoteMediaGroup.ts +345 -0
  370. package/test/unit/spec/multistream/remoteMediaManager.ts +525 -0
  371. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  372. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  373. package/test/unit/spec/reachability/index.ts +551 -14
  374. package/test/unit/spec/reachability/request.js +3 -1
  375. package/test/unit/spec/reachability/util.ts +40 -0
  376. package/test/unit/spec/reconnection-manager/index.js +171 -11
  377. package/test/unit/spec/recording-controller/index.js +294 -218
  378. package/test/unit/spec/recording-controller/util.js +223 -96
  379. package/test/unit/spec/roap/index.ts +180 -83
  380. package/test/unit/spec/roap/request.ts +100 -62
  381. package/test/unit/spec/roap/turnDiscovery.ts +388 -96
  382. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  383. package/test/unit/spec/stats-analyzer/index.js +1252 -12
  384. package/test/unit/spec/webinar/collection.ts +13 -0
  385. package/test/unit/spec/webinar/index.ts +60 -0
  386. package/test/utils/integrationTestUtils.js +46 -0
  387. package/test/utils/testUtils.js +0 -57
  388. package/test/utils/webex-test-users.js +12 -4
  389. package/dist/metrics/config.js +0 -289
  390. package/dist/metrics/config.js.map +0 -1
  391. package/dist/types/metrics/config.d.ts +0 -169
  392. package/src/index.js +0 -18
  393. package/src/metrics/config.ts +0 -485
@@ -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, {
@@ -405,7 +584,9 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
405
584
 
406
585
  // @ts-ignore
407
586
  this.webex.internal.mercury.on(_constants.ONLINE, function () {
408
- _this3.syncMeetings();
587
+ _this3.syncMeetings({
588
+ keepOnlyLocusMeetings: false
589
+ });
409
590
  });
410
591
 
411
592
  // @ts-ignore
@@ -443,7 +624,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
443
624
  // @ts-ignore
444
625
  this.webex.once(_constants.READY, function () {
445
626
  // @ts-ignore
446
- _config2.default.set(_this4.config);
627
+ _config.default.set(_this4.config);
447
628
  // @ts-ignore
448
629
  _loggerConfig.default.set(_this4.config.logging);
449
630
  // @ts-ignore
@@ -480,7 +661,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
480
661
  disableNotifications: true
481
662
  });
482
663
  // @ts-ignore
483
- _metrics.default.initialSetup(_this4.meetingCollection, _this4.webex);
664
+ _metrics.default.initialSetup(_this4.webex);
484
665
  });
485
666
  }
486
667
 
@@ -508,40 +689,43 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
508
689
  }
509
690
 
510
691
  /**
511
- * API to enable or disable TURN discovery
512
- * @param {Boolean} enable
692
+ * API to toggle starting adhoc meeting
693
+ * @param {Boolean} changeState
513
694
  * @private
514
695
  * @memberof Meetings
515
696
  * @returns {undefined}
516
697
  */
517
698
  }, {
518
- key: "_toggleTurnDiscovery",
519
- value: function _toggleTurnDiscovery(enable) {
520
- if (typeof enable !== 'boolean') {
699
+ key: "_toggleAdhocMeetings",
700
+ value: function _toggleAdhocMeetings(changeState) {
701
+ var _this$config2, _this$config2$experim;
702
+ if (typeof changeState !== 'boolean') {
521
703
  return;
522
704
  }
523
705
  // @ts-ignore
524
- this.config.experimental.enableTurnDiscovery = enable;
706
+ if (((_this$config2 = this.config) === null || _this$config2 === void 0 ? void 0 : (_this$config2$experim = _this$config2.experimental) === null || _this$config2$experim === void 0 ? void 0 : _this$config2$experim.enableAdhocMeetings) !== changeState) {
707
+ // @ts-ignore
708
+ this.config.experimental.enableAdhocMeetings = changeState;
709
+ }
525
710
  }
526
711
 
527
712
  /**
528
- * API to toggle starting adhoc meeting
529
- * @param {Boolean} changeState
713
+ * API to toggle TCP reachability, needs to be called before webex.meetings.register()
714
+ * @param {Boolean} newValue
530
715
  * @private
531
716
  * @memberof Meetings
532
717
  * @returns {undefined}
533
718
  */
534
719
  }, {
535
- key: "_toggleAdhocMeetings",
536
- value: function _toggleAdhocMeetings(changeState) {
537
- var _this$config2, _this$config2$experim;
538
- if (typeof changeState !== 'boolean') {
720
+ key: "_toggleTcpReachability",
721
+ value: function _toggleTcpReachability(newValue) {
722
+ if (typeof newValue !== 'boolean') {
539
723
  return;
540
724
  }
541
725
  // @ts-ignore
542
- if (((_this$config2 = this.config) === null || _this$config2 === void 0 ? void 0 : (_this$config2$experim = _this$config2.experimental) === null || _this$config2$experim === void 0 ? void 0 : _this$config2$experim.enableAdhocMeetings) !== changeState) {
726
+ if (this.config.experimental.enableTcpReachability !== newValue) {
543
727
  // @ts-ignore
544
- this.config.experimental.enableAdhocMeetings = changeState;
728
+ this.config.experimental.enableTcpReachability = newValue;
545
729
  }
546
730
  }
547
731
 
@@ -630,6 +814,17 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
630
814
  );
631
815
  }
632
816
 
817
+ /**
818
+ * Creates a noise reduction effect
819
+ *
820
+ * @param {INoiseReductionEffect} options optional custom effect options
821
+ * @returns {Promise<effect>} noise reduction effect.
822
+ * @public
823
+ * @memberof Meetings
824
+ */
825
+ }, {
826
+ key: "uploadLogs",
827
+ value:
633
828
  /**
634
829
  * Uploads logs to the webex services for tracking
635
830
  * @param {Object} [options={}]
@@ -642,14 +837,13 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
642
837
  * @param {String} [options.orgId] org id
643
838
  * @returns {String} feedback ID logs were submitted under
644
839
  */
645
- }, {
646
- key: "uploadLogs",
647
- value: function uploadLogs() {
840
+ function uploadLogs() {
648
841
  var _this7 = this;
649
842
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
650
843
  _loggerProxy.default.logger.info('Meetings:index#uploadLogs --> uploading logs');
651
844
  return this.loggerRequest.uploadLogs(options).then(function (uploadResult) {
652
845
  _loggerProxy.default.logger.info('Meetings:index#uploadLogs --> Upload logs for meeting completed.', uploadResult);
846
+ _metrics.default.sendBehavioralMetric(_constants2.default.UPLOAD_LOGS_SUCCESS, options);
653
847
  _triggerProxy.default.trigger(_this7, {
654
848
  file: 'meetings',
655
849
  function: 'uploadLogs'
@@ -667,29 +861,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
667
861
  meetingId: options.meetingId,
668
862
  reason: uploadError
669
863
  });
670
- _metrics.default.sendBehavioralMetric(_constants2.default.UPLOAD_LOGS_FAILURE, {
671
- // @ts-ignore - seems like typo
672
- meetingId: options.meetingsId,
864
+ _metrics.default.sendBehavioralMetric(_constants2.default.UPLOAD_LOGS_FAILURE, _objectSpread(_objectSpread({}, options), {}, {
673
865
  reason: uploadError.message,
674
866
  stack: uploadError.stack,
675
867
  code: uploadError.code
676
- });
868
+ }));
677
869
  });
678
870
  }
679
871
 
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
872
  /**
694
873
  * gets the reachability instance for Meetings
695
874
  * @returns {Reachability}
@@ -711,9 +890,6 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
711
890
  }, {
712
891
  key: "startReachability",
713
892
  value: function startReachability() {
714
- if (!this.reachability) {
715
- this.setReachability();
716
- }
717
893
  return this.getReachability().gatherReachability();
718
894
  }
719
895
 
@@ -747,6 +923,23 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
747
923
  if (res) {
748
924
  _this9.preferredWebexSite = _util2.default.parseDefaultSiteFromMeetingPreferences(res);
749
925
  }
926
+
927
+ // fall back to getting the preferred site from the user information
928
+ if (!_this9.preferredWebexSite) {
929
+ // @ts-ignore
930
+ return _this9.webex.internal.user.get().then(function (user) {
931
+ var _user$userPreferences, _user$userPreferences2;
932
+ 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;
933
+ if (preferredWebexSite) {
934
+ _this9.preferredWebexSite = preferredWebexSite;
935
+ } else {
936
+ throw new Error('site not found');
937
+ }
938
+ }).catch(function () {
939
+ _loggerProxy.default.logger.error('Failed to fetch preferred site from user - no site will be set');
940
+ });
941
+ }
942
+ return _promise.default.resolve();
750
943
  });
751
944
  }
752
945
 
@@ -785,10 +978,19 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
785
978
  }
786
979
 
787
980
  /**
788
- * Create a meeting.
789
- * @param {string} destination - sipURL, spaceId, phonenumber, or locus object}
981
+ * Create a meeting or return an existing meeting.
982
+ *
983
+ * When meeting info passed it should be complete, e.g.: fetched after password or captcha provided
984
+ *
985
+ * @param {string} destination - sipURL, phonenumber, or locus object}
790
986
  * @param {string} [type] - the optional specified type, such as locusId
791
987
  * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
988
+ * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
989
+ * @param {string} correlationId - the optional specified correlationId (callStateForMetrics.correlationId can be provided instead)
990
+ * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
991
+ * @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics
992
+ * @param {Object} [meetingInfo] - Pre-fetched complete meeting info
993
+ * @param {String} [meetingLookupUrl] - meeting info prefetch url
792
994
  * @returns {Promise<Meeting>} A new Meeting.
793
995
  * @public
794
996
  * @memberof Meetings
@@ -799,16 +1001,30 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
799
1001
  var _this10 = this;
800
1002
  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
801
1003
  var useRandomDelayForInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1004
+ var infoExtraParams = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
1005
+ var correlationId = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
1006
+ var failOnMissingMeetingInfo = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
1007
+ var callStateForMetrics = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : undefined;
1008
+ var meetingInfo = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : undefined;
1009
+ var meetingLookupUrl = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : undefined;
802
1010
  // TODO: type should be from a dictionary
803
1011
 
804
1012
  // Validate meeting information based on the provided destination and
805
1013
  // type. This must be performed prior to determining if the meeting is
806
1014
  // found in the collection, as we mutate the destination for hydra person
807
1015
  // id values.
1016
+ if (correlationId) {
1017
+ callStateForMetrics = _objectSpread(_objectSpread({}, callStateForMetrics || {}), {}, {
1018
+ correlationId: correlationId
1019
+ });
1020
+ }
808
1021
  return this.meetingInfo.fetchInfoOptions(destination, type)
809
1022
  // Catch a failure to fetch info options.
810
1023
  .catch(function (error) {
811
- _loggerProxy.default.logger.info("Meetings:index#create --> INFO, unable to determine info options: ".concat(error.message));
1024
+ _loggerProxy.default.logger.error("Meetings:index#create --> ERROR, unable to determine info options: ".concat(error.message));
1025
+ if (error instanceof _webexErrors.SpaceIDDeprecatedError) {
1026
+ throw new _webexErrors.SpaceIDDeprecatedError();
1027
+ }
812
1028
  }).then(function () {
813
1029
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
814
1030
  // Normalize the destination.
@@ -837,20 +1053,22 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
837
1053
  // Validate if a meeting was found.
838
1054
  if (!meeting) {
839
1055
  // Create a meeting based on the normalized destination and type.
840
- return _this10.createMeeting(targetDest, type, useRandomDelayForInfo).then(function (createdMeeting) {
1056
+ return _this10.createMeeting(targetDest, type, useRandomDelayForInfo, infoExtraParams, callStateForMetrics, failOnMissingMeetingInfo, meetingInfo, meetingLookupUrl).then(function (createdMeeting) {
841
1057
  // If the meeting was successfully created.
842
1058
  if (createdMeeting && createdMeeting.on) {
843
1059
  // Create a destruction event for the meeting.
844
1060
  createdMeeting.on(_constants.EVENTS.DESTROY_MEETING, function (payload) {
845
1061
  // @ts-ignore
846
1062
  if (_this10.config.autoUploadLogs) {
847
- var _createdMeeting$locus, _createdMeeting$locus2, _createdMeeting$locus3, _createdMeeting$locus4;
1063
+ var _createdMeeting$locus, _createdMeeting$locus2, _createdMeeting$locus3, _createdMeeting$locus4, _createdMeeting$locus5, _createdMeeting$locus6;
848
1064
  _this10.uploadLogs({
849
1065
  callStart: (_createdMeeting$locus = createdMeeting.locusInfo) === null || _createdMeeting$locus === void 0 ? void 0 : (_createdMeeting$locus2 = _createdMeeting$locus.fullState) === null || _createdMeeting$locus2 === void 0 ? void 0 : _createdMeeting$locus2.lastActive,
1066
+ locussessionid: (_createdMeeting$locus3 = createdMeeting.locusInfo) === null || _createdMeeting$locus3 === void 0 ? void 0 : (_createdMeeting$locus4 = _createdMeeting$locus3.fullState) === null || _createdMeeting$locus4 === void 0 ? void 0 : _createdMeeting$locus4.sessionId,
850
1067
  correlationId: createdMeeting.correlationId,
851
1068
  feedbackId: createdMeeting.correlationId,
852
1069
  locusId: createdMeeting.locusId,
853
- meetingId: (_createdMeeting$locus3 = createdMeeting.locusInfo) === null || _createdMeeting$locus3 === void 0 ? void 0 : (_createdMeeting$locus4 = _createdMeeting$locus3.info) === null || _createdMeeting$locus4 === void 0 ? void 0 : _createdMeeting$locus4.webExMeetingId
1070
+ meetingId: (_createdMeeting$locus5 = createdMeeting.locusInfo) === null || _createdMeeting$locus5 === void 0 ? void 0 : (_createdMeeting$locus6 = _createdMeeting$locus5.info) === null || _createdMeeting$locus6 === void 0 ? void 0 : _createdMeeting$locus6.webExMeetingId,
1071
+ autoupload: true
854
1072
  }).then(function () {
855
1073
  return _this10.destroy(createdMeeting, payload.reason);
856
1074
  });
@@ -861,13 +1079,15 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
861
1079
  createdMeeting.on(_constants.EVENTS.REQUEST_UPLOAD_LOGS, function (meetingInstance) {
862
1080
  // @ts-ignore
863
1081
  if (_this10.config.autoUploadLogs) {
864
- var _meetingInstance$locu, _meetingInstance$locu2, _meetingInstance$locu3, _meetingInstance$locu4;
1082
+ var _meetingInstance$locu, _meetingInstance$locu2, _meetingInstance$locu3, _meetingInstance$locu4, _meetingInstance$locu5, _meetingInstance$locu6;
865
1083
  _this10.uploadLogs({
866
1084
  callStart: meetingInstance === null || meetingInstance === void 0 ? void 0 : (_meetingInstance$locu = meetingInstance.locusInfo) === null || _meetingInstance$locu === void 0 ? void 0 : (_meetingInstance$locu2 = _meetingInstance$locu.fullState) === null || _meetingInstance$locu2 === void 0 ? void 0 : _meetingInstance$locu2.lastActive,
1085
+ locussessionid: meetingInstance === null || meetingInstance === void 0 ? void 0 : (_meetingInstance$locu3 = meetingInstance.locusInfo) === null || _meetingInstance$locu3 === void 0 ? void 0 : (_meetingInstance$locu4 = _meetingInstance$locu3.fullState) === null || _meetingInstance$locu4 === void 0 ? void 0 : _meetingInstance$locu4.sessionId,
867
1086
  correlationId: meetingInstance.correlationId,
868
1087
  feedbackId: meetingInstance.correlationId,
869
1088
  locusId: meetingInstance.locusId,
870
- meetingId: (_meetingInstance$locu3 = meetingInstance.locusInfo) === null || _meetingInstance$locu3 === void 0 ? void 0 : (_meetingInstance$locu4 = _meetingInstance$locu3.info) === null || _meetingInstance$locu4 === void 0 ? void 0 : _meetingInstance$locu4.webExMeetingId
1089
+ meetingId: (_meetingInstance$locu5 = meetingInstance.locusInfo) === null || _meetingInstance$locu5 === void 0 ? void 0 : (_meetingInstance$locu6 = _meetingInstance$locu5.info) === null || _meetingInstance$locu6 === void 0 ? void 0 : _meetingInstance$locu6.webExMeetingId,
1090
+ autoupload: true
871
1091
  });
872
1092
  }
873
1093
  });
@@ -879,6 +1099,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
879
1099
  return _promise.default.resolve(createdMeeting);
880
1100
  });
881
1101
  }
1102
+ meeting.setCallStateForMetrics(callStateForMetrics);
882
1103
 
883
1104
  // Return the existing meeting.
884
1105
  return _promise.default.resolve(meeting);
@@ -886,9 +1107,18 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
886
1107
  }
887
1108
 
888
1109
  /**
1110
+ * Create meeting
1111
+ *
1112
+ * When meeting info passed it should be complete, e.g.: fetched after password or captcha provided
1113
+ *
889
1114
  * @param {String} destination see create()
890
1115
  * @param {String} type see create()
891
1116
  * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
1117
+ * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
1118
+ * @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics
1119
+ * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
1120
+ * @param {Object} [meetingInfo] - Pre-fetched complete meeting info
1121
+ * @param {String} [meetingLookupUrl] - meeting info prefetch url
892
1122
  * @returns {Promise} a new meeting instance complete with meeting info and destination
893
1123
  * @private
894
1124
  * @memberof Meetings
@@ -896,9 +1126,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
896
1126
  }, {
897
1127
  key: "createMeeting",
898
1128
  value: function () {
899
- var _createMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(destination) {
1129
+ var _createMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(destination) {
900
1130
  var type,
901
1131
  useRandomDelayForInfo,
1132
+ infoExtraParams,
1133
+ callStateForMetrics,
1134
+ failOnMissingMeetingInfo,
1135
+ meetingInfo,
1136
+ meetingLookupUrl,
902
1137
  meeting,
903
1138
  _destination$fullStat,
904
1139
  waitingTime,
@@ -909,13 +1144,19 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
909
1144
  maxWaitingTime,
910
1145
  isMeetingActive,
911
1146
  enableUnifiedMeetings,
1147
+ meetingInfoOptions,
912
1148
  meetingAddedType,
913
- _args = arguments;
914
- return _regenerator.default.wrap(function _callee$(_context) {
915
- while (1) switch (_context.prev = _context.next) {
1149
+ _args3 = arguments;
1150
+ return _regenerator.default.wrap(function _callee3$(_context3) {
1151
+ while (1) switch (_context3.prev = _context3.next) {
916
1152
  case 0:
917
- type = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
918
- useRandomDelayForInfo = _args.length > 2 && _args[2] !== undefined ? _args[2] : false;
1153
+ type = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : null;
1154
+ useRandomDelayForInfo = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : false;
1155
+ infoExtraParams = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : {};
1156
+ callStateForMetrics = _args3.length > 4 && _args3[4] !== undefined ? _args3[4] : undefined;
1157
+ failOnMissingMeetingInfo = _args3.length > 5 && _args3[5] !== undefined ? _args3[5] : false;
1158
+ meetingInfo = _args3.length > 6 && _args3[6] !== undefined ? _args3[6] : undefined;
1159
+ meetingLookupUrl = _args3.length > 7 && _args3[7] !== undefined ? _args3[7] : undefined;
919
1160
  meeting = new _meeting.default({
920
1161
  // @ts-ignore
921
1162
  userId: this.webex.internal.device.userId,
@@ -927,13 +1168,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
927
1168
  // pass the locus object if present
928
1169
  meetingInfoProvider: this.meetingInfo,
929
1170
  destination: destination,
930
- destinationType: type
1171
+ destinationType: type,
1172
+ callStateForMetrics: callStateForMetrics
931
1173
  }, {
932
1174
  // @ts-ignore
933
1175
  parent: this.webex
934
1176
  });
935
1177
  this.meetingCollection.set(meeting);
936
- _context.prev = 4;
1178
+ _context3.prev = 9;
937
1179
  // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,
938
1180
  // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo
939
1181
  // between 5 and 2 min (random between 3 minutes) before the meeting starts
@@ -949,33 +1191,57 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
949
1191
  }
950
1192
  isMeetingActive = !!((_destination$fullStat = destination.fullState) !== null && _destination$fullStat !== void 0 && _destination$fullStat.active); // @ts-ignore
951
1193
  enableUnifiedMeetings = this.config.experimental.enableUnifiedMeetings;
1194
+ meetingInfoOptions = {
1195
+ extraParams: infoExtraParams,
1196
+ sendCAevents: !!(callStateForMetrics !== null && callStateForMetrics !== void 0 && callStateForMetrics.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
1197
+ };
1198
+ if (!meetingInfo) {
1199
+ _context3.next = 19;
1200
+ break;
1201
+ }
1202
+ meeting.injectMeetingInfo(meetingInfo, meetingInfoOptions, meetingLookupUrl);
1203
+ _context3.next = 26;
1204
+ break;
1205
+ case 19:
952
1206
  if (!(enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0)) {
953
- _context.next = 14;
1207
+ _context3.next = 24;
954
1208
  break;
955
1209
  }
956
1210
  meeting.fetchMeetingInfoTimeoutId = setTimeout(function () {
957
- return meeting.fetchMeetingInfo({});
1211
+ return meeting.fetchMeetingInfo(meetingInfoOptions);
958
1212
  }, waitingTime);
959
1213
  meeting.parseMeetingInfo(undefined, destination);
960
- _context.next = 16;
1214
+ _context3.next = 26;
961
1215
  break;
962
- case 14:
963
- _context.next = 16;
964
- return meeting.fetchMeetingInfo({});
965
- case 16:
966
- _context.next = 22;
1216
+ case 24:
1217
+ _context3.next = 26;
1218
+ return meeting.fetchMeetingInfo(meetingInfoOptions);
1219
+ case 26:
1220
+ _context3.next = 38;
967
1221
  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');
1222
+ case 28:
1223
+ _context3.prev = 28;
1224
+ _context3.t0 = _context3["catch"](9);
1225
+ if (!(!(_context3.t0 instanceof _captchaError.default) && !(_context3.t0 instanceof _passwordError.default) && !(_context3.t0 instanceof _permission.default))) {
1226
+ _context3.next = 37;
1227
+ break;
1228
+ }
1229
+ _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Info Unable to fetch meeting info for ".concat(destination, "."));
1230
+ if (!failOnMissingMeetingInfo) {
1231
+ _context3.next = 36;
1232
+ break;
975
1233
  }
976
- _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context.t0, " fetching /meetingInfo for creation."));
977
- case 22:
978
- _context.prev = 22;
1234
+ _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Destroying meeting due to missing meeting info.");
1235
+ // @ts-ignore
1236
+ this.destroy(meeting, _constants.MEETING_REMOVED_REASON.MISSING_MEETING_INFO);
1237
+ throw new _noMeetingInfo.default();
1238
+ case 36:
1239
+ // if there is no meeting info and no error should be thrown then we assume its a 1:1 call or wireless share
1240
+ _loggerProxy.default.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
1241
+ case 37:
1242
+ _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context3.t0, " fetching /meetingInfo for creation."));
1243
+ case 38:
1244
+ _context3.prev = 38;
979
1245
  // For type LOCUS_ID we need to parse the locus object to get the information
980
1246
  // about the caller and callee
981
1247
  // Meeting Added event will be created in `handleLocusEvent`
@@ -995,16 +1261,16 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
995
1261
  type: meetingAddedType
996
1262
  });
997
1263
  }
998
- return _context.finish(22);
999
- case 25:
1000
- return _context.abrupt("return", meeting);
1001
- case 26:
1264
+ return _context3.finish(38);
1265
+ case 41:
1266
+ return _context3.abrupt("return", meeting);
1267
+ case 42:
1002
1268
  case "end":
1003
- return _context.stop();
1269
+ return _context3.stop();
1004
1270
  }
1005
- }, _callee, this, [[4, 18, 22, 25]]);
1271
+ }, _callee3, this, [[9, 28, 38, 41]]);
1006
1272
  }));
1007
- function createMeeting(_x) {
1273
+ function createMeeting(_x3) {
1008
1274
  return _createMeeting.apply(this, arguments);
1009
1275
  }
1010
1276
  return createMeeting;
@@ -1042,8 +1308,9 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1042
1308
  }
1043
1309
 
1044
1310
  /**
1045
- * syncs all the meeting from server
1046
- * @returns {undefined}
1311
+ * Syncs all the meetings from server. Does nothing and returns immediately if unverified guest.
1312
+ * @param {boolean} keepOnlyLocusMeetings - whether the sync should keep only locus meetings or any other meeting in meetingCollection
1313
+ * @returns {Promise<void>}
1047
1314
  * @public
1048
1315
  * @memberof Meetings
1049
1316
  */
@@ -1051,10 +1318,19 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1051
1318
  key: "syncMeetings",
1052
1319
  value: function syncMeetings() {
1053
1320
  var _this11 = this;
1321
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1322
+ _ref3$keepOnlyLocusMe = _ref3.keepOnlyLocusMeetings,
1323
+ keepOnlyLocusMeetings = _ref3$keepOnlyLocusMe === void 0 ? true : _ref3$keepOnlyLocusMe;
1324
+ // @ts-ignore
1325
+ if (this.webex.credentials.isUnverifiedGuest) {
1326
+ _loggerProxy.default.logger.info('Meetings:index#syncMeetings --> skipping meeting sync as unverified guest');
1327
+ return _promise.default.resolve();
1328
+ }
1054
1329
  return this.request.getActiveMeetings().then(function (locusArray) {
1055
1330
  var activeLocusUrl = [];
1056
1331
  if (locusArray !== null && locusArray !== void 0 && locusArray.loci && locusArray.loci.length > 0) {
1057
- locusArray.loci.forEach(function (locus) {
1332
+ var lociToUpdate = _this11.sortLocusArrayToUpdate(locusArray.loci);
1333
+ lociToUpdate.forEach(function (locus) {
1058
1334
  activeLocusUrl.push(locus.url);
1059
1335
  _this11.handleLocusEvent({
1060
1336
  locus: locus,
@@ -1064,21 +1340,97 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1064
1340
  }
1065
1341
  var meetingsCollection = _this11.meetingCollection.getAll();
1066
1342
  if ((0, _keys.default)(meetingsCollection).length > 0) {
1067
- // Some time the mercury event is missed after mercury reconnect
1068
- // if sync returns no locus then clear all the meetings
1343
+ // Sometimes the mercury events are lost after mercury reconnect
1344
+ // Remove any Locus meetings that are not returned by Locus
1345
+ // (they had a locusUrl previously but are no longer active) in the sync
1069
1346
  for (var _i = 0, _Object$values = (0, _values.default)(meetingsCollection); _i < _Object$values.length; _i++) {
1070
1347
  var meeting = _Object$values[_i];
1071
1348
  // @ts-ignore
1072
- if (!activeLocusUrl.includes(meeting.locusUrl)) {
1349
+ var locusUrl = meeting.locusUrl;
1350
+ if ((keepOnlyLocusMeetings || locusUrl) && !activeLocusUrl.includes(locusUrl)) {
1073
1351
  // destroy function also uploads logs
1074
1352
  // @ts-ignore
1075
1353
  _this11.destroy(meeting, _constants.MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
1076
1354
  }
1077
1355
  }
1078
1356
  }
1357
+ }).catch(function (error) {
1358
+ _loggerProxy.default.logger.error("Meetings:index#syncMeetings --> failed to sync meetings, ".concat(error));
1359
+ throw new Error(error);
1079
1360
  });
1080
1361
  }
1081
1362
 
1363
+ /**
1364
+ * sort out locus array for initial creating
1365
+ * @param {Array} loci original locus array
1366
+ * @returns {undefined}
1367
+ * @public
1368
+ * @memberof Meetings
1369
+ */
1370
+ }, {
1371
+ key: "sortLocusArrayToUpdate",
1372
+ value: function sortLocusArrayToUpdate(loci) {
1373
+ var _this12 = this;
1374
+ var mainLoci = loci.filter(function (locus) {
1375
+ return !_util2.default.isBreakoutLocusDTO(locus);
1376
+ });
1377
+ var breakoutLoci = loci.filter(function (locus) {
1378
+ return _util2.default.isValidBreakoutLocus(locus);
1379
+ });
1380
+ this.breakoutLocusForHandleLater = [];
1381
+ var lociToUpdate = (0, _toConsumableArray2.default)(mainLoci);
1382
+ breakoutLoci.forEach(function (breakoutLocus) {
1383
+ var associateMainLocus = mainLoci.find(function (mainLocus) {
1384
+ var _mainLocus$controls, _mainLocus$controls$b, _breakoutLocus$contro, _breakoutLocus$contro2;
1385
+ 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);
1386
+ });
1387
+ var existCorrespondingMeeting = _this12.getCorrespondingMeetingByLocus({
1388
+ locus: breakoutLocus,
1389
+ locusUrl: breakoutLocus.url
1390
+ });
1391
+ if (associateMainLocus && !existCorrespondingMeeting) {
1392
+ // if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,
1393
+ // after meeting create with main locus, then handle the associate breakout locus.
1394
+ // if only handle breakout locus, will miss some date
1395
+ _this12.breakoutLocusForHandleLater.push(breakoutLocus);
1396
+ } else {
1397
+ lociToUpdate.push(breakoutLocus);
1398
+ }
1399
+ });
1400
+ return lociToUpdate;
1401
+ }
1402
+
1403
+ /**
1404
+ * check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus
1405
+ * @param {Object} newCreatedLocus the locus which just create meeting object of it
1406
+ * @returns {undefined}
1407
+ * @public
1408
+ * @memberof Meetings
1409
+ */
1410
+ }, {
1411
+ key: "checkHandleBreakoutLocus",
1412
+ value: function checkHandleBreakoutLocus(newCreatedLocus) {
1413
+ if (!newCreatedLocus || !this.breakoutLocusForHandleLater || !this.breakoutLocusForHandleLater.length) {
1414
+ return;
1415
+ }
1416
+ if (_util2.default.isBreakoutLocusDTO(newCreatedLocus)) {
1417
+ return;
1418
+ }
1419
+ var existIndex = this.breakoutLocusForHandleLater.findIndex(function (breakoutLocus) {
1420
+ var _breakoutLocus$contro3, _breakoutLocus$contro4, _newCreatedLocus$cont, _newCreatedLocus$cont2;
1421
+ 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);
1422
+ });
1423
+ if (existIndex < 0) {
1424
+ return;
1425
+ }
1426
+ var associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];
1427
+ this.handleLocusEvent({
1428
+ locus: associateBreakoutLocus,
1429
+ locusUrl: associateBreakoutLocus.url
1430
+ });
1431
+ this.breakoutLocusForHandleLater.splice(existIndex, 1);
1432
+ }
1433
+
1082
1434
  /**
1083
1435
  * Get all scheduled meetings.
1084
1436
  * @param {object} options
@@ -1104,6 +1456,19 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1104
1456
  value: function getLogger() {
1105
1457
  return _loggerProxy.default.get();
1106
1458
  }
1459
+
1460
+ /**
1461
+ * Returns the first meeting it finds that has the webrtc media connection created.
1462
+ * Useful for debugging in the console.
1463
+ *
1464
+ * @private
1465
+ * @returns {Meeting} Meeting object that has a webrtc media connection, else undefined
1466
+ */
1467
+ }, {
1468
+ key: "getActiveWebrtcMeeting",
1469
+ value: function getActiveWebrtcMeeting() {
1470
+ return this.meetingCollection.getActiveWebrtcMeeting();
1471
+ }
1107
1472
  }]);
1108
1473
  return Meetings;
1109
1474
  }(_webexCore.WebexPlugin);