@webex/plugin-meetings 2.60.1-next.9 → 2.60.2
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 -58
- 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 -6
- package/dist/config.js +10 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +100 -234
- package/dist/constants.js +444 -433
- 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 +5 -121
- 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 +520 -705
- package/dist/meeting/index.js +3083 -5041
- 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 -304
- 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 -118
- package/dist/meeting/util.js +435 -676
- 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 +20 -114
- package/dist/meetings/index.js +133 -540
- 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 +95 -61
- package/dist/reachability/index.js +392 -304
- 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 +232 -285
- 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 +238 -100
- 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 -50
- package/dist/statsAnalyzer/index.js +511 -436
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +6 -8
- package/dist/statsAnalyzer/mqaUtil.js +90 -130
- 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 -39
- 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 -6
- package/src/constants.ts +100 -265
- 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 -450
- 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 +2581 -4306
- package/src/meeting/muteState.ts +138 -224
- package/src/meeting/request.ts +127 -214
- package/src/meeting/util.ts +423 -687
- 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 +136 -531
- 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 +347 -246
- 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 -96
- 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 +645 -479
- package/src/statsAnalyzer/mqaUtil.ts +126 -128
- 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 -1437
- 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 +2313 -8384
- package/test/unit/spec/meeting/muteState.js +213 -409
- package/test/unit/spec/meeting/request.js +43 -523
- package/test/unit/spec/meeting/utils.js +24 -834
- 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 +232 -1445
- 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 -532
- package/test/unit/spec/reconnection-manager/index.js +24 -163
- 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 +77 -187
- 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 +165 -644
- 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/interceptors/index.d.ts +0 -2
- package/dist/interceptors/index.js +0 -15
- package/dist/interceptors/index.js.map +0 -1
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interceptors/locusRetry.js +0 -94
- package/dist/interceptors/locusRetry.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/meeting/voicea-meeting.d.ts +0 -20
- package/dist/meeting/voicea-meeting.js +0 -201
- package/dist/meeting/voicea-meeting.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/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/clusterReachability.js +0 -357
- package/dist/reachability/clusterReachability.js.map +0 -1
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reachability/util.js +0 -29
- package/dist/reachability/util.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 -44
- package/src/interceptors/index.ts +0 -3
- package/src/interceptors/locusRetry.ts +0 -67
- 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/meeting/voicea-meeting.ts +0 -161
- 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/reachability/clusterReachability.ts +0 -320
- package/src/reachability/util.ts +0 -24
- 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/interceptors/locusRetry.ts +0 -131
- 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/clusterReachability.ts +0 -279
- package/test/unit/spec/reachability/request.js +0 -68
- package/test/unit/spec/reachability/util.ts +0 -40
- package/test/unit/spec/roap/request.ts +0 -255
- 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
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
import {WebexPlugin} from '@webex/webex-core';
|
|
5
|
-
import LoggerProxy from '../common/logs/logger-proxy';
|
|
6
|
-
import {HTTP_VERBS, INTERPRETATION, MEETINGS} from '../constants';
|
|
7
|
-
|
|
8
|
-
import SILanguageCollection from './collection';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @class SimultaneousInterpretation
|
|
12
|
-
*/
|
|
13
|
-
const SimultaneousInterpretation = WebexPlugin.extend({
|
|
14
|
-
namespace: MEETINGS,
|
|
15
|
-
collections: {
|
|
16
|
-
siLanguages: SILanguageCollection,
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
-
props: {
|
|
20
|
-
locusUrl: 'string', // appears current meeting's locus url
|
|
21
|
-
approvalUrl: 'string', // appears current meeting's approval url for handoff between interpreters
|
|
22
|
-
originalLanguage: 'string', // appears current meeting's original language
|
|
23
|
-
sourceLanguage: 'string', // appears self interpreter's source language
|
|
24
|
-
targetLanguage: 'string', // appears self interpreter's target language
|
|
25
|
-
receiveLanguage: 'string', // appears self's receive language
|
|
26
|
-
order: 'number', // appears the order of self as interpreter
|
|
27
|
-
isActive: 'boolean', // appears self is interpreter and is active
|
|
28
|
-
selfParticipantId: 'string', // appears the self participant id
|
|
29
|
-
canManageInterpreters: 'boolean', // appears the ability to manage interpreters
|
|
30
|
-
supportLanguages: 'array', // appears the support languages
|
|
31
|
-
meetingSIEnabled: 'boolean', // appears the meeting support SI feature
|
|
32
|
-
hostSIEnabled: 'boolean', // appears the meeting host/interpreter feature of SI enabled
|
|
33
|
-
selfIsInterpreter: 'boolean', // current user is interpreter or not
|
|
34
|
-
},
|
|
35
|
-
derived: {
|
|
36
|
-
shouldQuerySupportLanguages: {
|
|
37
|
-
cache: false,
|
|
38
|
-
deps: ['canManageInterpreters', 'hostSIEnabled'],
|
|
39
|
-
/**
|
|
40
|
-
* Returns should query support languages or not
|
|
41
|
-
* @returns {boolean}
|
|
42
|
-
*/
|
|
43
|
-
fn() {
|
|
44
|
-
return !!(this.canManageInterpreters && this.hostSIEnabled);
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
/**
|
|
49
|
-
* initialize for interpretation
|
|
50
|
-
* @returns {void}
|
|
51
|
-
*/
|
|
52
|
-
initialize() {
|
|
53
|
-
this.listenTo(this, 'change:shouldQuerySupportLanguages', () => {
|
|
54
|
-
if (this.canManageInterpreters && !this.supportLanguages) {
|
|
55
|
-
this.querySupportLanguages();
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
this.listenToHandoffRequests();
|
|
59
|
-
},
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Calls this to clean up listeners
|
|
63
|
-
* @returns {void}
|
|
64
|
-
*/
|
|
65
|
-
cleanUp() {
|
|
66
|
-
this.stopListening();
|
|
67
|
-
},
|
|
68
|
-
/**
|
|
69
|
-
* Update the current locus url of the meeting
|
|
70
|
-
* @param {string} locusUrl // locus url
|
|
71
|
-
* @returns {void}
|
|
72
|
-
*/
|
|
73
|
-
locusUrlUpdate(locusUrl) {
|
|
74
|
-
this.set('locusUrl', locusUrl);
|
|
75
|
-
},
|
|
76
|
-
/**
|
|
77
|
-
* Update the approval url for handoff
|
|
78
|
-
* @param {string} approvalUrl // approval url
|
|
79
|
-
* @returns {void}
|
|
80
|
-
*/
|
|
81
|
-
approvalUrlUpdate(approvalUrl) {
|
|
82
|
-
this.set('approvalUrl', approvalUrl);
|
|
83
|
-
},
|
|
84
|
-
/**
|
|
85
|
-
* Update whether self has capability to manage interpreters (only host can manage it)
|
|
86
|
-
* @param {boolean} canManageInterpreters
|
|
87
|
-
* @returns {void}
|
|
88
|
-
*/
|
|
89
|
-
updateCanManageInterpreters(canManageInterpreters) {
|
|
90
|
-
this.set('canManageInterpreters', canManageInterpreters);
|
|
91
|
-
},
|
|
92
|
-
/**
|
|
93
|
-
* Update whether the meeting's host si is enabled or not
|
|
94
|
-
* @param {boolean} hostSIEnabled
|
|
95
|
-
* @returns {void}
|
|
96
|
-
*/
|
|
97
|
-
updateHostSIEnabled(hostSIEnabled) {
|
|
98
|
-
this.set('hostSIEnabled', hostSIEnabled);
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Update whether the meeting support SI feature or not from meeting info
|
|
103
|
-
* @param {boolean} meetingSIEnabled
|
|
104
|
-
* @param {boolean} selfIsInterpreter
|
|
105
|
-
* @returns {void}
|
|
106
|
-
*/
|
|
107
|
-
updateMeetingSIEnabled(meetingSIEnabled: boolean, selfIsInterpreter): void {
|
|
108
|
-
this.set('meetingSIEnabled', meetingSIEnabled);
|
|
109
|
-
this.set('selfIsInterpreter', selfIsInterpreter);
|
|
110
|
-
},
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Update the interpretation languages channels which user can choose to subscribe
|
|
114
|
-
* @param {Object} interpretation
|
|
115
|
-
* @returns {void}
|
|
116
|
-
*/
|
|
117
|
-
updateInterpretation(interpretation) {
|
|
118
|
-
this.siLanguages.set(interpretation?.siLanguages || []);
|
|
119
|
-
},
|
|
120
|
-
/**
|
|
121
|
-
* Update self's interpretation information (self is interpreter)
|
|
122
|
-
* @param {Object} interpretation
|
|
123
|
-
* @param {String} selfParticipantId
|
|
124
|
-
* @returns {void}
|
|
125
|
-
*/
|
|
126
|
-
updateSelfInterpretation({interpretation, selfParticipantId}) {
|
|
127
|
-
const {originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage} =
|
|
128
|
-
interpretation || {};
|
|
129
|
-
this.set({originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage});
|
|
130
|
-
this.set('selfParticipantId', selfParticipantId);
|
|
131
|
-
},
|
|
132
|
-
/**
|
|
133
|
-
* query interpretation languages
|
|
134
|
-
* @returns {Promise}
|
|
135
|
-
*/
|
|
136
|
-
querySupportLanguages() {
|
|
137
|
-
return this.request({
|
|
138
|
-
method: HTTP_VERBS.GET,
|
|
139
|
-
uri: `${this.locusUrl}/languages/interpretation`,
|
|
140
|
-
})
|
|
141
|
-
.then((result) => {
|
|
142
|
-
this.set('supportLanguages', result.body?.siLanguages);
|
|
143
|
-
this.trigger(INTERPRETATION.EVENTS.SUPPORT_LANGUAGES_UPDATE);
|
|
144
|
-
})
|
|
145
|
-
.catch((error) => {
|
|
146
|
-
LoggerProxy.logger.error('Meeting:interpretation#querySupportLanguages failed', error);
|
|
147
|
-
throw error;
|
|
148
|
-
});
|
|
149
|
-
},
|
|
150
|
-
/**
|
|
151
|
-
* get interpreters of the meeting
|
|
152
|
-
* @returns {Promise}
|
|
153
|
-
*/
|
|
154
|
-
getInterpreters() {
|
|
155
|
-
return this.request({
|
|
156
|
-
method: HTTP_VERBS.GET,
|
|
157
|
-
uri: `${this.locusUrl}/interpretation/interpreters`,
|
|
158
|
-
}).catch((error) => {
|
|
159
|
-
LoggerProxy.logger.error('Meeting:interpretation#getInterpreters failed', error);
|
|
160
|
-
throw error;
|
|
161
|
-
});
|
|
162
|
-
},
|
|
163
|
-
/**
|
|
164
|
-
* update interpreters of the meeting
|
|
165
|
-
* @param {Array} interpreters
|
|
166
|
-
* @returns {Promise}
|
|
167
|
-
*/
|
|
168
|
-
updateInterpreters(interpreters) {
|
|
169
|
-
return this.request({
|
|
170
|
-
method: HTTP_VERBS.PATCH,
|
|
171
|
-
uri: `${this.locusUrl}/controls`,
|
|
172
|
-
body: {
|
|
173
|
-
interpretation: {
|
|
174
|
-
interpreters,
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
}).catch((error) => {
|
|
178
|
-
LoggerProxy.logger.error('Meeting:interpretation#updateInterpreters failed', error);
|
|
179
|
-
throw error;
|
|
180
|
-
});
|
|
181
|
-
},
|
|
182
|
-
/**
|
|
183
|
-
* Change direction of interpretation for an interpreter participant
|
|
184
|
-
* @returns {Promise}
|
|
185
|
-
*/
|
|
186
|
-
changeDirection() {
|
|
187
|
-
if (!this.sourceLanguage || !this.targetLanguage) {
|
|
188
|
-
return Promise.reject(new Error('Missing sourceLanguage or targetLanguage'));
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
if (!this.selfParticipantId) {
|
|
192
|
-
return Promise.reject(new Error('Missing self participant id'));
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
return this.request({
|
|
196
|
-
method: HTTP_VERBS.PATCH,
|
|
197
|
-
uri: `${this.locusUrl}/participant/${this.selfParticipantId}/controls`,
|
|
198
|
-
body: {
|
|
199
|
-
interpretation: {
|
|
200
|
-
sourceLanguage: this.targetLanguage,
|
|
201
|
-
targetLanguage: this.sourceLanguage,
|
|
202
|
-
isActive: this.isActive,
|
|
203
|
-
order: this.order,
|
|
204
|
-
},
|
|
205
|
-
},
|
|
206
|
-
}).catch((error) => {
|
|
207
|
-
LoggerProxy.logger.error('Meeting:interpretation#changeDirection failed', error);
|
|
208
|
-
throw error;
|
|
209
|
-
});
|
|
210
|
-
},
|
|
211
|
-
/**
|
|
212
|
-
* Sets up a listener for handoff requests from mercury
|
|
213
|
-
* @returns {void}
|
|
214
|
-
*/
|
|
215
|
-
listenToHandoffRequests() {
|
|
216
|
-
this.listenTo(this.webex.internal.mercury, 'event:locus.approval_request', (event) => {
|
|
217
|
-
if (event?.data?.approval?.resourceType === INTERPRETATION.RESOURCE_TYPE) {
|
|
218
|
-
const {receivers, initiator, actionType, url} = event.data.approval;
|
|
219
|
-
const receiverId = receivers?.[0]?.participantId;
|
|
220
|
-
const isReceiver = !!receiverId && receiverId === this.selfParticipantId;
|
|
221
|
-
const senderId = initiator?.participantId;
|
|
222
|
-
const isSender = !!senderId && senderId === this.selfParticipantId;
|
|
223
|
-
if (!isReceiver && !isSender) {
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
this.trigger(INTERPRETATION.EVENTS.HANDOFF_REQUESTS_ARRIVED, {
|
|
227
|
-
actionType,
|
|
228
|
-
isReceiver,
|
|
229
|
-
isSender,
|
|
230
|
-
senderId,
|
|
231
|
-
receiverId,
|
|
232
|
-
url,
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
});
|
|
236
|
-
},
|
|
237
|
-
/**
|
|
238
|
-
* handoff the active interpreter role to another interpreter in same group, only the interpreter is allowed to call this api
|
|
239
|
-
* @param {string} participantId the participant id you want to hand off
|
|
240
|
-
* @returns {Promise}
|
|
241
|
-
*/
|
|
242
|
-
handoffInterpreter(participantId) {
|
|
243
|
-
if (!participantId) {
|
|
244
|
-
return Promise.reject(new Error('Missing target participant id'));
|
|
245
|
-
}
|
|
246
|
-
if (!this.approvalUrl) {
|
|
247
|
-
return Promise.reject(new Error('Missing approval url'));
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
return this.request({
|
|
251
|
-
method: HTTP_VERBS.POST,
|
|
252
|
-
uri: this.approvalUrl,
|
|
253
|
-
body: {
|
|
254
|
-
actionType: INTERPRETATION.ACTION_TYPE.OFFERED,
|
|
255
|
-
resourceType: INTERPRETATION.RESOURCE_TYPE,
|
|
256
|
-
receivers: [
|
|
257
|
-
{
|
|
258
|
-
participantId,
|
|
259
|
-
},
|
|
260
|
-
],
|
|
261
|
-
},
|
|
262
|
-
}).catch((error) => {
|
|
263
|
-
LoggerProxy.logger.error('Meeting:interpretation#handoffInterpreter failed', error);
|
|
264
|
-
throw error;
|
|
265
|
-
});
|
|
266
|
-
},
|
|
267
|
-
/**
|
|
268
|
-
* the in-active interpreter request to hand off the active role to self
|
|
269
|
-
* @returns {Promise}
|
|
270
|
-
*/
|
|
271
|
-
requestHandoff() {
|
|
272
|
-
if (!this.approvalUrl) {
|
|
273
|
-
return Promise.reject(new Error('Missing approval url'));
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
return this.request({
|
|
277
|
-
method: HTTP_VERBS.POST,
|
|
278
|
-
uri: this.approvalUrl,
|
|
279
|
-
body: {
|
|
280
|
-
actionType: INTERPRETATION.ACTION_TYPE.REQUESTED,
|
|
281
|
-
resourceType: INTERPRETATION.RESOURCE_TYPE,
|
|
282
|
-
},
|
|
283
|
-
}).catch((error) => {
|
|
284
|
-
LoggerProxy.logger.error('Meeting:interpretation#requestHandoff failed', error);
|
|
285
|
-
throw error;
|
|
286
|
-
});
|
|
287
|
-
},
|
|
288
|
-
/**
|
|
289
|
-
* accept the request of handoff
|
|
290
|
-
* @param {String} url the url get from last approval event
|
|
291
|
-
* @returns {Promise}
|
|
292
|
-
*/
|
|
293
|
-
acceptRequest(url) {
|
|
294
|
-
if (!url) {
|
|
295
|
-
return Promise.reject(new Error('Missing the url to accept'));
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
return this.request({
|
|
299
|
-
method: HTTP_VERBS.PUT,
|
|
300
|
-
uri: url,
|
|
301
|
-
body: {
|
|
302
|
-
actionType: INTERPRETATION.ACTION_TYPE.ACCEPTED,
|
|
303
|
-
},
|
|
304
|
-
}).catch((error) => {
|
|
305
|
-
LoggerProxy.logger.error('Meeting:interpretation#acceptRequest failed', error);
|
|
306
|
-
throw error;
|
|
307
|
-
});
|
|
308
|
-
},
|
|
309
|
-
/**
|
|
310
|
-
* decline the request of handoff
|
|
311
|
-
* @param {String} url the url get from last approval event
|
|
312
|
-
* @returns {Promise}
|
|
313
|
-
*/
|
|
314
|
-
declineRequest(url) {
|
|
315
|
-
if (!url) {
|
|
316
|
-
return Promise.reject(new Error('Missing the url to decline'));
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
return this.request({
|
|
320
|
-
method: HTTP_VERBS.PUT,
|
|
321
|
-
uri: url,
|
|
322
|
-
body: {
|
|
323
|
-
actionType: INTERPRETATION.ACTION_TYPE.DECLINED,
|
|
324
|
-
},
|
|
325
|
-
}).catch((error) => {
|
|
326
|
-
LoggerProxy.logger.error('Meeting:interpretation#declineRequest failed', error);
|
|
327
|
-
throw error;
|
|
328
|
-
});
|
|
329
|
-
},
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
export default SimultaneousInterpretation;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {WebexPlugin} from '@webex/webex-core';
|
|
6
|
-
import {MEETINGS} from '../constants';
|
|
7
|
-
|
|
8
|
-
const SILanguage = WebexPlugin.extend({
|
|
9
|
-
idAttribute: 'languageName',
|
|
10
|
-
|
|
11
|
-
namespace: MEETINGS,
|
|
12
|
-
props: {
|
|
13
|
-
languageCode: 'number',
|
|
14
|
-
languageName: 'string',
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
export default SILanguage;
|
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
/* eslint-disable valid-jsdoc */
|
|
2
|
-
import {defer} from 'lodash';
|
|
3
|
-
import {Defer} from '@webex/common';
|
|
4
|
-
import {WebexPlugin} from '@webex/webex-core';
|
|
5
|
-
import {MEDIA, HTTP_VERBS, ROAP, IP_VERSION} from '../constants';
|
|
6
|
-
import LoggerProxy from '../common/logs/logger-proxy';
|
|
7
|
-
|
|
8
|
-
export type MediaRequestType = 'RoapMessage' | 'LocalMute';
|
|
9
|
-
export type RequestResult = any;
|
|
10
|
-
|
|
11
|
-
export type RoapRequest = {
|
|
12
|
-
type: 'RoapMessage';
|
|
13
|
-
selfUrl: string;
|
|
14
|
-
mediaId: string;
|
|
15
|
-
roapMessage: any;
|
|
16
|
-
reachability: any;
|
|
17
|
-
sequence?: any;
|
|
18
|
-
joinCookie: any; // any, because this is opaque to the client, we pass whatever object we got from one backend component (Orpheus) to the other (Locus)
|
|
19
|
-
ipVersion?: IP_VERSION;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export type LocalMuteRequest = {
|
|
23
|
-
type: 'LocalMute';
|
|
24
|
-
selfUrl: string;
|
|
25
|
-
mediaId: string;
|
|
26
|
-
sequence?: any;
|
|
27
|
-
muteOptions: {
|
|
28
|
-
audioMuted?: boolean;
|
|
29
|
-
videoMuted?: boolean;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
export type Request = RoapRequest | LocalMuteRequest;
|
|
34
|
-
|
|
35
|
-
/** Class representing a single /media request being sent to Locus */
|
|
36
|
-
class InternalRequestInfo {
|
|
37
|
-
public readonly request: Request;
|
|
38
|
-
private pendingPromises: Defer[];
|
|
39
|
-
private sendRequestFn: (request: Request) => Promise<RequestResult>;
|
|
40
|
-
|
|
41
|
-
/** Constructor */
|
|
42
|
-
constructor(
|
|
43
|
-
request: Request,
|
|
44
|
-
pendingPromise: Defer,
|
|
45
|
-
sendRequestFn: (request: Request) => Promise<RequestResult>
|
|
46
|
-
) {
|
|
47
|
-
this.request = request;
|
|
48
|
-
this.pendingPromises = [pendingPromise];
|
|
49
|
-
this.sendRequestFn = sendRequestFn;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Returns the list of pending promises associated with this request
|
|
54
|
-
*/
|
|
55
|
-
public getPendingPromises() {
|
|
56
|
-
return this.pendingPromises;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Adds promises to the list of pending promises associated with this request
|
|
61
|
-
*/
|
|
62
|
-
public addPendingPromises(pendingPromises: Defer[]) {
|
|
63
|
-
this.pendingPromises.push(...pendingPromises);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Executes the request. Returned promise is resolved once the request
|
|
68
|
-
* is completed (no matter if it succeeded or failed).
|
|
69
|
-
*/
|
|
70
|
-
public execute(): Promise<void> {
|
|
71
|
-
return this.sendRequestFn(this.request)
|
|
72
|
-
.then((result) => {
|
|
73
|
-
// resolve all the pending promises associated with this request
|
|
74
|
-
this.pendingPromises.forEach((d) => d.resolve(result));
|
|
75
|
-
})
|
|
76
|
-
.catch((e) => {
|
|
77
|
-
// reject all the pending promises associated with this request
|
|
78
|
-
this.pendingPromises.forEach((d) => d.reject(e));
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export type Config = {
|
|
84
|
-
device: {
|
|
85
|
-
url: string;
|
|
86
|
-
deviceType: string;
|
|
87
|
-
countryCode?: string;
|
|
88
|
-
regionCode?: string;
|
|
89
|
-
};
|
|
90
|
-
correlationId: string;
|
|
91
|
-
preferTranscoding: boolean;
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Returns true if the request is triggering confluence creation in the server
|
|
96
|
-
*/
|
|
97
|
-
function isRequestAffectingConfluenceState(request: Request): boolean {
|
|
98
|
-
return (
|
|
99
|
-
request.type === 'RoapMessage' && request.roapMessage.messageType === ROAP.ROAP_TYPES.OFFER
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* This class manages all /media API requests to Locus. Every call to that
|
|
105
|
-
* Locus API has to go through this class.
|
|
106
|
-
*/
|
|
107
|
-
export class LocusMediaRequest extends WebexPlugin {
|
|
108
|
-
private config: Config;
|
|
109
|
-
private latestAudioMuted?: boolean;
|
|
110
|
-
private latestVideoMuted?: boolean;
|
|
111
|
-
private isRequestInProgress: boolean;
|
|
112
|
-
private queuedRequests: InternalRequestInfo[];
|
|
113
|
-
private confluenceState: 'not created' | 'creation in progress' | 'created';
|
|
114
|
-
/**
|
|
115
|
-
* Constructor
|
|
116
|
-
*/
|
|
117
|
-
constructor(config: Config, options: any) {
|
|
118
|
-
super({}, options);
|
|
119
|
-
this.isRequestInProgress = false;
|
|
120
|
-
this.queuedRequests = [];
|
|
121
|
-
this.config = config;
|
|
122
|
-
this.confluenceState = 'not created';
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Add a request to the internal queue.
|
|
127
|
-
*/
|
|
128
|
-
private addToQueue(info: InternalRequestInfo) {
|
|
129
|
-
if (info.request.type === 'LocalMute' && this.queuedRequests.length > 0) {
|
|
130
|
-
// We don't need additional local mute requests in the queue.
|
|
131
|
-
// We only need at most 1 local mute or 1 roap request, because
|
|
132
|
-
// roap requests also include mute state, so whatever request
|
|
133
|
-
// is sent out, it will send the latest local mute state.
|
|
134
|
-
// We only need to store the pendingPromises so that they get resolved
|
|
135
|
-
// when the roap request is sent out.
|
|
136
|
-
this.queuedRequests[0].addPendingPromises(info.getPendingPromises());
|
|
137
|
-
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if (info.request.type === 'RoapMessage' && this.queuedRequests.length > 0) {
|
|
142
|
-
// remove any LocalMute requests from the queue, because this Roap message
|
|
143
|
-
// will also update the mute status in Locus, so they are redundant
|
|
144
|
-
this.queuedRequests = this.queuedRequests.filter((r) => {
|
|
145
|
-
if (r.request.type === 'LocalMute') {
|
|
146
|
-
// we need to keep the pending promises from the local mute request
|
|
147
|
-
// that we're removing from the queue
|
|
148
|
-
info.addPendingPromises(r.getPendingPromises());
|
|
149
|
-
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return true;
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
this.queuedRequests.push(info);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Takes the next request from the queue and executes it. Once that
|
|
162
|
-
* request is completed, the next one will be taken from the queue
|
|
163
|
-
* and executed and this is repeated until the queue is empty.
|
|
164
|
-
*/
|
|
165
|
-
private executeNextQueuedRequest(): void {
|
|
166
|
-
if (this.isRequestInProgress) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const nextRequest = this.queuedRequests.shift();
|
|
171
|
-
|
|
172
|
-
if (nextRequest) {
|
|
173
|
-
this.isRequestInProgress = true;
|
|
174
|
-
nextRequest.execute().then(() => {
|
|
175
|
-
this.isRequestInProgress = false;
|
|
176
|
-
this.executeNextQueuedRequest();
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Returns latest requested audio and video mute values. If they have never been
|
|
183
|
-
* requested, we assume audio/video to be muted.
|
|
184
|
-
*/
|
|
185
|
-
private getLatestMuteState() {
|
|
186
|
-
const audioMuted = this.latestAudioMuted !== undefined ? this.latestAudioMuted : true;
|
|
187
|
-
const videoMuted = this.latestVideoMuted !== undefined ? this.latestVideoMuted : true;
|
|
188
|
-
|
|
189
|
-
return {audioMuted, videoMuted};
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Prepares the uri and body for the media request to be sent to Locus
|
|
194
|
-
*/
|
|
195
|
-
private sendHttpRequest(request: Request) {
|
|
196
|
-
const uri = `${request.selfUrl}/${MEDIA}`;
|
|
197
|
-
|
|
198
|
-
const {audioMuted, videoMuted} = this.getLatestMuteState();
|
|
199
|
-
|
|
200
|
-
// first setup things common to all requests
|
|
201
|
-
const body: any = {
|
|
202
|
-
device: this.config.device,
|
|
203
|
-
correlationId: this.config.correlationId,
|
|
204
|
-
clientMediaPreferences: {
|
|
205
|
-
preferTranscoding: this.config.preferTranscoding,
|
|
206
|
-
ipver: request.type === 'RoapMessage' ? request.ipVersion : undefined,
|
|
207
|
-
},
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
const localMedias: any = {
|
|
211
|
-
audioMuted,
|
|
212
|
-
videoMuted,
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
// now add things specific to request type
|
|
216
|
-
switch (request.type) {
|
|
217
|
-
case 'LocalMute':
|
|
218
|
-
body.respOnlySdp = true;
|
|
219
|
-
body.usingResource = null;
|
|
220
|
-
break;
|
|
221
|
-
|
|
222
|
-
case 'RoapMessage':
|
|
223
|
-
localMedias.roapMessage = request.roapMessage;
|
|
224
|
-
localMedias.reachability = request.reachability;
|
|
225
|
-
body.clientMediaPreferences.joinCookie = request.joinCookie;
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (request.sequence) {
|
|
230
|
-
body.sequence = request.sequence;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
body.localMedias = [
|
|
234
|
-
{
|
|
235
|
-
localSdp: JSON.stringify(localMedias), // this part must be JSON stringified, Locus requires this
|
|
236
|
-
mediaId: request.mediaId,
|
|
237
|
-
},
|
|
238
|
-
];
|
|
239
|
-
|
|
240
|
-
LoggerProxy.logger.info(
|
|
241
|
-
`Meeting:LocusMediaRequest#sendHttpRequest --> ${request.type} audioMuted=${audioMuted} videoMuted=${videoMuted}`
|
|
242
|
-
);
|
|
243
|
-
|
|
244
|
-
if (isRequestAffectingConfluenceState(request) && this.confluenceState === 'not created') {
|
|
245
|
-
this.confluenceState = 'creation in progress';
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// @ts-ignore
|
|
249
|
-
return this.request({
|
|
250
|
-
method: HTTP_VERBS.PUT,
|
|
251
|
-
uri,
|
|
252
|
-
body,
|
|
253
|
-
})
|
|
254
|
-
.then((result) => {
|
|
255
|
-
if (isRequestAffectingConfluenceState(request)) {
|
|
256
|
-
this.confluenceState = 'created';
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
return result;
|
|
260
|
-
})
|
|
261
|
-
.catch((e) => {
|
|
262
|
-
if (
|
|
263
|
-
isRequestAffectingConfluenceState(request) &&
|
|
264
|
-
this.confluenceState === 'creation in progress'
|
|
265
|
-
) {
|
|
266
|
-
this.confluenceState = 'not created';
|
|
267
|
-
}
|
|
268
|
-
throw e;
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Sends a media request to Locus
|
|
274
|
-
*/
|
|
275
|
-
public send(request: Request): Promise<RequestResult> {
|
|
276
|
-
if (request.type === 'LocalMute') {
|
|
277
|
-
const {audioMuted, videoMuted} = request.muteOptions;
|
|
278
|
-
|
|
279
|
-
if (audioMuted !== undefined) {
|
|
280
|
-
this.latestAudioMuted = audioMuted;
|
|
281
|
-
}
|
|
282
|
-
if (videoMuted !== undefined) {
|
|
283
|
-
this.latestVideoMuted = videoMuted;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
if (this.confluenceState === 'not created') {
|
|
287
|
-
// if there is no confluence, there is no point sending out local mute request
|
|
288
|
-
// as it will fail so we just store the latest audio/video muted values
|
|
289
|
-
// and resolve immediately, so that higher layer (MuteState class) doesn't get blocked
|
|
290
|
-
// and can call us again if user mutes/unmutes again before confluence is created
|
|
291
|
-
LoggerProxy.logger.info(
|
|
292
|
-
'Meeting:LocusMediaRequest#send --> called with LocalMute request before confluence creation'
|
|
293
|
-
);
|
|
294
|
-
|
|
295
|
-
return Promise.resolve({});
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
const pendingPromise = new Defer();
|
|
300
|
-
|
|
301
|
-
const newRequest = new InternalRequestInfo(
|
|
302
|
-
request,
|
|
303
|
-
pendingPromise,
|
|
304
|
-
this.sendHttpRequest.bind(this)
|
|
305
|
-
);
|
|
306
|
-
|
|
307
|
-
this.addToQueue(newRequest);
|
|
308
|
-
|
|
309
|
-
defer(() => this.executeNextQueuedRequest());
|
|
310
|
-
|
|
311
|
-
return pendingPromise.promise;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import {Reaction} from '../reactions/reactions.type';
|
|
2
|
-
|
|
3
|
-
export type SendReactionOptions = {
|
|
4
|
-
reactionChannelUrl: string;
|
|
5
|
-
reaction: Reaction;
|
|
6
|
-
participantId: string;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export type ToggleReactionsOptions = {
|
|
10
|
-
enable: boolean;
|
|
11
|
-
locusUrl: string;
|
|
12
|
-
requestingParticipantId: string;
|
|
13
|
-
};
|