@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
package/src/roap/request.ts
CHANGED
|
@@ -1,45 +1,118 @@
|
|
|
1
|
+
/* global window */
|
|
1
2
|
// @ts-ignore
|
|
2
3
|
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
3
4
|
|
|
4
5
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
|
|
6
|
+
import {PARTICIPANT, LOCI, CALL, MEDIA, HTTP_VERBS, REACHABILITY} from '../constants';
|
|
7
|
+
import Metrics from '../metrics';
|
|
8
|
+
import {eventType} from '../metrics/config';
|
|
9
|
+
import ParameterError from '../common/errors/parameter';
|
|
8
10
|
/**
|
|
9
11
|
* @class RoapRequest
|
|
10
12
|
*/
|
|
11
13
|
export default class RoapRequest extends StatelessWebexPlugin {
|
|
12
14
|
/**
|
|
13
|
-
*
|
|
14
|
-
* @param {Object}
|
|
15
|
-
* @returns {
|
|
15
|
+
* Joins a meeting via ROAP
|
|
16
|
+
* @param {Object} options
|
|
17
|
+
* @returns {Promise} returns a promise that resolves/rejects whatever the request does
|
|
16
18
|
*/
|
|
17
|
-
async attachReachabilityData(localSdp) {
|
|
18
|
-
let joinCookie;
|
|
19
|
-
|
|
20
|
-
// @ts-ignore
|
|
21
|
-
const reachabilityResult = await this.webex.meetings.reachability.getReachabilityResults();
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// @ts-ignore
|
|
28
|
-
const joinCookieRaw = await this.webex.boundedStorage
|
|
29
|
-
.get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
|
|
30
|
-
.catch(() => {});
|
|
20
|
+
attachRechabilityData(localSdp) {
|
|
21
|
+
const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);
|
|
31
22
|
|
|
32
|
-
if (
|
|
23
|
+
if (reachabilityData) {
|
|
33
24
|
try {
|
|
34
|
-
|
|
25
|
+
const reachabilityResult = JSON.parse(reachabilityData);
|
|
26
|
+
|
|
27
|
+
/* istanbul ignore else */
|
|
28
|
+
if (reachabilityResult && Object.keys(reachabilityResult).length) {
|
|
29
|
+
localSdp.reachability = reachabilityResult;
|
|
30
|
+
}
|
|
35
31
|
} catch (e) {
|
|
36
32
|
LoggerProxy.logger.error(
|
|
37
|
-
`
|
|
33
|
+
`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
|
|
38
34
|
);
|
|
39
35
|
}
|
|
40
36
|
}
|
|
41
37
|
|
|
42
|
-
return
|
|
38
|
+
return localSdp;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
joinMeetingWithRoap(options) {
|
|
42
|
+
LoggerProxy.logger.info('Roap:request#joinMeetingWithRoap --> Join locus with roap');
|
|
43
|
+
LoggerProxy.logger.info(
|
|
44
|
+
`Roap:request#joinMeetingWithRoap --> Local SDP: ${options.roapMessage}`
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
return Promise.resolve().then(async () => {
|
|
48
|
+
// @ts-ignore
|
|
49
|
+
const deviceUrl = this.webex.internal.device.url;
|
|
50
|
+
let url = '';
|
|
51
|
+
|
|
52
|
+
const body: any = {
|
|
53
|
+
deviceUrl,
|
|
54
|
+
usingResource: options.resourceId || null,
|
|
55
|
+
correlationId: options.correlationId,
|
|
56
|
+
localMedias: [
|
|
57
|
+
{
|
|
58
|
+
localSdp: JSON.stringify(
|
|
59
|
+
this.attachRechabilityData({
|
|
60
|
+
roapMessage: options.roapMessage,
|
|
61
|
+
audioMuted: false,
|
|
62
|
+
videoMuted: false,
|
|
63
|
+
})
|
|
64
|
+
),
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
clientMediaPreferences: {
|
|
68
|
+
preferTranscoding: options.preferTranscoding ?? true,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
if (options.locusUrl) {
|
|
73
|
+
url = `${options.locusUrl}/${PARTICIPANT}`;
|
|
74
|
+
} else if (options.sipUrl) {
|
|
75
|
+
try {
|
|
76
|
+
// @ts-ignore
|
|
77
|
+
await this.webex.internal.services.waitForCatalog('postauth');
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;
|
|
80
|
+
body.invitee = {
|
|
81
|
+
address: options.sipTarget,
|
|
82
|
+
};
|
|
83
|
+
} catch (e) {
|
|
84
|
+
LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> ${e}`);
|
|
85
|
+
throw e;
|
|
86
|
+
}
|
|
87
|
+
} else {
|
|
88
|
+
throw new ParameterError('Must provide a locusUrl or sipTarget');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// @ts-ignore
|
|
92
|
+
return this.webex
|
|
93
|
+
.request({
|
|
94
|
+
method: HTTP_VERBS.POST,
|
|
95
|
+
uri: url,
|
|
96
|
+
body,
|
|
97
|
+
})
|
|
98
|
+
.then((res) => {
|
|
99
|
+
const {locus} = res.body;
|
|
100
|
+
|
|
101
|
+
locus.roapSeq = options.roapMessage.seq;
|
|
102
|
+
locus.id = locus.url.split('/').pop();
|
|
103
|
+
LoggerProxy.logger.info(
|
|
104
|
+
`Roap:request#joinMeetingWithRoap --> Joined locus [${locus.id}][${locus.fullState.lastActive}]`
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
return locus;
|
|
108
|
+
})
|
|
109
|
+
.catch((err) => {
|
|
110
|
+
LoggerProxy.logger.error(
|
|
111
|
+
`Roap:request#joinMeetingWithRoap --> failed with error: ${err}`
|
|
112
|
+
);
|
|
113
|
+
throw err;
|
|
114
|
+
});
|
|
115
|
+
});
|
|
43
116
|
}
|
|
44
117
|
|
|
45
118
|
/**
|
|
@@ -49,74 +122,78 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
49
122
|
* @param {String} options.locusSelfUrl
|
|
50
123
|
* @param {String} options.mediaId
|
|
51
124
|
* @param {String} options.correlationId
|
|
125
|
+
* @param {Boolean} options.audioMuted
|
|
126
|
+
* @param {Boolean} options.videoMuted
|
|
52
127
|
* @param {String} options.meetingId
|
|
53
|
-
* @param {IP_VERSION} options.ipVersion only required for offers
|
|
54
128
|
* @returns {Promise} returns the response/failure of the request
|
|
55
129
|
*/
|
|
56
|
-
|
|
130
|
+
sendRoap(options: {
|
|
57
131
|
roapMessage: any;
|
|
58
132
|
locusSelfUrl: string;
|
|
59
133
|
mediaId: string;
|
|
134
|
+
correlationId: string;
|
|
135
|
+
audioMuted: boolean;
|
|
136
|
+
videoMuted: boolean;
|
|
60
137
|
meetingId: string;
|
|
61
|
-
|
|
62
|
-
locusMediaRequest?: LocusMediaRequest;
|
|
63
|
-
audioMuted?: boolean;
|
|
64
|
-
videoMuted?: boolean;
|
|
138
|
+
preferTranscoding?: boolean;
|
|
65
139
|
}) {
|
|
66
|
-
const {roapMessage, locusSelfUrl, mediaId,
|
|
140
|
+
const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;
|
|
67
141
|
|
|
68
142
|
if (!mediaId) {
|
|
69
|
-
LoggerProxy.logger.info('Roap:request#sendRoap -->
|
|
143
|
+
LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
|
|
70
144
|
}
|
|
71
145
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));
|
|
78
|
-
}
|
|
79
|
-
const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({
|
|
80
|
-
roapMessage,
|
|
81
|
-
});
|
|
146
|
+
const mediaUrl = `${locusSelfUrl}/${MEDIA}`;
|
|
147
|
+
// @ts-ignore
|
|
148
|
+
const deviceUrl = this.webex.internal.device.url;
|
|
82
149
|
|
|
83
150
|
LoggerProxy.logger.info(
|
|
84
|
-
`Roap:request#sendRoap --> ${
|
|
151
|
+
`Roap:request#sendRoap --> ${mediaUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
|
|
85
152
|
);
|
|
86
153
|
|
|
87
|
-
|
|
88
|
-
this.webex.internal.newMetrics.submitClientEvent({
|
|
89
|
-
name: 'client.locus.media.request',
|
|
90
|
-
options: {
|
|
91
|
-
meetingId,
|
|
92
|
-
},
|
|
93
|
-
});
|
|
154
|
+
Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});
|
|
94
155
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
156
|
+
// @ts-ignore
|
|
157
|
+
return this.webex
|
|
158
|
+
.request({
|
|
159
|
+
uri: mediaUrl,
|
|
160
|
+
method: HTTP_VERBS.PUT,
|
|
161
|
+
body: {
|
|
162
|
+
device: {
|
|
163
|
+
url: deviceUrl,
|
|
164
|
+
// @ts-ignore
|
|
165
|
+
deviceType: this.config.meetings.deviceType,
|
|
166
|
+
},
|
|
167
|
+
correlationId,
|
|
168
|
+
localMedias: [
|
|
169
|
+
{
|
|
170
|
+
localSdp: JSON.stringify(
|
|
171
|
+
this.attachRechabilityData({
|
|
172
|
+
roapMessage,
|
|
173
|
+
// eslint-disable-next-line no-warning-comments
|
|
174
|
+
// TODO: check whats the need for video and audiomute
|
|
175
|
+
audioMuted: !!options.audioMuted,
|
|
176
|
+
videoMuted: !!options.videoMuted,
|
|
177
|
+
})
|
|
178
|
+
),
|
|
179
|
+
mediaId: options.mediaId,
|
|
180
|
+
},
|
|
181
|
+
],
|
|
182
|
+
clientMediaPreferences: {
|
|
183
|
+
preferTranscoding: options.preferTranscoding ?? true,
|
|
184
|
+
},
|
|
185
|
+
},
|
|
104
186
|
})
|
|
105
187
|
.then((res) => {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
name: 'client.locus.media.response',
|
|
109
|
-
options: {
|
|
110
|
-
meetingId,
|
|
111
|
-
},
|
|
112
|
-
});
|
|
188
|
+
Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});
|
|
189
|
+
|
|
113
190
|
// always it will be the first mediaConnection Object
|
|
114
191
|
const mediaConnections =
|
|
115
192
|
res.body.mediaConnections &&
|
|
116
193
|
res.body.mediaConnections.length > 0 &&
|
|
117
194
|
res.body.mediaConnections[0];
|
|
118
195
|
|
|
119
|
-
LoggerProxy.logger.
|
|
196
|
+
LoggerProxy.logger.info(
|
|
120
197
|
`Roap:request#sendRoap --> response:${JSON.stringify(
|
|
121
198
|
mediaConnections,
|
|
122
199
|
null,
|
|
@@ -125,7 +202,7 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
125
202
|
);
|
|
126
203
|
const {locus} = res.body;
|
|
127
204
|
|
|
128
|
-
locus.roapSeq = roapMessage.seq;
|
|
205
|
+
locus.roapSeq = options.roapMessage.seq;
|
|
129
206
|
|
|
130
207
|
return {
|
|
131
208
|
locus,
|
|
@@ -133,13 +210,10 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
133
210
|
};
|
|
134
211
|
})
|
|
135
212
|
.catch((err) => {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
meetingId,
|
|
141
|
-
rawError: err,
|
|
142
|
-
},
|
|
213
|
+
Metrics.postEvent({
|
|
214
|
+
event: eventType.MEDIA_RESPONSE,
|
|
215
|
+
meetingId,
|
|
216
|
+
data: {error: Metrics.parseLocusError(err, true)},
|
|
143
217
|
});
|
|
144
218
|
LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);
|
|
145
219
|
LoggerProxy.logger.error(
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import StateMachine from 'javascript-state-machine';
|
|
2
|
+
|
|
3
|
+
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
|
+
import {ROAP, _OFFER_, _ANSWER_, _REQUESTED_} from '../constants';
|
|
5
|
+
import Meeting from '../meeting';
|
|
6
|
+
|
|
7
|
+
const shouldStep = (roap, meeting) => {
|
|
8
|
+
const {messageType} = roap.msg;
|
|
9
|
+
|
|
10
|
+
if (meeting) {
|
|
11
|
+
if (messageType === _OFFER_ && roap.remote && meeting.shareStatus === _REQUESTED_) {
|
|
12
|
+
// The peer-connection is waiting for answer but got an offer Reset. Try to
|
|
13
|
+
// send the offer later after you accept the answer
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
// Assuming the mercury event has come first before the response for the event
|
|
17
|
+
// we have to wait for the response and trigger the ROAP request later on
|
|
18
|
+
if (!meeting.mediaProperties.peerConnection && messageType === _ANSWER_) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
LoggerProxy.logger.log(
|
|
23
|
+
'Roap:state#shouldStep --> RoapStateMachine: PeerConnectionState, ',
|
|
24
|
+
meeting.mediaProperties.peerConnection.signalingState
|
|
25
|
+
);
|
|
26
|
+
LoggerProxy.logger.log(
|
|
27
|
+
'Roap:state#shouldStep --> RoapStateMachine: success save proceeding with transition, ',
|
|
28
|
+
roap.msg
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
return true;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const handleTransition = (value, signal, meeting) => {
|
|
35
|
+
LoggerProxy.logger.log(`Roap:state#handleTransition --> current ${value} to ${signal}`);
|
|
36
|
+
|
|
37
|
+
switch (value) {
|
|
38
|
+
case ROAP.ROAP_STATE.INIT:
|
|
39
|
+
if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {
|
|
40
|
+
return ROAP.ROAP_STATE.WAIT_TX_ANSWER;
|
|
41
|
+
}
|
|
42
|
+
if (signal === ROAP.ROAP_SIGNAL.TX_OFFER) {
|
|
43
|
+
return ROAP.ROAP_STATE.WAIT_RX_ANSWER;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return value;
|
|
47
|
+
|
|
48
|
+
case ROAP.ROAP_STATE.WAIT_RX_OFFER:
|
|
49
|
+
return value;
|
|
50
|
+
|
|
51
|
+
case ROAP.ROAP_STATE.WAIT_RX_ANSWER:
|
|
52
|
+
if (signal === ROAP.ROAP_SIGNAL.RX_ANSWER) {
|
|
53
|
+
// There is a race condition where the /call response comes after mercury event from the server
|
|
54
|
+
// As mercury sends roap event if it didnt get back a response. We can send the roap ok after that
|
|
55
|
+
if (meeting.mediaId) {
|
|
56
|
+
return ROAP.ROAP_STATE.WAIT_TX_OK;
|
|
57
|
+
}
|
|
58
|
+
LoggerProxy.logger.error(
|
|
59
|
+
'Roap:state#handleTransition --> Race Condition no mediaId, continuing.'
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {
|
|
66
|
+
return ROAP.ROAP_STATE.GLARE;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return value;
|
|
70
|
+
|
|
71
|
+
case ROAP.ROAP_STATE.WAIT_TX_OFFER:
|
|
72
|
+
return value;
|
|
73
|
+
|
|
74
|
+
case ROAP.ROAP_STATE.WAIT_TX_ANSWER:
|
|
75
|
+
if (signal === ROAP.ROAP_SIGNAL.TX_ANSWER) {
|
|
76
|
+
return ROAP.ROAP_STATE.WAIT_RX_OK;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return value;
|
|
80
|
+
|
|
81
|
+
case ROAP.ROAP_STATE.WAIT_TX_OK:
|
|
82
|
+
if (signal === ROAP.ROAP_SIGNAL.TX_OK) {
|
|
83
|
+
return ROAP.ROAP_STATE.INIT;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return value;
|
|
87
|
+
|
|
88
|
+
case ROAP.ROAP_STATE.WAIT_RX_OK:
|
|
89
|
+
if (signal === ROAP.ROAP_SIGNAL.RX_OK) {
|
|
90
|
+
return ROAP.ROAP_STATE.INIT;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return value;
|
|
94
|
+
|
|
95
|
+
case ROAP.ROAP_STATE.ERROR:
|
|
96
|
+
// eslint-disable-next-line no-warning-comments
|
|
97
|
+
// TODO: resolve error state. Add a signal constant and handle the cleanup
|
|
98
|
+
return ROAP.ROAP_STATE.INIT;
|
|
99
|
+
|
|
100
|
+
case ROAP.ROAP_STATE.GLARE:
|
|
101
|
+
return ROAP.ROAP_STATE.WAIT_RX_ANSWER;
|
|
102
|
+
default:
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const RoapStateMachine = {
|
|
108
|
+
/**
|
|
109
|
+
* @param {Roap} roapRef
|
|
110
|
+
* initializes the state machine
|
|
111
|
+
* @returns {StateMachine} an instance of a state machine
|
|
112
|
+
*/
|
|
113
|
+
createState() {
|
|
114
|
+
const RoapState = StateMachine.factory({
|
|
115
|
+
init: ROAP.ROAP_STATE.INIT,
|
|
116
|
+
transitions: [
|
|
117
|
+
{
|
|
118
|
+
name: ROAP.ROAP_TRANSITIONS.STEP,
|
|
119
|
+
from: '*',
|
|
120
|
+
/**
|
|
121
|
+
* Method to handle the transitions between states
|
|
122
|
+
* @param {String} signal
|
|
123
|
+
* @param {Meeting} meeting instance of a Meeting
|
|
124
|
+
* @param {Object} roap
|
|
125
|
+
* @returns {String} new state value
|
|
126
|
+
*/
|
|
127
|
+
to(signal: string, meeting: Meeting, roap: object) {
|
|
128
|
+
const value = this.state;
|
|
129
|
+
|
|
130
|
+
if (!shouldStep(roap, meeting)) {
|
|
131
|
+
return value;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return handleTransition(value, signal, meeting);
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
methods: {
|
|
139
|
+
/**
|
|
140
|
+
* Event that fires after we've transitioned to a new state
|
|
141
|
+
* @param {Object} transition
|
|
142
|
+
* @returns {null}
|
|
143
|
+
*/
|
|
144
|
+
onAfterStep(transition: any) {
|
|
145
|
+
LoggerProxy.logger.log(
|
|
146
|
+
`Roap:state#onAfterStep --> RoapStateMachine->onAfterStep#fired! State changed from '${transition.from}' to '${transition.to}' with transition '${transition.transition}''.`
|
|
147
|
+
);
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
return new RoapState();
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
export default RoapStateMachine;
|
|
@@ -8,16 +8,9 @@ import {ROAP} from '../constants';
|
|
|
8
8
|
|
|
9
9
|
import RoapRequest from './request';
|
|
10
10
|
import Meeting from '../meeting';
|
|
11
|
-
import MeetingUtil from '../meeting/util';
|
|
12
11
|
|
|
13
12
|
const TURN_DISCOVERY_TIMEOUT = 10; // in seconds
|
|
14
13
|
|
|
15
|
-
// Roap spec says that seq should start from 1, but TURN discovery works fine with seq=0
|
|
16
|
-
// and this is handy for us, because TURN discovery is always done before the first SDP exchange,
|
|
17
|
-
// so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection
|
|
18
|
-
// and do the SDP offer with seq=1
|
|
19
|
-
const TURN_DISCOVERY_SEQ = 0;
|
|
20
|
-
|
|
21
14
|
/**
|
|
22
15
|
* Handles the process of finding out TURN server information from Linus.
|
|
23
16
|
* This is achieved by sending a TURN_DISCOVERY_REQUEST.
|
|
@@ -153,7 +146,9 @@ export default class TurnDiscovery {
|
|
|
153
146
|
* @private
|
|
154
147
|
* @memberof Roap
|
|
155
148
|
*/
|
|
156
|
-
sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {
|
|
149
|
+
private sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {
|
|
150
|
+
const seq = meeting.roapSeq + 1;
|
|
151
|
+
|
|
157
152
|
if (this.defer) {
|
|
158
153
|
LoggerProxy.logger.warn(
|
|
159
154
|
'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'
|
|
@@ -167,7 +162,7 @@ export default class TurnDiscovery {
|
|
|
167
162
|
const roapMessage = {
|
|
168
163
|
messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,
|
|
169
164
|
version: ROAP.ROAP_VERSION,
|
|
170
|
-
seq
|
|
165
|
+
seq,
|
|
171
166
|
};
|
|
172
167
|
|
|
173
168
|
LoggerProxy.logger.info(
|
|
@@ -177,6 +172,7 @@ export default class TurnDiscovery {
|
|
|
177
172
|
return this.roapRequest
|
|
178
173
|
.sendRoap({
|
|
179
174
|
roapMessage,
|
|
175
|
+
correlationId: meeting.correlationId,
|
|
180
176
|
// @ts-ignore - Fix missing type
|
|
181
177
|
locusSelfUrl: meeting.selfUrl,
|
|
182
178
|
// @ts-ignore - Fix missing type
|
|
@@ -184,11 +180,10 @@ export default class TurnDiscovery {
|
|
|
184
180
|
audioMuted: meeting.audio?.isLocallyMuted(),
|
|
185
181
|
videoMuted: meeting.video?.isLocallyMuted(),
|
|
186
182
|
meetingId: meeting.id,
|
|
187
|
-
locusMediaRequest: meeting.locusMediaRequest,
|
|
188
|
-
// @ts-ignore - because of meeting.webex
|
|
189
|
-
ipVersion: MeetingUtil.getIpVersion(meeting.webex),
|
|
190
183
|
})
|
|
191
184
|
.then(({mediaConnections}) => {
|
|
185
|
+
meeting.setRoapSeq(seq);
|
|
186
|
+
|
|
192
187
|
if (mediaConnections) {
|
|
193
188
|
meeting.updateMediaConnections(mediaConnections);
|
|
194
189
|
}
|
|
@@ -209,53 +204,19 @@ export default class TurnDiscovery {
|
|
|
209
204
|
roapMessage: {
|
|
210
205
|
messageType: ROAP.ROAP_TYPES.OK,
|
|
211
206
|
version: ROAP.ROAP_VERSION,
|
|
212
|
-
seq:
|
|
207
|
+
seq: meeting.roapSeq,
|
|
213
208
|
},
|
|
214
209
|
// @ts-ignore - fix type
|
|
215
210
|
locusSelfUrl: meeting.selfUrl,
|
|
216
211
|
// @ts-ignore - fix type
|
|
217
212
|
mediaId: meeting.mediaId,
|
|
218
|
-
|
|
213
|
+
correlationId: meeting.correlationId,
|
|
219
214
|
audioMuted: meeting.audio?.isLocallyMuted(),
|
|
220
215
|
videoMuted: meeting.video?.isLocallyMuted(),
|
|
221
|
-
|
|
216
|
+
meetingId: meeting.id,
|
|
222
217
|
});
|
|
223
218
|
}
|
|
224
219
|
|
|
225
|
-
/**
|
|
226
|
-
* Gets the reason why reachability is skipped.
|
|
227
|
-
*
|
|
228
|
-
* @param {Meeting} meeting
|
|
229
|
-
* @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
|
|
230
|
-
*/
|
|
231
|
-
private async getSkipReason(meeting: Meeting): Promise<string> {
|
|
232
|
-
const isAnyPublicClusterReachable =
|
|
233
|
-
// @ts-ignore - fix type
|
|
234
|
-
await meeting.webex.meetings.reachability.isAnyPublicClusterReachable();
|
|
235
|
-
|
|
236
|
-
if (isAnyPublicClusterReachable) {
|
|
237
|
-
LoggerProxy.logger.info(
|
|
238
|
-
'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
|
|
239
|
-
);
|
|
240
|
-
|
|
241
|
-
return 'reachability';
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
return '';
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Checks if TURN discovery is skipped.
|
|
249
|
-
*
|
|
250
|
-
* @param {Meeting} meeting
|
|
251
|
-
* @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
|
|
252
|
-
*/
|
|
253
|
-
async isSkipped(meeting) {
|
|
254
|
-
const skipReason = await this.getSkipReason(meeting);
|
|
255
|
-
|
|
256
|
-
return !!skipReason;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
220
|
/**
|
|
260
221
|
* Retrieves TURN server information from the backend by doing
|
|
261
222
|
* a roap message exchange:
|
|
@@ -264,22 +225,13 @@ export default class TurnDiscovery {
|
|
|
264
225
|
* | <----TURN_DISCOVERY_RESPONSE----- |
|
|
265
226
|
* | --------------OK----------------> |
|
|
266
227
|
*
|
|
267
|
-
* This TURN discovery roap exchange is always done with seq=0.
|
|
268
|
-
* The RoapMediaConnection SDP exchange always starts with seq=1,
|
|
269
|
-
* so it works fine no matter if TURN discovery is done or not.
|
|
270
|
-
*
|
|
271
228
|
* @param {Meeting} meeting
|
|
272
|
-
* @param {Boolean}
|
|
229
|
+
* @param {Boolean} isReconnecting should be set to true if this is a new
|
|
273
230
|
* media connection just after a reconnection
|
|
274
|
-
* @param {Boolean} [isForced]
|
|
275
231
|
* @returns {Promise}
|
|
276
232
|
*/
|
|
277
|
-
async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
if (!isForced) {
|
|
281
|
-
turnDiscoverySkippedReason = await this.getSkipReason(meeting);
|
|
282
|
-
}
|
|
233
|
+
async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
|
|
234
|
+
const turnDiscoverySkippedReason = await this.getSkipReason(meeting);
|
|
283
235
|
|
|
284
236
|
if (turnDiscoverySkippedReason) {
|
|
285
237
|
return {
|
|
@@ -311,7 +263,49 @@ export default class TurnDiscovery {
|
|
|
311
263
|
stack: e.stack,
|
|
312
264
|
});
|
|
313
265
|
|
|
314
|
-
return {turnServerInfo: undefined, turnDiscoverySkippedReason: undefined};
|
|
266
|
+
return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: undefined});
|
|
315
267
|
});
|
|
316
268
|
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Gets the reason why reachability is skipped.
|
|
272
|
+
*
|
|
273
|
+
* @param {Meeting} meeting
|
|
274
|
+
* @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
|
|
275
|
+
*/
|
|
276
|
+
private async getSkipReason(meeting: Meeting): Promise<string> {
|
|
277
|
+
// @ts-ignore - fix type
|
|
278
|
+
const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
|
|
279
|
+
|
|
280
|
+
if (isAnyClusterReachable) {
|
|
281
|
+
LoggerProxy.logger.info(
|
|
282
|
+
'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
|
|
283
|
+
);
|
|
284
|
+
|
|
285
|
+
return 'reachability';
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// @ts-ignore - fix type
|
|
289
|
+
if (!meeting.config.experimental.enableTurnDiscovery) {
|
|
290
|
+
LoggerProxy.logger.info(
|
|
291
|
+
'Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it'
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
return 'config';
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return '';
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Checks if TURN discovery is skipped.
|
|
302
|
+
*
|
|
303
|
+
* @param {Meeting} meeting
|
|
304
|
+
* @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
|
|
305
|
+
*/
|
|
306
|
+
async isSkipped(meeting) {
|
|
307
|
+
const skipReason = await this.getSkipReason(meeting);
|
|
308
|
+
|
|
309
|
+
return !!skipReason;
|
|
310
|
+
}
|
|
317
311
|
}
|