@webex/plugin-meetings 2.60.0-next.9 → 2.60.1
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 +8 -46
- package/dist/common/browser-detection.js +3 -2
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +4 -3
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +2 -1
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +2 -1
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +2 -1
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +2 -1
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +2 -1
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +4 -3
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +2 -1
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +2 -1
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/{reclaim-host-role-errors.js → reclaim-host-role-error.js} +11 -7
- package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +2 -1
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +2 -1
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +2 -1
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.d.ts +8 -20
- package/dist/common/errors/webex-errors.js +28 -48
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +2 -1
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +2 -1
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +2 -1
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +2 -1
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +2 -1
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +2 -1
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +3 -2
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.d.ts +1 -3
- package/dist/common/logs/request.js +5 -8
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.d.ts +7 -9
- package/dist/common/queue.js +9 -22
- package/dist/common/queue.js.map +1 -1
- package/dist/config.d.ts +7 -5
- package/dist/config.js +11 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +97 -217
- package/dist/constants.js +441 -416
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +6 -3
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.d.ts +1 -11
- package/dist/controls-options-manager/enums.js +6 -15
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +1 -17
- package/dist/controls-options-manager/index.js +38 -127
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.d.ts +7 -1
- package/dist/controls-options-manager/util.js +19 -309
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.js +4 -116
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +11 -100
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +4 -3
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +2 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +2 -1
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.d.ts +4 -57
- package/dist/locus-info/index.js +84 -425
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +5 -13
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +3 -58
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.d.ts +6 -66
- package/dist/locus-info/parser.js +80 -253
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +13 -97
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.d.ts +0 -2
- package/dist/media/index.js +319 -107
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.d.ts +53 -38
- package/dist/media/properties.js +153 -96
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +22 -1
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.d.ts +230 -234
- package/dist/mediaQualityMetrics/config.js +498 -302
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.d.ts +42 -0
- package/dist/meeting/effectsState.js +260 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/in-meeting-actions.d.ts +0 -88
- package/dist/meeting/in-meeting-actions.js +3 -94
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +494 -591
- package/dist/meeting/index.js +2969 -4707
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.d.ts +25 -93
- package/dist/meeting/muteState.js +133 -224
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +47 -82
- package/dist/meeting/request.js +199 -297
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +2 -1
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.d.ts +1 -102
- package/dist/meeting/util.js +435 -605
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +4 -3
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.d.ts +1 -13
- package/dist/meeting-info/index.js +7 -74
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.d.ts +1 -31
- package/dist/meeting-info/meeting-info-v2.js +63 -200
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +2 -1
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +3 -2
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +41 -39
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +0 -17
- package/dist/meetings/collection.js +4 -42
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.d.ts +21 -103
- package/dist/meetings/index.js +124 -486
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +3 -4
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +6 -107
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.d.ts +1 -13
- package/dist/member/index.js +2 -45
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +4 -3
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/util.js +29 -120
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +0 -5
- package/dist/members/collection.js +2 -11
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.d.ts +11 -56
- package/dist/members/index.js +47 -174
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.d.ts +11 -67
- package/dist/members/request.js +54 -102
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +4 -3
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.d.ts +1 -214
- package/dist/members/util.js +284 -327
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.d.ts +169 -0
- package/dist/metrics/config.js +289 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/constants.d.ts +6 -15
- package/dist/metrics/constants.js +9 -17
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +111 -4
- package/dist/metrics/index.js +452 -4
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +4 -5
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.d.ts +6 -0
- package/dist/peer-connection-manager/index.js +671 -0
- package/dist/peer-connection-manager/index.js.map +1 -0
- package/dist/peer-connection-manager/util.d.ts +6 -0
- package/dist/peer-connection-manager/util.js +110 -0
- package/dist/peer-connection-manager/util.js.map +1 -0
- package/dist/personal-meeting-room/index.js +3 -2
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +3 -2
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +2 -1
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.d.ts +7 -62
- package/dist/reachability/index.js +72 -265
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +3 -7
- package/dist/reachability/request.js +10 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.d.ts +2 -2
- package/dist/reactions/reactions.js +6 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.d.ts +3 -23
- package/dist/reactions/reactions.type.js +23 -21
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.d.ts +8 -32
- package/dist/reconnection-manager/index.js +231 -282
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +5 -4
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.d.ts +1 -15
- package/dist/recording-controller/index.js +46 -57
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +4 -5
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/collection.d.ts +10 -0
- package/dist/roap/collection.js +63 -0
- package/dist/roap/collection.js.map +1 -0
- package/dist/roap/handler.d.ts +47 -0
- package/dist/roap/handler.js +279 -0
- package/dist/roap/handler.js.map +1 -0
- package/dist/roap/index.d.ts +47 -9
- package/dist/roap/index.js +235 -101
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +12 -18
- package/dist/roap/request.js +180 -126
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.d.ts +9 -0
- package/dist/roap/state.js +127 -0
- package/dist/roap/state.js.map +1 -0
- package/dist/roap/turnDiscovery.d.ts +16 -27
- package/dist/roap/turnDiscovery.js +105 -115
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.d.ts +2 -0
- package/dist/roap/util.js +76 -0
- package/dist/roap/util.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +83 -1
- package/dist/statsAnalyzer/global.js +85 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +30 -28
- package/dist/statsAnalyzer/index.js +509 -374
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +6 -8
- package/dist/statsAnalyzer/mqaUtil.js +83 -116
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +2 -1
- package/dist/transcription/index.js.map +1 -1
- package/package.json +26 -35
- package/src/common/errors/webex-errors.ts +12 -36
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +1 -5
- package/src/common/queue.ts +8 -22
- package/src/config.ts +7 -5
- package/src/constants.ts +97 -244
- package/src/controls-options-manager/enums.ts +0 -12
- package/src/controls-options-manager/index.ts +21 -116
- package/src/controls-options-manager/util.ts +14 -294
- package/src/index.js +15 -0
- package/src/locus-info/controlsUtils.ts +0 -110
- package/src/locus-info/index.ts +61 -449
- package/src/locus-info/infoUtils.ts +2 -14
- package/src/locus-info/mediaSharesUtils.ts +0 -64
- package/src/locus-info/parser.ts +47 -258
- package/src/locus-info/selfUtils.ts +2 -85
- package/src/media/index.ts +370 -153
- package/src/media/properties.ts +136 -106
- package/src/media/util.ts +21 -0
- package/src/mediaQualityMetrics/config.ts +377 -244
- package/src/meeting/effectsState.ts +209 -0
- package/src/meeting/in-meeting-actions.ts +0 -176
- package/src/meeting/index.ts +2482 -3929
- package/src/meeting/muteState.ts +138 -224
- package/src/meeting/request.ts +127 -207
- package/src/meeting/util.ts +423 -590
- package/src/meeting-info/index.ts +8 -81
- package/src/meeting-info/meeting-info-v2.ts +13 -163
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +28 -28
- package/src/meetings/collection.ts +0 -33
- package/src/meetings/index.ts +126 -486
- package/src/meetings/request.ts +0 -2
- package/src/meetings/util.ts +5 -116
- package/src/member/index.ts +1 -43
- package/src/member/util.ts +28 -125
- package/src/members/collection.ts +0 -8
- package/src/members/index.ts +52 -187
- package/src/members/request.ts +27 -87
- package/src/members/util.ts +291 -332
- package/src/metrics/config.ts +485 -0
- package/src/metrics/constants.ts +6 -15
- package/src/metrics/index.ts +471 -1
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/peer-connection-manager/index.ts +847 -0
- package/src/peer-connection-manager/util.ts +119 -0
- package/src/reachability/index.ts +45 -238
- package/src/reachability/request.ts +8 -17
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +4 -30
- package/src/reconnection-manager/index.ts +156 -168
- package/src/recording-controller/index.ts +3 -20
- package/src/recording-controller/util.ts +9 -26
- package/src/roap/collection.ts +62 -0
- package/src/roap/handler.ts +294 -0
- package/src/roap/index.ts +241 -98
- package/src/roap/request.ts +148 -74
- package/src/roap/state.ts +156 -0
- package/src/roap/turnDiscovery.ts +56 -62
- package/src/roap/util.ts +100 -0
- package/src/statsAnalyzer/global.ts +84 -1
- package/src/statsAnalyzer/index.ts +642 -413
- package/src/statsAnalyzer/mqaUtil.ts +114 -111
- package/test/integration/spec/journey.js +264 -320
- package/test/integration/spec/space-meeting.js +4 -77
- package/test/unit/spec/common/queue.js +2 -31
- package/test/unit/spec/controls-options-manager/index.js +0 -163
- package/test/unit/spec/controls-options-manager/util.js +60 -576
- package/test/unit/spec/fixture/locus.js +0 -1
- package/test/unit/spec/locus-info/controlsUtils.js +30 -323
- package/test/unit/spec/locus-info/index.js +15 -1389
- package/test/unit/spec/locus-info/infoUtils.js +16 -54
- package/test/unit/spec/locus-info/lib/SeqCmp.json +0 -16
- package/test/unit/spec/locus-info/lib/selfConstant.js +0 -48
- package/test/unit/spec/locus-info/parser.js +35 -116
- package/test/unit/spec/locus-info/selfUtils.js +0 -275
- package/test/unit/spec/media/properties.ts +84 -75
- package/test/unit/spec/meeting/effectsState.js +281 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +0 -86
- package/test/unit/spec/meeting/index.js +3136 -8547
- package/test/unit/spec/meeting/muteState.js +213 -409
- package/test/unit/spec/meeting/request.js +42 -512
- package/test/unit/spec/meeting/utils.js +24 -741
- package/test/unit/spec/meeting-info/meetinginfov2.js +5 -527
- package/test/unit/spec/meeting-info/utilv2.js +0 -21
- package/test/unit/spec/meetings/collection.js +0 -26
- package/test/unit/spec/meetings/index.js +211 -1278
- package/test/unit/spec/meetings/utils.js +2 -202
- package/test/unit/spec/member/index.js +9 -32
- package/test/unit/spec/member/util.js +61 -499
- package/test/unit/spec/members/index.js +5 -394
- package/test/unit/spec/members/request.js +27 -206
- package/test/unit/spec/members/utils.js +38 -173
- package/test/unit/spec/metrics/index.js +50 -1
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/peerconnection-manager/index.js +218 -0
- package/test/unit/spec/peerconnection-manager/utils.js +49 -0
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +388 -0
- package/test/unit/spec/reachability/index.ts +24 -598
- package/test/unit/spec/reconnection-manager/index.js +24 -162
- package/test/unit/spec/recording-controller/index.js +218 -293
- package/test/unit/spec/recording-controller/util.js +96 -223
- package/test/unit/spec/roap/index.ts +76 -200
- package/test/unit/spec/roap/turnDiscovery.ts +48 -86
- package/test/unit/spec/roap/util.js +30 -0
- package/test/unit/spec/stats-analyzer/index.js +174 -188
- package/test/utils/testUtils.js +45 -0
- package/test/utils/webex-config.js +0 -4
- package/test/utils/webex-test-users.js +3 -7
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/annotation.types.js +0 -7
- package/dist/annotation/annotation.types.js.map +0 -1
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/constants.js +0 -41
- package/dist/annotation/constants.js.map +0 -1
- package/dist/annotation/index.d.ts +0 -117
- package/dist/annotation/index.js +0 -357
- package/dist/annotation/index.js.map +0 -1
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/breakout.js +0 -215
- package/dist/breakouts/breakout.js.map +0 -1
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/collection.js +0 -22
- package/dist/breakouts/collection.js.map +0 -1
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/edit-lock-error.js +0 -51
- package/dist/breakouts/edit-lock-error.js.map +0 -1
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/events.js +0 -44
- package/dist/breakouts/events.js.map +0 -1
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/index.js +0 -1047
- package/dist/breakouts/index.js.map +0 -1
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/request.js +0 -77
- package/dist/breakouts/request.js.map +0 -1
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/breakouts/utils.js +0 -64
- package/dist/breakouts/utils.js.map +0 -1
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/no-meeting-info.js +0 -50
- package/dist/common/errors/no-meeting-info.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.js.map +0 -1
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/types.js +0 -7
- package/dist/controls-options-manager/types.js.map +0 -1
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/collection.js +0 -22
- package/dist/interpretation/collection.js.map +0 -1
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/index.js +0 -365
- package/dist/interpretation/index.js.map +0 -1
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/interpretation/siLanguage.js +0 -24
- package/dist/interpretation/siLanguage.js.map +0 -1
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/locusMediaRequest.js +0 -291
- package/dist/meeting/locusMediaRequest.js.map +0 -1
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/request.type.js +0 -7
- package/dist/meeting/request.type.js.map +0 -1
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/meetings.types.js +0 -7
- package/dist/meetings/meetings.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/types.js +0 -23
- package/dist/member/types.js.map +0 -1
- package/dist/multistream/mediaRequestManager.d.ts +0 -118
- package/dist/multistream/mediaRequestManager.js +0 -344
- package/dist/multistream/mediaRequestManager.js.map +0 -1
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlot.js +0 -200
- package/dist/multistream/receiveSlot.js.map +0 -1
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/receiveSlotManager.js +0 -174
- package/dist/multistream/receiveSlotManager.js.map +0 -1
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMedia.js +0 -268
- package/dist/multistream/remoteMedia.js.map +0 -1
- package/dist/multistream/remoteMediaGroup.d.ts +0 -47
- package/dist/multistream/remoteMediaGroup.js +0 -267
- package/dist/multistream/remoteMediaGroup.js.map +0 -1
- package/dist/multistream/remoteMediaManager.d.ts +0 -285
- package/dist/multistream/remoteMediaManager.js +0 -1211
- package/dist/multistream/remoteMediaManager.js.map +0 -1
- package/dist/multistream/sendSlotManager.d.ts +0 -61
- package/dist/multistream/sendSlotManager.js +0 -236
- package/dist/multistream/sendSlotManager.js.map +0 -1
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/constants.js +0 -12
- package/dist/reactions/constants.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.d.ts +0 -54
- package/dist/rtcMetrics/index.js +0 -140
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/collection.js +0 -43
- package/dist/webinar/collection.js.map +0 -1
- package/dist/webinar/index.d.ts +0 -5
- package/dist/webinar/index.js +0 -68
- package/dist/webinar/index.js.map +0 -1
- package/src/annotation/annotation.types.ts +0 -50
- package/src/annotation/constants.ts +0 -36
- package/src/annotation/index.ts +0 -328
- package/src/breakouts/README.md +0 -220
- package/src/breakouts/breakout.ts +0 -188
- package/src/breakouts/collection.ts +0 -19
- package/src/breakouts/edit-lock-error.ts +0 -25
- package/src/breakouts/events.ts +0 -56
- package/src/breakouts/index.ts +0 -925
- package/src/breakouts/request.ts +0 -55
- package/src/breakouts/utils.ts +0 -57
- package/src/common/errors/no-meeting-info.ts +0 -24
- package/src/controls-options-manager/types.ts +0 -59
- package/src/index.ts +0 -40
- package/src/interpretation/README.md +0 -60
- package/src/interpretation/collection.ts +0 -19
- package/src/interpretation/index.ts +0 -332
- package/src/interpretation/siLanguage.ts +0 -18
- package/src/meeting/locusMediaRequest.ts +0 -313
- package/src/meeting/request.type.ts +0 -13
- package/src/meetings/meetings.types.ts +0 -12
- package/src/member/types.ts +0 -38
- package/src/multistream/mediaRequestManager.ts +0 -440
- package/src/multistream/receiveSlot.ts +0 -184
- package/src/multistream/receiveSlotManager.ts +0 -166
- package/src/multistream/remoteMedia.ts +0 -254
- package/src/multistream/remoteMediaGroup.ts +0 -284
- package/src/multistream/remoteMediaManager.ts +0 -1145
- package/src/multistream/sendSlotManager.ts +0 -170
- package/src/reactions/constants.ts +0 -4
- package/src/rtcMetrics/constants.ts +0 -3
- package/src/rtcMetrics/index.ts +0 -124
- package/src/webinar/collection.ts +0 -31
- package/src/webinar/index.ts +0 -62
- package/test/integration/spec/converged-space-meetings.js +0 -233
- package/test/unit/spec/annotation/index.ts +0 -418
- package/test/unit/spec/breakouts/breakout.ts +0 -237
- package/test/unit/spec/breakouts/collection.ts +0 -15
- package/test/unit/spec/breakouts/edit-lock-error.ts +0 -30
- package/test/unit/spec/breakouts/events.ts +0 -89
- package/test/unit/spec/breakouts/index.ts +0 -1790
- package/test/unit/spec/breakouts/request.ts +0 -104
- package/test/unit/spec/breakouts/utils.js +0 -72
- package/test/unit/spec/interpretation/collection.ts +0 -15
- package/test/unit/spec/interpretation/index.ts +0 -589
- package/test/unit/spec/interpretation/siLanguage.ts +0 -28
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +0 -32
- package/test/unit/spec/media/index.ts +0 -290
- package/test/unit/spec/meeting/locusMediaRequest.ts +0 -442
- package/test/unit/spec/meeting-info/index.js +0 -300
- package/test/unit/spec/multistream/mediaRequestManager.ts +0 -1418
- package/test/unit/spec/multistream/receiveSlot.ts +0 -163
- package/test/unit/spec/multistream/receiveSlotManager.ts +0 -203
- package/test/unit/spec/multistream/remoteMedia.ts +0 -255
- package/test/unit/spec/multistream/remoteMediaGroup.ts +0 -662
- package/test/unit/spec/multistream/remoteMediaManager.ts +0 -1924
- package/test/unit/spec/multistream/sendSlotManager.ts +0 -242
- package/test/unit/spec/reachability/request.js +0 -68
- package/test/unit/spec/roap/request.ts +0 -232
- package/test/unit/spec/rtcMetrics/index.ts +0 -93
- package/test/unit/spec/webinar/collection.ts +0 -13
- package/test/unit/spec/webinar/index.ts +0 -60
- package/test/utils/constants.js +0 -9
- package/test/utils/integrationTestUtils.js +0 -46
- /package/dist/common/errors/{reclaim-host-role-errors.d.ts → reclaim-host-role-error.d.ts} +0 -0
- /package/src/common/errors/{reclaim-host-role-errors.ts → reclaim-host-role-error.ts} +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import {parse} from '@webex/ts-sdp';
|
|
2
|
+
|
|
3
|
+
interface IPeerConnectionUtils {
|
|
4
|
+
convertCLineToIpv4: (sdp: string) => string;
|
|
5
|
+
adjustH264Profile: (sdp: string, maxFsValue: number) => string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const PeerConnectionUtils = {} as IPeerConnectionUtils;
|
|
9
|
+
|
|
10
|
+
// max-fs values for all H264 profile levels
|
|
11
|
+
const maxFsForProfileLevel = {
|
|
12
|
+
10: 99,
|
|
13
|
+
11: 396,
|
|
14
|
+
12: 396,
|
|
15
|
+
13: 396,
|
|
16
|
+
20: 396,
|
|
17
|
+
21: 792,
|
|
18
|
+
22: 1620,
|
|
19
|
+
30: 1620,
|
|
20
|
+
31: 3600,
|
|
21
|
+
32: 5120,
|
|
22
|
+
40: 8192,
|
|
23
|
+
41: 8192,
|
|
24
|
+
42: 8704,
|
|
25
|
+
50: 22080,
|
|
26
|
+
51: 36864,
|
|
27
|
+
52: 36864,
|
|
28
|
+
60: 139264,
|
|
29
|
+
61: 139264,
|
|
30
|
+
62: 139264,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const framesPerSecond = 30;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Convert C line to IPv4
|
|
37
|
+
* @param {string} sdp
|
|
38
|
+
* @returns {string}
|
|
39
|
+
*/
|
|
40
|
+
PeerConnectionUtils.convertCLineToIpv4 = (sdp: string) => {
|
|
41
|
+
let replaceSdp = sdp;
|
|
42
|
+
|
|
43
|
+
// TODO: remove this once linus supports Ipv6 c line.currently linus rejects SDP with c line having ipv6 candidates we are
|
|
44
|
+
// mocking ipv6 to ipv4 candidates
|
|
45
|
+
// https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-299232
|
|
46
|
+
replaceSdp = replaceSdp.replace(/c=IN IP6 .*/gi, 'c=IN IP4 0.0.0.0');
|
|
47
|
+
|
|
48
|
+
return replaceSdp;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* estimate profile levels for max-fs & max-mbps values
|
|
53
|
+
* @param {string} sdp
|
|
54
|
+
* @param {number} maxFsValue
|
|
55
|
+
* @returns {string}
|
|
56
|
+
*/
|
|
57
|
+
PeerConnectionUtils.adjustH264Profile = (sdp: string, maxFsValue: number) => {
|
|
58
|
+
// converting with ts-sdp parser, no munging
|
|
59
|
+
const parsedSdp = parse(sdp);
|
|
60
|
+
|
|
61
|
+
parsedSdp.avMedia.forEach((media) => {
|
|
62
|
+
if (media.type === 'video') {
|
|
63
|
+
media.codecs.forEach((codec) => {
|
|
64
|
+
if (codec.name?.toUpperCase() === 'H264') {
|
|
65
|
+
// there should really be just 1 fmtp line, but just in case, we process all of them
|
|
66
|
+
codec.fmtParams = codec.fmtParams.map((fmtp) => {
|
|
67
|
+
const parsedRegex = fmtp.match(/(.*)profile-level-id=(\w{4})(\w{2})(.*)/);
|
|
68
|
+
|
|
69
|
+
if (parsedRegex && parsedRegex.length === 5) {
|
|
70
|
+
const stuffBeforeProfileLevelId = parsedRegex[1];
|
|
71
|
+
const profile = parsedRegex[2].toLowerCase();
|
|
72
|
+
const levelId = parseInt(parsedRegex[3], 16);
|
|
73
|
+
const stuffAfterProfileLevelId = parsedRegex[4];
|
|
74
|
+
|
|
75
|
+
if (!maxFsForProfileLevel[levelId]) {
|
|
76
|
+
throw new Error(
|
|
77
|
+
`found unsupported h264 profile level id value in the SDP: ${levelId}`
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (maxFsForProfileLevel[levelId] === maxFsValue) {
|
|
82
|
+
// profile level already matches our desired max-fs value, so we don't need to do anything
|
|
83
|
+
return fmtp;
|
|
84
|
+
}
|
|
85
|
+
if (maxFsForProfileLevel[levelId] < maxFsValue) {
|
|
86
|
+
// profile level has too low max-fs, so we need to override it (this is upgrading)
|
|
87
|
+
return `${fmtp};max-fs=${maxFsValue};max-mbps=${maxFsValue * framesPerSecond}`;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// profile level has too high max-fs value, so we need to use a lower level
|
|
91
|
+
|
|
92
|
+
// find highest level that has the matching maxFs
|
|
93
|
+
const newLevelId = Object.keys(maxFsForProfileLevel)
|
|
94
|
+
.reverse()
|
|
95
|
+
.find((key) => maxFsForProfileLevel[key] === maxFsValue);
|
|
96
|
+
|
|
97
|
+
if (newLevelId) {
|
|
98
|
+
// Object.keys returns keys as strings, so we need to parse it to an int again and then convert to hex
|
|
99
|
+
const newLevelIdHex = parseInt(newLevelId, 10).toString(16);
|
|
100
|
+
|
|
101
|
+
return `${stuffBeforeProfileLevelId}profile-level-id=${profile}${newLevelIdHex};max-mbps=${
|
|
102
|
+
maxFsValue * framesPerSecond
|
|
103
|
+
}${stuffAfterProfileLevelId}`;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
throw new Error(`unsupported maxFsValue: ${maxFsValue}`);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return fmtp;
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
return parsedSdp.toString();
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export default PeerConnectionUtils;
|
|
@@ -4,11 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
/* eslint-disable class-methods-use-this */
|
|
6
6
|
/* globals window */
|
|
7
|
-
import
|
|
7
|
+
import _ from 'lodash';
|
|
8
8
|
|
|
9
9
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
10
|
-
import MeetingUtil from '../meeting/util';
|
|
11
|
-
|
|
12
10
|
import {ICE_GATHERING_STATE, CONNECTION_STATE, REACHABILITY} from '../constants';
|
|
13
11
|
|
|
14
12
|
import ReachabilityRequest from './request';
|
|
@@ -16,56 +14,11 @@ import ReachabilityRequest from './request';
|
|
|
16
14
|
const DEFAULT_TIMEOUT = 3000;
|
|
17
15
|
const VIDEO_MESH_TIMEOUT = 1000;
|
|
18
16
|
|
|
19
|
-
export type ReachabilityMetrics = {
|
|
20
|
-
reachability_public_udp_success: number;
|
|
21
|
-
reachability_public_udp_failed: number;
|
|
22
|
-
reachability_public_tcp_success: number;
|
|
23
|
-
reachability_public_tcp_failed: number;
|
|
24
|
-
reachability_vmn_udp_success: number;
|
|
25
|
-
reachability_vmn_udp_failed: number;
|
|
26
|
-
reachability_vmn_tcp_success: number;
|
|
27
|
-
reachability_vmn_tcp_failed: number;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
// result for a specific transport protocol (like udp or tcp)
|
|
31
|
-
export type TransportResult = {
|
|
32
|
-
reachable?: 'true' | 'false';
|
|
33
|
-
latencyInMilliseconds?: string;
|
|
34
|
-
clientMediaIPs?: string[];
|
|
35
|
-
untested?: 'true';
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
// reachability result for a specifc media cluster
|
|
39
|
-
type ReachabilityResult = {
|
|
40
|
-
udp: TransportResult;
|
|
41
|
-
tcp: TransportResult;
|
|
42
|
-
xtls: {
|
|
43
|
-
untested: 'true';
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
// this is the type that is required by the backend when we send them reachability results
|
|
47
|
-
export type ReachabilityResults = Record<string, ReachabilityResult>;
|
|
48
|
-
|
|
49
|
-
// this is the type used by Reachability class internally and stored in local storage
|
|
50
|
-
type InternalReachabilityResults = Record<
|
|
51
|
-
string,
|
|
52
|
-
ReachabilityResult & {
|
|
53
|
-
isVideoMesh?: boolean;
|
|
54
|
-
}
|
|
55
|
-
>;
|
|
56
|
-
|
|
57
|
-
export type ICECandidateResult = {
|
|
58
|
-
clusterId: string;
|
|
59
|
-
isVideoMesh: boolean;
|
|
60
|
-
elapsed?: string | null;
|
|
61
|
-
publicIPs?: string[];
|
|
62
|
-
};
|
|
63
17
|
/**
|
|
64
18
|
* @class Reachability
|
|
65
19
|
* @export
|
|
66
20
|
*/
|
|
67
21
|
export default class Reachability {
|
|
68
|
-
namespace = REACHABILITY.namespace;
|
|
69
22
|
webex: object;
|
|
70
23
|
reachabilityRequest: any;
|
|
71
24
|
clusterLatencyResults: any;
|
|
@@ -104,36 +57,28 @@ export default class Reachability {
|
|
|
104
57
|
* @async
|
|
105
58
|
* @memberof Reachability
|
|
106
59
|
*/
|
|
107
|
-
public async gatherReachability()
|
|
60
|
+
public async gatherReachability() {
|
|
108
61
|
this.setup();
|
|
109
62
|
|
|
110
63
|
// Remove stored reachability results to ensure no stale data
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
64
|
+
if (window?.localStorage?.removeItem) {
|
|
65
|
+
window.localStorage.removeItem(REACHABILITY.localStorage);
|
|
66
|
+
} else {
|
|
67
|
+
LoggerProxy.logger.error(
|
|
68
|
+
'Reachability:index#gatherReachability --> Error in accessing LocalStorage.'
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
return {};
|
|
72
|
+
}
|
|
115
73
|
|
|
116
74
|
// Fetch clusters and measure latency
|
|
117
75
|
try {
|
|
118
|
-
const
|
|
119
|
-
MeetingUtil.getIpVersion(this.webex)
|
|
120
|
-
);
|
|
76
|
+
const clusters = await this.reachabilityRequest.getClusters();
|
|
121
77
|
|
|
122
78
|
// Perform Reachability Check
|
|
123
79
|
const results = await this.performReachabilityCheck(clusters);
|
|
124
80
|
|
|
125
|
-
|
|
126
|
-
await this.webex.boundedStorage.put(
|
|
127
|
-
this.namespace,
|
|
128
|
-
REACHABILITY.localStorageResult,
|
|
129
|
-
JSON.stringify(results)
|
|
130
|
-
);
|
|
131
|
-
// @ts-ignore
|
|
132
|
-
await this.webex.boundedStorage.put(
|
|
133
|
-
this.namespace,
|
|
134
|
-
REACHABILITY.localStorageJoinCookie,
|
|
135
|
-
JSON.stringify(joinCookie)
|
|
136
|
-
);
|
|
81
|
+
window.localStorage.setItem(REACHABILITY.localStorage, JSON.stringify(results));
|
|
137
82
|
|
|
138
83
|
LoggerProxy.logger.log(
|
|
139
84
|
'Reachability:index#gatherReachability --> Reachability checks completed'
|
|
@@ -149,111 +94,22 @@ export default class Reachability {
|
|
|
149
94
|
}
|
|
150
95
|
}
|
|
151
96
|
|
|
152
|
-
/**
|
|
153
|
-
* Returns statistics about last reachability results. The returned value is an object
|
|
154
|
-
* with a flat list of properties so that it can be easily sent with metrics
|
|
155
|
-
*
|
|
156
|
-
* @returns {Promise} Promise with metrics values, it never rejects/throws.
|
|
157
|
-
*/
|
|
158
|
-
async getReachabilityMetrics(): Promise<ReachabilityMetrics> {
|
|
159
|
-
const stats: ReachabilityMetrics = {
|
|
160
|
-
reachability_public_udp_success: 0,
|
|
161
|
-
reachability_public_udp_failed: 0,
|
|
162
|
-
reachability_public_tcp_success: 0,
|
|
163
|
-
reachability_public_tcp_failed: 0,
|
|
164
|
-
reachability_vmn_udp_success: 0,
|
|
165
|
-
reachability_vmn_udp_failed: 0,
|
|
166
|
-
reachability_vmn_tcp_success: 0,
|
|
167
|
-
reachability_vmn_tcp_failed: 0,
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
const updateStats = (clusterType: 'public' | 'vmn', result: ReachabilityResult) => {
|
|
171
|
-
if (result.udp?.reachable) {
|
|
172
|
-
const outcome = result.udp.reachable === 'true' ? 'success' : 'failed';
|
|
173
|
-
stats[`reachability_${clusterType}_udp_${outcome}`] += 1;
|
|
174
|
-
}
|
|
175
|
-
if (result.tcp?.reachable) {
|
|
176
|
-
const outcome = result.tcp.reachable === 'true' ? 'success' : 'failed';
|
|
177
|
-
stats[`reachability_${clusterType}_tcp_${outcome}`] += 1;
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
try {
|
|
182
|
-
// @ts-ignore
|
|
183
|
-
const resultsJson = await this.webex.boundedStorage.get(
|
|
184
|
-
REACHABILITY.namespace,
|
|
185
|
-
REACHABILITY.localStorageResult
|
|
186
|
-
);
|
|
187
|
-
|
|
188
|
-
const internalResults: InternalReachabilityResults = JSON.parse(resultsJson);
|
|
189
|
-
|
|
190
|
-
Object.values(internalResults).forEach((result) => {
|
|
191
|
-
updateStats(result.isVideoMesh ? 'vmn' : 'public', result);
|
|
192
|
-
});
|
|
193
|
-
} catch (e) {
|
|
194
|
-
// empty storage, that's ok
|
|
195
|
-
LoggerProxy.logger.warn(
|
|
196
|
-
'Roap:request#getReachabilityMetrics --> Error parsing reachability data: ',
|
|
197
|
-
e
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
return stats;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Reachability results as an object in the format that backend expects
|
|
206
|
-
*
|
|
207
|
-
* @returns {any} reachability results that need to be sent to the backend
|
|
208
|
-
*/
|
|
209
|
-
async getReachabilityResults(): Promise<ReachabilityResults | undefined> {
|
|
210
|
-
let results: ReachabilityResults;
|
|
211
|
-
|
|
212
|
-
// these are the only props that backend needs in the reachability results:
|
|
213
|
-
const reachabilityResultsProps: Array<keyof ReachabilityResult> = ['udp', 'tcp', 'xtls'];
|
|
214
|
-
|
|
215
|
-
try {
|
|
216
|
-
// @ts-ignore
|
|
217
|
-
const resultsJson = await this.webex.boundedStorage.get(
|
|
218
|
-
REACHABILITY.namespace,
|
|
219
|
-
REACHABILITY.localStorageResult
|
|
220
|
-
);
|
|
221
|
-
|
|
222
|
-
const internalResults: InternalReachabilityResults = JSON.parse(resultsJson);
|
|
223
|
-
|
|
224
|
-
results = mapValues(internalResults, (result) => pick(result, reachabilityResultsProps));
|
|
225
|
-
} catch (e) {
|
|
226
|
-
// empty storage, that's ok
|
|
227
|
-
LoggerProxy.logger.warn(
|
|
228
|
-
'Roap:request#attachReachabilityData --> Error parsing reachability data: ',
|
|
229
|
-
e
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
return results;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
97
|
/**
|
|
237
98
|
* fetches reachability data and checks for cluster reachability
|
|
238
99
|
* @returns {boolean}
|
|
239
100
|
* @public
|
|
240
101
|
* @memberof Reachability
|
|
241
102
|
*/
|
|
242
|
-
|
|
103
|
+
isAnyClusterReachable() {
|
|
243
104
|
let reachable = false;
|
|
244
|
-
|
|
245
|
-
const reachabilityData = await this.webex.boundedStorage
|
|
246
|
-
.get(this.namespace, REACHABILITY.localStorageResult)
|
|
247
|
-
.catch(() => {});
|
|
105
|
+
const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);
|
|
248
106
|
|
|
249
107
|
if (reachabilityData) {
|
|
250
108
|
try {
|
|
251
|
-
const reachabilityResults
|
|
109
|
+
const reachabilityResults = JSON.parse(reachabilityData);
|
|
252
110
|
|
|
253
111
|
reachable = Object.values(reachabilityResults).some(
|
|
254
|
-
(result) =>
|
|
255
|
-
!result.isVideoMesh &&
|
|
256
|
-
(result.udp?.reachable === 'true' || result.tcp?.reachable === 'true')
|
|
112
|
+
(result: any) => result.udp?.reachable === 'true' || result.tcp?.reachable === 'true'
|
|
257
113
|
);
|
|
258
114
|
} catch (e) {
|
|
259
115
|
LoggerProxy.logger.error(
|
|
@@ -273,7 +129,7 @@ export default class Reachability {
|
|
|
273
129
|
* @memberof Reachability
|
|
274
130
|
*/
|
|
275
131
|
private buildPeerConnectionConfig(cluster: any) {
|
|
276
|
-
const iceServers = uniq(cluster.udp).map((url) => ({
|
|
132
|
+
const iceServers = _.uniq([...cluster.udp, ...cluster.tcp]).map((url) => ({
|
|
277
133
|
username: '',
|
|
278
134
|
credential: '',
|
|
279
135
|
urls: [url],
|
|
@@ -334,7 +190,7 @@ export default class Reachability {
|
|
|
334
190
|
* @private
|
|
335
191
|
* @memberof Reachability
|
|
336
192
|
*/
|
|
337
|
-
private getLocalSDPForClusters(clusterList: object)
|
|
193
|
+
private getLocalSDPForClusters(clusterList: object) {
|
|
338
194
|
let clusters: any[] = [...Object.keys(clusterList)];
|
|
339
195
|
|
|
340
196
|
clusters = clusters.map(async (key) => {
|
|
@@ -347,17 +203,18 @@ export default class Reachability {
|
|
|
347
203
|
peerConnection.begin = Date.now();
|
|
348
204
|
peerConnection.setLocalDescription(description);
|
|
349
205
|
|
|
350
|
-
return this.iceGatheringState(
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
206
|
+
return this.iceGatheringState(
|
|
207
|
+
peerConnection,
|
|
208
|
+
cluster.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT
|
|
209
|
+
).catch((iceGatheringStateError) => {
|
|
210
|
+
LoggerProxy.logger.log(
|
|
211
|
+
`Reachability:index#getLocalSDPForClusters --> Error in getLocalSDP : ${iceGatheringStateError}`
|
|
212
|
+
);
|
|
213
|
+
});
|
|
357
214
|
});
|
|
358
215
|
|
|
359
216
|
return Promise.all(clusters)
|
|
360
|
-
.then(this.
|
|
217
|
+
.then(this.parseIceResultsToReachabilityResults)
|
|
361
218
|
.then((reachabilityLatencyResults) => {
|
|
362
219
|
this.logUnreachableClusters();
|
|
363
220
|
|
|
@@ -433,8 +290,6 @@ export default class Reachability {
|
|
|
433
290
|
`Reachability:index#onIceCandidate --> Successfully pinged ${peerConnection.key}:`,
|
|
434
291
|
elapsed
|
|
435
292
|
);
|
|
436
|
-
// order is important
|
|
437
|
-
this.addPublicIP(peerConnection, e.candidate.address);
|
|
438
293
|
this.setLatencyAndClose(peerConnection, elapsed);
|
|
439
294
|
}
|
|
440
295
|
};
|
|
@@ -446,17 +301,14 @@ export default class Reachability {
|
|
|
446
301
|
* speed.
|
|
447
302
|
* @private
|
|
448
303
|
* @param {RTCPeerConnection} peerConnection
|
|
449
|
-
* @param {
|
|
304
|
+
* @param {number} timeout
|
|
450
305
|
* @returns {Promise}
|
|
451
306
|
*/
|
|
452
|
-
private iceGatheringState(peerConnection: RTCPeerConnection,
|
|
307
|
+
private iceGatheringState(peerConnection: RTCPeerConnection, timeout: number) {
|
|
453
308
|
const ELAPSED = 'elapsed';
|
|
454
309
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
return new Promise<ICECandidateResult>((resolve) => {
|
|
310
|
+
return new Promise((resolve) => {
|
|
458
311
|
const peerConnectionProxy = new window.Proxy(peerConnection, {
|
|
459
|
-
// eslint-disable-next-line require-jsdoc
|
|
460
312
|
get(target, property) {
|
|
461
313
|
const targetMember = target[property];
|
|
462
314
|
|
|
@@ -469,14 +321,8 @@ export default class Reachability {
|
|
|
469
321
|
set: (target, property, value) => {
|
|
470
322
|
// only intercept elapsed property
|
|
471
323
|
if (property === ELAPSED) {
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
clusterId: peerConnection.key,
|
|
475
|
-
isVideoMesh,
|
|
476
|
-
// @ts-ignore
|
|
477
|
-
publicIPs: target.publicIPs,
|
|
478
|
-
elapsed: value,
|
|
479
|
-
});
|
|
324
|
+
// @ts-ignore
|
|
325
|
+
resolve({clusterId: peerConnection.key, elapsed: value});
|
|
480
326
|
|
|
481
327
|
return true;
|
|
482
328
|
}
|
|
@@ -497,8 +343,6 @@ export default class Reachability {
|
|
|
497
343
|
|
|
498
344
|
// Close any open peerConnections
|
|
499
345
|
if (peerConnectionProxy.connectionState !== CLOSED) {
|
|
500
|
-
// order is important
|
|
501
|
-
this.addPublicIP(peerConnectionProxy, null);
|
|
502
346
|
this.setLatencyAndClose(peerConnectionProxy, null);
|
|
503
347
|
}
|
|
504
348
|
}, timeout);
|
|
@@ -523,39 +367,29 @@ export default class Reachability {
|
|
|
523
367
|
|
|
524
368
|
/**
|
|
525
369
|
* Calculates time to establish connection
|
|
526
|
-
* @param {
|
|
370
|
+
* @param {array} iceResults iceResults
|
|
527
371
|
* @returns {object} reachabilityMap
|
|
528
|
-
* @
|
|
372
|
+
* @private
|
|
529
373
|
* @memberof Reachability
|
|
530
374
|
*/
|
|
531
|
-
|
|
532
|
-
iceResults: Array<ICECandidateResult>
|
|
533
|
-
): InternalReachabilityResults {
|
|
375
|
+
private parseIceResultsToReachabilityResults(iceResults: Array<any>) {
|
|
534
376
|
const reachabilityMap = {};
|
|
535
377
|
|
|
536
|
-
iceResults.forEach(({clusterId,
|
|
537
|
-
|
|
378
|
+
iceResults.forEach(({clusterId, elapsed}) => {
|
|
379
|
+
let latencyResult;
|
|
538
380
|
|
|
539
|
-
if (
|
|
540
|
-
|
|
381
|
+
if (elapsed === null) {
|
|
382
|
+
latencyResult = {reachable: 'false'};
|
|
541
383
|
} else {
|
|
542
|
-
|
|
384
|
+
latencyResult = {
|
|
543
385
|
reachable: 'true',
|
|
544
386
|
latencyInMilliseconds: elapsed.toString(),
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
if (publicIPs) {
|
|
549
|
-
Object.assign(latencyResult, {
|
|
550
|
-
clientMediaIPs: publicIPs,
|
|
551
|
-
});
|
|
387
|
+
};
|
|
552
388
|
}
|
|
553
389
|
|
|
554
390
|
reachabilityMap[clusterId] = {
|
|
555
391
|
udp: latencyResult,
|
|
556
|
-
tcp:
|
|
557
|
-
xtls: {untested: 'true'},
|
|
558
|
-
isVideoMesh,
|
|
392
|
+
tcp: latencyResult,
|
|
559
393
|
};
|
|
560
394
|
});
|
|
561
395
|
|
|
@@ -565,11 +399,11 @@ export default class Reachability {
|
|
|
565
399
|
/**
|
|
566
400
|
* fetches reachability data
|
|
567
401
|
* @param {object} clusterList
|
|
568
|
-
* @returns {Promise<
|
|
402
|
+
* @returns {Promise<localSDPData>} reachability check results
|
|
569
403
|
* @private
|
|
570
404
|
* @memberof Reachability
|
|
571
405
|
*/
|
|
572
|
-
private performReachabilityCheck(clusterList: object)
|
|
406
|
+
private performReachabilityCheck(clusterList: object) {
|
|
573
407
|
if (!clusterList || !Object.keys(clusterList).length) {
|
|
574
408
|
return Promise.resolve({});
|
|
575
409
|
}
|
|
@@ -596,33 +430,6 @@ export default class Reachability {
|
|
|
596
430
|
});
|
|
597
431
|
}
|
|
598
432
|
|
|
599
|
-
/**
|
|
600
|
-
* Adds public IP (client media IPs)
|
|
601
|
-
* @param {RTCPeerConnection} peerConnection
|
|
602
|
-
* @param {string} publicIP
|
|
603
|
-
* @returns {void}
|
|
604
|
-
*/
|
|
605
|
-
protected addPublicIP(peerConnection: RTCPeerConnection, publicIP?: string | null) {
|
|
606
|
-
const modifiedPeerConnection: RTCPeerConnection & {publicIPs?: string[]} = peerConnection;
|
|
607
|
-
const {CLOSED} = CONNECTION_STATE;
|
|
608
|
-
|
|
609
|
-
if (modifiedPeerConnection.connectionState === CLOSED) {
|
|
610
|
-
LoggerProxy.logger.log(
|
|
611
|
-
`Reachability:index#addPublicIP --> Attempting to set publicIP of ${publicIP} on closed peerConnection.`
|
|
612
|
-
);
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
if (publicIP) {
|
|
616
|
-
if (modifiedPeerConnection.publicIPs) {
|
|
617
|
-
modifiedPeerConnection.publicIPs.push(publicIP);
|
|
618
|
-
} else {
|
|
619
|
-
modifiedPeerConnection.publicIPs = [publicIP];
|
|
620
|
-
}
|
|
621
|
-
} else {
|
|
622
|
-
modifiedPeerConnection.publicIPs = null;
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
|
|
626
433
|
/**
|
|
627
434
|
* Records latency and closes the peerConnection
|
|
628
435
|
* @param {RTCPeerConnection} peerConnection
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
2
|
-
import {HTTP_VERBS, RESOURCE, API
|
|
2
|
+
import {HTTP_VERBS, RESOURCE, API} from '../constants';
|
|
3
3
|
|
|
4
4
|
export interface ClusterNode {
|
|
5
5
|
isVideoMesh: boolean;
|
|
@@ -28,40 +28,31 @@ class ReachabilityRequest {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* gets the cluster information
|
|
32
32
|
*
|
|
33
|
-
* @param {
|
|
33
|
+
* @param {boolean} includeVideoMesh whether to include the video mesh clusters in the result or not
|
|
34
34
|
* @returns {Promise}
|
|
35
35
|
*/
|
|
36
|
-
getClusters = (
|
|
36
|
+
getClusters = (): Promise<ClusterList> =>
|
|
37
37
|
this.webex
|
|
38
38
|
.request({
|
|
39
39
|
method: HTTP_VERBS.GET,
|
|
40
40
|
shouldRefreshAccessToken: false,
|
|
41
41
|
api: API.CALLIOPEDISCOVERY,
|
|
42
42
|
resource: RESOURCE.CLUSTERS,
|
|
43
|
-
qs: {
|
|
44
|
-
JCSupport: 1,
|
|
45
|
-
ipver: ipVersion,
|
|
46
|
-
},
|
|
47
43
|
})
|
|
48
44
|
.then((res) => {
|
|
49
|
-
const {clusters
|
|
45
|
+
const {clusters} = res.body;
|
|
50
46
|
|
|
51
47
|
Object.keys(clusters).forEach((key) => {
|
|
52
|
-
clusters[key].isVideoMesh =
|
|
48
|
+
clusters[key].isVideoMesh = res.body.clusterClasses?.hybridMedia?.includes(key);
|
|
53
49
|
});
|
|
54
50
|
|
|
55
51
|
LoggerProxy.logger.log(
|
|
56
|
-
`Reachability:request#getClusters --> get clusters
|
|
57
|
-
clusters
|
|
58
|
-
)}`
|
|
52
|
+
`Reachability:request#getClusters --> get clusters successful:${JSON.stringify(clusters)}`
|
|
59
53
|
);
|
|
60
54
|
|
|
61
|
-
return
|
|
62
|
-
clusters,
|
|
63
|
-
joinCookie,
|
|
64
|
-
};
|
|
55
|
+
return clusters;
|
|
65
56
|
});
|
|
66
57
|
|
|
67
58
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {Reaction,
|
|
1
|
+
import {Reaction, ReactionType, SkinTone, SkinToneType} from './reactions.type';
|
|
2
2
|
|
|
3
|
-
const Reactions: Record<
|
|
3
|
+
const Reactions: Record<ReactionType, Reaction> = {
|
|
4
4
|
smile: {
|
|
5
5
|
type: 'smile',
|
|
6
6
|
codepoints: '1F642',
|
|
@@ -31,12 +31,12 @@ const Reactions: Record<ReactionServerType, Reaction> = {
|
|
|
31
31
|
codepoints: '1F44F',
|
|
32
32
|
shortcodes: ':clap:',
|
|
33
33
|
},
|
|
34
|
-
|
|
34
|
+
thumbs_up: {
|
|
35
35
|
type: 'thumb_up',
|
|
36
36
|
codepoints: '1F44D',
|
|
37
37
|
shortcodes: ':thumbsup:',
|
|
38
38
|
},
|
|
39
|
-
|
|
39
|
+
thumbs_down: {
|
|
40
40
|
type: 'thumb_down',
|
|
41
41
|
codepoints: '1F44E',
|
|
42
42
|
shortcodes: ':thumbsdown:',
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import {REACTION_RELAY_TYPES} from './constants';
|
|
2
|
-
|
|
3
1
|
export type EmoticonData = {
|
|
4
2
|
type: string;
|
|
5
3
|
codepoints?: string;
|
|
@@ -7,21 +5,20 @@ export type EmoticonData = {
|
|
|
7
5
|
};
|
|
8
6
|
|
|
9
7
|
export type SkinTone = EmoticonData;
|
|
10
|
-
|
|
8
|
+
// @ts-ignore
|
|
11
9
|
export type Reaction = EmoticonData & {
|
|
12
10
|
tone?: SkinTone;
|
|
13
11
|
};
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
export enum ReactionServerType {
|
|
13
|
+
export enum ReactionType {
|
|
17
14
|
smile = 'smile',
|
|
18
15
|
sad = 'sad',
|
|
19
16
|
wow = 'wow',
|
|
20
17
|
haha = 'haha',
|
|
21
18
|
celebrate = 'celebrate',
|
|
22
19
|
clap = 'clap',
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
thumbs_up = 'thumbs_up',
|
|
21
|
+
thumbs_down = 'thumbs_down',
|
|
25
22
|
heart = 'heart',
|
|
26
23
|
fire = 'fire',
|
|
27
24
|
prayer = 'prayer',
|
|
@@ -29,7 +26,6 @@ export enum ReactionServerType {
|
|
|
29
26
|
slow_down = 'slow_down',
|
|
30
27
|
}
|
|
31
28
|
|
|
32
|
-
// eslint-disable-next-line no-shadow
|
|
33
29
|
export enum SkinToneType {
|
|
34
30
|
normal = 'normal',
|
|
35
31
|
light = 'light',
|
|
@@ -38,25 +34,3 @@ export enum SkinToneType {
|
|
|
38
34
|
medium_dark = 'medium_dark',
|
|
39
35
|
dark = 'dark',
|
|
40
36
|
}
|
|
41
|
-
|
|
42
|
-
export type Sender = {
|
|
43
|
-
participantId: string;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export type ProcessedReaction = {
|
|
47
|
-
reaction: Reaction;
|
|
48
|
-
sender: {
|
|
49
|
-
id: Sender['participantId'];
|
|
50
|
-
name: string;
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
type RelayEventData = {
|
|
55
|
-
relayType: (typeof REACTION_RELAY_TYPES)['REACTION'];
|
|
56
|
-
reaction: Reaction;
|
|
57
|
-
sender: Sender;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export type RelayEvent = {
|
|
61
|
-
data: RelayEventData;
|
|
62
|
-
};
|