@webex/plugin-meetings 2.37.0 → 2.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +5 -26
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +5 -26
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +6 -27
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +5 -26
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +5 -26
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +4 -25
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +5 -26
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +5 -26
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +7 -46
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -24
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +35 -61
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +1 -5
- package/dist/config.js.map +1 -1
- package/dist/constants.js +46 -42
- package/dist/constants.js.map +1 -1
- package/dist/index.js +1 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +10 -28
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +101 -193
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +0 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +87 -123
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +16 -81
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +74 -137
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +64 -110
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +3 -17
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -12
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.js +120 -192
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +0 -13
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +812 -1487
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +31 -78
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +157 -227
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +25 -169
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +10 -33
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +179 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +3 -21
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +451 -570
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +7 -30
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +94 -148
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -89
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +17 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +2 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +68 -184
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +21 -56
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -38
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +0 -2
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +48 -136
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +28 -57
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +60 -190
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/peer-connection-manager/util.js +10 -24
- package/dist/peer-connection-manager/util.js.map +1 -1
- package/dist/personal-meeting-room/index.js +10 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +100 -166
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +2 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.js +0 -2
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +0 -5
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +294 -468
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/collection.js +1 -12
- package/dist/roap/collection.js.map +1 -1
- package/dist/roap/handler.js +15 -85
- package/dist/roap/handler.js.map +1 -1
- package/dist/roap/index.js +42 -94
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +81 -148
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.js +2 -39
- package/dist/roap/state.js.map +1 -1
- package/dist/roap/turnDiscovery.js +8 -52
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.js +0 -26
- package/dist/roap/util.js.map +1 -1
- package/dist/statsAnalyzer/global.js +0 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +68 -168
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +54 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +13 -45
- package/dist/transcription/index.js.map +1 -1
- package/internal-README.md +7 -6
- package/package.json +17 -17
- package/src/common/browser-detection.ts +9 -6
- package/src/common/collection.ts +3 -1
- package/src/common/errors/captcha-error.ts +6 -6
- package/src/common/errors/intent-to-join.ts +6 -6
- package/src/common/errors/join-meeting.ts +12 -8
- package/src/common/errors/media.ts +6 -6
- package/src/common/errors/parameter.ts +9 -6
- package/src/common/errors/password-error.ts +6 -6
- package/src/common/errors/permission.ts +5 -5
- package/src/common/errors/reconnection.ts +6 -6
- package/src/common/errors/stats.ts +6 -6
- package/src/common/errors/webex-errors.ts +7 -5
- package/src/common/errors/webex-meetings-error.ts +1 -1
- package/src/common/events/events-scope.ts +5 -1
- package/src/common/events/events.ts +5 -1
- package/src/common/events/trigger-proxy.ts +8 -3
- package/src/common/events/util.ts +1 -2
- package/src/common/logs/logger-proxy.ts +21 -10
- package/src/common/logs/request.ts +11 -8
- package/src/config.ts +11 -11
- package/src/constants.ts +138 -119
- package/src/index.js +1 -1
- package/src/locus-info/controlsUtils.ts +34 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +25 -34
- package/src/locus-info/infoUtils.ts +12 -4
- package/src/locus-info/mediaSharesUtils.ts +4 -4
- package/src/locus-info/parser.ts +45 -68
- package/src/locus-info/selfUtils.ts +106 -57
- package/src/media/index.ts +118 -109
- package/src/media/properties.ts +26 -20
- package/src/media/util.ts +2 -2
- package/src/mediaQualityMetrics/config.ts +46 -46
- package/src/meeting/effectsState.ts +35 -35
- package/src/meeting/in-meeting-actions.ts +7 -3
- package/src/meeting/index.ts +1435 -1210
- package/src/meeting/muteState.ts +62 -31
- package/src/meeting/request.ts +160 -113
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +131 -90
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +106 -108
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +59 -53
- package/src/meetings/collection.ts +1 -1
- package/src/meetings/index.ts +513 -441
- package/src/meetings/request.ts +26 -24
- package/src/meetings/util.ts +26 -23
- package/src/member/index.ts +55 -49
- package/src/member/util.ts +26 -13
- package/src/members/collection.ts +0 -1
- package/src/members/index.ts +172 -121
- package/src/members/request.ts +46 -14
- package/src/members/util.ts +44 -42
- package/src/metrics/config.ts +254 -81
- package/src/metrics/constants.ts +0 -2
- package/src/metrics/index.ts +84 -71
- package/src/networkQualityMonitor/index.ts +20 -23
- package/src/peer-connection-manager/index.ts +321 -241
- package/src/peer-connection-manager/util.ts +4 -2
- package/src/personal-meeting-room/index.ts +12 -16
- package/src/personal-meeting-room/request.ts +10 -3
- package/src/personal-meeting-room/util.ts +3 -3
- package/src/reachability/index.ts +61 -59
- package/src/reachability/request.ts +36 -32
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +2 -3
- package/src/reconnection-manager/index.ts +159 -98
- package/src/roap/collection.ts +2 -4
- package/src/roap/handler.ts +63 -32
- package/src/roap/index.ts +78 -58
- package/src/roap/request.ts +69 -54
- package/src/roap/state.ts +17 -11
- package/src/roap/turnDiscovery.ts +60 -31
- package/src/roap/util.ts +39 -31
- package/src/statsAnalyzer/global.ts +30 -33
- package/src/statsAnalyzer/index.ts +397 -169
- package/src/statsAnalyzer/mqaUtil.ts +178 -72
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/journey.js +666 -462
- package/test/integration/spec/space-meeting.js +318 -203
- package/test/integration/spec/transcription.js +6 -7
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +5 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1 -2
- package/test/unit/spec/locus-info/infoUtils.js +24 -31
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +72 -103
- package/test/unit/spec/locus-info/selfUtils.js +21 -12
- package/test/unit/spec/meeting/effectsState.js +33 -45
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
- package/test/unit/spec/meeting/index.js +1141 -649
- package/test/unit/spec/meeting/muteState.js +42 -33
- package/test/unit/spec/meeting/request.js +56 -45
- package/test/unit/spec/meeting/utils.js +66 -49
- package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +110 -74
- package/test/unit/spec/meetings/collection.js +1 -1
- package/test/unit/spec/meetings/index.js +438 -257
- package/test/unit/spec/meetings/utils.js +14 -12
- package/test/unit/spec/member/index.js +0 -1
- package/test/unit/spec/member/util.js +5 -6
- package/test/unit/spec/members/index.js +84 -35
- package/test/unit/spec/members/request.js +29 -20
- package/test/unit/spec/members/utils.js +8 -5
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/networkQualityMonitor/index.js +21 -15
- package/test/unit/spec/peerconnection-manager/index.js +88 -58
- package/test/unit/spec/peerconnection-manager/utils.js +5 -4
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +7 -8
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +9 -11
- package/test/unit/spec/reconnection-manager/index.js +14 -17
- package/test/unit/spec/roap/index.ts +18 -8
- package/test/unit/spec/roap/turnDiscovery.ts +22 -19
- package/test/unit/spec/roap/util.js +3 -3
- package/test/unit/spec/stats-analyzer/index.js +29 -24
- package/test/utils/cmr.js +44 -42
- package/test/utils/testUtils.js +83 -74
- package/test/utils/webex-config.js +18 -18
- package/test/utils/webex-test-users.js +53 -50
package/dist/roap/request.js
CHANGED
|
@@ -1,82 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
5
4
|
var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
6
|
-
|
|
7
5
|
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
8
|
-
|
|
9
6
|
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
10
|
-
|
|
11
7
|
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
12
|
-
|
|
13
8
|
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
14
|
-
|
|
15
9
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
16
|
-
|
|
17
10
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
18
|
-
|
|
19
11
|
_Object$defineProperty(exports, "__esModule", {
|
|
20
12
|
value: true
|
|
21
13
|
});
|
|
22
|
-
|
|
23
14
|
exports.default = void 0;
|
|
24
|
-
|
|
25
15
|
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
26
|
-
|
|
27
16
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
28
|
-
|
|
29
17
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
30
|
-
|
|
31
18
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
32
|
-
|
|
33
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
34
|
-
|
|
35
20
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
36
|
-
|
|
37
21
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
38
|
-
|
|
39
22
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
40
|
-
|
|
41
23
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
42
|
-
|
|
43
24
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
44
|
-
|
|
45
25
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
46
|
-
|
|
47
26
|
var _webexCore = require("@webex/webex-core");
|
|
48
|
-
|
|
49
27
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
50
|
-
|
|
51
28
|
var _constants = require("../constants");
|
|
52
|
-
|
|
53
29
|
var _metrics = _interopRequireDefault(require("../metrics"));
|
|
54
|
-
|
|
55
30
|
var _config = require("../metrics/config");
|
|
56
|
-
|
|
57
31
|
var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
|
|
58
|
-
|
|
59
32
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
60
|
-
|
|
61
33
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
62
|
-
|
|
63
34
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
64
|
-
|
|
65
35
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
66
|
-
|
|
67
36
|
/**
|
|
68
37
|
* @class RoapRequest
|
|
69
38
|
*/
|
|
70
39
|
var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
71
40
|
(0, _inherits2.default)(RoapRequest, _StatelessWebexPlugin);
|
|
72
|
-
|
|
73
41
|
var _super = _createSuper(RoapRequest);
|
|
74
|
-
|
|
75
42
|
function RoapRequest() {
|
|
76
43
|
(0, _classCallCheck2.default)(this, RoapRequest);
|
|
77
44
|
return _super.apply(this, arguments);
|
|
78
45
|
}
|
|
79
|
-
|
|
80
46
|
(0, _createClass2.default)(RoapRequest, [{
|
|
81
47
|
key: "attachRechabilityData",
|
|
82
48
|
value:
|
|
@@ -85,14 +51,14 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
85
51
|
* @param {Object} options
|
|
86
52
|
* @returns {Promise} returns a promise that resolves/rejects whatever the request does
|
|
87
53
|
*/
|
|
54
|
+
|
|
88
55
|
function attachRechabilityData(localSdp) {
|
|
89
56
|
var reachabilityData = window.localStorage.getItem(_constants.REACHABILITY.localStorage);
|
|
90
|
-
|
|
91
57
|
if (reachabilityData) {
|
|
92
58
|
try {
|
|
93
59
|
var reachabilityResult = JSON.parse(reachabilityData);
|
|
94
|
-
/* istanbul ignore else */
|
|
95
60
|
|
|
61
|
+
/* istanbul ignore else */
|
|
96
62
|
if (reachabilityResult && (0, _keys.default)(reachabilityResult).length) {
|
|
97
63
|
localSdp.reachability = reachabilityResult;
|
|
98
64
|
}
|
|
@@ -100,115 +66,94 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
100
66
|
_loggerProxy.default.logger.error("Roap:request#attachReachabilityData --> Error in parsing reachability data: ".concat(e));
|
|
101
67
|
}
|
|
102
68
|
}
|
|
103
|
-
|
|
104
69
|
return localSdp;
|
|
105
70
|
}
|
|
106
71
|
}, {
|
|
107
72
|
key: "joinMeetingWithRoap",
|
|
108
73
|
value: function joinMeetingWithRoap(options) {
|
|
109
74
|
var _this = this;
|
|
110
|
-
|
|
111
75
|
_loggerProxy.default.logger.info('Roap:request#joinMeetingWithRoap --> Join locus with roap');
|
|
112
|
-
|
|
113
76
|
_loggerProxy.default.logger.info("Roap:request#joinMeetingWithRoap --> Local SDP: ".concat(options.roapMessage));
|
|
114
|
-
|
|
115
77
|
return _promise.default.resolve().then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
116
78
|
var _options$preferTransc;
|
|
117
|
-
|
|
118
79
|
var deviceUrl, url, body;
|
|
119
80
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
120
|
-
while (1) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
preferTranscoding: (_options$preferTransc = options.preferTranscoding) !== null && _options$preferTransc !== void 0 ? _options$preferTransc : true
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
if (!options.locusUrl) {
|
|
143
|
-
_context.next = 7;
|
|
144
|
-
break;
|
|
81
|
+
while (1) switch (_context.prev = _context.next) {
|
|
82
|
+
case 0:
|
|
83
|
+
// @ts-ignore
|
|
84
|
+
deviceUrl = _this.webex.internal.device.url;
|
|
85
|
+
url = '';
|
|
86
|
+
body = {
|
|
87
|
+
deviceUrl: deviceUrl,
|
|
88
|
+
usingResource: options.resourceId || null,
|
|
89
|
+
correlationId: options.correlationId,
|
|
90
|
+
localMedias: [{
|
|
91
|
+
localSdp: (0, _stringify.default)(_this.attachRechabilityData({
|
|
92
|
+
roapMessage: options.roapMessage,
|
|
93
|
+
audioMuted: false,
|
|
94
|
+
videoMuted: false
|
|
95
|
+
}))
|
|
96
|
+
}],
|
|
97
|
+
clientMediaPreferences: {
|
|
98
|
+
preferTranscoding: (_options$preferTransc = options.preferTranscoding) !== null && _options$preferTransc !== void 0 ? _options$preferTransc : true
|
|
145
99
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
_context.next =
|
|
149
|
-
break;
|
|
150
|
-
|
|
151
|
-
case 7:
|
|
152
|
-
if (!options.sipUrl) {
|
|
153
|
-
_context.next = 21;
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
_context.prev = 8;
|
|
158
|
-
_context.next = 11;
|
|
159
|
-
return _this.webex.internal.services.waitForCatalog('postauth');
|
|
160
|
-
|
|
161
|
-
case 11:
|
|
162
|
-
// @ts-ignore
|
|
163
|
-
url = "".concat(_this.webex.internal.services.get('locus'), "/").concat(_constants.LOCI, "/").concat(_constants.CALL);
|
|
164
|
-
body.invitee = {
|
|
165
|
-
address: options.sipTarget
|
|
166
|
-
};
|
|
167
|
-
_context.next = 19;
|
|
100
|
+
};
|
|
101
|
+
if (!options.locusUrl) {
|
|
102
|
+
_context.next = 7;
|
|
168
103
|
break;
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
throw _context.t0;
|
|
177
|
-
|
|
178
|
-
case 19:
|
|
179
|
-
_context.next = 22;
|
|
104
|
+
}
|
|
105
|
+
url = "".concat(options.locusUrl, "/").concat(_constants.PARTICIPANT);
|
|
106
|
+
_context.next = 22;
|
|
107
|
+
break;
|
|
108
|
+
case 7:
|
|
109
|
+
if (!options.sipUrl) {
|
|
110
|
+
_context.next = 21;
|
|
180
111
|
break;
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
112
|
+
}
|
|
113
|
+
_context.prev = 8;
|
|
114
|
+
_context.next = 11;
|
|
115
|
+
return _this.webex.internal.services.waitForCatalog('postauth');
|
|
116
|
+
case 11:
|
|
117
|
+
// @ts-ignore
|
|
118
|
+
url = "".concat(_this.webex.internal.services.get('locus'), "/").concat(_constants.LOCI, "/").concat(_constants.CALL);
|
|
119
|
+
body.invitee = {
|
|
120
|
+
address: options.sipTarget
|
|
121
|
+
};
|
|
122
|
+
_context.next = 19;
|
|
123
|
+
break;
|
|
124
|
+
case 15:
|
|
125
|
+
_context.prev = 15;
|
|
126
|
+
_context.t0 = _context["catch"](8);
|
|
127
|
+
_loggerProxy.default.logger.error("Roap:request#joinMeetingWithRoap --> ".concat(_context.t0));
|
|
128
|
+
throw _context.t0;
|
|
129
|
+
case 19:
|
|
130
|
+
_context.next = 22;
|
|
131
|
+
break;
|
|
132
|
+
case 21:
|
|
133
|
+
throw new _parameter.default('Must provide a locusUrl or sipTarget');
|
|
134
|
+
case 22:
|
|
135
|
+
return _context.abrupt("return", _this.webex.request({
|
|
136
|
+
method: _constants.HTTP_VERBS.POST,
|
|
137
|
+
uri: url,
|
|
138
|
+
body: body
|
|
139
|
+
}).then(function (res) {
|
|
140
|
+
var locus = res.body.locus;
|
|
141
|
+
locus.roapSeq = options.roapMessage.seq;
|
|
142
|
+
locus.id = locus.url.split('/').pop();
|
|
143
|
+
_loggerProxy.default.logger.info("Roap:request#joinMeetingWithRoap --> Joined locus [".concat(locus.id, "][").concat(locus.fullState.lastActive, "]"));
|
|
144
|
+
return locus;
|
|
145
|
+
}).catch(function (err) {
|
|
146
|
+
_loggerProxy.default.logger.error("Roap:request#joinMeetingWithRoap --> failed with error: ".concat(err));
|
|
147
|
+
throw err;
|
|
148
|
+
}));
|
|
149
|
+
case 23:
|
|
150
|
+
case "end":
|
|
151
|
+
return _context.stop();
|
|
208
152
|
}
|
|
209
153
|
}, _callee, null, [[8, 15]]);
|
|
210
154
|
})));
|
|
211
155
|
}
|
|
156
|
+
|
|
212
157
|
/**
|
|
213
158
|
* Sends a ROAP message
|
|
214
159
|
* @param {Object} options
|
|
@@ -221,34 +166,28 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
221
166
|
* @param {String} options.meetingId
|
|
222
167
|
* @returns {Promise} returns the response/failure of the request
|
|
223
168
|
*/
|
|
224
|
-
|
|
225
169
|
}, {
|
|
226
170
|
key: "sendRoap",
|
|
227
171
|
value: function sendRoap(options) {
|
|
228
172
|
var _options$preferTransc2;
|
|
229
|
-
|
|
230
173
|
var roapMessage = options.roapMessage,
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
174
|
+
locusSelfUrl = options.locusSelfUrl,
|
|
175
|
+
mediaId = options.mediaId,
|
|
176
|
+
correlationId = options.correlationId,
|
|
177
|
+
meetingId = options.meetingId;
|
|
236
178
|
if (!mediaId) {
|
|
237
179
|
_loggerProxy.default.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
|
|
238
180
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
181
|
+
var mediaUrl = "".concat(locusSelfUrl, "/").concat(_constants.MEDIA);
|
|
182
|
+
// @ts-ignore
|
|
242
183
|
var deviceUrl = this.webex.internal.device.url;
|
|
243
|
-
|
|
244
184
|
_loggerProxy.default.logger.info("Roap:request#sendRoap --> ".concat(mediaUrl, " \n ").concat(roapMessage.messageType, " \n seq:").concat(roapMessage.seq));
|
|
245
|
-
|
|
246
185
|
_metrics.default.postEvent({
|
|
247
186
|
event: _config.eventType.MEDIA_REQUEST,
|
|
248
187
|
meetingId: meetingId
|
|
249
|
-
});
|
|
250
|
-
|
|
188
|
+
});
|
|
251
189
|
|
|
190
|
+
// @ts-ignore
|
|
252
191
|
return this.webex.request({
|
|
253
192
|
uri: mediaUrl,
|
|
254
193
|
method: _constants.HTTP_VERBS.PUT,
|
|
@@ -277,13 +216,11 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
277
216
|
_metrics.default.postEvent({
|
|
278
217
|
event: _config.eventType.MEDIA_RESPONSE,
|
|
279
218
|
meetingId: meetingId
|
|
280
|
-
});
|
|
281
|
-
|
|
219
|
+
});
|
|
282
220
|
|
|
221
|
+
// always it will be the first mediaConnection Object
|
|
283
222
|
var mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];
|
|
284
|
-
|
|
285
223
|
_loggerProxy.default.logger.info("Roap:request#sendRoap --> response:".concat((0, _stringify.default)(mediaConnections, null, 2), "'\n StatusCode:'").concat(res.statusCode));
|
|
286
|
-
|
|
287
224
|
var locus = res.body.locus;
|
|
288
225
|
locus.roapSeq = options.roapMessage.seq;
|
|
289
226
|
return _objectSpread({
|
|
@@ -299,17 +236,13 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
299
236
|
error: _metrics.default.parseLocusError(err, true)
|
|
300
237
|
}
|
|
301
238
|
});
|
|
302
|
-
|
|
303
239
|
_loggerProxy.default.logger.error("Roap:request#sendRoap --> Error:".concat((0, _stringify.default)(err, null, 2)));
|
|
304
|
-
|
|
305
240
|
_loggerProxy.default.logger.error("Roap:request#sendRoapRequest --> errorBody:".concat((0, _stringify.default)(roapMessage, null, 2), " + '\\n mediaId:'").concat(options.mediaId));
|
|
306
|
-
|
|
307
241
|
throw err;
|
|
308
242
|
});
|
|
309
243
|
}
|
|
310
244
|
}]);
|
|
311
245
|
return RoapRequest;
|
|
312
246
|
}(_webexCore.StatelessWebexPlugin);
|
|
313
|
-
|
|
314
247
|
exports.default = RoapRequest;
|
|
315
248
|
//# sourceMappingURL=request.js.map
|
package/dist/roap/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["RoapRequest","localSdp","reachabilityData","window","localStorage","getItem","REACHABILITY","reachabilityResult","JSON","parse","length","reachability","e","LoggerProxy","logger","error","options","info","roapMessage","resolve","then","deviceUrl","webex","internal","device","url","body","usingResource","resourceId","correlationId","localMedias","attachRechabilityData","audioMuted","videoMuted","clientMediaPreferences","preferTranscoding","locusUrl","PARTICIPANT","sipUrl","services","waitForCatalog","get","LOCI","CALL","invitee","address","sipTarget","ParameterError","request","method","HTTP_VERBS","POST","uri","res","locus","roapSeq","seq","id","split","pop","fullState","lastActive","catch","err","locusSelfUrl","mediaId","meetingId","mediaUrl","MEDIA","messageType","Metrics","postEvent","event","eventType","MEDIA_REQUEST","PUT","deviceType","config","meetings","MEDIA_RESPONSE","mediaConnections","statusCode","data","parseLocusError","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["/* global window */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n PARTICIPANT,\n LOCI,\n CALL,\n MEDIA,\n HTTP_VERBS,\n REACHABILITY\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport ParameterError from '../common/errors/parameter';\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Joins a meeting via ROAP\n * @param {Object} options\n * @returns {Promise} returns a promise that resolves/rejects whatever the request does\n */\n\n\n attachRechabilityData(localSdp) {\n const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);\n\n if (reachabilityData) {\n try {\n const reachabilityResult = JSON.parse(reachabilityData);\n\n /* istanbul ignore else */\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`);\n }\n }\n\n return localSdp;\n }\n\n joinMeetingWithRoap(options) {\n LoggerProxy.logger.info('Roap:request#joinMeetingWithRoap --> Join locus with roap');\n LoggerProxy.logger.info(`Roap:request#joinMeetingWithRoap --> Local SDP: ${options.roapMessage}`);\n\n return Promise.resolve().then(async () => {\n // @ts-ignore\n const deviceUrl = this.webex.internal.device.url;\n let url = '';\n\n const body: any = {\n deviceUrl,\n usingResource: options.resourceId || null,\n correlationId: options.correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(this.attachRechabilityData({\n roapMessage: options.roapMessage,\n audioMuted: false,\n videoMuted: false\n }))\n }\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n };\n\n if (options.locusUrl) {\n url = `${options.locusUrl}/${PARTICIPANT}`;\n }\n else if (options.sipUrl) {\n try {\n // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;\n body.invitee = {\n address: options.sipTarget\n };\n }\n catch (e) {\n LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> ${e}`);\n throw (e);\n }\n }\n else {\n throw new ParameterError('Must provide a locusUrl or sipTarget');\n }\n\n // @ts-ignore\n return this.webex\n .request({\n method: HTTP_VERBS.POST,\n uri: url,\n body\n })\n .then((res) => {\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n locus.id = locus.url.split('/').pop();\n LoggerProxy.logger.info(`Roap:request#joinMeetingWithRoap --> Joined locus [${locus.id}][${locus.fullState.lastActive}]`);\n\n return locus;\n })\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> failed with error: ${err}`);\n throw err;\n });\n });\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 {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @param {String} options.meetingId\n * @returns {Promise} returns the response/failure of the request\n */\n sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n correlationId: string;\n audioMuted: boolean;\n videoMuted: boolean;\n meetingId: string;\n preferTranscoding?: boolean;\n }) {\n const {\n roapMessage, locusSelfUrl, mediaId, correlationId, meetingId\n } = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');\n }\n\n const mediaUrl = `${locusSelfUrl}/${MEDIA}`;\n // @ts-ignore\n const deviceUrl = this.webex.internal.device.url;\n\n LoggerProxy.logger.info(`Roap:request#sendRoap --> ${mediaUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`);\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});\n\n // @ts-ignore\n return this.webex\n .request({\n uri: mediaUrl,\n method: HTTP_VERBS.PUT,\n body: {\n device: {\n url: deviceUrl,\n // @ts-ignore\n deviceType: this.config.meetings.deviceType\n },\n correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(this.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!options.audioMuted,\n videoMuted: !!options.videoMuted\n })),\n mediaId: options.mediaId\n }\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n }\n })\n .then((res) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});\n\n // always it will be the first mediaConnection Object\n const mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> response:${JSON.stringify(mediaConnections, null, 2)}'\\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 Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId, data: {error: Metrics.parseLocusError(err, true)}});\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(roapMessage, null, 2)} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["RoapRequest","localSdp","reachabilityData","window","localStorage","getItem","REACHABILITY","reachabilityResult","JSON","parse","length","reachability","e","LoggerProxy","logger","error","options","info","roapMessage","resolve","then","deviceUrl","webex","internal","device","url","body","usingResource","resourceId","correlationId","localMedias","attachRechabilityData","audioMuted","videoMuted","clientMediaPreferences","preferTranscoding","locusUrl","PARTICIPANT","sipUrl","services","waitForCatalog","get","LOCI","CALL","invitee","address","sipTarget","ParameterError","request","method","HTTP_VERBS","POST","uri","res","locus","roapSeq","seq","id","split","pop","fullState","lastActive","catch","err","locusSelfUrl","mediaId","meetingId","mediaUrl","MEDIA","messageType","Metrics","postEvent","event","eventType","MEDIA_REQUEST","PUT","deviceType","config","meetings","MEDIA_RESPONSE","mediaConnections","statusCode","data","parseLocusError","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["/* global window */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {PARTICIPANT, LOCI, CALL, MEDIA, HTTP_VERBS, REACHABILITY} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport ParameterError from '../common/errors/parameter';\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Joins a meeting via ROAP\n * @param {Object} options\n * @returns {Promise} returns a promise that resolves/rejects whatever the request does\n */\n\n attachRechabilityData(localSdp) {\n const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);\n\n if (reachabilityData) {\n try {\n const reachabilityResult = JSON.parse(reachabilityData);\n\n /* istanbul ignore else */\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return localSdp;\n }\n\n joinMeetingWithRoap(options) {\n LoggerProxy.logger.info('Roap:request#joinMeetingWithRoap --> Join locus with roap');\n LoggerProxy.logger.info(\n `Roap:request#joinMeetingWithRoap --> Local SDP: ${options.roapMessage}`\n );\n\n return Promise.resolve().then(async () => {\n // @ts-ignore\n const deviceUrl = this.webex.internal.device.url;\n let url = '';\n\n const body: any = {\n deviceUrl,\n usingResource: options.resourceId || null,\n correlationId: options.correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(\n this.attachRechabilityData({\n roapMessage: options.roapMessage,\n audioMuted: false,\n videoMuted: false,\n })\n ),\n },\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true,\n },\n };\n\n if (options.locusUrl) {\n url = `${options.locusUrl}/${PARTICIPANT}`;\n } else if (options.sipUrl) {\n try {\n // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;\n body.invitee = {\n address: options.sipTarget,\n };\n } catch (e) {\n LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> ${e}`);\n throw e;\n }\n } else {\n throw new ParameterError('Must provide a locusUrl or sipTarget');\n }\n\n // @ts-ignore\n return this.webex\n .request({\n method: HTTP_VERBS.POST,\n uri: url,\n body,\n })\n .then((res) => {\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n locus.id = locus.url.split('/').pop();\n LoggerProxy.logger.info(\n `Roap:request#joinMeetingWithRoap --> Joined locus [${locus.id}][${locus.fullState.lastActive}]`\n );\n\n return locus;\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Roap:request#joinMeetingWithRoap --> failed with error: ${err}`\n );\n throw err;\n });\n });\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 {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @param {String} options.meetingId\n * @returns {Promise} returns the response/failure of the request\n */\n sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n correlationId: string;\n audioMuted: boolean;\n videoMuted: boolean;\n meetingId: string;\n preferTranscoding?: boolean;\n }) {\n const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');\n }\n\n const mediaUrl = `${locusSelfUrl}/${MEDIA}`;\n // @ts-ignore\n const deviceUrl = this.webex.internal.device.url;\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> ${mediaUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`\n );\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});\n\n // @ts-ignore\n return this.webex\n .request({\n uri: mediaUrl,\n method: HTTP_VERBS.PUT,\n body: {\n device: {\n url: deviceUrl,\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n },\n correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(\n this.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!options.audioMuted,\n videoMuted: !!options.videoMuted,\n })\n ),\n mediaId: options.mediaId,\n },\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true,\n },\n },\n })\n .then((res) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});\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.info(\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 Metrics.postEvent({\n event: eventType.MEDIA_RESPONSE,\n meetingId,\n data: {error: Metrics.parseLocusError(err, true)},\n });\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${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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"}
|
package/dist/roap/state.js
CHANGED
|
@@ -1,63 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.default = void 0;
|
|
12
|
-
|
|
13
9
|
var _javascriptStateMachine = _interopRequireDefault(require("javascript-state-machine"));
|
|
14
|
-
|
|
15
10
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
16
|
-
|
|
17
11
|
var _constants = require("../constants");
|
|
18
|
-
|
|
19
12
|
var shouldStep = function shouldStep(roap, meeting) {
|
|
20
13
|
var messageType = roap.msg.messageType;
|
|
21
|
-
|
|
22
14
|
if (meeting) {
|
|
23
15
|
if (messageType === _constants._OFFER_ && roap.remote && meeting.shareStatus === _constants._REQUESTED_) {
|
|
24
16
|
// The peer-connection is waiting for answer but got an offer Reset. Try to
|
|
25
17
|
// send the offer later after you accept the answer
|
|
26
18
|
return false;
|
|
27
|
-
}
|
|
19
|
+
}
|
|
20
|
+
// Assuming the mercury event has come first before the response for the event
|
|
28
21
|
// we have to wait for the response and trigger the ROAP request later on
|
|
29
|
-
|
|
30
|
-
|
|
31
22
|
if (!meeting.mediaProperties.peerConnection && messageType === _constants._ANSWER_) {
|
|
32
23
|
return false;
|
|
33
24
|
}
|
|
34
25
|
}
|
|
35
|
-
|
|
36
26
|
_loggerProxy.default.logger.log('Roap:state#shouldStep --> RoapStateMachine: PeerConnectionState, ', meeting.mediaProperties.peerConnection.signalingState);
|
|
37
|
-
|
|
38
27
|
_loggerProxy.default.logger.log('Roap:state#shouldStep --> RoapStateMachine: success save proceeding with transition, ', roap.msg);
|
|
39
|
-
|
|
40
28
|
return true;
|
|
41
29
|
};
|
|
42
|
-
|
|
43
30
|
var handleTransition = function handleTransition(value, signal, meeting) {
|
|
44
31
|
_loggerProxy.default.logger.log("Roap:state#handleTransition --> current ".concat(value, " to ").concat(signal));
|
|
45
|
-
|
|
46
32
|
switch (value) {
|
|
47
33
|
case _constants.ROAP.ROAP_STATE.INIT:
|
|
48
34
|
if (signal === _constants.ROAP.ROAP_SIGNAL.RX_OFFER) {
|
|
49
35
|
return _constants.ROAP.ROAP_STATE.WAIT_TX_ANSWER;
|
|
50
36
|
}
|
|
51
|
-
|
|
52
37
|
if (signal === _constants.ROAP.ROAP_SIGNAL.TX_OFFER) {
|
|
53
38
|
return _constants.ROAP.ROAP_STATE.WAIT_RX_ANSWER;
|
|
54
39
|
}
|
|
55
|
-
|
|
56
40
|
return value;
|
|
57
|
-
|
|
58
41
|
case _constants.ROAP.ROAP_STATE.WAIT_RX_OFFER:
|
|
59
42
|
return value;
|
|
60
|
-
|
|
61
43
|
case _constants.ROAP.ROAP_STATE.WAIT_RX_ANSWER:
|
|
62
44
|
if (signal === _constants.ROAP.ROAP_SIGNAL.RX_ANSWER) {
|
|
63
45
|
// There is a race condition where the /call response comes after mercury event from the server
|
|
@@ -65,55 +47,40 @@ var handleTransition = function handleTransition(value, signal, meeting) {
|
|
|
65
47
|
if (meeting.mediaId) {
|
|
66
48
|
return _constants.ROAP.ROAP_STATE.WAIT_TX_OK;
|
|
67
49
|
}
|
|
68
|
-
|
|
69
50
|
_loggerProxy.default.logger.error('Roap:state#handleTransition --> Race Condition no mediaId, continuing.');
|
|
70
|
-
|
|
71
51
|
return value;
|
|
72
52
|
}
|
|
73
|
-
|
|
74
53
|
if (signal === _constants.ROAP.ROAP_SIGNAL.RX_OFFER) {
|
|
75
54
|
return _constants.ROAP.ROAP_STATE.GLARE;
|
|
76
55
|
}
|
|
77
|
-
|
|
78
56
|
return value;
|
|
79
|
-
|
|
80
57
|
case _constants.ROAP.ROAP_STATE.WAIT_TX_OFFER:
|
|
81
58
|
return value;
|
|
82
|
-
|
|
83
59
|
case _constants.ROAP.ROAP_STATE.WAIT_TX_ANSWER:
|
|
84
60
|
if (signal === _constants.ROAP.ROAP_SIGNAL.TX_ANSWER) {
|
|
85
61
|
return _constants.ROAP.ROAP_STATE.WAIT_RX_OK;
|
|
86
62
|
}
|
|
87
|
-
|
|
88
63
|
return value;
|
|
89
|
-
|
|
90
64
|
case _constants.ROAP.ROAP_STATE.WAIT_TX_OK:
|
|
91
65
|
if (signal === _constants.ROAP.ROAP_SIGNAL.TX_OK) {
|
|
92
66
|
return _constants.ROAP.ROAP_STATE.INIT;
|
|
93
67
|
}
|
|
94
|
-
|
|
95
68
|
return value;
|
|
96
|
-
|
|
97
69
|
case _constants.ROAP.ROAP_STATE.WAIT_RX_OK:
|
|
98
70
|
if (signal === _constants.ROAP.ROAP_SIGNAL.RX_OK) {
|
|
99
71
|
return _constants.ROAP.ROAP_STATE.INIT;
|
|
100
72
|
}
|
|
101
|
-
|
|
102
73
|
return value;
|
|
103
|
-
|
|
104
74
|
case _constants.ROAP.ROAP_STATE.ERROR:
|
|
105
75
|
// eslint-disable-next-line no-warning-comments
|
|
106
76
|
// TODO: resolve error state. Add a signal constant and handle the cleanup
|
|
107
77
|
return _constants.ROAP.ROAP_STATE.INIT;
|
|
108
|
-
|
|
109
78
|
case _constants.ROAP.ROAP_STATE.GLARE:
|
|
110
79
|
return _constants.ROAP.ROAP_STATE.WAIT_RX_ANSWER;
|
|
111
|
-
|
|
112
80
|
default:
|
|
113
81
|
return value;
|
|
114
82
|
}
|
|
115
83
|
};
|
|
116
|
-
|
|
117
84
|
var RoapStateMachine = {
|
|
118
85
|
/**
|
|
119
86
|
* @param {Roap} roapRef
|
|
@@ -126,7 +93,6 @@ var RoapStateMachine = {
|
|
|
126
93
|
transitions: [{
|
|
127
94
|
name: _constants.ROAP.ROAP_TRANSITIONS.STEP,
|
|
128
95
|
from: '*',
|
|
129
|
-
|
|
130
96
|
/**
|
|
131
97
|
* Method to handle the transitions between states
|
|
132
98
|
* @param {String} signal
|
|
@@ -136,11 +102,9 @@ var RoapStateMachine = {
|
|
|
136
102
|
*/
|
|
137
103
|
to: function to(signal, meeting, roap) {
|
|
138
104
|
var value = this.state;
|
|
139
|
-
|
|
140
105
|
if (!shouldStep(roap, meeting)) {
|
|
141
106
|
return value;
|
|
142
107
|
}
|
|
143
|
-
|
|
144
108
|
return handleTransition(value, signal, meeting);
|
|
145
109
|
}
|
|
146
110
|
}],
|
|
@@ -155,7 +119,6 @@ var RoapStateMachine = {
|
|
|
155
119
|
}
|
|
156
120
|
}
|
|
157
121
|
});
|
|
158
|
-
|
|
159
122
|
return new RoapState();
|
|
160
123
|
}
|
|
161
124
|
};
|
package/dist/roap/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["shouldStep","roap","meeting","messageType","msg","_OFFER_","remote","shareStatus","_REQUESTED_","mediaProperties","peerConnection","_ANSWER_","LoggerProxy","logger","log","signalingState","handleTransition","value","signal","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"],"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('Roap:state#shouldStep --> RoapStateMachine: PeerConnectionState, '
|
|
1
|
+
{"version":3,"names":["shouldStep","roap","meeting","messageType","msg","_OFFER_","remote","shareStatus","_REQUESTED_","mediaProperties","peerConnection","_ANSWER_","LoggerProxy","logger","log","signalingState","handleTransition","value","signal","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"],"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":"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"}
|