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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +10 -24
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +11 -24
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +12 -25
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +10 -24
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +10 -24
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +9 -23
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +10 -24
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +10 -24
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +10 -69
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +5 -25
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +37 -60
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +7 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +184 -122
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +362 -208
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +3 -37
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +92 -118
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +113 -337
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +96 -135
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +1 -35
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2909 -2398
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +257 -112
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +330 -264
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +63 -261
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +6 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +14 -32
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +273 -280
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +3 -15
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +26 -19
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +741 -548
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +26 -41
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +194 -149
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +100 -85
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -68
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +13 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +227 -188
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +54 -39
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +67 -159
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +250 -0
  168. package/dist/multistream/mediaRequestManager.js.map +1 -0
  169. package/dist/multistream/receiveSlot.js +202 -0
  170. package/dist/multistream/receiveSlot.js.map +1 -0
  171. package/dist/multistream/receiveSlotManager.js +176 -0
  172. package/dist/multistream/receiveSlotManager.js.map +1 -0
  173. package/dist/multistream/remoteMedia.js +270 -0
  174. package/dist/multistream/remoteMedia.js.map +1 -0
  175. package/dist/multistream/remoteMediaGroup.js +209 -0
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  177. package/dist/multistream/remoteMediaManager.js +1137 -0
  178. package/dist/multistream/remoteMediaManager.js.map +1 -0
  179. package/dist/networkQualityMonitor/index.js +40 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +21 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +1 -31
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +192 -191
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +15 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +386 -527
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +84 -286
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +138 -238
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +164 -102
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -93
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +399 -470
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +22 -47
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +29 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  341. package/src/common/collection.ts +9 -7
  342. package/src/common/{config.js → config.ts} +1 -1
  343. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  344. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  345. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  346. package/src/common/errors/{media.js → media.ts} +11 -7
  347. package/src/common/errors/parameter.ts +11 -7
  348. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  349. package/src/common/errors/{permission.js → permission.ts} +10 -6
  350. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  351. package/src/common/errors/{stats.js → stats.ts} +11 -7
  352. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -25
  353. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  354. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  355. package/src/common/events/{events.js → events.ts} +5 -1
  356. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  357. package/src/common/events/{util.js → util.ts} +2 -3
  358. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  359. package/src/common/logs/logger-proxy.ts +44 -0
  360. package/src/common/logs/{request.js → request.ts} +22 -9
  361. package/src/common/queue.ts +1 -2
  362. package/src/{config.js → config.ts} +18 -12
  363. package/src/constants.ts +256 -183
  364. package/src/controls-options-manager/constants.ts +5 -0
  365. package/src/controls-options-manager/enums.ts +16 -0
  366. package/src/controls-options-manager/index.ts +278 -0
  367. package/src/controls-options-manager/types.ts +49 -0
  368. package/src/controls-options-manager/util.ts +229 -0
  369. package/src/index.ts +33 -0
  370. package/src/locus-info/controlsUtils.ts +169 -0
  371. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  372. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  373. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  374. package/src/locus-info/{index.js → index.ts} +331 -80
  375. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  376. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  377. package/src/locus-info/{parser.js → parser.ts} +67 -79
  378. package/src/locus-info/{selfUtils.js → selfUtils.ts} +196 -67
  379. package/src/media/index.ts +488 -0
  380. package/src/media/{properties.js → properties.ts} +67 -54
  381. package/src/media/util.ts +16 -0
  382. package/src/mediaQualityMetrics/config.ts +384 -0
  383. package/src/meeting/in-meeting-actions.ts +123 -3
  384. package/src/meeting/{index.js → index.ts} +3334 -1775
  385. package/src/meeting/muteState.ts +526 -0
  386. package/src/meeting/{request.js → request.ts} +350 -142
  387. package/src/meeting/request.type.ts +13 -0
  388. package/src/meeting/{state.js → state.ts} +50 -35
  389. package/src/meeting/{util.js → util.ts} +126 -159
  390. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  391. package/src/meeting-info/{index.js → index.ts} +42 -36
  392. package/src/meeting-info/meeting-info-v2.ts +345 -0
  393. package/src/meeting-info/{request.js → request.ts} +14 -4
  394. package/src/meeting-info/{util.js → util.ts} +60 -51
  395. package/src/meeting-info/{utilv2.js → utilv2.ts} +76 -60
  396. package/src/meetings/{collection.js → collection.ts} +26 -3
  397. package/src/meetings/index.ts +1394 -0
  398. package/src/meetings/{request.js → request.ts} +34 -25
  399. package/src/meetings/util.ts +288 -0
  400. package/src/member/{index.js → index.ts} +124 -56
  401. package/src/member/types.ts +24 -0
  402. package/src/member/{util.js → util.ts} +105 -25
  403. package/src/members/{collection.js → collection.ts} +10 -2
  404. package/src/members/{index.js → index.ts} +359 -139
  405. package/src/members/request.ts +215 -0
  406. package/src/members/types.ts +28 -0
  407. package/src/members/{util.js → util.ts} +145 -54
  408. package/src/metrics/{config.js → config.ts} +256 -92
  409. package/src/metrics/{constants.js → constants.ts} +1 -6
  410. package/src/metrics/{index.js → index.ts} +116 -97
  411. package/src/multistream/mediaRequestManager.ts +324 -0
  412. package/src/multistream/receiveSlot.ts +184 -0
  413. package/src/multistream/receiveSlotManager.ts +166 -0
  414. package/src/multistream/remoteMedia.ts +254 -0
  415. package/src/multistream/remoteMediaGroup.ts +225 -0
  416. package/src/multistream/remoteMediaManager.ts +1075 -0
  417. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  418. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  419. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  420. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  421. package/src/reachability/{index.js → index.ts} +157 -94
  422. package/src/reachability/request.ts +46 -35
  423. package/src/reactions/constants.ts +4 -0
  424. package/src/reactions/reactions.ts +104 -0
  425. package/src/reactions/reactions.type.ts +62 -0
  426. package/src/reconnection-manager/{index.js → index.ts} +261 -163
  427. package/src/recording-controller/enums.ts +8 -0
  428. package/src/recording-controller/index.ts +315 -0
  429. package/src/recording-controller/util.ts +58 -0
  430. package/src/roap/index.ts +241 -0
  431. package/src/roap/request.ts +172 -0
  432. package/src/roap/turnDiscovery.ts +127 -53
  433. package/src/statsAnalyzer/global.ts +37 -0
  434. package/src/statsAnalyzer/index.ts +1273 -0
  435. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  436. package/src/transcription/{index.js → index.ts} +46 -39
  437. package/test/integration/spec/converged-space-meetings.js +177 -0
  438. package/test/integration/spec/journey.js +666 -464
  439. package/test/integration/spec/space-meeting.js +321 -206
  440. package/test/integration/spec/transcription.js +7 -8
  441. package/test/unit/spec/annotation/index.ts +435 -0
  442. package/test/unit/spec/breakouts/breakout.ts +184 -0
  443. package/test/unit/spec/breakouts/collection.ts +15 -0
  444. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  445. package/test/unit/spec/breakouts/events.ts +77 -0
  446. package/test/unit/spec/breakouts/index.ts +1504 -0
  447. package/test/unit/spec/breakouts/request.ts +104 -0
  448. package/test/unit/spec/breakouts/utils.js +72 -0
  449. package/test/unit/spec/common/browser-detection.js +9 -28
  450. package/test/unit/spec/controls-options-manager/index.js +287 -0
  451. package/test/unit/spec/controls-options-manager/util.js +403 -0
  452. package/test/unit/spec/fixture/locus.js +92 -90
  453. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  454. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  455. package/test/unit/spec/locus-info/index.js +493 -3
  456. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  457. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  458. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  459. package/test/unit/spec/locus-info/parser.js +3 -9
  460. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  461. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  462. package/test/unit/spec/media/index.ts +303 -0
  463. package/test/unit/spec/media/properties.ts +73 -82
  464. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  465. package/test/unit/spec/meeting/index.js +3127 -975
  466. package/test/unit/spec/meeting/muteState.js +375 -70
  467. package/test/unit/spec/meeting/request.js +217 -43
  468. package/test/unit/spec/meeting/utils.js +205 -163
  469. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  470. package/test/unit/spec/meeting-info/request.js +7 -9
  471. package/test/unit/spec/meeting-info/util.js +11 -12
  472. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  473. package/test/unit/spec/meetings/collection.js +15 -1
  474. package/test/unit/spec/meetings/index.js +1052 -333
  475. package/test/unit/spec/meetings/utils.js +163 -14
  476. package/test/unit/spec/member/index.js +24 -1
  477. package/test/unit/spec/member/util.js +359 -32
  478. package/test/unit/spec/members/index.js +547 -37
  479. package/test/unit/spec/members/request.js +76 -20
  480. package/test/unit/spec/members/utils.js +191 -4
  481. package/test/unit/spec/metrics/index.js +46 -20
  482. package/test/unit/spec/multistream/mediaRequestManager.ts +1060 -0
  483. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  484. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  485. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  486. package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
  487. package/test/unit/spec/multistream/remoteMediaManager.ts +1793 -0
  488. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  489. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  490. package/test/unit/spec/reachability/index.ts +176 -27
  491. package/test/unit/spec/reachability/request.js +66 -0
  492. package/test/unit/spec/reconnection-manager/index.js +106 -9
  493. package/test/unit/spec/recording-controller/index.js +231 -0
  494. package/test/unit/spec/recording-controller/util.js +102 -0
  495. package/test/unit/spec/roap/index.ts +78 -45
  496. package/test/unit/spec/roap/request.ts +217 -0
  497. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  498. package/test/unit/spec/stats-analyzer/index.js +118 -65
  499. package/test/utils/cmr.js +44 -42
  500. package/test/utils/constants.js +9 -0
  501. package/test/utils/integrationTestUtils.js +64 -0
  502. package/test/utils/testUtils.js +63 -99
  503. package/test/utils/webex-config.js +22 -18
  504. package/test/utils/webex-test-users.js +57 -50
  505. package/tsconfig.json +6 -0
  506. package/dist/meeting/effectsState.js +0 -327
  507. package/dist/meeting/effectsState.js.map +0 -1
  508. package/dist/peer-connection-manager/index.js +0 -794
  509. package/dist/peer-connection-manager/index.js.map +0 -1
  510. package/dist/peer-connection-manager/util.js +0 -124
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.js +0 -73
  513. package/dist/roap/collection.js.map +0 -1
  514. package/dist/roap/handler.js +0 -337
  515. package/dist/roap/handler.js.map +0 -1
  516. package/dist/roap/state.js +0 -164
  517. package/dist/roap/state.js.map +0 -1
  518. package/dist/roap/util.js +0 -102
  519. package/dist/roap/util.js.map +0 -1
  520. package/src/common/logs/logger-proxy.js +0 -33
  521. package/src/index.js +0 -15
  522. package/src/locus-info/controlsUtils.js +0 -102
  523. package/src/media/index.js +0 -593
  524. package/src/media/util.js +0 -38
  525. package/src/mediaQualityMetrics/config.js +0 -382
  526. package/src/meeting/effectsState.js +0 -205
  527. package/src/meeting/muteState.js +0 -318
  528. package/src/meeting-info/meeting-info-v2.js +0 -255
  529. package/src/meetings/index.js +0 -986
  530. package/src/meetings/util.js +0 -176
  531. package/src/members/request.js +0 -131
  532. package/src/peer-connection-manager/index.js +0 -723
  533. package/src/peer-connection-manager/util.ts +0 -117
  534. package/src/roap/collection.js +0 -63
  535. package/src/roap/handler.js +0 -252
  536. package/src/roap/index.js +0 -380
  537. package/src/roap/request.js +0 -198
  538. package/src/roap/state.js +0 -149
  539. package/src/roap/util.js +0 -93
  540. package/src/statsAnalyzer/global.js +0 -131
  541. package/src/statsAnalyzer/index.js +0 -1020
  542. package/src/statsAnalyzer/mqaUtil.js +0 -173
  543. package/test/unit/spec/meeting/effectsState.js +0 -293
  544. package/test/unit/spec/peerconnection-manager/index.js +0 -188
  545. package/test/unit/spec/peerconnection-manager/utils.js +0 -48
  546. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  547. package/test/unit/spec/roap/util.js +0 -30
  548. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -1,986 +0,0 @@
1
-
2
- import '@webex/internal-plugin-mercury';
3
- import '@webex/internal-plugin-conversation';
4
- import {WebexPlugin} from '@webex/webex-core';
5
-
6
- import 'webrtc-adapter';
7
-
8
- import Metrics from '../metrics';
9
- import {trigger, eventType} from '../metrics/config';
10
- import LoggerConfig from '../common/logs/logger-config';
11
- import StaticConfig from '../common/config';
12
- import LoggerProxy from '../common/logs/logger-proxy';
13
- import LoggerRequest from '../common/logs/request';
14
- import Trigger from '../common/events/trigger-proxy';
15
- import Media from '../media';
16
- import MeetingUtil from '../meeting/util';
17
- import {
18
- MEETINGS,
19
- EVENTS,
20
- EVENT_TRIGGERS,
21
- READY,
22
- LOCUSEVENT,
23
- LOCUS_URL,
24
- MAX_RANDOM_DELAY_FOR_MEETING_INFO,
25
- ROAP,
26
- ONLINE,
27
- OFFLINE,
28
- _MEETING_,
29
- _JOIN_,
30
- _LOCUS_ID_,
31
- _INCOMING_,
32
- LOCUS,
33
- CORRELATION_ID,
34
- SIP_URI,
35
- _LEFT_,
36
- _ID_,
37
- MEETING_REMOVED_REASON,
38
- _CONVERSATION_URL_,
39
- CONVERSATION_URL
40
- } from '../constants';
41
- import BEHAVIORAL_METRICS from '../metrics/constants';
42
- import MeetingInfo from '../meeting-info';
43
- import MeetingInfoV2 from '../meeting-info/meeting-info-v2';
44
- import Meeting from '../meeting';
45
- import PersonalMeetingRoom from '../personal-meeting-room';
46
- import Reachability from '../reachability';
47
- import Request from '../meetings/request';
48
- import PasswordError from '../common/errors/password-error';
49
- import CaptchaError from '../common/errors/captcha-error';
50
-
51
- import MeetingCollection from './collection';
52
- import MeetingsUtil from './util';
53
-
54
-
55
- /**
56
- * Meetings Ready Event
57
- * Emitted when the meetings instance on webex is ready
58
- * @event meetings:ready
59
- * @instance
60
- * @memberof Meetings
61
- */
62
-
63
- /**
64
- * Meetings Network Disconnected Event
65
- * Emitted when the meetings instance is disconnected from
66
- * the internal mercury server
67
- * @event network:disconnected
68
- * @instance
69
- * @memberof Meetings
70
- */
71
-
72
- /**
73
- * Meetings Registered Event
74
- * Emitted when the meetings instance has been registered and listening
75
- * @event meetings:registered
76
- * @instance
77
- * @memberof Meetings
78
- */
79
-
80
- /**
81
- * Meeting Removed Event
82
- * Emitted when a meeting was removed from the cache of meetings
83
- * @event meeting:removed
84
- * @instance
85
- * @type {Object}
86
- * @property {String} meetingId the removed meeting
87
- * @property {Object} response the server response
88
- * @property {String} type what type of meeting it was
89
- * @memberof Meetings
90
- */
91
-
92
- /**
93
- * Meeting Added Event
94
- * Emitted when a meeting was added to the cache of meetings
95
- * @event meeting:added
96
- * @instance
97
- * @type {Object}
98
- * @property {String} meetingId the added meeting
99
- * @property {String} type what type of meeting it was
100
- * @memberof Meetings
101
- */
102
-
103
- /**
104
- * Maintain a cache of meetings and sync with services.
105
- * @class
106
- */
107
- export default class Meetings extends WebexPlugin {
108
- namespace = MEETINGS;
109
-
110
- /**
111
- * Initializes the Meetings Plugin
112
- * @constructor
113
- * @public
114
- * @memberof Meetings
115
- */
116
- constructor(...args) {
117
- super(...args);
118
-
119
- /**
120
- * The Meetings request to interact with server
121
- * @instance
122
- * @type {Object}
123
- * @private
124
- * @memberof Meetings
125
- */
126
- this.request = new Request({}, {parent: this.webex});
127
- /**
128
- * Log upload request helper
129
- * @instance
130
- * @type {Object}
131
- * @private
132
- * @memberof Meetings
133
- */
134
- this.loggerRequest = new LoggerRequest({webex: this.webex});
135
- this.meetingCollection = new MeetingCollection();
136
- /**
137
- * The PersonalMeetingRoom object to interact with server
138
- * @instance
139
- * @type {Object}
140
- * @public
141
- * @memberof Meetings
142
- */
143
- this.personalMeetingRoom = null;
144
- /**
145
- * The Reachability object to interact with server, starts as null until {@link Meeting#setReachability} is called
146
- * starts as null
147
- * @instance
148
- * @type {Object}
149
- * @private
150
- * @memberof Meetings
151
- */
152
- this.reachability = null;
153
-
154
- /**
155
- * If the meetings plugin has been registered and listening via {@link Meetings#register}
156
- * @instance
157
- * @type {Boolean}
158
- * @public
159
- * @memberof Meetings
160
- */
161
- this.registered = false;
162
-
163
- /**
164
- * This values indicates the preferred webex site the user will start there meeting, getsits value from {@link Meetings#register}
165
- * @instance
166
- * @type {String}
167
- * @private
168
- * @memberof Meetings
169
- */
170
- this.preferredWebexSite = '';
171
-
172
- /**
173
- * The public interface for the internal Media util files. These are helpful to expose outside the context
174
- * of a meeting so that a user can access media without creating a meeting instance.
175
- * @instance
176
- * @type {Object}
177
- * @private
178
- * @memberof Meetings
179
- */
180
- this.media = {
181
- getUserMedia: Media.getUserMedia,
182
- getSupportedDevice: Media.getSupportedDevice
183
- };
184
-
185
- this.onReady();
186
- }
187
-
188
- /**
189
- * handle locus events and takes meeting actions with them as they come in
190
- * @param {Object} data a locus event
191
- * @param {String} data.locusUrl
192
- * @param {Object} data.locus
193
- * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
194
- * @param {String} data.eventType
195
- * @returns {undefined}
196
- * @private
197
- * @memberof Meetings
198
- */
199
- handleLocusEvent(data, useRandomDelayForInfo = false) {
200
- let meeting = null;
201
-
202
- // getting meeting by correlationId. This will happen for the new event
203
- // Either the locus
204
- // TODO : Add check for the callBack Address
205
- meeting = this.meetingCollection.getByKey(LOCUS_URL, data.locusUrl) ||
206
- this.meetingCollection.getByKey(CORRELATION_ID, MeetingsUtil.checkForCorrelationId(this.webex.internal.device.url, data.locus)) ||
207
- this.meetingCollection.getByKey(SIP_URI, data.locus.self && data.locus.self.callbackInfo && data.locus.self.callbackInfo.callbackAddress) ||
208
- (data.locus.info?.isUnifiedSpaceMeeting ? undefined : this.meetingCollection.getByKey(CONVERSATION_URL, data.locus.conversationUrl));
209
-
210
- // Special case when locus has got replaced, This only happend once if a replace locus exists
211
- // https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call
212
-
213
- if (!meeting && data.locus?.replaces?.length > 0) {
214
- // Always the last element in the replace is the active one
215
- meeting = this.meetingCollection.getByKey(LOCUS_URL, data.locus.replaces[data.locus.replaces.length - 1].locusUrl);
216
- }
217
-
218
- if (!meeting) {
219
- // TODO: create meeting when we get a meeting object
220
- // const checkForEnded = (locus) => {
221
- // TODO: you already ended the meeting but you got an event later
222
- // Mainly for 1:1 Callsor meeting
223
- // Happens mainly after refresh
224
-
225
- // 1:1 Meeting
226
- // 1) You ended a call before but you got a mercury event
227
- // Make sure end the call and cleanup the meeting only if the mercury
228
- // event says so
229
- // 2) Maintain lastSync time in the meetings object which helps to compare
230
- // If the meeting came befor or after the sync . ANy meeting start time before the sync time is invalid
231
-
232
- // For space Meeting
233
- // Check the locus object and see who has joined
234
-
235
- // };
236
- // rather then locus object change to locus url
237
-
238
- if (data.locus && data.locus.fullState && data.locus.fullState.state === LOCUS.STATE.INACTIVE) {
239
- // just ignore the event as its already ended and not active
240
- LoggerProxy.logger.warn('Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.');
241
-
242
- return;
243
- }
244
-
245
-
246
- // When its wireless share or guest and user leaves the meeting we dont have to keep the meeting object
247
- // Any future events will be neglected
248
-
249
- if (data.locus && data.locus.self && (data.locus.self.state === _LEFT_ && data.locus.self.removed === true)) {
250
- // just ignore the event as its already ended and not active
251
- LoggerProxy.logger.warn('Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.');
252
-
253
- return;
254
- }
255
-
256
- this.create(data.locus, _LOCUS_ID_, useRandomDelayForInfo).then((newMeeting) => {
257
- meeting = newMeeting;
258
-
259
- // It's a new meeting so initialize the locus data
260
- meeting.locusInfo.initialSetup(data.locus);
261
- }).catch((e) => {
262
- console.log(e);
263
- })
264
- .finally(() => {
265
- // There will be cases where locus event comes in gets created and deleted because its a 1:1 and meeting gets deleted
266
- // because the other user left so before sending 'added' event make sure it exists in the collection
267
-
268
- if (this.getMeetingByType(_ID_, meeting.id)) {
269
- Metrics.postEvent({event: eventType.REMOTE_STARTED, meeting, data: {trigger: trigger.MERCURY_EVENT}});
270
- Trigger.trigger(
271
- this,
272
- {
273
- file: 'meetings',
274
- function: 'handleLocusEvent'
275
- },
276
- EVENT_TRIGGERS.MEETING_ADDED,
277
- {
278
- meeting,
279
- type: meeting.type === _MEETING_ ? _JOIN_ : _INCOMING_
280
- }
281
- );
282
- }
283
- else {
284
- // Meeting got added but was not found in the collection. It might have got destroyed
285
- LoggerProxy.logger.warn('Meetings:index#handleLocusEvent --> Created and destroyed meeting object before sending an event');
286
- }
287
- });
288
- }
289
- else {
290
- meeting.locusInfo.parse(meeting, data);
291
- }
292
- }
293
-
294
- /**
295
- * handles locus events through mercury that are not roap
296
- * @param {Object} envelope
297
- * @param {Object} envelope.data
298
- * @param {String} envelope.data.eventType
299
- * @returns {undefined}
300
- * @private
301
- * @memberof Meetings
302
- */
303
- handleLocusMercury(envelope) {
304
- const {data} = envelope;
305
- const {eventType} = data;
306
-
307
- if (eventType && eventType !== LOCUSEVENT.MESSAGE_ROAP) {
308
- this.handleLocusEvent(data, true);
309
- }
310
- }
311
-
312
-
313
- /**
314
- * handles mecury offline event
315
- * @returns {undefined}
316
- * @private
317
- * @memberof Meetings
318
- */
319
- handleMercuryOffline() {
320
- Trigger.trigger(
321
- this,
322
- {
323
- file: 'meetings/index',
324
- function: 'handleMercuryOffline'
325
- },
326
- EVENT_TRIGGERS.MEETINGS_NETWORK_DISCONNECTED,
327
- );
328
- }
329
-
330
-
331
- /**
332
- * registers for locus and roap mercury events
333
- * @returns {undefined}
334
- * @private
335
- * @memberof Meetings
336
- */
337
- listenForEvents() {
338
- this.webex.internal.mercury.on(LOCUSEVENT.LOCUS_MERCURY, (envelope) => {
339
- this.handleLocusMercury(envelope);
340
- });
341
- this.webex.internal.mercury.on(ROAP.ROAP_MERCURY, (envelope) => {
342
- MeetingsUtil.handleRoapMercury(envelope, this.meetingCollection);
343
- });
344
-
345
- this.webex.internal.mercury.on(ONLINE, () => {
346
- this.syncMeetings();
347
- });
348
-
349
- this.webex.internal.mercury.on(OFFLINE, () => {
350
- this.handleMercuryOffline();
351
- });
352
- }
353
-
354
- /**
355
- * stops listening for locus and roap mercury events
356
- * @returns {undefined}
357
- * @private
358
- * @memberof Meetings
359
- */
360
- stopListeningForEvents() {
361
- this.webex.internal.mercury.off(LOCUSEVENT.LOCUS_MERCURY);
362
- this.webex.internal.mercury.off(ROAP.ROAP_MERCURY);
363
- this.webex.internal.mercury.off(ONLINE);
364
- }
365
-
366
- /**
367
- * @returns {undefined}
368
- * @private
369
- * @memberof Meetings
370
- */
371
- onReady() {
372
- this.webex.once(READY, () => {
373
- StaticConfig.set(this.config);
374
- LoggerConfig.set(this.config.logging);
375
- LoggerProxy.set(this.webex.logger);
376
-
377
- /**
378
- * The MeetingInfo object to interact with server
379
- * @instance
380
- * @type {Object}
381
- * @private
382
- * @memberof Meetings
383
- */
384
- this.meetingInfo = this.config.experimental.enableUnifiedMeetings ? new MeetingInfoV2(this.webex) : new MeetingInfo(this.webex);
385
- this.personalMeetingRoom = new PersonalMeetingRoom({meetingInfo: this.meetingInfo}, {parent: this.webex});
386
-
387
- Trigger.trigger(
388
- this,
389
- {
390
- file: 'meetings',
391
- function: 'onReady'
392
- },
393
- EVENT_TRIGGERS.MEETINGS_READY
394
- );
395
-
396
- MeetingsUtil.checkH264Support({disableNotifications: true});
397
- Metrics.initialSetup(this.meetingCollection, this.webex);
398
- });
399
- }
400
-
401
- /**
402
- * API to toggle unified meetings
403
- * @param {Boolean} changeState
404
- * @private
405
- * @memberof Meetings
406
- * @returns {undefined}
407
- */
408
- _toggleUnifiedMeetings(changeState) {
409
- if (typeof changeState !== 'boolean') {
410
- return;
411
- }
412
- if (this.config?.experimental?.enableUnifiedMeetings !== changeState) {
413
- this.config.experimental.enableUnifiedMeetings = changeState;
414
- this.meetingInfo = changeState ? new MeetingInfoV2(this.webex) : new MeetingInfo(this.webex);
415
- }
416
- }
417
-
418
- /**
419
- * API to enable or disable TURN discovery
420
- * @param {Boolean} enable
421
- * @private
422
- * @memberof Meetings
423
- * @returns {undefined}
424
- */
425
- _toggleTurnDiscovery(enable) {
426
- if (typeof enable !== 'boolean') {
427
- return;
428
- }
429
- this.config.experimental.enableTurnDiscovery = enable;
430
- }
431
-
432
- /**
433
- * API to toggle starting adhoc meeting
434
- * @param {Boolean} changeState
435
- * @private
436
- * @memberof Meetings
437
- * @returns {undefined}
438
- */
439
- _toggleAdhocMeetings(changeState) {
440
- if (typeof changeState !== 'boolean') {
441
- return;
442
- }
443
- if (this.config?.experimental?.enableAdhocMeetings !== changeState) {
444
- this.config.experimental.enableAdhocMeetings = changeState;
445
- }
446
- }
447
-
448
- /**
449
- * Explicitly sets up the meetings plugin by registering
450
- * the device, connecting to mercury, and listening for locus events.
451
- *
452
- * @returns {Promise}
453
- * @public
454
- * @memberof Meetings
455
- */
456
- register() {
457
- if (!this.webex.canAuthorize) {
458
- LoggerProxy.logger.error('Meetings:index#register --> ERROR, Unable to register, SDK cannot authorize');
459
-
460
- return Promise.reject(new Error('SDK cannot authorize'));
461
- }
462
-
463
-
464
- if (this.registered) {
465
- LoggerProxy.logger.info('Meetings:index#register --> INFO, Meetings plugin already registered');
466
-
467
- return Promise.resolve();
468
- }
469
-
470
- return Promise.all([
471
- this.fetchUserPreferredWebexSite(),
472
- this.getGeoHint(),
473
- this.startReachability().catch((error) => {
474
- LoggerProxy.logger.error(`Meetings:index#register --> GDM error, ${error.message}`);
475
- }),
476
- this.webex.internal.device.register()
477
- .then(() => LoggerProxy.logger.info(`Meetings:index#register --> INFO, Device registered ${this.webex.internal.device.url}`))
478
- .then(() => this.webex.internal.mercury.connect()),
479
- MeetingsUtil.checkH264Support.call(this)
480
- ]).then(() => {
481
- this.listenForEvents();
482
- Trigger.trigger(
483
- this,
484
- {
485
- file: 'meetings',
486
- function: 'register'
487
- },
488
- EVENT_TRIGGERS.MEETINGS_REGISTERED
489
- );
490
- this.registered = true;
491
- Metrics.sendBehavioralMetric(
492
- BEHAVIORAL_METRICS.MEETINGS_REGISTRATION_SUCCESS,
493
- );
494
- })
495
- .catch((error) => {
496
- LoggerProxy.logger.error(`Meetings:index#register --> ERROR, Unable to register, ${error.message}`);
497
-
498
- Metrics.sendBehavioralMetric(
499
- BEHAVIORAL_METRICS.MEETINGS_REGISTRATION_FAILED,
500
- {
501
- reason: error.message,
502
- stack: error.stack
503
- }
504
- );
505
-
506
- return Promise.reject(error);
507
- });
508
- }
509
-
510
- /**
511
- * Explicitly tears down the meetings plugin by deregistering
512
- * the device, disconnecting from mercury, and stops listening to locus events
513
- *
514
- * @returns {Promise}
515
- * @public
516
- * @memberof Meetings
517
- */
518
- unregister() {
519
- if (!this.registered) {
520
- LoggerProxy.logger.info('Meetings:index#unregister --> INFO, Meetings plugin already unregistered');
521
-
522
- return Promise.resolve();
523
- }
524
-
525
- this.stopListeningForEvents();
526
-
527
- return this.webex.internal.mercury.disconnect()
528
- .then(() => this.webex.internal.device.unregister())
529
- .then(() => {
530
- Trigger.trigger(
531
- this,
532
- {
533
- file: 'meetings',
534
- function: 'unregister'
535
- },
536
- EVENT_TRIGGERS.MEETINGS_UNREGISTERED
537
- );
538
- this.registered = false;
539
- });
540
- }
541
-
542
- /**
543
- * Uploads logs to the webex services for tracking
544
- * @param {Object} [options={}]
545
- * @param {String} [options.callStart] Call Start Time
546
- * @param {String} [options.feedbackId] ID used for tracking
547
- * @param {String} [options.locusId]
548
- * @param {String} [options.correlationId]
549
- * @param {String} [options.meetingId] webex meeting ID
550
- * @param {String} [options.userId] userId
551
- * @param {String} [options.orgId] org id
552
- * @returns {String} feedback ID logs were submitted under
553
- */
554
- uploadLogs(options = {}) {
555
- LoggerProxy.logger.info('Meetings:index#uploadLogs --> uploading logs');
556
-
557
- return this.loggerRequest.uploadLogs(options)
558
- .then((uploadResult) => {
559
- LoggerProxy.logger.info('Meetings:index#uploadLogs --> Upload logs for meeting completed.', uploadResult);
560
- Trigger.trigger(
561
- this,
562
- {
563
- file: 'meetings',
564
- function: 'uploadLogs'
565
- },
566
- EVENT_TRIGGERS.MEETING_LOG_UPLOAD_SUCCESS,
567
- {
568
- meetingId: options.meetingId,
569
- details: uploadResult
570
- }
571
- );
572
- })
573
- .catch((uploadError) => {
574
- LoggerProxy.logger.error('Meetings:index#uploadLogs --> Unable to upload logs for meeting', uploadError);
575
- Trigger.trigger(
576
- this,
577
- {
578
- file: 'meetings',
579
- function: 'uploadLogs'
580
- },
581
- EVENT_TRIGGERS.MEETING_LOG_UPLOAD_FAILURE,
582
- {
583
- meetingId: options.meetingId,
584
- reason: uploadError
585
- }
586
- );
587
-
588
- Metrics.sendBehavioralMetric(
589
- BEHAVIORAL_METRICS.UPLOAD_LOGS_FAILURE,
590
- {
591
- meetingId: options.meetingsId,
592
- reason: uploadError.message,
593
- stack: uploadError.stack,
594
- code: uploadError.code
595
- }
596
- );
597
- });
598
- }
599
-
600
- /**
601
- * initializes the reachability instance for Meetings
602
- * @returns {undefined}
603
- * @public
604
- * @memberof Meetings
605
- */
606
- setReachability() {
607
- this.reachability = new Reachability(this.webex);
608
- }
609
-
610
- /**
611
- * gets the reachability instance for Meetings
612
- * @returns {Reachability}
613
- * @public
614
- * @memberof Meetings
615
- */
616
- getReachability() {
617
- return this.reachability;
618
- }
619
-
620
- /**
621
- * initializes and starts gathering reachability for Meetings
622
- * @returns {Promise}
623
- * @public
624
- * @memberof Meetings
625
- */
626
- startReachability() {
627
- if (!this.reachability) {
628
- this.setReachability();
629
- }
630
-
631
- return this.getReachability().gatherReachability();
632
- }
633
-
634
- /**
635
- * Get geoHint for info for meetings
636
- * @returns {Promise}
637
- * @private
638
- * @memberof Meetings
639
- */
640
- getGeoHint() {
641
- return this.request.fetchGeoHint().then((res) => {
642
- this.geoHintInfo = res;
643
- });
644
- }
645
-
646
- /**
647
- * Fetch user preferred webex site information
648
- * This also has other infomation about the user
649
- * @returns {Promise}
650
- * @private
651
- * @memberof Meetings
652
- */
653
- fetchUserPreferredWebexSite() {
654
- return this.request.getMeetingPreferences().then((res) => {
655
- if (res) {
656
- this.preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);
657
- }
658
- });
659
- }
660
-
661
-
662
- /**
663
- * gets the personal meeting room instance, for saved PMR values for this user
664
- * @returns {PersonalMeetingRoom}
665
- * @public
666
- * @memberof Meetings
667
- */
668
-
669
- getPersonalMeetingRoom() {
670
- return this.personalMeetingRoom;
671
- }
672
-
673
- /**
674
- * @param {Meeting} meeting
675
- * @param {Object} reason
676
- * @param {String} type
677
- * @returns {Undefined}
678
- * @private
679
- * @memberof Meetings
680
- */
681
- destroy(meeting, reason) {
682
- MeetingUtil.cleanUp(meeting);
683
- this.meetingCollection.delete(meeting.id);
684
- Trigger.trigger(
685
- this,
686
- {
687
- file: 'meetings',
688
- function: 'destroy'
689
- },
690
- EVENT_TRIGGERS.MEETING_REMOVED,
691
- {
692
- meetingId: meeting.id,
693
- reason
694
- }
695
- );
696
- }
697
-
698
- /**
699
- * Create a meeting.
700
- * @param {string} destination - sipURL, spaceId, phonenumber, or locus object}
701
- * @param {string} [type] - the optional specified type, such as locusId
702
- * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
703
- * @returns {Promise<Meeting>} A new Meeting.
704
- * @public
705
- * @memberof Meetings
706
- */
707
- create(destination, type = null, useRandomDelayForInfo = false) {
708
- // TODO: type should be from a dictionary
709
-
710
- // Validate meeting information based on the provided destination and
711
- // type. This must be performed prior to determining if the meeting is
712
- // found in the collection, as we mutate the destination for hydra person
713
- // id values.
714
- return this.meetingInfo.fetchInfoOptions(destination, type)
715
- // Catch a failure to fetch info options.
716
- .catch((error) => {
717
- LoggerProxy.logger.info(`Meetings:index#create --> INFO, unable to determine info options: ${error.message}`);
718
- })
719
- .then((options = {}) => {
720
- // Normalize the destination.
721
- const targetDest = options.destination || destination;
722
-
723
- // check for the conversation URL then sip Url
724
- let meeting = null;
725
-
726
- if (type === _CONVERSATION_URL_ || options.type === _CONVERSATION_URL_) {
727
- const foundMeeting = this.meetingCollection.getByKey(CONVERSATION_URL, targetDest);
728
-
729
- if (foundMeeting) {
730
- const foundMeetingIsNotCalendarMeeting = !foundMeeting.locusInfo.scheduledMeeting;
731
-
732
- // If the found meeting is not a calendar meeting, return that meeting.
733
- // This allows for the creation of instant-meetings when calendar meetings are present.
734
- if (foundMeetingIsNotCalendarMeeting) {
735
- meeting = foundMeeting;
736
- }
737
- }
738
- }
739
-
740
- // Attempt to collect the meeting if it exists.
741
- if (!meeting) {
742
- meeting = this.meetingCollection.getByKey(SIP_URI, targetDest);
743
- }
744
-
745
- // Validate if a meeting was found.
746
- if (!meeting) {
747
- // Create a meeting based on the normalized destination and type.
748
- return this.createMeeting(targetDest, type, useRandomDelayForInfo)
749
- .then((createdMeeting) => {
750
- // If the meeting was successfully created.
751
- if (createdMeeting && createdMeeting.on) {
752
- // Create a destruction event for the meeting.
753
- createdMeeting.on(EVENTS.DESTROY_MEETING, (payload) => {
754
- if (this.config.autoUploadLogs) {
755
- this.uploadLogs({
756
- callStart: createdMeeting.locusInfo?.fullState?.lastActive,
757
- correlationId: createdMeeting.correlationId,
758
- feedbackId: createdMeeting.correlationId,
759
- locusId: createdMeeting.locusId,
760
- meetingId: createdMeeting.locusInfo?.info?.webExMeetingId
761
- }).then(() => this.destroy(createdMeeting, payload.reason));
762
- }
763
- else {
764
- this.destroy(createdMeeting, payload.reason);
765
- }
766
- });
767
-
768
- createdMeeting.on(EVENTS.REQUEST_UPLOAD_LOGS, (meetingInstance) => {
769
- if (this.config.autoUploadLogs) {
770
- this.uploadLogs({
771
- callStart: meetingInstance?.locusInfo?.fullState?.lastActive,
772
- correlationId: meetingInstance.correlationId,
773
- feedbackId: meetingInstance.correlationId,
774
- locusId: meetingInstance.locusId,
775
- meetingId: meetingInstance.locusInfo?.info?.webExMeetingId
776
- });
777
- }
778
- });
779
- }
780
- else {
781
- LoggerProxy.logger.error(`Meetings:index#create --> ERROR, meeting does not have on method, will not be destroyed, meeting cleanup impossible for meeting: ${meeting}`);
782
- }
783
-
784
- // Return the newly created meeting.
785
- return Promise.resolve(createdMeeting);
786
- });
787
- }
788
-
789
- // Return the existing meeting.
790
- return Promise.resolve(meeting);
791
- });
792
- }
793
-
794
- /**
795
- * @param {String} destination see create()
796
- * @param {String} type see create()
797
- * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
798
- * @returns {Promise} a new meeting instance complete with meeting info and destination
799
- * @private
800
- * @memberof Meetings
801
- */
802
- async createMeeting(destination, type = null, useRandomDelayForInfo = false) {
803
- const meeting = new Meeting(
804
- {
805
- userId: this.webex.internal.device.userId,
806
- deviceUrl: this.webex.internal.device.url,
807
- orgId: this.webex.internal.device.orgId,
808
- roapSeq: 0,
809
- locus: type === _LOCUS_ID_ ? destination : null, // pass the locus object if present
810
- meetingInfoProvider: this.meetingInfo,
811
- destination,
812
- destinationType: type,
813
- },
814
- {
815
- parent: this.webex
816
- }
817
- );
818
-
819
- this.meetingCollection.set(meeting);
820
-
821
- try {
822
- // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,
823
- // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo
824
- // between 5 and 2 min (random between 3 minutes) before the meeting starts
825
- // to avoid a spike in traffic to the wbxappi service
826
- let waitingTime = 0;
827
-
828
- if (destination.meeting) {
829
- const {startTime} = destination.meeting;
830
- const startTimeDate = new Date(startTime);
831
- const startTimeDatestamp = startTimeDate.getTime();
832
- const timeToStart = startTimeDatestamp - Date.now();
833
- const maxWaitingTime = Math.max(Math.min(timeToStart, MAX_RANDOM_DELAY_FOR_MEETING_INFO), 0);
834
-
835
- waitingTime = Math.round(Math.random() * maxWaitingTime);
836
- }
837
- const isMeetingActive = !!destination.fullState?.active;
838
- const {enableUnifiedMeetings} = this.config.experimental;
839
-
840
- if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {
841
- meeting.fetchMeetingInfoTimeoutId = setTimeout(() => meeting.fetchMeetingInfo({}), waitingTime);
842
- meeting.parseMeetingInfo(undefined, destination);
843
- }
844
- else {
845
- await meeting.fetchMeetingInfo({});
846
- }
847
- }
848
- catch (err) {
849
- if (!(err instanceof CaptchaError) && !(err instanceof PasswordError)) {
850
- // if there is no meeting info we assume its a 1:1 call or wireless share
851
- LoggerProxy.logger.info(`Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`);
852
- LoggerProxy.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
853
- }
854
- LoggerProxy.logger.debug(`Meetings:index#createMeeting --> Debug ${err} fetching /meetingInfo for creation.`);
855
- }
856
- finally {
857
- // For type LOCUS_ID we need to parse the locus object to get the information
858
- // about the caller and callee
859
- // Meeting Added event will be created in `handleLocusEvent`
860
- if (type !== _LOCUS_ID_) {
861
- if (!meeting.sipUri) {
862
- meeting.setSipUri(destination);
863
- }
864
-
865
- // TODO: check if we have to move this to parser
866
- const meetingAddedType = MeetingsUtil.getMeetingAddedType(type);
867
-
868
- // We typically shouldn't need to trigger both and event and return a promise.
869
- // Is this a special case? We want to make the public API usage as simple as possible.
870
- Trigger.trigger(
871
- this,
872
- {
873
- file: 'meetings',
874
- function: 'createMeeting'
875
- },
876
- EVENT_TRIGGERS.MEETING_ADDED,
877
- {
878
- meeting,
879
- type: meetingAddedType
880
- }
881
- );
882
- }
883
- }
884
-
885
- return meeting;
886
-
887
- // Create the meeting calling the necessary service endpoints.
888
-
889
- // Internally, there are many more destinations:
890
- //
891
- // - locusID
892
- // - meetingURL
893
- // - globalMeetingID, e.g, *00*meetingID
894
- // - meetingID
895
- // - meetingURL
896
- // - PSTN
897
- // - phone number
898
- //
899
- // Our job is to determine the appropriate one
900
- // and its corresponding service so that developers
901
- // need only sipURL or spaceID to get a meeting
902
- // and its ID, but have the option to use createWithType()
903
- // and specify those types to get meetingInfo
904
- }
905
-
906
- /**
907
- * get a specifc meeting given it's type matched to the value, i.e., locus url
908
- * @param {String} type
909
- * @param {Object} value
910
- * @returns {Meeting}
911
- * @public
912
- * @memberof Meetings
913
- */
914
- getMeetingByType(type, value) {
915
- return this.meetingCollection.getByKey(type, value);
916
- }
917
-
918
- /**
919
- * Get all meetings.
920
- * @param {object} options
921
- * @param {object} options.startDate - get meetings after this start date
922
- * @param {object} options.endDate - get meetings before this end date
923
- * @returns {Object} All currently active meetings.
924
- * @public
925
- * @memberof Meetings
926
- */
927
- getAllMeetings(options = {}) {
928
- // Options may include other parameters to filter this collection
929
- // of meetings.
930
- return this.meetingCollection.getAll(options);
931
- }
932
-
933
- /**
934
- * syncs all the meeting from server
935
- * @returns {undefined}
936
- * @public
937
- * @memberof Meetings
938
- */
939
- syncMeetings() {
940
- return this.request.getActiveMeetings().then((locusArray) => {
941
- const activeLocusUrl = [];
942
-
943
- if (locusArray?.loci && locusArray.loci.length > 0) {
944
- locusArray.loci.forEach((locus) => {
945
- activeLocusUrl.push(locus.url);
946
- this.handleLocusEvent({
947
- locus,
948
- locusUrl: locus.url
949
- });
950
- });
951
- }
952
- const meetingsCollection = this.meetingCollection.getAll();
953
-
954
- if (Object.keys(meetingsCollection).length > 0) {
955
- // Some time the mercury event is missed after mercury reconnect
956
- // if sync returns no locus then clear all the meetings
957
- for (const meeting of Object.values(meetingsCollection)) {
958
- if (!activeLocusUrl.includes(meeting.locusUrl)) {
959
- // destroy function also uploads logs
960
- this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
961
- }
962
- }
963
- }
964
- });
965
- }
966
-
967
- /**
968
- * Get all scheduled meetings.
969
- * @param {object} options
970
- * @param {object} options.startDate - get meetings after this start date
971
- * @param {object} options.endDate - get meetings before this end date
972
- * @returns {Object} All scheduled meetings.
973
- * @memberof Meetings
974
- */
975
- getScheduledMeetings() {
976
- return this.meetingCollection.getAll({scheduled: true});
977
- }
978
-
979
- /**
980
- * Get the logger instance for plugin-meetings
981
- * @returns {Logger}
982
- */
983
- getLogger() {
984
- return LoggerProxy.get();
985
- }
986
- }