@webex/plugin-meetings 3.8.0-next.25 → 3.8.0-next.27
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/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +20 -1
- package/dist/meeting/index.js.map +1 -1
- package/dist/reachability/request.js +19 -3
- package/dist/reachability/request.js.map +1 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +3 -3
- package/src/meeting/index.ts +19 -4
- package/src/reachability/request.ts +7 -0
- package/test/unit/spec/meeting/index.js +15 -0
- package/test/unit/spec/reachability/request.js +47 -2
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
4
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
5
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
6
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
7
|
+
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
3
8
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
9
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
5
10
|
_Object$defineProperty(exports, "__esModule", {
|
|
@@ -13,6 +18,8 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
|
|
|
13
18
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
14
19
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
15
20
|
var _constants = require("../constants");
|
|
21
|
+
function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
22
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
16
23
|
/**
|
|
17
24
|
* @class ReachabilityRequest
|
|
18
25
|
*/
|
|
@@ -35,6 +42,10 @@ function ReachabilityRequest(webex) {
|
|
|
35
42
|
* @returns {Promise}
|
|
36
43
|
*/
|
|
37
44
|
(0, _defineProperty2.default)(this, "getClusters", function (trigger, ipVersion, previousReport) {
|
|
45
|
+
var _this$webex, _this$webex$config, _this$webex$config$su, _this$webex2, _this$webex2$config, _this$webex2$config$s;
|
|
46
|
+
var appType = (_this$webex = _this.webex) === null || _this$webex === void 0 ? void 0 : (_this$webex$config = _this$webex.config) === null || _this$webex$config === void 0 ? void 0 : (_this$webex$config$su = _this$webex$config.support) === null || _this$webex$config$su === void 0 ? void 0 : _this$webex$config$su.appType;
|
|
47
|
+
var appVersion = (_this$webex2 = _this.webex) === null || _this$webex2 === void 0 ? void 0 : (_this$webex2$config = _this$webex2.config) === null || _this$webex2$config === void 0 ? void 0 : (_this$webex2$config$s = _this$webex2$config.support) === null || _this$webex2$config$s === void 0 ? void 0 : _this$webex2$config$s.appVersion;
|
|
48
|
+
|
|
38
49
|
// we only measure latency for the initial startup call, not for other triggers
|
|
39
50
|
var callWrapper = trigger === 'startup' ? _this.webex.internal.newMetrics.callDiagnosticLatencies.measureLatency.bind(_this.webex.internal.newMetrics.callDiagnosticLatencies) : function (func) {
|
|
40
51
|
return func();
|
|
@@ -45,15 +56,20 @@ function ReachabilityRequest(webex) {
|
|
|
45
56
|
shouldRefreshAccessToken: false,
|
|
46
57
|
api: _constants.API.CALLIOPEDISCOVERY,
|
|
47
58
|
resource: _constants.RESOURCE.CLUSTERS,
|
|
48
|
-
body: {
|
|
59
|
+
body: _objectSpread(_objectSpread({
|
|
49
60
|
ipver: ipVersion,
|
|
50
61
|
'supported-options': {
|
|
51
62
|
'report-version': 1,
|
|
52
63
|
'early-call-min-clusters': true
|
|
53
64
|
},
|
|
54
|
-
'previous-report': previousReport
|
|
65
|
+
'previous-report': previousReport
|
|
66
|
+
}, appType && appVersion && {
|
|
67
|
+
'client-environment': {
|
|
68
|
+
components: (0, _defineProperty2.default)({}, appType, appVersion)
|
|
69
|
+
}
|
|
70
|
+
}), {}, {
|
|
55
71
|
trigger: trigger
|
|
56
|
-
},
|
|
72
|
+
}),
|
|
57
73
|
timeout: _this.webex.config.meetings.reachabilityGetClusterTimeout
|
|
58
74
|
});
|
|
59
75
|
}, 'internal.get.cluster.time').then(function (res) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","
|
|
1
|
+
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","ReachabilityRequest","_createClass2","webex","_this","_classCallCheck2","trigger","ipVersion","previousReport","_this$webex","_this$webex$config","_this$webex$config$su","_this$webex2","_this$webex2$config","_this$webex2$config$s","appType","config","support","appVersion","callWrapper","internal","newMetrics","callDiagnosticLatencies","measureLatency","bind","func","request","method","HTTP_VERBS","POST","shouldRefreshAccessToken","api","API","CALLIOPEDISCOVERY","resource","RESOURCE","CLUSTERS","body","ipver","components","timeout","meetings","reachabilityGetClusterTimeout","then","res","_res$body","clusters","joinCookie","discoveryOptions","_keys","key","_res$body$clusterClas","_res$body$clusterClas2","isVideoMesh","clusterClasses","hybridMedia","includes","LoggerProxy","logger","log","concat","_stringify","localSDPList","REACHABILITY","offers","_default","exports"],"sources":["request.ts"],"sourcesContent":["import LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, RESOURCE, API, IP_VERSION} from '../constants';\nimport {GetClustersTrigger} from './reachability.types';\n\nexport interface ClusterNode {\n isVideoMesh: boolean;\n udp: Array<string>;\n tcp: Array<string>;\n xtls: Array<string>;\n}\n\nexport type ClusterList = {\n [key: string]: ClusterNode;\n};\n\n/**\n * @class ReachabilityRequest\n */\nclass ReachabilityRequest {\n webex: any;\n\n /**\n * Creates an instance of ReachabilityRequest.\n * @param {object} webex\n * @memberof ReachabilityRequest\n */\n constructor(webex: object) {\n this.webex = webex;\n }\n\n /**\n * Gets the cluster information\n *\n * @param {string} trigger that's passed to Orpheus\n * @param {IP_VERSION} ipVersion information about current ip network we're on\n * @param {Object} previousReport last reachability result\n * @returns {Promise}\n */\n getClusters = (\n trigger: GetClustersTrigger,\n ipVersion?: IP_VERSION,\n previousReport?: any\n ): Promise<{\n clusters: ClusterList;\n joinCookie: any;\n discoveryOptions?: Record<string, any>;\n }> => {\n const appType = this.webex?.config?.support?.appType;\n const appVersion = this.webex?.config?.support?.appVersion;\n\n // we only measure latency for the initial startup call, not for other triggers\n const callWrapper =\n trigger === 'startup'\n ? this.webex.internal.newMetrics.callDiagnosticLatencies.measureLatency.bind(\n this.webex.internal.newMetrics.callDiagnosticLatencies\n )\n : (func) => func();\n\n return callWrapper(\n () =>\n this.webex.request({\n method: HTTP_VERBS.POST,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.CLUSTERS,\n body: {\n ipver: ipVersion,\n 'supported-options': {\n 'report-version': 1,\n 'early-call-min-clusters': true,\n },\n 'previous-report': previousReport,\n ...(appType &&\n appVersion && {\n 'client-environment': {components: {[appType]: appVersion}},\n }),\n trigger,\n },\n timeout: this.webex.config.meetings.reachabilityGetClusterTimeout,\n }),\n 'internal.get.cluster.time'\n ).then((res) => {\n const {clusters, joinCookie, discoveryOptions} = res.body;\n\n Object.keys(clusters).forEach((key) => {\n clusters[key].isVideoMesh = !!res.body.clusterClasses?.hybridMedia?.includes(key);\n });\n\n LoggerProxy.logger.log(\n `Reachability:request#getClusters --> get clusters (ipver=${ipVersion}) successful:${JSON.stringify(\n clusters\n )}`\n );\n\n return {\n clusters,\n joinCookie,\n discoveryOptions,\n };\n });\n };\n\n /**\n * gets remote SDP For Clusters\n * @param {Object} localSDPList localSDPs for the cluster\n * @returns {Object}\n */\n remoteSDPForClusters = (localSDPList: object) =>\n this.webex\n .request({\n method: HTTP_VERBS.POST,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.REACHABILITY,\n body: {offers: localSDPList},\n })\n .then((res) => {\n LoggerProxy.logger.log(\n 'Reachability:request#remoteSDPForClusters --> Remote SDPs got succcessfully'\n );\n\n return res.body;\n });\n}\n\nexport default ReachabilityRequest;\n"],"mappings":"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"}
|
package/dist/webinar/index.js
CHANGED
package/package.json
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
44
44
|
"@webex/jest-config-legacy": "0.0.0",
|
|
45
45
|
"@webex/legacy-tools": "0.0.0",
|
|
46
|
-
"@webex/plugin-meetings": "3.8.0-next.
|
|
46
|
+
"@webex/plugin-meetings": "3.8.0-next.27",
|
|
47
47
|
"@webex/plugin-rooms": "3.8.0-next.13",
|
|
48
48
|
"@webex/test-helper-chai": "3.8.0-next.11",
|
|
49
49
|
"@webex/test-helper-mocha": "3.8.0-next.11",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"@webex/internal-plugin-metrics": "3.8.0-next.11",
|
|
72
72
|
"@webex/internal-plugin-support": "3.8.0-next.13",
|
|
73
73
|
"@webex/internal-plugin-user": "3.8.0-next.11",
|
|
74
|
-
"@webex/internal-plugin-voicea": "3.8.0-next.
|
|
74
|
+
"@webex/internal-plugin-voicea": "3.8.0-next.27",
|
|
75
75
|
"@webex/media-helpers": "3.8.0-next.12",
|
|
76
76
|
"@webex/plugin-people": "3.8.0-next.13",
|
|
77
77
|
"@webex/plugin-rooms": "3.8.0-next.13",
|
|
@@ -92,5 +92,5 @@
|
|
|
92
92
|
"//": [
|
|
93
93
|
"TODO: upgrade jwt-decode when moving to node 18"
|
|
94
94
|
],
|
|
95
|
-
"version": "3.8.0-next.
|
|
95
|
+
"version": "3.8.0-next.27"
|
|
96
96
|
}
|
package/src/meeting/index.ts
CHANGED
|
@@ -6205,10 +6205,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6205
6205
|
},
|
|
6206
6206
|
options: {meetingId: this.id, rawError: error},
|
|
6207
6207
|
});
|
|
6208
|
-
} else if (
|
|
6209
|
-
error instanceof Errors.SdpOfferHandlingError ||
|
|
6210
|
-
error instanceof Errors.SdpAnswerHandlingError
|
|
6211
|
-
) {
|
|
6208
|
+
} else if (error instanceof Errors.SdpOfferHandlingError) {
|
|
6212
6209
|
sendBehavioralMetric(BEHAVIORAL_METRICS.PEERCONNECTION_FAILURE, error, this.correlationId);
|
|
6213
6210
|
|
|
6214
6211
|
// @ts-ignore
|
|
@@ -6219,6 +6216,24 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6219
6216
|
},
|
|
6220
6217
|
options: {meetingId: this.id, rawError: error},
|
|
6221
6218
|
});
|
|
6219
|
+
} else if (error instanceof Errors.SdpAnswerHandlingError) {
|
|
6220
|
+
sendBehavioralMetric(BEHAVIORAL_METRICS.PEERCONNECTION_FAILURE, error, this.correlationId);
|
|
6221
|
+
|
|
6222
|
+
// @ts-ignore
|
|
6223
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
6224
|
+
name: 'client.media-engine.remote-sdp-received',
|
|
6225
|
+
payload: {
|
|
6226
|
+
canProceed: false,
|
|
6227
|
+
},
|
|
6228
|
+
options: {meetingId: this.id, rawError: error},
|
|
6229
|
+
});
|
|
6230
|
+
|
|
6231
|
+
if (this.deferSDPAnswer) {
|
|
6232
|
+
clearTimeout(this.sdpResponseTimer);
|
|
6233
|
+
this.sdpResponseTimer = undefined;
|
|
6234
|
+
|
|
6235
|
+
this.deferSDPAnswer.reject();
|
|
6236
|
+
}
|
|
6222
6237
|
} else if (error instanceof Errors.SdpError) {
|
|
6223
6238
|
// this covers also the case of Errors.IceGatheringError which extends Errors.SdpError
|
|
6224
6239
|
sendBehavioralMetric(BEHAVIORAL_METRICS.INVALID_ICE_CANDIDATE, error, this.correlationId);
|
|
@@ -45,6 +45,9 @@ class ReachabilityRequest {
|
|
|
45
45
|
joinCookie: any;
|
|
46
46
|
discoveryOptions?: Record<string, any>;
|
|
47
47
|
}> => {
|
|
48
|
+
const appType = this.webex?.config?.support?.appType;
|
|
49
|
+
const appVersion = this.webex?.config?.support?.appVersion;
|
|
50
|
+
|
|
48
51
|
// we only measure latency for the initial startup call, not for other triggers
|
|
49
52
|
const callWrapper =
|
|
50
53
|
trigger === 'startup'
|
|
@@ -67,6 +70,10 @@ class ReachabilityRequest {
|
|
|
67
70
|
'early-call-min-clusters': true,
|
|
68
71
|
},
|
|
69
72
|
'previous-report': previousReport,
|
|
73
|
+
...(appType &&
|
|
74
|
+
appVersion && {
|
|
75
|
+
'client-environment': {components: {[appType]: appVersion}},
|
|
76
|
+
}),
|
|
70
77
|
trigger,
|
|
71
78
|
},
|
|
72
79
|
timeout: this.webex.config.meetings.reachabilityGetClusterTimeout,
|
|
@@ -8614,13 +8614,19 @@ describe('plugin-meetings', () => {
|
|
|
8614
8614
|
const fakeErrorMessage = 'test error';
|
|
8615
8615
|
const fakeRootCauseName = 'root cause name';
|
|
8616
8616
|
const fakeErrorName = 'test error name';
|
|
8617
|
+
let clock;
|
|
8617
8618
|
|
|
8618
8619
|
beforeEach(() => {
|
|
8620
|
+
clock = sinon.useFakeTimers();
|
|
8619
8621
|
meeting.setupMediaConnectionListeners();
|
|
8620
8622
|
webex.internal.newMetrics.submitClientEvent.resetHistory();
|
|
8621
8623
|
Metrics.sendBehavioralMetric.resetHistory();
|
|
8622
8624
|
});
|
|
8623
8625
|
|
|
8626
|
+
afterEach(() => {
|
|
8627
|
+
clock.restore();
|
|
8628
|
+
});
|
|
8629
|
+
|
|
8624
8630
|
const checkMetricSent = (event, error) => {
|
|
8625
8631
|
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
8626
8632
|
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
@@ -8689,6 +8695,13 @@ describe('plugin-meetings', () => {
|
|
|
8689
8695
|
});
|
|
8690
8696
|
|
|
8691
8697
|
it('should send metrics for SdpAnswerHandlingError error', () => {
|
|
8698
|
+
meeting.sdpResponseTimer = '1234';
|
|
8699
|
+
meeting.deferSDPAnswer = {
|
|
8700
|
+
reject: sinon.stub(),
|
|
8701
|
+
};
|
|
8702
|
+
|
|
8703
|
+
const clearTimeoutSpy = sinon.spy(clock, 'clearTimeout');
|
|
8704
|
+
|
|
8692
8705
|
const fakeError = new Errors.SdpAnswerHandlingError(fakeErrorMessage, {
|
|
8693
8706
|
name: fakeErrorName,
|
|
8694
8707
|
cause: {name: fakeRootCauseName},
|
|
@@ -8703,6 +8716,8 @@ describe('plugin-meetings', () => {
|
|
|
8703
8716
|
fakeErrorMessage,
|
|
8704
8717
|
fakeRootCauseName
|
|
8705
8718
|
);
|
|
8719
|
+
assert.calledOnce(meeting.deferSDPAnswer.reject);
|
|
8720
|
+
assert.calledOnce(clearTimeoutSpy);
|
|
8706
8721
|
});
|
|
8707
8722
|
|
|
8708
8723
|
it('should send metrics for SdpError error', () => {
|
|
@@ -12,6 +12,9 @@ describe('plugin-meetings/reachability', () => {
|
|
|
12
12
|
let reachabilityRequest;
|
|
13
13
|
let webex;
|
|
14
14
|
|
|
15
|
+
let appType;
|
|
16
|
+
let appVersion;
|
|
17
|
+
|
|
15
18
|
beforeEach(() => {
|
|
16
19
|
webex = new MockWebex({
|
|
17
20
|
children: {
|
|
@@ -20,6 +23,14 @@ describe('plugin-meetings/reachability', () => {
|
|
|
20
23
|
},
|
|
21
24
|
});
|
|
22
25
|
|
|
26
|
+
webex.config.support = {
|
|
27
|
+
'appType': 'NetworkChecker',
|
|
28
|
+
'appVersion': '43.3.0.1',
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
appType = webex?.config?.support?.appType;
|
|
32
|
+
appVersion = webex?.config?.support?.appVersion;
|
|
33
|
+
|
|
23
34
|
webex.meetings.clientRegion = {
|
|
24
35
|
countryCode: 'US',
|
|
25
36
|
regionCode: 'WEST-COAST',
|
|
@@ -56,7 +67,9 @@ describe('plugin-meetings/reachability', () => {
|
|
|
56
67
|
|
|
57
68
|
previousReport = {
|
|
58
69
|
id: 'fake previous report',
|
|
59
|
-
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
|
|
60
73
|
});
|
|
61
74
|
|
|
62
75
|
afterEach(() => {
|
|
@@ -79,6 +92,7 @@ describe('plugin-meetings/reachability', () => {
|
|
|
79
92
|
'report-version': 1,
|
|
80
93
|
'early-call-min-clusters': true,
|
|
81
94
|
},
|
|
95
|
+
'client-environment': { components: { [appType]: appVersion } },
|
|
82
96
|
'previous-report': previousReport,
|
|
83
97
|
trigger: 'startup',
|
|
84
98
|
},
|
|
@@ -105,6 +119,7 @@ describe('plugin-meetings/reachability', () => {
|
|
|
105
119
|
'report-version': 1,
|
|
106
120
|
'early-call-min-clusters': true,
|
|
107
121
|
},
|
|
122
|
+
'client-environment': { components: { [appType]: appVersion } },
|
|
108
123
|
'previous-report': previousReport,
|
|
109
124
|
trigger: 'early-call/no-min-reached',
|
|
110
125
|
},
|
|
@@ -114,5 +129,35 @@ describe('plugin-meetings/reachability', () => {
|
|
|
114
129
|
assert.deepEqual(res.joinCookie, {anycastEntryPoint: "aws-eu-west-1"})
|
|
115
130
|
assert.notCalled(webex.internal.newMetrics.callDiagnosticLatencies.measureLatency);
|
|
116
131
|
});
|
|
132
|
+
|
|
133
|
+
it('sends a POST request with the correct params when appVersion is undefined', async () => {
|
|
134
|
+
// Setting appType & appVersion to undefined
|
|
135
|
+
webex.config.support.appType = undefined;
|
|
136
|
+
webex.config.support.appVersion = undefined;
|
|
137
|
+
|
|
138
|
+
const res = await reachabilityRequest.getClusters('startup', IP_VERSION.only_ipv4, previousReport);
|
|
139
|
+
const requestParams = webex.request.getCall(0).args[0];
|
|
140
|
+
|
|
141
|
+
assert.deepEqual(requestParams, {
|
|
142
|
+
method: 'POST',
|
|
143
|
+
resource: `clusters`,
|
|
144
|
+
api: 'calliopeDiscovery',
|
|
145
|
+
shouldRefreshAccessToken: false,
|
|
146
|
+
timeout: 3000,
|
|
147
|
+
body: {
|
|
148
|
+
ipver: IP_VERSION.only_ipv4,
|
|
149
|
+
'supported-options': {
|
|
150
|
+
'report-version': 1,
|
|
151
|
+
'early-call-min-clusters': true,
|
|
152
|
+
},
|
|
153
|
+
'previous-report': previousReport,
|
|
154
|
+
trigger: 'startup',
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
assert.deepEqual(res.clusters.clusterId, {udp: "testUDP", isVideoMesh: true});
|
|
159
|
+
assert.deepEqual(res.joinCookie, {anycastEntryPoint: "aws-eu-west-1"});
|
|
160
|
+
assert.calledOnceWithExactly(webex.internal.newMetrics.callDiagnosticLatencies.measureLatency, sinon.match.func, 'internal.get.cluster.time');
|
|
161
|
+
});
|
|
117
162
|
});
|
|
118
|
-
});
|
|
163
|
+
});
|