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