@webex/plugin-meetings 3.7.0 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/annotation/annotation.types.d.ts +42 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/annotation/index.js +17 -0
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.d.ts +8 -0
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/collection.d.ts +5 -0
- package/dist/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/breakouts/events.d.ts +8 -0
- package/dist/breakouts/index.d.ts +5 -0
- package/dist/breakouts/index.js +1 -1
- package/dist/breakouts/request.d.ts +22 -0
- package/dist/breakouts/utils.d.ts +15 -0
- package/dist/common/browser-detection.d.ts +9 -0
- package/dist/common/collection.d.ts +48 -0
- package/dist/common/config.d.ts +2 -0
- package/dist/common/errors/captcha-error.d.ts +15 -0
- package/dist/common/errors/intent-to-join.d.ts +16 -0
- package/dist/common/errors/join-forbidden-error.js +52 -0
- package/dist/common/errors/join-forbidden-error.js.map +1 -0
- package/dist/common/errors/join-meeting.d.ts +17 -0
- package/dist/common/errors/{webinar-registration-error.js → join-webinar-error.js} +12 -12
- package/dist/common/errors/join-webinar-error.js.map +1 -0
- package/dist/common/errors/media.d.ts +15 -0
- package/dist/common/errors/multistream-not-supported-error.js +53 -0
- package/dist/common/errors/multistream-not-supported-error.js.map +1 -0
- package/dist/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/common/errors/parameter.d.ts +15 -0
- package/dist/common/errors/password-error.d.ts +15 -0
- package/dist/common/errors/permission.d.ts +14 -0
- package/dist/common/errors/reclaim-host-role-error.js +149 -0
- package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/common/errors/reconnection-in-progress.js +33 -0
- package/dist/common/errors/reconnection-in-progress.js.map +1 -0
- package/dist/common/errors/reconnection.d.ts +15 -0
- package/dist/common/errors/stats.d.ts +15 -0
- package/dist/common/errors/webex-errors.d.ts +93 -0
- package/dist/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/common/events/events-scope.d.ts +17 -0
- package/dist/common/events/events.d.ts +12 -0
- package/dist/common/events/trigger-proxy.d.ts +2 -0
- package/dist/common/events/util.d.ts +2 -0
- package/dist/common/logs/logger-config.d.ts +2 -0
- package/dist/common/logs/logger-proxy.d.ts +2 -0
- package/dist/common/logs/request.d.ts +36 -0
- package/dist/common/queue.d.ts +34 -0
- package/dist/config.d.ts +72 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +1088 -0
- package/dist/constants.js +68 -6
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.d.ts +4 -0
- package/dist/controls-options-manager/enums.d.ts +15 -0
- package/dist/controls-options-manager/index.d.ts +136 -0
- package/dist/controls-options-manager/types.d.ts +43 -0
- package/dist/controls-options-manager/util.d.ts +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +16 -11
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interpretation/collection.d.ts +5 -0
- package/dist/interpretation/index.d.ts +5 -0
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.d.ts +5 -0
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.d.ts +2 -0
- package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/locus-info/fullState.d.ts +2 -0
- package/dist/locus-info/hostUtils.d.ts +2 -0
- package/dist/locus-info/index.d.ts +322 -0
- package/dist/locus-info/index.js +14 -3
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.d.ts +2 -0
- package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/locus-info/parser.d.ts +272 -0
- package/dist/locus-info/selfUtils.d.ts +2 -0
- package/dist/locus-info/selfUtils.js +35 -17
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.js +1 -0
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/index.d.ts +34 -0
- package/dist/media/properties.d.ts +93 -0
- package/dist/media/properties.js +30 -16
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.d.ts +2 -0
- package/dist/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/mediaQualityMetrics/config.js +502 -0
- package/dist/mediaQualityMetrics/config.js.map +1 -0
- package/dist/meeting/brbState.js +167 -0
- package/dist/meeting/brbState.js.map +1 -0
- package/dist/meeting/effectsState.js +260 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/in-meeting-actions.d.ts +167 -0
- package/dist/meeting/in-meeting-actions.js +13 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +1825 -0
- package/dist/meeting/index.js +1331 -1051
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/locusMediaRequest.js +11 -6
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.d.ts +178 -0
- package/dist/meeting/muteState.js +1 -6
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +295 -0
- package/dist/meeting/request.js +51 -29
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/state.d.ts +9 -0
- package/dist/meeting/util.d.ts +119 -0
- package/dist/meeting/util.js +103 -67
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.d.ts +16 -0
- package/dist/meeting-info/collection.d.ts +20 -0
- package/dist/meeting-info/index.d.ts +69 -0
- package/dist/meeting-info/meeting-info-v2.d.ts +123 -0
- package/dist/meeting-info/meeting-info-v2.js +115 -45
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.d.ts +22 -0
- package/dist/meeting-info/util.d.ts +2 -0
- package/dist/meeting-info/utilv2.d.ts +2 -0
- package/dist/meeting-info/utilv2.js +6 -2
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +40 -0
- package/dist/meetings/index.d.ts +390 -0
- package/dist/meetings/index.js +107 -55
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.d.ts +4 -0
- package/dist/meetings/meetings.types.js +2 -0
- package/dist/meetings/meetings.types.js.map +1 -1
- package/dist/meetings/request.d.ts +27 -0
- package/dist/meetings/util.d.ts +18 -0
- package/dist/meetings/util.js +1 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.d.ts +160 -0
- package/dist/member/index.js +9 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +17 -0
- package/dist/member/member.types.js.map +1 -0
- package/dist/member/types.d.ts +32 -0
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.d.ts +2 -0
- package/dist/member/util.js +39 -28
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +29 -0
- package/dist/members/index.d.ts +353 -0
- package/dist/members/request.d.ts +114 -0
- package/dist/members/types.d.ts +25 -0
- package/dist/members/util.d.ts +215 -0
- package/dist/members/util.js +4 -2
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +276 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/constants.d.ts +70 -0
- package/dist/metrics/constants.js +6 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +45 -0
- package/dist/multistream/mediaRequestManager.d.ts +119 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/remoteMedia.js +30 -15
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.d.ts +49 -0
- package/dist/multistream/remoteMediaManager.d.ts +300 -0
- package/dist/multistream/sendSlotManager.d.ts +69 -0
- package/dist/multistream/sendSlotManager.js +24 -0
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.d.ts +70 -0
- package/dist/networkQualityMonitor/index.js +13 -19
- package/dist/networkQualityMonitor/index.js.map +1 -1
- 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.js +109 -0
- package/dist/peer-connection-manager/util.js.map +1 -0
- package/dist/personal-meeting-room/index.d.ts +47 -0
- package/dist/personal-meeting-room/request.d.ts +14 -0
- package/dist/personal-meeting-room/util.d.ts +2 -0
- package/dist/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/clusterReachability.js +12 -15
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.d.ts +105 -0
- package/dist/reachability/index.js +461 -136
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachability.types.js +7 -0
- package/dist/reachability/reachability.types.js.map +1 -0
- package/dist/reachability/request.d.ts +39 -0
- package/dist/reachability/request.js +21 -8
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/reactions.d.ts +4 -0
- package/dist/reactions/reactions.type.d.ts +52 -0
- package/dist/reconnection-manager/index.d.ts +136 -0
- package/dist/recording-controller/enums.d.ts +7 -0
- package/dist/recording-controller/enums.js +8 -4
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.d.ts +207 -0
- package/dist/recording-controller/index.js +18 -9
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +14 -0
- package/dist/recording-controller/util.js +13 -9
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/collection.js +62 -0
- package/dist/roap/collection.js.map +1 -0
- package/dist/roap/handler.js +275 -0
- package/dist/roap/handler.js.map +1 -0
- package/dist/roap/index.d.ts +86 -0
- package/dist/roap/index.js +15 -15
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +39 -0
- package/dist/roap/request.js +45 -79
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.js +126 -0
- package/dist/roap/state.js.map +1 -0
- package/dist/roap/turnDiscovery.d.ts +155 -0
- package/dist/roap/turnDiscovery.js +3 -6
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.js +75 -0
- package/dist/roap/util.js.map +1 -0
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/index.d.ts +61 -0
- package/dist/statsAnalyzer/global.d.ts +36 -0
- package/dist/statsAnalyzer/global.js +126 -0
- package/dist/statsAnalyzer/global.js.map +1 -0
- package/dist/statsAnalyzer/index.d.ts +217 -0
- package/dist/statsAnalyzer/index.js +1013 -0
- package/dist/statsAnalyzer/index.js.map +1 -0
- package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/statsAnalyzer/mqaUtil.js +179 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -0
- package/dist/transcription/index.d.ts +64 -0
- package/dist/types/annotation/index.d.ts +5 -0
- package/dist/types/common/errors/join-forbidden-error.d.ts +15 -0
- package/dist/types/common/errors/{webinar-registration-error.d.ts → join-webinar-error.d.ts} +2 -2
- package/dist/types/common/errors/multistream-not-supported-error.d.ts +17 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/config.d.ts +1 -0
- package/dist/types/constants.d.ts +53 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/locus-info/index.d.ts +2 -1
- package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/types/meeting/brbState.d.ts +54 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +12 -0
- package/dist/types/meeting/index.d.ts +64 -14
- package/dist/types/meeting/locusMediaRequest.d.ts +6 -3
- package/dist/types/meeting/request.d.ts +14 -3
- package/dist/types/meeting/request.type.d.ts +6 -0
- package/dist/types/meeting/util.d.ts +3 -3
- package/dist/types/meeting-info/meeting-info-v2.d.ts +30 -5
- package/dist/types/meetings/index.d.ts +20 -2
- package/dist/types/meetings/meetings.types.d.ts +8 -0
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/member/types.d.ts +7 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/constants.d.ts +6 -1
- package/dist/types/multistream/sendSlotManager.d.ts +8 -1
- package/dist/types/reachability/clusterReachability.d.ts +1 -10
- package/dist/types/reachability/index.d.ts +83 -36
- package/dist/types/reachability/reachability.types.d.ts +64 -0
- package/dist/types/reachability/request.d.ts +5 -1
- package/dist/types/recording-controller/enums.d.ts +5 -2
- package/dist/types/recording-controller/index.d.ts +1 -0
- package/dist/types/recording-controller/util.d.ts +2 -1
- package/dist/types/roap/request.d.ts +1 -13
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +217 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/webinar/collection.d.ts +16 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +390 -7
- package/dist/webinar/index.js.map +1 -1
- package/package.json +23 -22
- package/src/annotation/index.ts +16 -0
- package/src/common/errors/join-forbidden-error.ts +26 -0
- package/src/common/errors/join-webinar-error.ts +24 -0
- package/src/common/errors/multistream-not-supported-error.ts +30 -0
- package/src/config.ts +1 -0
- package/src/constants.ts +61 -3
- package/src/index.ts +5 -3
- package/src/locus-info/index.ts +20 -3
- package/src/locus-info/selfUtils.ts +24 -6
- package/src/media/MediaConnectionAwaiter.ts +2 -0
- package/src/media/properties.ts +34 -13
- package/src/meeting/brbState.ts +169 -0
- package/src/meeting/in-meeting-actions.ts +25 -0
- package/src/meeting/index.ts +443 -87
- package/src/meeting/locusMediaRequest.ts +11 -8
- package/src/meeting/muteState.ts +1 -6
- package/src/meeting/request.ts +30 -12
- package/src/meeting/request.type.ts +7 -0
- package/src/meeting/util.ts +32 -13
- package/src/meeting-info/meeting-info-v2.ts +83 -12
- package/src/meeting-info/utilv2.ts +17 -3
- package/src/meetings/index.ts +79 -20
- package/src/meetings/meetings.types.ts +10 -0
- package/src/meetings/util.ts +2 -1
- package/src/member/index.ts +9 -0
- package/src/member/types.ts +8 -0
- package/src/member/util.ts +34 -24
- package/src/members/util.ts +1 -0
- package/src/metrics/constants.ts +6 -1
- package/src/multistream/remoteMedia.ts +28 -15
- package/src/multistream/sendSlotManager.ts +31 -0
- package/src/reachability/clusterReachability.ts +5 -15
- package/src/reachability/index.ts +311 -75
- package/src/reachability/reachability.types.ts +85 -0
- package/src/reachability/request.ts +55 -31
- package/src/recording-controller/enums.ts +5 -2
- package/src/recording-controller/index.ts +17 -4
- package/src/recording-controller/util.ts +20 -5
- package/src/roap/index.ts +14 -13
- package/src/roap/request.ts +30 -44
- package/src/roap/turnDiscovery.ts +2 -4
- package/src/webinar/index.ts +235 -9
- package/test/unit/spec/annotation/index.ts +46 -1
- package/test/unit/spec/locus-info/index.js +292 -60
- package/test/unit/spec/locus-info/selfConstant.js +7 -0
- package/test/unit/spec/locus-info/selfUtils.js +101 -1
- package/test/unit/spec/media/properties.ts +15 -0
- package/test/unit/spec/meeting/brbState.ts +114 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +15 -1
- package/test/unit/spec/meeting/index.js +851 -107
- package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
- package/test/unit/spec/meeting/muteState.js +0 -24
- package/test/unit/spec/meeting/request.js +3 -26
- package/test/unit/spec/meeting/utils.js +73 -28
- package/test/unit/spec/meeting-info/meetinginfov2.js +46 -4
- package/test/unit/spec/meeting-info/utilv2.js +26 -0
- package/test/unit/spec/meetings/index.js +159 -18
- package/test/unit/spec/meetings/utils.js +10 -0
- package/test/unit/spec/member/util.js +52 -11
- package/test/unit/spec/members/utils.js +95 -0
- package/test/unit/spec/multistream/remoteMedia.ts +11 -7
- package/test/unit/spec/reachability/clusterReachability.ts +7 -0
- package/test/unit/spec/reachability/index.ts +383 -9
- package/test/unit/spec/reachability/request.js +48 -12
- package/test/unit/spec/recording-controller/index.js +61 -5
- package/test/unit/spec/recording-controller/util.js +39 -3
- package/test/unit/spec/roap/index.ts +48 -1
- package/test/unit/spec/roap/request.ts +51 -109
- package/test/unit/spec/roap/turnDiscovery.ts +202 -147
- package/test/unit/spec/webinar/index.ts +504 -0
- package/dist/common/errors/webinar-registration-error.js.map +0 -1
- package/src/common/errors/webinar-registration-error.ts +0 -27
@@ -1,5 +1,6 @@
|
|
1
1
|
import LoggerProxy from '../common/logs/logger-proxy';
|
2
2
|
import {HTTP_VERBS, RESOURCE, API, IP_VERSION} from '../constants';
|
3
|
+
import {GetClustersTrigger} from './reachability.types';
|
3
4
|
|
4
5
|
export interface ClusterNode {
|
5
6
|
isVideoMesh: boolean;
|
@@ -30,44 +31,67 @@ class ReachabilityRequest {
|
|
30
31
|
/**
|
31
32
|
* Gets the cluster information
|
32
33
|
*
|
34
|
+
* @param {string} trigger that's passed to Orpheus
|
33
35
|
* @param {IP_VERSION} ipVersion information about current ip network we're on
|
36
|
+
* @param {Object} previousReport last reachability result
|
34
37
|
* @returns {Promise}
|
35
38
|
*/
|
36
|
-
getClusters = (
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
39
|
+
getClusters = (
|
40
|
+
trigger: GetClustersTrigger,
|
41
|
+
ipVersion?: IP_VERSION,
|
42
|
+
previousReport?: any
|
43
|
+
): Promise<{
|
44
|
+
clusters: ClusterList;
|
45
|
+
joinCookie: any;
|
46
|
+
discoveryOptions?: Record<string, any>;
|
47
|
+
}> => {
|
48
|
+
// we only measure latency for the initial startup call, not for other triggers
|
49
|
+
const callWrapper =
|
50
|
+
trigger === 'startup'
|
51
|
+
? this.webex.internal.newMetrics.callDiagnosticLatencies.measureLatency.bind(
|
52
|
+
this.webex.internal.newMetrics.callDiagnosticLatencies
|
53
|
+
)
|
54
|
+
: (func) => func();
|
55
|
+
|
56
|
+
return callWrapper(
|
57
|
+
() =>
|
58
|
+
this.webex.request({
|
59
|
+
method: HTTP_VERBS.POST,
|
60
|
+
shouldRefreshAccessToken: false,
|
61
|
+
api: API.CALLIOPEDISCOVERY,
|
62
|
+
resource: RESOURCE.CLUSTERS,
|
63
|
+
body: {
|
64
|
+
ipver: ipVersion,
|
65
|
+
'supported-options': {
|
66
|
+
'report-version': 1,
|
67
|
+
'early-call-min-clusters': true,
|
48
68
|
},
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
69
|
+
'previous-report': previousReport,
|
70
|
+
trigger,
|
71
|
+
},
|
72
|
+
timeout: this.webex.config.meetings.reachabilityGetClusterTimeout,
|
73
|
+
}),
|
74
|
+
'internal.get.cluster.time'
|
75
|
+
).then((res) => {
|
76
|
+
const {clusters, joinCookie, discoveryOptions} = res.body;
|
55
77
|
|
56
|
-
|
57
|
-
|
58
|
-
|
78
|
+
Object.keys(clusters).forEach((key) => {
|
79
|
+
clusters[key].isVideoMesh = !!res.body.clusterClasses?.hybridMedia?.includes(key);
|
80
|
+
});
|
59
81
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
82
|
+
LoggerProxy.logger.log(
|
83
|
+
`Reachability:request#getClusters --> get clusters (ipver=${ipVersion}) successful:${JSON.stringify(
|
84
|
+
clusters
|
85
|
+
)}`
|
86
|
+
);
|
65
87
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
}
|
88
|
+
return {
|
89
|
+
clusters,
|
90
|
+
joinCookie,
|
91
|
+
discoveryOptions,
|
92
|
+
};
|
93
|
+
});
|
94
|
+
};
|
71
95
|
|
72
96
|
/**
|
73
97
|
* gets remote SDP For Clusters
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import PermissionError from '../common/errors/permission';
|
2
|
+
import LoggerProxy from '../common/logs/logger-proxy';
|
2
3
|
import {CONTROLS, HTTP_VERBS, SELF_POLICY} from '../constants';
|
3
4
|
import MeetingRequest from '../meeting/request';
|
4
|
-
import RecordingAction from './enums';
|
5
|
+
import {RecordingAction, RecordingType} from './enums';
|
5
6
|
import Util from './util';
|
6
|
-
import LoggerProxy from '../common/logs/logger-proxy';
|
7
7
|
|
8
8
|
/**
|
9
9
|
* @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting
|
@@ -228,11 +228,12 @@ export default class RecordingController {
|
|
228
228
|
|
229
229
|
/**
|
230
230
|
* @param {RecordingAction} action
|
231
|
+
* @param {RecordingType} recordingType
|
231
232
|
* @private
|
232
233
|
* @memberof RecordingController
|
233
234
|
* @returns {Promise}
|
234
235
|
*/
|
235
|
-
private recordingService(action: RecordingAction): Promise<any> {
|
236
|
+
private recordingService(action: RecordingAction, recordingType: RecordingType): Promise<any> {
|
236
237
|
// @ts-ignore
|
237
238
|
return this.request.request({
|
238
239
|
body: {
|
@@ -242,6 +243,7 @@ export default class RecordingController {
|
|
242
243
|
recording: {
|
243
244
|
action: action.toLowerCase(),
|
244
245
|
},
|
246
|
+
recordingType,
|
245
247
|
},
|
246
248
|
uri: `${this.serviceUrl}/loci/${this.locusId}/recording`,
|
247
249
|
method: HTTP_VERBS.PUT,
|
@@ -276,14 +278,25 @@ export default class RecordingController {
|
|
276
278
|
* @returns {Promise}
|
277
279
|
*/
|
278
280
|
private recordingFacade(action: RecordingAction): Promise<any> {
|
281
|
+
const isPremiseRecordingEnabled = Util.isPremiseRecordingEnabled(
|
282
|
+
this.displayHints,
|
283
|
+
this.selfUserPolicies
|
284
|
+
);
|
279
285
|
LoggerProxy.logger.log(
|
280
286
|
`RecordingController:index#recordingFacade --> recording action [${action}]`
|
281
287
|
);
|
282
288
|
|
289
|
+
let recordingType: RecordingType;
|
290
|
+
if (isPremiseRecordingEnabled) {
|
291
|
+
recordingType = RecordingType.Premise;
|
292
|
+
} else {
|
293
|
+
recordingType = RecordingType.Cloud;
|
294
|
+
}
|
295
|
+
|
283
296
|
// assumes action is proper cased (i.e., Example)
|
284
297
|
if (Util?.[`canUser${action}`](this.displayHints, this.selfUserPolicies)) {
|
285
298
|
if (this.serviceUrl) {
|
286
|
-
return this.recordingService(action);
|
299
|
+
return this.recordingService(action, recordingType);
|
287
300
|
}
|
288
301
|
|
289
302
|
return this.recordingControls(action);
|
@@ -1,33 +1,47 @@
|
|
1
1
|
import {DISPLAY_HINTS, SELF_POLICY} from '../constants';
|
2
|
-
import RecordingAction from './enums';
|
2
|
+
import {RecordingAction} from './enums';
|
3
3
|
import MeetingUtil from '../meeting/util';
|
4
4
|
|
5
5
|
const canUserStart = (
|
6
6
|
displayHints: Array<string>,
|
7
7
|
userPolicies: Record<SELF_POLICY, boolean>
|
8
8
|
): boolean =>
|
9
|
-
displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START)
|
9
|
+
(displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START) ||
|
10
|
+
displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START)) &&
|
10
11
|
MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
|
11
12
|
|
12
13
|
const canUserPause = (
|
13
14
|
displayHints: Array<string>,
|
14
15
|
userPolicies: Record<SELF_POLICY, boolean>
|
15
16
|
): boolean =>
|
16
|
-
displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE)
|
17
|
+
(displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE) ||
|
18
|
+
displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE)) &&
|
17
19
|
MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
|
18
20
|
|
19
21
|
const canUserResume = (
|
20
22
|
displayHints: Array<string>,
|
21
23
|
userPolicies: Record<SELF_POLICY, boolean>
|
22
24
|
): boolean =>
|
23
|
-
displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME)
|
25
|
+
(displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME) ||
|
26
|
+
displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) &&
|
24
27
|
MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
|
25
28
|
|
26
29
|
const canUserStop = (
|
27
30
|
displayHints: Array<string>,
|
28
31
|
userPolicies: Record<SELF_POLICY, boolean>
|
29
32
|
): boolean =>
|
30
|
-
displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP)
|
33
|
+
(displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP) ||
|
34
|
+
displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP)) &&
|
35
|
+
MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
|
36
|
+
|
37
|
+
const isPremiseRecordingEnabled = (
|
38
|
+
displayHints: Array<string>,
|
39
|
+
userPolicies: Record<SELF_POLICY, boolean>
|
40
|
+
): boolean =>
|
41
|
+
(displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) ||
|
42
|
+
displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) ||
|
43
|
+
displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) ||
|
44
|
+
displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) &&
|
31
45
|
MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
|
32
46
|
|
33
47
|
const extractLocusId = (url: string) => {
|
@@ -70,6 +84,7 @@ export default {
|
|
70
84
|
canUserPause,
|
71
85
|
canUserResume,
|
72
86
|
canUserStop,
|
87
|
+
isPremiseRecordingEnabled,
|
73
88
|
deriveRecordingStates,
|
74
89
|
extractLocusId,
|
75
90
|
};
|
package/src/roap/index.ts
CHANGED
@@ -107,7 +107,7 @@ export default class Roap extends StatelessWebexPlugin {
|
|
107
107
|
roapMessage,
|
108
108
|
locusSelfUrl: meeting.selfUrl,
|
109
109
|
mediaId: options.mediaId,
|
110
|
-
|
110
|
+
isMultistream: meeting.isMultistream,
|
111
111
|
locusMediaRequest: meeting.locusMediaRequest,
|
112
112
|
})
|
113
113
|
.then(() => {
|
@@ -141,7 +141,7 @@ export default class Roap extends StatelessWebexPlugin {
|
|
141
141
|
roapMessage,
|
142
142
|
locusSelfUrl: meeting.selfUrl,
|
143
143
|
mediaId: options.mediaId,
|
144
|
-
|
144
|
+
isMultistream: meeting.isMultistream,
|
145
145
|
locusMediaRequest: meeting.locusMediaRequest,
|
146
146
|
});
|
147
147
|
}
|
@@ -170,7 +170,7 @@ export default class Roap extends StatelessWebexPlugin {
|
|
170
170
|
roapMessage,
|
171
171
|
locusSelfUrl: meeting.selfUrl,
|
172
172
|
mediaId: options.mediaId,
|
173
|
-
|
173
|
+
isMultistream: meeting.isMultistream,
|
174
174
|
locusMediaRequest: meeting.locusMediaRequest,
|
175
175
|
})
|
176
176
|
.then(() => {
|
@@ -207,10 +207,9 @@ export default class Roap extends StatelessWebexPlugin {
|
|
207
207
|
roapMessage,
|
208
208
|
locusSelfUrl: meeting.selfUrl,
|
209
209
|
mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
|
210
|
-
|
210
|
+
isMultistream: meeting.isMultistream,
|
211
211
|
preferTranscoding: !meeting.isMultistream,
|
212
212
|
locusMediaRequest: meeting.locusMediaRequest,
|
213
|
-
ipVersion: MeetingUtil.getIpVersion(meeting.webex),
|
214
213
|
})
|
215
214
|
.then(({locus, mediaConnections}) => {
|
216
215
|
if (mediaConnections) {
|
@@ -232,14 +231,16 @@ export default class Roap extends StatelessWebexPlugin {
|
|
232
231
|
headers,
|
233
232
|
} = remoteSdp.roapMessage;
|
234
233
|
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
234
|
+
if (messageType === ROAP.ROAP_TYPES.ANSWER) {
|
235
|
+
roapAnswer = {
|
236
|
+
seq: answerSeq,
|
237
|
+
messageType,
|
238
|
+
sdp: sdps[0],
|
239
|
+
errorType,
|
240
|
+
errorCause,
|
241
|
+
headers,
|
242
|
+
};
|
243
|
+
}
|
243
244
|
}
|
244
245
|
}
|
245
246
|
|
package/src/roap/request.ts
CHANGED
@@ -4,44 +4,13 @@ import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
4
4
|
import LoggerProxy from '../common/logs/logger-proxy';
|
5
5
|
import {IP_VERSION, REACHABILITY} from '../constants';
|
6
6
|
import {LocusMediaRequest} from '../meeting/locusMediaRequest';
|
7
|
+
import MeetingUtil from '../meeting/util';
|
8
|
+
import {ClientMediaPreferences} from '../reachability/reachability.types';
|
7
9
|
|
8
10
|
/**
|
9
11
|
* @class RoapRequest
|
10
12
|
*/
|
11
13
|
export default class RoapRequest extends StatelessWebexPlugin {
|
12
|
-
/**
|
13
|
-
* Returns reachability data.
|
14
|
-
* @param {Object} localSdp
|
15
|
-
* @returns {Object}
|
16
|
-
*/
|
17
|
-
async attachReachabilityData(localSdp) {
|
18
|
-
let joinCookie;
|
19
|
-
|
20
|
-
// @ts-ignore
|
21
|
-
const reachabilityResult = await this.webex.meetings.reachability.getReachabilityResults();
|
22
|
-
|
23
|
-
if (reachabilityResult && Object.keys(reachabilityResult).length) {
|
24
|
-
localSdp.reachability = reachabilityResult;
|
25
|
-
}
|
26
|
-
|
27
|
-
// @ts-ignore
|
28
|
-
const joinCookieRaw = await this.webex.boundedStorage
|
29
|
-
.get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
|
30
|
-
.catch(() => {});
|
31
|
-
|
32
|
-
if (joinCookieRaw) {
|
33
|
-
try {
|
34
|
-
joinCookie = JSON.parse(joinCookieRaw);
|
35
|
-
} catch (e) {
|
36
|
-
LoggerProxy.logger.error(
|
37
|
-
`MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`
|
38
|
-
);
|
39
|
-
}
|
40
|
-
}
|
41
|
-
|
42
|
-
return {localSdp, joinCookie};
|
43
|
-
}
|
44
|
-
|
45
14
|
/**
|
46
15
|
* Sends a ROAP message
|
47
16
|
* @param {Object} options
|
@@ -50,18 +19,16 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
50
19
|
* @param {String} options.mediaId
|
51
20
|
* @param {String} options.correlationId
|
52
21
|
* @param {String} options.meetingId
|
53
|
-
* @param {IP_VERSION} options.ipVersion only required for offers
|
54
22
|
* @returns {Promise} returns the response/failure of the request
|
55
23
|
*/
|
56
24
|
async sendRoap(options: {
|
57
25
|
roapMessage: any;
|
58
26
|
locusSelfUrl: string;
|
59
27
|
mediaId: string;
|
60
|
-
|
61
|
-
ipVersion?: IP_VERSION;
|
28
|
+
isMultistream: boolean;
|
62
29
|
locusMediaRequest?: LocusMediaRequest;
|
63
30
|
}) {
|
64
|
-
const {roapMessage, locusSelfUrl, mediaId, locusMediaRequest
|
31
|
+
const {roapMessage, locusSelfUrl, isMultistream, mediaId, locusMediaRequest} = options;
|
65
32
|
|
66
33
|
if (!mediaId) {
|
67
34
|
LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');
|
@@ -74,13 +41,33 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
74
41
|
|
75
42
|
return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));
|
76
43
|
}
|
77
|
-
|
78
|
-
|
79
|
-
|
44
|
+
|
45
|
+
let reachability;
|
46
|
+
let clientMediaPreferences: ClientMediaPreferences = {
|
47
|
+
// bare minimum fallback value that should allow us to join;
|
48
|
+
joinCookie: undefined,
|
49
|
+
ipver: IP_VERSION.unknown,
|
50
|
+
preferTranscoding: !isMultistream,
|
51
|
+
};
|
52
|
+
|
53
|
+
try {
|
54
|
+
clientMediaPreferences =
|
55
|
+
// @ts-ignore
|
56
|
+
await this.webex.meetings.reachability.getClientMediaPreferences(
|
57
|
+
isMultistream,
|
58
|
+
// @ts-ignore
|
59
|
+
MeetingUtil.getIpVersion(this.webex)
|
60
|
+
);
|
61
|
+
reachability =
|
62
|
+
// @ts-ignore
|
63
|
+
await this.webex.meetings.reachability.getReachabilityReportToAttachToRoap();
|
64
|
+
} catch (error) {
|
65
|
+
LoggerProxy.logger.error('Roap:request#sendRoap --> reachability error:', error);
|
66
|
+
}
|
80
67
|
|
81
68
|
LoggerProxy.logger.info(
|
82
69
|
`Roap:request#sendRoap --> ${roapMessage.messageType} seq:${roapMessage.seq} ${
|
83
|
-
|
70
|
+
clientMediaPreferences?.ipver ? `ipver=${clientMediaPreferences?.ipver} ` : ''
|
84
71
|
} ${locusSelfUrl}`
|
85
72
|
);
|
86
73
|
|
@@ -88,11 +75,10 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
88
75
|
.send({
|
89
76
|
type: 'RoapMessage',
|
90
77
|
selfUrl: locusSelfUrl,
|
91
|
-
joinCookie,
|
92
78
|
mediaId,
|
93
79
|
roapMessage,
|
94
|
-
reachability
|
95
|
-
|
80
|
+
reachability,
|
81
|
+
clientMediaPreferences,
|
96
82
|
})
|
97
83
|
.then((res) => {
|
98
84
|
// always it will be the first mediaConnection Object
|
@@ -408,10 +408,8 @@ export default class TurnDiscovery {
|
|
408
408
|
locusSelfUrl: meeting.selfUrl,
|
409
409
|
// @ts-ignore - Fix missing type
|
410
410
|
mediaId: isReconnecting ? '' : meeting.mediaId,
|
411
|
-
|
411
|
+
isMultistream: meeting.isMultistream,
|
412
412
|
locusMediaRequest: meeting.locusMediaRequest,
|
413
|
-
// @ts-ignore - because of meeting.webex
|
414
|
-
ipVersion: MeetingUtil.getIpVersion(meeting.webex),
|
415
413
|
})
|
416
414
|
.then(async (response) => {
|
417
415
|
const {mediaConnections} = response;
|
@@ -451,7 +449,7 @@ export default class TurnDiscovery {
|
|
451
449
|
locusSelfUrl: meeting.selfUrl,
|
452
450
|
// @ts-ignore - fix type
|
453
451
|
mediaId: meeting.mediaId,
|
454
|
-
|
452
|
+
isMultistream: meeting.isMultistream,
|
455
453
|
locusMediaRequest: meeting.locusMediaRequest,
|
456
454
|
});
|
457
455
|
}
|