@webex/plugin-meetings 3.1.0-next.9 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/annotation/annotation.types.d.ts +42 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/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-errors.d.ts +60 -0
- package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/common/errors/reconnection-in-progress.js +34 -0
- package/dist/common/errors/reconnection-in-progress.js.map +1 -0
- package/dist/common/errors/reconnection.d.ts +15 -0
- package/dist/common/errors/stats.d.ts +15 -0
- package/dist/common/errors/webex-errors.d.ts +93 -0
- package/dist/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/common/events/events-scope.d.ts +17 -0
- package/dist/common/events/events.d.ts +12 -0
- package/dist/common/events/trigger-proxy.d.ts +2 -0
- package/dist/common/events/util.d.ts +2 -0
- package/dist/common/logs/logger-config.d.ts +2 -0
- package/dist/common/logs/logger-proxy.d.ts +2 -0
- package/dist/common/logs/request.d.ts +36 -0
- package/dist/common/queue.d.ts +34 -0
- package/dist/config.d.ts +73 -0
- package/dist/constants.d.ts +1088 -0
- package/dist/constants.js +6 -3
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.d.ts +4 -0
- package/dist/controls-options-manager/enums.d.ts +15 -0
- package/dist/controls-options-manager/index.d.ts +136 -0
- package/dist/controls-options-manager/types.d.ts +43 -0
- package/dist/controls-options-manager/util.d.ts +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interpretation/collection.d.ts +5 -0
- package/dist/interpretation/index.d.ts +5 -0
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.d.ts +5 -0
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.d.ts +2 -0
- package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/locus-info/fullState.d.ts +2 -0
- package/dist/locus-info/hostUtils.d.ts +2 -0
- package/dist/locus-info/index.d.ts +322 -0
- package/dist/locus-info/infoUtils.d.ts +2 -0
- package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/locus-info/parser.d.ts +272 -0
- package/dist/locus-info/selfUtils.d.ts +2 -0
- package/dist/media/MediaConnectionAwaiter.d.ts +61 -0
- package/dist/media/index.d.ts +34 -0
- package/dist/media/properties.d.ts +93 -0
- package/dist/media/util.d.ts +2 -0
- package/dist/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/mediaQualityMetrics/config.js +10 -10
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.d.ts +167 -0
- package/dist/meeting/index.d.ts +1825 -0
- package/dist/meeting/index.js +112 -64
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/locusMediaRequest.js +27 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.d.ts +178 -0
- package/dist/meeting/request.d.ts +295 -0
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/state.d.ts +9 -0
- package/dist/meeting/util.d.ts +119 -0
- package/dist/meeting/util.js +0 -16
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.d.ts +16 -0
- package/dist/meeting/voicea-meeting.js +37 -49
- package/dist/meeting/voicea-meeting.js.map +1 -1
- package/dist/meeting-info/collection.d.ts +20 -0
- package/dist/meeting-info/index.d.ts +69 -0
- package/dist/meeting-info/meeting-info-v2.d.ts +123 -0
- package/dist/meeting-info/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 +40 -0
- package/dist/meetings/index.d.ts +398 -0
- package/dist/meetings/index.js +12 -28
- package/dist/meetings/index.js.map +1 -1
- 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 +160 -0
- package/dist/member/types.d.ts +32 -0
- package/dist/member/util.d.ts +2 -0
- package/dist/members/collection.d.ts +29 -0
- package/dist/members/index.d.ts +353 -0
- package/dist/members/request.d.ts +114 -0
- package/dist/members/types.d.ts +25 -0
- package/dist/members/util.d.ts +215 -0
- package/dist/metrics/constants.d.ts +70 -0
- package/dist/metrics/index.d.ts +45 -0
- package/dist/multistream/mediaRequestManager.d.ts +119 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/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/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 +110 -0
- package/dist/reachability/index.d.ts +109 -0
- package/dist/reachability/index.js +88 -9
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +39 -0
- package/dist/reachability/util.d.ts +15 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/reactions.d.ts +4 -0
- package/dist/reactions/reactions.type.d.ts +52 -0
- package/dist/reconnection-manager/index.d.ts +136 -0
- package/dist/recording-controller/enums.d.ts +7 -0
- package/dist/recording-controller/index.d.ts +207 -0
- package/dist/recording-controller/util.d.ts +14 -0
- package/dist/roap/index.d.ts +86 -0
- package/dist/roap/request.d.ts +39 -0
- package/dist/roap/request.js +3 -27
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.d.ts +155 -0
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/index.d.ts +61 -0
- package/dist/statsAnalyzer/global.d.ts +36 -0
- package/dist/statsAnalyzer/index.d.ts +217 -0
- package/dist/statsAnalyzer/index.js +4 -2
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/statsAnalyzer/mqaUtil.js +14 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.d.ts +64 -0
- package/dist/types/constants.d.ts +3 -1
- package/dist/types/mediaQualityMetrics/config.d.ts +8 -2
- package/dist/types/meeting/index.d.ts +10 -1
- package/dist/types/meeting/locusMediaRequest.d.ts +1 -0
- package/dist/types/meeting/voicea-meeting.d.ts +3 -2
- package/dist/types/meetings/index.d.ts +1 -16
- package/dist/types/reachability/index.d.ts +11 -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 +21 -21
- package/src/constants.ts +3 -2
- package/src/mediaQualityMetrics/config.ts +13 -7
- package/src/meeting/index.ts +73 -30
- package/src/meeting/locusMediaRequest.ts +31 -0
- package/src/meeting/util.ts +1 -16
- package/src/meeting/voicea-meeting.ts +44 -46
- package/src/meetings/index.ts +15 -27
- package/src/reachability/index.ts +60 -0
- package/src/roap/request.ts +1 -24
- package/src/statsAnalyzer/index.ts +6 -3
- package/src/statsAnalyzer/mqaUtil.ts +18 -0
- package/test/unit/spec/meeting/index.js +70 -33
- package/test/unit/spec/meeting/locusMediaRequest.ts +49 -0
- package/test/unit/spec/meeting/utils.js +0 -10
- package/test/unit/spec/meeting/voicea-meeting.ts +5 -14
- package/test/unit/spec/meetings/index.js +59 -17
- package/test/unit/spec/reachability/index.ts +266 -0
- package/test/unit/spec/roap/request.ts +0 -37
- package/test/unit/spec/stats-analyzer/index.js +89 -8
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { SELF_POLICY } from '../constants';
|
|
2
|
+
import MeetingRequest from '../meeting/request';
|
|
3
|
+
/**
|
|
4
|
+
* @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting
|
|
5
|
+
* @export
|
|
6
|
+
* @private
|
|
7
|
+
* @class Recording
|
|
8
|
+
*/
|
|
9
|
+
export default class RecordingController {
|
|
10
|
+
/**
|
|
11
|
+
* @instance
|
|
12
|
+
* @type {MeetingRequest}
|
|
13
|
+
* @private
|
|
14
|
+
* @memberof RecordingController
|
|
15
|
+
*/
|
|
16
|
+
private request;
|
|
17
|
+
/**
|
|
18
|
+
* @instance
|
|
19
|
+
* @type {Array}
|
|
20
|
+
* @private
|
|
21
|
+
* @memberof RecordingInfo
|
|
22
|
+
*/
|
|
23
|
+
private displayHints;
|
|
24
|
+
/**
|
|
25
|
+
* @instance
|
|
26
|
+
* @type {Object}
|
|
27
|
+
* @private
|
|
28
|
+
* @memberof RecordingInfo
|
|
29
|
+
*/
|
|
30
|
+
private selfUserPolicies;
|
|
31
|
+
/**
|
|
32
|
+
* @instance
|
|
33
|
+
* @type {string}
|
|
34
|
+
* @private
|
|
35
|
+
* @memberof RecordingInfo
|
|
36
|
+
*/
|
|
37
|
+
private serviceUrl;
|
|
38
|
+
/**
|
|
39
|
+
* @instance
|
|
40
|
+
* @type {string}
|
|
41
|
+
* @private
|
|
42
|
+
* @memberof RecordingInfo
|
|
43
|
+
*/
|
|
44
|
+
private sessionId;
|
|
45
|
+
/**
|
|
46
|
+
* @instance
|
|
47
|
+
* @type {string}
|
|
48
|
+
* @private
|
|
49
|
+
* @memberof RecordingInfo
|
|
50
|
+
*/
|
|
51
|
+
private locusUrl;
|
|
52
|
+
/**
|
|
53
|
+
* @instance
|
|
54
|
+
* @type {string}
|
|
55
|
+
* @private
|
|
56
|
+
* @memberof RecordingInfo
|
|
57
|
+
*/
|
|
58
|
+
private locusId;
|
|
59
|
+
/**
|
|
60
|
+
* @param {MeetingRequest} request
|
|
61
|
+
* @param {Object} options
|
|
62
|
+
* @constructor
|
|
63
|
+
* @memberof RecordingController
|
|
64
|
+
*/
|
|
65
|
+
constructor(request: MeetingRequest, options?: {
|
|
66
|
+
serviceUrl?: string;
|
|
67
|
+
sessionId: string;
|
|
68
|
+
locusUrl: string;
|
|
69
|
+
displayHints?: Array<string>;
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* @param {MeetingRequest} request
|
|
73
|
+
* @returns {void}
|
|
74
|
+
* @private
|
|
75
|
+
* @memberof RecordingController
|
|
76
|
+
*/
|
|
77
|
+
private initialize;
|
|
78
|
+
/**
|
|
79
|
+
* @param {Object} options
|
|
80
|
+
* @returns {void}
|
|
81
|
+
* @public
|
|
82
|
+
* @memberof RecordingController
|
|
83
|
+
*/
|
|
84
|
+
set(options?: {
|
|
85
|
+
serviceUrl?: string;
|
|
86
|
+
sessionId: string;
|
|
87
|
+
locusUrl: string;
|
|
88
|
+
displayHints?: Array<string>;
|
|
89
|
+
}): void;
|
|
90
|
+
/**
|
|
91
|
+
* @param {string} url
|
|
92
|
+
* @returns {void}
|
|
93
|
+
* @public
|
|
94
|
+
* @memberof RecordingController
|
|
95
|
+
*/
|
|
96
|
+
setLocusUrl(url: string): void;
|
|
97
|
+
/**
|
|
98
|
+
* @param {Array} hints
|
|
99
|
+
* @returns {void}
|
|
100
|
+
* @public
|
|
101
|
+
* @memberof RecordingController
|
|
102
|
+
*/
|
|
103
|
+
setDisplayHints(hints: Array<string>): void;
|
|
104
|
+
/**
|
|
105
|
+
* @param {Object} selfUserPolicies
|
|
106
|
+
* @returns {void}
|
|
107
|
+
* @public
|
|
108
|
+
* @memberof RecordingController
|
|
109
|
+
*/
|
|
110
|
+
setUserPolicy(selfUserPolicies: Record<SELF_POLICY, boolean>): void;
|
|
111
|
+
/**
|
|
112
|
+
* @param {string} id
|
|
113
|
+
* @returns {void}
|
|
114
|
+
* @public
|
|
115
|
+
* @memberof RecordingController
|
|
116
|
+
*/
|
|
117
|
+
setSessionId(id: string): void;
|
|
118
|
+
/**
|
|
119
|
+
* @param {string} url
|
|
120
|
+
* @returns {void}
|
|
121
|
+
* @public
|
|
122
|
+
* @memberof RecordingController
|
|
123
|
+
*/
|
|
124
|
+
setServiceUrl(url: string): void;
|
|
125
|
+
/**
|
|
126
|
+
* @returns {string}
|
|
127
|
+
* @public
|
|
128
|
+
* @memberof RecordingController
|
|
129
|
+
*/
|
|
130
|
+
getLocusUrl(): string;
|
|
131
|
+
/**
|
|
132
|
+
* @returns {string}
|
|
133
|
+
* @public
|
|
134
|
+
* @memberof RecordingController
|
|
135
|
+
*/
|
|
136
|
+
getLocusId(): string;
|
|
137
|
+
/**
|
|
138
|
+
* @returns {string}
|
|
139
|
+
* @public
|
|
140
|
+
* @memberof RecordingController
|
|
141
|
+
*/
|
|
142
|
+
getSessionId(): string;
|
|
143
|
+
/**
|
|
144
|
+
* @returns {string}
|
|
145
|
+
* @public
|
|
146
|
+
* @memberof RecordingController
|
|
147
|
+
*/
|
|
148
|
+
getServiceUrl(): string;
|
|
149
|
+
/**
|
|
150
|
+
* @returns {Array}
|
|
151
|
+
* @public
|
|
152
|
+
* @memberof RecordingController
|
|
153
|
+
*/
|
|
154
|
+
getDisplayHints(): string[];
|
|
155
|
+
/**
|
|
156
|
+
* @param {Object} options
|
|
157
|
+
* @returns {void}
|
|
158
|
+
* @private
|
|
159
|
+
* @memberof RecordingController
|
|
160
|
+
*/
|
|
161
|
+
private extract;
|
|
162
|
+
/**
|
|
163
|
+
* @param {RecordingAction} action
|
|
164
|
+
* @private
|
|
165
|
+
* @memberof RecordingController
|
|
166
|
+
* @returns {Promise}
|
|
167
|
+
*/
|
|
168
|
+
private recordingService;
|
|
169
|
+
/**
|
|
170
|
+
* @param {RecordingAction} action
|
|
171
|
+
* @private
|
|
172
|
+
* @memberof RecordingController
|
|
173
|
+
* @returns {Promise}
|
|
174
|
+
*/
|
|
175
|
+
private recordingControls;
|
|
176
|
+
/**
|
|
177
|
+
* @param {RecordingAction} action
|
|
178
|
+
* @private
|
|
179
|
+
* @memberof RecordingController
|
|
180
|
+
* @returns {Promise}
|
|
181
|
+
*/
|
|
182
|
+
private recordingFacade;
|
|
183
|
+
/**
|
|
184
|
+
* @private
|
|
185
|
+
* @memberof RecordingController
|
|
186
|
+
* @returns {Promise}
|
|
187
|
+
*/
|
|
188
|
+
startRecording(): Promise<any>;
|
|
189
|
+
/**
|
|
190
|
+
* @private
|
|
191
|
+
* @memberof RecordingController
|
|
192
|
+
* @returns {Promise}
|
|
193
|
+
*/
|
|
194
|
+
stopRecording(): Promise<any>;
|
|
195
|
+
/**
|
|
196
|
+
* @private
|
|
197
|
+
* @memberof RecordingController
|
|
198
|
+
* @returns {Promise}
|
|
199
|
+
*/
|
|
200
|
+
pauseRecording(): Promise<any>;
|
|
201
|
+
/**
|
|
202
|
+
* @private
|
|
203
|
+
* @memberof RecordingController
|
|
204
|
+
* @returns {Promise}
|
|
205
|
+
*/
|
|
206
|
+
resumeRecording(): Promise<any>;
|
|
207
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SELF_POLICY } from '../constants';
|
|
2
|
+
import RecordingAction from './enums';
|
|
3
|
+
declare const _default: {
|
|
4
|
+
canUserStart: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
|
|
5
|
+
canUserPause: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
|
|
6
|
+
canUserResume: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
|
|
7
|
+
canUserStop: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
|
|
8
|
+
deriveRecordingStates: (action: RecordingAction) => {
|
|
9
|
+
recording: boolean;
|
|
10
|
+
paused: boolean;
|
|
11
|
+
};
|
|
12
|
+
extractLocusId: (url: string) => string;
|
|
13
|
+
};
|
|
14
|
+
export default _default;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
2
|
+
import TurnDiscovery, { TurnDiscoveryResult } from './turnDiscovery';
|
|
3
|
+
import Meeting from '../meeting';
|
|
4
|
+
export { type TurnDiscoveryResult, type TurnServerInfo, type TurnDiscoverySkipReason, } from './turnDiscovery';
|
|
5
|
+
/**
|
|
6
|
+
* Roap options
|
|
7
|
+
* @typedef {Object} RoapOptions
|
|
8
|
+
* @property {String} sdp
|
|
9
|
+
* @property {Meeting} meeting
|
|
10
|
+
* @property {Number} seq
|
|
11
|
+
* @property {Number} tieBreaker
|
|
12
|
+
* @property {Boolean} reconnect
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {Object} SeqOptions
|
|
16
|
+
* @property {String} correlationId
|
|
17
|
+
* @property {String} mediaId
|
|
18
|
+
* @property {Number} seq
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* @class Roap
|
|
22
|
+
* @export
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
export default class Roap extends StatelessWebexPlugin {
|
|
26
|
+
attrs: any;
|
|
27
|
+
lastRoapOffer: any;
|
|
28
|
+
options: any;
|
|
29
|
+
roapHandler: any;
|
|
30
|
+
roapRequest: any;
|
|
31
|
+
turnDiscovery: TurnDiscovery;
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @param {Object} attrs
|
|
35
|
+
* @param {Object} options
|
|
36
|
+
*/
|
|
37
|
+
constructor(attrs: any, options: any);
|
|
38
|
+
/**
|
|
39
|
+
*
|
|
40
|
+
* @param {SeqOptions} options
|
|
41
|
+
* @returns {null}
|
|
42
|
+
* @memberof Roap
|
|
43
|
+
*/
|
|
44
|
+
sendRoapOK(options: any): Promise<any>;
|
|
45
|
+
/**
|
|
46
|
+
* Sends a ROAP answer...
|
|
47
|
+
* @param {SeqOptions} options
|
|
48
|
+
* @param {Boolean} options.audioMuted
|
|
49
|
+
* @param {Boolean} options.videoMuted
|
|
50
|
+
* @returns {Promise}
|
|
51
|
+
* @memberof Roap
|
|
52
|
+
*/
|
|
53
|
+
sendRoapAnswer(options: any): any;
|
|
54
|
+
/**
|
|
55
|
+
* Sends a ROAP error...
|
|
56
|
+
* @param {Object} options
|
|
57
|
+
* @returns {Promise}
|
|
58
|
+
* @memberof Roap
|
|
59
|
+
*/
|
|
60
|
+
sendRoapError(options: any): any;
|
|
61
|
+
/**
|
|
62
|
+
* sends a roap media request
|
|
63
|
+
* @param {RoapOptions} options
|
|
64
|
+
* @returns {Promise}
|
|
65
|
+
* @memberof Roap
|
|
66
|
+
*/
|
|
67
|
+
sendRoapMediaRequest(options: any): any;
|
|
68
|
+
/**
|
|
69
|
+
* Performs a TURN server discovery procedure, which involves exchanging
|
|
70
|
+
* some roap messages with the server. This exchange has to be done before
|
|
71
|
+
* any other roap messages are sent
|
|
72
|
+
*
|
|
73
|
+
* @param {Meeting} meeting
|
|
74
|
+
* @param {Boolean} isReconnecting should be set to true if this is a new
|
|
75
|
+
* media connection just after a reconnection
|
|
76
|
+
* @param {Boolean} [isForced]
|
|
77
|
+
* @returns {Promise}
|
|
78
|
+
*/
|
|
79
|
+
doTurnDiscovery(meeting: Meeting, isReconnecting: boolean, isForced?: boolean): Promise<TurnDiscoveryResult>;
|
|
80
|
+
generateTurnDiscoveryRequestMessage(meeting: Meeting, isForced: boolean): Promise<{
|
|
81
|
+
roapMessage?: object;
|
|
82
|
+
turnDiscoverySkippedReason: string;
|
|
83
|
+
}>;
|
|
84
|
+
handleTurnDiscoveryHttpResponse(meeting: Meeting, httpResponse: object): Promise<TurnDiscoveryResult>;
|
|
85
|
+
abortTurnDiscovery(): void;
|
|
86
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
2
|
+
import { IP_VERSION } from '../constants';
|
|
3
|
+
import { LocusMediaRequest } from '../meeting/locusMediaRequest';
|
|
4
|
+
/**
|
|
5
|
+
* @class RoapRequest
|
|
6
|
+
*/
|
|
7
|
+
export default class RoapRequest extends StatelessWebexPlugin {
|
|
8
|
+
/**
|
|
9
|
+
* Returns reachability data.
|
|
10
|
+
* @param {Object} localSdp
|
|
11
|
+
* @returns {Object}
|
|
12
|
+
*/
|
|
13
|
+
attachReachabilityData(localSdp: any): Promise<{
|
|
14
|
+
localSdp: any;
|
|
15
|
+
joinCookie: any;
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Sends a ROAP message
|
|
19
|
+
* @param {Object} options
|
|
20
|
+
* @param {Object} options.roapMessage
|
|
21
|
+
* @param {String} options.locusSelfUrl
|
|
22
|
+
* @param {String} options.mediaId
|
|
23
|
+
* @param {String} options.correlationId
|
|
24
|
+
* @param {String} options.meetingId
|
|
25
|
+
* @param {IP_VERSION} options.ipVersion only required for offers
|
|
26
|
+
* @returns {Promise} returns the response/failure of the request
|
|
27
|
+
*/
|
|
28
|
+
sendRoap(options: {
|
|
29
|
+
roapMessage: any;
|
|
30
|
+
locusSelfUrl: string;
|
|
31
|
+
mediaId: string;
|
|
32
|
+
meetingId: string;
|
|
33
|
+
ipVersion?: IP_VERSION;
|
|
34
|
+
locusMediaRequest?: LocusMediaRequest;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
mediaConnections: any;
|
|
37
|
+
locus: any;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
package/dist/roap/request.js
CHANGED
|
@@ -105,12 +105,11 @@ var RoapRequest = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin
|
|
|
105
105
|
key: "sendRoap",
|
|
106
106
|
value: (function () {
|
|
107
107
|
var _sendRoap = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(options) {
|
|
108
|
-
var
|
|
109
|
-
var roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest, ipVersion, _yield$this$attachRea, localSdpWithReachabilityData, joinCookie;
|
|
108
|
+
var roapMessage, locusSelfUrl, mediaId, locusMediaRequest, ipVersion, _yield$this$attachRea, localSdpWithReachabilityData, joinCookie;
|
|
110
109
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
111
110
|
while (1) switch (_context2.prev = _context2.next) {
|
|
112
111
|
case 0:
|
|
113
|
-
roapMessage = options.roapMessage, locusSelfUrl = options.locusSelfUrl, mediaId = options.mediaId,
|
|
112
|
+
roapMessage = options.roapMessage, locusSelfUrl = options.locusSelfUrl, mediaId = options.mediaId, locusMediaRequest = options.locusMediaRequest, ipVersion = options.ipVersion;
|
|
114
113
|
if (!mediaId) {
|
|
115
114
|
_loggerProxy.default.logger.info('Roap:request#sendRoap --> sending empty mediaID');
|
|
116
115
|
}
|
|
@@ -130,14 +129,6 @@ var RoapRequest = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin
|
|
|
130
129
|
localSdpWithReachabilityData = _yield$this$attachRea.localSdp;
|
|
131
130
|
joinCookie = _yield$this$attachRea.joinCookie;
|
|
132
131
|
_loggerProxy.default.logger.info("Roap:request#sendRoap --> ".concat(locusSelfUrl, " \n ").concat(roapMessage.messageType, " \n seq:").concat(roapMessage.seq));
|
|
133
|
-
|
|
134
|
-
// @ts-ignore
|
|
135
|
-
this.webex.internal.newMetrics.submitClientEvent({
|
|
136
|
-
name: 'client.locus.media.request',
|
|
137
|
-
options: {
|
|
138
|
-
meetingId: meetingId
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
132
|
return _context2.abrupt("return", locusMediaRequest.send({
|
|
142
133
|
type: 'RoapMessage',
|
|
143
134
|
selfUrl: locusSelfUrl,
|
|
@@ -147,13 +138,6 @@ var RoapRequest = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin
|
|
|
147
138
|
reachability: localSdpWithReachabilityData.reachability,
|
|
148
139
|
ipVersion: ipVersion
|
|
149
140
|
}).then(function (res) {
|
|
150
|
-
// @ts-ignore
|
|
151
|
-
_this.webex.internal.newMetrics.submitClientEvent({
|
|
152
|
-
name: 'client.locus.media.response',
|
|
153
|
-
options: {
|
|
154
|
-
meetingId: meetingId
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
141
|
// always it will be the first mediaConnection Object
|
|
158
142
|
var mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];
|
|
159
143
|
_loggerProxy.default.logger.debug("Roap:request#sendRoap --> response:".concat((0, _stringify.default)(mediaConnections, null, 2), "'\n StatusCode:'").concat(res.statusCode));
|
|
@@ -165,19 +149,11 @@ var RoapRequest = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin
|
|
|
165
149
|
mediaConnections: res.body.mediaConnections
|
|
166
150
|
});
|
|
167
151
|
}).catch(function (err) {
|
|
168
|
-
// @ts-ignore
|
|
169
|
-
_this.webex.internal.newMetrics.submitClientEvent({
|
|
170
|
-
name: 'client.locus.media.response',
|
|
171
|
-
options: {
|
|
172
|
-
meetingId: meetingId,
|
|
173
|
-
rawError: err
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
152
|
_loggerProxy.default.logger.error("Roap:request#sendRoap --> Error:", err);
|
|
177
153
|
_loggerProxy.default.logger.error("Roap:request#sendRoapRequest --> roapMessage that caused error:".concat((0, _stringify.default)(roapMessage, null, 2), " + '\\n mediaId:'").concat(options.mediaId));
|
|
178
154
|
throw err;
|
|
179
155
|
}));
|
|
180
|
-
case
|
|
156
|
+
case 12:
|
|
181
157
|
case "end":
|
|
182
158
|
return _context2.stop();
|
|
183
159
|
}
|
package/dist/roap/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_loggerProxy","_interopRequireDefault","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","RoapRequest","exports","_StatelessWebexPlugin","_inherits2","_super","_classCallCheck2","_createClass2","key","value","_attachReachabilityData","_asyncToGenerator2","_regenerator","mark","_callee","localSdp","joinCookie","reachabilityResult","joinCookieRaw","wrap","_callee$","_context","prev","next","webex","meetings","reachability","getReachabilityResults","sent","_keys","boundedStorage","get","REACHABILITY","namespace","localStorageJoinCookie","catch","JSON","parse","LoggerProxy","logger","error","concat","abrupt","stop","attachReachabilityData","_x","_sendRoap","_callee2","options","_this","roapMessage","locusSelfUrl","mediaId","meetingId","locusMediaRequest","ipVersion","_yield$this$attachRea","localSdpWithReachabilityData","_callee2$","_context2","info","warn","_promise","reject","Error","messageType","seq","internal","newMetrics","submitClientEvent","name","send","type","selfUrl","then","res","mediaConnections","body","debug","_stringify","statusCode","locus","roapSeq","err","rawError","sendRoap","_x2","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {IP_VERSION, REACHABILITY} from '../constants';\nimport {LocusMediaRequest} from '../meeting/locusMediaRequest';\n\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Returns reachability data.\n * @param {Object} localSdp\n * @returns {Object}\n */\n async attachReachabilityData(localSdp) {\n let joinCookie;\n\n // @ts-ignore\n const reachabilityResult = await this.webex.meetings.reachability.getReachabilityResults();\n\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n joinCookie = JSON.parse(joinCookieRaw);\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return {localSdp, joinCookie};\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {String} options.meetingId\n * @param {IP_VERSION} options.ipVersion only required for offers\n * @returns {Promise} returns the response/failure of the request\n */\n async sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n meetingId: string;\n ipVersion?: IP_VERSION;\n locusMediaRequest?: LocusMediaRequest;\n }) {\n const {roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest, ipVersion} = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');\n }\n\n if (!locusMediaRequest) {\n LoggerProxy.logger.warn(\n 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'\n );\n\n return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));\n }\n const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({\n roapMessage,\n });\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> ${locusSelfUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.request',\n options: {\n meetingId,\n },\n });\n\n return locusMediaRequest\n .send({\n type: 'RoapMessage',\n selfUrl: locusSelfUrl,\n joinCookie,\n mediaId,\n roapMessage,\n reachability: localSdpWithReachabilityData.reachability,\n ipVersion,\n })\n .then((res) => {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {\n meetingId,\n },\n });\n // always it will be the first mediaConnection Object\n const mediaConnections =\n res.body.mediaConnections &&\n res.body.mediaConnections.length > 0 &&\n res.body.mediaConnections[0];\n\n LoggerProxy.logger.debug(\n `Roap:request#sendRoap --> response:${JSON.stringify(\n mediaConnections,\n null,\n 2\n )}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),\n };\n })\n .catch((err) => {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {\n meetingId,\n rawError: err,\n },\n });\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:`, err);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> roapMessage that caused error:${JSON.stringify(\n roapMessage,\n null,\n 2\n )} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_loggerProxy","_interopRequireDefault","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","RoapRequest","exports","_StatelessWebexPlugin","_inherits2","_super","_classCallCheck2","_createClass2","key","value","_attachReachabilityData","_asyncToGenerator2","_regenerator","mark","_callee","localSdp","joinCookie","reachabilityResult","joinCookieRaw","wrap","_callee$","_context","prev","next","webex","meetings","reachability","getReachabilityResults","sent","_keys","boundedStorage","get","REACHABILITY","namespace","localStorageJoinCookie","catch","JSON","parse","LoggerProxy","logger","error","concat","abrupt","stop","attachReachabilityData","_x","_sendRoap","_callee2","options","roapMessage","locusSelfUrl","mediaId","locusMediaRequest","ipVersion","_yield$this$attachRea","localSdpWithReachabilityData","_callee2$","_context2","info","warn","_promise","reject","Error","messageType","seq","send","type","selfUrl","then","res","mediaConnections","body","debug","_stringify","statusCode","locus","roapSeq","err","sendRoap","_x2","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {IP_VERSION, REACHABILITY} from '../constants';\nimport {LocusMediaRequest} from '../meeting/locusMediaRequest';\n\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Returns reachability data.\n * @param {Object} localSdp\n * @returns {Object}\n */\n async attachReachabilityData(localSdp) {\n let joinCookie;\n\n // @ts-ignore\n const reachabilityResult = await this.webex.meetings.reachability.getReachabilityResults();\n\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n joinCookie = JSON.parse(joinCookieRaw);\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return {localSdp, joinCookie};\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {String} options.meetingId\n * @param {IP_VERSION} options.ipVersion only required for offers\n * @returns {Promise} returns the response/failure of the request\n */\n async sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n meetingId: string;\n ipVersion?: IP_VERSION;\n locusMediaRequest?: LocusMediaRequest;\n }) {\n const {roapMessage, locusSelfUrl, mediaId, locusMediaRequest, ipVersion} = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');\n }\n\n if (!locusMediaRequest) {\n LoggerProxy.logger.warn(\n 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'\n );\n\n return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));\n }\n const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({\n roapMessage,\n });\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> ${locusSelfUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`\n );\n\n return locusMediaRequest\n .send({\n type: 'RoapMessage',\n selfUrl: locusSelfUrl,\n joinCookie,\n mediaId,\n roapMessage,\n reachability: localSdpWithReachabilityData.reachability,\n ipVersion,\n })\n .then((res) => {\n // always it will be the first mediaConnection Object\n const mediaConnections =\n res.body.mediaConnections &&\n res.body.mediaConnections.length > 0 &&\n res.body.mediaConnections[0];\n\n LoggerProxy.logger.debug(\n `Roap:request#sendRoap --> response:${JSON.stringify(\n mediaConnections,\n null,\n 2\n )}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),\n };\n })\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:`, err);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> roapMessage that caused error:${JSON.stringify(\n roapMessage,\n null,\n 2\n )} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Enum } from '../constants';
|
|
2
|
+
import RoapRequest from './request';
|
|
3
|
+
import Meeting from '../meeting';
|
|
4
|
+
declare const TurnDiscoverySkipReason: {
|
|
5
|
+
readonly missingHttpResponse: "missing http response";
|
|
6
|
+
readonly reachability: "reachability";
|
|
7
|
+
readonly alreadyInProgress: "already in progress";
|
|
8
|
+
};
|
|
9
|
+
export type TurnDiscoverySkipReason = Enum<typeof TurnDiscoverySkipReason> | string | undefined;
|
|
10
|
+
export type TurnServerInfo = {
|
|
11
|
+
url: string;
|
|
12
|
+
username: string;
|
|
13
|
+
password: string;
|
|
14
|
+
};
|
|
15
|
+
export type TurnDiscoveryResult = {
|
|
16
|
+
turnServerInfo?: TurnServerInfo;
|
|
17
|
+
turnDiscoverySkippedReason: TurnDiscoverySkipReason;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Handles the process of finding out TURN server information from Linus.
|
|
21
|
+
* This is achieved by sending a TURN_DISCOVERY_REQUEST.
|
|
22
|
+
*/
|
|
23
|
+
export default class TurnDiscovery {
|
|
24
|
+
private roapRequest;
|
|
25
|
+
private defer?;
|
|
26
|
+
private turnInfo;
|
|
27
|
+
private responseTimer?;
|
|
28
|
+
/**
|
|
29
|
+
* Constructor
|
|
30
|
+
*
|
|
31
|
+
* @param {RoapRequest} roapRequest
|
|
32
|
+
*/
|
|
33
|
+
constructor(roapRequest: RoapRequest);
|
|
34
|
+
/**
|
|
35
|
+
* waits for TURN_DISCOVERY_RESPONSE message to arrive
|
|
36
|
+
*
|
|
37
|
+
* @returns {Promise}
|
|
38
|
+
* @private
|
|
39
|
+
* @memberof Roap
|
|
40
|
+
*/
|
|
41
|
+
private waitForTurnDiscoveryResponse;
|
|
42
|
+
/**
|
|
43
|
+
* Handles TURN_DISCOVERY_RESPONSE roap message. Use it if the roap message comes over the websocket,
|
|
44
|
+
* otherwise use handleTurnDiscoveryHttpResponse() if it comes in the http response.
|
|
45
|
+
*
|
|
46
|
+
* @param {Object} roapMessage
|
|
47
|
+
* @param {string} from string to indicate how we got the response (used just for logging)
|
|
48
|
+
* @returns {void}
|
|
49
|
+
* @public
|
|
50
|
+
* @memberof Roap
|
|
51
|
+
*/
|
|
52
|
+
handleTurnDiscoveryResponse(roapMessage: any, from: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Generates TURN_DISCOVERY_REQUEST roap message. When this method returns a roapMessage, it means that a TURN discovery process has started.
|
|
55
|
+
* It needs be ended by calling handleTurnDiscoveryHttpResponse() once you get a response from the backend. If you don't get any response
|
|
56
|
+
* or want to abort, you need to call abort().
|
|
57
|
+
*
|
|
58
|
+
* @param {Meeting} meeting
|
|
59
|
+
* @param {boolean} isForced
|
|
60
|
+
* @returns {Object}
|
|
61
|
+
*/
|
|
62
|
+
generateTurnDiscoveryRequestMessage(meeting: Meeting, isForced: boolean): Promise<{
|
|
63
|
+
roapMessage?: object;
|
|
64
|
+
turnDiscoverySkippedReason: TurnDiscoverySkipReason;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* Handles any errors that occur during TURN discovery without re-throwing them.
|
|
68
|
+
*
|
|
69
|
+
* @param {Meeting} meeting
|
|
70
|
+
* @param {Error} error
|
|
71
|
+
* @returns {TurnDiscoveryResult}
|
|
72
|
+
*/
|
|
73
|
+
private handleTurnDiscoveryFailure;
|
|
74
|
+
/**
|
|
75
|
+
* Handles TURN_DISCOVERY_RESPONSE roap message that came in http response. If the response is not valid,
|
|
76
|
+
* it returns an object with turnServerInfo set to undefined. In that case you need to call abort()
|
|
77
|
+
* to end the TURN discovery process.
|
|
78
|
+
*
|
|
79
|
+
* @param {Meeting} meeting
|
|
80
|
+
* @param {Object|undefined} httpResponse can be undefined to indicate that we didn't get the response
|
|
81
|
+
* @returns {Promise<TurnDiscoveryResult>}
|
|
82
|
+
* @memberof Roap
|
|
83
|
+
*/
|
|
84
|
+
handleTurnDiscoveryHttpResponse(meeting: Meeting, httpResponse?: object): Promise<TurnDiscoveryResult>;
|
|
85
|
+
/**
|
|
86
|
+
* Aborts current TURN discovery. This method needs to be called if you called generateTurnDiscoveryRequestMessage(),
|
|
87
|
+
* but then never got any response from the server.
|
|
88
|
+
* @returns {void}
|
|
89
|
+
*/
|
|
90
|
+
abort(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Parses the TURN_DISCOVERY_RESPONSE roap message out of the http response
|
|
93
|
+
* and returns it.
|
|
94
|
+
*
|
|
95
|
+
* @param {Meeting} meeting
|
|
96
|
+
* @param {any} httpResponse
|
|
97
|
+
* @returns {any}
|
|
98
|
+
*/
|
|
99
|
+
private parseHttpTurnDiscoveryResponse;
|
|
100
|
+
/**
|
|
101
|
+
* sends the TURN_DISCOVERY_REQUEST roap request
|
|
102
|
+
*
|
|
103
|
+
* @param {Meeting} meeting
|
|
104
|
+
* @param {Boolean} isReconnecting
|
|
105
|
+
* @returns {Promise}
|
|
106
|
+
* @private
|
|
107
|
+
* @memberof Roap
|
|
108
|
+
*/
|
|
109
|
+
private sendRoapTurnDiscoveryRequest;
|
|
110
|
+
/**
|
|
111
|
+
* Sends the OK message that server expects to receive
|
|
112
|
+
* after it sends us TURN_DISCOVERY_RESPONSE
|
|
113
|
+
*
|
|
114
|
+
* @param {Meeting} meeting
|
|
115
|
+
* @returns {Promise}
|
|
116
|
+
*/
|
|
117
|
+
sendRoapOK(meeting: Meeting): Promise<{
|
|
118
|
+
mediaConnections: any;
|
|
119
|
+
locus: any;
|
|
120
|
+
}>;
|
|
121
|
+
/**
|
|
122
|
+
* Gets the reason why reachability is skipped.
|
|
123
|
+
*
|
|
124
|
+
* @param {Meeting} meeting
|
|
125
|
+
* @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
|
|
126
|
+
*/
|
|
127
|
+
private getSkipReason;
|
|
128
|
+
/**
|
|
129
|
+
* Checks if TURN discovery is skipped.
|
|
130
|
+
*
|
|
131
|
+
* @param {Meeting} meeting
|
|
132
|
+
* @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
|
|
133
|
+
*/
|
|
134
|
+
isSkipped(meeting: any): Promise<boolean>;
|
|
135
|
+
/**
|
|
136
|
+
* Retrieves TURN server information from the backend by doing
|
|
137
|
+
* a roap message exchange:
|
|
138
|
+
* client server
|
|
139
|
+
* | -----TURN_DISCOVERY_REQUEST-----> |
|
|
140
|
+
* | <----TURN_DISCOVERY_RESPONSE----- |
|
|
141
|
+
* | --------------OK----------------> |
|
|
142
|
+
*
|
|
143
|
+
* This TURN discovery roap exchange is always done with seq=0.
|
|
144
|
+
* The RoapMediaConnection SDP exchange always starts with seq=1,
|
|
145
|
+
* so it works fine no matter if TURN discovery is done or not.
|
|
146
|
+
*
|
|
147
|
+
* @param {Meeting} meeting
|
|
148
|
+
* @param {Boolean} [isReconnecting] should be set to true if this is a new
|
|
149
|
+
* media connection just after a reconnection
|
|
150
|
+
* @param {Boolean} [isForced]
|
|
151
|
+
* @returns {Promise}
|
|
152
|
+
*/
|
|
153
|
+
doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean, isForced?: boolean): Promise<TurnDiscoveryResult>;
|
|
154
|
+
}
|
|
155
|
+
export {};
|