@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.200

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