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