@webex/plugin-meetings 3.0.0-test.1 → 3.1.0
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/.eslintrc.js +6 -0
- package/babel.config.js +3 -0
- package/dist/annotation/constants.js +12 -20
- package/dist/annotation/constants.js.map +1 -1
- package/dist/annotation/index.js +25 -10
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.js +2 -3
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/collection.js +1 -2
- package/dist/breakouts/collection.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +1 -2
- package/dist/breakouts/edit-lock-error.js.map +1 -1
- package/dist/breakouts/events.js +1 -2
- package/dist/breakouts/events.js.map +1 -1
- package/dist/breakouts/index.js +13 -14
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/request.js +1 -2
- package/dist/breakouts/request.js.map +1 -1
- package/dist/breakouts/utils.js +3 -6
- package/dist/breakouts/utils.js.map +1 -1
- package/dist/common/browser-detection.js +2 -3
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +3 -4
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +1 -2
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +1 -2
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +1 -2
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +1 -2
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +1 -2
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +1 -2
- package/dist/common/errors/no-meeting-info.js.map +1 -1
- package/dist/common/errors/parameter.js +3 -4
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +1 -2
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +1 -2
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reclaim-host-role-errors.js +6 -10
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +1 -2
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +1 -2
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +1 -2
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +14 -15
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -2
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +1 -2
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +1 -2
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +1 -2
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +1 -2
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +1 -2
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -2
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/{types/common → common}/logs/request.d.ts +1 -1
- package/dist/common/logs/request.js +3 -4
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +2 -4
- package/dist/common/queue.js.map +1 -1
- package/dist/{types/config.d.ts → config.d.ts} +1 -0
- package/dist/config.js +4 -3
- package/dist/config.js.map +1 -1
- package/dist/{types/constants.d.ts → constants.d.ts} +10 -5
- package/dist/constants.js +207 -380
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +3 -6
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +7 -10
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +27 -32
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.js +1 -2
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interceptors/locusRetry.js +4 -3
- package/dist/interceptors/locusRetry.js.map +1 -1
- package/dist/interpretation/collection.js +1 -2
- package/dist/interpretation/collection.js.map +1 -1
- package/dist/interpretation/index.js +4 -5
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +2 -3
- package/dist/interpretation/siLanguage.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +12 -13
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -4
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +1 -2
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +1 -2
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +23 -27
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -4
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +16 -3
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +6 -10
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +12 -6
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.d.ts +61 -0
- package/dist/media/MediaConnectionAwaiter.js +163 -0
- package/dist/media/MediaConnectionAwaiter.js.map +1 -0
- package/dist/media/index.js +9 -5
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +7 -28
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -2
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +9 -18
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +14 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/{types/meeting → meeting}/index.d.ts +71 -16
- package/dist/meeting/index.js +1411 -1036
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +4 -5
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +2 -4
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/{types/meeting → meeting}/request.d.ts +3 -0
- package/dist/meeting/request.js +45 -36
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +1 -2
- package/dist/meeting/state.js.map +1 -1
- package/dist/{types/meeting → meeting}/util.d.ts +1 -0
- package/dist/meeting/util.js +13 -10
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.d.ts +16 -0
- package/dist/meeting/voicea-meeting.js +169 -0
- package/dist/meeting/voicea-meeting.js.map +1 -0
- package/dist/meeting-info/collection.js +3 -4
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +5 -4
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +27 -29
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -2
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +8 -8
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +15 -9
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +5 -6
- package/dist/meetings/collection.js.map +1 -1
- package/dist/{types/meetings → meetings}/index.d.ts +11 -2
- package/dist/meetings/index.js +44 -17
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +2 -3
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +1 -4
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +1 -3
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +6 -8
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js +1 -2
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +1 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +8 -7
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +2 -3
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +3 -4
- package/dist/members/types.js.map +1 -1
- package/dist/{types/members → members}/util.d.ts +1 -1
- package/dist/members/util.js +3 -4
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +1 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +3 -2
- package/dist/metrics/index.js.map +1 -1
- package/dist/{types/multistream → multistream}/mediaRequestManager.d.ts +1 -2
- package/dist/multistream/mediaRequestManager.js +9 -11
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +3 -5
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +7 -9
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +3 -5
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/{types/multistream → multistream}/remoteMediaGroup.d.ts +1 -1
- package/dist/multistream/remoteMediaGroup.js +7 -6
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/{types/multistream → multistream}/remoteMediaManager.d.ts +1 -2
- package/dist/multistream/remoteMediaManager.js +32 -29
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/{types/multistream → multistream}/sendSlotManager.d.ts +1 -2
- package/dist/multistream/sendSlotManager.js +9 -6
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +1 -2
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +2 -3
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -3
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +1 -2
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/{types/reachability → reachability}/clusterReachability.d.ts +1 -0
- package/dist/reachability/clusterReachability.js +35 -20
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/{types/reachability → reachability}/index.d.ts +4 -0
- package/dist/reachability/index.js +41 -12
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +25 -20
- package/dist/reachability/request.js.map +1 -1
- package/dist/{types/reachability → reachability}/util.d.ts +7 -0
- package/dist/reachability/util.js +19 -0
- package/dist/reachability/util.js.map +1 -1
- package/dist/reactions/constants.js +1 -2
- package/dist/reactions/constants.js.map +1 -1
- package/dist/reactions/reactions.js +2 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +6 -8
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +18 -11
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +4 -5
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.js +43 -51
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +1 -2
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/{types/roap → roap}/index.d.ts +10 -2
- package/dist/roap/index.js +17 -3
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +10 -10
- package/dist/roap/request.js.map +1 -1
- package/dist/{types/roap → roap}/turnDiscovery.d.ts +64 -17
- package/dist/roap/turnDiscovery.js +316 -134
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +1 -2
- package/dist/rtcMetrics/constants.js.map +1 -1
- package/dist/rtcMetrics/index.js +4 -6
- package/dist/rtcMetrics/index.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +123 -96
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +24 -31
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +1 -2
- package/dist/transcription/index.js.map +1 -1
- package/dist/webinar/collection.js +1 -2
- package/dist/webinar/collection.js.map +1 -1
- package/dist/webinar/index.js +2 -3
- package/dist/webinar/index.js.map +1 -1
- package/jest.config.js +3 -0
- package/package.json +44 -25
- package/process +1 -0
- package/src/config.ts +3 -4
- package/src/constants.ts +13 -4
- package/src/interpretation/index.ts +2 -2
- package/src/locus-info/mediaSharesUtils.ts +16 -0
- package/src/locus-info/selfUtils.ts +5 -0
- package/src/media/MediaConnectionAwaiter.ts +174 -0
- package/src/media/index.ts +3 -1
- package/src/media/properties.ts +6 -31
- package/src/meeting/index.ts +526 -227
- package/src/meeting/request.ts +18 -2
- package/src/meeting/util.ts +6 -1
- package/src/meeting/voicea-meeting.ts +122 -0
- package/src/meeting-info/meeting-info-v2.ts +5 -11
- package/src/meeting-info/util.ts +12 -9
- package/src/meeting-info/utilv2.ts +26 -15
- package/src/meetings/index.ts +18 -0
- package/src/member/index.ts +0 -1
- package/src/multistream/mediaRequestManager.ts +1 -1
- package/src/multistream/remoteMediaGroup.ts +1 -1
- package/src/multistream/remoteMediaManager.ts +1 -2
- package/src/multistream/sendSlotManager.ts +1 -2
- package/src/reachability/clusterReachability.ts +20 -5
- package/src/reachability/index.ts +24 -1
- package/src/reachability/request.ts +15 -11
- package/src/reachability/util.ts +21 -0
- package/src/reconnection-manager/index.ts +1 -1
- package/src/roap/index.ts +25 -3
- package/src/roap/request.ts +2 -2
- package/src/roap/turnDiscovery.ts +244 -78
- package/src/statsAnalyzer/index.ts +63 -27
- package/test/integration/spec/journey.js +2 -2
- package/test/unit/spec/breakouts/breakout.ts +2 -1
- package/test/unit/spec/breakouts/index.ts +7 -4
- package/test/unit/spec/interpretation/index.ts +4 -1
- package/test/unit/spec/locus-info/index.js +27 -18
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +9 -0
- package/test/unit/spec/locus-info/selfUtils.js +41 -11
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +344 -0
- package/test/unit/spec/media/index.ts +94 -78
- package/test/unit/spec/media/properties.ts +16 -70
- package/test/unit/spec/meeting/index.js +757 -141
- package/test/unit/spec/meeting/request.js +21 -0
- package/test/unit/spec/meeting/utils.js +58 -11
- package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +20 -15
- package/test/unit/spec/meeting-info/utilv2.js +6 -0
- package/test/unit/spec/meetings/index.js +101 -13
- package/test/unit/spec/metrics/index.js +1 -2
- package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +0 -1
- package/test/unit/spec/multistream/remoteMediaManager.ts +0 -1
- package/test/unit/spec/reachability/clusterReachability.ts +86 -22
- package/test/unit/spec/reachability/index.ts +197 -60
- package/test/unit/spec/reachability/request.js +15 -7
- package/test/unit/spec/reachability/util.ts +32 -2
- package/test/unit/spec/reconnection-manager/index.js +28 -0
- package/test/unit/spec/recording-controller/index.js +0 -1
- package/test/unit/spec/roap/index.ts +61 -6
- package/test/unit/spec/roap/turnDiscovery.ts +299 -17
- package/test/unit/spec/stats-analyzer/index.js +179 -0
- /package/dist/{types/annotation → annotation}/annotation.types.d.ts +0 -0
- /package/dist/{types/annotation → annotation}/constants.d.ts +0 -0
- /package/dist/{types/annotation → annotation}/index.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/breakout.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/collection.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/edit-lock-error.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/events.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/index.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/request.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/utils.d.ts +0 -0
- /package/dist/{types/common → common}/browser-detection.d.ts +0 -0
- /package/dist/{types/common → common}/collection.d.ts +0 -0
- /package/dist/{types/common → common}/config.d.ts +0 -0
- /package/dist/{types/common → common}/errors/captcha-error.d.ts +0 -0
- /package/dist/{types/common → common}/errors/intent-to-join.d.ts +0 -0
- /package/dist/{types/common → common}/errors/join-meeting.d.ts +0 -0
- /package/dist/{types/common → common}/errors/media.d.ts +0 -0
- /package/dist/{types/common → common}/errors/no-meeting-info.d.ts +0 -0
- /package/dist/{types/common → common}/errors/parameter.d.ts +0 -0
- /package/dist/{types/common → common}/errors/password-error.d.ts +0 -0
- /package/dist/{types/common → common}/errors/permission.d.ts +0 -0
- /package/dist/{types/common → common}/errors/reclaim-host-role-errors.d.ts +0 -0
- /package/dist/{types/common → common}/errors/reconnection-in-progress.d.ts +0 -0
- /package/dist/{types/common → common}/errors/reconnection.d.ts +0 -0
- /package/dist/{types/common → common}/errors/stats.d.ts +0 -0
- /package/dist/{types/common → common}/errors/webex-errors.d.ts +0 -0
- /package/dist/{types/common → common}/errors/webex-meetings-error.d.ts +0 -0
- /package/dist/{types/common → common}/events/events-scope.d.ts +0 -0
- /package/dist/{types/common → common}/events/events.d.ts +0 -0
- /package/dist/{types/common → common}/events/trigger-proxy.d.ts +0 -0
- /package/dist/{types/common → common}/events/util.d.ts +0 -0
- /package/dist/{types/common → common}/logs/logger-config.d.ts +0 -0
- /package/dist/{types/common → common}/logs/logger-proxy.d.ts +0 -0
- /package/dist/{types/common → common}/queue.d.ts +0 -0
- /package/dist/{types/controls-options-manager → controls-options-manager}/constants.d.ts +0 -0
- /package/dist/{types/controls-options-manager → controls-options-manager}/enums.d.ts +0 -0
- /package/dist/{types/controls-options-manager → controls-options-manager}/index.d.ts +0 -0
- /package/dist/{types/controls-options-manager → controls-options-manager}/types.d.ts +0 -0
- /package/dist/{types/controls-options-manager → controls-options-manager}/util.d.ts +0 -0
- /package/dist/{types/index.d.ts → index.d.ts} +0 -0
- /package/dist/{types/interceptors → interceptors}/index.d.ts +0 -0
- /package/dist/{types/interceptors → interceptors}/locusRetry.d.ts +0 -0
- /package/dist/{types/interpretation → interpretation}/collection.d.ts +0 -0
- /package/dist/{types/interpretation → interpretation}/index.d.ts +0 -0
- /package/dist/{types/interpretation → interpretation}/siLanguage.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/controlsUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/embeddedAppsUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/fullState.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/hostUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/index.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/infoUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/mediaSharesUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/parser.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/selfUtils.d.ts +0 -0
- /package/dist/{types/media → media}/index.d.ts +0 -0
- /package/dist/{types/media → media}/properties.d.ts +0 -0
- /package/dist/{types/media → media}/util.d.ts +0 -0
- /package/dist/{types/mediaQualityMetrics → mediaQualityMetrics}/config.d.ts +0 -0
- /package/dist/{types/meeting → meeting}/in-meeting-actions.d.ts +0 -0
- /package/dist/{types/meeting → meeting}/locusMediaRequest.d.ts +0 -0
- /package/dist/{types/meeting → meeting}/muteState.d.ts +0 -0
- /package/dist/{types/meeting → meeting}/request.type.d.ts +0 -0
- /package/dist/{types/meeting → meeting}/state.d.ts +0 -0
- /package/dist/{types/meeting-info → meeting-info}/collection.d.ts +0 -0
- /package/dist/{types/meeting-info → meeting-info}/index.d.ts +0 -0
- /package/dist/{types/meeting-info → meeting-info}/meeting-info-v2.d.ts +0 -0
- /package/dist/{types/meeting-info → meeting-info}/request.d.ts +0 -0
- /package/dist/{types/meeting-info → meeting-info}/util.d.ts +0 -0
- /package/dist/{types/meeting-info → meeting-info}/utilv2.d.ts +0 -0
- /package/dist/{types/meetings → meetings}/collection.d.ts +0 -0
- /package/dist/{types/meetings → meetings}/meetings.types.d.ts +0 -0
- /package/dist/{types/meetings → meetings}/request.d.ts +0 -0
- /package/dist/{types/meetings → meetings}/util.d.ts +0 -0
- /package/dist/{types/member → member}/index.d.ts +0 -0
- /package/dist/{types/member → member}/types.d.ts +0 -0
- /package/dist/{types/member → member}/util.d.ts +0 -0
- /package/dist/{types/members → members}/collection.d.ts +0 -0
- /package/dist/{types/members → members}/index.d.ts +0 -0
- /package/dist/{types/members → members}/request.d.ts +0 -0
- /package/dist/{types/members → members}/types.d.ts +0 -0
- /package/dist/{types/metrics → metrics}/constants.d.ts +0 -0
- /package/dist/{types/metrics → metrics}/index.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/receiveSlot.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/receiveSlotManager.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/remoteMedia.d.ts +0 -0
- /package/dist/{types/networkQualityMonitor → networkQualityMonitor}/index.d.ts +0 -0
- /package/dist/{types/personal-meeting-room → personal-meeting-room}/index.d.ts +0 -0
- /package/dist/{types/personal-meeting-room → personal-meeting-room}/request.d.ts +0 -0
- /package/dist/{types/personal-meeting-room → personal-meeting-room}/util.d.ts +0 -0
- /package/dist/{types/reachability → reachability}/request.d.ts +0 -0
- /package/dist/{types/reactions → reactions}/constants.d.ts +0 -0
- /package/dist/{types/reactions → reactions}/reactions.d.ts +0 -0
- /package/dist/{types/reactions → reactions}/reactions.type.d.ts +0 -0
- /package/dist/{types/reconnection-manager → reconnection-manager}/index.d.ts +0 -0
- /package/dist/{types/recording-controller → recording-controller}/enums.d.ts +0 -0
- /package/dist/{types/recording-controller → recording-controller}/index.d.ts +0 -0
- /package/dist/{types/recording-controller → recording-controller}/util.d.ts +0 -0
- /package/dist/{types/roap → roap}/request.d.ts +0 -0
- /package/dist/{types/rtcMetrics → rtcMetrics}/constants.d.ts +0 -0
- /package/dist/{types/rtcMetrics → rtcMetrics}/index.d.ts +0 -0
- /package/dist/{types/statsAnalyzer → statsAnalyzer}/global.d.ts +0 -0
- /package/dist/{types/statsAnalyzer → statsAnalyzer}/index.d.ts +0 -0
- /package/dist/{types/statsAnalyzer → statsAnalyzer}/mqaUtil.d.ts +0 -0
- /package/dist/{types/transcription → transcription}/index.d.ts +0 -0
- /package/dist/{types/webinar → webinar}/collection.d.ts +0 -0
- /package/dist/{types/webinar → webinar}/index.d.ts +0 -0
|
@@ -20,11 +20,11 @@ var _constants = require("../constants");
|
|
|
20
20
|
var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
|
|
21
21
|
var _request = _interopRequireDefault(require("./request"));
|
|
22
22
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
23
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
23
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // @ts-ignore
|
|
24
24
|
/**
|
|
25
25
|
* @class PersonalMeetingRoom
|
|
26
26
|
*/
|
|
27
|
-
var PersonalMeetingRoom = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
27
|
+
var PersonalMeetingRoom = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
28
28
|
(0, _inherits2.default)(PersonalMeetingRoom, _StatelessWebexPlugin);
|
|
29
29
|
var _super = _createSuper(PersonalMeetingRoom);
|
|
30
30
|
/**
|
|
@@ -180,5 +180,4 @@ var PersonalMeetingRoom = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
180
180
|
}]);
|
|
181
181
|
return PersonalMeetingRoom;
|
|
182
182
|
}(_webexCore.StatelessWebexPlugin);
|
|
183
|
-
exports.default = PersonalMeetingRoom;
|
|
184
183
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PersonalMeetingRoom","attrs","options","MEETINGS","pmr","sipUri","link","userId","name","meetingInfo","personalMeetingRoomRequest","PersonalMeetingRoomRequest","pin","preferred","webex","internal","device","passcode","meetingAddress","claimPmr","then","body","set","reject","ParameterError","sipMeetingUri","meetingLink","webExMeetingLink","owner","meetingName","number","meetingNumber","type","_PERSONAL_ROOM_","fetchMeetingInfo","isPmr","TypeError","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS, _PERSONAL_ROOM_} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport PersonalMeetingRoomRequest from './request';\n\n/**\n * @class PersonalMeetingRoom\n */\nexport default class PersonalMeetingRoom extends StatelessWebexPlugin {\n link: any;\n meetingInfo: any;\n name: any;\n personalMeetingRoomRequest: any;\n pmr: any;\n sipUri: any;\n userId: any;\n meetingLink: any;\n number: any;\n\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * The pmr server object\n * @instance\n * @type {Object}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.pmr = null;\n /**\n * The pmr sip Uri\n * @instance\n * @type {String}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.sipUri = null;\n /**\n * The pmr link\n * @instance\n * @type {String}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.link = null;\n /**\n * The pmr server object\n * @instance\n * @type {Object}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.userId = null;\n /**\n * The pmr name\n * @instance\n * @type {String}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.name = null;\n /**\n * The meeting info request server interface\n * @instance\n * @type {MeetingInfo}\n * @private\n * @memberof PersonalMeetingRoom\n */\n this.meetingInfo = attrs.meetingInfo;\n /**\n * The pmr server request interface\n * @instance\n * @type {Object}\n * @private\n * @memberof PersonalMeetingRoom\n */\n // @ts-ignore\n this.personalMeetingRoomRequest = new PersonalMeetingRoomRequest({}, options);\n }\n\n /**\n * claims a pmr and updates the cached PMR values\n * @param {String} link\n * @param {String} pin\n * @param {Boolean} [preferred] defaults to true to set this claimed PMR as the preferred\n * @returns {Promise}\n * @public\n * @memberof PersonalMeetingRoom\n */\n public claim(link: string, pin: string, preferred = true) {\n const options = {\n // @ts-ignore\n userId: this.webex.internal.device.userId,\n passcode: pin,\n meetingAddress: link,\n preferred,\n };\n\n return this.personalMeetingRoomRequest.claimPmr(options).then((pmr) => {\n if (pmr && pmr.body) {\n this.set(pmr.body);\n } else {\n return Promise.reject(new ParameterError('No PMR body provided. PMR values not updated.'));\n }\n\n return pmr.body;\n });\n }\n\n /**\n * @param {Object} body the response body from meeting info request\n * @returns {undefined}\n * @private\n * @memberof PersonalMeetingRoom\n */\n private set(body: any) {\n this.pmr = body;\n this.sipUri = body.sipMeetingUri;\n this.meetingLink = body.webExMeetingLink || body.meetingLink;\n this.userId = body.owner;\n this.name = body.meetingName;\n this.number = body.meetingNumber;\n }\n\n /**\n * TODO: implement TTL for syncing and caching so to not request again and again\n * @param {Object} options\n * @returns {Promise}\n * @public\n * @memberof PersonalMeetingRoom\n */\n public get() {\n const options = {\n type: _PERSONAL_ROOM_,\n };\n\n return this.meetingInfo.fetchMeetingInfo(options).then((pmr) => {\n if (pmr && pmr.body && pmr.body.isPmr) {\n this.set(pmr.body);\n } else {\n return Promise.reject(new TypeError('The PMR requested is NOT a PMR. PMR values not set.'));\n }\n\n return pmr.body;\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AACA;AAEA;AACA;AAEA;AAAmD;AAAA;
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_constants","_parameter","_interopRequireDefault","_request","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","PersonalMeetingRoom","exports","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","MEETINGS","pmr","sipUri","link","userId","name","meetingInfo","personalMeetingRoomRequest","PersonalMeetingRoomRequest","_createClass2","key","value","claim","pin","_this2","preferred","length","undefined","webex","internal","device","passcode","meetingAddress","claimPmr","then","body","set","_promise","reject","ParameterError","sipMeetingUri","meetingLink","webExMeetingLink","owner","meetingName","number","meetingNumber","get","_this3","type","_PERSONAL_ROOM_","fetchMeetingInfo","isPmr","TypeError","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS, _PERSONAL_ROOM_} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport PersonalMeetingRoomRequest from './request';\n\n/**\n * @class PersonalMeetingRoom\n */\nexport default class PersonalMeetingRoom extends StatelessWebexPlugin {\n link: any;\n meetingInfo: any;\n name: any;\n personalMeetingRoomRequest: any;\n pmr: any;\n sipUri: any;\n userId: any;\n meetingLink: any;\n number: any;\n\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * The pmr server object\n * @instance\n * @type {Object}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.pmr = null;\n /**\n * The pmr sip Uri\n * @instance\n * @type {String}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.sipUri = null;\n /**\n * The pmr link\n * @instance\n * @type {String}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.link = null;\n /**\n * The pmr server object\n * @instance\n * @type {Object}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.userId = null;\n /**\n * The pmr name\n * @instance\n * @type {String}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.name = null;\n /**\n * The meeting info request server interface\n * @instance\n * @type {MeetingInfo}\n * @private\n * @memberof PersonalMeetingRoom\n */\n this.meetingInfo = attrs.meetingInfo;\n /**\n * The pmr server request interface\n * @instance\n * @type {Object}\n * @private\n * @memberof PersonalMeetingRoom\n */\n // @ts-ignore\n this.personalMeetingRoomRequest = new PersonalMeetingRoomRequest({}, options);\n }\n\n /**\n * claims a pmr and updates the cached PMR values\n * @param {String} link\n * @param {String} pin\n * @param {Boolean} [preferred] defaults to true to set this claimed PMR as the preferred\n * @returns {Promise}\n * @public\n * @memberof PersonalMeetingRoom\n */\n public claim(link: string, pin: string, preferred = true) {\n const options = {\n // @ts-ignore\n userId: this.webex.internal.device.userId,\n passcode: pin,\n meetingAddress: link,\n preferred,\n };\n\n return this.personalMeetingRoomRequest.claimPmr(options).then((pmr) => {\n if (pmr && pmr.body) {\n this.set(pmr.body);\n } else {\n return Promise.reject(new ParameterError('No PMR body provided. PMR values not updated.'));\n }\n\n return pmr.body;\n });\n }\n\n /**\n * @param {Object} body the response body from meeting info request\n * @returns {undefined}\n * @private\n * @memberof PersonalMeetingRoom\n */\n private set(body: any) {\n this.pmr = body;\n this.sipUri = body.sipMeetingUri;\n this.meetingLink = body.webExMeetingLink || body.meetingLink;\n this.userId = body.owner;\n this.name = body.meetingName;\n this.number = body.meetingNumber;\n }\n\n /**\n * TODO: implement TTL for syncing and caching so to not request again and again\n * @param {Object} options\n * @returns {Promise}\n * @public\n * @memberof PersonalMeetingRoom\n */\n public get() {\n const options = {\n type: _PERSONAL_ROOM_,\n };\n\n return this.meetingInfo.fetchMeetingInfo(options).then((pmr) => {\n if (pmr && pmr.body && pmr.body.isPmr) {\n this.set(pmr.body);\n } else {\n return Promise.reject(new TypeError('The PMR requested is NOT a PMR. PMR values not set.'));\n }\n\n return pmr.body;\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -20,11 +20,11 @@ var _constants = require("../constants");
|
|
|
20
20
|
var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
|
|
21
21
|
var _util = _interopRequireDefault(require("./util"));
|
|
22
22
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
23
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
23
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // @ts-ignore
|
|
24
24
|
/**
|
|
25
25
|
* @class MeetingInfoRequest
|
|
26
26
|
*/
|
|
27
|
-
var PersonalMeetingRoomRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
27
|
+
var PersonalMeetingRoomRequest = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
28
28
|
(0, _inherits2.default)(PersonalMeetingRoomRequest, _StatelessWebexPlugin);
|
|
29
29
|
var _super = _createSuper(PersonalMeetingRoomRequest);
|
|
30
30
|
function PersonalMeetingRoomRequest() {
|
|
@@ -66,5 +66,4 @@ var PersonalMeetingRoomRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
66
66
|
}]);
|
|
67
67
|
return PersonalMeetingRoomRequest;
|
|
68
68
|
}(_webexCore.StatelessWebexPlugin);
|
|
69
|
-
exports.default = PersonalMeetingRoomRequest;
|
|
70
69
|
//# sourceMappingURL=request.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PersonalMeetingRoomRequest","MEETINGS","options","userId","passcode","meetingAddress","preferred","ParameterError","validPin","PersonalMeetingRoomUtil","getClaimPmrPin","reject","validLink","getClaimPmrLink","request","getClaimedRequestParams","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport PersonalMeetingRoomUtil from './util';\n\n/**\n * @class MeetingInfoRequest\n */\nexport default class PersonalMeetingRoomRequest extends StatelessWebexPlugin {\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} options with format of {userId, passcode, meetingAddress, preferred}\n * @returns {Promise} returns a promise that resolves/rejects the result of the request\n * @memberof PersonalMeetingRoomRequest\n */\n claimPmr(options: any) {\n if (\n !options ||\n !options.userId ||\n !options.passcode ||\n !options.meetingAddress ||\n !options.preferred\n ) {\n throw new ParameterError(\n 'Claiming a PMR should be done with userId, passcode, preferred, and meetingAddress in options.'\n );\n }\n const validPin = PersonalMeetingRoomUtil.getClaimPmrPin(options.passcode);\n\n if (!validPin) {\n return Promise.reject(new ParameterError('The host pin provided was of an invalid format'));\n }\n const validLink = PersonalMeetingRoomUtil.getClaimPmrLink(options.meetingAddress);\n\n if (!validLink) {\n return Promise.reject(new ParameterError('The PMR link provided was of an invalid format'));\n }\n const request = PersonalMeetingRoomUtil.getClaimedRequestParams(validLink, validPin, options);\n\n // @ts-ignore\n return this.request(request);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AACA;AAEA;AACA;AAEA;AAA6C;AAAA;
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_constants","_parameter","_interopRequireDefault","_util","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","PersonalMeetingRoomRequest","exports","_StatelessWebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","MEETINGS","_createClass2","key","value","claimPmr","options","userId","passcode","meetingAddress","preferred","ParameterError","validPin","PersonalMeetingRoomUtil","getClaimPmrPin","_promise","reject","validLink","getClaimPmrLink","request","getClaimedRequestParams","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport PersonalMeetingRoomUtil from './util';\n\n/**\n * @class MeetingInfoRequest\n */\nexport default class PersonalMeetingRoomRequest extends StatelessWebexPlugin {\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} options with format of {userId, passcode, meetingAddress, preferred}\n * @returns {Promise} returns a promise that resolves/rejects the result of the request\n * @memberof PersonalMeetingRoomRequest\n */\n claimPmr(options: any) {\n if (\n !options ||\n !options.userId ||\n !options.passcode ||\n !options.meetingAddress ||\n !options.preferred\n ) {\n throw new ParameterError(\n 'Claiming a PMR should be done with userId, passcode, preferred, and meetingAddress in options.'\n );\n }\n const validPin = PersonalMeetingRoomUtil.getClaimPmrPin(options.passcode);\n\n if (!validPin) {\n return Promise.reject(new ParameterError('The host pin provided was of an invalid format'));\n }\n const validLink = PersonalMeetingRoomUtil.getClaimPmrLink(options.meetingAddress);\n\n if (!validLink) {\n return Promise.reject(new ParameterError('The PMR link provided was of an invalid format'));\n }\n const request = PersonalMeetingRoomUtil.getClaimedRequestParams(validLink, validPin, options);\n\n // @ts-ignore\n return this.request(request);\n }\n}\n"],"mappings":"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"}
|
|
@@ -38,6 +38,5 @@ PersonalMeetingRoomUtil.getClaimedRequestParams = function (link, pin, options)
|
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
40
|
};
|
|
41
|
-
var _default = PersonalMeetingRoomUtil;
|
|
42
|
-
exports.default = _default;
|
|
41
|
+
var _default = exports.default = PersonalMeetingRoomUtil;
|
|
43
42
|
//# sourceMappingURL=util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PersonalMeetingRoomUtil","getClaimPmrLink","pmrLink","validator","VALID_PMR_ADDRESS","test","match","VALID_PMR_LINK","WEBEX_DOT_COM","getClaimPmrPin","hostPin","VALID_PIN","getClaimedRequestParams","link","pin","options","method","HTTP_VERBS","POST","api","HECATE","resource","CMR_MEETINGS","CLAIM","body","userId","passcode","preferred","meetingAddress"],"sources":["util.ts"],"sourcesContent":["import {\n HTTP_VERBS,\n VALID_PIN,\n VALID_PMR_ADDRESS,\n VALID_PMR_LINK,\n CMR_MEETINGS,\n CLAIM,\n HECATE,\n WEBEX_DOT_COM,\n} from '../constants';\n\nconst PersonalMeetingRoomUtil: any = {};\n\nPersonalMeetingRoomUtil.getClaimPmrLink = (pmrLink) => {\n let validator = VALID_PMR_ADDRESS.test(pmrLink);\n\n if (validator) {\n return pmrLink;\n }\n validator = pmrLink.match(VALID_PMR_LINK);\n if (validator) {\n // userId + '@' + site + '.webex.com'\n return `${validator[4]}@${validator[2]}.${WEBEX_DOT_COM}`;\n }\n\n return null;\n};\n\nPersonalMeetingRoomUtil.getClaimPmrPin = (hostPin) => {\n if (VALID_PIN.test(hostPin)) {\n return hostPin;\n }\n\n return null;\n};\n\nPersonalMeetingRoomUtil.getClaimedRequestParams = (link, pin, options) => ({\n method: HTTP_VERBS.POST,\n api: HECATE,\n resource: `/${CMR_MEETINGS}/${CLAIM}`,\n body: {\n userId: options.userId,\n passcode: pin,\n preferred: options.preferred,\n meetingAddress: link,\n },\n});\n\nexport default PersonalMeetingRoomUtil;\n"],"mappings":";;;;;;;AAAA;AAWA,
|
|
1
|
+
{"version":3,"names":["_constants","require","PersonalMeetingRoomUtil","getClaimPmrLink","pmrLink","validator","VALID_PMR_ADDRESS","test","match","VALID_PMR_LINK","concat","WEBEX_DOT_COM","getClaimPmrPin","hostPin","VALID_PIN","getClaimedRequestParams","link","pin","options","method","HTTP_VERBS","POST","api","HECATE","resource","CMR_MEETINGS","CLAIM","body","userId","passcode","preferred","meetingAddress","_default","exports","default"],"sources":["util.ts"],"sourcesContent":["import {\n HTTP_VERBS,\n VALID_PIN,\n VALID_PMR_ADDRESS,\n VALID_PMR_LINK,\n CMR_MEETINGS,\n CLAIM,\n HECATE,\n WEBEX_DOT_COM,\n} from '../constants';\n\nconst PersonalMeetingRoomUtil: any = {};\n\nPersonalMeetingRoomUtil.getClaimPmrLink = (pmrLink) => {\n let validator = VALID_PMR_ADDRESS.test(pmrLink);\n\n if (validator) {\n return pmrLink;\n }\n validator = pmrLink.match(VALID_PMR_LINK);\n if (validator) {\n // userId + '@' + site + '.webex.com'\n return `${validator[4]}@${validator[2]}.${WEBEX_DOT_COM}`;\n }\n\n return null;\n};\n\nPersonalMeetingRoomUtil.getClaimPmrPin = (hostPin) => {\n if (VALID_PIN.test(hostPin)) {\n return hostPin;\n }\n\n return null;\n};\n\nPersonalMeetingRoomUtil.getClaimedRequestParams = (link, pin, options) => ({\n method: HTTP_VERBS.POST,\n api: HECATE,\n resource: `/${CMR_MEETINGS}/${CLAIM}`,\n body: {\n userId: options.userId,\n passcode: pin,\n preferred: options.preferred,\n meetingAddress: link,\n },\n});\n\nexport default PersonalMeetingRoomUtil;\n"],"mappings":";;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAWA,IAAMC,uBAA4B,GAAG,CAAC,CAAC;AAEvCA,uBAAuB,CAACC,eAAe,GAAG,UAACC,OAAO,EAAK;EACrD,IAAIC,SAAS,GAAGC,4BAAiB,CAACC,IAAI,CAACH,OAAO,CAAC;EAE/C,IAAIC,SAAS,EAAE;IACb,OAAOD,OAAO;EAChB;EACAC,SAAS,GAAGD,OAAO,CAACI,KAAK,CAACC,yBAAc,CAAC;EACzC,IAAIJ,SAAS,EAAE;IACb;IACA,UAAAK,MAAA,CAAUL,SAAS,CAAC,CAAC,CAAC,OAAAK,MAAA,CAAIL,SAAS,CAAC,CAAC,CAAC,OAAAK,MAAA,CAAIC,wBAAa;EACzD;EAEA,OAAO,IAAI;AACb,CAAC;AAEDT,uBAAuB,CAACU,cAAc,GAAG,UAACC,OAAO,EAAK;EACpD,IAAIC,oBAAS,CAACP,IAAI,CAACM,OAAO,CAAC,EAAE;IAC3B,OAAOA,OAAO;EAChB;EAEA,OAAO,IAAI;AACb,CAAC;AAEDX,uBAAuB,CAACa,uBAAuB,GAAG,UAACC,IAAI,EAAEC,GAAG,EAAEC,OAAO;EAAA,OAAM;IACzEC,MAAM,EAAEC,qBAAU,CAACC,IAAI;IACvBC,GAAG,EAAEC,iBAAM;IACXC,QAAQ,MAAAd,MAAA,CAAMe,uBAAY,OAAAf,MAAA,CAAIgB,gBAAK,CAAE;IACrCC,IAAI,EAAE;MACJC,MAAM,EAAEV,OAAO,CAACU,MAAM;MACtBC,QAAQ,EAAEZ,GAAG;MACba,SAAS,EAAEZ,OAAO,CAACY,SAAS;MAC5BC,cAAc,EAAEf;IAClB;EACF,CAAC;AAAA,CAAC;AAAC,IAAAgB,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEYhC,uBAAuB"}
|
|
@@ -20,12 +20,12 @@ var DEFAULT_TIMEOUT = 3000;
|
|
|
20
20
|
var VIDEO_MESH_TIMEOUT = 1000;
|
|
21
21
|
|
|
22
22
|
// result for a specific transport protocol (like udp or tcp)
|
|
23
|
+
|
|
24
|
+
// reachability result for a specific media cluster
|
|
23
25
|
/**
|
|
24
26
|
* A class that handles reachability checks for a single cluster.
|
|
25
27
|
*/
|
|
26
|
-
var ClusterReachability = /*#__PURE__*/function () {
|
|
27
|
-
// this defer is resolved once reachability checks for this cluster are completed
|
|
28
|
-
|
|
28
|
+
var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function () {
|
|
29
29
|
/**
|
|
30
30
|
* Constructor for ClusterReachability
|
|
31
31
|
* @param {string} name cluster name
|
|
@@ -35,9 +35,11 @@ var ClusterReachability = /*#__PURE__*/function () {
|
|
|
35
35
|
(0, _classCallCheck2.default)(this, ClusterReachability);
|
|
36
36
|
(0, _defineProperty2.default)(this, "numUdpUrls", void 0);
|
|
37
37
|
(0, _defineProperty2.default)(this, "numTcpUrls", void 0);
|
|
38
|
+
(0, _defineProperty2.default)(this, "numXTlsUrls", void 0);
|
|
38
39
|
(0, _defineProperty2.default)(this, "result", void 0);
|
|
39
40
|
(0, _defineProperty2.default)(this, "pc", void 0);
|
|
40
41
|
(0, _defineProperty2.default)(this, "defer", void 0);
|
|
42
|
+
// this defer is resolved once reachability checks for this cluster are completed
|
|
41
43
|
(0, _defineProperty2.default)(this, "startTimestamp", void 0);
|
|
42
44
|
(0, _defineProperty2.default)(this, "isVideoMesh", void 0);
|
|
43
45
|
(0, _defineProperty2.default)(this, "name", void 0);
|
|
@@ -45,6 +47,7 @@ var ClusterReachability = /*#__PURE__*/function () {
|
|
|
45
47
|
this.isVideoMesh = clusterInfo.isVideoMesh;
|
|
46
48
|
this.numUdpUrls = clusterInfo.udp.length;
|
|
47
49
|
this.numTcpUrls = clusterInfo.tcp.length;
|
|
50
|
+
this.numXTlsUrls = clusterInfo.xtls.length;
|
|
48
51
|
this.pc = this.createPeerConnection(clusterInfo);
|
|
49
52
|
this.defer = new _common.Defer();
|
|
50
53
|
this.result = {
|
|
@@ -96,8 +99,15 @@ var ClusterReachability = /*#__PURE__*/function () {
|
|
|
96
99
|
urls: [(0, _util.convertStunUrlToTurn)(urlString, 'tcp')]
|
|
97
100
|
};
|
|
98
101
|
});
|
|
102
|
+
var turnTlsIceServers = cluster.xtls.map(function (urlString) {
|
|
103
|
+
return {
|
|
104
|
+
username: 'webexturnreachuser',
|
|
105
|
+
credential: 'webexturnreachpwd',
|
|
106
|
+
urls: [(0, _util.convertStunUrlToTurnTls)(urlString)]
|
|
107
|
+
};
|
|
108
|
+
});
|
|
99
109
|
return {
|
|
100
|
-
iceServers: [].concat((0, _toConsumableArray2.default)(udpIceServers), (0, _toConsumableArray2.default)(tcpIceServers)),
|
|
110
|
+
iceServers: [].concat((0, _toConsumableArray2.default)(udpIceServers), (0, _toConsumableArray2.default)(tcpIceServers), (0, _toConsumableArray2.default)(turnTlsIceServers)),
|
|
101
111
|
iceCandidatePoolSize: 0,
|
|
102
112
|
iceTransportPolicy: 'all'
|
|
103
113
|
};
|
|
@@ -204,7 +214,7 @@ var ClusterReachability = /*#__PURE__*/function () {
|
|
|
204
214
|
key: "haveWeGotAllResults",
|
|
205
215
|
value: function haveWeGotAllResults() {
|
|
206
216
|
var _this2 = this;
|
|
207
|
-
return ['udp', 'tcp'].every(function (protocol) {
|
|
217
|
+
return ['udp', 'tcp', 'xtls'].every(function (protocol) {
|
|
208
218
|
return _this2.result[protocol].result === 'reachable' || _this2.result[protocol].result === 'untested';
|
|
209
219
|
});
|
|
210
220
|
}
|
|
@@ -238,6 +248,7 @@ var ClusterReachability = /*#__PURE__*/function () {
|
|
|
238
248
|
value: function registerIceCandidateListener() {
|
|
239
249
|
var _this3 = this;
|
|
240
250
|
this.pc.onicecandidate = function (e) {
|
|
251
|
+
var TURN_TLS_PORT = 443;
|
|
241
252
|
var CANDIDATE_TYPES = {
|
|
242
253
|
SERVER_REFLEXIVE: 'srflx',
|
|
243
254
|
RELAY: 'relay'
|
|
@@ -248,7 +259,8 @@ var ClusterReachability = /*#__PURE__*/function () {
|
|
|
248
259
|
_this3.addPublicIP('udp', e.candidate.address);
|
|
249
260
|
}
|
|
250
261
|
if (e.candidate.type === CANDIDATE_TYPES.RELAY) {
|
|
251
|
-
|
|
262
|
+
var protocol = e.candidate.port === TURN_TLS_PORT ? 'xtls' : 'tcp';
|
|
263
|
+
_this3.storeLatencyResult(protocol, _this3.getElapsedTime());
|
|
252
264
|
// we don't add public IP for TCP, because in the case of relay candidates
|
|
253
265
|
// e.candidate.address is the TURN server address, not the client's public IP
|
|
254
266
|
}
|
|
@@ -269,7 +281,7 @@ var ClusterReachability = /*#__PURE__*/function () {
|
|
|
269
281
|
*/
|
|
270
282
|
}, {
|
|
271
283
|
key: "start",
|
|
272
|
-
value: function () {
|
|
284
|
+
value: (function () {
|
|
273
285
|
var _start = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
274
286
|
var offer;
|
|
275
287
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
@@ -290,34 +302,37 @@ var ClusterReachability = /*#__PURE__*/function () {
|
|
|
290
302
|
this.result.tcp = {
|
|
291
303
|
result: this.numTcpUrls > 0 ? 'unreachable' : 'untested'
|
|
292
304
|
};
|
|
293
|
-
|
|
294
|
-
|
|
305
|
+
this.result.xtls = {
|
|
306
|
+
result: this.numXTlsUrls > 0 ? 'unreachable' : 'untested'
|
|
307
|
+
};
|
|
308
|
+
_context.prev = 6;
|
|
309
|
+
_context.next = 9;
|
|
295
310
|
return this.pc.createOffer({
|
|
296
311
|
offerToReceiveAudio: true
|
|
297
312
|
});
|
|
298
|
-
case
|
|
313
|
+
case 9:
|
|
299
314
|
offer = _context.sent;
|
|
300
315
|
this.startTimestamp = performance.now();
|
|
301
316
|
|
|
302
317
|
// not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer
|
|
303
318
|
// we just need to make this call to trigger the ICE gathering process
|
|
304
319
|
this.pc.setLocalDescription(offer);
|
|
305
|
-
_context.next =
|
|
320
|
+
_context.next = 14;
|
|
306
321
|
return this.gatherIceCandidates();
|
|
307
|
-
case
|
|
308
|
-
_context.next =
|
|
322
|
+
case 14:
|
|
323
|
+
_context.next = 19;
|
|
309
324
|
break;
|
|
310
|
-
case
|
|
311
|
-
_context.prev =
|
|
312
|
-
_context.t0 = _context["catch"](
|
|
325
|
+
case 16:
|
|
326
|
+
_context.prev = 16;
|
|
327
|
+
_context.t0 = _context["catch"](6);
|
|
313
328
|
_loggerProxy.default.logger.warn("Reachability:ClusterReachability#start --> Error: ", _context.t0);
|
|
314
|
-
case 18:
|
|
315
|
-
return _context.abrupt("return", this.result);
|
|
316
329
|
case 19:
|
|
330
|
+
return _context.abrupt("return", this.result);
|
|
331
|
+
case 20:
|
|
317
332
|
case "end":
|
|
318
333
|
return _context.stop();
|
|
319
334
|
}
|
|
320
|
-
}, _callee, this, [[
|
|
335
|
+
}, _callee, this, [[6, 16]]);
|
|
321
336
|
}));
|
|
322
337
|
function start() {
|
|
323
338
|
return _start.apply(this, arguments);
|
|
@@ -329,6 +344,7 @@ var ClusterReachability = /*#__PURE__*/function () {
|
|
|
329
344
|
*
|
|
330
345
|
* @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached
|
|
331
346
|
*/
|
|
347
|
+
)
|
|
332
348
|
}, {
|
|
333
349
|
key: "gatherIceCandidates",
|
|
334
350
|
value: function gatherIceCandidates() {
|
|
@@ -352,5 +368,4 @@ var ClusterReachability = /*#__PURE__*/function () {
|
|
|
352
368
|
}]);
|
|
353
369
|
return ClusterReachability;
|
|
354
370
|
}();
|
|
355
|
-
exports.ClusterReachability = ClusterReachability;
|
|
356
371
|
//# sourceMappingURL=clusterReachability.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","ClusterReachability","name","clusterInfo","isVideoMesh","numUdpUrls","udp","length","numTcpUrls","tcp","pc","createPeerConnection","defer","Defer","result","xtls","Math","round","performance","now","startTimestamp","cluster","udpIceServers","map","url","username","credential","urls","tcpIceServers","urlString","convertStunUrlToTurn","iceServers","iceCandidatePoolSize","iceTransportPolicy","config","buildPeerConnectionConfig","peerConnection","RTCPeerConnection","peerConnectionError","LoggerProxy","logger","warn","undefined","onicecandidate","onicegatheringstatechange","close","resolve","protocol","publicIP","clientMediaIPs","includes","push","COMPLETE","ICE_GATHERING_STATE","iceConnectionState","closePeerConnection","finishReachabilityCheck","every","latency","latencyInMilliseconds","log","e","CANDIDATE_TYPES","SERVER_REFLEXIVE","RELAY","candidate","type","storeLatencyResult","getElapsedTime","addPublicIP","address","haveWeGotAllResults","createOffer","offerToReceiveAudio","offer","setLocalDescription","gatherIceCandidates","timeout","registerIceGatheringStateChangeListener","registerIceCandidateListener","setTimeout","CLOSED","CONNECTION_STATE","connectionState","promise"],"sources":["clusterReachability.ts"],"sourcesContent":["import {Defer} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ClusterNode} from './request';\nimport {convertStunUrlToTurn} from './util';\n\nimport {ICE_GATHERING_STATE, CONNECTION_STATE} from '../constants';\n\nconst DEFAULT_TIMEOUT = 3000;\nconst VIDEO_MESH_TIMEOUT = 1000;\n\n// result for a specific transport protocol (like udp or tcp)\nexport type TransportResult = {\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds?: number; // amount of time it took to get the first ICE candidate\n clientMediaIPs?: string[];\n};\n\n// reachability result for a specific media cluster\nexport type ClusterReachabilityResult = {\n udp: TransportResult;\n tcp: TransportResult;\n xtls: TransportResult;\n};\n\n/**\n * A class that handles reachability checks for a single cluster.\n */\nexport class ClusterReachability {\n private numUdpUrls: number;\n private numTcpUrls: number;\n private result: ClusterReachabilityResult;\n private pc?: RTCPeerConnection;\n private defer: Defer; // this defer is resolved once reachability checks for this cluster are completed\n private startTimestamp: number;\n public readonly isVideoMesh: boolean;\n public readonly name;\n\n /**\n * Constructor for ClusterReachability\n * @param {string} name cluster name\n * @param {ClusterNode} clusterInfo information about the media cluster\n */\n constructor(name: string, clusterInfo: ClusterNode) {\n this.name = name;\n this.isVideoMesh = clusterInfo.isVideoMesh;\n this.numUdpUrls = clusterInfo.udp.length;\n this.numTcpUrls = clusterInfo.tcp.length;\n\n this.pc = this.createPeerConnection(clusterInfo);\n\n this.defer = new Defer();\n this.result = {\n udp: {\n result: 'untested',\n },\n tcp: {\n result: 'untested',\n },\n xtls: {\n result: 'untested',\n },\n };\n }\n\n /**\n * Gets total elapsed time, can be called only after start() is called\n * @returns {Number} Milliseconds\n */\n private getElapsedTime() {\n return Math.round(performance.now() - this.startTimestamp);\n }\n\n /**\n * Generate peerConnection config settings\n * @param {ClusterNode} cluster\n * @returns {RTCConfiguration} peerConnectionConfig\n */\n private buildPeerConnectionConfig(cluster: ClusterNode): RTCConfiguration {\n const udpIceServers = cluster.udp.map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n // STUN servers are contacted only using UDP, so in order to test TCP reachability\n // we pretend that Linus is a TURN server, because we can explicitly say \"transport=tcp\" in TURN urls.\n // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).\n const tcpIceServers = cluster.tcp.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurn(urlString, 'tcp')],\n };\n });\n\n return {\n iceServers: [...udpIceServers, ...tcpIceServers],\n iceCandidatePoolSize: 0,\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {ClusterNode} clusterInfo information about the media cluster\n * @returns {RTCPeerConnection} peerConnection\n */\n private createPeerConnection(clusterInfo: ClusterNode) {\n try {\n const config = this.buildPeerConnectionConfig(clusterInfo);\n\n const peerConnection = new RTCPeerConnection(config);\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.warn(\n `Reachability:index#createPeerConnection --> Error creating peerConnection:`,\n peerConnectionError\n );\n\n return undefined;\n }\n }\n\n /**\n * @returns {ClusterReachabilityResult} reachability result for this cluster\n */\n getResult() {\n return this.result;\n }\n\n /**\n * Closes the peerConnection\n *\n * @returns {void}\n */\n private closePeerConnection() {\n if (this.pc) {\n this.pc.onicecandidate = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.close();\n }\n }\n\n /**\n * Resolves the defer, indicating that reachability checks for this cluster are completed\n *\n * @returns {void}\n */\n private finishReachabilityCheck() {\n this.defer.resolve();\n }\n\n /**\n * Adds public IP (client media IPs)\n * @param {string} protocol\n * @param {string} publicIP\n * @returns {void}\n */\n private addPublicIP(protocol: 'udp' | 'tcp', publicIP?: string | null) {\n const result = this.result[protocol];\n\n if (publicIP) {\n if (result.clientMediaIPs) {\n if (!result.clientMediaIPs.includes(publicIP)) {\n result.clientMediaIPs.push(publicIP);\n }\n } else {\n result.clientMediaIPs = [publicIP];\n }\n }\n }\n\n /**\n * Registers a listener for the iceGatheringStateChange event\n *\n * @returns {void}\n */\n private registerIceGatheringStateChangeListener() {\n this.pc.onicegatheringstatechange = () => {\n const {COMPLETE} = ICE_GATHERING_STATE;\n\n if (this.pc.iceConnectionState === COMPLETE) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n };\n }\n\n /**\n * Checks if we have the results for all the protocols (UDP and TCP)\n *\n * @returns {boolean} true if we have all results, false otherwise\n */\n private haveWeGotAllResults(): boolean {\n return ['udp', 'tcp'].every(\n (protocol) =>\n this.result[protocol].result === 'reachable' || this.result[protocol].result === 'untested'\n );\n }\n\n /**\n * Stores the latency in the result for the given protocol and marks it as reachable\n *\n * @param {string} protocol\n * @param {number} latency\n * @returns {void}\n */\n private storeLatencyResult(protocol: 'udp' | 'tcp', latency: number) {\n const result = this.result[protocol];\n\n if (result.latencyInMilliseconds === undefined) {\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#storeLatencyResult --> Successfully reached ${this.name} over ${protocol}: ${latency}ms`\n );\n result.latencyInMilliseconds = latency;\n result.result = 'reachable';\n }\n }\n\n /**\n * Registers a listener for the icecandidate event\n *\n * @returns {void}\n */\n private registerIceCandidateListener() {\n this.pc.onicecandidate = (e) => {\n const CANDIDATE_TYPES = {\n SERVER_REFLEXIVE: 'srflx',\n RELAY: 'relay',\n };\n\n if (e.candidate) {\n if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {\n this.storeLatencyResult('udp', this.getElapsedTime());\n this.addPublicIP('udp', e.candidate.address);\n }\n\n if (e.candidate.type === CANDIDATE_TYPES.RELAY) {\n this.storeLatencyResult('tcp', this.getElapsedTime());\n // we don't add public IP for TCP, because in the case of relay candidates\n // e.candidate.address is the TURN server address, not the client's public IP\n }\n\n if (this.haveWeGotAllResults()) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n };\n }\n\n /**\n * Starts the process of doing UDP and TCP reachability checks on the media cluster.\n * XTLS reachability checking is not supported.\n *\n * @returns {Promise}\n */\n async start(): Promise<ClusterReachabilityResult> {\n if (!this.pc) {\n LoggerProxy.logger.warn(\n `Reachability:ClusterReachability#start --> Error: peerConnection is undefined`\n );\n\n return this.result;\n }\n\n // Initialize this.result as saying that nothing is reachable.\n // It will get updated as we go along and successfully gather ICE candidates.\n this.result.udp = {\n result: this.numUdpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.tcp = {\n result: this.numTcpUrls > 0 ? 'unreachable' : 'untested',\n };\n\n try {\n const offer = await this.pc.createOffer({offerToReceiveAudio: true});\n\n this.startTimestamp = performance.now();\n\n // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer\n // we just need to make this call to trigger the ICE gathering process\n this.pc.setLocalDescription(offer);\n\n await this.gatherIceCandidates();\n } catch (error) {\n LoggerProxy.logger.warn(`Reachability:ClusterReachability#start --> Error: `, error);\n }\n\n return this.result;\n }\n\n /**\n * Starts the process of gathering ICE candidates\n *\n * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached\n */\n private gatherIceCandidates() {\n const timeout = this.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT;\n\n this.registerIceGatheringStateChangeListener();\n this.registerIceCandidateListener();\n\n // Set maximum timeout\n setTimeout(() => {\n const {CLOSED} = CONNECTION_STATE;\n\n // Close any open peerConnections\n if (this.pc.connectionState !== CLOSED) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }, timeout);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_common","require","_loggerProxy","_interopRequireDefault","_util","_constants","DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","ClusterReachability","exports","name","clusterInfo","_classCallCheck2","default","_defineProperty2","isVideoMesh","numUdpUrls","udp","length","numTcpUrls","tcp","numXTlsUrls","xtls","pc","createPeerConnection","defer","Defer","result","_createClass2","key","value","getElapsedTime","Math","round","performance","now","startTimestamp","buildPeerConnectionConfig","cluster","udpIceServers","map","url","username","credential","urls","tcpIceServers","urlString","convertStunUrlToTurn","turnTlsIceServers","convertStunUrlToTurnTls","iceServers","concat","_toConsumableArray2","iceCandidatePoolSize","iceTransportPolicy","config","peerConnection","RTCPeerConnection","peerConnectionError","LoggerProxy","logger","warn","undefined","getResult","closePeerConnection","onicecandidate","onicegatheringstatechange","close","finishReachabilityCheck","resolve","addPublicIP","protocol","publicIP","clientMediaIPs","includes","push","registerIceGatheringStateChangeListener","_this","COMPLETE","ICE_GATHERING_STATE","iceConnectionState","haveWeGotAllResults","_this2","every","storeLatencyResult","latency","latencyInMilliseconds","log","registerIceCandidateListener","_this3","e","TURN_TLS_PORT","CANDIDATE_TYPES","SERVER_REFLEXIVE","RELAY","candidate","type","address","port","_start","_asyncToGenerator2","_regenerator","mark","_callee","offer","wrap","_callee$","_context","prev","next","abrupt","createOffer","offerToReceiveAudio","sent","setLocalDescription","gatherIceCandidates","t0","stop","start","apply","arguments","_this4","timeout","setTimeout","CLOSED","CONNECTION_STATE","connectionState","promise"],"sources":["clusterReachability.ts"],"sourcesContent":["import {Defer} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ClusterNode} from './request';\nimport {convertStunUrlToTurn, convertStunUrlToTurnTls} from './util';\n\nimport {ICE_GATHERING_STATE, CONNECTION_STATE} from '../constants';\n\nconst DEFAULT_TIMEOUT = 3000;\nconst VIDEO_MESH_TIMEOUT = 1000;\n\n// result for a specific transport protocol (like udp or tcp)\nexport type TransportResult = {\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds?: number; // amount of time it took to get the first ICE candidate\n clientMediaIPs?: string[];\n};\n\n// reachability result for a specific media cluster\nexport type ClusterReachabilityResult = {\n udp: TransportResult;\n tcp: TransportResult;\n xtls: TransportResult;\n};\n\n/**\n * A class that handles reachability checks for a single cluster.\n */\nexport class ClusterReachability {\n private numUdpUrls: number;\n private numTcpUrls: number;\n private numXTlsUrls: number;\n private result: ClusterReachabilityResult;\n private pc?: RTCPeerConnection;\n private defer: Defer; // this defer is resolved once reachability checks for this cluster are completed\n private startTimestamp: number;\n public readonly isVideoMesh: boolean;\n public readonly name;\n\n /**\n * Constructor for ClusterReachability\n * @param {string} name cluster name\n * @param {ClusterNode} clusterInfo information about the media cluster\n */\n constructor(name: string, clusterInfo: ClusterNode) {\n this.name = name;\n this.isVideoMesh = clusterInfo.isVideoMesh;\n this.numUdpUrls = clusterInfo.udp.length;\n this.numTcpUrls = clusterInfo.tcp.length;\n this.numXTlsUrls = clusterInfo.xtls.length;\n\n this.pc = this.createPeerConnection(clusterInfo);\n\n this.defer = new Defer();\n this.result = {\n udp: {\n result: 'untested',\n },\n tcp: {\n result: 'untested',\n },\n xtls: {\n result: 'untested',\n },\n };\n }\n\n /**\n * Gets total elapsed time, can be called only after start() is called\n * @returns {Number} Milliseconds\n */\n private getElapsedTime() {\n return Math.round(performance.now() - this.startTimestamp);\n }\n\n /**\n * Generate peerConnection config settings\n * @param {ClusterNode} cluster\n * @returns {RTCConfiguration} peerConnectionConfig\n */\n private buildPeerConnectionConfig(cluster: ClusterNode): RTCConfiguration {\n const udpIceServers = cluster.udp.map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n // STUN servers are contacted only using UDP, so in order to test TCP reachability\n // we pretend that Linus is a TURN server, because we can explicitly say \"transport=tcp\" in TURN urls.\n // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).\n const tcpIceServers = cluster.tcp.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurn(urlString, 'tcp')],\n };\n });\n\n const turnTlsIceServers = cluster.xtls.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurnTls(urlString)],\n };\n });\n\n return {\n iceServers: [...udpIceServers, ...tcpIceServers, ...turnTlsIceServers],\n iceCandidatePoolSize: 0,\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {ClusterNode} clusterInfo information about the media cluster\n * @returns {RTCPeerConnection} peerConnection\n */\n private createPeerConnection(clusterInfo: ClusterNode) {\n try {\n const config = this.buildPeerConnectionConfig(clusterInfo);\n\n const peerConnection = new RTCPeerConnection(config);\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.warn(\n `Reachability:index#createPeerConnection --> Error creating peerConnection:`,\n peerConnectionError\n );\n\n return undefined;\n }\n }\n\n /**\n * @returns {ClusterReachabilityResult} reachability result for this cluster\n */\n getResult() {\n return this.result;\n }\n\n /**\n * Closes the peerConnection\n *\n * @returns {void}\n */\n private closePeerConnection() {\n if (this.pc) {\n this.pc.onicecandidate = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.close();\n }\n }\n\n /**\n * Resolves the defer, indicating that reachability checks for this cluster are completed\n *\n * @returns {void}\n */\n private finishReachabilityCheck() {\n this.defer.resolve();\n }\n\n /**\n * Adds public IP (client media IPs)\n * @param {string} protocol\n * @param {string} publicIP\n * @returns {void}\n */\n private addPublicIP(protocol: 'udp' | 'tcp', publicIP?: string | null) {\n const result = this.result[protocol];\n\n if (publicIP) {\n if (result.clientMediaIPs) {\n if (!result.clientMediaIPs.includes(publicIP)) {\n result.clientMediaIPs.push(publicIP);\n }\n } else {\n result.clientMediaIPs = [publicIP];\n }\n }\n }\n\n /**\n * Registers a listener for the iceGatheringStateChange event\n *\n * @returns {void}\n */\n private registerIceGatheringStateChangeListener() {\n this.pc.onicegatheringstatechange = () => {\n const {COMPLETE} = ICE_GATHERING_STATE;\n\n if (this.pc.iceConnectionState === COMPLETE) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n };\n }\n\n /**\n * Checks if we have the results for all the protocols (UDP and TCP)\n *\n * @returns {boolean} true if we have all results, false otherwise\n */\n private haveWeGotAllResults(): boolean {\n return ['udp', 'tcp', 'xtls'].every(\n (protocol) =>\n this.result[protocol].result === 'reachable' || this.result[protocol].result === 'untested'\n );\n }\n\n /**\n * Stores the latency in the result for the given protocol and marks it as reachable\n *\n * @param {string} protocol\n * @param {number} latency\n * @returns {void}\n */\n private storeLatencyResult(protocol: 'udp' | 'tcp' | 'xtls', latency: number) {\n const result = this.result[protocol];\n\n if (result.latencyInMilliseconds === undefined) {\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#storeLatencyResult --> Successfully reached ${this.name} over ${protocol}: ${latency}ms`\n );\n result.latencyInMilliseconds = latency;\n result.result = 'reachable';\n }\n }\n\n /**\n * Registers a listener for the icecandidate event\n *\n * @returns {void}\n */\n private registerIceCandidateListener() {\n this.pc.onicecandidate = (e) => {\n const TURN_TLS_PORT = 443;\n const CANDIDATE_TYPES = {\n SERVER_REFLEXIVE: 'srflx',\n RELAY: 'relay',\n };\n\n if (e.candidate) {\n if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {\n this.storeLatencyResult('udp', this.getElapsedTime());\n this.addPublicIP('udp', e.candidate.address);\n }\n\n if (e.candidate.type === CANDIDATE_TYPES.RELAY) {\n const protocol = e.candidate.port === TURN_TLS_PORT ? 'xtls' : 'tcp';\n this.storeLatencyResult(protocol, this.getElapsedTime());\n // we don't add public IP for TCP, because in the case of relay candidates\n // e.candidate.address is the TURN server address, not the client's public IP\n }\n\n if (this.haveWeGotAllResults()) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n };\n }\n\n /**\n * Starts the process of doing UDP and TCP reachability checks on the media cluster.\n * XTLS reachability checking is not supported.\n *\n * @returns {Promise}\n */\n async start(): Promise<ClusterReachabilityResult> {\n if (!this.pc) {\n LoggerProxy.logger.warn(\n `Reachability:ClusterReachability#start --> Error: peerConnection is undefined`\n );\n\n return this.result;\n }\n\n // Initialize this.result as saying that nothing is reachable.\n // It will get updated as we go along and successfully gather ICE candidates.\n this.result.udp = {\n result: this.numUdpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.tcp = {\n result: this.numTcpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.xtls = {\n result: this.numXTlsUrls > 0 ? 'unreachable' : 'untested',\n };\n\n try {\n const offer = await this.pc.createOffer({offerToReceiveAudio: true});\n\n this.startTimestamp = performance.now();\n\n // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer\n // we just need to make this call to trigger the ICE gathering process\n this.pc.setLocalDescription(offer);\n\n await this.gatherIceCandidates();\n } catch (error) {\n LoggerProxy.logger.warn(`Reachability:ClusterReachability#start --> Error: `, error);\n }\n\n return this.result;\n }\n\n /**\n * Starts the process of gathering ICE candidates\n *\n * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached\n */\n private gatherIceCandidates() {\n const timeout = this.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT;\n\n this.registerIceGatheringStateChangeListener();\n this.registerIceCandidateListener();\n\n // Set maximum timeout\n setTimeout(() => {\n const {CLOSED} = CONNECTION_STATE;\n\n // Close any open peerConnections\n if (this.pc.connectionState !== CLOSED) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }, timeout);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
|
|
@@ -8,10 +8,14 @@ export type ReachabilityMetrics = {
|
|
|
8
8
|
reachability_public_udp_failed: number;
|
|
9
9
|
reachability_public_tcp_success: number;
|
|
10
10
|
reachability_public_tcp_failed: number;
|
|
11
|
+
reachability_public_xtls_success: number;
|
|
12
|
+
reachability_public_xtls_failed: number;
|
|
11
13
|
reachability_vmn_udp_success: number;
|
|
12
14
|
reachability_vmn_udp_failed: number;
|
|
13
15
|
reachability_vmn_tcp_success: number;
|
|
14
16
|
reachability_vmn_tcp_failed: number;
|
|
17
|
+
reachability_vmn_xtls_success: number;
|
|
18
|
+
reachability_vmn_xtls_failed: number;
|
|
15
19
|
};
|
|
16
20
|
/**
|
|
17
21
|
* This is the type that matches what backend expects us to send to them. It is a bit weird, because
|
|
@@ -17,17 +17,27 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/
|
|
|
17
17
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
18
18
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
19
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
20
|
-
var
|
|
20
|
+
var _lodash = require("lodash");
|
|
21
21
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
22
22
|
var _util = _interopRequireDefault(require("../meeting/util"));
|
|
23
23
|
var _constants = require("../constants");
|
|
24
24
|
var _request = _interopRequireDefault(require("./request"));
|
|
25
25
|
var _clusterReachability = require("./clusterReachability");
|
|
26
|
+
/*!
|
|
27
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
28
|
+
*/
|
|
29
|
+
/* eslint-disable class-methods-use-this */
|
|
30
|
+
/**
|
|
31
|
+
* This is the type that matches what backend expects us to send to them. It is a bit weird, because
|
|
32
|
+
* it uses strings instead of booleans and numbers, but that's what they require.
|
|
33
|
+
*/
|
|
34
|
+
// this is the type that is required by the backend when we send them reachability results
|
|
35
|
+
// this is the type used by Reachability class internally and stored in local storage
|
|
26
36
|
/**
|
|
27
37
|
* @class Reachability
|
|
28
38
|
* @export
|
|
29
39
|
*/
|
|
30
|
-
var Reachability = /*#__PURE__*/function () {
|
|
40
|
+
var Reachability = exports.default = /*#__PURE__*/function () {
|
|
31
41
|
/**
|
|
32
42
|
* Creates an instance of Reachability.
|
|
33
43
|
* @param {object} webex
|
|
@@ -60,7 +70,7 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
60
70
|
*/
|
|
61
71
|
(0, _createClass2.default)(Reachability, [{
|
|
62
72
|
key: "gatherReachability",
|
|
63
|
-
value: function () {
|
|
73
|
+
value: (function () {
|
|
64
74
|
var _gatherReachability = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
65
75
|
var _yield$this$reachabil, clusters, joinCookie, results;
|
|
66
76
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
@@ -107,9 +117,10 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
107
117
|
*
|
|
108
118
|
* @returns {Promise} Promise with metrics values, it never rejects/throws.
|
|
109
119
|
*/
|
|
120
|
+
)
|
|
110
121
|
}, {
|
|
111
122
|
key: "getReachabilityMetrics",
|
|
112
|
-
value: function () {
|
|
123
|
+
value: (function () {
|
|
113
124
|
var _getReachabilityMetrics = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
114
125
|
var stats, updateStats, resultsJson, results;
|
|
115
126
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
@@ -120,10 +131,14 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
120
131
|
reachability_public_udp_failed: 0,
|
|
121
132
|
reachability_public_tcp_success: 0,
|
|
122
133
|
reachability_public_tcp_failed: 0,
|
|
134
|
+
reachability_public_xtls_success: 0,
|
|
135
|
+
reachability_public_xtls_failed: 0,
|
|
123
136
|
reachability_vmn_udp_success: 0,
|
|
124
137
|
reachability_vmn_udp_failed: 0,
|
|
125
138
|
reachability_vmn_tcp_success: 0,
|
|
126
|
-
reachability_vmn_tcp_failed: 0
|
|
139
|
+
reachability_vmn_tcp_failed: 0,
|
|
140
|
+
reachability_vmn_xtls_success: 0,
|
|
141
|
+
reachability_vmn_xtls_failed: 0
|
|
127
142
|
};
|
|
128
143
|
updateStats = function updateStats(clusterType, result) {
|
|
129
144
|
if (result.udp && result.udp.result !== 'untested') {
|
|
@@ -134,6 +149,10 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
134
149
|
var _outcome = result.tcp.result === 'reachable' ? 'success' : 'failed';
|
|
135
150
|
stats["reachability_".concat(clusterType, "_tcp_").concat(_outcome)] += 1;
|
|
136
151
|
}
|
|
152
|
+
if (result.xtls && result.xtls.result !== 'untested') {
|
|
153
|
+
var _outcome2 = result.xtls.result === 'reachable' ? 'success' : 'failed';
|
|
154
|
+
stats["reachability_".concat(clusterType, "_xtls_").concat(_outcome2)] += 1;
|
|
155
|
+
}
|
|
137
156
|
};
|
|
138
157
|
_context2.prev = 2;
|
|
139
158
|
_context2.next = 5;
|
|
@@ -169,6 +188,7 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
169
188
|
* @param {TransportResult} transportResult
|
|
170
189
|
* @returns {TransportResultForBackend}
|
|
171
190
|
*/
|
|
191
|
+
)
|
|
172
192
|
}, {
|
|
173
193
|
key: "mapTransportResultToBackendDataFormat",
|
|
174
194
|
value: function mapTransportResultToBackendDataFormat(transportResult) {
|
|
@@ -208,7 +228,7 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
208
228
|
*/
|
|
209
229
|
}, {
|
|
210
230
|
key: "getReachabilityResults",
|
|
211
|
-
value: function () {
|
|
231
|
+
value: (function () {
|
|
212
232
|
var _getReachabilityResults = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
213
233
|
var _this = this;
|
|
214
234
|
var results, resultsJson, allClusterResults;
|
|
@@ -221,7 +241,7 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
221
241
|
case 3:
|
|
222
242
|
resultsJson = _context3.sent;
|
|
223
243
|
allClusterResults = JSON.parse(resultsJson);
|
|
224
|
-
results = (0,
|
|
244
|
+
results = (0, _lodash.mapValues)(allClusterResults, function (clusterResult) {
|
|
225
245
|
return {
|
|
226
246
|
udp: _this.mapTransportResultToBackendDataFormat(clusterResult.udp || {
|
|
227
247
|
result: 'untested'
|
|
@@ -260,9 +280,10 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
260
280
|
* @public
|
|
261
281
|
* @memberof Reachability
|
|
262
282
|
*/
|
|
283
|
+
)
|
|
263
284
|
}, {
|
|
264
285
|
key: "isAnyPublicClusterReachable",
|
|
265
|
-
value: function () {
|
|
286
|
+
value: (function () {
|
|
266
287
|
var _isAnyPublicClusterReachable = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
|
|
267
288
|
var reachable, reachabilityData, reachabilityResults;
|
|
268
289
|
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
@@ -302,6 +323,7 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
302
323
|
* @private
|
|
303
324
|
* @memberof Reachability
|
|
304
325
|
*/
|
|
326
|
+
)
|
|
305
327
|
}, {
|
|
306
328
|
key: "getUnreachableClusters",
|
|
307
329
|
value: function getUnreachableClusters() {
|
|
@@ -351,7 +373,7 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
351
373
|
*/
|
|
352
374
|
}, {
|
|
353
375
|
key: "performReachabilityChecks",
|
|
354
|
-
value: function () {
|
|
376
|
+
value: (function () {
|
|
355
377
|
var _performReachabilityChecks = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(clusterList) {
|
|
356
378
|
var _this2 = this;
|
|
357
379
|
var results, clusterReachabilityChecks;
|
|
@@ -367,7 +389,9 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
367
389
|
case 3:
|
|
368
390
|
_loggerProxy.default.logger.log("Reachability:index#performReachabilityChecks --> doing UDP".concat(
|
|
369
391
|
// @ts-ignore
|
|
370
|
-
this.webex.config.meetings.experimental.enableTcpReachability ? '
|
|
392
|
+
this.webex.config.meetings.experimental.enableTcpReachability ? ',TCP' : '').concat(
|
|
393
|
+
// @ts-ignore
|
|
394
|
+
this.webex.config.meetings.experimental.enableTlsReachability ? ',TLS' : '', " reachability checks"));
|
|
371
395
|
clusterReachabilityChecks = (0, _keys.default)(clusterList).map(function (key) {
|
|
372
396
|
var cluster = clusterList[key];
|
|
373
397
|
|
|
@@ -378,6 +402,12 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
378
402
|
if (!includeTcpReachability) {
|
|
379
403
|
cluster.tcp = [];
|
|
380
404
|
}
|
|
405
|
+
var includeTlsReachability =
|
|
406
|
+
// @ts-ignore
|
|
407
|
+
_this2.webex.config.meetings.experimental.enableTlsReachability && !cluster.isVideoMesh;
|
|
408
|
+
if (!includeTlsReachability) {
|
|
409
|
+
cluster.xtls = [];
|
|
410
|
+
}
|
|
381
411
|
_this2.clusterReachability[key] = new _clusterReachability.ClusterReachability(key, cluster);
|
|
382
412
|
return _this2.clusterReachability[key].start().then(function (result) {
|
|
383
413
|
results[key] = result;
|
|
@@ -399,9 +429,8 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
399
429
|
return _performReachabilityChecks.apply(this, arguments);
|
|
400
430
|
}
|
|
401
431
|
return performReachabilityChecks;
|
|
402
|
-
}()
|
|
432
|
+
}())
|
|
403
433
|
}]);
|
|
404
434
|
return Reachability;
|
|
405
435
|
}();
|
|
406
|
-
exports.default = Reachability;
|
|
407
436
|
//# sourceMappingURL=index.js.map
|