@webex/plugin-meetings 3.7.0-wxcc.1 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/annotation/annotation.types.d.ts +42 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/breakouts/breakout.d.ts +8 -0
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/collection.d.ts +5 -0
- package/dist/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/breakouts/events.d.ts +8 -0
- package/dist/breakouts/index.d.ts +5 -0
- package/dist/breakouts/index.js +1 -1
- package/dist/breakouts/request.d.ts +22 -0
- package/dist/breakouts/utils.d.ts +15 -0
- package/dist/common/browser-detection.d.ts +9 -0
- package/dist/common/collection.d.ts +48 -0
- package/dist/common/config.d.ts +2 -0
- package/dist/common/errors/captcha-error.d.ts +15 -0
- package/dist/common/errors/intent-to-join.d.ts +16 -0
- package/dist/common/errors/join-meeting.d.ts +17 -0
- package/dist/common/errors/media.d.ts +15 -0
- package/dist/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/common/errors/parameter.d.ts +15 -0
- package/dist/common/errors/password-error.d.ts +15 -0
- package/dist/common/errors/permission.d.ts +14 -0
- package/dist/common/errors/reclaim-host-role-error.js +149 -0
- package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/common/errors/reconnection-in-progress.js +33 -0
- package/dist/common/errors/reconnection-in-progress.js.map +1 -0
- package/dist/common/errors/reconnection.d.ts +15 -0
- package/dist/common/errors/stats.d.ts +15 -0
- package/dist/common/errors/webex-errors.d.ts +93 -0
- package/dist/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/common/events/events-scope.d.ts +17 -0
- package/dist/common/events/events.d.ts +12 -0
- package/dist/common/events/trigger-proxy.d.ts +2 -0
- package/dist/common/events/util.d.ts +2 -0
- package/dist/common/logs/logger-config.d.ts +2 -0
- package/dist/common/logs/logger-proxy.d.ts +2 -0
- package/dist/common/logs/request.d.ts +36 -0
- package/dist/common/queue.d.ts +34 -0
- package/dist/config.d.ts +72 -0
- package/dist/constants.d.ts +1088 -0
- package/dist/constants.js +15 -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/locus-info/selfUtils.js +5 -0
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.js +1 -0
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/index.d.ts +34 -0
- package/dist/media/properties.d.ts +93 -0
- package/dist/media/properties.js +30 -16
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.d.ts +2 -0
- package/dist/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/mediaQualityMetrics/config.js +502 -0
- package/dist/mediaQualityMetrics/config.js.map +1 -0
- package/dist/meeting/brbState.js +167 -0
- package/dist/meeting/brbState.js.map +1 -0
- package/dist/meeting/effectsState.js +260 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/in-meeting-actions.d.ts +167 -0
- package/dist/meeting/index.d.ts +1825 -0
- package/dist/meeting/index.js +363 -295
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/muteState.d.ts +178 -0
- package/dist/meeting/muteState.js +1 -6
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +295 -0
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/state.d.ts +9 -0
- package/dist/meeting/util.d.ts +119 -0
- package/dist/meeting/voicea-meeting.d.ts +16 -0
- package/dist/meeting-info/collection.d.ts +20 -0
- package/dist/meeting-info/index.d.ts +69 -0
- package/dist/meeting-info/meeting-info-v2.d.ts +123 -0
- package/dist/meeting-info/meeting-info-v2.js +19 -12
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.d.ts +22 -0
- package/dist/meeting-info/util.d.ts +2 -0
- package/dist/meeting-info/utilv2.d.ts +2 -0
- package/dist/meeting-info/utilv2.js +5 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +40 -0
- package/dist/meetings/index.d.ts +390 -0
- package/dist/meetings/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/member.types.js +17 -0
- package/dist/member/member.types.js.map +1 -0
- package/dist/member/types.d.ts +32 -0
- package/dist/member/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/config.js +276 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/constants.d.ts +70 -0
- package/dist/metrics/constants.js +2 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +45 -0
- package/dist/multistream/mediaRequestManager.d.ts +119 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/remoteMediaGroup.d.ts +49 -0
- package/dist/multistream/remoteMediaManager.d.ts +300 -0
- package/dist/multistream/sendSlotManager.d.ts +69 -0
- package/dist/networkQualityMonitor/index.d.ts +70 -0
- package/dist/networkQualityMonitor/index.js +221 -0
- package/dist/networkQualityMonitor/index.js.map +1 -0
- package/dist/peer-connection-manager/index.js +671 -0
- package/dist/peer-connection-manager/index.js.map +1 -0
- package/dist/peer-connection-manager/util.js +109 -0
- package/dist/peer-connection-manager/util.js.map +1 -0
- package/dist/personal-meeting-room/index.d.ts +47 -0
- package/dist/personal-meeting-room/request.d.ts +14 -0
- package/dist/personal-meeting-room/util.d.ts +2 -0
- package/dist/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/index.d.ts +105 -0
- package/dist/reachability/index.js +31 -3
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +39 -0
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/reactions.d.ts +4 -0
- package/dist/reactions/reactions.type.d.ts +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/collection.js +62 -0
- package/dist/roap/collection.js.map +1 -0
- package/dist/roap/handler.js +275 -0
- package/dist/roap/handler.js.map +1 -0
- package/dist/roap/index.d.ts +86 -0
- package/dist/roap/request.d.ts +39 -0
- package/dist/roap/state.js +126 -0
- package/dist/roap/state.js.map +1 -0
- package/dist/roap/turnDiscovery.d.ts +155 -0
- package/dist/roap/util.js +75 -0
- package/dist/roap/util.js.map +1 -0
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.d.ts +61 -0
- package/dist/rtcMetrics/index.js +197 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +36 -0
- package/dist/statsAnalyzer/global.js +126 -0
- package/dist/statsAnalyzer/global.js.map +1 -0
- package/dist/statsAnalyzer/index.d.ts +217 -0
- package/dist/statsAnalyzer/index.js +1013 -0
- package/dist/statsAnalyzer/index.js.map +1 -0
- package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/statsAnalyzer/mqaUtil.js +179 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -0
- package/dist/transcription/index.d.ts +64 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/constants.d.ts +9 -2
- package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/types/meeting/brbState.d.ts +54 -0
- package/dist/types/meeting/index.d.ts +23 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +3 -1
- package/dist/types/metrics/constants.d.ts +2 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/reachability/index.d.ts +9 -1
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +71 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +217 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/webinar/collection.d.ts +16 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +23 -23
- package/src/constants.ts +10 -2
- package/src/locus-info/selfUtils.ts +5 -0
- package/src/media/MediaConnectionAwaiter.ts +2 -0
- package/src/media/properties.ts +34 -13
- package/src/meeting/brbState.ts +169 -0
- package/src/meeting/index.ts +112 -26
- package/src/meeting/muteState.ts +1 -6
- package/src/meeting-info/meeting-info-v2.ts +9 -1
- package/src/meeting-info/utilv2.ts +14 -2
- package/src/metrics/constants.ts +2 -0
- package/src/reachability/index.ts +29 -1
- package/test/unit/spec/locus-info/selfUtils.js +10 -0
- package/test/unit/spec/media/properties.ts +15 -0
- package/test/unit/spec/meeting/brbState.ts +114 -0
- package/test/unit/spec/meeting/index.js +92 -30
- package/test/unit/spec/meeting/muteState.js +0 -24
- package/test/unit/spec/meeting-info/utilv2.js +9 -0
- package/test/unit/spec/reachability/index.ts +120 -10
@@ -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
|
+
}
|
@@ -0,0 +1,126 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.default = void 0;
|
9
|
+
var _javascriptStateMachine = _interopRequireDefault(require("javascript-state-machine"));
|
10
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
11
|
+
var _constants = require("../constants");
|
12
|
+
var shouldStep = function shouldStep(roap, meeting) {
|
13
|
+
var messageType = roap.msg.messageType;
|
14
|
+
if (meeting) {
|
15
|
+
if (messageType === _constants._OFFER_ && roap.remote && meeting.shareStatus === _constants._REQUESTED_) {
|
16
|
+
// The peer-connection is waiting for answer but got an offer Reset. Try to
|
17
|
+
// send the offer later after you accept the answer
|
18
|
+
return false;
|
19
|
+
}
|
20
|
+
// Assuming the mercury event has come first before the response for the event
|
21
|
+
// we have to wait for the response and trigger the ROAP request later on
|
22
|
+
if (!meeting.mediaProperties.peerConnection && messageType === _constants._ANSWER_) {
|
23
|
+
return false;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
_loggerProxy.default.logger.log('Roap:state#shouldStep --> RoapStateMachine: PeerConnectionState, ', meeting.mediaProperties.peerConnection.signalingState);
|
27
|
+
_loggerProxy.default.logger.log('Roap:state#shouldStep --> RoapStateMachine: success save proceeding with transition, ', roap.msg);
|
28
|
+
return true;
|
29
|
+
};
|
30
|
+
var handleTransition = function handleTransition(value, signal, meeting) {
|
31
|
+
_loggerProxy.default.logger.log("Roap:state#handleTransition --> current ".concat(value, " to ").concat(signal));
|
32
|
+
switch (value) {
|
33
|
+
case _constants.ROAP.ROAP_STATE.INIT:
|
34
|
+
if (signal === _constants.ROAP.ROAP_SIGNAL.RX_OFFER) {
|
35
|
+
return _constants.ROAP.ROAP_STATE.WAIT_TX_ANSWER;
|
36
|
+
}
|
37
|
+
if (signal === _constants.ROAP.ROAP_SIGNAL.TX_OFFER) {
|
38
|
+
return _constants.ROAP.ROAP_STATE.WAIT_RX_ANSWER;
|
39
|
+
}
|
40
|
+
return value;
|
41
|
+
case _constants.ROAP.ROAP_STATE.WAIT_RX_OFFER:
|
42
|
+
return value;
|
43
|
+
case _constants.ROAP.ROAP_STATE.WAIT_RX_ANSWER:
|
44
|
+
if (signal === _constants.ROAP.ROAP_SIGNAL.RX_ANSWER) {
|
45
|
+
// There is a race condition where the /call response comes after mercury event from the server
|
46
|
+
// As mercury sends roap event if it didnt get back a response. We can send the roap ok after that
|
47
|
+
if (meeting.mediaId) {
|
48
|
+
return _constants.ROAP.ROAP_STATE.WAIT_TX_OK;
|
49
|
+
}
|
50
|
+
_loggerProxy.default.logger.error('Roap:state#handleTransition --> Race Condition no mediaId, continuing.');
|
51
|
+
return value;
|
52
|
+
}
|
53
|
+
if (signal === _constants.ROAP.ROAP_SIGNAL.RX_OFFER) {
|
54
|
+
return _constants.ROAP.ROAP_STATE.GLARE;
|
55
|
+
}
|
56
|
+
return value;
|
57
|
+
case _constants.ROAP.ROAP_STATE.WAIT_TX_OFFER:
|
58
|
+
return value;
|
59
|
+
case _constants.ROAP.ROAP_STATE.WAIT_TX_ANSWER:
|
60
|
+
if (signal === _constants.ROAP.ROAP_SIGNAL.TX_ANSWER) {
|
61
|
+
return _constants.ROAP.ROAP_STATE.WAIT_RX_OK;
|
62
|
+
}
|
63
|
+
return value;
|
64
|
+
case _constants.ROAP.ROAP_STATE.WAIT_TX_OK:
|
65
|
+
if (signal === _constants.ROAP.ROAP_SIGNAL.TX_OK) {
|
66
|
+
return _constants.ROAP.ROAP_STATE.INIT;
|
67
|
+
}
|
68
|
+
return value;
|
69
|
+
case _constants.ROAP.ROAP_STATE.WAIT_RX_OK:
|
70
|
+
if (signal === _constants.ROAP.ROAP_SIGNAL.RX_OK) {
|
71
|
+
return _constants.ROAP.ROAP_STATE.INIT;
|
72
|
+
}
|
73
|
+
return value;
|
74
|
+
case _constants.ROAP.ROAP_STATE.ERROR:
|
75
|
+
// eslint-disable-next-line no-warning-comments
|
76
|
+
// TODO: resolve error state. Add a signal constant and handle the cleanup
|
77
|
+
return _constants.ROAP.ROAP_STATE.INIT;
|
78
|
+
case _constants.ROAP.ROAP_STATE.GLARE:
|
79
|
+
return _constants.ROAP.ROAP_STATE.WAIT_RX_ANSWER;
|
80
|
+
default:
|
81
|
+
return value;
|
82
|
+
}
|
83
|
+
};
|
84
|
+
var RoapStateMachine = {
|
85
|
+
/**
|
86
|
+
* @param {Roap} roapRef
|
87
|
+
* initializes the state machine
|
88
|
+
* @returns {StateMachine} an instance of a state machine
|
89
|
+
*/
|
90
|
+
createState: function createState() {
|
91
|
+
var RoapState = _javascriptStateMachine.default.factory({
|
92
|
+
init: _constants.ROAP.ROAP_STATE.INIT,
|
93
|
+
transitions: [{
|
94
|
+
name: _constants.ROAP.ROAP_TRANSITIONS.STEP,
|
95
|
+
from: '*',
|
96
|
+
/**
|
97
|
+
* Method to handle the transitions between states
|
98
|
+
* @param {String} signal
|
99
|
+
* @param {Meeting} meeting instance of a Meeting
|
100
|
+
* @param {Object} roap
|
101
|
+
* @returns {String} new state value
|
102
|
+
*/
|
103
|
+
to: function to(signal, meeting, roap) {
|
104
|
+
var value = this.state;
|
105
|
+
if (!shouldStep(roap, meeting)) {
|
106
|
+
return value;
|
107
|
+
}
|
108
|
+
return handleTransition(value, signal, meeting);
|
109
|
+
}
|
110
|
+
}],
|
111
|
+
methods: {
|
112
|
+
/**
|
113
|
+
* Event that fires after we've transitioned to a new state
|
114
|
+
* @param {Object} transition
|
115
|
+
* @returns {null}
|
116
|
+
*/
|
117
|
+
onAfterStep: function onAfterStep(transition) {
|
118
|
+
_loggerProxy.default.logger.log("Roap:state#onAfterStep --> RoapStateMachine->onAfterStep#fired! State changed from '".concat(transition.from, "' to '").concat(transition.to, "' with transition '").concat(transition.transition, "''."));
|
119
|
+
}
|
120
|
+
}
|
121
|
+
});
|
122
|
+
return new RoapState();
|
123
|
+
}
|
124
|
+
};
|
125
|
+
var _default = exports.default = RoapStateMachine;
|
126
|
+
//# sourceMappingURL=state.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_javascriptStateMachine","_interopRequireDefault","require","_loggerProxy","_constants","shouldStep","roap","meeting","messageType","msg","_OFFER_","remote","shareStatus","_REQUESTED_","mediaProperties","peerConnection","_ANSWER_","LoggerProxy","logger","log","signalingState","handleTransition","value","signal","concat","ROAP","ROAP_STATE","INIT","ROAP_SIGNAL","RX_OFFER","WAIT_TX_ANSWER","TX_OFFER","WAIT_RX_ANSWER","WAIT_RX_OFFER","RX_ANSWER","mediaId","WAIT_TX_OK","error","GLARE","WAIT_TX_OFFER","TX_ANSWER","WAIT_RX_OK","TX_OK","RX_OK","ERROR","RoapStateMachine","createState","RoapState","StateMachine","factory","init","transitions","name","ROAP_TRANSITIONS","STEP","from","to","state","methods","onAfterStep","transition","_default","exports","default"],"sources":["state.ts"],"sourcesContent":["import StateMachine from 'javascript-state-machine';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_, _ANSWER_, _REQUESTED_} from '../constants';\nimport Meeting from '../meeting';\n\nconst shouldStep = (roap, meeting) => {\n const {messageType} = roap.msg;\n\n if (meeting) {\n if (messageType === _OFFER_ && roap.remote && meeting.shareStatus === _REQUESTED_) {\n // The peer-connection is waiting for answer but got an offer Reset. Try to\n // send the offer later after you accept the answer\n return false;\n }\n // Assuming the mercury event has come first before the response for the event\n // we have to wait for the response and trigger the ROAP request later on\n if (!meeting.mediaProperties.peerConnection && messageType === _ANSWER_) {\n return false;\n }\n }\n LoggerProxy.logger.log(\n 'Roap:state#shouldStep --> RoapStateMachine: PeerConnectionState, ',\n meeting.mediaProperties.peerConnection.signalingState\n );\n LoggerProxy.logger.log(\n 'Roap:state#shouldStep --> RoapStateMachine: success save proceeding with transition, ',\n roap.msg\n );\n\n return true;\n};\n\nconst handleTransition = (value, signal, meeting) => {\n LoggerProxy.logger.log(`Roap:state#handleTransition --> current ${value} to ${signal}`);\n\n switch (value) {\n case ROAP.ROAP_STATE.INIT:\n if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {\n return ROAP.ROAP_STATE.WAIT_TX_ANSWER;\n }\n if (signal === ROAP.ROAP_SIGNAL.TX_OFFER) {\n return ROAP.ROAP_STATE.WAIT_RX_ANSWER;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n if (signal === ROAP.ROAP_SIGNAL.RX_ANSWER) {\n // There is a race condition where the /call response comes after mercury event from the server\n // As mercury sends roap event if it didnt get back a response. We can send the roap ok after that\n if (meeting.mediaId) {\n return ROAP.ROAP_STATE.WAIT_TX_OK;\n }\n LoggerProxy.logger.error(\n 'Roap:state#handleTransition --> Race Condition no mediaId, continuing.'\n );\n\n return value;\n }\n\n if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {\n return ROAP.ROAP_STATE.GLARE;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_OFFER:\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n if (signal === ROAP.ROAP_SIGNAL.TX_ANSWER) {\n return ROAP.ROAP_STATE.WAIT_RX_OK;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (signal === ROAP.ROAP_SIGNAL.TX_OK) {\n return ROAP.ROAP_STATE.INIT;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_OK:\n if (signal === ROAP.ROAP_SIGNAL.RX_OK) {\n return ROAP.ROAP_STATE.INIT;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.ERROR:\n // eslint-disable-next-line no-warning-comments\n // TODO: resolve error state. Add a signal constant and handle the cleanup\n return ROAP.ROAP_STATE.INIT;\n\n case ROAP.ROAP_STATE.GLARE:\n return ROAP.ROAP_STATE.WAIT_RX_ANSWER;\n default:\n return value;\n }\n};\n\nconst RoapStateMachine = {\n /**\n * @param {Roap} roapRef\n * initializes the state machine\n * @returns {StateMachine} an instance of a state machine\n */\n createState() {\n const RoapState = StateMachine.factory({\n init: ROAP.ROAP_STATE.INIT,\n transitions: [\n {\n name: ROAP.ROAP_TRANSITIONS.STEP,\n from: '*',\n /**\n * Method to handle the transitions between states\n * @param {String} signal\n * @param {Meeting} meeting instance of a Meeting\n * @param {Object} roap\n * @returns {String} new state value\n */\n to(signal: string, meeting: Meeting, roap: object) {\n const value = this.state;\n\n if (!shouldStep(roap, meeting)) {\n return value;\n }\n\n return handleTransition(value, signal, meeting);\n },\n },\n ],\n methods: {\n /**\n * Event that fires after we've transitioned to a new state\n * @param {Object} transition\n * @returns {null}\n */\n onAfterStep(transition: any) {\n LoggerProxy.logger.log(\n `Roap:state#onAfterStep --> RoapStateMachine->onAfterStep#fired! State changed from '${transition.from}' to '${transition.to}' with transition '${transition.transition}''.`\n );\n },\n },\n });\n\n return new RoapState();\n },\n};\n\nexport default RoapStateMachine;\n"],"mappings":";;;;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAGA,IAAMG,UAAU,GAAG,SAAbA,UAAUA,CAAIC,IAAI,EAAEC,OAAO,EAAK;EACpC,IAAOC,WAAW,GAAIF,IAAI,CAACG,GAAG,CAAvBD,WAAW;EAElB,IAAID,OAAO,EAAE;IACX,IAAIC,WAAW,KAAKE,kBAAO,IAAIJ,IAAI,CAACK,MAAM,IAAIJ,OAAO,CAACK,WAAW,KAAKC,sBAAW,EAAE;MACjF;MACA;MACA,OAAO,KAAK;IACd;IACA;IACA;IACA,IAAI,CAACN,OAAO,CAACO,eAAe,CAACC,cAAc,IAAIP,WAAW,KAAKQ,mBAAQ,EAAE;MACvE,OAAO,KAAK;IACd;EACF;EACAC,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,mEAAmE,EACnEZ,OAAO,CAACO,eAAe,CAACC,cAAc,CAACK,cACzC,CAAC;EACDH,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,uFAAuF,EACvFb,IAAI,CAACG,GACP,CAAC;EAED,OAAO,IAAI;AACb,CAAC;AAED,IAAMY,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,KAAK,EAAEC,MAAM,EAAEhB,OAAO,EAAK;EACnDU,oBAAW,CAACC,MAAM,CAACC,GAAG,4CAAAK,MAAA,CAA4CF,KAAK,UAAAE,MAAA,CAAOD,MAAM,CAAE,CAAC;EAEvF,QAAQD,KAAK;IACX,KAAKG,eAAI,CAACC,UAAU,CAACC,IAAI;MACvB,IAAIJ,MAAM,KAAKE,eAAI,CAACG,WAAW,CAACC,QAAQ,EAAE;QACxC,OAAOJ,eAAI,CAACC,UAAU,CAACI,cAAc;MACvC;MACA,IAAIP,MAAM,KAAKE,eAAI,CAACG,WAAW,CAACG,QAAQ,EAAE;QACxC,OAAON,eAAI,CAACC,UAAU,CAACM,cAAc;MACvC;MAEA,OAAOV,KAAK;IAEd,KAAKG,eAAI,CAACC,UAAU,CAACO,aAAa;MAChC,OAAOX,KAAK;IAEd,KAAKG,eAAI,CAACC,UAAU,CAACM,cAAc;MACjC,IAAIT,MAAM,KAAKE,eAAI,CAACG,WAAW,CAACM,SAAS,EAAE;QACzC;QACA;QACA,IAAI3B,OAAO,CAAC4B,OAAO,EAAE;UACnB,OAAOV,eAAI,CAACC,UAAU,CAACU,UAAU;QACnC;QACAnB,oBAAW,CAACC,MAAM,CAACmB,KAAK,CACtB,wEACF,CAAC;QAED,OAAOf,KAAK;MACd;MAEA,IAAIC,MAAM,KAAKE,eAAI,CAACG,WAAW,CAACC,QAAQ,EAAE;QACxC,OAAOJ,eAAI,CAACC,UAAU,CAACY,KAAK;MAC9B;MAEA,OAAOhB,KAAK;IAEd,KAAKG,eAAI,CAACC,UAAU,CAACa,aAAa;MAChC,OAAOjB,KAAK;IAEd,KAAKG,eAAI,CAACC,UAAU,CAACI,cAAc;MACjC,IAAIP,MAAM,KAAKE,eAAI,CAACG,WAAW,CAACY,SAAS,EAAE;QACzC,OAAOf,eAAI,CAACC,UAAU,CAACe,UAAU;MACnC;MAEA,OAAOnB,KAAK;IAEd,KAAKG,eAAI,CAACC,UAAU,CAACU,UAAU;MAC7B,IAAIb,MAAM,KAAKE,eAAI,CAACG,WAAW,CAACc,KAAK,EAAE;QACrC,OAAOjB,eAAI,CAACC,UAAU,CAACC,IAAI;MAC7B;MAEA,OAAOL,KAAK;IAEd,KAAKG,eAAI,CAACC,UAAU,CAACe,UAAU;MAC7B,IAAIlB,MAAM,KAAKE,eAAI,CAACG,WAAW,CAACe,KAAK,EAAE;QACrC,OAAOlB,eAAI,CAACC,UAAU,CAACC,IAAI;MAC7B;MAEA,OAAOL,KAAK;IAEd,KAAKG,eAAI,CAACC,UAAU,CAACkB,KAAK;MACxB;MACA;MACA,OAAOnB,eAAI,CAACC,UAAU,CAACC,IAAI;IAE7B,KAAKF,eAAI,CAACC,UAAU,CAACY,KAAK;MACxB,OAAOb,eAAI,CAACC,UAAU,CAACM,cAAc;IACvC;MACE,OAAOV,KAAK;EAChB;AACF,CAAC;AAED,IAAMuB,gBAAgB,GAAG;EACvB;AACF;AACA;AACA;AACA;EACEC,WAAW,WAAXA,WAAWA,CAAA,EAAG;IACZ,IAAMC,SAAS,GAAGC,+BAAY,CAACC,OAAO,CAAC;MACrCC,IAAI,EAAEzB,eAAI,CAACC,UAAU,CAACC,IAAI;MAC1BwB,WAAW,EAAE,CACX;QACEC,IAAI,EAAE3B,eAAI,CAAC4B,gBAAgB,CAACC,IAAI;QAChCC,IAAI,EAAE,GAAG;QACT;AACV;AACA;AACA;AACA;AACA;AACA;QACUC,EAAE,WAAFA,EAAEA,CAACjC,MAAc,EAAEhB,OAAgB,EAAED,IAAY,EAAE;UACjD,IAAMgB,KAAK,GAAG,IAAI,CAACmC,KAAK;UAExB,IAAI,CAACpD,UAAU,CAACC,IAAI,EAAEC,OAAO,CAAC,EAAE;YAC9B,OAAOe,KAAK;UACd;UAEA,OAAOD,gBAAgB,CAACC,KAAK,EAAEC,MAAM,EAAEhB,OAAO,CAAC;QACjD;MACF,CAAC,CACF;MACDmD,OAAO,EAAE;QACP;AACR;AACA;AACA;AACA;QACQC,WAAW,WAAXA,WAAWA,CAACC,UAAe,EAAE;UAC3B3C,oBAAW,CAACC,MAAM,CAACC,GAAG,wFAAAK,MAAA,CACmEoC,UAAU,CAACL,IAAI,YAAA/B,MAAA,CAASoC,UAAU,CAACJ,EAAE,yBAAAhC,MAAA,CAAsBoC,UAAU,CAACA,UAAU,QACzK,CAAC;QACH;MACF;IACF,CAAC,CAAC;IAEF,OAAO,IAAIb,SAAS,CAAC,CAAC;EACxB;AACF,CAAC;AAAC,IAAAc,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEalB,gBAAgB","ignoreList":[]}
|
@@ -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 {};
|
@@ -0,0 +1,75 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.default = void 0;
|
9
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
10
|
+
var _peerConnectionManager = _interopRequireDefault(require("../peer-connection-manager"));
|
11
|
+
var _constants = require("../constants");
|
12
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
13
|
+
var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
|
14
|
+
var RoapUtil = {};
|
15
|
+
var ROAP_ANSWER = _constants._ANSWER_.toLowerCase();
|
16
|
+
RoapUtil.shouldHandleMedia = function (meeting) {
|
17
|
+
var offer = meeting.mediaProperties.peerConnection && meeting.mediaProperties.peerConnection.signalingState === _constants.SDP.HAVE_LOCAL_OFFER;
|
18
|
+
if (offer) {
|
19
|
+
return false;
|
20
|
+
}
|
21
|
+
return true;
|
22
|
+
};
|
23
|
+
RoapUtil.handleError = function (pc) {
|
24
|
+
return _peerConnectionManager.default.rollBackLocalDescription({
|
25
|
+
peerConnection: pc
|
26
|
+
}).then(function () {
|
27
|
+
return _promise.default.resolve(true);
|
28
|
+
}).catch(function (err) {
|
29
|
+
_loggerProxy.default.logger.error("Roap:util#handleError --> ".concat(err));
|
30
|
+
return _promise.default.reject(err);
|
31
|
+
});
|
32
|
+
};
|
33
|
+
RoapUtil.findError = function (messageType, errorType, type) {
|
34
|
+
return (type === _constants.ROAP.RECEIVE_ROAP_MSG || type === _constants.ROAP.SEND_ROAP_MSG) && messageType === _constants._ERROR_ && errorType === _constants._CONFLICT_;
|
35
|
+
};
|
36
|
+
RoapUtil.ensureMeeting = function (meeting, type) {
|
37
|
+
if (type === _constants.ROAP.RECEIVE_ROAP_MSG || type === _constants.ROAP.SEND_ROAP_MSG || type === _constants.ROAP.SEND_ROAP_MSG_SUCCESS) {
|
38
|
+
if (!meeting) {
|
39
|
+
return false;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
return true;
|
43
|
+
};
|
44
|
+
RoapUtil.updatePeerConnection = function (meeting, session) {
|
45
|
+
return _peerConnectionManager.default.updatePeerConnection({
|
46
|
+
offerSdp: session.OFFER.sdps,
|
47
|
+
peerConnection: meeting.mediaProperties.peerConnection
|
48
|
+
}, {
|
49
|
+
meetingId: meeting.id,
|
50
|
+
remoteQualityLevel: meeting.mediaProperties.remoteQualityLevel
|
51
|
+
}).then(function (res) {
|
52
|
+
meeting.roap.lastRoapOffer = session.OFFER.sdps;
|
53
|
+
return res;
|
54
|
+
});
|
55
|
+
};
|
56
|
+
RoapUtil.setRemoteDescription = function (meeting, session) {
|
57
|
+
_loggerProxy.default.logger.info("Roap:util#setRemoteDescription --> Transmit WAIT_TX_OK, correlationId: ".concat(meeting.correlationId));
|
58
|
+
if (!(meeting && meeting.mediaProperties.peerConnection)) {
|
59
|
+
_loggerProxy.default.logger.error("Roap:util#setRemoteDescription --> DANGER no media or screen peer connection, correlationId: ".concat(meeting.correlationId));
|
60
|
+
return _promise.default.reject(new _parameter.default('Must provide a media or screen peer connection'));
|
61
|
+
}
|
62
|
+
return _peerConnectionManager.default.setRemoteSessionDetails(meeting.mediaProperties.peerConnection, ROAP_ANSWER, session.ANSWER.sdps[0], meeting.id).then(function () {
|
63
|
+
_loggerProxy.default.logger.info("Roap:util#setRemoteDescription --> Success for correlationId: ".concat(meeting.correlationId));
|
64
|
+
return {
|
65
|
+
seq: session.ANSWER.seq,
|
66
|
+
mediaId: meeting.mediaId,
|
67
|
+
correlationId: meeting.correlationId
|
68
|
+
};
|
69
|
+
}).catch(function (err) {
|
70
|
+
_loggerProxy.default.logger.error("Roap:util#setRemoteDescription --> ".concat(err));
|
71
|
+
throw err;
|
72
|
+
});
|
73
|
+
};
|
74
|
+
var _default = exports.default = RoapUtil;
|
75
|
+
//# sourceMappingURL=util.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_peerConnectionManager","_interopRequireDefault","require","_constants","_loggerProxy","_parameter","RoapUtil","ROAP_ANSWER","_ANSWER_","toLowerCase","shouldHandleMedia","meeting","offer","mediaProperties","peerConnection","signalingState","SDP","HAVE_LOCAL_OFFER","handleError","pc","PeerConnectionManager","rollBackLocalDescription","then","_promise","default","resolve","catch","err","LoggerProxy","logger","error","concat","reject","findError","messageType","errorType","type","ROAP","RECEIVE_ROAP_MSG","SEND_ROAP_MSG","_ERROR_","_CONFLICT_","ensureMeeting","SEND_ROAP_MSG_SUCCESS","updatePeerConnection","session","offerSdp","OFFER","sdps","meetingId","id","remoteQualityLevel","res","roap","lastRoapOffer","setRemoteDescription","info","correlationId","ParameterError","setRemoteSessionDetails","ANSWER","seq","mediaId","_default","exports"],"sources":["util.ts"],"sourcesContent":["import PeerConnectionManager from '../peer-connection-manager';\nimport {_ANSWER_, _ERROR_, _CONFLICT_, ROAP, SDP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport ParameterError from '../common/errors/parameter';\n\nconst RoapUtil: any = {};\nconst ROAP_ANSWER = _ANSWER_.toLowerCase();\n\nRoapUtil.shouldHandleMedia = (meeting) => {\n const offer =\n meeting.mediaProperties.peerConnection &&\n meeting.mediaProperties.peerConnection.signalingState === SDP.HAVE_LOCAL_OFFER;\n\n if (offer) {\n return false;\n }\n\n return true;\n};\n\nRoapUtil.handleError = (pc) =>\n PeerConnectionManager.rollBackLocalDescription({peerConnection: pc})\n .then(() => Promise.resolve(true))\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:util#handleError --> ${err}`);\n\n return Promise.reject(err);\n });\n\nRoapUtil.findError = (messageType, errorType, type) =>\n (type === ROAP.RECEIVE_ROAP_MSG || type === ROAP.SEND_ROAP_MSG) &&\n messageType === _ERROR_ &&\n errorType === _CONFLICT_;\n\nRoapUtil.ensureMeeting = (meeting, type) => {\n if (\n type === ROAP.RECEIVE_ROAP_MSG ||\n type === ROAP.SEND_ROAP_MSG ||\n type === ROAP.SEND_ROAP_MSG_SUCCESS\n ) {\n if (!meeting) {\n return false;\n }\n }\n\n return true;\n};\n\nRoapUtil.updatePeerConnection = (meeting, session) =>\n PeerConnectionManager.updatePeerConnection(\n {\n offerSdp: session.OFFER.sdps,\n peerConnection: meeting.mediaProperties.peerConnection,\n },\n {\n meetingId: meeting.id,\n remoteQualityLevel: meeting.mediaProperties.remoteQualityLevel,\n }\n ).then((res) => {\n meeting.roap.lastRoapOffer = session.OFFER.sdps;\n\n return res;\n });\n\nRoapUtil.setRemoteDescription = (meeting, session) => {\n LoggerProxy.logger.info(\n `Roap:util#setRemoteDescription --> Transmit WAIT_TX_OK, correlationId: ${meeting.correlationId}`\n );\n if (!(meeting && meeting.mediaProperties.peerConnection)) {\n LoggerProxy.logger.error(\n `Roap:util#setRemoteDescription --> DANGER no media or screen peer connection, correlationId: ${meeting.correlationId}`\n );\n\n return Promise.reject(new ParameterError('Must provide a media or screen peer connection'));\n }\n\n return PeerConnectionManager.setRemoteSessionDetails(\n meeting.mediaProperties.peerConnection,\n ROAP_ANSWER,\n session.ANSWER.sdps[0],\n meeting.id\n )\n .then(() => {\n LoggerProxy.logger.info(\n `Roap:util#setRemoteDescription --> Success for correlationId: ${meeting.correlationId}`\n );\n\n return {\n seq: session.ANSWER.seq,\n mediaId: meeting.mediaId,\n correlationId: meeting.correlationId,\n };\n })\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:util#setRemoteDescription --> ${err}`);\n throw err;\n });\n};\n\nexport default RoapUtil;\n"],"mappings":";;;;;;;;;AAAA,IAAAA,sBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,UAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAEA,IAAMI,QAAa,GAAG,CAAC,CAAC;AACxB,IAAMC,WAAW,GAAGC,mBAAQ,CAACC,WAAW,CAAC,CAAC;AAE1CH,QAAQ,CAACI,iBAAiB,GAAG,UAACC,OAAO,EAAK;EACxC,IAAMC,KAAK,GACTD,OAAO,CAACE,eAAe,CAACC,cAAc,IACtCH,OAAO,CAACE,eAAe,CAACC,cAAc,CAACC,cAAc,KAAKC,cAAG,CAACC,gBAAgB;EAEhF,IAAIL,KAAK,EAAE;IACT,OAAO,KAAK;EACd;EAEA,OAAO,IAAI;AACb,CAAC;AAEDN,QAAQ,CAACY,WAAW,GAAG,UAACC,EAAE;EAAA,OACxBC,8BAAqB,CAACC,wBAAwB,CAAC;IAACP,cAAc,EAAEK;EAAE,CAAC,CAAC,CACjEG,IAAI,CAAC;IAAA,OAAMC,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAAC,IAAI,CAAC;EAAA,EAAC,CACjCC,KAAK,CAAC,UAACC,GAAG,EAAK;IACdC,oBAAW,CAACC,MAAM,CAACC,KAAK,8BAAAC,MAAA,CAA8BJ,GAAG,CAAE,CAAC;IAE5D,OAAOJ,QAAA,CAAAC,OAAA,CAAQQ,MAAM,CAACL,GAAG,CAAC;EAC5B,CAAC,CAAC;AAAA;AAENrB,QAAQ,CAAC2B,SAAS,GAAG,UAACC,WAAW,EAAEC,SAAS,EAAEC,IAAI;EAAA,OAChD,CAACA,IAAI,KAAKC,eAAI,CAACC,gBAAgB,IAAIF,IAAI,KAAKC,eAAI,CAACE,aAAa,KAC9DL,WAAW,KAAKM,kBAAO,IACvBL,SAAS,KAAKM,qBAAU;AAAA;AAE1BnC,QAAQ,CAACoC,aAAa,GAAG,UAAC/B,OAAO,EAAEyB,IAAI,EAAK;EAC1C,IACEA,IAAI,KAAKC,eAAI,CAACC,gBAAgB,IAC9BF,IAAI,KAAKC,eAAI,CAACE,aAAa,IAC3BH,IAAI,KAAKC,eAAI,CAACM,qBAAqB,EACnC;IACA,IAAI,CAAChC,OAAO,EAAE;MACZ,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb,CAAC;AAEDL,QAAQ,CAACsC,oBAAoB,GAAG,UAACjC,OAAO,EAAEkC,OAAO;EAAA,OAC/CzB,8BAAqB,CAACwB,oBAAoB,CACxC;IACEE,QAAQ,EAAED,OAAO,CAACE,KAAK,CAACC,IAAI;IAC5BlC,cAAc,EAAEH,OAAO,CAACE,eAAe,CAACC;EAC1C,CAAC,EACD;IACEmC,SAAS,EAAEtC,OAAO,CAACuC,EAAE;IACrBC,kBAAkB,EAAExC,OAAO,CAACE,eAAe,CAACsC;EAC9C,CACF,CAAC,CAAC7B,IAAI,CAAC,UAAC8B,GAAG,EAAK;IACdzC,OAAO,CAAC0C,IAAI,CAACC,aAAa,GAAGT,OAAO,CAACE,KAAK,CAACC,IAAI;IAE/C,OAAOI,GAAG;EACZ,CAAC,CAAC;AAAA;AAEJ9C,QAAQ,CAACiD,oBAAoB,GAAG,UAAC5C,OAAO,EAAEkC,OAAO,EAAK;EACpDjB,oBAAW,CAACC,MAAM,CAAC2B,IAAI,2EAAAzB,MAAA,CACqDpB,OAAO,CAAC8C,aAAa,CACjG,CAAC;EACD,IAAI,EAAE9C,OAAO,IAAIA,OAAO,CAACE,eAAe,CAACC,cAAc,CAAC,EAAE;IACxDc,oBAAW,CAACC,MAAM,CAACC,KAAK,iGAAAC,MAAA,CAC0EpB,OAAO,CAAC8C,aAAa,CACvH,CAAC;IAED,OAAOlC,QAAA,CAAAC,OAAA,CAAQQ,MAAM,CAAC,IAAI0B,kBAAc,CAAC,gDAAgD,CAAC,CAAC;EAC7F;EAEA,OAAOtC,8BAAqB,CAACuC,uBAAuB,CAClDhD,OAAO,CAACE,eAAe,CAACC,cAAc,EACtCP,WAAW,EACXsC,OAAO,CAACe,MAAM,CAACZ,IAAI,CAAC,CAAC,CAAC,EACtBrC,OAAO,CAACuC,EACV,CAAC,CACE5B,IAAI,CAAC,YAAM;IACVM,oBAAW,CAACC,MAAM,CAAC2B,IAAI,kEAAAzB,MAAA,CAC4CpB,OAAO,CAAC8C,aAAa,CACxF,CAAC;IAED,OAAO;MACLI,GAAG,EAAEhB,OAAO,CAACe,MAAM,CAACC,GAAG;MACvBC,OAAO,EAAEnD,OAAO,CAACmD,OAAO;MACxBL,aAAa,EAAE9C,OAAO,CAAC8C;IACzB,CAAC;EACH,CAAC,CAAC,CACD/B,KAAK,CAAC,UAACC,GAAG,EAAK;IACdC,oBAAW,CAACC,MAAM,CAACC,KAAK,uCAAAC,MAAA,CAAuCJ,GAAG,CAAE,CAAC;IACrE,MAAMA,GAAG;EACX,CAAC,CAAC;AACN,CAAC;AAAC,IAAAoC,QAAA,GAAAC,OAAA,CAAAxC,OAAA,GAEalB,QAAQ","ignoreList":[]}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports.default = void 0;
|
8
|
+
var RTC_METRICS = exports.default = {
|
9
|
+
APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'
|
10
|
+
};
|
11
|
+
//# sourceMappingURL=constants.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["RTC_METRICS","exports","default","APP_ID"],"sources":["constants.ts"],"sourcesContent":["const RTC_METRICS = {APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'};\n\nexport {RTC_METRICS as default};\n"],"mappings":";;;;;;;AAAA,IAAMA,WAAW,GAAAC,OAAA,CAAAC,OAAA,GAAG;EAACC,MAAM,EAAE;AAAsC,CAAC"}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
/**
|
2
|
+
* Rtc Metrics
|
3
|
+
*/
|
4
|
+
export default class RtcMetrics {
|
5
|
+
/**
|
6
|
+
* Array of MetricData items to be sent to the metrics service.
|
7
|
+
*/
|
8
|
+
metricsQueue: any[];
|
9
|
+
intervalId: number;
|
10
|
+
webex: any;
|
11
|
+
meetingId: string;
|
12
|
+
correlationId: string;
|
13
|
+
connectionId: string;
|
14
|
+
/**
|
15
|
+
* Initialize the interval.
|
16
|
+
*
|
17
|
+
* @param {object} webex - The main `webex` object.
|
18
|
+
* @param {string} meetingId - The meeting id.
|
19
|
+
* @param {string} correlationId - The correlation id.
|
20
|
+
*/
|
21
|
+
constructor(webex: any, meetingId: any, correlationId: any);
|
22
|
+
/**
|
23
|
+
* Check to see if the metrics queue has any items.
|
24
|
+
*
|
25
|
+
* @returns {void}
|
26
|
+
*/
|
27
|
+
sendMetricsInQueue(): void;
|
28
|
+
/**
|
29
|
+
* Add metrics items to the metrics queue.
|
30
|
+
*
|
31
|
+
* @param {object} data - An object with a payload array of metrics items.
|
32
|
+
*
|
33
|
+
* @returns {void}
|
34
|
+
*/
|
35
|
+
addMetrics(data: any): void;
|
36
|
+
/**
|
37
|
+
* Clear the metrics interval.
|
38
|
+
*
|
39
|
+
* @returns {void}
|
40
|
+
*/
|
41
|
+
closeMetrics(): void;
|
42
|
+
/**
|
43
|
+
* Anonymize IP addresses.
|
44
|
+
*
|
45
|
+
* @param {array} stats - An RTCStatsReport organized into an array of strings.
|
46
|
+
* @returns {string}
|
47
|
+
*/
|
48
|
+
anonymizeIp(stats: string): string;
|
49
|
+
/**
|
50
|
+
* Set a new connection id.
|
51
|
+
*
|
52
|
+
* @returns {void}
|
53
|
+
*/
|
54
|
+
private setNewConnectionId;
|
55
|
+
/**
|
56
|
+
* Send metrics to the metrics service.
|
57
|
+
*
|
58
|
+
* @returns {void}
|
59
|
+
*/
|
60
|
+
private sendMetrics;
|
61
|
+
}
|