@webex/plugin-meetings 2.59.6-next.2 → 2.59.7
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/common/browser-detection.d.ts +9 -0
- package/dist/common/browser-detection.js +2 -2
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.d.ts +48 -0
- package/dist/common/collection.js +2 -2
- package/dist/common/collection.js.map +1 -1
- 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/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/reconnection-in-progress.d.ts +9 -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/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +926 -0
- package/dist/constants.js +2 -0
- 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/index.d.ts +120 -0
- package/dist/controls-options-manager/index.js +2 -2
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.d.ts +7 -0
- package/dist/index.d.ts +4 -0
- package/dist/locus-info/controlsUtils.d.ts +2 -0
- package/dist/locus-info/controlsUtils.js +6 -6
- 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 +18 -18
- 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/parser.js +2 -2
- package/dist/locus-info/parser.js.map +1 -1
- 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/meeting/effectsState.d.ts +42 -0
- package/dist/meeting/in-meeting-actions.d.ts +79 -0
- package/dist/meeting/index.d.ts +1622 -0
- package/dist/meeting/index.js +51 -28
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.d.ts +116 -0
- package/dist/meeting/request.d.ts +255 -0
- package/dist/meeting/request.js +2 -2
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.d.ts +9 -0
- package/dist/meeting/util.d.ts +2 -0
- package/dist/meeting/util.js +4 -4
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.d.ts +20 -0
- package/dist/meeting-info/collection.js +2 -2
- package/dist/meeting-info/collection.js.map +1 -1
- 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/collection.js +2 -2
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.d.ts +296 -0
- package/dist/meetings/request.d.ts +27 -0
- package/dist/meetings/util.d.ts +18 -0
- package/dist/member/index.d.ts +147 -0
- package/dist/member/member.types.d.ts +11 -0
- package/dist/member/util.d.ts +2 -0
- package/dist/members/collection.d.ts +24 -0
- package/dist/members/index.d.ts +298 -0
- package/dist/members/index.js +2 -2
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.d.ts +50 -0
- package/dist/members/util.d.ts +2 -0
- package/dist/metrics/config.d.ts +169 -0
- package/dist/metrics/constants.d.ts +59 -0
- package/dist/metrics/constants.js +2 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +152 -0
- package/dist/metrics/index.js +2 -2
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.d.ts +70 -0
- package/dist/peer-connection-manager/index.d.ts +6 -0
- package/dist/peer-connection-manager/util.d.ts +6 -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/index.d.ts +139 -0
- package/dist/reachability/index.js +2 -9
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +35 -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/handler.d.ts +47 -0
- package/dist/roap/index.d.ts +116 -0
- package/dist/roap/index.js +13 -12
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +35 -0
- package/dist/roap/state.d.ts +9 -0
- package/dist/roap/turnDiscovery.d.ts +81 -0
- package/dist/roap/turnDiscovery.js +130 -44
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.d.ts +2 -0
- package/dist/statsAnalyzer/global.d.ts +118 -0
- package/dist/statsAnalyzer/global.js +4 -12
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +193 -0
- package/dist/statsAnalyzer/index.js +56 -14
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +22 -0
- package/dist/statsAnalyzer/mqaUtil.js +15 -15
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.d.ts +64 -0
- package/package.json +21 -22
- package/src/config.ts +2 -2
- package/src/constants.ts +2 -0
- package/src/meeting/index.ts +35 -0
- package/src/metrics/constants.ts +2 -0
- package/src/roap/index.ts +14 -10
- package/src/roap/turnDiscovery.ts +48 -20
- package/src/statsAnalyzer/global.ts +2 -10
- package/src/statsAnalyzer/index.ts +80 -17
- package/test/unit/spec/meeting/index.js +77 -6
- package/test/unit/spec/roap/index.ts +84 -80
- package/test/unit/spec/roap/turnDiscovery.ts +21 -0
- package/test/unit/spec/stats-analyzer/index.js +151 -0
|
@@ -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,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,116 @@
|
|
|
1
|
+
import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
2
|
+
import Meeting from '../meeting';
|
|
3
|
+
/**
|
|
4
|
+
* Roap options
|
|
5
|
+
* @typedef {Object} RoapOptions
|
|
6
|
+
* @property {String} sdp
|
|
7
|
+
* @property {Meeting} meeting
|
|
8
|
+
* @property {Number} roapSeq
|
|
9
|
+
* @property {Boolean} reconnect
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {Object} SeqOptions
|
|
13
|
+
* @property {String} correlationId
|
|
14
|
+
* @property {String} mediaId
|
|
15
|
+
* @property {Number} seq
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* @class Roap
|
|
19
|
+
* @export
|
|
20
|
+
* @private
|
|
21
|
+
*/
|
|
22
|
+
export default class Roap extends StatelessWebexPlugin {
|
|
23
|
+
attrs: any;
|
|
24
|
+
lastRoapOffer: any;
|
|
25
|
+
options: any;
|
|
26
|
+
roapHandler: any;
|
|
27
|
+
roapRequest: any;
|
|
28
|
+
turnDiscovery: any;
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
* @param {Object} attrs
|
|
32
|
+
* @param {Object} options
|
|
33
|
+
*/
|
|
34
|
+
constructor(attrs: any, options: any);
|
|
35
|
+
/**
|
|
36
|
+
* Starts listening to mercury events for Roap messages
|
|
37
|
+
* @param {object} data event object
|
|
38
|
+
* @returns {Promise}
|
|
39
|
+
* @private
|
|
40
|
+
* @memberof Roap
|
|
41
|
+
*/
|
|
42
|
+
private roapEvent;
|
|
43
|
+
/**
|
|
44
|
+
*
|
|
45
|
+
* @param {String} correlationId correlation id of a meeting
|
|
46
|
+
* @param {Number} seq ROAP sequence number
|
|
47
|
+
* @returns {Promise}
|
|
48
|
+
* @private
|
|
49
|
+
* @memberof Roap
|
|
50
|
+
*/
|
|
51
|
+
private stop;
|
|
52
|
+
/**
|
|
53
|
+
*
|
|
54
|
+
* @param {SeqOptions} options
|
|
55
|
+
* @returns {null}
|
|
56
|
+
* @private
|
|
57
|
+
* @memberof Roap
|
|
58
|
+
*/
|
|
59
|
+
private sendRoapOK;
|
|
60
|
+
/**
|
|
61
|
+
* Sends a ROAP answer...
|
|
62
|
+
* @param {SeqOptions} options
|
|
63
|
+
* @param {Boolean} options.audioMuted
|
|
64
|
+
* @param {Boolean} options.videoMuted
|
|
65
|
+
* @returns {Promise}
|
|
66
|
+
* @private
|
|
67
|
+
* @memberof Roap
|
|
68
|
+
*/
|
|
69
|
+
private sendRoapAnswer;
|
|
70
|
+
/**
|
|
71
|
+
* Sends a ROAP error...
|
|
72
|
+
* @param {Object} session
|
|
73
|
+
* @param {Object} locus
|
|
74
|
+
* @param {String} errorType
|
|
75
|
+
* @returns {Promise}
|
|
76
|
+
* @private
|
|
77
|
+
* @memberof Roap
|
|
78
|
+
*/
|
|
79
|
+
private sendRoapError;
|
|
80
|
+
/**
|
|
81
|
+
* sends a roap media request
|
|
82
|
+
* @param {RoapOptions} options
|
|
83
|
+
* @returns {Promise}
|
|
84
|
+
* @private
|
|
85
|
+
* @memberof Roap
|
|
86
|
+
*/
|
|
87
|
+
sendRoapMediaRequest(options: any): any;
|
|
88
|
+
/**
|
|
89
|
+
* sends a roap media request
|
|
90
|
+
* @param {RoapOptions} options
|
|
91
|
+
* @returns {Promise}
|
|
92
|
+
* @private
|
|
93
|
+
* @memberof Roap
|
|
94
|
+
*/
|
|
95
|
+
sendRoapCallRequest: (options: any) => any;
|
|
96
|
+
/**
|
|
97
|
+
* Called when the roap sequence is finished (completed successfully or failed)
|
|
98
|
+
* @param {String} correlationId id of the meeting affected
|
|
99
|
+
* @param {String} sequenceId the id of the finished sequence
|
|
100
|
+
* @returns {undefined}
|
|
101
|
+
* @private
|
|
102
|
+
* @memberof Roap
|
|
103
|
+
*/
|
|
104
|
+
private roapFinished;
|
|
105
|
+
/**
|
|
106
|
+
* Performs a TURN server discovery procedure, which involves exchanging
|
|
107
|
+
* some roap messages with the server. This exchange has to be done before
|
|
108
|
+
* any other roap messages are sent
|
|
109
|
+
*
|
|
110
|
+
* @param {Meeting} meeting
|
|
111
|
+
* @param {Boolean} isReconnecting should be set to true if this is a new
|
|
112
|
+
* media connection just after a reconnection
|
|
113
|
+
* @returns {Promise}
|
|
114
|
+
*/
|
|
115
|
+
doTurnDiscovery(meeting: Meeting, isReconnecting: boolean): any;
|
|
116
|
+
}
|
package/dist/roap/index.js
CHANGED
|
@@ -326,9 +326,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
326
326
|
}, {
|
|
327
327
|
key: "sendRoapMediaRequest",
|
|
328
328
|
value: function sendRoapMediaRequest(options) {
|
|
329
|
-
var
|
|
330
|
-
_meeting$video4,
|
|
331
|
-
_this4 = this;
|
|
329
|
+
var _this4 = this;
|
|
332
330
|
var meeting = options.meeting,
|
|
333
331
|
reconnect = options.reconnect;
|
|
334
332
|
var roapMessage = {
|
|
@@ -349,15 +347,18 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
349
347
|
// When reconnecting, it's important that the first roap message being sent out has empty media id.
|
|
350
348
|
// Normally this is the roap offer, but when TURN discovery is enabled,
|
|
351
349
|
// then this is the TURN discovery request message
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
350
|
+
return this.turnDiscovery.isSkipped(meeting).then(function (isTurnDiscoverySkipped) {
|
|
351
|
+
var _meeting$audio4, _meeting$video4;
|
|
352
|
+
var sendEmptyMediaId = reconnect && isTurnDiscoverySkipped;
|
|
353
|
+
return _this4.roapRequest.sendRoap({
|
|
354
|
+
roapMessage: roapMessage,
|
|
355
|
+
correlationId: meeting.correlationId,
|
|
356
|
+
locusSelfUrl: meeting.selfUrl,
|
|
357
|
+
mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
|
|
358
|
+
audioMuted: (_meeting$audio4 = meeting.audio) === null || _meeting$audio4 === void 0 ? void 0 : _meeting$audio4.isLocallyMuted(),
|
|
359
|
+
videoMuted: (_meeting$video4 = meeting.video) === null || _meeting$video4 === void 0 ? void 0 : _meeting$video4.isLocallyMuted(),
|
|
360
|
+
meetingId: meeting.id
|
|
361
|
+
});
|
|
361
362
|
}).then(function (_ref) {
|
|
362
363
|
var locus = _ref.locus,
|
|
363
364
|
mediaConnections = _ref.mediaConnections;
|
package/dist/roap/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_constants","_loggerProxy","_interopRequireDefault","_util","_handler","_request","_collection","_turnDiscovery","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Roap","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","_meeting$audio","_meeting$video","meeting","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","sdps","sdp","version","ROAP_VERSION","seq","roapSeq","_isNan","_parseFloat2","tieBreaker","roapHandler","submit","type","SEND_ROAP_MSG","msg","correlationId","roapBody","localMedias","localSdp","_stringify","roapRequest","attachRechabilityData","audioMuted","audio","isLocallyMuted","videoMuted","video","MeetingUtil","joinMeetingOptions","then","locus","SEND_ROAP_MSG_SUCCESS","setRoapSeq","RoapHandler","sendRoapOK","bind","sendRoapAnswer","roapFinished","RoapRequest","lastRoapOffer","turnDiscovery","TurnDiscovery","_createClass2","key","value","roapEvent","data","message","LoggerProxy","logger","log","concat","TURN_DISCOVERY_RESPONSE","handleTurnDiscoveryResponse","RECEIVE_ROAP_MSG","stop","RECEIVE_CALL_LEAVE","_promise","resolve","_this2","_meeting$audio2","_meeting$video2","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","_meeting$audio3","_meeting$video3","_this3","ANSWER","sendRoapError","session","errorType","ERROR","sendRoapMediaRequest","_meeting$audio4","_meeting$video4","_this4","reconnect","sendEmptyMediaId","config","experimental","enableTurnDiscovery","_ref","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","doTurnDiscovery","isReconnecting","StatelessWebexPlugin","exports"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(\n this.attrs,\n this.options,\n this.sendRoapOK.bind(this),\n this.sendRoapAnswer.bind(this),\n this.roapFinished.bind(this)\n );\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private roapEvent(data: any) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(\n `Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`\n );\n\n if (msg.messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n // turn discovery is not part of normal roap protocol and so we are not handling it\n // through the usual roap state machine\n this.turnDiscovery.handleTurnDiscoveryResponse(msg);\n } else {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId,\n });\n }\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private stop(correlationId: string, seq: number) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId,\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n private sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId,\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId,\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapError(session: any, locus: object, errorType: string) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq,\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : options.roapSeq + 1,\n tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId,\n });\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n })\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapCallRequest = (options: any) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : options.roapSeq + 1,\n tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId,\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(\n this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n })\n ),\n // mediaId: meeting.mediaId\n },\n ],\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody}).then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n };\n\n /**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\n private roapFinished(correlationId: string, sequenceId: string) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_constants","_loggerProxy","_interopRequireDefault","_util","_handler","_request","_collection","_turnDiscovery","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Roap","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","_meeting$audio","_meeting$video","meeting","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","sdps","sdp","version","ROAP_VERSION","seq","roapSeq","_isNan","_parseFloat2","tieBreaker","roapHandler","submit","type","SEND_ROAP_MSG","msg","correlationId","roapBody","localMedias","localSdp","_stringify","roapRequest","attachRechabilityData","audioMuted","audio","isLocallyMuted","videoMuted","video","MeetingUtil","joinMeetingOptions","then","locus","SEND_ROAP_MSG_SUCCESS","setRoapSeq","RoapHandler","sendRoapOK","bind","sendRoapAnswer","roapFinished","RoapRequest","lastRoapOffer","turnDiscovery","TurnDiscovery","_createClass2","key","value","roapEvent","data","message","LoggerProxy","logger","log","concat","TURN_DISCOVERY_RESPONSE","handleTurnDiscoveryResponse","RECEIVE_ROAP_MSG","stop","RECEIVE_CALL_LEAVE","_promise","resolve","_this2","_meeting$audio2","_meeting$video2","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","_meeting$audio3","_meeting$video3","_this3","ANSWER","sendRoapError","session","errorType","ERROR","sendRoapMediaRequest","_this4","reconnect","isSkipped","isTurnDiscoverySkipped","_meeting$audio4","_meeting$video4","sendEmptyMediaId","_ref","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","doTurnDiscovery","isReconnecting","StatelessWebexPlugin","exports"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(\n this.attrs,\n this.options,\n this.sendRoapOK.bind(this),\n this.sendRoapAnswer.bind(this),\n this.roapFinished.bind(this)\n );\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private roapEvent(data: any) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(\n `Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`\n );\n\n if (msg.messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n // turn discovery is not part of normal roap protocol and so we are not handling it\n // through the usual roap state machine\n this.turnDiscovery.handleTurnDiscoveryResponse(msg);\n } else {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId,\n });\n }\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private stop(correlationId: string, seq: number) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId,\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n private sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId,\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId,\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapError(session: any, locus: object, errorType: string) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq,\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : options.roapSeq + 1,\n tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId,\n });\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n return this.turnDiscovery\n .isSkipped(meeting)\n .then((isTurnDiscoverySkipped) => {\n const sendEmptyMediaId = reconnect && isTurnDiscoverySkipped;\n\n return this.roapRequest.sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n });\n })\n\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapCallRequest = (options: any) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : options.roapSeq + 1,\n tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId,\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(\n this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n })\n ),\n // mediaId: meeting.mediaId\n },\n ],\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody}).then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n };\n\n /**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\n private roapFinished(correlationId: string, sequenceId: string) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
2
|
+
/**
|
|
3
|
+
* @class RoapRequest
|
|
4
|
+
*/
|
|
5
|
+
export default class RoapRequest extends StatelessWebexPlugin {
|
|
6
|
+
/**
|
|
7
|
+
* Joins a meeting via ROAP
|
|
8
|
+
* @param {Object} options
|
|
9
|
+
* @returns {Promise} returns a promise that resolves/rejects whatever the request does
|
|
10
|
+
*/
|
|
11
|
+
attachRechabilityData(localSdp: any): any;
|
|
12
|
+
joinMeetingWithRoap(options: any): Promise<any>;
|
|
13
|
+
/**
|
|
14
|
+
* Sends a ROAP message
|
|
15
|
+
* @param {Object} options
|
|
16
|
+
* @param {Object} options.roapMessage
|
|
17
|
+
* @param {String} options.locusSelfUrl
|
|
18
|
+
* @param {String} options.mediaId
|
|
19
|
+
* @param {String} options.correlationId
|
|
20
|
+
* @param {Boolean} options.audioMuted
|
|
21
|
+
* @param {Boolean} options.videoMuted
|
|
22
|
+
* @param {String} options.meetingId
|
|
23
|
+
* @returns {Promise} returns the response/failure of the request
|
|
24
|
+
*/
|
|
25
|
+
sendRoap(options: {
|
|
26
|
+
roapMessage: any;
|
|
27
|
+
locusSelfUrl: string;
|
|
28
|
+
mediaId: string;
|
|
29
|
+
correlationId: string;
|
|
30
|
+
audioMuted: boolean;
|
|
31
|
+
videoMuted: boolean;
|
|
32
|
+
meetingId: string;
|
|
33
|
+
preferTranscoding?: boolean;
|
|
34
|
+
}): any;
|
|
35
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import RoapRequest from './request';
|
|
2
|
+
import Meeting from '../meeting';
|
|
3
|
+
/**
|
|
4
|
+
* Handles the process of finding out TURN server information from Linus.
|
|
5
|
+
* This is achieved by sending a TURN_DISCOVERY_REQUEST.
|
|
6
|
+
*/
|
|
7
|
+
export default class TurnDiscovery {
|
|
8
|
+
private roapRequest;
|
|
9
|
+
private defer?;
|
|
10
|
+
private turnInfo;
|
|
11
|
+
private responseTimer?;
|
|
12
|
+
/**
|
|
13
|
+
* Constructor
|
|
14
|
+
*
|
|
15
|
+
* @param {RoapRequest} roapRequest
|
|
16
|
+
*/
|
|
17
|
+
constructor(roapRequest: RoapRequest);
|
|
18
|
+
/**
|
|
19
|
+
* waits for TURN_DISCOVERY_RESPONSE message to arrive
|
|
20
|
+
*
|
|
21
|
+
* @returns {Promise}
|
|
22
|
+
* @private
|
|
23
|
+
* @memberof Roap
|
|
24
|
+
*/
|
|
25
|
+
private waitForTurnDiscoveryResponse;
|
|
26
|
+
/**
|
|
27
|
+
* handles TURN_DISCOVERY_RESPONSE roap message
|
|
28
|
+
*
|
|
29
|
+
* @param {Object} roapMessage
|
|
30
|
+
* @returns {void}
|
|
31
|
+
* @public
|
|
32
|
+
* @memberof Roap
|
|
33
|
+
*/
|
|
34
|
+
handleTurnDiscoveryResponse(roapMessage: object): void;
|
|
35
|
+
/**
|
|
36
|
+
* sends the TURN_DISCOVERY_REQUEST roap request
|
|
37
|
+
*
|
|
38
|
+
* @param {Meeting} meeting
|
|
39
|
+
* @param {Boolean} isReconnecting
|
|
40
|
+
* @returns {Promise}
|
|
41
|
+
* @private
|
|
42
|
+
* @memberof Roap
|
|
43
|
+
*/
|
|
44
|
+
private sendRoapTurnDiscoveryRequest;
|
|
45
|
+
/**
|
|
46
|
+
* Sends the OK message that server expects to receive
|
|
47
|
+
* after it sends us TURN_DISCOVERY_RESPONSE
|
|
48
|
+
*
|
|
49
|
+
* @param {Meeting} meeting
|
|
50
|
+
* @returns {Promise}
|
|
51
|
+
*/
|
|
52
|
+
sendRoapOK(meeting: Meeting): any;
|
|
53
|
+
/**
|
|
54
|
+
* Retrieves TURN server information from the backend by doing
|
|
55
|
+
* a roap message exchange:
|
|
56
|
+
* client server
|
|
57
|
+
* | -----TURN_DISCOVERY_REQUEST-----> |
|
|
58
|
+
* | <----TURN_DISCOVERY_RESPONSE----- |
|
|
59
|
+
* | --------------OK----------------> |
|
|
60
|
+
*
|
|
61
|
+
* @param {Meeting} meeting
|
|
62
|
+
* @param {Boolean} isReconnecting should be set to true if this is a new
|
|
63
|
+
* media connection just after a reconnection
|
|
64
|
+
* @returns {Promise}
|
|
65
|
+
*/
|
|
66
|
+
doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean): Promise<any>;
|
|
67
|
+
/**
|
|
68
|
+
* Gets the reason why reachability is skipped.
|
|
69
|
+
*
|
|
70
|
+
* @param {Meeting} meeting
|
|
71
|
+
* @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
|
|
72
|
+
*/
|
|
73
|
+
private getSkipReason;
|
|
74
|
+
/**
|
|
75
|
+
* Checks if TURN discovery is skipped.
|
|
76
|
+
*
|
|
77
|
+
* @param {Meeting} meeting
|
|
78
|
+
* @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
|
|
79
|
+
*/
|
|
80
|
+
isSkipped(meeting: any): Promise<boolean>;
|
|
81
|
+
}
|