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