@webex/plugin-meetings 3.8.1-next.9 → 3.8.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 +13 -26
- 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/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-meeting.d.ts +17 -0
- package/dist/common/errors/media.d.ts +15 -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.d.ts +60 -0
- package/dist/common/errors/reclaim-host-role-error.js +158 -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 +35 -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 +81 -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 +34 -0
- package/dist/common/queue.d.ts +32 -0
- package/dist/config.d.ts +73 -0
- package/dist/constants.d.ts +952 -0
- package/dist/constants.js +1 -8
- 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 +5 -0
- package/dist/controls-options-manager/enums.js +0 -1
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +120 -0
- package/dist/controls-options-manager/types.d.ts +43 -0
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.d.ts +7 -0
- package/dist/controls-options-manager/util.js +0 -26
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +4 -0
- 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/controlsUtils.js +3 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- 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 +269 -0
- package/dist/locus-info/index.js +0 -30
- 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 +212 -0
- package/dist/locus-info/selfUtils.d.ts +2 -0
- package/dist/media/index.d.ts +32 -0
- package/dist/media/properties.d.ts +108 -0
- package/dist/media/util.d.ts +2 -0
- package/dist/mediaQualityMetrics/config.d.ts +233 -0
- package/dist/mediaQualityMetrics/config.js +513 -0
- package/dist/mediaQualityMetrics/config.js.map +1 -0
- package/dist/meeting/brbState.js +2 -3
- package/dist/meeting/brbState.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 +79 -0
- package/dist/meeting/in-meeting-actions.js +1 -5
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +1622 -0
- package/dist/meeting/index.js +66 -88
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/muteState.d.ts +116 -0
- package/dist/meeting/request.d.ts +257 -0
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/state.d.ts +9 -0
- package/dist/meeting/util.d.ts +2 -0
- 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 +57 -0
- package/dist/meeting-info/meeting-info-v2.d.ts +93 -0
- 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/meetings/collection.d.ts +23 -0
- package/dist/meetings/index.d.ts +296 -0
- package/dist/meetings/meetings.types.d.ts +4 -0
- package/dist/meetings/request.d.ts +27 -0
- package/dist/meetings/util.d.ts +18 -0
- package/dist/member/index.d.ts +148 -0
- package/dist/member/member.types.d.ts +11 -0
- package/dist/member/member.types.js +18 -0
- package/dist/member/member.types.js.map +1 -0
- package/dist/member/types.d.ts +32 -0
- package/dist/member/util.d.ts +2 -0
- package/dist/members/collection.d.ts +24 -0
- package/dist/members/index.d.ts +308 -0
- package/dist/members/request.d.ts +58 -0
- package/dist/members/types.d.ts +25 -0
- package/dist/members/util.d.ts +2 -0
- 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 +59 -0
- package/dist/metrics/constants.js +0 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +152 -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/remoteMediaGroup.d.ts +49 -0
- package/dist/multistream/remoteMediaManager.d.ts +300 -0
- package/dist/multistream/sendSlotManager.d.ts +69 -0
- package/dist/networkQualityMonitor/index.d.ts +70 -0
- package/dist/networkQualityMonitor/index.js +226 -0
- package/dist/networkQualityMonitor/index.js.map +1 -0
- 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.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/index.d.ts +139 -0
- package/dist/reachability/index.js +10 -5
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +35 -0
- 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 +32 -0
- package/dist/reconnection-manager/index.d.ts +112 -0
- package/dist/recording-controller/enums.d.ts +7 -0
- package/dist/recording-controller/index.d.ts +193 -0
- package/dist/recording-controller/util.d.ts +13 -0
- 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 +116 -0
- package/dist/roap/request.d.ts +35 -0
- 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 +81 -0
- 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/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.d.ts +61 -0
- package/dist/rtcMetrics/index.js +197 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +118 -0
- package/dist/statsAnalyzer/global.js +127 -0
- package/dist/statsAnalyzer/global.js.map +1 -0
- package/dist/statsAnalyzer/index.d.ts +193 -0
- package/dist/statsAnalyzer/index.js +1019 -0
- package/dist/statsAnalyzer/index.js.map +1 -0
- package/dist/statsAnalyzer/mqaUtil.d.ts +22 -0
- package/dist/statsAnalyzer/mqaUtil.js +181 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -0
- package/dist/transcription/index.d.ts +64 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/constants.d.ts +0 -6
- package/dist/types/controls-options-manager/enums.d.ts +1 -2
- package/dist/types/controls-options-manager/types.d.ts +1 -4
- package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +0 -4
- package/dist/types/metrics/constants.d.ts +0 -1
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/reachability/index.d.ts +2 -2
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +71 -0
- 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 +1 -1
- package/package.json +23 -23
- package/src/constants.ts +0 -9
- package/src/controls-options-manager/enums.ts +0 -1
- package/src/controls-options-manager/types.ts +1 -6
- package/src/controls-options-manager/util.ts +0 -31
- package/src/locus-info/controlsUtils.ts +0 -15
- package/src/locus-info/index.ts +0 -41
- package/src/meeting/brbState.ts +2 -4
- package/src/meeting/in-meeting-actions.ts +0 -8
- package/src/meeting/index.ts +29 -62
- package/src/metrics/constants.ts +0 -1
- package/src/reachability/index.ts +13 -5
- package/test/unit/spec/controls-options-manager/util.js +0 -58
- package/test/unit/spec/locus-info/controlsUtils.js +0 -52
- package/test/unit/spec/locus-info/index.js +0 -42
- package/test/unit/spec/meeting/brbState.ts +2 -21
- package/test/unit/spec/meeting/in-meeting-actions.ts +0 -4
- package/test/unit/spec/meeting/index.js +27 -130
- package/test/unit/spec/reachability/index.ts +6 -2
@@ -0,0 +1,193 @@
|
|
1
|
+
import MeetingRequest from '../meeting/request';
|
2
|
+
/**
|
3
|
+
* @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting
|
4
|
+
* @export
|
5
|
+
* @private
|
6
|
+
* @class Recording
|
7
|
+
*/
|
8
|
+
export default class RecordingController {
|
9
|
+
/**
|
10
|
+
* @instance
|
11
|
+
* @type {MeetingRequest}
|
12
|
+
* @private
|
13
|
+
* @memberof RecordingController
|
14
|
+
*/
|
15
|
+
private request;
|
16
|
+
/**
|
17
|
+
* @instance
|
18
|
+
* @type {Array}
|
19
|
+
* @private
|
20
|
+
* @memberof RecordingInfo
|
21
|
+
*/
|
22
|
+
private displayHints;
|
23
|
+
/**
|
24
|
+
* @instance
|
25
|
+
* @type {string}
|
26
|
+
* @private
|
27
|
+
* @memberof RecordingInfo
|
28
|
+
*/
|
29
|
+
private serviceUrl;
|
30
|
+
/**
|
31
|
+
* @instance
|
32
|
+
* @type {string}
|
33
|
+
* @private
|
34
|
+
* @memberof RecordingInfo
|
35
|
+
*/
|
36
|
+
private sessionId;
|
37
|
+
/**
|
38
|
+
* @instance
|
39
|
+
* @type {string}
|
40
|
+
* @private
|
41
|
+
* @memberof RecordingInfo
|
42
|
+
*/
|
43
|
+
private locusUrl;
|
44
|
+
/**
|
45
|
+
* @instance
|
46
|
+
* @type {string}
|
47
|
+
* @private
|
48
|
+
* @memberof RecordingInfo
|
49
|
+
*/
|
50
|
+
private locusId;
|
51
|
+
/**
|
52
|
+
* @param {MeetingRequest} request
|
53
|
+
* @param {Object} options
|
54
|
+
* @constructor
|
55
|
+
* @memberof RecordingController
|
56
|
+
*/
|
57
|
+
constructor(request: MeetingRequest, options?: {
|
58
|
+
serviceUrl?: string;
|
59
|
+
sessionId: string;
|
60
|
+
locusUrl: string;
|
61
|
+
displayHints?: Array<string>;
|
62
|
+
});
|
63
|
+
/**
|
64
|
+
* @param {MeetingRequest} request
|
65
|
+
* @param {LocusInfo} info
|
66
|
+
* @returns {void}
|
67
|
+
* @private
|
68
|
+
* @memberof RecordingController
|
69
|
+
*/
|
70
|
+
private initialize;
|
71
|
+
/**
|
72
|
+
* @param {Object} options
|
73
|
+
* @returns {void}
|
74
|
+
* @public
|
75
|
+
* @memberof RecordingController
|
76
|
+
*/
|
77
|
+
set(options?: {
|
78
|
+
serviceUrl?: string;
|
79
|
+
sessionId: string;
|
80
|
+
locusUrl: string;
|
81
|
+
displayHints?: Array<string>;
|
82
|
+
}): void;
|
83
|
+
/**
|
84
|
+
* @param {string} url
|
85
|
+
* @returns {void}
|
86
|
+
* @public
|
87
|
+
* @memberof RecordingController
|
88
|
+
*/
|
89
|
+
setLocusUrl(url: string): void;
|
90
|
+
/**
|
91
|
+
* @param {Array} hints
|
92
|
+
* @returns {void}
|
93
|
+
* @public
|
94
|
+
* @memberof RecordingController
|
95
|
+
*/
|
96
|
+
setDisplayHints(hints: Array<string>): void;
|
97
|
+
/**
|
98
|
+
* @param {string} id
|
99
|
+
* @returns {void}
|
100
|
+
* @public
|
101
|
+
* @memberof RecordingController
|
102
|
+
*/
|
103
|
+
setSessionId(id: string): void;
|
104
|
+
/**
|
105
|
+
* @param {string} url
|
106
|
+
* @returns {void}
|
107
|
+
* @public
|
108
|
+
* @memberof RecordingController
|
109
|
+
*/
|
110
|
+
setServiceUrl(url: string): void;
|
111
|
+
/**
|
112
|
+
* @returns {string}
|
113
|
+
* @public
|
114
|
+
* @memberof RecordingController
|
115
|
+
*/
|
116
|
+
getLocusUrl(): string;
|
117
|
+
/**
|
118
|
+
* @returns {string}
|
119
|
+
* @public
|
120
|
+
* @memberof RecordingController
|
121
|
+
*/
|
122
|
+
getLocusId(): string;
|
123
|
+
/**
|
124
|
+
* @returns {string}
|
125
|
+
* @public
|
126
|
+
* @memberof RecordingController
|
127
|
+
*/
|
128
|
+
getSessionId(): string;
|
129
|
+
/**
|
130
|
+
* @returns {string}
|
131
|
+
* @public
|
132
|
+
* @memberof RecordingController
|
133
|
+
*/
|
134
|
+
getServiceUrl(): string;
|
135
|
+
/**
|
136
|
+
* @returns {Array}
|
137
|
+
* @public
|
138
|
+
* @memberof RecordingController
|
139
|
+
*/
|
140
|
+
getDisplayHints(): string[];
|
141
|
+
/**
|
142
|
+
* @param {Object} options
|
143
|
+
* @returns {void}
|
144
|
+
* @private
|
145
|
+
* @memberof RecordingController
|
146
|
+
*/
|
147
|
+
private extract;
|
148
|
+
/**
|
149
|
+
* @param {RecordingAction} action
|
150
|
+
* @private
|
151
|
+
* @memberof RecordingController
|
152
|
+
* @returns {Promise}
|
153
|
+
*/
|
154
|
+
private recordingService;
|
155
|
+
/**
|
156
|
+
* @param {RecordingAction} action
|
157
|
+
* @private
|
158
|
+
* @memberof RecordingController
|
159
|
+
* @returns {Promise}
|
160
|
+
*/
|
161
|
+
private recordingControls;
|
162
|
+
/**
|
163
|
+
* @param {RecordingAction} action
|
164
|
+
* @private
|
165
|
+
* @memberof RecordingController
|
166
|
+
* @returns {Promise}
|
167
|
+
*/
|
168
|
+
private recordingFacade;
|
169
|
+
/**
|
170
|
+
* @private
|
171
|
+
* @memberof RecordingController
|
172
|
+
* @returns {Promise}
|
173
|
+
*/
|
174
|
+
startRecording(): Promise<any>;
|
175
|
+
/**
|
176
|
+
* @private
|
177
|
+
* @memberof RecordingController
|
178
|
+
* @returns {Promise}
|
179
|
+
*/
|
180
|
+
stopRecording(): Promise<any>;
|
181
|
+
/**
|
182
|
+
* @private
|
183
|
+
* @memberof RecordingController
|
184
|
+
* @returns {Promise}
|
185
|
+
*/
|
186
|
+
pauseRecording(): Promise<any>;
|
187
|
+
/**
|
188
|
+
* @private
|
189
|
+
* @memberof RecordingController
|
190
|
+
* @returns {Promise}
|
191
|
+
*/
|
192
|
+
resumeRecording(): Promise<any>;
|
193
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import RecordingAction from './enums';
|
2
|
+
declare const _default: {
|
3
|
+
canUserStart: (displayHints: string[]) => boolean;
|
4
|
+
canUserPause: (displayHints: string[]) => boolean;
|
5
|
+
canUserResume: (displayHints: string[]) => boolean;
|
6
|
+
canUserStop: (displayHints: string[]) => boolean;
|
7
|
+
deriveRecordingStates: (action: RecordingAction) => {
|
8
|
+
recording: boolean;
|
9
|
+
paused: boolean;
|
10
|
+
};
|
11
|
+
extractLocusId: (url: string) => string;
|
12
|
+
};
|
13
|
+
export default _default;
|
@@ -0,0 +1,10 @@
|
|
1
|
+
declare const RoapCollection: {
|
2
|
+
sessions: {};
|
3
|
+
getSession(id: any): any;
|
4
|
+
deleteSession(id: any): void;
|
5
|
+
getSessionSequence(id: any, seqId: any): any;
|
6
|
+
deleteSessionSequence(id: any, seqId: any): void;
|
7
|
+
isBusy(id: any): boolean;
|
8
|
+
onSessionSequenceFinish(id: any, seqId: any): void;
|
9
|
+
};
|
10
|
+
export default RoapCollection;
|
@@ -0,0 +1,63 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.default = void 0;
|
9
|
+
var _state = _interopRequireDefault(require("./state"));
|
10
|
+
/* eslint-disable */
|
11
|
+
var RoapCollection = {
|
12
|
+
sessions: {},
|
13
|
+
getSession: function getSession(id) {
|
14
|
+
if (!this.sessions[id]) {
|
15
|
+
this.sessions[id] = {
|
16
|
+
activeSequences: 0
|
17
|
+
};
|
18
|
+
}
|
19
|
+
return this.sessions[id];
|
20
|
+
},
|
21
|
+
deleteSession: function deleteSession(id) {
|
22
|
+
if (this.getSession(id)) {
|
23
|
+
delete this.sessions[id];
|
24
|
+
}
|
25
|
+
},
|
26
|
+
getSessionSequence: function getSessionSequence(id, seqId) {
|
27
|
+
var session = this.getSession(id);
|
28
|
+
if (!session[seqId]) {
|
29
|
+
session[seqId] = {
|
30
|
+
state: _state.default.createState(),
|
31
|
+
finished: false
|
32
|
+
};
|
33
|
+
session.activeSequences += 1;
|
34
|
+
}
|
35
|
+
return session[seqId];
|
36
|
+
},
|
37
|
+
deleteSessionSequence: function deleteSessionSequence(id, seqId) {
|
38
|
+
var seq = this.getSessionSequence(id, seqId);
|
39
|
+
if (seq) {
|
40
|
+
if (!seq.finished) {
|
41
|
+
// @ts-ignore
|
42
|
+
session.activeSequences -= 1;
|
43
|
+
}
|
44
|
+
delete this.sessions[id][seqId];
|
45
|
+
}
|
46
|
+
},
|
47
|
+
isBusy: function isBusy(id) {
|
48
|
+
var session = this.getSession(id);
|
49
|
+
if (!session) return false;
|
50
|
+
return session.activeSequences > 0;
|
51
|
+
},
|
52
|
+
onSessionSequenceFinish: function onSessionSequenceFinish(id, seqId) {
|
53
|
+
var session = this.getSession(id);
|
54
|
+
var seq = session[seqId];
|
55
|
+
if (seq && !seq.finished) {
|
56
|
+
seq.finished = true;
|
57
|
+
session.activeSequences -= 1;
|
58
|
+
}
|
59
|
+
}
|
60
|
+
};
|
61
|
+
var _default = RoapCollection;
|
62
|
+
exports.default = _default;
|
63
|
+
//# sourceMappingURL=collection.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_state","_interopRequireDefault","require","RoapCollection","sessions","getSession","id","activeSequences","deleteSession","getSessionSequence","seqId","session","state","RoapStateMachine","createState","finished","deleteSessionSequence","seq","isBusy","onSessionSequenceFinish","_default","exports","default"],"sources":["collection.ts"],"sourcesContent":["import RoapStateMachine from './state';\n\n/* eslint-disable */\nconst RoapCollection = {\n sessions: {},\n\n getSession(id) {\n if (!this.sessions[id]) {\n this.sessions[id] = {\n activeSequences: 0,\n };\n }\n return this.sessions[id];\n },\n\n deleteSession(id) {\n if (this.getSession(id)) {\n delete this.sessions[id];\n }\n },\n\n getSessionSequence(id, seqId) {\n const session = this.getSession(id);\n if (!session[seqId]) {\n session[seqId] = {\n state: RoapStateMachine.createState(),\n finished: false,\n };\n session.activeSequences += 1;\n }\n return session[seqId];\n },\n\n deleteSessionSequence(id, seqId) {\n const seq = this.getSessionSequence(id, seqId);\n if (seq) {\n if (!seq.finished) {\n // @ts-ignore\n session.activeSequences -= 1;\n }\n delete this.sessions[id][seqId];\n }\n },\n\n isBusy(id) {\n const session = this.getSession(id);\n if (!session) return false;\n\n return session.activeSequences > 0;\n },\n\n onSessionSequenceFinish(id, seqId) {\n const session = this.getSession(id);\n const seq = session[seqId];\n if (seq && !seq.finished) {\n seq.finished = true;\n session.activeSequences -= 1;\n }\n },\n};\n\nexport default RoapCollection;\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA;AACA,IAAMC,cAAc,GAAG;EACrBC,QAAQ,EAAE,CAAC,CAAC;EAEZC,UAAU,WAAAA,WAACC,EAAE,EAAE;IACb,IAAI,CAAC,IAAI,CAACF,QAAQ,CAACE,EAAE,CAAC,EAAE;MACtB,IAAI,CAACF,QAAQ,CAACE,EAAE,CAAC,GAAG;QAClBC,eAAe,EAAE;MACnB,CAAC;IACH;IACA,OAAO,IAAI,CAACH,QAAQ,CAACE,EAAE,CAAC;EAC1B,CAAC;EAEDE,aAAa,WAAAA,cAACF,EAAE,EAAE;IAChB,IAAI,IAAI,CAACD,UAAU,CAACC,EAAE,CAAC,EAAE;MACvB,OAAO,IAAI,CAACF,QAAQ,CAACE,EAAE,CAAC;IAC1B;EACF,CAAC;EAEDG,kBAAkB,WAAAA,mBAACH,EAAE,EAAEI,KAAK,EAAE;IAC5B,IAAMC,OAAO,GAAG,IAAI,CAACN,UAAU,CAACC,EAAE,CAAC;IACnC,IAAI,CAACK,OAAO,CAACD,KAAK,CAAC,EAAE;MACnBC,OAAO,CAACD,KAAK,CAAC,GAAG;QACfE,KAAK,EAAEC,cAAgB,CAACC,WAAW,EAAE;QACrCC,QAAQ,EAAE;MACZ,CAAC;MACDJ,OAAO,CAACJ,eAAe,IAAI,CAAC;IAC9B;IACA,OAAOI,OAAO,CAACD,KAAK,CAAC;EACvB,CAAC;EAEDM,qBAAqB,WAAAA,sBAACV,EAAE,EAAEI,KAAK,EAAE;IAC/B,IAAMO,GAAG,GAAG,IAAI,CAACR,kBAAkB,CAACH,EAAE,EAAEI,KAAK,CAAC;IAC9C,IAAIO,GAAG,EAAE;MACP,IAAI,CAACA,GAAG,CAACF,QAAQ,EAAE;QACjB;QACAJ,OAAO,CAACJ,eAAe,IAAI,CAAC;MAC9B;MACA,OAAO,IAAI,CAACH,QAAQ,CAACE,EAAE,CAAC,CAACI,KAAK,CAAC;IACjC;EACF,CAAC;EAEDQ,MAAM,WAAAA,OAACZ,EAAE,EAAE;IACT,IAAMK,OAAO,GAAG,IAAI,CAACN,UAAU,CAACC,EAAE,CAAC;IACnC,IAAI,CAACK,OAAO,EAAE,OAAO,KAAK;IAE1B,OAAOA,OAAO,CAACJ,eAAe,GAAG,CAAC;EACpC,CAAC;EAEDY,uBAAuB,WAAAA,wBAACb,EAAE,EAAEI,KAAK,EAAE;IACjC,IAAMC,OAAO,GAAG,IAAI,CAACN,UAAU,CAACC,EAAE,CAAC;IACnC,IAAMW,GAAG,GAAGN,OAAO,CAACD,KAAK,CAAC;IAC1B,IAAIO,GAAG,IAAI,CAACA,GAAG,CAACF,QAAQ,EAAE;MACxBE,GAAG,CAACF,QAAQ,GAAG,IAAI;MACnBJ,OAAO,CAACJ,eAAe,IAAI,CAAC;IAC9B;EACF;AACF,CAAC;AAAC,IAAAa,QAAA,GAEajB,cAAc;AAAAkB,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import { StatelessWebexPlugin } from '@webex/webex-core';
|
2
|
+
import Meeting from '../meeting';
|
3
|
+
/**
|
4
|
+
* @class RoapHandler
|
5
|
+
*/
|
6
|
+
export default class RoapHandler extends StatelessWebexPlugin {
|
7
|
+
attrs: any;
|
8
|
+
lastRoapMessage: any;
|
9
|
+
options: any;
|
10
|
+
roapAnswer: any;
|
11
|
+
roapFinished: any;
|
12
|
+
roapOk: any;
|
13
|
+
constructor(attrs: any, options: any, roapOk: any, roapAnswer: any, roapFinished: any);
|
14
|
+
/**
|
15
|
+
*
|
16
|
+
* @param {Object} session
|
17
|
+
* @param {Meeting} meeting
|
18
|
+
* @param {Object} action
|
19
|
+
* @returns {null}
|
20
|
+
*/
|
21
|
+
perform(session: any, meeting: any, action: any): void;
|
22
|
+
/**
|
23
|
+
*
|
24
|
+
* @param {String} signal
|
25
|
+
* @param {Object} session
|
26
|
+
* @param {Object} action
|
27
|
+
* @param {Meeting} meeting
|
28
|
+
* @param {String} prefix
|
29
|
+
* @returns {null}
|
30
|
+
*/
|
31
|
+
execute(signal: string, session: any, action: any, meeting: Meeting, prefix: string): void;
|
32
|
+
/**
|
33
|
+
*
|
34
|
+
* @param {Object} session
|
35
|
+
* @param {Object} action
|
36
|
+
* @param {Meeting} meeting
|
37
|
+
* @param {String} correlationId
|
38
|
+
* @returns {Boolean}
|
39
|
+
*/
|
40
|
+
handleAction(session: object, action: any, meeting: Meeting, correlationId: string): boolean;
|
41
|
+
/**
|
42
|
+
*
|
43
|
+
* @param {Object} action
|
44
|
+
* @returns {Boolean}
|
45
|
+
*/
|
46
|
+
submit(action: any): boolean;
|
47
|
+
}
|
@@ -0,0 +1,279 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
4
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
5
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
6
|
+
_Object$defineProperty(exports, "__esModule", {
|
7
|
+
value: true
|
8
|
+
});
|
9
|
+
exports.default = void 0;
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
12
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
14
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
17
|
+
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
18
|
+
var _webexCore = require("@webex/webex-core");
|
19
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
20
|
+
var _constants = require("../constants");
|
21
|
+
var _metrics = _interopRequireDefault(require("../metrics"));
|
22
|
+
var _constants2 = _interopRequireDefault(require("../metrics/constants"));
|
23
|
+
var _util = _interopRequireDefault(require("./util"));
|
24
|
+
var _collection = _interopRequireDefault(require("./collection"));
|
25
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
26
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
27
|
+
var checkForAndHandleErrors = function checkForAndHandleErrors(action, meeting, correlationId) {
|
28
|
+
if (action && action.type) {
|
29
|
+
if (action.msg && action.msg.messageType && action.msg.errorType) {
|
30
|
+
if (_util.default.findError(action.msg.messageType, action.msg.errorType, action.type)) {
|
31
|
+
_util.default.handleError(meeting.mediaProperties.peerConnection).then(function (res) {
|
32
|
+
if (res) {
|
33
|
+
_collection.default.deleteSessionSequence(correlationId, action.msg.seq);
|
34
|
+
}
|
35
|
+
}).catch(function (err) {
|
36
|
+
_loggerProxy.default.logger.warn("Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ".concat(err));
|
37
|
+
});
|
38
|
+
return true;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
if (!_util.default.ensureMeeting(meeting, action.type)) {
|
42
|
+
return true;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
return false;
|
46
|
+
};
|
47
|
+
var compareWithLastRoapMessage = function compareWithLastRoapMessage(lastRoapMessage, currentRoapMessage) {
|
48
|
+
var _lastRoapMessage$msg, _lastRoapMessage$msg2;
|
49
|
+
return (lastRoapMessage === null || lastRoapMessage === void 0 ? void 0 : (_lastRoapMessage$msg = lastRoapMessage.msg) === null || _lastRoapMessage$msg === void 0 ? void 0 : _lastRoapMessage$msg.seq) === currentRoapMessage.msg.seq && (lastRoapMessage === null || lastRoapMessage === void 0 ? void 0 : (_lastRoapMessage$msg2 = lastRoapMessage.msg) === null || _lastRoapMessage$msg2 === void 0 ? void 0 : _lastRoapMessage$msg2.messageType) === currentRoapMessage.msg.messageType;
|
50
|
+
};
|
51
|
+
var handleSessionStep = function handleSessionStep(_ref) {
|
52
|
+
var roap = _ref.roap,
|
53
|
+
session = _ref.session,
|
54
|
+
locusUrl = _ref.locusUrl,
|
55
|
+
correlationId = _ref.correlationId;
|
56
|
+
var _roap$msg = roap.msg,
|
57
|
+
sequenceId = _roap$msg.seq,
|
58
|
+
messageType = _roap$msg.messageType;
|
59
|
+
if (session.OFFER && messageType === _constants._OFFER_) {
|
60
|
+
session.GLARE_OFFER = roap.msg;
|
61
|
+
session.GLARE_OFFER.remote = !!roap.remote;
|
62
|
+
var metricName = _constants2.default.ROAP_GLARE_CONDITION;
|
63
|
+
var data = {
|
64
|
+
correlation_id: correlationId,
|
65
|
+
locus_id: locusUrl.split('/').pop(),
|
66
|
+
sequence: sequenceId
|
67
|
+
};
|
68
|
+
_metrics.default.sendBehavioralMetric(metricName, data);
|
69
|
+
_loggerProxy.default.logger.warn("Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ".concat(sequenceId));
|
70
|
+
} else {
|
71
|
+
_loggerProxy.default.logger.info("Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:".concat(sequenceId, " new mercury event ").concat(messageType, "local state: ").concat((0, _stringify.default)(session.state.state, null, 2)));
|
72
|
+
session[messageType] = roap.msg;
|
73
|
+
session[messageType].remote = !!roap.remote;
|
74
|
+
}
|
75
|
+
};
|
76
|
+
|
77
|
+
/**
|
78
|
+
* @class RoapHandler
|
79
|
+
*/
|
80
|
+
var RoapHandler = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
81
|
+
(0, _inherits2.default)(RoapHandler, _StatelessWebexPlugin);
|
82
|
+
var _super = _createSuper(RoapHandler);
|
83
|
+
function RoapHandler(attrs, options, roapOk, roapAnswer, roapFinished) {
|
84
|
+
var _this;
|
85
|
+
(0, _classCallCheck2.default)(this, RoapHandler);
|
86
|
+
_this = _super.call(this, {}, options);
|
87
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "attrs", void 0);
|
88
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastRoapMessage", void 0);
|
89
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "options", void 0);
|
90
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapAnswer", void 0);
|
91
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapFinished", void 0);
|
92
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapOk", void 0);
|
93
|
+
_this.attrs = attrs;
|
94
|
+
_this.options = options;
|
95
|
+
_this.roapOk = roapOk;
|
96
|
+
_this.roapFinished = roapFinished;
|
97
|
+
_this.roapAnswer = roapAnswer;
|
98
|
+
_this.lastRoapMessage = null;
|
99
|
+
return _this;
|
100
|
+
}
|
101
|
+
|
102
|
+
/**
|
103
|
+
*
|
104
|
+
* @param {Object} session
|
105
|
+
* @param {Meeting} meeting
|
106
|
+
* @param {Object} action
|
107
|
+
* @returns {null}
|
108
|
+
*/
|
109
|
+
(0, _createClass2.default)(RoapHandler, [{
|
110
|
+
key: "perform",
|
111
|
+
value: function perform(session, meeting, action) {
|
112
|
+
var _this2 = this;
|
113
|
+
switch (session.state.state) {
|
114
|
+
case _constants.ROAP.ROAP_STATE.INIT:
|
115
|
+
this.roapFinished(meeting.correlationId, action.msg.seq);
|
116
|
+
break;
|
117
|
+
|
118
|
+
// TODO: (important )handle roap state for sending offers as well
|
119
|
+
// case ROAP.ROAP_STATE.WAIT_RX_OFFER:
|
120
|
+
// case ROAP.ROAP_STATE.WAIT_RX_ANSWER:
|
121
|
+
// case ROAP.ROAP_STATE.WAIT_RX_OK:
|
122
|
+
case _constants.ROAP.ROAP_STATE.WAIT_TX_ANSWER:
|
123
|
+
// eslint-disable-next-line no-warning-comments
|
124
|
+
// TODO: sometime the you get an answer while you are creating an offer so SKIP
|
125
|
+
// Server will send the mercury event comes back
|
126
|
+
if (_util.default.shouldHandleMedia(meeting)) {
|
127
|
+
_util.default.updatePeerConnection(meeting, session).then(function (answerSdps) {
|
128
|
+
_this2.roapAnswer({
|
129
|
+
mediaId: meeting.mediaId,
|
130
|
+
sdps: answerSdps,
|
131
|
+
seq: session.OFFER.seq,
|
132
|
+
correlationId: meeting.correlationId,
|
133
|
+
audioMuted: meeting.isAudioMuted(),
|
134
|
+
videoMuted: meeting.isVideoMuted()
|
135
|
+
});
|
136
|
+
}).catch(function (error) {
|
137
|
+
var metricName = _constants2.default.ROAP_ANSWER_FAILURE;
|
138
|
+
var data = {
|
139
|
+
correlation_id: meeting.correlationId,
|
140
|
+
locus_id: meeting.locusUrl.split('/').pop(),
|
141
|
+
reason: error.message,
|
142
|
+
stack: error.stack
|
143
|
+
};
|
144
|
+
var metadata = {
|
145
|
+
type: error.name
|
146
|
+
};
|
147
|
+
_metrics.default.sendBehavioralMetric(metricName, data, metadata);
|
148
|
+
_loggerProxy.default.logger.error("Roap:handler#perform --> Error occured during wait receive answer, continuing, ".concat(error));
|
149
|
+
});
|
150
|
+
}
|
151
|
+
break;
|
152
|
+
case _constants.ROAP.ROAP_STATE.WAIT_TX_OK:
|
153
|
+
if (!_util.default.shouldHandleMedia(meeting)) {
|
154
|
+
_util.default.setRemoteDescription(meeting, session).then(function (res) {
|
155
|
+
_this2.roapOk(res);
|
156
|
+
});
|
157
|
+
}
|
158
|
+
break;
|
159
|
+
// case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:
|
160
|
+
case _constants.ROAP.ROAP_STATE.ERROR:
|
161
|
+
_loggerProxy.default.logger.error("Roap:handler#perform --> Roap State ERROR for session: ".concat(session));
|
162
|
+
break;
|
163
|
+
case _constants.ROAP.ROAP_STATE.GLARE:
|
164
|
+
session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;
|
165
|
+
session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;
|
166
|
+
_loggerProxy.default.logger.warn('Roap:handler#perform --> Roap State resolved the GLARE condition.');
|
167
|
+
if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {
|
168
|
+
// 2
|
169
|
+
_loggerProxy.default.logger.log('Roap:handler#perform --> Roap State local offer won after GLARE.');
|
170
|
+
} else {
|
171
|
+
_loggerProxy.default.logger.log('Roap:handler#perform --> Roap State remote offer won after GLARE.');
|
172
|
+
}
|
173
|
+
session.state.step(_constants.ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);
|
174
|
+
// @ts-ignore
|
175
|
+
this.perform(session, meeting);
|
176
|
+
break;
|
177
|
+
default:
|
178
|
+
break;
|
179
|
+
}
|
180
|
+
}
|
181
|
+
|
182
|
+
/**
|
183
|
+
*
|
184
|
+
* @param {String} signal
|
185
|
+
* @param {Object} session
|
186
|
+
* @param {Object} action
|
187
|
+
* @param {Meeting} meeting
|
188
|
+
* @param {String} prefix
|
189
|
+
* @returns {null}
|
190
|
+
*/
|
191
|
+
}, {
|
192
|
+
key: "execute",
|
193
|
+
value: function execute(signal, session, action, meeting, prefix) {
|
194
|
+
if (session && session.state) {
|
195
|
+
handleSessionStep({
|
196
|
+
roap: action,
|
197
|
+
locusUrl: meeting.locusUrl,
|
198
|
+
correlationId: meeting.correlationId,
|
199
|
+
session: session
|
200
|
+
});
|
201
|
+
signal = _constants.ROAP.ROAP_SIGNAL["".concat(prefix).concat(action.msg.messageType)];
|
202
|
+
session.state.step(signal, meeting, action);
|
203
|
+
this.perform(session, meeting, action);
|
204
|
+
}
|
205
|
+
}
|
206
|
+
|
207
|
+
/**
|
208
|
+
*
|
209
|
+
* @param {Object} session
|
210
|
+
* @param {Object} action
|
211
|
+
* @param {Meeting} meeting
|
212
|
+
* @param {String} correlationId
|
213
|
+
* @returns {Boolean}
|
214
|
+
*/
|
215
|
+
}, {
|
216
|
+
key: "handleAction",
|
217
|
+
value: function handleAction(session, action, meeting, correlationId) {
|
218
|
+
var signal;
|
219
|
+
switch (action.type) {
|
220
|
+
case _constants.ROAP.RECEIVE_ROAP_MSG:
|
221
|
+
_loggerProxy.default.logger.log("Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ".concat((0, _stringify.default)(action)));
|
222
|
+
if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {
|
223
|
+
_loggerProxy.default.logger.warn("Roap:handler#handleAction --> duplicate roap offer from server: ".concat(action.msg.seq));
|
224
|
+
} else {
|
225
|
+
this.lastRoapMessage = action;
|
226
|
+
action.remote = true;
|
227
|
+
this.execute(signal, session, action, meeting, _constants.ROAP.RX_);
|
228
|
+
}
|
229
|
+
break;
|
230
|
+
case _constants.ROAP.SEND_ROAP_MSG:
|
231
|
+
_loggerProxy.default.logger.log("Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ".concat((0, _stringify.default)(action)));
|
232
|
+
action.local = true;
|
233
|
+
this.execute(signal, session, action, meeting, _constants.ROAP.TX_);
|
234
|
+
break;
|
235
|
+
case _constants.ROAP.SEND_ROAP_MSG_SUCCESS:
|
236
|
+
// NOTE: When server send back an answer via mercury the
|
237
|
+
// remote SDP is already saved sent and ok message is sent back
|
238
|
+
// We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS
|
239
|
+
break;
|
240
|
+
case _constants.ROAP.RECEIVE_CALL_LEAVE:
|
241
|
+
_collection.default.deleteSession(correlationId);
|
242
|
+
_loggerProxy.default.logger.log("Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ".concat(correlationId));
|
243
|
+
break;
|
244
|
+
case _constants.ROAP.RESET_ROAP_STATE:
|
245
|
+
_collection.default.deleteSessionSequence(correlationId, action.msg.seq);
|
246
|
+
_loggerProxy.default.logger.log("Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ".concat(action.msg.seq));
|
247
|
+
break;
|
248
|
+
default:
|
249
|
+
return true;
|
250
|
+
}
|
251
|
+
return true;
|
252
|
+
}
|
253
|
+
|
254
|
+
/**
|
255
|
+
*
|
256
|
+
* @param {Object} action
|
257
|
+
* @returns {Boolean}
|
258
|
+
*/
|
259
|
+
}, {
|
260
|
+
key: "submit",
|
261
|
+
value: function submit(action) {
|
262
|
+
var correlationId = action.correlationId;
|
263
|
+
var seq = action.seq;
|
264
|
+
if (!seq && action.msg) {
|
265
|
+
seq = action.msg.seq;
|
266
|
+
}
|
267
|
+
var session = _collection.default.getSessionSequence(correlationId, seq);
|
268
|
+
// @ts-ignore
|
269
|
+
var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);
|
270
|
+
if (checkForAndHandleErrors(action, meeting, correlationId)) {
|
271
|
+
return true;
|
272
|
+
}
|
273
|
+
return this.handleAction(session, action, meeting, correlationId);
|
274
|
+
}
|
275
|
+
}]);
|
276
|
+
return RoapHandler;
|
277
|
+
}(_webexCore.StatelessWebexPlugin);
|
278
|
+
exports.default = RoapHandler;
|
279
|
+
//# sourceMappingURL=handler.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_loggerProxy","_interopRequireDefault","_constants","_metrics","_constants2","_util","_collection","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","checkForAndHandleErrors","action","meeting","correlationId","type","msg","messageType","errorType","RoapUtil","findError","handleError","mediaProperties","peerConnection","then","res","RoapCollection","deleteSessionSequence","seq","catch","err","LoggerProxy","logger","warn","concat","ensureMeeting","compareWithLastRoapMessage","lastRoapMessage","currentRoapMessage","_lastRoapMessage$msg","_lastRoapMessage$msg2","handleSessionStep","_ref","roap","session","locusUrl","_roap$msg","sequenceId","OFFER","_OFFER_","GLARE_OFFER","remote","metricName","BEHAVIORAL_METRICS","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendBehavioralMetric","info","_stringify","state","RoapHandler","_StatelessWebexPlugin","_inherits2","_super","attrs","options","roapOk","roapAnswer","roapFinished","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","_createClass2","key","value","perform","_this2","ROAP","ROAP_STATE","INIT","WAIT_TX_ANSWER","shouldHandleMedia","updatePeerConnection","answerSdps","mediaId","sdps","audioMuted","isAudioMuted","videoMuted","isVideoMuted","error","ROAP_ANSWER_FAILURE","reason","message","stack","metadata","name","WAIT_TX_OK","setRemoteDescription","ERROR","GLARE","tieBreaker","log","step","ROAP_SIGNAL","GLARE_RESOLVED","execute","signal","prefix","handleAction","RECEIVE_ROAP_MSG","RX_","SEND_ROAP_MSG","local","TX_","SEND_ROAP_MSG_SUCCESS","RECEIVE_CALL_LEAVE","deleteSession","RESET_ROAP_STATE","submit","getSessionSequence","webex","meetings","meetingCollection","getByKey","StatelessWebexPlugin","exports"],"sources":["handler.ts"],"sourcesContent":["/* no-param-reassign */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_} from '../constants';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nimport RoapUtil from './util';\nimport RoapCollection from './collection';\nimport Meeting from '../meeting';\n\nconst checkForAndHandleErrors = (action, meeting, correlationId) => {\n if (action && action.type) {\n if (action.msg && action.msg.messageType && action.msg.errorType) {\n if (RoapUtil.findError(action.msg.messageType, action.msg.errorType, action.type)) {\n RoapUtil.handleError(meeting.mediaProperties.peerConnection)\n .then((res) => {\n if (res) {\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.warn(\n `Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ${err}`\n );\n });\n\n return true;\n }\n }\n if (!RoapUtil.ensureMeeting(meeting, action.type)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst compareWithLastRoapMessage = (lastRoapMessage, currentRoapMessage) =>\n lastRoapMessage?.msg?.seq === currentRoapMessage.msg.seq &&\n lastRoapMessage?.msg?.messageType === currentRoapMessage.msg.messageType;\n\nconst handleSessionStep = ({roap, session, locusUrl, correlationId}) => {\n const {seq: sequenceId, messageType} = roap.msg;\n\n if (session.OFFER && messageType === _OFFER_) {\n session.GLARE_OFFER = roap.msg;\n session.GLARE_OFFER.remote = !!roap.remote;\n const metricName = BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId,\n };\n\n Metrics.sendBehavioralMetric(metricName, data);\n\n LoggerProxy.logger.warn(\n `Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ${sequenceId}`\n );\n } else {\n LoggerProxy.logger.info(\n `Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:${sequenceId} new mercury event ${messageType}local state: ${JSON.stringify(\n session.state.state,\n null,\n 2\n )}`\n );\n session[messageType] = roap.msg;\n session[messageType].remote = !!roap.remote;\n }\n};\n\n/**\n * @class RoapHandler\n */\nexport default class RoapHandler extends StatelessWebexPlugin {\n attrs: any;\n lastRoapMessage: any;\n options: any;\n roapAnswer: any;\n roapFinished: any;\n roapOk: any;\n\n constructor(attrs, options, roapOk, roapAnswer, roapFinished) {\n super({}, options);\n this.attrs = attrs;\n this.options = options;\n this.roapOk = roapOk;\n this.roapFinished = roapFinished;\n this.roapAnswer = roapAnswer;\n this.lastRoapMessage = null;\n }\n\n /**\n *\n * @param {Object} session\n * @param {Meeting} meeting\n * @param {Object} action\n * @returns {null}\n */\n perform(session: any, meeting: any, action: any) {\n switch (session.state.state) {\n case ROAP.ROAP_STATE.INIT:\n this.roapFinished(meeting.correlationId, action.msg.seq);\n break;\n\n // TODO: (important )handle roap state for sending offers as well\n // case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n // case ROAP.ROAP_STATE.WAIT_RX_OK:\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n // eslint-disable-next-line no-warning-comments\n // TODO: sometime the you get an answer while you are creating an offer so SKIP\n // Server will send the mercury event comes back\n if (RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.updatePeerConnection(meeting, session)\n .then((answerSdps) => {\n this.roapAnswer({\n mediaId: meeting.mediaId,\n sdps: answerSdps,\n seq: session.OFFER.seq,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n });\n })\n .catch((error) => {\n const metricName = BEHAVIORAL_METRICS.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n };\n const metadata = {\n type: error.name,\n };\n\n Metrics.sendBehavioralMetric(metricName, data, metadata);\n LoggerProxy.logger.error(\n `Roap:handler#perform --> Error occured during wait receive answer, continuing, ${error}`\n );\n });\n }\n break;\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (!RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.setRemoteDescription(meeting, session).then((res) => {\n this.roapOk(res);\n });\n }\n break;\n // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:\n case ROAP.ROAP_STATE.ERROR:\n LoggerProxy.logger.error(\n `Roap:handler#perform --> Roap State ERROR for session: ${session}`\n );\n break;\n case ROAP.ROAP_STATE.GLARE:\n session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;\n session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;\n LoggerProxy.logger.warn(\n 'Roap:handler#perform --> Roap State resolved the GLARE condition.'\n );\n if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {\n // 2\n LoggerProxy.logger.log(\n 'Roap:handler#perform --> Roap State local offer won after GLARE.'\n );\n } else {\n LoggerProxy.logger.log(\n 'Roap:handler#perform --> Roap State remote offer won after GLARE.'\n );\n }\n session.state.step(ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);\n // @ts-ignore\n this.perform(session, meeting);\n break;\n default:\n break;\n }\n }\n\n /**\n *\n * @param {String} signal\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} prefix\n * @returns {null}\n */\n execute(signal: string, session: any, action: any, meeting: Meeting, prefix: string) {\n if (session && session.state) {\n handleSessionStep({\n roap: action,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n session,\n });\n signal = ROAP.ROAP_SIGNAL[`${prefix}${action.msg.messageType}`];\n session.state.step(signal, meeting, action);\n this.perform(session, meeting, action);\n }\n }\n\n /**\n *\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} correlationId\n * @returns {Boolean}\n */\n handleAction(session: object, action: any, meeting: Meeting, correlationId: string) {\n let signal;\n\n switch (action.type) {\n case ROAP.RECEIVE_ROAP_MSG:\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ${JSON.stringify(\n action\n )}`\n );\n if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {\n LoggerProxy.logger.warn(\n `Roap:handler#handleAction --> duplicate roap offer from server: ${action.msg.seq}`\n );\n } else {\n this.lastRoapMessage = action;\n action.remote = true;\n this.execute(signal, session, action, meeting, ROAP.RX_);\n }\n break;\n case ROAP.SEND_ROAP_MSG:\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ${JSON.stringify(\n action\n )}`\n );\n\n action.local = true;\n this.execute(signal, session, action, meeting, ROAP.TX_);\n break;\n case ROAP.SEND_ROAP_MSG_SUCCESS:\n // NOTE: When server send back an answer via mercury the\n // remote SDP is already saved sent and ok message is sent back\n // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS\n break;\n case ROAP.RECEIVE_CALL_LEAVE:\n RoapCollection.deleteSession(correlationId);\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ${correlationId}`\n );\n break;\n case ROAP.RESET_ROAP_STATE:\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ${action.msg.seq}`\n );\n break;\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n *\n * @param {Object} action\n * @returns {Boolean}\n */\n submit(action: any) {\n const {correlationId} = action;\n let {seq} = action;\n\n if (!seq && action.msg) {\n seq = action.msg.seq;\n }\n const session = RoapCollection.getSessionSequence(correlationId, seq);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n if (checkForAndHandleErrors(action, meeting, correlationId)) {\n return true;\n }\n\n return this.handleAction(session, action, meeting, correlationId);\n }\n}\n"],"mappings":"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"}
|