@webex/plugin-meetings 3.0.0-beta.7 → 3.0.0-beta.71

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 (506) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +178 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/edit-lock-error.js +52 -0
  8. package/dist/breakouts/edit-lock-error.js.map +1 -0
  9. package/dist/breakouts/index.js +843 -0
  10. package/dist/breakouts/index.js.map +1 -0
  11. package/dist/breakouts/request.js +78 -0
  12. package/dist/breakouts/request.js.map +1 -0
  13. package/dist/breakouts/utils.js +56 -0
  14. package/dist/breakouts/utils.js.map +1 -0
  15. package/dist/common/browser-detection.js +1 -20
  16. package/dist/common/browser-detection.js.map +1 -1
  17. package/dist/common/collection.js +5 -20
  18. package/dist/common/collection.js.map +1 -1
  19. package/dist/common/config.js +0 -7
  20. package/dist/common/config.js.map +1 -1
  21. package/dist/common/errors/captcha-error.js +10 -24
  22. package/dist/common/errors/captcha-error.js.map +1 -1
  23. package/dist/common/errors/intent-to-join.js +11 -24
  24. package/dist/common/errors/intent-to-join.js.map +1 -1
  25. package/dist/common/errors/join-meeting.js +12 -25
  26. package/dist/common/errors/join-meeting.js.map +1 -1
  27. package/dist/common/errors/media.js +10 -24
  28. package/dist/common/errors/media.js.map +1 -1
  29. package/dist/common/errors/parameter.js +5 -33
  30. package/dist/common/errors/parameter.js.map +1 -1
  31. package/dist/common/errors/password-error.js +10 -24
  32. package/dist/common/errors/password-error.js.map +1 -1
  33. package/dist/common/errors/permission.js +9 -23
  34. package/dist/common/errors/permission.js.map +1 -1
  35. package/dist/common/errors/reconnection-in-progress.js +0 -17
  36. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  37. package/dist/common/errors/reconnection.js +10 -24
  38. package/dist/common/errors/reconnection.js.map +1 -1
  39. package/dist/common/errors/stats.js +10 -24
  40. package/dist/common/errors/stats.js.map +1 -1
  41. package/dist/common/errors/webex-errors.js +6 -41
  42. package/dist/common/errors/webex-errors.js.map +1 -1
  43. package/dist/common/errors/webex-meetings-error.js +5 -25
  44. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  45. package/dist/common/events/events-scope.js +0 -22
  46. package/dist/common/events/events-scope.js.map +1 -1
  47. package/dist/common/events/events.js +0 -23
  48. package/dist/common/events/events.js.map +1 -1
  49. package/dist/common/events/trigger-proxy.js +0 -12
  50. package/dist/common/events/trigger-proxy.js.map +1 -1
  51. package/dist/common/events/util.js +0 -15
  52. package/dist/common/events/util.js.map +1 -1
  53. package/dist/common/logs/logger-config.js +0 -4
  54. package/dist/common/logs/logger-config.js.map +1 -1
  55. package/dist/common/logs/logger-proxy.js +1 -8
  56. package/dist/common/logs/logger-proxy.js.map +1 -1
  57. package/dist/common/logs/request.js +37 -60
  58. package/dist/common/logs/request.js.map +1 -1
  59. package/dist/common/queue.js +4 -14
  60. package/dist/common/queue.js.map +1 -1
  61. package/dist/config.js +6 -6
  62. package/dist/config.js.map +1 -1
  63. package/dist/constants.js +143 -52
  64. package/dist/constants.js.map +1 -1
  65. package/dist/controls-options-manager/constants.js +14 -0
  66. package/dist/controls-options-manager/constants.js.map +1 -0
  67. package/dist/controls-options-manager/enums.js +16 -0
  68. package/dist/controls-options-manager/enums.js.map +1 -0
  69. package/dist/controls-options-manager/index.js +261 -0
  70. package/dist/controls-options-manager/index.js.map +1 -0
  71. package/dist/controls-options-manager/util.js +39 -0
  72. package/dist/controls-options-manager/util.js.map +1 -0
  73. package/dist/index.js +11 -18
  74. package/dist/index.js.map +1 -1
  75. package/dist/locus-info/controlsUtils.js +31 -29
  76. package/dist/locus-info/controlsUtils.js.map +1 -1
  77. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  78. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  79. package/dist/locus-info/fullState.js +0 -15
  80. package/dist/locus-info/fullState.js.map +1 -1
  81. package/dist/locus-info/hostUtils.js +4 -12
  82. package/dist/locus-info/hostUtils.js.map +1 -1
  83. package/dist/locus-info/index.js +237 -198
  84. package/dist/locus-info/index.js.map +1 -1
  85. package/dist/locus-info/infoUtils.js +3 -37
  86. package/dist/locus-info/infoUtils.js.map +1 -1
  87. package/dist/locus-info/mediaSharesUtils.js +12 -38
  88. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  89. package/dist/locus-info/parser.js +92 -118
  90. package/dist/locus-info/parser.js.map +1 -1
  91. package/dist/locus-info/selfUtils.js +80 -89
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.js +56 -146
  94. package/dist/media/index.js.map +1 -1
  95. package/dist/media/properties.js +83 -117
  96. package/dist/media/properties.js.map +1 -1
  97. package/dist/media/util.js +2 -9
  98. package/dist/media/util.js.map +1 -1
  99. package/dist/mediaQualityMetrics/config.js +505 -495
  100. package/dist/mediaQualityMetrics/config.js.map +1 -1
  101. package/dist/meeting/in-meeting-actions.js +31 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2225 -2244
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +102 -100
  106. package/dist/meeting/muteState.js.map +1 -1
  107. package/dist/meeting/request.js +308 -264
  108. package/dist/meeting/request.js.map +1 -1
  109. package/dist/meeting/request.type.js +7 -0
  110. package/dist/meeting/request.type.js.map +1 -0
  111. package/dist/meeting/state.js +21 -31
  112. package/dist/meeting/state.js.map +1 -1
  113. package/dist/meeting/util.js +63 -217
  114. package/dist/meeting/util.js.map +1 -1
  115. package/dist/meeting-info/collection.js +6 -25
  116. package/dist/meeting-info/collection.js.map +1 -1
  117. package/dist/meeting-info/index.js +14 -32
  118. package/dist/meeting-info/index.js.map +1 -1
  119. package/dist/meeting-info/meeting-info-v2.js +193 -268
  120. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  121. package/dist/meeting-info/request.js +3 -15
  122. package/dist/meeting-info/request.js.map +1 -1
  123. package/dist/meeting-info/util.js +98 -183
  124. package/dist/meeting-info/util.js.map +1 -1
  125. package/dist/meeting-info/utilv2.js +137 -228
  126. package/dist/meeting-info/utilv2.js.map +1 -1
  127. package/dist/meetings/collection.js +26 -19
  128. package/dist/meetings/collection.js.map +1 -1
  129. package/dist/meetings/index.js +565 -552
  130. package/dist/meetings/index.js.map +1 -1
  131. package/dist/meetings/request.js +26 -41
  132. package/dist/meetings/request.js.map +1 -1
  133. package/dist/meetings/util.js +151 -155
  134. package/dist/meetings/util.js.map +1 -1
  135. package/dist/member/index.js +100 -85
  136. package/dist/member/index.js.map +1 -1
  137. package/dist/member/types.js +15 -0
  138. package/dist/member/types.js.map +1 -0
  139. package/dist/member/util.js +90 -68
  140. package/dist/member/util.js.map +1 -1
  141. package/dist/members/collection.js +13 -12
  142. package/dist/members/collection.js.map +1 -1
  143. package/dist/members/index.js +152 -204
  144. package/dist/members/index.js.map +1 -1
  145. package/dist/members/request.js +35 -39
  146. package/dist/members/request.js.map +1 -1
  147. package/dist/members/types.js +15 -0
  148. package/dist/members/types.js.map +1 -0
  149. package/dist/members/util.js +76 -46
  150. package/dist/members/util.js.map +1 -1
  151. package/dist/metrics/config.js +4 -14
  152. package/dist/metrics/config.js.map +1 -1
  153. package/dist/metrics/constants.js +1 -6
  154. package/dist/metrics/constants.js.map +1 -1
  155. package/dist/metrics/index.js +59 -156
  156. package/dist/metrics/index.js.map +1 -1
  157. package/dist/multistream/mediaRequestManager.js +116 -52
  158. package/dist/multistream/mediaRequestManager.js.map +1 -1
  159. package/dist/multistream/receiveSlot.js +58 -65
  160. package/dist/multistream/receiveSlot.js.map +1 -1
  161. package/dist/multistream/receiveSlotManager.js +58 -93
  162. package/dist/multistream/receiveSlotManager.js.map +1 -1
  163. package/dist/multistream/remoteMedia.js +55 -74
  164. package/dist/multistream/remoteMedia.js.map +1 -1
  165. package/dist/multistream/remoteMediaGroup.js +6 -40
  166. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  167. package/dist/multistream/remoteMediaManager.js +466 -442
  168. package/dist/multistream/remoteMediaManager.js.map +1 -1
  169. package/dist/networkQualityMonitor/index.js +40 -59
  170. package/dist/networkQualityMonitor/index.js.map +1 -1
  171. package/dist/personal-meeting-room/index.js +21 -45
  172. package/dist/personal-meeting-room/index.js.map +1 -1
  173. package/dist/personal-meeting-room/request.js +1 -31
  174. package/dist/personal-meeting-room/request.js.map +1 -1
  175. package/dist/personal-meeting-room/util.js +0 -13
  176. package/dist/personal-meeting-room/util.js.map +1 -1
  177. package/dist/reachability/index.js +192 -191
  178. package/dist/reachability/index.js.map +1 -1
  179. package/dist/reachability/request.js +15 -23
  180. package/dist/reachability/request.js.map +1 -1
  181. package/dist/reactions/constants.js +13 -0
  182. package/dist/reactions/constants.js.map +1 -0
  183. package/dist/reactions/reactions.js +109 -0
  184. package/dist/reactions/reactions.js.map +1 -0
  185. package/dist/reactions/reactions.type.js +36 -0
  186. package/dist/reactions/reactions.type.js.map +1 -0
  187. package/dist/reconnection-manager/index.js +342 -460
  188. package/dist/reconnection-manager/index.js.map +1 -1
  189. package/dist/recording-controller/enums.js +17 -0
  190. package/dist/recording-controller/enums.js.map +1 -0
  191. package/dist/recording-controller/index.js +343 -0
  192. package/dist/recording-controller/index.js.map +1 -0
  193. package/dist/recording-controller/util.js +63 -0
  194. package/dist/recording-controller/util.js.map +1 -0
  195. package/dist/roap/index.js +48 -70
  196. package/dist/roap/index.js.map +1 -1
  197. package/dist/roap/request.js +143 -131
  198. package/dist/roap/request.js.map +1 -1
  199. package/dist/roap/turnDiscovery.js +91 -98
  200. package/dist/roap/turnDiscovery.js.map +1 -1
  201. package/dist/statsAnalyzer/global.js +1 -95
  202. package/dist/statsAnalyzer/global.js.map +1 -1
  203. package/dist/statsAnalyzer/index.js +372 -455
  204. package/dist/statsAnalyzer/index.js.map +1 -1
  205. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  206. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  207. package/dist/transcription/index.js +22 -47
  208. package/dist/transcription/index.js.map +1 -1
  209. package/dist/types/breakouts/breakout.d.ts +8 -0
  210. package/dist/types/breakouts/collection.d.ts +5 -0
  211. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  212. package/dist/types/breakouts/index.d.ts +5 -0
  213. package/dist/types/breakouts/request.d.ts +22 -0
  214. package/dist/types/breakouts/utils.d.ts +8 -0
  215. package/dist/types/common/browser-detection.d.ts +9 -0
  216. package/dist/types/common/collection.d.ts +48 -0
  217. package/dist/types/common/config.d.ts +2 -0
  218. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  219. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  220. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  221. package/dist/types/common/errors/media.d.ts +15 -0
  222. package/dist/types/common/errors/parameter.d.ts +15 -0
  223. package/dist/types/common/errors/password-error.d.ts +15 -0
  224. package/dist/types/common/errors/permission.d.ts +14 -0
  225. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  226. package/dist/types/common/errors/reconnection.d.ts +15 -0
  227. package/dist/types/common/errors/stats.d.ts +15 -0
  228. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  229. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  230. package/dist/types/common/events/events-scope.d.ts +17 -0
  231. package/dist/types/common/events/events.d.ts +12 -0
  232. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  233. package/dist/types/common/events/util.d.ts +2 -0
  234. package/dist/types/common/logs/logger-config.d.ts +2 -0
  235. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  236. package/dist/types/common/logs/request.d.ts +34 -0
  237. package/dist/types/common/queue.d.ts +32 -0
  238. package/dist/types/config.d.ts +77 -0
  239. package/dist/types/constants.d.ts +944 -0
  240. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  241. package/dist/types/controls-options-manager/enums.d.ts +6 -0
  242. package/dist/types/controls-options-manager/index.d.ts +128 -0
  243. package/dist/types/controls-options-manager/util.d.ts +9 -0
  244. package/dist/types/index.d.ts +6 -0
  245. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  246. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  247. package/dist/types/locus-info/fullState.d.ts +2 -0
  248. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  249. package/dist/types/locus-info/index.d.ts +276 -0
  250. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  251. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  252. package/dist/types/locus-info/parser.d.ts +212 -0
  253. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  254. package/dist/types/media/index.d.ts +32 -0
  255. package/dist/types/media/properties.d.ts +108 -0
  256. package/dist/types/media/util.d.ts +2 -0
  257. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  258. package/dist/types/meeting/in-meeting-actions.d.ts +101 -0
  259. package/dist/types/meeting/index.d.ts +1720 -0
  260. package/dist/types/meeting/muteState.d.ts +132 -0
  261. package/dist/types/meeting/request.d.ts +271 -0
  262. package/dist/types/meeting/request.type.d.ts +11 -0
  263. package/dist/types/meeting/state.d.ts +9 -0
  264. package/dist/types/meeting/util.d.ts +2 -0
  265. package/dist/types/meeting-info/collection.d.ts +20 -0
  266. package/dist/types/meeting-info/index.d.ts +57 -0
  267. package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
  268. package/dist/types/meeting-info/request.d.ts +22 -0
  269. package/dist/types/meeting-info/util.d.ts +2 -0
  270. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  271. package/dist/types/meetings/collection.d.ts +31 -0
  272. package/dist/types/meetings/index.d.ts +315 -0
  273. package/dist/types/meetings/request.d.ts +27 -0
  274. package/dist/types/meetings/util.d.ts +18 -0
  275. package/dist/types/member/index.d.ts +156 -0
  276. package/dist/types/member/types.d.ts +21 -0
  277. package/dist/types/member/util.d.ts +2 -0
  278. package/dist/types/members/collection.d.ts +29 -0
  279. package/dist/types/members/index.d.ts +343 -0
  280. package/dist/types/members/request.d.ts +58 -0
  281. package/dist/types/members/types.d.ts +24 -0
  282. package/dist/types/members/util.d.ts +2 -0
  283. package/dist/types/metrics/config.d.ts +171 -0
  284. package/dist/types/metrics/constants.d.ts +53 -0
  285. package/dist/types/metrics/index.d.ts +152 -0
  286. package/dist/types/multistream/mediaRequestManager.d.ts +68 -0
  287. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  288. package/dist/types/multistream/receiveSlotManager.d.ts +49 -0
  289. package/dist/types/multistream/remoteMedia.d.ts +100 -0
  290. package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
  291. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  292. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  293. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  294. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  295. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  296. package/dist/types/reachability/index.d.ts +152 -0
  297. package/dist/types/reachability/request.d.ts +37 -0
  298. package/dist/types/reactions/constants.d.ts +3 -0
  299. package/dist/types/reactions/reactions.d.ts +4 -0
  300. package/dist/types/reactions/reactions.type.d.ts +52 -0
  301. package/dist/types/reconnection-manager/index.d.ts +126 -0
  302. package/dist/types/recording-controller/enums.d.ts +7 -0
  303. package/dist/types/recording-controller/index.d.ts +193 -0
  304. package/dist/types/recording-controller/util.d.ts +13 -0
  305. package/dist/types/roap/index.d.ts +77 -0
  306. package/dist/types/roap/request.d.ts +38 -0
  307. package/dist/types/roap/turnDiscovery.d.ts +74 -0
  308. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  309. package/dist/types/statsAnalyzer/index.d.ts +195 -0
  310. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  311. package/dist/types/transcription/index.d.ts +64 -0
  312. package/internal-README.md +7 -6
  313. package/package.json +27 -21
  314. package/src/breakouts/README.md +219 -0
  315. package/src/breakouts/breakout.ts +153 -0
  316. package/src/breakouts/collection.ts +19 -0
  317. package/src/breakouts/edit-lock-error.ts +25 -0
  318. package/src/breakouts/index.ts +745 -0
  319. package/src/breakouts/request.ts +55 -0
  320. package/src/breakouts/utils.ts +44 -0
  321. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  322. package/src/common/collection.ts +9 -7
  323. package/src/common/{config.js → config.ts} +1 -1
  324. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  325. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  326. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  327. package/src/common/errors/{media.js → media.ts} +11 -7
  328. package/src/common/errors/parameter.ts +11 -7
  329. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  330. package/src/common/errors/{permission.js → permission.ts} +10 -6
  331. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  332. package/src/common/errors/{stats.js → stats.ts} +11 -7
  333. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  334. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  335. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  336. package/src/common/events/{events.js → events.ts} +5 -1
  337. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  338. package/src/common/events/{util.js → util.ts} +2 -3
  339. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  340. package/src/common/logs/logger-proxy.ts +44 -0
  341. package/src/common/logs/{request.js → request.ts} +22 -9
  342. package/src/common/queue.ts +1 -2
  343. package/src/{config.js → config.ts} +17 -12
  344. package/src/constants.ts +92 -5
  345. package/src/controls-options-manager/constants.ts +5 -0
  346. package/src/controls-options-manager/enums.ts +7 -0
  347. package/src/controls-options-manager/index.ts +240 -0
  348. package/src/controls-options-manager/util.ts +30 -0
  349. package/src/index.js +4 -1
  350. package/src/locus-info/controlsUtils.ts +141 -0
  351. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  352. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  353. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  354. package/src/locus-info/{index.js → index.ts} +211 -71
  355. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  356. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  357. package/src/locus-info/{parser.js → parser.ts} +67 -79
  358. package/src/locus-info/{selfUtils.js → selfUtils.ts} +183 -67
  359. package/src/media/{index.js → index.ts} +179 -176
  360. package/src/media/{properties.js → properties.ts} +60 -37
  361. package/src/media/{util.js → util.ts} +2 -2
  362. package/src/mediaQualityMetrics/config.ts +384 -0
  363. package/src/meeting/in-meeting-actions.ts +67 -3
  364. package/src/meeting/{index.js → index.ts} +2605 -1605
  365. package/src/meeting/{muteState.js → muteState.ts} +138 -73
  366. package/src/meeting/{request.js → request.ts} +326 -142
  367. package/src/meeting/request.type.ts +13 -0
  368. package/src/meeting/{state.js → state.ts} +50 -35
  369. package/src/meeting/{util.js → util.ts} +131 -115
  370. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  371. package/src/meeting-info/{index.js → index.ts} +42 -36
  372. package/src/meeting-info/meeting-info-v2.ts +273 -0
  373. package/src/meeting-info/{request.js → request.ts} +14 -4
  374. package/src/meeting-info/{util.js → util.ts} +60 -51
  375. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  376. package/src/meetings/{collection.js → collection.ts} +26 -3
  377. package/src/meetings/index.ts +1275 -0
  378. package/src/meetings/{request.js → request.ts} +34 -25
  379. package/src/meetings/{util.js → util.ts} +99 -33
  380. package/src/member/{index.js → index.ts} +124 -56
  381. package/src/member/types.ts +24 -0
  382. package/src/member/{util.js → util.ts} +105 -25
  383. package/src/members/{collection.js → collection.ts} +10 -2
  384. package/src/members/{index.js → index.ts} +281 -144
  385. package/src/members/{request.js → request.ts} +80 -16
  386. package/src/members/types.ts +28 -0
  387. package/src/members/{util.js → util.ts} +108 -55
  388. package/src/metrics/{config.js → config.ts} +255 -92
  389. package/src/metrics/{constants.js → constants.ts} +0 -6
  390. package/src/metrics/{index.js → index.ts} +110 -94
  391. package/src/multistream/mediaRequestManager.ts +144 -40
  392. package/src/multistream/receiveSlot.ts +69 -26
  393. package/src/multistream/receiveSlotManager.ts +50 -38
  394. package/src/multistream/remoteMedia.ts +30 -4
  395. package/src/multistream/remoteMediaGroup.ts +4 -3
  396. package/src/multistream/remoteMediaManager.ts +230 -66
  397. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  398. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  399. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  400. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  401. package/src/reachability/{index.js → index.ts} +157 -94
  402. package/src/reachability/request.ts +46 -35
  403. package/src/reactions/constants.ts +4 -0
  404. package/src/reactions/reactions.ts +104 -0
  405. package/src/reactions/reactions.type.ts +62 -0
  406. package/src/reconnection-manager/{index.js → index.ts} +228 -120
  407. package/src/recording-controller/enums.ts +8 -0
  408. package/src/recording-controller/index.ts +315 -0
  409. package/src/recording-controller/util.ts +58 -0
  410. package/src/roap/{index.js → index.ts} +77 -60
  411. package/src/roap/request.ts +172 -0
  412. package/src/roap/turnDiscovery.ts +81 -41
  413. package/src/statsAnalyzer/global.ts +37 -0
  414. package/src/statsAnalyzer/index.ts +1242 -0
  415. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  416. package/src/transcription/{index.js → index.ts} +46 -39
  417. package/test/integration/spec/converged-space-meetings.js +176 -0
  418. package/test/integration/spec/journey.js +665 -464
  419. package/test/integration/spec/space-meeting.js +320 -206
  420. package/test/integration/spec/transcription.js +7 -8
  421. package/test/unit/spec/breakouts/breakout.ts +178 -0
  422. package/test/unit/spec/breakouts/collection.ts +15 -0
  423. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  424. package/test/unit/spec/breakouts/index.ts +1252 -0
  425. package/test/unit/spec/breakouts/request.ts +104 -0
  426. package/test/unit/spec/breakouts/utils.js +54 -0
  427. package/test/unit/spec/common/browser-detection.js +9 -28
  428. package/test/unit/spec/controls-options-manager/index.js +204 -0
  429. package/test/unit/spec/controls-options-manager/util.js +86 -0
  430. package/test/unit/spec/fixture/locus.js +92 -90
  431. package/test/unit/spec/locus-info/controlsUtils.js +133 -34
  432. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  433. package/test/unit/spec/locus-info/index.js +303 -2
  434. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  435. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  436. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  437. package/test/unit/spec/locus-info/parser.js +3 -9
  438. package/test/unit/spec/locus-info/selfConstant.js +101 -103
  439. package/test/unit/spec/locus-info/selfUtils.js +165 -12
  440. package/test/unit/spec/media/index.ts +72 -8
  441. package/test/unit/spec/media/properties.ts +9 -9
  442. package/test/unit/spec/meeting/in-meeting-actions.ts +29 -2
  443. package/test/unit/spec/meeting/index.js +2503 -802
  444. package/test/unit/spec/meeting/muteState.js +146 -61
  445. package/test/unit/spec/meeting/request.js +141 -43
  446. package/test/unit/spec/meeting/utils.js +135 -164
  447. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  448. package/test/unit/spec/meeting-info/request.js +7 -9
  449. package/test/unit/spec/meeting-info/util.js +11 -12
  450. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  451. package/test/unit/spec/meetings/collection.js +15 -1
  452. package/test/unit/spec/meetings/index.js +622 -263
  453. package/test/unit/spec/meetings/utils.js +65 -14
  454. package/test/unit/spec/member/index.js +24 -1
  455. package/test/unit/spec/member/util.js +359 -32
  456. package/test/unit/spec/members/index.js +294 -54
  457. package/test/unit/spec/members/request.js +50 -20
  458. package/test/unit/spec/members/utils.js +147 -4
  459. package/test/unit/spec/metrics/index.js +16 -21
  460. package/test/unit/spec/multistream/mediaRequestManager.ts +369 -68
  461. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  462. package/test/unit/spec/multistream/receiveSlotManager.ts +60 -38
  463. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  464. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  465. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  466. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  467. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  468. package/test/unit/spec/reachability/index.ts +176 -27
  469. package/test/unit/spec/reachability/request.js +66 -0
  470. package/test/unit/spec/reconnection-manager/index.js +58 -30
  471. package/test/unit/spec/recording-controller/index.js +231 -0
  472. package/test/unit/spec/recording-controller/util.js +102 -0
  473. package/test/unit/spec/roap/index.ts +12 -8
  474. package/test/unit/spec/roap/request.ts +217 -0
  475. package/test/unit/spec/roap/turnDiscovery.ts +72 -49
  476. package/test/unit/spec/stats-analyzer/index.js +108 -57
  477. package/test/utils/cmr.js +44 -42
  478. package/test/utils/constants.js +9 -0
  479. package/test/utils/testUtils.js +98 -77
  480. package/test/utils/webex-config.js +22 -18
  481. package/test/utils/webex-test-users.js +57 -50
  482. package/tsconfig.json +6 -0
  483. package/dist/media/internal-media-core-wrapper.js +0 -22
  484. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  485. package/dist/meeting/effectsState.js +0 -327
  486. package/dist/meeting/effectsState.js.map +0 -1
  487. package/dist/multistream/multistreamMedia.js +0 -116
  488. package/dist/multistream/multistreamMedia.js.map +0 -1
  489. package/dist/peer-connection-manager/util.js +0 -124
  490. package/dist/peer-connection-manager/util.js.map +0 -1
  491. package/src/common/logs/logger-proxy.js +0 -33
  492. package/src/locus-info/controlsUtils.js +0 -102
  493. package/src/media/internal-media-core-wrapper.ts +0 -9
  494. package/src/mediaQualityMetrics/config.js +0 -382
  495. package/src/meeting/effectsState.js +0 -205
  496. package/src/meeting-info/meeting-info-v2.js +0 -255
  497. package/src/meetings/index.js +0 -1015
  498. package/src/multistream/multistreamMedia.ts +0 -92
  499. package/src/peer-connection-manager/util.ts +0 -117
  500. package/src/roap/request.js +0 -127
  501. package/src/statsAnalyzer/global.js +0 -133
  502. package/src/statsAnalyzer/index.js +0 -1006
  503. package/src/statsAnalyzer/mqaUtil.js +0 -173
  504. package/test/unit/spec/meeting/effectsState.js +0 -291
  505. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  506. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -13,7 +13,7 @@ import {
13
13
  SHARE_STOPPED_REASON,
14
14
  _CALL_,
15
15
  _LEFT_,
16
- _ID_
16
+ _ID_,
17
17
  } from '../constants';
18
18
  import BEHAVIORAL_METRICS from '../metrics/constants';
19
19
  import ReconnectionError from '../common/errors/reconnection';
@@ -21,6 +21,7 @@ import ReconnectInProgress from '../common/errors/reconnection-in-progress';
21
21
  import {eventType, reconnection, errorObjects} from '../metrics/config';
22
22
  import Media from '../media';
23
23
  import Metrics from '../metrics';
24
+ import Meeting from '../meeting';
24
25
 
25
26
  /**
26
27
  * Used to indicate that the reconnect logic needs to be retried.
@@ -37,6 +38,8 @@ class NeedsRetryError extends Error {}
37
38
  * @extends {Error}
38
39
  */
39
40
  class NeedsRejoinError extends Error {
41
+ wasSharing: any;
42
+
40
43
  /**
41
44
  * Creates an instance of NeedsRejoinError.
42
45
  * @param {Object} params
@@ -44,7 +47,14 @@ class NeedsRejoinError extends Error {
44
47
  * @param {Error} params.error
45
48
  * @memberof NeedsRejoinError
46
49
  */
47
- constructor({wasSharing, error = new Error('Meeting needs to be rejoined')}) {
50
+ constructor({
51
+ wasSharing,
52
+ error = new Error('Meeting needs to be rejoined'),
53
+ }: {
54
+ wasSharing?: boolean;
55
+ error?: Error;
56
+ }) {
57
+ // @ts-ignore
48
58
  super(error);
49
59
 
50
60
  this.wasSharing = wasSharing;
@@ -54,12 +64,21 @@ class NeedsRejoinError extends Error {
54
64
  /**
55
65
  * @export
56
66
  * @class ReconnectionManager
57
- */
67
+ */
58
68
  export default class ReconnectionManager {
69
+ autoRejoinEnabled: any;
70
+ iceState: any;
71
+ maxRejoinAttempts: any;
72
+ meeting: any;
73
+ rejoinAttempts: any;
74
+ shareStatus: any;
75
+ status: any;
76
+ tryCount: any;
77
+ webex: any;
59
78
  /**
60
79
  * @param {Meeting} meeting
61
80
  */
62
- constructor(meeting) {
81
+ constructor(meeting: Meeting) {
63
82
  /**
64
83
  * Stores ICE reconnection state data.
65
84
  *
@@ -72,7 +91,8 @@ export default class ReconnectionManager {
72
91
  disconnected: false,
73
92
  resolve: () => {},
74
93
  timer: undefined,
75
- timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout
94
+ // @ts-ignore
95
+ timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,
76
96
  };
77
97
 
78
98
  /**
@@ -80,23 +100,24 @@ export default class ReconnectionManager {
80
100
  * @type {String}
81
101
  * @private
82
102
  * @memberof ReconnectionManager
83
- */
103
+ */
84
104
  this.status = RECONNECTION.STATE.DEFAULT_STATUS;
85
105
  /**
86
106
  * @instance
87
107
  * @type {Number}
88
108
  * @private
89
109
  * @memberof ReconnectionManager
90
- */
110
+ */
91
111
  this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;
92
112
  /**
93
113
  * @instance
94
114
  * @type {Object}
95
115
  * @private
96
116
  * @memberof ReconnectionManager
97
- */
117
+ */
98
118
  // TODO : change this logic to not save the meeting instance
99
119
  // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date
120
+ // @ts-ignore
100
121
  this.webex = meeting.webex;
101
122
  /**
102
123
  * @instance
@@ -108,11 +129,12 @@ export default class ReconnectionManager {
108
129
  // try moving this to meetings collection
109
130
  this.meeting = meeting;
110
131
 
132
+ // @ts-ignore
111
133
  this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;
112
134
  this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;
135
+ // @ts-ignore
113
136
  this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;
114
137
 
115
-
116
138
  // Make sure reconnection state is in default
117
139
  this.reset();
118
140
  }
@@ -140,7 +162,7 @@ export default class ReconnectionManager {
140
162
  * @public
141
163
  * @memberof ReconnectionManager
142
164
  */
143
- iceReconnected() {
165
+ public iceReconnected() {
144
166
  if (this.iceState.disconnected) {
145
167
  LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');
146
168
 
@@ -160,20 +182,23 @@ export default class ReconnectionManager {
160
182
  * @public
161
183
  * @memberof ReconnectionManager
162
184
  */
163
- waitForIceReconnect() {
185
+ public waitForIceReconnect() {
164
186
  if (!this.iceState.disconnected) {
165
- LoggerProxy.logger.log('ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect');
187
+ LoggerProxy.logger.log(
188
+ 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'
189
+ );
166
190
 
167
191
  this.iceState.disconnected = true;
168
192
 
169
- return new Promise((resolve, reject) => {
193
+ return new Promise<void>((resolve, reject) => {
170
194
  this.iceState.timer = setTimeout(() => {
171
195
  if (this.iceState.disconnected === false) {
172
196
  resolve();
173
- }
174
- else {
197
+ } else {
175
198
  this.iceState.disconnected = false;
176
- reject(new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`));
199
+ reject(
200
+ new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)
201
+ );
177
202
  }
178
203
  }, this.iceState.timeoutDuration);
179
204
 
@@ -190,7 +215,7 @@ export default class ReconnectionManager {
190
215
  * @public
191
216
  * @memberof ReconnectionManager
192
217
  */
193
- reset() {
218
+ public reset() {
194
219
  this.status = RECONNECTION.STATE.DEFAULT_STATUS;
195
220
  this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;
196
221
  this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;
@@ -201,11 +226,38 @@ export default class ReconnectionManager {
201
226
  * @public
202
227
  * @memberof ReconnectionManager
203
228
  */
204
- cleanUp() {
229
+ public cleanUp() {
205
230
  this.reset();
206
231
  this.meeting = null;
207
232
  }
208
233
 
234
+ /**
235
+ * Stop the local share track.
236
+ *
237
+ * @param {string} reason a {@link SHARE_STOPPED_REASON}
238
+ * @returns {undefined}
239
+ * @private
240
+ * @memberof ReconnectionManager
241
+ */
242
+ private stopLocalShareTrack(reason: string) {
243
+ this.meeting.setLocalShareTrack(null);
244
+ this.meeting.isSharing = false;
245
+ if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {
246
+ this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;
247
+ }
248
+ this.meeting.mediaProperties.mediaDirection.sendShare = false;
249
+ Trigger.trigger(
250
+ this.meeting,
251
+ {
252
+ file: 'reconnection-manager/index',
253
+ function: 'stopLocalShareTrack',
254
+ },
255
+ EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,
256
+ {
257
+ reason,
258
+ }
259
+ );
260
+ }
209
261
 
210
262
  /**
211
263
  * @public
@@ -213,7 +265,7 @@ export default class ReconnectionManager {
213
265
  * @returns {Boolean} true if reconnection operation is in progress
214
266
  */
215
267
  isReconnectInProgress() {
216
- return (this.status === RECONNECTION.STATE.IN_PROGRESS);
268
+ return this.status === RECONNECTION.STATE.IN_PROGRESS;
217
269
  }
218
270
 
219
271
  /**
@@ -222,7 +274,7 @@ export default class ReconnectionManager {
222
274
  * @private
223
275
  * @memberof ReconnectionManager
224
276
  */
225
- validate() {
277
+ private validate() {
226
278
  if (this.meeting.config.reconnection.enabled) {
227
279
  if (
228
280
  this.status === RECONNECTION.STATE.DEFAULT_STATUS ||
@@ -231,7 +283,9 @@ export default class ReconnectionManager {
231
283
  return true;
232
284
  }
233
285
 
234
- LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection already in progress.');
286
+ LoggerProxy.logger.info(
287
+ 'ReconnectionManager:index#validate --> Reconnection already in progress.'
288
+ );
235
289
 
236
290
  throw new ReconnectInProgress('Reconnection already in progress.');
237
291
  }
@@ -250,39 +304,55 @@ export default class ReconnectionManager {
250
304
  * @public
251
305
  * @memberof ReconnectionManager
252
306
  */
253
- async reconnect({networkDisconnect = false, networkRetry = false} = {}) {
254
- LoggerProxy.logger.info(`ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`);
307
+ public async reconnect({
308
+ networkDisconnect = false,
309
+ networkRetry = false,
310
+ }: {
311
+ networkDisconnect?: boolean;
312
+ networkRetry?: boolean;
313
+ } = {}) {
314
+ LoggerProxy.logger.info(
315
+ `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`
316
+ );
255
317
  // First, validate that we can reconnect, if not, it will throw an error
256
318
  try {
257
319
  this.validate();
258
- }
259
- catch (error) {
260
- LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection unable to begin.', error);
320
+ } catch (error) {
321
+ LoggerProxy.logger.info(
322
+ 'ReconnectionManager:index#reconnect --> Reconnection unable to begin.',
323
+ error
324
+ );
261
325
  throw error;
262
326
  }
263
327
 
264
328
  if (!networkRetry) {
265
329
  // Only log START metrics on the initial reconnect
266
- LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect start metric.');
330
+ LoggerProxy.logger.info(
331
+ 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'
332
+ );
267
333
  Metrics.postEvent({
268
334
  event: eventType.MEDIA_RECONNECTING,
269
- meeting: this.meeting
335
+ meeting: this.meeting,
270
336
  });
271
337
  }
272
338
 
273
339
  return this.executeReconnection({networkDisconnect})
274
340
  .then(() => {
275
341
  LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');
276
- LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect success metric.');
342
+ LoggerProxy.logger.info(
343
+ 'ReconnectionManager:index#reconnect --> Sending reconnect success metric.'
344
+ );
277
345
  Metrics.postEvent({
278
346
  event: eventType.MEDIA_RECOVERED,
279
347
  meeting: this.meeting,
280
- data: {recoveredBy: reconnection.RECOVERED_BY_NEW}
348
+ data: {recoveredBy: reconnection.RECOVERED_BY_NEW},
281
349
  });
282
350
  })
283
351
  .catch((reconnectError) => {
284
352
  if (reconnectError instanceof NeedsRetryError) {
285
- LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.');
353
+ LoggerProxy.logger.info(
354
+ 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'
355
+ );
286
356
  // Reset our reconnect status since we are looping back to the beginning
287
357
  this.status = RECONNECTION.STATE.DEFAULT_STATUS;
288
358
 
@@ -291,8 +361,13 @@ export default class ReconnectionManager {
291
361
  }
292
362
 
293
363
  // Reconnect has failed
294
- LoggerProxy.logger.error('ReconnectionManager:index#reconnect --> Reconnection failed.', reconnectError.message);
295
- LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect abort metric.');
364
+ LoggerProxy.logger.error(
365
+ 'ReconnectionManager:index#reconnect --> Reconnection failed.',
366
+ reconnectError.message
367
+ );
368
+ LoggerProxy.logger.info(
369
+ 'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'
370
+ );
296
371
 
297
372
  const reconnectMetric = {
298
373
  event: eventType.CALL_ABORTED,
@@ -304,10 +379,10 @@ export default class ReconnectionManager {
304
379
  errorCode: 2008,
305
380
  fatal: true,
306
381
  name: errorObjects.name.mediaEngine,
307
- shownToUser: false
308
- }
309
- ]
310
- }
382
+ shownToUser: false,
383
+ },
384
+ ],
385
+ },
311
386
  };
312
387
 
313
388
  Metrics.postEvent(reconnectMetric);
@@ -319,7 +394,6 @@ export default class ReconnectionManager {
319
394
  }
320
395
  }
321
396
 
322
-
323
397
  throw reconnectError;
324
398
  });
325
399
  }
@@ -332,43 +406,61 @@ export default class ReconnectionManager {
332
406
  * @private
333
407
  * @memberof ReconnectionManager
334
408
  */
335
- async executeReconnection({networkDisconnect = false}) {
409
+ private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {
336
410
  this.status = RECONNECTION.STATE.IN_PROGRESS;
337
411
 
338
- LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.');
412
+ LoggerProxy.logger.info(
413
+ 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'
414
+ );
415
+
416
+ const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;
417
+
418
+ if (wasSharing) {
419
+ this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);
420
+ }
339
421
 
340
422
  if (networkDisconnect) {
341
423
  try {
342
424
  await this.reconnectMercuryWebSocket();
343
- LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Websocket reconnected.', this.webex.internal.device.url);
344
- }
345
- catch (error) {
346
- LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.');
425
+ LoggerProxy.logger.error(
426
+ 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',
427
+ this.webex.internal.device.url
428
+ );
429
+ } catch (error) {
430
+ LoggerProxy.logger.error(
431
+ 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'
432
+ );
347
433
  this.status = RECONNECTION.STATE.FAILURE;
348
- throw (error);
434
+ throw error;
349
435
  }
350
436
  }
351
437
 
352
- const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;
353
-
354
438
  try {
355
- LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Updating meeting data from server.');
439
+ LoggerProxy.logger.info(
440
+ 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'
441
+ );
356
442
  await this.webex.meetings.syncMeetings();
357
- }
358
- catch (syncError) {
359
- LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.', syncError);
360
- throw (new NeedsRetryError(syncError));
443
+ } catch (syncError) {
444
+ LoggerProxy.logger.info(
445
+ 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',
446
+ syncError
447
+ );
448
+ throw new NeedsRetryError(syncError);
361
449
  }
362
450
 
363
451
  // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object
364
452
  // So that on rejoin it known what parametrs it was using
365
453
  if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {
366
- LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely ');
454
+ LoggerProxy.logger.info(
455
+ 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'
456
+ );
367
457
 
368
- throw new Error('Unable to rejoin a meeting already ended or inactive .');
458
+ throw new Error('Unable to rejoin a meeting already ended or inactive.');
369
459
  }
370
460
 
371
- LoggerProxy.logger.info(`ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`);
461
+ LoggerProxy.logger.info(
462
+ `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`
463
+ );
372
464
 
373
465
  // If the meeting state was left, no longer reconnect media
374
466
  if (this.meeting.state === _LEFT_) {
@@ -376,22 +468,25 @@ export default class ReconnectionManager {
376
468
  throw new Error('Unable to rejoin a call in LEFT state.');
377
469
  }
378
470
 
379
- throw (new NeedsRejoinError({wasSharing}));
471
+ throw new NeedsRejoinError({wasSharing});
380
472
  }
381
473
 
382
474
  try {
383
475
  const media = await this.reconnectMedia();
384
476
 
385
- LoggerProxy.logger.log('ReconnectionManager:index#executeReconnection --> Media reestablished');
477
+ LoggerProxy.logger.log(
478
+ 'ReconnectionManager:index#executeReconnection --> Media reestablished'
479
+ );
386
480
  this.status = RECONNECTION.STATE.COMPLETE;
387
481
 
388
482
  return media;
389
- }
390
- catch (error) {
391
- LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Media reestablishment failed');
483
+ } catch (error) {
484
+ LoggerProxy.logger.error(
485
+ 'ReconnectionManager:index#executeReconnection --> Media reestablishment failed'
486
+ );
392
487
  this.status = RECONNECTION.STATE.FAILURE;
393
488
 
394
- throw (error);
489
+ throw error;
395
490
  }
396
491
  }
397
492
 
@@ -404,48 +499,34 @@ export default class ReconnectionManager {
404
499
  */
405
500
  async rejoinMeeting(wasSharing = false) {
406
501
  try {
407
- LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin');
502
+ LoggerProxy.logger.info(
503
+ 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'
504
+ );
408
505
 
409
506
  await this.meeting.join({rejoin: true});
410
507
  LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');
411
508
 
412
509
  if (wasSharing) {
413
- // Stop the share streams if user tried to rejoin
414
- Media.stopTracks(this.meeting.mediaProperties.shareTrack);
415
- this.meeting.isSharing = false;
416
- if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {
417
- this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;
418
- }
419
- this.meeting.mediaProperties.mediaDirection.sendShare = false;
420
- Trigger.trigger(
421
- this.meeting,
422
- {
423
- file: 'reconnection-manager/index',
424
- function: 'rejoinMeeting'
425
- },
426
- EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,
427
- {
428
- reason: SHARE_STOPPED_REASON.MEETING_REJOIN
429
- }
430
- );
510
+ this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEETING_REJOIN);
431
511
  }
432
- }
433
- catch (joinError) {
512
+ } catch (joinError) {
434
513
  this.rejoinAttempts += 1;
435
514
  if (this.rejoinAttempts <= this.maxRejoinAttempts) {
436
- LoggerProxy.logger.info(`ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`, joinError);
515
+ LoggerProxy.logger.info(
516
+ `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,
517
+ joinError
518
+ );
437
519
  this.rejoinMeeting();
438
- }
439
- else {
440
- LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.', joinError);
441
- Metrics.sendBehavioralMetric(
442
- BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE,
443
- {
444
- locus_id: this.meeting.locusUrl.split('/').pop(),
445
- reason: joinError.message,
446
- stack: joinError.stack
447
- }
520
+ } else {
521
+ LoggerProxy.logger.error(
522
+ 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',
523
+ joinError
448
524
  );
525
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {
526
+ locus_id: this.meeting.locusUrl.split('/').pop(),
527
+ reason: joinError.message,
528
+ stack: joinError.stack,
529
+ });
449
530
  this.status = RECONNECTION.STATE.FAILURE;
450
531
  throw joinError;
451
532
  }
@@ -453,9 +534,11 @@ export default class ReconnectionManager {
453
534
 
454
535
  try {
455
536
  await this.reconnectMedia();
456
- }
457
- catch (mediaError) {
458
- LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.', mediaError);
537
+ } catch (mediaError) {
538
+ LoggerProxy.logger.error(
539
+ 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',
540
+ mediaError
541
+ );
459
542
  throw mediaError;
460
543
  }
461
544
  }
@@ -466,21 +549,32 @@ export default class ReconnectionManager {
466
549
  * @memberof ReconnectionManager
467
550
  */
468
551
  async reconnectMedia() {
469
- LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media');
470
-
471
- // we are not simply calling this.meeting.mediaProperties.webrtcMediaConnection.reconnect(),
472
- // but instead manually closing and creating new media connection, because we need to do the TURN discovery again
473
-
474
- await this.meeting.closePeerConnections();
475
- this.meeting.mediaProperties.unsetPeerConnection();
552
+ LoggerProxy.logger.log(
553
+ 'ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media'
554
+ );
476
555
 
556
+ // do the TURN server discovery again since the TURN server might change
477
557
  const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true);
478
558
 
479
- const mc = this.meeting.createMediaConnection(turnServerResult.turnServerInfo);
559
+ const iceServers = [];
560
+
561
+ if (turnServerResult.turnServerInfo) {
562
+ iceServers.push({
563
+ urls: turnServerResult.turnServerInfo.url,
564
+ username: turnServerResult.turnServerInfo.username || '',
565
+ credential: turnServerResult.turnServerInfo.password || '',
566
+ });
567
+ }
480
568
 
481
- this.meeting.statsAnalyzer.updateMediaConnection(mc);
569
+ await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);
482
570
 
483
- return mc.initiateOffer();
571
+ // resend media requests
572
+ if (this.meeting.isMultistream) {
573
+ Object.values(this.meeting.mediaRequestManagers).forEach((mediaRequestManager) =>
574
+ // @ts-ignore - Fix type
575
+ mediaRequestManager.commit()
576
+ );
577
+ }
484
578
  }
485
579
 
486
580
  /**
@@ -489,31 +583,45 @@ export default class ReconnectionManager {
489
583
  * @private
490
584
  * @memberof ReconnectionManager
491
585
  */
492
- async reconnectMercuryWebSocket() {
493
- LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.');
586
+ private async reconnectMercuryWebSocket() {
587
+ LoggerProxy.logger.info(
588
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'
589
+ );
494
590
  // First, attempt to disconnect if we think we are already connected.
495
591
  if (this.webex.internal.mercury.connected) {
496
- LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.');
592
+ LoggerProxy.logger.info(
593
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'
594
+ );
497
595
  try {
498
596
  await this.webex.internal.mercury.disconnect();
499
- LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.');
500
- }
501
- catch (disconnectError) {
597
+ LoggerProxy.logger.info(
598
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.'
599
+ );
600
+ } catch (disconnectError) {
502
601
  // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.
503
- LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.', disconnectError);
602
+ LoggerProxy.logger.error(
603
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',
604
+ disconnectError
605
+ );
504
606
  throw disconnectError;
505
607
  }
506
608
  }
507
609
 
508
610
  try {
509
- LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.');
611
+ LoggerProxy.logger.info(
612
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'
613
+ );
510
614
  await this.webex.internal.mercury.connect();
511
- LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.');
512
- }
513
- catch (connectError) {
514
- LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.', connectError);
515
-
516
- throw (connectError);
615
+ LoggerProxy.logger.info(
616
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'
617
+ );
618
+ } catch (connectError) {
619
+ LoggerProxy.logger.error(
620
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',
621
+ connectError
622
+ );
623
+
624
+ throw connectError;
517
625
  }
518
626
  }
519
627
  }
@@ -0,0 +1,8 @@
1
+ enum RecordingAction {
2
+ Start = 'Start',
3
+ Stop = 'Stop',
4
+ Pause = 'Pause',
5
+ Resume = 'Resume',
6
+ }
7
+
8
+ export default RecordingAction;