@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.
- package/README.md +45 -7
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +216 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1048 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +9 -43
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +28 -23
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +8 -13
- package/dist/config.js.map +1 -1
- package/dist/constants.js +250 -66
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +108 -17
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +101 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +532 -240
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +54 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +284 -154
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +110 -92
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +95 -226
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +99 -194
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +83 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +3478 -3563
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +247 -183
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +344 -344
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +529 -588
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +62 -39
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +328 -283
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +156 -232
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +26 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +795 -574
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +186 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +126 -85
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +147 -88
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +13 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +178 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +113 -68
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +314 -260
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +4 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +11 -558
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +264 -50
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +76 -95
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +62 -76
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +66 -43
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +502 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +192 -191
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +384 -476
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +363 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +64 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +58 -91
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +137 -135
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +148 -100
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +115 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +385 -460
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +143 -87
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1016 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +271 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +153 -0
- package/dist/types/meeting/index.d.ts +1471 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +257 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +78 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +62 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +367 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +159 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +208 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +36 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +46 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +29 -21
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +14 -9
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +22 -9
- package/src/{config.js → config.ts} +17 -17
- package/src/constants.ts +197 -22
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +300 -0
- package/src/index.ts +39 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +222 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +518 -111
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +65 -17
- package/src/locus-info/{parser.js → parser.ts} +271 -98
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
- package/src/media/index.ts +456 -0
- package/src/media/{properties.js → properties.ts} +80 -102
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +171 -3
- package/src/meeting/index.ts +7070 -0
- package/src/meeting/locusMediaRequest.ts +309 -0
- package/src/meeting/muteState.ts +450 -0
- package/src/meeting/{request.js → request.ts} +354 -214
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/util.ts +615 -0
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/index.ts +183 -0
- package/src/meeting-info/meeting-info-v2.ts +407 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +77 -60
- package/src/meetings/{collection.js → collection.ts} +26 -3
- package/src/meetings/index.ts +1467 -0
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/{util.js → util.ts} +137 -36
- package/src/member/{index.js → index.ts} +151 -56
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +383 -0
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +323 -145
- package/src/members/request.ts +255 -0
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +339 -0
- package/src/metrics/{constants.js → constants.ts} +2 -6
- package/src/metrics/index.ts +73 -0
- package/src/multistream/mediaRequestManager.ts +337 -61
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +66 -42
- package/src/multistream/remoteMedia.ts +40 -5
- package/src/multistream/remoteMediaGroup.ts +63 -3
- package/src/multistream/remoteMediaManager.ts +263 -66
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +157 -94
- package/src/reachability/request.ts +46 -35
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +254 -136
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +333 -0
- package/src/recording-controller/util.ts +75 -0
- package/src/roap/{index.js → index.ts} +86 -78
- package/src/roap/request.ts +163 -0
- package/src/roap/turnDiscovery.ts +111 -49
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +96 -0
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1272 -0
- package/src/statsAnalyzer/mqaUtil.ts +291 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +804 -526
- package/test/integration/spec/space-meeting.js +391 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +237 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- package/test/unit/spec/fixture/locus.js +93 -90
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +325 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1176 -18
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +65 -31
- package/test/unit/spec/locus-info/selfConstant.js +120 -103
- package/test/unit/spec/locus-info/selfUtils.js +296 -12
- package/test/unit/spec/media/index.ts +162 -68
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +82 -3
- package/test/unit/spec/meeting/index.js +4569 -1773
- package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
- package/test/unit/spec/meeting/muteState.js +382 -211
- package/test/unit/spec/meeting/request.js +444 -78
- package/test/unit/spec/meeting/utils.js +517 -192
- package/test/unit/spec/meeting-info/index.js +181 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +131 -74
- package/test/unit/spec/meetings/collection.js +15 -1
- package/test/unit/spec/meetings/index.js +1254 -330
- package/test/unit/spec/meetings/utils.js +220 -14
- package/test/unit/spec/member/index.js +58 -5
- package/test/unit/spec/member/util.js +494 -26
- package/test/unit/spec/members/index.js +423 -55
- package/test/unit/spec/members/request.js +228 -40
- package/test/unit/spec/members/utils.js +191 -4
- package/test/unit/spec/metrics/index.js +12 -66
- package/test/unit/spec/multistream/mediaRequestManager.ts +1013 -106
- package/test/unit/spec/multistream/receiveSlot.ts +77 -18
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +40 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +730 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +155 -9
- package/test/unit/spec/recording-controller/index.js +307 -0
- package/test/unit/spec/recording-controller/util.js +229 -0
- package/test/unit/spec/roap/index.ts +28 -52
- package/test/unit/spec/roap/request.ts +225 -0
- package/test/unit/spec/roap/turnDiscovery.ts +92 -50
- package/test/unit/spec/rtcMetrics/index.ts +60 -0
- package/test/unit/spec/stats-analyzer/index.js +116 -60
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +63 -99
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -301
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/index.js +0 -15
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/index.js +0 -459
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting/index.js +0 -6284
- package/src/meeting/muteState.js +0 -318
- package/src/meeting/util.js +0 -506
- package/src/meeting-info/index.js +0 -131
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/member/util.js +0 -254
- package/src/members/request.js +0 -131
- package/src/members/util.js +0 -258
- package/src/metrics/config.js +0 -324
- package/src/metrics/index.js +0 -530
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /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({
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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({
|
|
254
|
-
|
|
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
|
-
|
|
260
|
-
|
|
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(
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
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(
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
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(
|
|
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(
|
|
295
|
-
|
|
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
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
379
|
+
// @ts-ignore
|
|
380
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
381
|
+
name: 'client.call.aborted',
|
|
382
|
+
payload: {
|
|
301
383
|
errors: [
|
|
302
384
|
{
|
|
303
|
-
category:
|
|
385
|
+
category: 'expected',
|
|
304
386
|
errorCode: 2008,
|
|
305
387
|
fatal: true,
|
|
306
|
-
name:
|
|
307
|
-
shownToUser: false
|
|
308
|
-
}
|
|
309
|
-
]
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
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(
|
|
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(
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
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
|
|
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(
|
|
447
|
+
LoggerProxy.logger.info(
|
|
448
|
+
'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'
|
|
449
|
+
);
|
|
356
450
|
await this.webex.meetings.syncMeetings();
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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
|
-
|
|
391
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
440
|
-
|
|
441
|
-
|
|
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
|
-
|
|
458
|
-
|
|
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(
|
|
470
|
-
|
|
471
|
-
|
|
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
|
-
|
|
475
|
-
this.meeting.
|
|
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
|
|
567
|
+
const iceServers = [];
|
|
478
568
|
|
|
479
|
-
|
|
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.
|
|
577
|
+
await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);
|
|
482
578
|
|
|
483
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
500
|
-
|
|
501
|
-
|
|
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(
|
|
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(
|
|
621
|
+
LoggerProxy.logger.info(
|
|
622
|
+
'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'
|
|
623
|
+
);
|
|
510
624
|
await this.webex.internal.mercury.connect();
|
|
511
|
-
LoggerProxy.logger.info(
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
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
|
}
|