@webex/plugin-meetings 3.0.0-beta.320 → 3.0.0-beta.321
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 +48 -55
- package/dist/meeting/index.js.map +1 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +19 -19
- package/src/meeting/index.ts +60 -68
- package/test/unit/spec/meeting/index.js +44 -46
package/dist/webinar/index.js
CHANGED
|
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
62
62
|
updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
|
|
63
63
|
this.set('canManageWebcast', canManageWebcast);
|
|
64
64
|
},
|
|
65
|
-
version: "3.0.0-beta.
|
|
65
|
+
version: "3.0.0-beta.321"
|
|
66
66
|
});
|
|
67
67
|
var _default = Webinar;
|
|
68
68
|
exports.default = _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.321",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@peculiar/webcrypto": "^1.4.3",
|
|
36
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
41
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
36
|
+
"@webex/plugin-meetings": "3.0.0-beta.321",
|
|
37
|
+
"@webex/test-helper-chai": "3.0.0-beta.321",
|
|
38
|
+
"@webex/test-helper-mocha": "3.0.0-beta.321",
|
|
39
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.321",
|
|
40
|
+
"@webex/test-helper-retry": "3.0.0-beta.321",
|
|
41
|
+
"@webex/test-helper-test-users": "3.0.0-beta.321",
|
|
42
42
|
"chai": "^4.3.4",
|
|
43
43
|
"chai-as-promised": "^7.1.1",
|
|
44
44
|
"jsdom-global": "3.0.2",
|
|
@@ -47,19 +47,19 @@
|
|
|
47
47
|
"typescript": "^4.7.4"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@webex/common": "3.0.0-beta.
|
|
50
|
+
"@webex/common": "3.0.0-beta.321",
|
|
51
51
|
"@webex/internal-media-core": "2.2.2",
|
|
52
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
58
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
59
|
-
"@webex/media-helpers": "3.0.0-beta.
|
|
60
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
61
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
62
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
52
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.321",
|
|
53
|
+
"@webex/internal-plugin-device": "3.0.0-beta.321",
|
|
54
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.321",
|
|
55
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.321",
|
|
56
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.321",
|
|
57
|
+
"@webex/internal-plugin-support": "3.0.0-beta.321",
|
|
58
|
+
"@webex/internal-plugin-user": "3.0.0-beta.321",
|
|
59
|
+
"@webex/media-helpers": "3.0.0-beta.321",
|
|
60
|
+
"@webex/plugin-people": "3.0.0-beta.321",
|
|
61
|
+
"@webex/plugin-rooms": "3.0.0-beta.321",
|
|
62
|
+
"@webex/webex-core": "3.0.0-beta.321",
|
|
63
63
|
"ampersand-collection": "^2.0.2",
|
|
64
64
|
"bowser": "^2.11.0",
|
|
65
65
|
"btoa": "^1.2.1",
|
package/src/meeting/index.ts
CHANGED
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
ClientEvent,
|
|
10
10
|
ClientEventLeaveReason,
|
|
11
11
|
CallDiagnosticUtils,
|
|
12
|
-
CALL_DIAGNOSTIC_CONFIG,
|
|
13
12
|
} from '@webex/internal-plugin-metrics';
|
|
14
13
|
import {
|
|
15
14
|
ConnectionState,
|
|
@@ -5421,25 +5420,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5421
5420
|
this.reconnectionManager.resetReconnectionTimer();
|
|
5422
5421
|
|
|
5423
5422
|
this.reconnect({networkDisconnect: true});
|
|
5424
|
-
// @ts-ignore
|
|
5425
|
-
this.webex.internal.newMetrics.submitClientEvent({
|
|
5426
|
-
name: 'client.ice.end',
|
|
5427
|
-
payload: {
|
|
5428
|
-
canProceed: false,
|
|
5429
|
-
icePhase: 'IN_MEETING',
|
|
5430
|
-
errors: [
|
|
5431
|
-
// @ts-ignore
|
|
5432
|
-
this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode(
|
|
5433
|
-
{
|
|
5434
|
-
clientErrorCode: CALL_DIAGNOSTIC_CONFIG.ICE_FAILURE_CLIENT_CODE,
|
|
5435
|
-
}
|
|
5436
|
-
),
|
|
5437
|
-
],
|
|
5438
|
-
},
|
|
5439
|
-
options: {
|
|
5440
|
-
meetingId: this.id,
|
|
5441
|
-
},
|
|
5442
|
-
});
|
|
5443
5423
|
|
|
5444
5424
|
this.uploadLogs({
|
|
5445
5425
|
file: 'peer-connection-manager/index',
|
|
@@ -5457,26 +5437,32 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5457
5437
|
|
|
5458
5438
|
switch (event.state) {
|
|
5459
5439
|
case ConnectionState.Connecting:
|
|
5460
|
-
|
|
5461
|
-
|
|
5462
|
-
|
|
5463
|
-
|
|
5464
|
-
|
|
5465
|
-
|
|
5466
|
-
|
|
5440
|
+
if (!this.hasMediaConnectionConnectedAtLeastOnce) {
|
|
5441
|
+
// Only send CA event for join flow if we haven't successfully connected media yet
|
|
5442
|
+
// @ts-ignore
|
|
5443
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
5444
|
+
name: 'client.ice.start',
|
|
5445
|
+
options: {
|
|
5446
|
+
meetingId: this.id,
|
|
5447
|
+
},
|
|
5448
|
+
});
|
|
5449
|
+
}
|
|
5467
5450
|
break;
|
|
5468
5451
|
case ConnectionState.Connected:
|
|
5469
|
-
|
|
5470
|
-
|
|
5471
|
-
|
|
5472
|
-
|
|
5473
|
-
|
|
5474
|
-
|
|
5475
|
-
|
|
5476
|
-
|
|
5477
|
-
|
|
5478
|
-
|
|
5479
|
-
|
|
5452
|
+
if (!this.hasMediaConnectionConnectedAtLeastOnce) {
|
|
5453
|
+
// Only send CA event for join flow if we haven't successfully connected media yet
|
|
5454
|
+
// @ts-ignore
|
|
5455
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
5456
|
+
name: 'client.ice.end',
|
|
5457
|
+
payload: {
|
|
5458
|
+
canProceed: true,
|
|
5459
|
+
icePhase: 'JOIN_MEETING_FINAL',
|
|
5460
|
+
},
|
|
5461
|
+
options: {
|
|
5462
|
+
meetingId: this.id,
|
|
5463
|
+
},
|
|
5464
|
+
});
|
|
5465
|
+
}
|
|
5480
5466
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.CONNECTION_SUCCESS, {
|
|
5481
5467
|
correlation_id: this.correlationId,
|
|
5482
5468
|
locus_id: this.locusId,
|
|
@@ -5790,36 +5776,42 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5790
5776
|
try {
|
|
5791
5777
|
await this.mediaProperties.waitForMediaConnectionConnected();
|
|
5792
5778
|
} catch (error) {
|
|
5793
|
-
|
|
5794
|
-
|
|
5795
|
-
|
|
5796
|
-
|
|
5797
|
-
|
|
5798
|
-
|
|
5799
|
-
|
|
5800
|
-
|
|
5801
|
-
|
|
5802
|
-
|
|
5803
|
-
|
|
5804
|
-
|
|
5805
|
-
|
|
5806
|
-
|
|
5807
|
-
|
|
5808
|
-
|
|
5809
|
-
|
|
5810
|
-
|
|
5811
|
-
|
|
5812
|
-
|
|
5813
|
-
|
|
5814
|
-
|
|
5815
|
-
|
|
5816
|
-
|
|
5817
|
-
|
|
5818
|
-
|
|
5819
|
-
|
|
5820
|
-
|
|
5821
|
-
|
|
5822
|
-
|
|
5779
|
+
if (!this.hasMediaConnectionConnectedAtLeastOnce) {
|
|
5780
|
+
// Only send CA event for join flow if we haven't successfully connected media yet
|
|
5781
|
+
// @ts-ignore
|
|
5782
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
5783
|
+
name: 'client.ice.end',
|
|
5784
|
+
payload: {
|
|
5785
|
+
canProceed: !this.turnServerUsed, // If we haven't done turn tls retry yet we will proceed with join attempt
|
|
5786
|
+
icePhase: this.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY',
|
|
5787
|
+
errors: [
|
|
5788
|
+
// @ts-ignore
|
|
5789
|
+
this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode(
|
|
5790
|
+
{
|
|
5791
|
+
clientErrorCode: CallDiagnosticUtils.generateClientErrorCodeForIceFailure({
|
|
5792
|
+
signalingState:
|
|
5793
|
+
this.mediaProperties.webrtcMediaConnection?.multistreamConnection?.pc?.pc
|
|
5794
|
+
?.signalingState ||
|
|
5795
|
+
this.mediaProperties.webrtcMediaConnection?.mediaConnection?.pc
|
|
5796
|
+
?.signalingState ||
|
|
5797
|
+
'unknown',
|
|
5798
|
+
iceConnectionState:
|
|
5799
|
+
this.mediaProperties.webrtcMediaConnection?.multistreamConnection?.pc?.pc
|
|
5800
|
+
?.iceConnectionState ||
|
|
5801
|
+
this.mediaProperties.webrtcMediaConnection?.mediaConnection?.pc
|
|
5802
|
+
?.iceConnectionState ||
|
|
5803
|
+
'unknown',
|
|
5804
|
+
turnServerUsed: this.turnServerUsed,
|
|
5805
|
+
}),
|
|
5806
|
+
}
|
|
5807
|
+
),
|
|
5808
|
+
],
|
|
5809
|
+
},
|
|
5810
|
+
options: {
|
|
5811
|
+
meetingId: this.id,
|
|
5812
|
+
},
|
|
5813
|
+
});
|
|
5814
|
+
}
|
|
5823
5815
|
throw new Error(
|
|
5824
5816
|
`Timed out waiting for media connection to be connected, correlationId=${this.correlationId}`
|
|
5825
5817
|
);
|
|
@@ -5691,11 +5691,23 @@ describe('plugin-meetings', () => {
|
|
|
5691
5691
|
});
|
|
5692
5692
|
|
|
5693
5693
|
describe('CONNECTION_STATE_CHANGED event when state = "Connecting"', () => {
|
|
5694
|
-
it('sends client.ice.start correctly', () => {
|
|
5694
|
+
it('sends client.ice.start correctly when hasMediaConnectionConnectedAtLeastOnce = true', () => {
|
|
5695
|
+
meeting.hasMediaConnectionConnectedAtLeastOnce = true;
|
|
5696
|
+
meeting.setupMediaConnectionListeners();
|
|
5697
|
+
eventListeners[Event.CONNECTION_STATE_CHANGED]({
|
|
5698
|
+
state: 'Connecting',
|
|
5699
|
+
});
|
|
5700
|
+
|
|
5701
|
+
assert.notCalled(webex.internal.newMetrics.submitClientEvent);
|
|
5702
|
+
})
|
|
5703
|
+
|
|
5704
|
+
it('sends client.ice.start correctly when hasMediaConnectionConnectedAtLeastOnce = false', () => {
|
|
5705
|
+
meeting.hasMediaConnectionConnectedAtLeastOnce = false;
|
|
5695
5706
|
meeting.setupMediaConnectionListeners();
|
|
5696
5707
|
eventListeners[Event.CONNECTION_STATE_CHANGED]({
|
|
5697
5708
|
state: 'Connecting',
|
|
5698
5709
|
});
|
|
5710
|
+
|
|
5699
5711
|
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
5700
5712
|
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
5701
5713
|
name: 'client.ice.start',
|
|
@@ -5724,17 +5736,21 @@ describe('plugin-meetings', () => {
|
|
|
5724
5736
|
};
|
|
5725
5737
|
|
|
5726
5738
|
const checkExpectedSpies = (expected) => {
|
|
5727
|
-
|
|
5728
|
-
|
|
5729
|
-
|
|
5730
|
-
|
|
5731
|
-
|
|
5732
|
-
|
|
5733
|
-
|
|
5734
|
-
|
|
5735
|
-
|
|
5736
|
-
|
|
5737
|
-
|
|
5739
|
+
if (expected.icePhase) {
|
|
5740
|
+
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
5741
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
5742
|
+
name: 'client.ice.end',
|
|
5743
|
+
options: {
|
|
5744
|
+
meetingId: meeting.id,
|
|
5745
|
+
},
|
|
5746
|
+
payload: {
|
|
5747
|
+
canProceed: true,
|
|
5748
|
+
icePhase: expected.icePhase,
|
|
5749
|
+
},
|
|
5750
|
+
});
|
|
5751
|
+
} else {
|
|
5752
|
+
assert.notCalled(webex.internal.newMetrics.submitClientEvent);
|
|
5753
|
+
}
|
|
5738
5754
|
assert.calledOnce(Metrics.sendBehavioralMetric);
|
|
5739
5755
|
assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.CONNECTION_SUCCESS, {
|
|
5740
5756
|
correlation_id: meeting.correlationId,
|
|
@@ -5776,8 +5792,9 @@ describe('plugin-meetings', () => {
|
|
|
5776
5792
|
icePhase: 'JOIN_MEETING_FINAL',
|
|
5777
5793
|
setNetworkStatusCallParams: [NETWORK_STATUS.CONNECTED],
|
|
5778
5794
|
});
|
|
5795
|
+
assert.equal(meeting.hasMediaConnectionConnectedAtLeastOnce, true);
|
|
5779
5796
|
|
|
5780
|
-
// now simulate short connection loss,
|
|
5797
|
+
// now simulate short connection loss, client.ice.end is not sent a second time as hasMediaConnectionConnectedAtLeastOnce = true
|
|
5781
5798
|
resetSpies();
|
|
5782
5799
|
|
|
5783
5800
|
eventListeners[Event.CONNECTION_STATE_CHANGED]({
|
|
@@ -5788,11 +5805,17 @@ describe('plugin-meetings', () => {
|
|
|
5788
5805
|
});
|
|
5789
5806
|
|
|
5790
5807
|
checkExpectedSpies({
|
|
5791
|
-
icePhase: 'IN_MEETING',
|
|
5792
5808
|
setNetworkStatusCallParams: [NETWORK_STATUS.DISCONNECTED, NETWORK_STATUS.CONNECTED],
|
|
5793
5809
|
});
|
|
5794
5810
|
|
|
5795
|
-
|
|
5811
|
+
resetSpies();
|
|
5812
|
+
|
|
5813
|
+
eventListeners[Event.CONNECTION_STATE_CHANGED]({
|
|
5814
|
+
state: 'Disconnected',
|
|
5815
|
+
});
|
|
5816
|
+
eventListeners[Event.CONNECTION_STATE_CHANGED]({
|
|
5817
|
+
state: 'Connected',
|
|
5818
|
+
});
|
|
5796
5819
|
});
|
|
5797
5820
|
});
|
|
5798
5821
|
|
|
@@ -5864,19 +5887,7 @@ describe('plugin-meetings', () => {
|
|
|
5864
5887
|
assert.calledOnce(meeting.setNetworkStatus);
|
|
5865
5888
|
assert.calledWith(meeting.setNetworkStatus, NETWORK_STATUS.DISCONNECTED);
|
|
5866
5889
|
assert.calledOnce(meeting.reconnectionManager.waitForIceReconnect);
|
|
5867
|
-
assert.
|
|
5868
|
-
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
5869
|
-
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
5870
|
-
name: 'client.ice.end',
|
|
5871
|
-
payload: {
|
|
5872
|
-
canProceed: false,
|
|
5873
|
-
icePhase: 'IN_MEETING',
|
|
5874
|
-
errors: [FAKE_ERROR],
|
|
5875
|
-
},
|
|
5876
|
-
options: {
|
|
5877
|
-
meetingId: meeting.id,
|
|
5878
|
-
},
|
|
5879
|
-
});
|
|
5890
|
+
assert.notCalled(webex.internal.newMetrics.submitClientEvent);
|
|
5880
5891
|
checkBehavioralMetricSent(true);
|
|
5881
5892
|
});
|
|
5882
5893
|
|
|
@@ -5891,6 +5902,7 @@ describe('plugin-meetings', () => {
|
|
|
5891
5902
|
assert.calledOnce(meeting.setNetworkStatus);
|
|
5892
5903
|
assert.calledWith(meeting.setNetworkStatus, NETWORK_STATUS.DISCONNECTED);
|
|
5893
5904
|
assert.calledOnce(meeting.reconnectionManager.waitForIceReconnect);
|
|
5905
|
+
assert.notCalled(webex.internal.newMetrics.submitClientEvent);
|
|
5894
5906
|
checkBehavioralMetricSent();
|
|
5895
5907
|
});
|
|
5896
5908
|
});
|
|
@@ -5923,32 +5935,16 @@ describe('plugin-meetings', () => {
|
|
|
5923
5935
|
|
|
5924
5936
|
mockFailedEvent();
|
|
5925
5937
|
|
|
5926
|
-
checkBehavioralMetricSent();
|
|
5927
5938
|
assert.notCalled(webex.internal.newMetrics.submitClientEvent);
|
|
5939
|
+
checkBehavioralMetricSent();
|
|
5928
5940
|
});
|
|
5929
5941
|
|
|
5930
5942
|
it('handles "Failed" state correctly when hasMediaConnectionConnectedAtLeastOnce = true', async () => {
|
|
5931
|
-
const FAKE_ERROR = {fatal: true};
|
|
5932
|
-
const getErrorPayloadForClientErrorCodeStub = webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode = sinon
|
|
5933
|
-
.stub()
|
|
5934
|
-
.returns(FAKE_ERROR);
|
|
5935
5943
|
meeting.hasMediaConnectionConnectedAtLeastOnce = true;
|
|
5936
5944
|
|
|
5937
5945
|
mockFailedEvent();
|
|
5938
5946
|
|
|
5939
|
-
assert.
|
|
5940
|
-
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
5941
|
-
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
5942
|
-
name: 'client.ice.end',
|
|
5943
|
-
payload: {
|
|
5944
|
-
canProceed: false,
|
|
5945
|
-
icePhase: 'IN_MEETING',
|
|
5946
|
-
errors: [FAKE_ERROR],
|
|
5947
|
-
},
|
|
5948
|
-
options: {
|
|
5949
|
-
meetingId: meeting.id,
|
|
5950
|
-
},
|
|
5951
|
-
});
|
|
5947
|
+
assert.notCalled(webex.internal.newMetrics.submitClientEvent);
|
|
5952
5948
|
checkBehavioralMetricSent(true);
|
|
5953
5949
|
});
|
|
5954
5950
|
});
|
|
@@ -5960,6 +5956,8 @@ describe('plugin-meetings', () => {
|
|
|
5960
5956
|
|
|
5961
5957
|
beforeEach(() => {
|
|
5962
5958
|
meeting.setupMediaConnectionListeners();
|
|
5959
|
+
webex.internal.newMetrics.submitClientEvent.resetHistory();
|
|
5960
|
+
Metrics.sendBehavioralMetric.resetHistory();
|
|
5963
5961
|
});
|
|
5964
5962
|
|
|
5965
5963
|
const checkMetricSent = (event, error) => {
|