@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.400

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