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