@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.131

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