@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.200
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -7
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +216 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1048 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +9 -43
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +28 -23
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +8 -13
- package/dist/config.js.map +1 -1
- package/dist/constants.js +250 -66
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +108 -17
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +101 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +532 -240
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +54 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +284 -154
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +110 -92
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +95 -226
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +99 -194
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +83 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +3478 -3563
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +247 -183
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +344 -344
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +529 -588
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +62 -39
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +328 -283
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +156 -232
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +26 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +795 -574
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +186 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +126 -85
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +147 -88
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +13 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +178 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +113 -68
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +314 -260
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +4 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +11 -558
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +264 -50
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +76 -95
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +62 -76
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +66 -43
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +502 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +192 -191
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +384 -476
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +363 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +64 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +58 -91
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +137 -135
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +148 -100
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +115 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +385 -460
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +143 -87
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1016 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +271 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +153 -0
- package/dist/types/meeting/index.d.ts +1471 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +257 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +78 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +62 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +367 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +159 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +208 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +36 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +46 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +29 -21
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +14 -9
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +22 -9
- package/src/{config.js → config.ts} +17 -17
- package/src/constants.ts +197 -22
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +300 -0
- package/src/index.ts +39 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +222 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +518 -111
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +65 -17
- package/src/locus-info/{parser.js → parser.ts} +271 -98
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
- package/src/media/index.ts +456 -0
- package/src/media/{properties.js → properties.ts} +80 -102
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +171 -3
- package/src/meeting/index.ts +7070 -0
- package/src/meeting/locusMediaRequest.ts +309 -0
- package/src/meeting/muteState.ts +450 -0
- package/src/meeting/{request.js → request.ts} +354 -214
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/util.ts +615 -0
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/index.ts +183 -0
- package/src/meeting-info/meeting-info-v2.ts +407 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +77 -60
- package/src/meetings/{collection.js → collection.ts} +26 -3
- package/src/meetings/index.ts +1467 -0
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/{util.js → util.ts} +137 -36
- package/src/member/{index.js → index.ts} +151 -56
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +383 -0
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +323 -145
- package/src/members/request.ts +255 -0
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +339 -0
- package/src/metrics/{constants.js → constants.ts} +2 -6
- package/src/metrics/index.ts +73 -0
- package/src/multistream/mediaRequestManager.ts +337 -61
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +66 -42
- package/src/multistream/remoteMedia.ts +40 -5
- package/src/multistream/remoteMediaGroup.ts +63 -3
- package/src/multistream/remoteMediaManager.ts +263 -66
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +157 -94
- package/src/reachability/request.ts +46 -35
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +254 -136
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +333 -0
- package/src/recording-controller/util.ts +75 -0
- package/src/roap/{index.js → index.ts} +86 -78
- package/src/roap/request.ts +163 -0
- package/src/roap/turnDiscovery.ts +111 -49
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +96 -0
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1272 -0
- package/src/statsAnalyzer/mqaUtil.ts +291 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +804 -526
- package/test/integration/spec/space-meeting.js +391 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +237 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- package/test/unit/spec/fixture/locus.js +93 -90
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +325 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1176 -18
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +65 -31
- package/test/unit/spec/locus-info/selfConstant.js +120 -103
- package/test/unit/spec/locus-info/selfUtils.js +296 -12
- package/test/unit/spec/media/index.ts +162 -68
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +82 -3
- package/test/unit/spec/meeting/index.js +4569 -1773
- package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
- package/test/unit/spec/meeting/muteState.js +382 -211
- package/test/unit/spec/meeting/request.js +444 -78
- package/test/unit/spec/meeting/utils.js +517 -192
- package/test/unit/spec/meeting-info/index.js +181 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +131 -74
- package/test/unit/spec/meetings/collection.js +15 -1
- package/test/unit/spec/meetings/index.js +1254 -330
- package/test/unit/spec/meetings/utils.js +220 -14
- package/test/unit/spec/member/index.js +58 -5
- package/test/unit/spec/member/util.js +494 -26
- package/test/unit/spec/members/index.js +423 -55
- package/test/unit/spec/members/request.js +228 -40
- package/test/unit/spec/members/utils.js +191 -4
- package/test/unit/spec/metrics/index.js +12 -66
- package/test/unit/spec/multistream/mediaRequestManager.ts +1013 -106
- package/test/unit/spec/multistream/receiveSlot.ts +77 -18
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +40 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +730 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +155 -9
- package/test/unit/spec/recording-controller/index.js +307 -0
- package/test/unit/spec/recording-controller/util.js +229 -0
- package/test/unit/spec/roap/index.ts +28 -52
- package/test/unit/spec/roap/request.ts +225 -0
- package/test/unit/spec/roap/turnDiscovery.ts +92 -50
- package/test/unit/spec/rtcMetrics/index.ts +60 -0
- package/test/unit/spec/stats-analyzer/index.js +116 -60
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +63 -99
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -301
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/index.js +0 -15
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/index.js +0 -459
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting/index.js +0 -6284
- package/src/meeting/muteState.js +0 -318
- package/src/meeting/util.js +0 -506
- package/src/meeting-info/index.js +0 -131
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/member/util.js +0 -254
- package/src/members/request.js +0 -131
- package/src/members/util.js +0 -258
- package/src/metrics/config.js +0 -324
- package/src/metrics/index.js +0 -530
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -7,28 +7,30 @@
|
|
|
7
7
|
import _ from 'lodash';
|
|
8
8
|
|
|
9
9
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
10
|
-
import {
|
|
11
|
-
ICE_GATHERING_STATE,
|
|
12
|
-
CONNECTION_STATE,
|
|
13
|
-
REACHABILITY
|
|
14
|
-
} from '../constants';
|
|
10
|
+
import {ICE_GATHERING_STATE, CONNECTION_STATE, REACHABILITY} from '../constants';
|
|
15
11
|
|
|
16
12
|
import ReachabilityRequest from './request';
|
|
17
13
|
|
|
18
14
|
const DEFAULT_TIMEOUT = 3000;
|
|
19
15
|
const VIDEO_MESH_TIMEOUT = 1000;
|
|
20
16
|
|
|
17
|
+
export type ICECandidateResult = {clusterId: string; elapsed?: string | null; publicIPs?: string[]};
|
|
21
18
|
/**
|
|
22
19
|
* @class Reachability
|
|
23
20
|
* @export
|
|
24
21
|
*/
|
|
25
22
|
export default class Reachability {
|
|
23
|
+
namespace = REACHABILITY.namespace;
|
|
24
|
+
webex: object;
|
|
25
|
+
reachabilityRequest: any;
|
|
26
|
+
clusterLatencyResults: any;
|
|
27
|
+
|
|
26
28
|
/**
|
|
27
29
|
* Creates an instance of Reachability.
|
|
28
30
|
* @param {object} webex
|
|
29
31
|
* @memberof Reachability
|
|
30
32
|
*/
|
|
31
|
-
constructor(webex) {
|
|
33
|
+
constructor(webex: object) {
|
|
32
34
|
this.webex = webex;
|
|
33
35
|
|
|
34
36
|
/**
|
|
@@ -50,7 +52,6 @@ export default class Reachability {
|
|
|
50
52
|
this.clusterLatencyResults = {};
|
|
51
53
|
}
|
|
52
54
|
|
|
53
|
-
|
|
54
55
|
/**
|
|
55
56
|
* fetches reachability data
|
|
56
57
|
* @returns {Object} reachability data
|
|
@@ -58,34 +59,44 @@ export default class Reachability {
|
|
|
58
59
|
* @async
|
|
59
60
|
* @memberof Reachability
|
|
60
61
|
*/
|
|
61
|
-
async gatherReachability() {
|
|
62
|
+
public async gatherReachability() {
|
|
62
63
|
this.setup();
|
|
63
64
|
|
|
64
65
|
// Remove stored reachability results to ensure no stale data
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
LoggerProxy.logger.error('Reachability:index#gatherReachability --> Error in accessing LocalStorage.');
|
|
70
|
-
|
|
71
|
-
return {};
|
|
72
|
-
}
|
|
66
|
+
// @ts-ignore
|
|
67
|
+
await this.webex.boundedStorage.del(this.namespace, REACHABILITY.localStorageResult);
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
await this.webex.boundedStorage.del(this.namespace, REACHABILITY.localStorageJoinCookie);
|
|
73
70
|
|
|
74
71
|
// Fetch clusters and measure latency
|
|
75
72
|
try {
|
|
76
|
-
const clusters = await this.reachabilityRequest.getClusters();
|
|
73
|
+
const {clusters, joinCookie} = await this.reachabilityRequest.getClusters();
|
|
77
74
|
|
|
78
75
|
// Perform Reachability Check
|
|
79
76
|
const results = await this.performReachabilityCheck(clusters);
|
|
80
77
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
await this.webex.boundedStorage.put(
|
|
80
|
+
this.namespace,
|
|
81
|
+
REACHABILITY.localStorageResult,
|
|
82
|
+
JSON.stringify(results)
|
|
83
|
+
);
|
|
84
|
+
// @ts-ignore
|
|
85
|
+
await this.webex.boundedStorage.put(
|
|
86
|
+
this.namespace,
|
|
87
|
+
REACHABILITY.localStorageJoinCookie,
|
|
88
|
+
JSON.stringify(joinCookie)
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
LoggerProxy.logger.log(
|
|
92
|
+
'Reachability:index#gatherReachability --> Reachability checks completed'
|
|
93
|
+
);
|
|
84
94
|
|
|
85
95
|
return results;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
96
|
+
} catch (getClusterError) {
|
|
97
|
+
LoggerProxy.logger.error(
|
|
98
|
+
`Reachability:index#gatherReachability --> Error in calling getClusters(): ${getClusterError}`
|
|
99
|
+
);
|
|
89
100
|
|
|
90
101
|
return {};
|
|
91
102
|
}
|
|
@@ -97,25 +108,30 @@ export default class Reachability {
|
|
|
97
108
|
* @public
|
|
98
109
|
* @memberof Reachability
|
|
99
110
|
*/
|
|
100
|
-
isAnyClusterReachable() {
|
|
111
|
+
async isAnyClusterReachable() {
|
|
101
112
|
let reachable = false;
|
|
102
|
-
|
|
113
|
+
// @ts-ignore
|
|
114
|
+
const reachabilityData = await this.webex.boundedStorage
|
|
115
|
+
.get(this.namespace, REACHABILITY.localStorageResult)
|
|
116
|
+
.catch(() => {});
|
|
103
117
|
|
|
104
118
|
if (reachabilityData) {
|
|
105
119
|
try {
|
|
106
120
|
const reachabilityResults = JSON.parse(reachabilityData);
|
|
107
121
|
|
|
108
|
-
reachable = Object.values(reachabilityResults).some(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
122
|
+
reachable = Object.values(reachabilityResults).some(
|
|
123
|
+
(result: any) => result.udp?.reachable === 'true' || result.tcp?.reachable === 'true'
|
|
124
|
+
);
|
|
125
|
+
} catch (e) {
|
|
126
|
+
LoggerProxy.logger.error(
|
|
127
|
+
`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
|
|
128
|
+
);
|
|
112
129
|
}
|
|
113
130
|
}
|
|
114
131
|
|
|
115
132
|
return reachable;
|
|
116
133
|
}
|
|
117
134
|
|
|
118
|
-
|
|
119
135
|
/**
|
|
120
136
|
* Generate peerConnection config settings
|
|
121
137
|
* @param {object} cluster
|
|
@@ -123,26 +139,20 @@ export default class Reachability {
|
|
|
123
139
|
* @private
|
|
124
140
|
* @memberof Reachability
|
|
125
141
|
*/
|
|
126
|
-
buildPeerConnectionConfig(cluster) {
|
|
127
|
-
const iceServers = _.uniq([
|
|
128
|
-
...cluster.udp,
|
|
129
|
-
...cluster.tcp
|
|
130
|
-
]).map((url) => ({
|
|
142
|
+
private buildPeerConnectionConfig(cluster: any) {
|
|
143
|
+
const iceServers = _.uniq([...cluster.udp, ...cluster.tcp]).map((url) => ({
|
|
131
144
|
username: '',
|
|
132
145
|
credential: '',
|
|
133
|
-
urls: [url]
|
|
146
|
+
urls: [url],
|
|
134
147
|
}));
|
|
135
148
|
|
|
136
149
|
return {
|
|
137
|
-
iceServers: [
|
|
138
|
-
...iceServers
|
|
139
|
-
],
|
|
150
|
+
iceServers: [...iceServers],
|
|
140
151
|
iceCandidatePoolSize: '0',
|
|
141
|
-
iceTransportPolicy: 'all'
|
|
152
|
+
iceTransportPolicy: 'all',
|
|
142
153
|
};
|
|
143
154
|
}
|
|
144
155
|
|
|
145
|
-
|
|
146
156
|
/**
|
|
147
157
|
* Creates an RTCPeerConnection
|
|
148
158
|
* @param {object} cluster
|
|
@@ -150,24 +160,25 @@ export default class Reachability {
|
|
|
150
160
|
* @private
|
|
151
161
|
* @memberof Reachability
|
|
152
162
|
*/
|
|
153
|
-
createPeerConnection(cluster) {
|
|
163
|
+
private createPeerConnection(cluster: any) {
|
|
154
164
|
const {key, config} = cluster;
|
|
155
165
|
|
|
156
166
|
try {
|
|
157
167
|
const peerConnection = new window.RTCPeerConnection(config);
|
|
158
168
|
|
|
169
|
+
// @ts-ignore
|
|
159
170
|
peerConnection.key = key;
|
|
160
171
|
|
|
161
172
|
return peerConnection;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
|
|
173
|
+
} catch (peerConnectionError) {
|
|
174
|
+
LoggerProxy.logger.log(
|
|
175
|
+
`Reachability:index#createPeerConnection --> Error creating peerConnection: ${peerConnectionError}`
|
|
176
|
+
);
|
|
165
177
|
|
|
166
178
|
return null;
|
|
167
179
|
}
|
|
168
180
|
}
|
|
169
181
|
|
|
170
|
-
|
|
171
182
|
/**
|
|
172
183
|
* Gets total elapsed time
|
|
173
184
|
* @param {RTCPeerConnection} peerConnection
|
|
@@ -175,7 +186,7 @@ export default class Reachability {
|
|
|
175
186
|
* @private
|
|
176
187
|
* @memberof Reachability
|
|
177
188
|
*/
|
|
178
|
-
getElapsedTime(peerConnection) {
|
|
189
|
+
private getElapsedTime(peerConnection: any) {
|
|
179
190
|
const startTime = peerConnection.begin;
|
|
180
191
|
|
|
181
192
|
delete peerConnection.begin;
|
|
@@ -183,7 +194,6 @@ export default class Reachability {
|
|
|
183
194
|
return Date.now() - startTime;
|
|
184
195
|
}
|
|
185
196
|
|
|
186
|
-
|
|
187
197
|
/**
|
|
188
198
|
* creates offer and generates localSDP
|
|
189
199
|
* @param {object} clusterList cluster List
|
|
@@ -191,8 +201,8 @@ export default class Reachability {
|
|
|
191
201
|
* @private
|
|
192
202
|
* @memberof Reachability
|
|
193
203
|
*/
|
|
194
|
-
getLocalSDPForClusters(clusterList) {
|
|
195
|
-
let clusters = [...Object.keys(clusterList)];
|
|
204
|
+
private getLocalSDPForClusters(clusterList: object) {
|
|
205
|
+
let clusters: any[] = [...Object.keys(clusterList)];
|
|
196
206
|
|
|
197
207
|
clusters = clusters.map(async (key) => {
|
|
198
208
|
const cluster = clusterList[key];
|
|
@@ -200,13 +210,18 @@ export default class Reachability {
|
|
|
200
210
|
const peerConnection = this.createPeerConnection({key, config});
|
|
201
211
|
const description = await peerConnection.createOffer({offerToReceiveAudio: true});
|
|
202
212
|
|
|
213
|
+
// @ts-ignore
|
|
203
214
|
peerConnection.begin = Date.now();
|
|
204
215
|
peerConnection.setLocalDescription(description);
|
|
205
216
|
|
|
206
|
-
return this.iceGatheringState(
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
217
|
+
return this.iceGatheringState(
|
|
218
|
+
peerConnection,
|
|
219
|
+
cluster.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT
|
|
220
|
+
).catch((iceGatheringStateError) => {
|
|
221
|
+
LoggerProxy.logger.log(
|
|
222
|
+
`Reachability:index#getLocalSDPForClusters --> Error in getLocalSDP : ${iceGatheringStateError}`
|
|
223
|
+
);
|
|
224
|
+
});
|
|
210
225
|
});
|
|
211
226
|
|
|
212
227
|
return Promise.all(clusters)
|
|
@@ -219,14 +234,13 @@ export default class Reachability {
|
|
|
219
234
|
});
|
|
220
235
|
}
|
|
221
236
|
|
|
222
|
-
|
|
223
237
|
/**
|
|
224
238
|
* Get list of all unreachable clusters
|
|
225
239
|
* @returns {array} Unreachable clusters
|
|
226
240
|
* @private
|
|
227
241
|
* @memberof Reachability
|
|
228
242
|
*/
|
|
229
|
-
getUnreachablClusters() {
|
|
243
|
+
private getUnreachablClusters() {
|
|
230
244
|
const unreachableList = [];
|
|
231
245
|
const clusters = this.clusterLatencyResults;
|
|
232
246
|
|
|
@@ -241,7 +255,6 @@ export default class Reachability {
|
|
|
241
255
|
return unreachableList;
|
|
242
256
|
}
|
|
243
257
|
|
|
244
|
-
|
|
245
258
|
/**
|
|
246
259
|
* Attach an event handler for the icegatheringstatechange
|
|
247
260
|
* event and measure latency.
|
|
@@ -250,20 +263,24 @@ export default class Reachability {
|
|
|
250
263
|
* @private
|
|
251
264
|
* @memberof Reachability
|
|
252
265
|
*/
|
|
253
|
-
handleIceGatheringStateChange(peerConnection) {
|
|
266
|
+
private handleIceGatheringStateChange(peerConnection: RTCPeerConnection) {
|
|
254
267
|
peerConnection.onicegatheringstatechange = () => {
|
|
255
268
|
const {COMPLETE} = ICE_GATHERING_STATE;
|
|
256
269
|
|
|
257
270
|
if (peerConnection.iceConnectionState === COMPLETE) {
|
|
258
271
|
const elapsed = this.getElapsedTime(peerConnection);
|
|
259
272
|
|
|
260
|
-
|
|
273
|
+
// @ts-ignore
|
|
274
|
+
LoggerProxy.logger.log(
|
|
275
|
+
// @ts-ignore
|
|
276
|
+
`Reachability:index#onIceGatheringStateChange --> Successfully pinged ${peerConnection.key}:`,
|
|
277
|
+
elapsed
|
|
278
|
+
);
|
|
261
279
|
this.setLatencyAndClose(peerConnection, elapsed);
|
|
262
280
|
}
|
|
263
281
|
};
|
|
264
282
|
}
|
|
265
283
|
|
|
266
|
-
|
|
267
284
|
/**
|
|
268
285
|
* Attach an event handler for the icecandidate
|
|
269
286
|
* event and measure latency.
|
|
@@ -272,14 +289,20 @@ export default class Reachability {
|
|
|
272
289
|
* @private
|
|
273
290
|
* @memberof Reachability
|
|
274
291
|
*/
|
|
275
|
-
handleOnIceCandidate(peerConnection) {
|
|
292
|
+
private handleOnIceCandidate(peerConnection: RTCPeerConnection) {
|
|
276
293
|
peerConnection.onicecandidate = (e) => {
|
|
277
294
|
const SERVER_REFLEXIVE = 'srflx';
|
|
278
295
|
|
|
279
296
|
if (e.candidate && String(e.candidate.type).toLowerCase() === SERVER_REFLEXIVE) {
|
|
280
297
|
const elapsed = this.getElapsedTime(peerConnection);
|
|
281
298
|
|
|
282
|
-
LoggerProxy.logger.log(
|
|
299
|
+
LoggerProxy.logger.log(
|
|
300
|
+
// @ts-ignore
|
|
301
|
+
`Reachability:index#onIceCandidate --> Successfully pinged ${peerConnection.key}:`,
|
|
302
|
+
elapsed
|
|
303
|
+
);
|
|
304
|
+
// order is important
|
|
305
|
+
this.addPublicIP(peerConnection, e.candidate.address);
|
|
283
306
|
this.setLatencyAndClose(peerConnection, elapsed);
|
|
284
307
|
}
|
|
285
308
|
};
|
|
@@ -294,15 +317,16 @@ export default class Reachability {
|
|
|
294
317
|
* @param {number} timeout
|
|
295
318
|
* @returns {Promise}
|
|
296
319
|
*/
|
|
297
|
-
iceGatheringState(peerConnection, timeout) {
|
|
320
|
+
private iceGatheringState(peerConnection: RTCPeerConnection, timeout: number) {
|
|
298
321
|
const ELAPSED = 'elapsed';
|
|
299
322
|
|
|
300
|
-
return new Promise((resolve) => {
|
|
323
|
+
return new Promise<ICECandidateResult>((resolve) => {
|
|
301
324
|
const peerConnectionProxy = new window.Proxy(peerConnection, {
|
|
325
|
+
// eslint-disable-next-line require-jsdoc
|
|
302
326
|
get(target, property) {
|
|
303
327
|
const targetMember = target[property];
|
|
304
328
|
|
|
305
|
-
if (typeof
|
|
329
|
+
if (typeof targetMember === 'function') {
|
|
306
330
|
return targetMember.bind(target);
|
|
307
331
|
}
|
|
308
332
|
|
|
@@ -311,14 +335,15 @@ export default class Reachability {
|
|
|
311
335
|
set: (target, property, value) => {
|
|
312
336
|
// only intercept elapsed property
|
|
313
337
|
if (property === ELAPSED) {
|
|
314
|
-
|
|
338
|
+
// @ts-ignore
|
|
339
|
+
resolve({clusterId: peerConnection.key, publicIPs: target.publicIPs, elapsed: value});
|
|
315
340
|
|
|
316
341
|
return true;
|
|
317
342
|
}
|
|
318
343
|
|
|
319
344
|
// pass thru
|
|
320
345
|
return window.Reflect.set(target, property, value);
|
|
321
|
-
}
|
|
346
|
+
},
|
|
322
347
|
});
|
|
323
348
|
|
|
324
349
|
// Using peerConnection proxy so handle functions below
|
|
@@ -332,61 +357,67 @@ export default class Reachability {
|
|
|
332
357
|
|
|
333
358
|
// Close any open peerConnections
|
|
334
359
|
if (peerConnectionProxy.connectionState !== CLOSED) {
|
|
360
|
+
// order is important
|
|
361
|
+
this.addPublicIP(peerConnectionProxy, null);
|
|
335
362
|
this.setLatencyAndClose(peerConnectionProxy, null);
|
|
336
363
|
}
|
|
337
364
|
}, timeout);
|
|
338
365
|
});
|
|
339
366
|
}
|
|
340
367
|
|
|
341
|
-
|
|
342
368
|
/**
|
|
343
369
|
* Make a log of unreachable clusters.
|
|
344
370
|
* @returns {undefined}
|
|
345
371
|
* @private
|
|
346
372
|
* @memberof Reachability
|
|
347
373
|
*/
|
|
348
|
-
logUnreachableClusters() {
|
|
374
|
+
private logUnreachableClusters() {
|
|
349
375
|
const list = this.getUnreachablClusters();
|
|
350
376
|
|
|
351
377
|
list.forEach((cluster) => {
|
|
352
|
-
LoggerProxy.logger.log(
|
|
378
|
+
LoggerProxy.logger.log(
|
|
379
|
+
`Reachability:index#logUnreachableClusters --> No ice candidate for ${cluster}.`
|
|
380
|
+
);
|
|
353
381
|
});
|
|
354
382
|
}
|
|
355
383
|
|
|
356
|
-
|
|
357
384
|
/**
|
|
358
385
|
* Calculates time to establish connection
|
|
359
|
-
* @param {
|
|
386
|
+
* @param {Array<ICECandidateResult>} iceResults iceResults
|
|
360
387
|
* @returns {object} reachabilityMap
|
|
361
|
-
* @
|
|
388
|
+
* @protected
|
|
362
389
|
* @memberof Reachability
|
|
363
390
|
*/
|
|
364
|
-
parseIceResultsToReachabilityResults(iceResults) {
|
|
391
|
+
protected parseIceResultsToReachabilityResults(iceResults: Array<ICECandidateResult>) {
|
|
365
392
|
const reachabilityMap = {};
|
|
366
393
|
|
|
367
|
-
iceResults.forEach(({clusterId, elapsed}) => {
|
|
368
|
-
|
|
394
|
+
iceResults.forEach(({clusterId, elapsed, publicIPs}) => {
|
|
395
|
+
const latencyResult = {};
|
|
369
396
|
|
|
370
|
-
if (elapsed
|
|
371
|
-
latencyResult
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
latencyResult = {
|
|
397
|
+
if (!elapsed) {
|
|
398
|
+
Object.assign(latencyResult, {reachable: 'false'});
|
|
399
|
+
} else {
|
|
400
|
+
Object.assign(latencyResult, {
|
|
375
401
|
reachable: 'true',
|
|
376
|
-
latencyInMilliseconds:
|
|
377
|
-
};
|
|
402
|
+
latencyInMilliseconds: elapsed.toString(),
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
if (publicIPs) {
|
|
407
|
+
Object.assign(latencyResult, {
|
|
408
|
+
clientMediaIPs: publicIPs,
|
|
409
|
+
});
|
|
378
410
|
}
|
|
379
411
|
|
|
380
412
|
reachabilityMap[clusterId] = {
|
|
381
413
|
udp: latencyResult,
|
|
382
|
-
tcp: latencyResult
|
|
414
|
+
tcp: latencyResult,
|
|
383
415
|
};
|
|
384
416
|
});
|
|
385
417
|
|
|
386
418
|
return reachabilityMap;
|
|
387
419
|
}
|
|
388
420
|
|
|
389
|
-
|
|
390
421
|
/**
|
|
391
422
|
* fetches reachability data
|
|
392
423
|
* @param {object} clusterList
|
|
@@ -394,7 +425,7 @@ export default class Reachability {
|
|
|
394
425
|
* @private
|
|
395
426
|
* @memberof Reachability
|
|
396
427
|
*/
|
|
397
|
-
performReachabilityCheck(clusterList) {
|
|
428
|
+
private performReachabilityCheck(clusterList: object) {
|
|
398
429
|
if (!clusterList || !Object.keys(clusterList).length) {
|
|
399
430
|
return Promise.resolve({});
|
|
400
431
|
}
|
|
@@ -404,20 +435,49 @@ export default class Reachability {
|
|
|
404
435
|
.then((localSDPData) => {
|
|
405
436
|
if (!localSDPData || !Object.keys(localSDPData).length) {
|
|
406
437
|
// TODO: handle the error condition properly and try retry
|
|
407
|
-
LoggerProxy.logger.log(
|
|
438
|
+
LoggerProxy.logger.log(
|
|
439
|
+
'Reachability:index#performReachabilityCheck --> Local SDP is empty or has missing elements..returning'
|
|
440
|
+
);
|
|
408
441
|
resolve({});
|
|
409
|
-
}
|
|
410
|
-
else {
|
|
442
|
+
} else {
|
|
411
443
|
resolve(localSDPData);
|
|
412
444
|
}
|
|
413
445
|
})
|
|
414
446
|
.catch((error) => {
|
|
415
|
-
LoggerProxy.logger.error(
|
|
447
|
+
LoggerProxy.logger.error(
|
|
448
|
+
`Reachability:index#performReachabilityCheck --> Error in getLocalSDPForClusters: ${error}`
|
|
449
|
+
);
|
|
416
450
|
resolve({});
|
|
417
451
|
});
|
|
418
452
|
});
|
|
419
453
|
}
|
|
420
454
|
|
|
455
|
+
/**
|
|
456
|
+
* Adds public IP (client media IPs)
|
|
457
|
+
* @param {RTCPeerConnection} peerConnection
|
|
458
|
+
* @param {string} publicIP
|
|
459
|
+
* @returns {void}
|
|
460
|
+
*/
|
|
461
|
+
protected addPublicIP(peerConnection: RTCPeerConnection, publicIP?: string | null) {
|
|
462
|
+
const modifiedPeerConnection: RTCPeerConnection & {publicIPs?: string[]} = peerConnection;
|
|
463
|
+
const {CLOSED} = CONNECTION_STATE;
|
|
464
|
+
|
|
465
|
+
if (modifiedPeerConnection.connectionState === CLOSED) {
|
|
466
|
+
LoggerProxy.logger.log(
|
|
467
|
+
`Reachability:index#addPublicIP --> Attempting to set publicIP of ${publicIP} on closed peerConnection.`
|
|
468
|
+
);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
if (publicIP) {
|
|
472
|
+
if (modifiedPeerConnection.publicIPs) {
|
|
473
|
+
modifiedPeerConnection.publicIPs.push(publicIP);
|
|
474
|
+
} else {
|
|
475
|
+
modifiedPeerConnection.publicIPs = [publicIP];
|
|
476
|
+
}
|
|
477
|
+
} else {
|
|
478
|
+
modifiedPeerConnection.publicIPs = null;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
421
481
|
|
|
422
482
|
/**
|
|
423
483
|
* Records latency and closes the peerConnection
|
|
@@ -427,16 +487,19 @@ export default class Reachability {
|
|
|
427
487
|
* @private
|
|
428
488
|
* @memberof Reachability
|
|
429
489
|
*/
|
|
430
|
-
setLatencyAndClose(peerConnection, elapsed) {
|
|
490
|
+
private setLatencyAndClose(peerConnection: RTCPeerConnection, elapsed: number) {
|
|
431
491
|
const REACHABLE = 'reachable';
|
|
432
492
|
const UNREACHABLE = 'unreachable';
|
|
433
493
|
const {CLOSED} = CONNECTION_STATE;
|
|
494
|
+
// @ts-ignore
|
|
434
495
|
const {key} = peerConnection;
|
|
435
496
|
const resultKey = elapsed === null ? UNREACHABLE : REACHABLE;
|
|
436
497
|
const intialState = {[REACHABLE]: 0, [UNREACHABLE]: 0};
|
|
437
498
|
|
|
438
499
|
if (peerConnection.connectionState === CLOSED) {
|
|
439
|
-
LoggerProxy.logger.log(
|
|
500
|
+
LoggerProxy.logger.log(
|
|
501
|
+
`Reachability:index#setLatencyAndClose --> Attempting to set latency of ${elapsed} on closed peerConnection.`
|
|
502
|
+
);
|
|
440
503
|
|
|
441
504
|
return;
|
|
442
505
|
}
|
|
@@ -448,17 +511,17 @@ export default class Reachability {
|
|
|
448
511
|
// an event other than onIceCandidate
|
|
449
512
|
peerConnection.onicecandidate = null;
|
|
450
513
|
peerConnection.close();
|
|
514
|
+
// @ts-ignore
|
|
451
515
|
peerConnection.elapsed = elapsed;
|
|
452
516
|
}
|
|
453
517
|
|
|
454
|
-
|
|
455
518
|
/**
|
|
456
519
|
* utility function
|
|
457
520
|
* @returns {undefined}
|
|
458
521
|
* @private
|
|
459
522
|
* @memberof Reachability
|
|
460
523
|
*/
|
|
461
|
-
setup() {
|
|
524
|
+
private setup() {
|
|
462
525
|
this.clusterLatencyResults = {};
|
|
463
526
|
}
|
|
464
527
|
}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
2
|
-
import {
|
|
3
|
-
HTTP_VERBS,
|
|
4
|
-
RESOURCE,
|
|
5
|
-
API
|
|
6
|
-
} from '../constants';
|
|
2
|
+
import {HTTP_VERBS, RESOURCE, API} from '../constants';
|
|
7
3
|
|
|
8
4
|
export interface ClusterNode {
|
|
9
5
|
isVideoMesh: boolean;
|
|
@@ -13,63 +9,78 @@ export interface ClusterNode {
|
|
|
13
9
|
}
|
|
14
10
|
|
|
15
11
|
export type ClusterList = {
|
|
16
|
-
[key:string]: ClusterNode;
|
|
17
|
-
}
|
|
12
|
+
[key: string]: ClusterNode;
|
|
13
|
+
};
|
|
18
14
|
|
|
19
15
|
/**
|
|
20
16
|
* @class ReachabilityRequest
|
|
21
17
|
*/
|
|
22
18
|
class ReachabilityRequest {
|
|
19
|
+
webex: any;
|
|
20
|
+
|
|
23
21
|
/**
|
|
24
22
|
* Creates an instance of ReachabilityRequest.
|
|
25
23
|
* @param {object} webex
|
|
26
24
|
* @memberof ReachabilityRequest
|
|
27
25
|
*/
|
|
28
|
-
constructor(webex) {
|
|
26
|
+
constructor(webex: object) {
|
|
29
27
|
this.webex = webex;
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
/**
|
|
33
|
-
*
|
|
31
|
+
* Gets the cluster information
|
|
34
32
|
*
|
|
35
|
-
* @param {boolean} includeVideoMesh whether to include the video mesh clusters in the result or not
|
|
36
33
|
* @returns {Promise}
|
|
37
34
|
*/
|
|
38
|
-
getClusters = (): Promise<ClusterList> =>
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
35
|
+
getClusters = (): Promise<{clusters: ClusterList; joinCookie: any}> =>
|
|
36
|
+
this.webex
|
|
37
|
+
.request({
|
|
38
|
+
method: HTTP_VERBS.GET,
|
|
39
|
+
shouldRefreshAccessToken: false,
|
|
40
|
+
api: API.CALLIOPEDISCOVERY,
|
|
41
|
+
resource: RESOURCE.CLUSTERS,
|
|
42
|
+
qs: {
|
|
43
|
+
JCSupport: 1,
|
|
44
|
+
},
|
|
45
|
+
})
|
|
46
|
+
.then((res) => {
|
|
47
|
+
const {clusters, joinCookie} = res.body;
|
|
46
48
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
Object.keys(clusters).forEach((key) => {
|
|
50
|
+
clusters[key].isVideoMesh = res.body.clusterClasses?.hybridMedia?.includes(key);
|
|
51
|
+
});
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
LoggerProxy.logger.log(
|
|
54
|
+
`Reachability:request#getClusters --> get clusters successful:${JSON.stringify(clusters)}`
|
|
55
|
+
);
|
|
52
56
|
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
return {
|
|
58
|
+
clusters,
|
|
59
|
+
joinCookie,
|
|
60
|
+
};
|
|
61
|
+
});
|
|
55
62
|
|
|
56
63
|
/**
|
|
57
64
|
* gets remote SDP For Clusters
|
|
58
65
|
* @param {Object} localSDPList localSDPs for the cluster
|
|
59
66
|
* @returns {Object}
|
|
60
67
|
*/
|
|
61
|
-
remoteSDPForClusters = (localSDPList) =>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
remoteSDPForClusters = (localSDPList: object) =>
|
|
69
|
+
this.webex
|
|
70
|
+
.request({
|
|
71
|
+
method: HTTP_VERBS.POST,
|
|
72
|
+
shouldRefreshAccessToken: false,
|
|
73
|
+
api: API.CALLIOPEDISCOVERY,
|
|
74
|
+
resource: RESOURCE.REACHABILITY,
|
|
75
|
+
body: {offers: localSDPList},
|
|
76
|
+
})
|
|
77
|
+
.then((res) => {
|
|
78
|
+
LoggerProxy.logger.log(
|
|
79
|
+
'Reachability:request#remoteSDPForClusters --> Remote SDPs got succcessfully'
|
|
80
|
+
);
|
|
70
81
|
|
|
71
|
-
|
|
72
|
-
|
|
82
|
+
return res.body;
|
|
83
|
+
});
|
|
73
84
|
}
|
|
74
85
|
|
|
75
86
|
export default ReachabilityRequest;
|