@webex/plugin-meetings 3.0.0-stream-classes.4 → 3.0.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/README.md +12 -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.d.ts +14 -0
- package/dist/common/errors/no-meeting-info.js +50 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- 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.d.ts +60 -0
- package/dist/common/errors/reclaim-host-role-errors.js +154 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- 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/{types/common → common}/errors/webex-errors.d.ts +13 -1
- package/dist/common/errors/webex-errors.js +35 -16
- 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 +3 -1
- package/dist/common/logs/request.js +8 -5
- 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 -1
- package/dist/config.js +3 -3
- package/dist/config.js.map +1 -1
- package/dist/{types/constants.d.ts → constants.d.ts} +72 -15
- package/dist/constants.js +254 -371
- 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 +8 -5
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interceptors/locusRetry.js +94 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/collection.js +1 -2
- package/dist/interpretation/collection.js.map +1 -1
- package/dist/interpretation/index.js +2 -3
- 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/{types/locus-info → locus-info}/index.d.ts +1 -1
- package/dist/locus-info/index.js +63 -38
- 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/{types/locus-info → locus-info}/parser.d.ts +3 -2
- package/dist/locus-info/parser.js +48 -31
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +7 -6
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +15 -10
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +16 -7
- 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.d.ts +241 -0
- package/dist/mediaQualityMetrics/config.js +135 -339
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/{types/meeting → meeting}/in-meeting-actions.d.ts +4 -0
- package/dist/meeting/in-meeting-actions.js +18 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/{types/meeting → meeting}/index.d.ts +331 -44
- package/dist/meeting/index.js +2639 -1367
- package/dist/meeting/index.js.map +1 -1
- package/dist/{types/meeting → meeting}/locusMediaRequest.d.ts +1 -2
- 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 +4 -1
- package/dist/meeting/request.js +47 -32
- 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 +26 -1
- package/dist/meeting/util.js +83 -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/{types/meeting-info → meeting-info}/index.d.ts +7 -0
- package/dist/meeting-info/index.js +53 -27
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/{types/meeting-info → meeting-info}/meeting-info-v2.d.ts +1 -0
- package/dist/meeting-info/meeting-info-v2.js +52 -33
- 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 +12 -9
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/{types/meetings → meetings}/collection.d.ts +9 -0
- package/dist/meetings/collection.js +21 -5
- package/dist/meetings/collection.js.map +1 -1
- package/dist/{types/meetings → meetings}/index.d.ts +45 -16
- package/dist/meetings/index.js +166 -74
- 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 +3 -10
- package/dist/meetings/util.js.map +1 -1
- package/dist/{types/member → member}/index.d.ts +1 -0
- package/dist/member/index.js +10 -3
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.d.ts +11 -0
- package/dist/member/member.types.js +17 -0
- package/dist/member/member.types.js.map +1 -0
- package/dist/member/types.js +6 -8
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js +12 -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 +25 -8
- 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/{types/members → members}/types.d.ts +1 -0
- package/dist/members/types.js +3 -4
- package/dist/members/types.js.map +1 -1
- package/dist/{types/members → members}/util.d.ts +6 -1
- package/dist/members/util.js +18 -8
- package/dist/members/util.js.map +1 -1
- package/dist/{types/metrics → metrics}/constants.d.ts +15 -0
- package/dist/metrics/constants.js +16 -3
- 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/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/multistream/remoteMediaGroup.js +7 -6
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/{types/multistream → multistream}/remoteMediaManager.d.ts +9 -1
- package/dist/multistream/remoteMediaManager.js +74 -36
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- 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/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/clusterReachability.js +357 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.d.ts +105 -0
- package/dist/reachability/index.js +279 -436
- package/dist/reachability/index.js.map +1 -1
- package/dist/{types/reachability → reachability}/request.d.ts +1 -1
- package/dist/reachability/request.js +14 -11
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- 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/{types/reconnection-manager → reconnection-manager}/index.d.ts +10 -0
- package/dist/reconnection-manager/index.js +129 -106
- 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 +2 -1
- package/dist/roap/index.js +59 -28
- package/dist/roap/index.js.map +1 -1
- package/dist/{types/roap → roap}/request.d.ts +2 -1
- package/dist/roap/request.js +14 -22
- package/dist/roap/request.js.map +1 -1
- package/dist/{types/roap → roap}/turnDiscovery.d.ts +21 -4
- package/dist/roap/turnDiscovery.js +182 -89
- 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/{types/rtcMetrics → rtcMetrics}/index.d.ts +15 -1
- package/dist/rtcMetrics/index.js +72 -12
- 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/{types/statsAnalyzer → statsAnalyzer}/index.d.ts +28 -11
- package/dist/statsAnalyzer/index.js +371 -318
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/statsAnalyzer/mqaUtil.js +295 -162
- 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.d.ts +16 -0
- package/dist/webinar/collection.js +43 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +68 -0
- package/dist/webinar/index.js.map +1 -0
- package/jest.config.js +3 -0
- package/package.json +44 -24
- package/process +1 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +19 -2
- package/src/common/logs/request.ts +5 -1
- package/src/config.ts +3 -5
- package/src/constants.ts +78 -8
- package/src/index.ts +4 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -0
- package/src/locus-info/index.ts +52 -16
- package/src/locus-info/mediaSharesUtils.ts +16 -0
- package/src/locus-info/parser.ts +47 -21
- package/src/media/index.ts +8 -6
- package/src/media/properties.ts +17 -2
- package/src/mediaQualityMetrics/config.ts +103 -238
- package/src/meeting/in-meeting-actions.ts +8 -0
- package/src/meeting/index.ts +1692 -627
- package/src/meeting/request.ts +19 -1
- package/src/meeting/util.ts +102 -1
- package/src/meeting/voicea-meeting.ts +122 -0
- package/src/meeting-info/index.ts +47 -20
- package/src/meeting-info/meeting-info-v2.ts +32 -16
- package/src/meeting-info/util.ts +12 -9
- package/src/meeting-info/utilv2.ts +25 -15
- package/src/meetings/collection.ts +13 -0
- package/src/meetings/index.ts +112 -31
- package/src/meetings/util.ts +2 -8
- package/src/member/index.ts +9 -1
- package/src/member/member.types.ts +13 -0
- package/src/member/util.ts +14 -0
- package/src/members/index.ts +29 -2
- package/src/members/types.ts +1 -0
- package/src/members/util.ts +15 -1
- package/src/metrics/constants.ts +14 -0
- package/src/multistream/remoteMediaManager.ts +41 -4
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +221 -382
- package/src/reachability/request.ts +1 -1
- package/src/reachability/util.ts +24 -0
- package/src/reconnection-manager/index.ts +87 -83
- package/src/roap/index.ts +60 -24
- package/src/roap/request.ts +4 -17
- package/src/roap/turnDiscovery.ts +112 -39
- package/src/rtcMetrics/index.ts +71 -5
- package/src/statsAnalyzer/index.ts +430 -427
- package/src/statsAnalyzer/mqaUtil.ts +317 -168
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +7 -7
- package/test/integration/spec/journey.js +88 -106
- package/test/integration/spec/space-meeting.js +10 -10
- package/test/unit/spec/breakouts/breakout.ts +2 -1
- package/test/unit/spec/breakouts/index.ts +7 -4
- package/test/unit/spec/interceptors/locusRetry.ts +131 -0
- package/test/unit/spec/locus-info/index.js +206 -13
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +10 -0
- package/test/unit/spec/locus-info/parser.js +54 -13
- package/test/unit/spec/locus-info/selfUtils.js +1 -1
- package/test/unit/spec/media/index.ts +25 -4
- package/test/unit/spec/media/properties.ts +2 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
- package/test/unit/spec/meeting/index.js +4354 -1285
- package/test/unit/spec/meeting/request.js +63 -12
- package/test/unit/spec/meeting/utils.js +145 -10
- package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
- package/test/unit/spec/meeting-info/index.js +180 -61
- package/test/unit/spec/meeting-info/meetinginfov2.js +216 -68
- package/test/unit/spec/meetings/collection.js +12 -0
- package/test/unit/spec/meetings/index.js +676 -195
- package/test/unit/spec/meetings/utils.js +35 -12
- package/test/unit/spec/member/index.js +8 -7
- package/test/unit/spec/member/util.js +32 -0
- package/test/unit/spec/members/index.js +130 -17
- package/test/unit/spec/members/utils.js +26 -0
- package/test/unit/spec/metrics/index.js +1 -2
- package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +10 -2
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +505 -135
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +74 -17
- package/test/unit/spec/recording-controller/index.js +0 -1
- package/test/unit/spec/roap/index.ts +181 -61
- package/test/unit/spec/roap/request.ts +27 -3
- package/test/unit/spec/roap/turnDiscovery.ts +363 -102
- package/test/unit/spec/rtcMetrics/index.ts +57 -3
- package/test/unit/spec/stats-analyzer/index.js +1225 -12
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/integrationTestUtils.js +4 -4
- package/test/utils/webex-test-users.js +12 -4
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -365
- package/dist/types/reachability/index.d.ts +0 -158
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -24
- /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/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/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-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/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}/infoUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/mediaSharesUtils.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/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}/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}/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}/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/metrics → metrics}/index.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/mediaRequestManager.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/multistream → multistream}/remoteMediaGroup.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/sendSlotManager.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/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/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/rtcMetrics → rtcMetrics}/constants.d.ts +0 -0
- /package/dist/{types/statsAnalyzer → statsAnalyzer}/global.d.ts +0 -0
- /package/dist/{types/transcription → transcription}/index.d.ts +0 -0
- /package/test/unit/spec/locus-info/{selfConstant.js → lib/selfConstant.js} +0 -0
|
@@ -27,11 +27,20 @@ export default class TurnDiscovery {
|
|
|
27
27
|
* handles TURN_DISCOVERY_RESPONSE roap message
|
|
28
28
|
*
|
|
29
29
|
* @param {Object} roapMessage
|
|
30
|
+
* @param {string} from string to indicate how we got the response (used just for logging)
|
|
30
31
|
* @returns {void}
|
|
31
32
|
* @public
|
|
32
33
|
* @memberof Roap
|
|
33
34
|
*/
|
|
34
|
-
handleTurnDiscoveryResponse(roapMessage:
|
|
35
|
+
handleTurnDiscoveryResponse(roapMessage: any, from: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* handles TURN_DISCOVERY_RESPONSE roap message that came in http response
|
|
38
|
+
*
|
|
39
|
+
* @param {Object} roapMessage
|
|
40
|
+
* @returns {Promise}
|
|
41
|
+
* @memberof Roap
|
|
42
|
+
*/
|
|
43
|
+
private handleTurnDiscoveryResponseInHttpResponse;
|
|
35
44
|
/**
|
|
36
45
|
* sends the TURN_DISCOVERY_REQUEST roap request
|
|
37
46
|
*
|
|
@@ -41,7 +50,7 @@ export default class TurnDiscovery {
|
|
|
41
50
|
* @private
|
|
42
51
|
* @memberof Roap
|
|
43
52
|
*/
|
|
44
|
-
sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean): Promise<
|
|
53
|
+
sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean): Promise<any>;
|
|
45
54
|
/**
|
|
46
55
|
* Sends the OK message that server expects to receive
|
|
47
56
|
* after it sends us TURN_DISCOVERY_RESPONSE
|
|
@@ -80,12 +89,20 @@ export default class TurnDiscovery {
|
|
|
80
89
|
* so it works fine no matter if TURN discovery is done or not.
|
|
81
90
|
*
|
|
82
91
|
* @param {Meeting} meeting
|
|
83
|
-
* @param {Boolean} isReconnecting should be set to true if this is a new
|
|
92
|
+
* @param {Boolean} [isReconnecting] should be set to true if this is a new
|
|
84
93
|
* media connection just after a reconnection
|
|
94
|
+
* @param {Boolean} [isForced]
|
|
85
95
|
* @returns {Promise}
|
|
86
96
|
*/
|
|
87
|
-
doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean): Promise<{
|
|
97
|
+
doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean, isForced?: boolean): Promise<{
|
|
88
98
|
turnServerInfo: any;
|
|
99
|
+
turnDiscoverySkippedReason: string;
|
|
100
|
+
} | {
|
|
101
|
+
turnServerInfo: {
|
|
102
|
+
url: string;
|
|
103
|
+
username: string;
|
|
104
|
+
password: string;
|
|
105
|
+
};
|
|
89
106
|
turnDiscoverySkippedReason: any;
|
|
90
107
|
}>;
|
|
91
108
|
}
|
|
@@ -33,9 +33,7 @@ var TURN_DISCOVERY_SEQ = 0;
|
|
|
33
33
|
* Handles the process of finding out TURN server information from Linus.
|
|
34
34
|
* This is achieved by sending a TURN_DISCOVERY_REQUEST.
|
|
35
35
|
*/
|
|
36
|
-
var TurnDiscovery = /*#__PURE__*/function () {
|
|
37
|
-
// used for waiting for the response
|
|
38
|
-
|
|
36
|
+
var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
39
37
|
/**
|
|
40
38
|
* Constructor
|
|
41
39
|
*
|
|
@@ -45,6 +43,7 @@ var TurnDiscovery = /*#__PURE__*/function () {
|
|
|
45
43
|
(0, _classCallCheck2.default)(this, TurnDiscovery);
|
|
46
44
|
(0, _defineProperty2.default)(this, "roapRequest", void 0);
|
|
47
45
|
(0, _defineProperty2.default)(this, "defer", void 0);
|
|
46
|
+
// used for waiting for the response
|
|
48
47
|
(0, _defineProperty2.default)(this, "turnInfo", void 0);
|
|
49
48
|
(0, _defineProperty2.default)(this, "responseTimer", void 0);
|
|
50
49
|
this.roapRequest = roapRequest;
|
|
@@ -82,20 +81,23 @@ var TurnDiscovery = /*#__PURE__*/function () {
|
|
|
82
81
|
* handles TURN_DISCOVERY_RESPONSE roap message
|
|
83
82
|
*
|
|
84
83
|
* @param {Object} roapMessage
|
|
84
|
+
* @param {string} from string to indicate how we got the response (used just for logging)
|
|
85
85
|
* @returns {void}
|
|
86
86
|
* @public
|
|
87
87
|
* @memberof Roap
|
|
88
88
|
*/
|
|
89
89
|
}, {
|
|
90
90
|
key: "handleTurnDiscoveryResponse",
|
|
91
|
-
value: function handleTurnDiscoveryResponse(roapMessage) {
|
|
91
|
+
value: function handleTurnDiscoveryResponse(roapMessage, from) {
|
|
92
92
|
var _this = this;
|
|
93
|
-
// @ts-ignore - Fix missing type
|
|
94
93
|
var headers = roapMessage.headers;
|
|
95
94
|
if (!this.defer) {
|
|
96
|
-
_loggerProxy.default.logger.warn(
|
|
95
|
+
_loggerProxy.default.logger.warn("Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response ".concat(from));
|
|
97
96
|
return;
|
|
98
97
|
}
|
|
98
|
+
if (roapMessage.messageType !== _constants2.ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
|
|
99
|
+
this.defer.reject(new Error("TURN_DISCOVERY_RESPONSE ".concat(from, " has unexpected messageType: ").concat((0, _stringify.default)(roapMessage))));
|
|
100
|
+
}
|
|
99
101
|
var expectedHeaders = [{
|
|
100
102
|
headerName: 'x-cisco-turn-url',
|
|
101
103
|
field: 'url'
|
|
@@ -119,14 +121,43 @@ var TurnDiscovery = /*#__PURE__*/function () {
|
|
|
119
121
|
clearTimeout(this.responseTimer);
|
|
120
122
|
this.responseTimer = undefined;
|
|
121
123
|
if (foundHeaders !== expectedHeaders.length) {
|
|
122
|
-
_loggerProxy.default.logger.warn("Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ".concat((0, _stringify.default)(headers)));
|
|
123
|
-
this.defer.reject(new Error("TURN_DISCOVERY_RESPONSE missing some headers: ".concat((0, _stringify.default)(headers))));
|
|
124
|
+
_loggerProxy.default.logger.warn("Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received ".concat(from, ": ").concat((0, _stringify.default)(headers)));
|
|
125
|
+
this.defer.reject(new Error("TURN_DISCOVERY_RESPONSE ".concat(from, " missing some headers: ").concat((0, _stringify.default)(headers))));
|
|
124
126
|
} else {
|
|
125
|
-
_loggerProxy.default.logger.info("Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=".concat(this.turnInfo.url));
|
|
126
|
-
this.defer.resolve(
|
|
127
|
+
_loggerProxy.default.logger.info("Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response ".concat(from, ", url=").concat(this.turnInfo.url));
|
|
128
|
+
this.defer.resolve({
|
|
129
|
+
isOkRequired: !(headers !== null && headers !== void 0 && headers.includes('noOkInTransaction'))
|
|
130
|
+
});
|
|
127
131
|
}
|
|
128
132
|
}
|
|
129
133
|
|
|
134
|
+
/**
|
|
135
|
+
* handles TURN_DISCOVERY_RESPONSE roap message that came in http response
|
|
136
|
+
*
|
|
137
|
+
* @param {Object} roapMessage
|
|
138
|
+
* @returns {Promise}
|
|
139
|
+
* @memberof Roap
|
|
140
|
+
*/
|
|
141
|
+
}, {
|
|
142
|
+
key: "handleTurnDiscoveryResponseInHttpResponse",
|
|
143
|
+
value: (function () {
|
|
144
|
+
var _handleTurnDiscoveryResponseInHttpResponse = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(roapMessage) {
|
|
145
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
146
|
+
while (1) switch (_context.prev = _context.next) {
|
|
147
|
+
case 0:
|
|
148
|
+
this.handleTurnDiscoveryResponse(roapMessage, 'in http response');
|
|
149
|
+
return _context.abrupt("return", this.defer.promise);
|
|
150
|
+
case 2:
|
|
151
|
+
case "end":
|
|
152
|
+
return _context.stop();
|
|
153
|
+
}
|
|
154
|
+
}, _callee, this);
|
|
155
|
+
}));
|
|
156
|
+
function handleTurnDiscoveryResponseInHttpResponse(_x) {
|
|
157
|
+
return _handleTurnDiscoveryResponseInHttpResponse.apply(this, arguments);
|
|
158
|
+
}
|
|
159
|
+
return handleTurnDiscoveryResponseInHttpResponse;
|
|
160
|
+
}()
|
|
130
161
|
/**
|
|
131
162
|
* sends the TURN_DISCOVERY_REQUEST roap request
|
|
132
163
|
*
|
|
@@ -136,6 +167,7 @@ var TurnDiscovery = /*#__PURE__*/function () {
|
|
|
136
167
|
* @private
|
|
137
168
|
* @memberof Roap
|
|
138
169
|
*/
|
|
170
|
+
)
|
|
139
171
|
}, {
|
|
140
172
|
key: "sendRoapTurnDiscoveryRequest",
|
|
141
173
|
value: function sendRoapTurnDiscoveryRequest(meeting, isReconnecting) {
|
|
@@ -147,7 +179,8 @@ var TurnDiscovery = /*#__PURE__*/function () {
|
|
|
147
179
|
var roapMessage = {
|
|
148
180
|
messageType: _constants2.ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,
|
|
149
181
|
version: _constants2.ROAP.ROAP_VERSION,
|
|
150
|
-
seq: TURN_DISCOVERY_SEQ
|
|
182
|
+
seq: TURN_DISCOVERY_SEQ,
|
|
183
|
+
headers: ['includeAnswerInHttpResponse', 'noOkInTransaction']
|
|
151
184
|
};
|
|
152
185
|
_loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');
|
|
153
186
|
return this.roapRequest.sendRoap({
|
|
@@ -160,11 +193,40 @@ var TurnDiscovery = /*#__PURE__*/function () {
|
|
|
160
193
|
locusMediaRequest: meeting.locusMediaRequest,
|
|
161
194
|
// @ts-ignore - because of meeting.webex
|
|
162
195
|
ipVersion: _util.default.getIpVersion(meeting.webex)
|
|
163
|
-
}).then(function (
|
|
164
|
-
var mediaConnections =
|
|
196
|
+
}).then(function (response) {
|
|
197
|
+
var mediaConnections = response.mediaConnections;
|
|
198
|
+
var turnDiscoveryResponse;
|
|
165
199
|
if (mediaConnections) {
|
|
200
|
+
var _mediaConnections$;
|
|
166
201
|
meeting.updateMediaConnections(mediaConnections);
|
|
202
|
+
if ((_mediaConnections$ = mediaConnections[0]) !== null && _mediaConnections$ !== void 0 && _mediaConnections$.remoteSdp) {
|
|
203
|
+
var remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);
|
|
204
|
+
if (remoteSdp.roapMessage) {
|
|
205
|
+
// yes, it's misleading that remoteSdp actually contains a TURN discovery response, but that's how the backend works...
|
|
206
|
+
var _remoteSdp$roapMessag = remoteSdp.roapMessage,
|
|
207
|
+
seq = _remoteSdp$roapMessag.seq,
|
|
208
|
+
messageType = _remoteSdp$roapMessag.messageType,
|
|
209
|
+
errorType = _remoteSdp$roapMessag.errorType,
|
|
210
|
+
errorCause = _remoteSdp$roapMessag.errorCause,
|
|
211
|
+
headers = _remoteSdp$roapMessag.headers;
|
|
212
|
+
turnDiscoveryResponse = {
|
|
213
|
+
seq: seq,
|
|
214
|
+
messageType: messageType,
|
|
215
|
+
errorType: errorType,
|
|
216
|
+
errorCause: errorCause,
|
|
217
|
+
headers: headers
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (!turnDiscoveryResponse) {
|
|
223
|
+
_metrics.default.sendBehavioralMetric(_constants.default.ROAP_HTTP_RESPONSE_MISSING, {
|
|
224
|
+
correlationId: meeting.correlationId,
|
|
225
|
+
messageType: 'TURN_DISCOVERY_RESPONSE',
|
|
226
|
+
isMultistream: meeting.isMultistream
|
|
227
|
+
});
|
|
167
228
|
}
|
|
229
|
+
return turnDiscoveryResponse;
|
|
168
230
|
});
|
|
169
231
|
}
|
|
170
232
|
|
|
@@ -202,38 +264,31 @@ var TurnDiscovery = /*#__PURE__*/function () {
|
|
|
202
264
|
*/
|
|
203
265
|
}, {
|
|
204
266
|
key: "getSkipReason",
|
|
205
|
-
value: function () {
|
|
206
|
-
var _getSkipReason = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
207
|
-
var
|
|
208
|
-
return _regenerator.default.wrap(function
|
|
209
|
-
while (1) switch (
|
|
267
|
+
value: (function () {
|
|
268
|
+
var _getSkipReason = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(meeting) {
|
|
269
|
+
var isAnyPublicClusterReachable;
|
|
270
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
271
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
210
272
|
case 0:
|
|
211
|
-
|
|
212
|
-
return meeting.webex.meetings.reachability.
|
|
273
|
+
_context2.next = 2;
|
|
274
|
+
return meeting.webex.meetings.reachability.isAnyPublicClusterReachable();
|
|
213
275
|
case 2:
|
|
214
|
-
|
|
215
|
-
if (!
|
|
216
|
-
|
|
276
|
+
isAnyPublicClusterReachable = _context2.sent;
|
|
277
|
+
if (!isAnyPublicClusterReachable) {
|
|
278
|
+
_context2.next = 6;
|
|
217
279
|
break;
|
|
218
280
|
}
|
|
219
281
|
_loggerProxy.default.logger.info('Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery');
|
|
220
|
-
return
|
|
282
|
+
return _context2.abrupt("return", 'reachability');
|
|
221
283
|
case 6:
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
break;
|
|
225
|
-
}
|
|
226
|
-
_loggerProxy.default.logger.info('Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it');
|
|
227
|
-
return _context.abrupt("return", 'config');
|
|
228
|
-
case 9:
|
|
229
|
-
return _context.abrupt("return", '');
|
|
230
|
-
case 10:
|
|
284
|
+
return _context2.abrupt("return", '');
|
|
285
|
+
case 7:
|
|
231
286
|
case "end":
|
|
232
|
-
return
|
|
287
|
+
return _context2.stop();
|
|
233
288
|
}
|
|
234
|
-
},
|
|
289
|
+
}, _callee2);
|
|
235
290
|
}));
|
|
236
|
-
function getSkipReason(
|
|
291
|
+
function getSkipReason(_x2) {
|
|
237
292
|
return _getSkipReason.apply(this, arguments);
|
|
238
293
|
}
|
|
239
294
|
return getSkipReason;
|
|
@@ -244,26 +299,27 @@ var TurnDiscovery = /*#__PURE__*/function () {
|
|
|
244
299
|
* @param {Meeting} meeting
|
|
245
300
|
* @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
|
|
246
301
|
*/
|
|
302
|
+
)
|
|
247
303
|
}, {
|
|
248
304
|
key: "isSkipped",
|
|
249
|
-
value: function () {
|
|
250
|
-
var _isSkipped = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
305
|
+
value: (function () {
|
|
306
|
+
var _isSkipped = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(meeting) {
|
|
251
307
|
var skipReason;
|
|
252
|
-
return _regenerator.default.wrap(function
|
|
253
|
-
while (1) switch (
|
|
308
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
309
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
254
310
|
case 0:
|
|
255
|
-
|
|
311
|
+
_context3.next = 2;
|
|
256
312
|
return this.getSkipReason(meeting);
|
|
257
313
|
case 2:
|
|
258
|
-
skipReason =
|
|
259
|
-
return
|
|
314
|
+
skipReason = _context3.sent;
|
|
315
|
+
return _context3.abrupt("return", !!skipReason);
|
|
260
316
|
case 4:
|
|
261
317
|
case "end":
|
|
262
|
-
return
|
|
318
|
+
return _context3.stop();
|
|
263
319
|
}
|
|
264
|
-
},
|
|
320
|
+
}, _callee3, this);
|
|
265
321
|
}));
|
|
266
|
-
function isSkipped(
|
|
322
|
+
function isSkipped(_x3) {
|
|
267
323
|
return _isSkipped.apply(this, arguments);
|
|
268
324
|
}
|
|
269
325
|
return isSkipped;
|
|
@@ -281,70 +337,107 @@ var TurnDiscovery = /*#__PURE__*/function () {
|
|
|
281
337
|
* so it works fine no matter if TURN discovery is done or not.
|
|
282
338
|
*
|
|
283
339
|
* @param {Meeting} meeting
|
|
284
|
-
* @param {Boolean} isReconnecting should be set to true if this is a new
|
|
340
|
+
* @param {Boolean} [isReconnecting] should be set to true if this is a new
|
|
285
341
|
* media connection just after a reconnection
|
|
342
|
+
* @param {Boolean} [isForced]
|
|
286
343
|
* @returns {Promise}
|
|
287
344
|
*/
|
|
345
|
+
)
|
|
288
346
|
}, {
|
|
289
347
|
key: "doTurnDiscovery",
|
|
290
|
-
value: function () {
|
|
291
|
-
var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
292
|
-
var
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
348
|
+
value: (function () {
|
|
349
|
+
var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(meeting, isReconnecting, isForced) {
|
|
350
|
+
var turnDiscoverySkippedReason, httpResponse, _ref, isOkRequired;
|
|
351
|
+
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
352
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
296
353
|
case 0:
|
|
297
|
-
|
|
354
|
+
if (isForced) {
|
|
355
|
+
_context4.next = 4;
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
_context4.next = 3;
|
|
298
359
|
return this.getSkipReason(meeting);
|
|
299
|
-
case
|
|
300
|
-
turnDiscoverySkippedReason =
|
|
360
|
+
case 3:
|
|
361
|
+
turnDiscoverySkippedReason = _context4.sent;
|
|
362
|
+
case 4:
|
|
301
363
|
if (!turnDiscoverySkippedReason) {
|
|
302
|
-
|
|
364
|
+
_context4.next = 6;
|
|
303
365
|
break;
|
|
304
366
|
}
|
|
305
|
-
return
|
|
367
|
+
return _context4.abrupt("return", {
|
|
306
368
|
turnServerInfo: undefined,
|
|
307
369
|
turnDiscoverySkippedReason: turnDiscoverySkippedReason
|
|
308
370
|
});
|
|
309
|
-
case 5:
|
|
310
|
-
return _context3.abrupt("return", this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting).then(function () {
|
|
311
|
-
return _this2.waitForTurnDiscoveryResponse();
|
|
312
|
-
}).then(function () {
|
|
313
|
-
return _this2.sendRoapOK(meeting);
|
|
314
|
-
}).then(function () {
|
|
315
|
-
_this2.defer = undefined;
|
|
316
|
-
_loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');
|
|
317
|
-
return {
|
|
318
|
-
turnServerInfo: _this2.turnInfo,
|
|
319
|
-
turnDiscoverySkippedReason: undefined
|
|
320
|
-
};
|
|
321
|
-
}).catch(function (e) {
|
|
322
|
-
// we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
|
|
323
|
-
_loggerProxy.default.logger.info("Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ".concat(e));
|
|
324
|
-
_metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_FAILURE, {
|
|
325
|
-
correlation_id: meeting.correlationId,
|
|
326
|
-
locus_id: meeting.locusUrl.split('/').pop(),
|
|
327
|
-
reason: e.message,
|
|
328
|
-
stack: e.stack
|
|
329
|
-
});
|
|
330
|
-
return {
|
|
331
|
-
turnServerInfo: undefined,
|
|
332
|
-
turnDiscoverySkippedReason: undefined
|
|
333
|
-
};
|
|
334
|
-
}));
|
|
335
371
|
case 6:
|
|
372
|
+
_context4.prev = 6;
|
|
373
|
+
_context4.next = 9;
|
|
374
|
+
return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting);
|
|
375
|
+
case 9:
|
|
376
|
+
httpResponse = _context4.sent;
|
|
377
|
+
if (!httpResponse) {
|
|
378
|
+
_context4.next = 16;
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
_context4.next = 13;
|
|
382
|
+
return this.handleTurnDiscoveryResponseInHttpResponse(httpResponse);
|
|
383
|
+
case 13:
|
|
384
|
+
_context4.t0 = _context4.sent;
|
|
385
|
+
_context4.next = 19;
|
|
386
|
+
break;
|
|
387
|
+
case 16:
|
|
388
|
+
_context4.next = 18;
|
|
389
|
+
return this.waitForTurnDiscoveryResponse();
|
|
390
|
+
case 18:
|
|
391
|
+
_context4.t0 = _context4.sent;
|
|
392
|
+
case 19:
|
|
393
|
+
_ref = _context4.t0;
|
|
394
|
+
isOkRequired = _ref.isOkRequired;
|
|
395
|
+
if (!isOkRequired) {
|
|
396
|
+
_context4.next = 26;
|
|
397
|
+
break;
|
|
398
|
+
}
|
|
399
|
+
_context4.next = 24;
|
|
400
|
+
return this.sendRoapOK(meeting);
|
|
401
|
+
case 24:
|
|
402
|
+
_loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery response requires OK');
|
|
403
|
+
_metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_REQUIRES_OK, {
|
|
404
|
+
correlation_id: meeting.correlationId,
|
|
405
|
+
locus_id: meeting.locusUrl.split('/').pop()
|
|
406
|
+
});
|
|
407
|
+
case 26:
|
|
408
|
+
this.defer = undefined;
|
|
409
|
+
_loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');
|
|
410
|
+
return _context4.abrupt("return", {
|
|
411
|
+
turnServerInfo: this.turnInfo,
|
|
412
|
+
turnDiscoverySkippedReason: undefined
|
|
413
|
+
});
|
|
414
|
+
case 31:
|
|
415
|
+
_context4.prev = 31;
|
|
416
|
+
_context4.t1 = _context4["catch"](6);
|
|
417
|
+
// we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
|
|
418
|
+
_loggerProxy.default.logger.info("Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ".concat(_context4.t1));
|
|
419
|
+
_metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_FAILURE, {
|
|
420
|
+
correlation_id: meeting.correlationId,
|
|
421
|
+
locus_id: meeting.locusUrl.split('/').pop(),
|
|
422
|
+
reason: _context4.t1.message,
|
|
423
|
+
stack: _context4.t1.stack
|
|
424
|
+
});
|
|
425
|
+
return _context4.abrupt("return", {
|
|
426
|
+
turnServerInfo: undefined,
|
|
427
|
+
turnDiscoverySkippedReason: undefined
|
|
428
|
+
});
|
|
429
|
+
case 36:
|
|
336
430
|
case "end":
|
|
337
|
-
return
|
|
431
|
+
return _context4.stop();
|
|
338
432
|
}
|
|
339
|
-
},
|
|
433
|
+
}, _callee4, this, [[6, 31]]);
|
|
340
434
|
}));
|
|
341
|
-
function doTurnDiscovery(
|
|
435
|
+
function doTurnDiscovery(_x4, _x5, _x6) {
|
|
342
436
|
return _doTurnDiscovery.apply(this, arguments);
|
|
343
437
|
}
|
|
344
438
|
return doTurnDiscovery;
|
|
345
|
-
}()
|
|
439
|
+
}())
|
|
346
440
|
}]);
|
|
347
441
|
return TurnDiscovery;
|
|
348
442
|
}();
|
|
349
|
-
exports.default = TurnDiscovery;
|
|
350
443
|
//# sourceMappingURL=turnDiscovery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TURN_DISCOVERY_TIMEOUT","TURN_DISCOVERY_SEQ","TurnDiscovery","roapRequest","turnInfo","url","username","password","defer","LoggerProxy","logger","warn","reject","Error","responseTimer","setTimeout","info","promise","roapMessage","headers","expectedHeaders","headerName","field","foundHeaders","forEach","receivedHeader","expectedHeader","startsWith","substring","length","clearTimeout","undefined","resolve","meeting","isReconnecting","Defer","messageType","ROAP","ROAP_TYPES","TURN_DISCOVERY_REQUEST","version","ROAP_VERSION","seq","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","locusMediaRequest","ipVersion","MeetingUtil","getIpVersion","webex","then","mediaConnections","updateMediaConnections","OK","meetings","reachability","isAnyClusterReachable","config","experimental","enableTurnDiscovery","getSkipReason","skipReason","turnDiscoverySkippedReason","turnServerInfo","sendRoapTurnDiscoveryRequest","waitForTurnDiscoveryResponse","sendRoapOK","catch","e","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","TURN_DISCOVERY_FAILURE","correlation_id","correlationId","locus_id","locusUrl","split","pop","reason","message","stack"],"sources":["turnDiscovery.ts"],"sourcesContent":["// @ts-ignore - Types not available for @webex/common\nimport {Defer} from '@webex/common';\n\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP} from '../constants';\n\nimport RoapRequest from './request';\nimport Meeting from '../meeting';\nimport MeetingUtil from '../meeting/util';\n\nconst TURN_DISCOVERY_TIMEOUT = 10; // in seconds\n\n// Roap spec says that seq should start from 1, but TURN discovery works fine with seq=0\n// and this is handy for us, because TURN discovery is always done before the first SDP exchange,\n// so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection\n// and do the SDP offer with seq=1\nconst TURN_DISCOVERY_SEQ = 0;\n\n/**\n * Handles the process of finding out TURN server information from Linus.\n * This is achieved by sending a TURN_DISCOVERY_REQUEST.\n */\nexport default class TurnDiscovery {\n private roapRequest: RoapRequest;\n\n private defer?: Defer; // used for waiting for the response\n\n private turnInfo: {\n url: string;\n username: string;\n password: string;\n };\n\n private responseTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * Constructor\n *\n * @param {RoapRequest} roapRequest\n */\n constructor(roapRequest: RoapRequest) {\n this.roapRequest = roapRequest;\n this.turnInfo = {\n url: '',\n username: '',\n password: '',\n };\n }\n\n /**\n * waits for TURN_DISCOVERY_RESPONSE message to arrive\n *\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private waitForTurnDiscoveryResponse() {\n if (!this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress'\n );\n\n return Promise.reject(\n new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()')\n );\n }\n\n const {defer} = this;\n\n this.responseTimer = setTimeout(() => {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`\n );\n\n defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));\n }, TURN_DISCOVERY_TIMEOUT * 1000);\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...'\n );\n\n return defer.promise;\n }\n\n /**\n * handles TURN_DISCOVERY_RESPONSE roap message\n *\n * @param {Object} roapMessage\n * @returns {void}\n * @public\n * @memberof Roap\n */\n public handleTurnDiscoveryResponse(roapMessage: object) {\n // @ts-ignore - Fix missing type\n const {headers} = roapMessage;\n\n if (!this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response'\n );\n\n return;\n }\n\n const expectedHeaders = [\n {headerName: 'x-cisco-turn-url', field: 'url'},\n {headerName: 'x-cisco-turn-username', field: 'username'},\n {headerName: 'x-cisco-turn-password', field: 'password'},\n ];\n\n let foundHeaders = 0;\n\n headers?.forEach((receivedHeader) => {\n // check if it matches any of our expected headers\n expectedHeaders.forEach((expectedHeader) => {\n if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {\n this.turnInfo[expectedHeader.field] = receivedHeader.substring(\n expectedHeader.headerName.length + 1\n );\n foundHeaders += 1;\n }\n });\n });\n\n clearTimeout(this.responseTimer);\n this.responseTimer = undefined;\n\n if (foundHeaders !== expectedHeaders.length) {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(\n headers\n )}`\n );\n this.defer.reject(\n new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`)\n );\n } else {\n LoggerProxy.logger.info(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=${this.turnInfo.url}`\n );\n this.defer.resolve();\n }\n }\n\n /**\n * sends the TURN_DISCOVERY_REQUEST roap request\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {\n if (this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'\n );\n\n return Promise.resolve();\n }\n\n this.defer = new Defer();\n\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n };\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST'\n );\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n // @ts-ignore - Fix missing type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - Fix missing type\n mediaId: isReconnecting ? '' : meeting.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n // @ts-ignore - because of meeting.webex\n ipVersion: MeetingUtil.getIpVersion(meeting.webex),\n })\n .then(({mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n });\n }\n\n /**\n * Sends the OK message that server expects to receive\n * after it sends us TURN_DISCOVERY_RESPONSE\n *\n * @param {Meeting} meeting\n * @returns {Promise}\n */\n sendRoapOK(meeting: Meeting) {\n LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapOK --> sending OK');\n\n return this.roapRequest.sendRoap({\n roapMessage: {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n },\n // @ts-ignore - fix type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - fix type\n mediaId: meeting.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Gets the reason why reachability is skipped.\n *\n * @param {Meeting} meeting\n * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped\n */\n private async getSkipReason(meeting: Meeting): Promise<string> {\n // @ts-ignore - fix type\n const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();\n\n if (isAnyClusterReachable) {\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'\n );\n\n return 'reachability';\n }\n\n // @ts-ignore - fix type\n if (!meeting.config.experimental.enableTurnDiscovery) {\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it'\n );\n\n return 'config';\n }\n\n return '';\n }\n\n /**\n * Checks if TURN discovery is skipped.\n *\n * @param {Meeting} meeting\n * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done\n */\n async isSkipped(meeting) {\n const skipReason = await this.getSkipReason(meeting);\n\n return !!skipReason;\n }\n\n /**\n * Retrieves TURN server information from the backend by doing\n * a roap message exchange:\n * client server\n * | -----TURN_DISCOVERY_REQUEST-----> |\n * | <----TURN_DISCOVERY_RESPONSE----- |\n * | --------------OK----------------> |\n *\n * This TURN discovery roap exchange is always done with seq=0.\n * The RoapMediaConnection SDP exchange always starts with seq=1,\n * so it works fine no matter if TURN discovery is done or not.\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {\n const turnDiscoverySkippedReason = await this.getSkipReason(meeting);\n\n if (turnDiscoverySkippedReason) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason,\n };\n }\n\n return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)\n .then(() => this.waitForTurnDiscoveryResponse())\n .then(() => this.sendRoapOK(meeting))\n .then(() => {\n this.defer = undefined;\n\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');\n\n return {turnServerInfo: this.turnInfo, turnDiscoverySkippedReason: undefined};\n })\n .catch((e) => {\n // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN\n LoggerProxy.logger.info(\n `Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE, {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: e.message,\n stack: e.stack,\n });\n\n return {turnServerInfo: undefined, turnDiscoverySkippedReason: undefined};\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_common","require","_metrics","_interopRequireDefault","_constants","_loggerProxy","_constants2","_util","TURN_DISCOVERY_TIMEOUT","TURN_DISCOVERY_SEQ","TurnDiscovery","exports","default","roapRequest","_classCallCheck2","_defineProperty2","turnInfo","url","username","password","_createClass2","key","value","waitForTurnDiscoveryResponse","defer","LoggerProxy","logger","warn","_promise","reject","Error","responseTimer","setTimeout","concat","info","promise","handleTurnDiscoveryResponse","roapMessage","from","_this","headers","messageType","ROAP","ROAP_TYPES","TURN_DISCOVERY_RESPONSE","_stringify","expectedHeaders","headerName","field","foundHeaders","forEach","receivedHeader","expectedHeader","startsWith","substring","length","clearTimeout","undefined","resolve","isOkRequired","includes","_handleTurnDiscoveryResponseInHttpResponse","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","handleTurnDiscoveryResponseInHttpResponse","_x","apply","arguments","sendRoapTurnDiscoveryRequest","meeting","isReconnecting","Defer","TURN_DISCOVERY_REQUEST","version","ROAP_VERSION","seq","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","locusMediaRequest","ipVersion","MeetingUtil","getIpVersion","webex","then","response","mediaConnections","turnDiscoveryResponse","_mediaConnections$","updateMediaConnections","remoteSdp","JSON","parse","_remoteSdp$roapMessag","errorType","errorCause","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","ROAP_HTTP_RESPONSE_MISSING","correlationId","isMultistream","sendRoapOK","OK","_getSkipReason","_callee2","isAnyPublicClusterReachable","_callee2$","_context2","meetings","reachability","sent","getSkipReason","_x2","_isSkipped","_callee3","skipReason","_callee3$","_context3","isSkipped","_x3","_doTurnDiscovery","_callee4","isForced","turnDiscoverySkippedReason","httpResponse","_ref","_callee4$","_context4","turnServerInfo","t0","TURN_DISCOVERY_REQUIRES_OK","correlation_id","locus_id","locusUrl","split","pop","t1","TURN_DISCOVERY_FAILURE","reason","message","stack","doTurnDiscovery","_x4","_x5","_x6"],"sources":["turnDiscovery.ts"],"sourcesContent":["// @ts-ignore - Types not available for @webex/common\nimport {Defer} from '@webex/common';\n\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP} from '../constants';\n\nimport RoapRequest from './request';\nimport Meeting from '../meeting';\nimport MeetingUtil from '../meeting/util';\n\nconst TURN_DISCOVERY_TIMEOUT = 10; // in seconds\n\n// Roap spec says that seq should start from 1, but TURN discovery works fine with seq=0\n// and this is handy for us, because TURN discovery is always done before the first SDP exchange,\n// so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection\n// and do the SDP offer with seq=1\nconst TURN_DISCOVERY_SEQ = 0;\n\n/**\n * Handles the process of finding out TURN server information from Linus.\n * This is achieved by sending a TURN_DISCOVERY_REQUEST.\n */\nexport default class TurnDiscovery {\n private roapRequest: RoapRequest;\n\n private defer?: Defer; // used for waiting for the response\n\n private turnInfo: {\n url: string;\n username: string;\n password: string;\n };\n\n private responseTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * Constructor\n *\n * @param {RoapRequest} roapRequest\n */\n constructor(roapRequest: RoapRequest) {\n this.roapRequest = roapRequest;\n this.turnInfo = {\n url: '',\n username: '',\n password: '',\n };\n }\n\n /**\n * waits for TURN_DISCOVERY_RESPONSE message to arrive\n *\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private waitForTurnDiscoveryResponse(): Promise<{isOkRequired: boolean}> {\n if (!this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress'\n );\n\n return Promise.reject(\n new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()')\n );\n }\n\n const {defer} = this;\n\n this.responseTimer = setTimeout(() => {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`\n );\n\n defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));\n }, TURN_DISCOVERY_TIMEOUT * 1000);\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...'\n );\n\n return defer.promise;\n }\n\n /**\n * handles TURN_DISCOVERY_RESPONSE roap message\n *\n * @param {Object} roapMessage\n * @param {string} from string to indicate how we got the response (used just for logging)\n * @returns {void}\n * @public\n * @memberof Roap\n */\n public handleTurnDiscoveryResponse(roapMessage: any, from: string) {\n const {headers} = roapMessage;\n\n if (!this.defer) {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response ${from}`\n );\n\n return;\n }\n\n if (roapMessage.messageType !== ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n this.defer.reject(\n new Error(\n `TURN_DISCOVERY_RESPONSE ${from} has unexpected messageType: ${JSON.stringify(\n roapMessage\n )}`\n )\n );\n }\n\n const expectedHeaders = [\n {headerName: 'x-cisco-turn-url', field: 'url'},\n {headerName: 'x-cisco-turn-username', field: 'username'},\n {headerName: 'x-cisco-turn-password', field: 'password'},\n ];\n\n let foundHeaders = 0;\n\n headers?.forEach((receivedHeader) => {\n // check if it matches any of our expected headers\n expectedHeaders.forEach((expectedHeader) => {\n if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {\n this.turnInfo[expectedHeader.field] = receivedHeader.substring(\n expectedHeader.headerName.length + 1\n );\n foundHeaders += 1;\n }\n });\n });\n\n clearTimeout(this.responseTimer);\n this.responseTimer = undefined;\n\n if (foundHeaders !== expectedHeaders.length) {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received ${from}: ${JSON.stringify(\n headers\n )}`\n );\n this.defer.reject(\n new Error(\n `TURN_DISCOVERY_RESPONSE ${from} missing some headers: ${JSON.stringify(headers)}`\n )\n );\n } else {\n LoggerProxy.logger.info(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response ${from}, url=${this.turnInfo.url}`\n );\n\n this.defer.resolve({isOkRequired: !headers?.includes('noOkInTransaction')});\n }\n }\n\n /**\n * handles TURN_DISCOVERY_RESPONSE roap message that came in http response\n *\n * @param {Object} roapMessage\n * @returns {Promise}\n * @memberof Roap\n */\n private async handleTurnDiscoveryResponseInHttpResponse(\n roapMessage: object\n ): Promise<{isOkRequired: boolean}> {\n this.handleTurnDiscoveryResponse(roapMessage, 'in http response');\n\n return this.defer.promise;\n }\n\n /**\n * sends the TURN_DISCOVERY_REQUEST roap request\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {\n if (this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'\n );\n\n return Promise.resolve();\n }\n\n this.defer = new Defer();\n\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST'\n );\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n // @ts-ignore - Fix missing type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - Fix missing type\n mediaId: isReconnecting ? '' : meeting.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n // @ts-ignore - because of meeting.webex\n ipVersion: MeetingUtil.getIpVersion(meeting.webex),\n })\n .then((response) => {\n const {mediaConnections} = response;\n\n let turnDiscoveryResponse;\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n\n if (mediaConnections[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n // yes, it's misleading that remoteSdp actually contains a TURN discovery response, but that's how the backend works...\n const {seq, messageType, errorType, errorCause, headers} = remoteSdp.roapMessage;\n\n turnDiscoveryResponse = {\n seq,\n messageType,\n errorType,\n errorCause,\n headers,\n };\n }\n }\n }\n\n if (!turnDiscoveryResponse) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'TURN_DISCOVERY_RESPONSE',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return turnDiscoveryResponse;\n });\n }\n\n /**\n * Sends the OK message that server expects to receive\n * after it sends us TURN_DISCOVERY_RESPONSE\n *\n * @param {Meeting} meeting\n * @returns {Promise}\n */\n sendRoapOK(meeting: Meeting) {\n LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapOK --> sending OK');\n\n return this.roapRequest.sendRoap({\n roapMessage: {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n },\n // @ts-ignore - fix type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - fix type\n mediaId: meeting.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Gets the reason why reachability is skipped.\n *\n * @param {Meeting} meeting\n * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped\n */\n private async getSkipReason(meeting: Meeting): Promise<string> {\n const isAnyPublicClusterReachable =\n // @ts-ignore - fix type\n await meeting.webex.meetings.reachability.isAnyPublicClusterReachable();\n\n if (isAnyPublicClusterReachable) {\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'\n );\n\n return 'reachability';\n }\n\n return '';\n }\n\n /**\n * Checks if TURN discovery is skipped.\n *\n * @param {Meeting} meeting\n * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done\n */\n async isSkipped(meeting) {\n const skipReason = await this.getSkipReason(meeting);\n\n return !!skipReason;\n }\n\n /**\n * Retrieves TURN server information from the backend by doing\n * a roap message exchange:\n * client server\n * | -----TURN_DISCOVERY_REQUEST-----> |\n * | <----TURN_DISCOVERY_RESPONSE----- |\n * | --------------OK----------------> |\n *\n * This TURN discovery roap exchange is always done with seq=0.\n * The RoapMediaConnection SDP exchange always starts with seq=1,\n * so it works fine no matter if TURN discovery is done or not.\n *\n * @param {Meeting} meeting\n * @param {Boolean} [isReconnecting] should be set to true if this is a new\n * media connection just after a reconnection\n * @param {Boolean} [isForced]\n * @returns {Promise}\n */\n async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean, isForced?: boolean) {\n let turnDiscoverySkippedReason: string;\n\n if (!isForced) {\n turnDiscoverySkippedReason = await this.getSkipReason(meeting);\n }\n\n if (turnDiscoverySkippedReason) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason,\n };\n }\n\n try {\n const httpResponse = await this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting);\n\n // if we haven't got the response over http, we need to wait for it to come over the websocket via Mercury\n const {isOkRequired} = httpResponse\n ? await this.handleTurnDiscoveryResponseInHttpResponse(httpResponse)\n : await this.waitForTurnDiscoveryResponse();\n\n if (isOkRequired) {\n await this.sendRoapOK(meeting);\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#doTurnDiscovery --> TURN discovery response requires OK'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_REQUIRES_OK, {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n });\n }\n\n this.defer = undefined;\n\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');\n\n return {turnServerInfo: this.turnInfo, turnDiscoverySkippedReason: undefined};\n } catch (e) {\n // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN\n LoggerProxy.logger.info(\n `Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE, {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: e.message,\n stack: e.stack,\n });\n\n return {turnServerInfo: undefined, turnDiscoverySkippedReason: undefined};\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -5,8 +5,7 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
-
var RTC_METRICS = {
|
|
8
|
+
var RTC_METRICS = exports.default = {
|
|
9
9
|
APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'
|
|
10
10
|
};
|
|
11
|
-
exports.default = RTC_METRICS;
|
|
12
11
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["RTC_METRICS","APP_ID"],"sources":["constants.ts"],"sourcesContent":["const RTC_METRICS = {APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'};\n\nexport {RTC_METRICS as default};\n"],"mappings":";;;;;;;AAAA,IAAMA,WAAW,GAAG;EAACC,MAAM,EAAE;AAAsC,CAAC
|
|
1
|
+
{"version":3,"names":["RTC_METRICS","exports","default","APP_ID"],"sources":["constants.ts"],"sourcesContent":["const RTC_METRICS = {APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'};\n\nexport {RTC_METRICS as default};\n"],"mappings":";;;;;;;AAAA,IAAMA,WAAW,GAAAC,OAAA,CAAAC,OAAA,GAAG;EAACC,MAAM,EAAE;AAAsC,CAAC"}
|
|
@@ -10,6 +10,7 @@ export default class RtcMetrics {
|
|
|
10
10
|
webex: any;
|
|
11
11
|
meetingId: string;
|
|
12
12
|
correlationId: string;
|
|
13
|
+
connectionId: string;
|
|
13
14
|
/**
|
|
14
15
|
* Initialize the interval.
|
|
15
16
|
*
|
|
@@ -23,7 +24,7 @@ export default class RtcMetrics {
|
|
|
23
24
|
*
|
|
24
25
|
* @returns {void}
|
|
25
26
|
*/
|
|
26
|
-
|
|
27
|
+
sendMetricsInQueue(): void;
|
|
27
28
|
/**
|
|
28
29
|
* Add metrics items to the metrics queue.
|
|
29
30
|
*
|
|
@@ -38,6 +39,19 @@ export default class RtcMetrics {
|
|
|
38
39
|
* @returns {void}
|
|
39
40
|
*/
|
|
40
41
|
closeMetrics(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Anonymize IP addresses.
|
|
44
|
+
*
|
|
45
|
+
* @param {array} stats - An RTCStatsReport organized into an array of strings.
|
|
46
|
+
* @returns {string}
|
|
47
|
+
*/
|
|
48
|
+
anonymizeIp(stats: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Set a new connection id.
|
|
51
|
+
*
|
|
52
|
+
* @returns {void}
|
|
53
|
+
*/
|
|
54
|
+
private setNewConnectionId;
|
|
41
55
|
/**
|
|
42
56
|
* Send metrics to the metrics service.
|
|
43
57
|
*
|