@webex/plugin-meetings 3.3.1-next.23 → 3.3.1-next.25
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/media/MediaConnectionAwaiter.js +18 -0
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/types/media/MediaConnectionAwaiter.d.ts +6 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +5 -5
- package/src/media/MediaConnectionAwaiter.ts +20 -0
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +41 -0
package/dist/breakouts/index.js
CHANGED
|
@@ -1046,7 +1046,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
1046
1046
|
this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
|
|
1047
1047
|
}
|
|
1048
1048
|
},
|
|
1049
|
-
version: "3.3.1-next.
|
|
1049
|
+
version: "3.3.1-next.25"
|
|
1050
1050
|
});
|
|
1051
1051
|
var _default = exports.default = Breakouts;
|
|
1052
1052
|
//# sourceMappingURL=index.js.map
|
|
@@ -373,7 +373,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
|
|
|
373
373
|
throw error;
|
|
374
374
|
});
|
|
375
375
|
},
|
|
376
|
-
version: "3.3.1-next.
|
|
376
|
+
version: "3.3.1-next.25"
|
|
377
377
|
});
|
|
378
378
|
var _default = exports.default = SimultaneousInterpretation;
|
|
379
379
|
//# sourceMappingURL=index.js.map
|
|
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
|
|
|
18
18
|
languageCode: 'number',
|
|
19
19
|
languageName: 'string'
|
|
20
20
|
},
|
|
21
|
-
version: "3.3.1-next.
|
|
21
|
+
version: "3.3.1-next.25"
|
|
22
22
|
});
|
|
23
23
|
var _default = exports.default = SILanguage;
|
|
24
24
|
//# sourceMappingURL=siLanguage.js.map
|
|
@@ -54,6 +54,17 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
54
54
|
return this.webrtcMediaConnection.getConnectionState() === _internalMediaCore.ConnectionState.Connected;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Returns true if the connection is in an unrecoverable "failed" state
|
|
59
|
+
*
|
|
60
|
+
* @returns {boolean}
|
|
61
|
+
*/
|
|
62
|
+
}, {
|
|
63
|
+
key: "isFailed",
|
|
64
|
+
value: function isFailed() {
|
|
65
|
+
return this.webrtcMediaConnection.getConnectionState() === _internalMediaCore.ConnectionState.Failed;
|
|
66
|
+
}
|
|
67
|
+
|
|
57
68
|
/**
|
|
58
69
|
* Returns true if the ICE Gathering is completed, false otherwise.
|
|
59
70
|
*
|
|
@@ -87,6 +98,13 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
87
98
|
key: "connectionStateChange",
|
|
88
99
|
value: function connectionStateChange() {
|
|
89
100
|
_loggerProxy.default.logger.log("Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ".concat(this.webrtcMediaConnection.getConnectionState()));
|
|
101
|
+
if (this.isFailed()) {
|
|
102
|
+
_loggerProxy.default.logger.warn('Media:MediaConnectionAwaiter#connectionStateChange --> ICE failed, rejecting');
|
|
103
|
+
this.clearCallbacks();
|
|
104
|
+
this.defer.reject({
|
|
105
|
+
iceConnected: this.iceConnected
|
|
106
|
+
});
|
|
107
|
+
}
|
|
90
108
|
if (!this.isConnected()) {
|
|
91
109
|
return;
|
|
92
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_common","require","_internalMediaCore","_loggerProxy","_interopRequireDefault","_constants","MediaConnectionAwaiter","exports","default","_ref","webrtcMediaConnection","_classCallCheck2","_defineProperty2","defer","Defer","retried","iceConnected","onTimeoutCallback","onTimeout","bind","peerConnectionStateCallback","peerConnectionStateHandler","iceConnectionStateCallback","iceConnectionStateHandler","iceGatheringStateCallback","iceGatheringStateHandler","_createClass2","key","value","isConnected","getConnectionState","ConnectionState","Connected","isIceGatheringCompleted","getIceGatheringState","clearCallbacks","off","Event","ICE_GATHERING_STATE_CHANGED","PEER_CONNECTION_STATE_CHANGED","ICE_CONNECTION_STATE_CHANGED","connectionStateChange","LoggerProxy","logger","log","concat","clearTimeout","timer","resolve","peerConnectionState","getPeerConnectionState","iceConnectionState","getIceConnectionState","iceGatheringState","setTimeout","ICE_AND_DTLS_CONNECTION_TIMEOUT","warn","reject","waitForMediaConnectionConnected","_promise","on","promise"],"sources":["MediaConnectionAwaiter.ts"],"sourcesContent":["import {Defer} from '@webex/common';\nimport {ConnectionState, Event} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';\n\nexport interface MediaConnectionAwaiterProps {\n webrtcMediaConnection: any;\n}\n\n/**\n * @class MediaConnectionAwaiter\n */\nexport default class MediaConnectionAwaiter {\n private webrtcMediaConnection: any;\n private timer: any;\n private defer: Defer;\n private retried: boolean;\n private iceConnected: boolean;\n private onTimeoutCallback: () => void;\n private peerConnectionStateCallback: () => void;\n private iceConnectionStateCallback: () => void;\n private iceGatheringStateCallback: () => void;\n\n /**\n * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps\n */\n constructor({webrtcMediaConnection}: MediaConnectionAwaiterProps) {\n this.webrtcMediaConnection = webrtcMediaConnection;\n this.defer = new Defer();\n this.retried = false;\n this.iceConnected = false;\n this.onTimeoutCallback = this.onTimeout.bind(this);\n this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);\n this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);\n this.iceGatheringStateCallback = this.iceGatheringStateHandler.bind(this);\n }\n\n /**\n * Returns true if the connection is connected, false otherwise.\n *\n * @returns {boolean}\n */\n private isConnected(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;\n }\n\n /**\n * Returns true if the ICE Gathering is completed, false otherwise.\n *\n * @returns {boolean}\n */\n private isIceGatheringCompleted(): boolean {\n return this.webrtcMediaConnection.getIceGatheringState() === 'complete';\n }\n\n /**\n * Clears the callbacks.\n *\n * @returns {void}\n */\n private clearCallbacks(): void {\n this.webrtcMediaConnection.off(\n Event.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n this.webrtcMediaConnection.off(\n Event.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n this.webrtcMediaConnection.off(\n Event.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n }\n\n /**\n * On connection state change.\n *\n * @returns {void}\n */\n connectionStateChange(): void {\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`\n );\n\n if (!this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.clearCallbacks();\n\n this.defer.resolve();\n }\n\n /**\n * Listener for peer connection state change.\n *\n * @returns {void}\n */\n peerConnectionStateHandler(): void {\n const peerConnectionState = this.webrtcMediaConnection.getPeerConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#peerConnectionStateHandler --> Peer connection state change -> ${peerConnectionState}`\n );\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE connection state change.\n *\n * @returns {void}\n */\n iceConnectionStateHandler(): void {\n const iceConnectionState = this.webrtcMediaConnection.getIceConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceConnectionStateHandler --> ICE connection state change -> ${iceConnectionState}`\n );\n\n if (iceConnectionState === 'connected' && !this.iceConnected) {\n this.iceConnected = true;\n }\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE gathering state change.\n *\n * @returns {void}\n */\n iceGatheringStateHandler(): void {\n const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceGatheringStateHandler --> ICE gathering state change -> ${iceGatheringState}`\n );\n\n if (!this.isIceGatheringCompleted()) {\n return;\n }\n\n if (this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n }\n\n /**\n * Function called when the timeout is reached.\n *\n * @returns {void}\n */\n onTimeout(): void {\n if (this.isConnected()) {\n this.clearCallbacks();\n\n this.defer.resolve();\n\n return;\n }\n\n if (!this.isIceGatheringCompleted()) {\n if (!this.retried) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'\n );\n\n // retry once if ICE gathering is not completed\n this.retried = true;\n clearTimeout(this.timer);\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return;\n }\n\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'\n );\n } else {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'\n );\n }\n\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n if (this.isConnected()) {\n return Promise.resolve();\n }\n\n this.webrtcMediaConnection.on(\n Event.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n Event.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n Event.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_common","require","_internalMediaCore","_loggerProxy","_interopRequireDefault","_constants","MediaConnectionAwaiter","exports","default","_ref","webrtcMediaConnection","_classCallCheck2","_defineProperty2","defer","Defer","retried","iceConnected","onTimeoutCallback","onTimeout","bind","peerConnectionStateCallback","peerConnectionStateHandler","iceConnectionStateCallback","iceConnectionStateHandler","iceGatheringStateCallback","iceGatheringStateHandler","_createClass2","key","value","isConnected","getConnectionState","ConnectionState","Connected","isFailed","Failed","isIceGatheringCompleted","getIceGatheringState","clearCallbacks","off","Event","ICE_GATHERING_STATE_CHANGED","PEER_CONNECTION_STATE_CHANGED","ICE_CONNECTION_STATE_CHANGED","connectionStateChange","LoggerProxy","logger","log","concat","warn","reject","clearTimeout","timer","resolve","peerConnectionState","getPeerConnectionState","iceConnectionState","getIceConnectionState","iceGatheringState","setTimeout","ICE_AND_DTLS_CONNECTION_TIMEOUT","waitForMediaConnectionConnected","_promise","on","promise"],"sources":["MediaConnectionAwaiter.ts"],"sourcesContent":["import {Defer} from '@webex/common';\nimport {ConnectionState, Event} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';\n\nexport interface MediaConnectionAwaiterProps {\n webrtcMediaConnection: any;\n}\n\n/**\n * @class MediaConnectionAwaiter\n */\nexport default class MediaConnectionAwaiter {\n private webrtcMediaConnection: any;\n private timer: any;\n private defer: Defer;\n private retried: boolean;\n private iceConnected: boolean;\n private onTimeoutCallback: () => void;\n private peerConnectionStateCallback: () => void;\n private iceConnectionStateCallback: () => void;\n private iceGatheringStateCallback: () => void;\n\n /**\n * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps\n */\n constructor({webrtcMediaConnection}: MediaConnectionAwaiterProps) {\n this.webrtcMediaConnection = webrtcMediaConnection;\n this.defer = new Defer();\n this.retried = false;\n this.iceConnected = false;\n this.onTimeoutCallback = this.onTimeout.bind(this);\n this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);\n this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);\n this.iceGatheringStateCallback = this.iceGatheringStateHandler.bind(this);\n }\n\n /**\n * Returns true if the connection is connected, false otherwise.\n *\n * @returns {boolean}\n */\n private isConnected(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;\n }\n\n /**\n * Returns true if the connection is in an unrecoverable \"failed\" state\n *\n * @returns {boolean}\n */\n private isFailed(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Failed;\n }\n\n /**\n * Returns true if the ICE Gathering is completed, false otherwise.\n *\n * @returns {boolean}\n */\n private isIceGatheringCompleted(): boolean {\n return this.webrtcMediaConnection.getIceGatheringState() === 'complete';\n }\n\n /**\n * Clears the callbacks.\n *\n * @returns {void}\n */\n private clearCallbacks(): void {\n this.webrtcMediaConnection.off(\n Event.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n this.webrtcMediaConnection.off(\n Event.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n this.webrtcMediaConnection.off(\n Event.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n }\n\n /**\n * On connection state change.\n *\n * @returns {void}\n */\n connectionStateChange(): void {\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`\n );\n\n if (this.isFailed()) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#connectionStateChange --> ICE failed, rejecting'\n );\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n if (!this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.clearCallbacks();\n\n this.defer.resolve();\n }\n\n /**\n * Listener for peer connection state change.\n *\n * @returns {void}\n */\n peerConnectionStateHandler(): void {\n const peerConnectionState = this.webrtcMediaConnection.getPeerConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#peerConnectionStateHandler --> Peer connection state change -> ${peerConnectionState}`\n );\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE connection state change.\n *\n * @returns {void}\n */\n iceConnectionStateHandler(): void {\n const iceConnectionState = this.webrtcMediaConnection.getIceConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceConnectionStateHandler --> ICE connection state change -> ${iceConnectionState}`\n );\n\n if (iceConnectionState === 'connected' && !this.iceConnected) {\n this.iceConnected = true;\n }\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE gathering state change.\n *\n * @returns {void}\n */\n iceGatheringStateHandler(): void {\n const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceGatheringStateHandler --> ICE gathering state change -> ${iceGatheringState}`\n );\n\n if (!this.isIceGatheringCompleted()) {\n return;\n }\n\n if (this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n }\n\n /**\n * Function called when the timeout is reached.\n *\n * @returns {void}\n */\n onTimeout(): void {\n if (this.isConnected()) {\n this.clearCallbacks();\n\n this.defer.resolve();\n\n return;\n }\n\n if (!this.isIceGatheringCompleted()) {\n if (!this.retried) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'\n );\n\n // retry once if ICE gathering is not completed\n this.retried = true;\n clearTimeout(this.timer);\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return;\n }\n\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'\n );\n } else {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'\n );\n }\n\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n if (this.isConnected()) {\n return Promise.resolve();\n }\n\n this.webrtcMediaConnection.on(\n Event.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n Event.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n Event.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
|
|
@@ -24,6 +24,12 @@ export default class MediaConnectionAwaiter {
|
|
|
24
24
|
* @returns {boolean}
|
|
25
25
|
*/
|
|
26
26
|
private isConnected;
|
|
27
|
+
/**
|
|
28
|
+
* Returns true if the connection is in an unrecoverable "failed" state
|
|
29
|
+
*
|
|
30
|
+
* @returns {boolean}
|
|
31
|
+
*/
|
|
32
|
+
private isFailed;
|
|
27
33
|
/**
|
|
28
34
|
* Returns true if the ICE Gathering is completed, false otherwise.
|
|
29
35
|
*
|
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.3.1-next.
|
|
65
|
+
version: "3.3.1-next.25"
|
|
66
66
|
});
|
|
67
67
|
var _default = exports.default = Webinar;
|
|
68
68
|
//# sourceMappingURL=index.js.map
|
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.3.1-next.
|
|
46
|
+
"@webex/plugin-meetings": "3.3.1-next.25",
|
|
47
47
|
"@webex/plugin-rooms": "3.3.1-next.6",
|
|
48
48
|
"@webex/test-helper-chai": "3.3.1-next.5",
|
|
49
49
|
"@webex/test-helper-mocha": "3.3.1-next.5",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"@webex/common": "3.3.1-next.5",
|
|
65
|
-
"@webex/internal-media-core": "2.7.
|
|
65
|
+
"@webex/internal-media-core": "2.7.2",
|
|
66
66
|
"@webex/internal-plugin-conversation": "3.3.1-next.6",
|
|
67
67
|
"@webex/internal-plugin-device": "3.3.1-next.5",
|
|
68
68
|
"@webex/internal-plugin-llm": "3.3.1-next.7",
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
"@webex/internal-plugin-metrics": "3.3.1-next.5",
|
|
71
71
|
"@webex/internal-plugin-support": "3.3.1-next.6",
|
|
72
72
|
"@webex/internal-plugin-user": "3.3.1-next.5",
|
|
73
|
-
"@webex/internal-plugin-voicea": "3.3.1-next.
|
|
74
|
-
"@webex/media-helpers": "3.3.1-next.
|
|
73
|
+
"@webex/internal-plugin-voicea": "3.3.1-next.25",
|
|
74
|
+
"@webex/media-helpers": "3.3.1-next.9",
|
|
75
75
|
"@webex/plugin-people": "3.3.1-next.6",
|
|
76
76
|
"@webex/plugin-rooms": "3.3.1-next.6",
|
|
77
77
|
"@webex/web-capabilities": "^1.3.0",
|
|
@@ -92,5 +92,5 @@
|
|
|
92
92
|
"//": [
|
|
93
93
|
"TODO: upgrade jwt-decode when moving to node 18"
|
|
94
94
|
],
|
|
95
|
-
"version": "3.3.1-next.
|
|
95
|
+
"version": "3.3.1-next.25"
|
|
96
96
|
}
|
|
@@ -44,6 +44,15 @@ export default class MediaConnectionAwaiter {
|
|
|
44
44
|
return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Returns true if the connection is in an unrecoverable "failed" state
|
|
49
|
+
*
|
|
50
|
+
* @returns {boolean}
|
|
51
|
+
*/
|
|
52
|
+
private isFailed(): boolean {
|
|
53
|
+
return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Failed;
|
|
54
|
+
}
|
|
55
|
+
|
|
47
56
|
/**
|
|
48
57
|
* Returns true if the ICE Gathering is completed, false otherwise.
|
|
49
58
|
*
|
|
@@ -83,6 +92,17 @@ export default class MediaConnectionAwaiter {
|
|
|
83
92
|
`Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`
|
|
84
93
|
);
|
|
85
94
|
|
|
95
|
+
if (this.isFailed()) {
|
|
96
|
+
LoggerProxy.logger.warn(
|
|
97
|
+
'Media:MediaConnectionAwaiter#connectionStateChange --> ICE failed, rejecting'
|
|
98
|
+
);
|
|
99
|
+
this.clearCallbacks();
|
|
100
|
+
|
|
101
|
+
this.defer.reject({
|
|
102
|
+
iceConnected: this.iceConnected,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
86
106
|
if (!this.isConnected()) {
|
|
87
107
|
return;
|
|
88
108
|
}
|
|
@@ -84,6 +84,47 @@ describe('MediaConnectionAwaiter', () => {
|
|
|
84
84
|
assert.calledThrice(mockMC.off);
|
|
85
85
|
});
|
|
86
86
|
|
|
87
|
+
it('rejects immediately if ice state is FAILED', async () => {
|
|
88
|
+
mockMC.getConnectionState.returns(ConnectionState.Connecting);
|
|
89
|
+
mockMC.getIceGatheringState.returns('gathering');
|
|
90
|
+
|
|
91
|
+
let promiseResolved = false;
|
|
92
|
+
let promiseRejected = false;
|
|
93
|
+
|
|
94
|
+
mediaConnectionAwaiter
|
|
95
|
+
.waitForMediaConnectionConnected()
|
|
96
|
+
.then(() => {
|
|
97
|
+
promiseResolved = true;
|
|
98
|
+
})
|
|
99
|
+
.catch((error) => {
|
|
100
|
+
promiseRejected = true;
|
|
101
|
+
|
|
102
|
+
const {iceConnected} = error;
|
|
103
|
+
assert.equal(iceConnected, false);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
await testUtils.flushPromises();
|
|
107
|
+
assert.equal(promiseResolved, false);
|
|
108
|
+
assert.equal(promiseRejected, false);
|
|
109
|
+
|
|
110
|
+
// check the right listener was registered
|
|
111
|
+
assert.calledThrice(mockMC.on);
|
|
112
|
+
assert.equal(mockMC.on.getCall(0).args[0], Event.PEER_CONNECTION_STATE_CHANGED);
|
|
113
|
+
assert.equal(mockMC.on.getCall(1).args[0], Event.ICE_CONNECTION_STATE_CHANGED);
|
|
114
|
+
assert.equal(mockMC.on.getCall(2).args[0], Event.ICE_GATHERING_STATE_CHANGED);
|
|
115
|
+
const iceConnectionListener = mockMC.on.getCall(1).args[1];
|
|
116
|
+
|
|
117
|
+
mockMC.getConnectionState.returns(ConnectionState.Failed);
|
|
118
|
+
iceConnectionListener();
|
|
119
|
+
|
|
120
|
+
await testUtils.flushPromises();
|
|
121
|
+
|
|
122
|
+
assert.equal(promiseResolved, false);
|
|
123
|
+
assert.equal(promiseRejected, true);
|
|
124
|
+
|
|
125
|
+
assert.calledThrice(mockMC.off);
|
|
126
|
+
});
|
|
127
|
+
|
|
87
128
|
it('rejects after timeout if dtls state is not connected', async () => {
|
|
88
129
|
mockMC.getConnectionState.returns(ConnectionState.Connecting);
|
|
89
130
|
mockMC.getIceGatheringState.returns('gathering');
|