@webex/plugin-meetings 3.0.0-beta.14 → 3.0.0-beta.141

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 +1012 -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 +204 -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 +300 -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 +398 -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 +89 -124
  101. package/dist/locus-info/parser.js.map +1 -1
  102. package/dist/locus-info/selfUtils.js +94 -92
  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 +2576 -2455
  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 +296 -342
  121. package/dist/meeting/request.js.map +1 -1
  122. package/dist/meeting/request.type.js +0 -1
  123. package/dist/meeting/request.type.js.map +1 -1
  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 +170 -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 +14 -40
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +481 -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 -462
  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 +994 -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 +104 -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 +48 -0
  310. package/dist/types/multistream/remoteMediaManager.d.ts +267 -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 +888 -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 +22 -11
  362. package/src/common/logs/request.ts +11 -8
  363. package/src/config.ts +16 -12
  364. package/src/constants.ts +154 -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 +286 -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 +335 -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 +47 -69
  378. package/src/locus-info/selfUtils.ts +175 -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 +2809 -1589
  385. package/src/meeting/locusMediaRequest.ts +309 -0
  386. package/src/meeting/muteState.ts +290 -72
  387. package/src/meeting/request.ts +229 -182
  388. package/src/meeting/request.type.ts +10 -8
  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 +771 -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 +210 -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 +11 -3
  417. package/src/multistream/remoteMediaManager.ts +245 -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 -112
  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 -65
  433. package/src/roap/turnDiscovery.ts +101 -48
  434. package/src/statsAnalyzer/global.ts +8 -104
  435. package/src/statsAnalyzer/index.ts +624 -377
  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 +1685 -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 +518 -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 +615 -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 +221 -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 +3077 -923
  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 +408 -85
  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 +676 -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 +52 -5
  490. package/test/unit/spec/multistream/remoteMediaManager.ts +585 -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,15 +13,15 @@ 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
21
  import {eventType, reconnection, errorObjects} from '../metrics/config';
22
- import Media from '../media';
23
22
  import Metrics from '../metrics';
24
23
  import Meeting from '../meeting';
24
+ import {MediaRequestManager} from '../multistream/mediaRequestManager';
25
25
 
26
26
  /**
27
27
  * Used to indicate that the reconnect logic needs to be retried.
@@ -64,7 +64,7 @@ class NeedsRejoinError extends Error {
64
64
  /**
65
65
  * @export
66
66
  * @class ReconnectionManager
67
- */
67
+ */
68
68
  export default class ReconnectionManager {
69
69
  autoRejoinEnabled: any;
70
70
  iceState: any;
@@ -92,7 +92,7 @@ export default class ReconnectionManager {
92
92
  resolve: () => {},
93
93
  timer: undefined,
94
94
  // @ts-ignore
95
- timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout
95
+ timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,
96
96
  };
97
97
 
98
98
  /**
@@ -100,21 +100,21 @@ export default class ReconnectionManager {
100
100
  * @type {String}
101
101
  * @private
102
102
  * @memberof ReconnectionManager
103
- */
103
+ */
104
104
  this.status = RECONNECTION.STATE.DEFAULT_STATUS;
105
105
  /**
106
106
  * @instance
107
107
  * @type {Number}
108
108
  * @private
109
109
  * @memberof ReconnectionManager
110
- */
110
+ */
111
111
  this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;
112
112
  /**
113
113
  * @instance
114
114
  * @type {Object}
115
115
  * @private
116
116
  * @memberof ReconnectionManager
117
- */
117
+ */
118
118
  // TODO : change this logic to not save the meeting instance
119
119
  // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date
120
120
  // @ts-ignore
@@ -135,7 +135,6 @@ export default class ReconnectionManager {
135
135
  // @ts-ignore
136
136
  this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;
137
137
 
138
-
139
138
  // Make sure reconnection state is in default
140
139
  this.reset();
141
140
  }
@@ -185,7 +184,9 @@ export default class ReconnectionManager {
185
184
  */
186
185
  public waitForIceReconnect() {
187
186
  if (!this.iceState.disconnected) {
188
- LoggerProxy.logger.log('ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect');
187
+ LoggerProxy.logger.log(
188
+ 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'
189
+ );
189
190
 
190
191
  this.iceState.disconnected = true;
191
192
 
@@ -193,10 +194,11 @@ export default class ReconnectionManager {
193
194
  this.iceState.timer = setTimeout(() => {
194
195
  if (this.iceState.disconnected === false) {
195
196
  resolve();
196
- }
197
- else {
197
+ } else {
198
198
  this.iceState.disconnected = false;
199
- reject(new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`));
199
+ reject(
200
+ new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)
201
+ );
200
202
  }
201
203
  }, this.iceState.timeoutDuration);
202
204
 
@@ -229,6 +231,33 @@ export default class ReconnectionManager {
229
231
  this.meeting = null;
230
232
  }
231
233
 
234
+ /**
235
+ * Stop the local share track.
236
+ *
237
+ * @param {string} reason a {@link SHARE_STOPPED_REASON}
238
+ * @returns {undefined}
239
+ * @private
240
+ * @memberof ReconnectionManager
241
+ */
242
+ private stopLocalShareTrack(reason: string) {
243
+ this.meeting.setLocalShareTrack(null);
244
+ this.meeting.isSharing = false;
245
+ if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {
246
+ this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;
247
+ }
248
+ this.meeting.mediaProperties.mediaDirection.sendShare = false;
249
+ Trigger.trigger(
250
+ this.meeting,
251
+ {
252
+ file: 'reconnection-manager/index',
253
+ function: 'stopLocalShareTrack',
254
+ },
255
+ EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,
256
+ {
257
+ reason,
258
+ }
259
+ );
260
+ }
232
261
 
233
262
  /**
234
263
  * @public
@@ -236,7 +265,7 @@ export default class ReconnectionManager {
236
265
  * @returns {Boolean} true if reconnection operation is in progress
237
266
  */
238
267
  isReconnectInProgress() {
239
- return (this.status === RECONNECTION.STATE.IN_PROGRESS);
268
+ return this.status === RECONNECTION.STATE.IN_PROGRESS;
240
269
  }
241
270
 
242
271
  /**
@@ -254,7 +283,9 @@ export default class ReconnectionManager {
254
283
  return true;
255
284
  }
256
285
 
257
- LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection already in progress.');
286
+ LoggerProxy.logger.info(
287
+ 'ReconnectionManager:index#validate --> Reconnection already in progress.'
288
+ );
258
289
 
259
290
  throw new ReconnectInProgress('Reconnection already in progress.');
260
291
  }
@@ -280,38 +311,48 @@ export default class ReconnectionManager {
280
311
  networkDisconnect?: boolean;
281
312
  networkRetry?: boolean;
282
313
  } = {}) {
283
- LoggerProxy.logger.info(`ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`);
314
+ LoggerProxy.logger.info(
315
+ `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`
316
+ );
284
317
  // First, validate that we can reconnect, if not, it will throw an error
285
318
  try {
286
319
  this.validate();
287
- }
288
- catch (error) {
289
- LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection unable to begin.', error);
320
+ } catch (error) {
321
+ LoggerProxy.logger.info(
322
+ 'ReconnectionManager:index#reconnect --> Reconnection unable to begin.',
323
+ error
324
+ );
290
325
  throw error;
291
326
  }
292
327
 
293
328
  if (!networkRetry) {
294
329
  // Only log START metrics on the initial reconnect
295
- LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect start metric.');
330
+ LoggerProxy.logger.info(
331
+ 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'
332
+ );
296
333
  Metrics.postEvent({
297
334
  event: eventType.MEDIA_RECONNECTING,
298
- meeting: this.meeting
335
+ meeting: this.meeting,
299
336
  });
300
337
  }
301
338
 
302
339
  return this.executeReconnection({networkDisconnect})
303
340
  .then(() => {
304
341
  LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');
305
- LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect success metric.');
342
+ LoggerProxy.logger.info(
343
+ 'ReconnectionManager:index#reconnect --> Sending reconnect success metric.'
344
+ );
306
345
  Metrics.postEvent({
307
346
  event: eventType.MEDIA_RECOVERED,
308
347
  meeting: this.meeting,
309
- data: {recoveredBy: reconnection.RECOVERED_BY_NEW}
348
+ data: {recoveredBy: reconnection.RECOVERED_BY_NEW},
310
349
  });
311
350
  })
312
351
  .catch((reconnectError) => {
313
352
  if (reconnectError instanceof NeedsRetryError) {
314
- LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.');
353
+ LoggerProxy.logger.info(
354
+ 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'
355
+ );
315
356
  // Reset our reconnect status since we are looping back to the beginning
316
357
  this.status = RECONNECTION.STATE.DEFAULT_STATUS;
317
358
 
@@ -320,8 +361,13 @@ export default class ReconnectionManager {
320
361
  }
321
362
 
322
363
  // 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.');
364
+ LoggerProxy.logger.error(
365
+ 'ReconnectionManager:index#reconnect --> Reconnection failed.',
366
+ reconnectError.message
367
+ );
368
+ LoggerProxy.logger.info(
369
+ 'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'
370
+ );
325
371
 
326
372
  const reconnectMetric = {
327
373
  event: eventType.CALL_ABORTED,
@@ -333,10 +379,10 @@ export default class ReconnectionManager {
333
379
  errorCode: 2008,
334
380
  fatal: true,
335
381
  name: errorObjects.name.mediaEngine,
336
- shownToUser: false
337
- }
338
- ]
339
- }
382
+ shownToUser: false,
383
+ },
384
+ ],
385
+ },
340
386
  };
341
387
 
342
388
  Metrics.postEvent(reconnectMetric);
@@ -348,7 +394,6 @@ export default class ReconnectionManager {
348
394
  }
349
395
  }
350
396
 
351
-
352
397
  throw reconnectError;
353
398
  });
354
399
  }
@@ -361,43 +406,61 @@ export default class ReconnectionManager {
361
406
  * @private
362
407
  * @memberof ReconnectionManager
363
408
  */
364
- private async executeReconnection({ networkDisconnect = false }: { networkDisconnect?: boolean }) {
409
+ private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {
365
410
  this.status = RECONNECTION.STATE.IN_PROGRESS;
366
411
 
367
- LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.');
412
+ LoggerProxy.logger.info(
413
+ 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'
414
+ );
415
+
416
+ const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;
417
+
418
+ if (wasSharing) {
419
+ this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);
420
+ }
368
421
 
369
422
  if (networkDisconnect) {
370
423
  try {
371
424
  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.');
425
+ LoggerProxy.logger.error(
426
+ 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',
427
+ this.webex.internal.device.url
428
+ );
429
+ } catch (error) {
430
+ LoggerProxy.logger.error(
431
+ 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'
432
+ );
376
433
  this.status = RECONNECTION.STATE.FAILURE;
377
- throw (error);
434
+ throw error;
378
435
  }
379
436
  }
380
437
 
381
- const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;
382
-
383
438
  try {
384
- LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Updating meeting data from server.');
439
+ LoggerProxy.logger.info(
440
+ 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'
441
+ );
385
442
  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));
443
+ } catch (syncError) {
444
+ LoggerProxy.logger.info(
445
+ 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',
446
+ syncError
447
+ );
448
+ throw new NeedsRetryError(syncError);
390
449
  }
391
450
 
392
451
  // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object
393
452
  // So that on rejoin it known what parametrs it was using
394
453
  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 ');
454
+ LoggerProxy.logger.info(
455
+ 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'
456
+ );
396
457
 
397
- throw new Error('Unable to rejoin a meeting already ended or inactive .');
458
+ throw new Error('Unable to rejoin a meeting already ended or inactive.');
398
459
  }
399
460
 
400
- LoggerProxy.logger.info(`ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`);
461
+ LoggerProxy.logger.info(
462
+ `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`
463
+ );
401
464
 
402
465
  // If the meeting state was left, no longer reconnect media
403
466
  if (this.meeting.state === _LEFT_) {
@@ -405,22 +468,25 @@ export default class ReconnectionManager {
405
468
  throw new Error('Unable to rejoin a call in LEFT state.');
406
469
  }
407
470
 
408
- throw (new NeedsRejoinError({wasSharing}));
471
+ throw new NeedsRejoinError({wasSharing});
409
472
  }
410
473
 
411
474
  try {
412
475
  const media = await this.reconnectMedia();
413
476
 
414
- LoggerProxy.logger.log('ReconnectionManager:index#executeReconnection --> Media reestablished');
477
+ LoggerProxy.logger.log(
478
+ 'ReconnectionManager:index#executeReconnection --> Media reestablished'
479
+ );
415
480
  this.status = RECONNECTION.STATE.COMPLETE;
416
481
 
417
482
  return media;
418
- }
419
- catch (error) {
420
- LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Media reestablishment failed');
483
+ } catch (error) {
484
+ LoggerProxy.logger.error(
485
+ 'ReconnectionManager:index#executeReconnection --> Media reestablishment failed'
486
+ );
421
487
  this.status = RECONNECTION.STATE.FAILURE;
422
488
 
423
- throw (error);
489
+ throw error;
424
490
  }
425
491
  }
426
492
 
@@ -431,50 +497,36 @@ export default class ReconnectionManager {
431
497
  * @param {boolean} wasSharing
432
498
  * @returns {Promise}
433
499
  */
434
- async rejoinMeeting(wasSharing: boolean = false) {
500
+ async rejoinMeeting(wasSharing = false) {
435
501
  try {
436
- LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin');
502
+ LoggerProxy.logger.info(
503
+ 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'
504
+ );
437
505
 
438
506
  await this.meeting.join({rejoin: true});
439
507
  LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');
440
508
 
441
509
  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
- );
510
+ this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEETING_REJOIN);
460
511
  }
461
- }
462
- catch (joinError) {
512
+ } catch (joinError) {
463
513
  this.rejoinAttempts += 1;
464
514
  if (this.rejoinAttempts <= this.maxRejoinAttempts) {
465
- LoggerProxy.logger.info(`ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`, joinError);
515
+ LoggerProxy.logger.info(
516
+ `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,
517
+ joinError
518
+ );
466
519
  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
- }
520
+ } else {
521
+ LoggerProxy.logger.error(
522
+ 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',
523
+ joinError
477
524
  );
525
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {
526
+ locus_id: this.meeting.locusUrl.split('/').pop(),
527
+ reason: joinError.message,
528
+ stack: joinError.stack,
529
+ });
478
530
  this.status = RECONNECTION.STATE.FAILURE;
479
531
  throw joinError;
480
532
  }
@@ -482,9 +534,11 @@ export default class ReconnectionManager {
482
534
 
483
535
  try {
484
536
  await this.reconnectMedia();
485
- }
486
- catch (mediaError) {
487
- LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.', mediaError);
537
+ } catch (mediaError) {
538
+ LoggerProxy.logger.error(
539
+ 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',
540
+ mediaError
541
+ );
488
542
  throw mediaError;
489
543
  }
490
544
  }
@@ -495,21 +549,34 @@ export default class ReconnectionManager {
495
549
  * @memberof ReconnectionManager
496
550
  */
497
551
  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();
552
+ LoggerProxy.logger.log(
553
+ 'ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media'
554
+ );
505
555
 
556
+ // do the TURN server discovery again since the TURN server might change
506
557
  const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true);
507
558
 
508
- const mc = this.meeting.createMediaConnection(turnServerResult.turnServerInfo);
559
+ const iceServers = [];
560
+
561
+ if (turnServerResult.turnServerInfo) {
562
+ iceServers.push({
563
+ urls: turnServerResult.turnServerInfo.url,
564
+ username: turnServerResult.turnServerInfo.username || '',
565
+ credential: turnServerResult.turnServerInfo.password || '',
566
+ });
567
+ }
509
568
 
510
- this.meeting.statsAnalyzer.updateMediaConnection(mc);
569
+ await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);
511
570
 
512
- return mc.initiateOffer();
571
+ // resend media requests
572
+ if (this.meeting.isMultistream) {
573
+ Object.values(this.meeting.mediaRequestManagers).forEach(
574
+ (mediaRequestManager: MediaRequestManager) => {
575
+ mediaRequestManager.clearPreviousRequests();
576
+ mediaRequestManager.commit();
577
+ }
578
+ );
579
+ }
513
580
  }
514
581
 
515
582
  /**
@@ -519,30 +586,44 @@ export default class ReconnectionManager {
519
586
  * @memberof ReconnectionManager
520
587
  */
521
588
  private async reconnectMercuryWebSocket() {
522
- LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.');
589
+ LoggerProxy.logger.info(
590
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'
591
+ );
523
592
  // First, attempt to disconnect if we think we are already connected.
524
593
  if (this.webex.internal.mercury.connected) {
525
- LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.');
594
+ LoggerProxy.logger.info(
595
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'
596
+ );
526
597
  try {
527
598
  await this.webex.internal.mercury.disconnect();
528
- LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.');
529
- }
530
- catch (disconnectError) {
599
+ LoggerProxy.logger.info(
600
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.'
601
+ );
602
+ } catch (disconnectError) {
531
603
  // 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);
604
+ LoggerProxy.logger.error(
605
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',
606
+ disconnectError
607
+ );
533
608
  throw disconnectError;
534
609
  }
535
610
  }
536
611
 
537
612
  try {
538
- LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.');
613
+ LoggerProxy.logger.info(
614
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'
615
+ );
539
616
  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);
617
+ LoggerProxy.logger.info(
618
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'
619
+ );
620
+ } catch (connectError) {
621
+ LoggerProxy.logger.error(
622
+ 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',
623
+ connectError
624
+ );
625
+
626
+ throw connectError;
546
627
  }
547
628
  }
548
629
  }
@@ -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;