@wazo/sdk 0.37.24 → 0.37.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/wazo-sdk.js +6 -6
- package/esm/__tests__/api-client.test.js +12 -12
- package/esm/__tests__/web-rtc-client.test.js +120 -103
- package/esm/api/amid.js +1 -1
- package/esm/api/call-logd.js +2 -2
- package/esm/api/ctid-ng.js +3 -3
- package/esm/api/dird.js +1 -1
- package/esm/api/webhookd.js +1 -1
- package/esm/api-client.js +12 -12
- package/esm/checker/Checker.js +145 -128
- package/esm/checker/checks/aor.js +12 -12
- package/esm/checker/checks/api.js +12 -12
- package/esm/checker/checks/index.js +135 -118
- package/esm/checker/checks/wazo-websocket.js +15 -15
- package/esm/checker/checks/webrtc-transport.js +120 -103
- package/esm/checker/checks/webrtc.js +120 -103
- package/esm/domain/AdHocAPIConference.js +12 -12
- package/esm/domain/CallLog.js +1 -1
- package/esm/domain/Contact.js +1 -1
- package/esm/domain/Features.js +12 -12
- package/esm/domain/Phone/CTIPhone.js +26 -26
- package/esm/domain/Phone/WebRTCPhone.js +87 -86
- package/esm/domain/__tests__/CallLog.test.js +1 -1
- package/esm/domain/__tests__/Contact.test.js +1 -1
- package/esm/index.js +356 -338
- package/esm/lib/WazoSessionDescriptionHandler.js +1 -1
- package/esm/service/CallApi.js +12 -12
- package/esm/service/IssueReporter.js +1 -1
- package/esm/service/__tests__/IssueReporter.test.js +1 -1
- package/esm/service/getApiClient.js +12 -12
- package/esm/simple/Auth.js +346 -328
- package/esm/simple/Configuration.js +346 -328
- package/esm/simple/Directory.js +12 -12
- package/esm/simple/Phone.js +346 -328
- package/esm/simple/Websocket.js +17 -17
- package/esm/simple/index.js +350 -332
- package/esm/simple/room/LocalParticipant.js +350 -332
- package/esm/simple/room/Participant.js +350 -332
- package/esm/simple/room/RemoteParticipant.js +350 -332
- package/esm/simple/room/Room.js +351 -333
- package/esm/simple/room/SipRoom.js +350 -332
- package/esm/simple/room/Stream.js +350 -332
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +350 -332
- package/esm/simple/utils.js +350 -332
- package/esm/web-rtc-client.js +120 -103
- package/esm/websocket-client.js +15 -15
- package/lib/__tests__/api-client.test.js +12 -12
- package/lib/__tests__/web-rtc-client.test.js +120 -103
- package/lib/api/amid.js +1 -1
- package/lib/api/call-logd.js +2 -2
- package/lib/api/ctid-ng.js +3 -3
- package/lib/api/dird.js +1 -1
- package/lib/api/webhookd.js +1 -1
- package/lib/api-client.js +12 -12
- package/lib/checker/Checker.js +145 -128
- package/lib/checker/checks/aor.js +12 -12
- package/lib/checker/checks/api.js +12 -12
- package/lib/checker/checks/index.js +135 -118
- package/lib/checker/checks/wazo-websocket.js +15 -15
- package/lib/checker/checks/webrtc-transport.js +120 -103
- package/lib/checker/checks/webrtc.js +120 -103
- package/lib/domain/AdHocAPIConference.js +12 -12
- package/lib/domain/CallLog.js +1 -1
- package/lib/domain/Contact.js +1 -1
- package/lib/domain/Features.js +12 -12
- package/lib/domain/Phone/CTIPhone.js +26 -26
- package/lib/domain/Phone/WebRTCPhone.js +87 -86
- package/lib/domain/__tests__/CallLog.test.js +1 -1
- package/lib/domain/__tests__/Contact.test.js +1 -1
- package/lib/index.js +356 -338
- package/lib/lib/WazoSessionDescriptionHandler.js +1 -1
- package/lib/service/CallApi.js +12 -12
- package/lib/service/IssueReporter.js +1 -1
- package/lib/service/__tests__/IssueReporter.test.js +1 -1
- package/lib/service/getApiClient.js +12 -12
- package/lib/simple/Auth.js +346 -328
- package/lib/simple/Configuration.js +346 -328
- package/lib/simple/Directory.js +12 -12
- package/lib/simple/Phone.js +346 -328
- package/lib/simple/Websocket.js +17 -17
- package/lib/simple/index.js +350 -332
- package/lib/simple/room/LocalParticipant.js +350 -332
- package/lib/simple/room/Participant.js +350 -332
- package/lib/simple/room/RemoteParticipant.js +350 -332
- package/lib/simple/room/Room.js +351 -333
- package/lib/simple/room/SipRoom.js +350 -332
- package/lib/simple/room/Stream.js +350 -332
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +350 -332
- package/lib/simple/utils.js +350 -332
- package/lib/web-rtc-client.js +120 -103
- package/lib/websocket-client.js +15 -15
- package/package.json +1 -1
- package/src/domain/Phone/WebRTCPhone.js +3 -2
- package/src/web-rtc-client.js +27 -10
package/lib/checker/Checker.js
CHANGED
|
@@ -468,7 +468,7 @@ var IssueReporter$1 = new IssueReporter();
|
|
|
468
468
|
|
|
469
469
|
const methods = ['head', 'get', 'post', 'put', 'delete'];
|
|
470
470
|
|
|
471
|
-
const logger = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
|
|
471
|
+
const logger$4 = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
|
|
472
472
|
|
|
473
473
|
// Use a function here to be able to mock it in tests
|
|
474
474
|
const realFetch = () => {
|
|
@@ -607,7 +607,7 @@ class ApiRequester {
|
|
|
607
607
|
};
|
|
608
608
|
|
|
609
609
|
if (this.refreshTokenPromise) {
|
|
610
|
-
logger.info('A token is already refreshing, waiting ...', { url });
|
|
610
|
+
logger$4.info('A token is already refreshing, waiting ...', { url });
|
|
611
611
|
await this.refreshTokenPromise;
|
|
612
612
|
}
|
|
613
613
|
|
|
@@ -627,7 +627,7 @@ class ApiRequester {
|
|
|
627
627
|
return promise.then(async (err ) => {
|
|
628
628
|
// Check if the token is still valid
|
|
629
629
|
if (firstCall && this._checkTokenExpired(response, err)) {
|
|
630
|
-
logger.warn('token expired', { error: err.reason });
|
|
630
|
+
logger$4.warn('token expired', { error: err.reason });
|
|
631
631
|
// Replay the call after refreshing the token
|
|
632
632
|
return this._replayWithNewToken(err, path, method, body, headers, parse);
|
|
633
633
|
}
|
|
@@ -637,7 +637,7 @@ class ApiRequester {
|
|
|
637
637
|
: exceptionClass.fromResponse(err, response.status);
|
|
638
638
|
|
|
639
639
|
if (this.shouldLogErrors) {
|
|
640
|
-
logger.error('API error', error);
|
|
640
|
+
logger$4.error('API error', error);
|
|
641
641
|
}
|
|
642
642
|
|
|
643
643
|
throw error;
|
|
@@ -647,7 +647,7 @@ class ApiRequester {
|
|
|
647
647
|
return newParse(response, isJson);
|
|
648
648
|
}).catch(error => {
|
|
649
649
|
if (this.shouldLogErrors) {
|
|
650
|
-
logger.error('Fetch failed', { url, options, message: error.message, stack: error.stack });
|
|
650
|
+
logger$4.error('Fetch failed', { url, options, message: error.message, stack: error.stack });
|
|
651
651
|
}
|
|
652
652
|
|
|
653
653
|
throw error;
|
|
@@ -675,13 +675,13 @@ class ApiRequester {
|
|
|
675
675
|
) {
|
|
676
676
|
const isTokenNotFound = this._isTokenNotFound(err);
|
|
677
677
|
let newPath = path;
|
|
678
|
-
logger.info('refreshing token', { inProgress: !!this.refreshTokenPromise });
|
|
678
|
+
logger$4.info('refreshing token', { inProgress: !!this.refreshTokenPromise });
|
|
679
679
|
|
|
680
680
|
this.refreshTokenPromise = this.refreshTokenPromise || this.refreshTokenCallback();
|
|
681
681
|
|
|
682
682
|
return this.refreshTokenPromise.then(() => {
|
|
683
683
|
this.refreshTokenPromise = null;
|
|
684
|
-
logger.info('token refreshed', { isTokenNotFound });
|
|
684
|
+
logger$4.info('token refreshed', { isTokenNotFound });
|
|
685
685
|
if (isTokenNotFound) {
|
|
686
686
|
const pathParts = path.split('/');
|
|
687
687
|
pathParts.pop();
|
|
@@ -3649,7 +3649,7 @@ const TRANSFER_FLOW_BLIND = 'blind';
|
|
|
3649
3649
|
|
|
3650
3650
|
// const MINIMUM_WAZO_ENGINE_VERSION_FOR_CTI_HOLD = '20.11';
|
|
3651
3651
|
|
|
3652
|
-
|
|
3652
|
+
IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
|
|
3653
3653
|
|
|
3654
3654
|
/* */
|
|
3655
3655
|
|
|
@@ -4568,7 +4568,7 @@ const AGENTD_VERSION = '1.0';
|
|
|
4568
4568
|
const WEBHOOKD_VERSION = '1.0';
|
|
4569
4569
|
const AMID_VERSION = '1.0';
|
|
4570
4570
|
|
|
4571
|
-
const logger$
|
|
4571
|
+
const logger$3 = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
|
|
4572
4572
|
|
|
4573
4573
|
class ApiClient {
|
|
4574
4574
|
|
|
@@ -4620,12 +4620,12 @@ class ApiClient {
|
|
|
4620
4620
|
}
|
|
4621
4621
|
|
|
4622
4622
|
async forceRefreshToken() {
|
|
4623
|
-
logger$
|
|
4623
|
+
logger$3.info('forcing refresh token, calling callback');
|
|
4624
4624
|
return this.refreshTokenCallback();
|
|
4625
4625
|
}
|
|
4626
4626
|
|
|
4627
4627
|
async refreshTokenCallback() {
|
|
4628
|
-
logger$
|
|
4628
|
+
logger$3.info('refresh token callback called', {
|
|
4629
4629
|
refreshToken: this.refreshToken,
|
|
4630
4630
|
refreshBackend: this.refreshBackend,
|
|
4631
4631
|
refreshExpiration: this.refreshExpiration,
|
|
@@ -4643,7 +4643,7 @@ class ApiClient {
|
|
|
4643
4643
|
this.isMobile,
|
|
4644
4644
|
);
|
|
4645
4645
|
|
|
4646
|
-
logger$
|
|
4646
|
+
logger$3.info('token refreshed', { token: session.token });
|
|
4647
4647
|
|
|
4648
4648
|
if (this.onRefreshToken) {
|
|
4649
4649
|
this.onRefreshToken(session.token, session);
|
|
@@ -4993,7 +4993,7 @@ const BLACKLIST_EVENTS = [
|
|
|
4993
4993
|
];
|
|
4994
4994
|
|
|
4995
4995
|
const HEARTBEAT_ENGINE_VERSION = '20.09';
|
|
4996
|
-
const logger$
|
|
4996
|
+
const logger$2 = IssueReporter$1.loggerFor('wazo-ws');
|
|
4997
4997
|
const messageLogger = IssueReporter$1.loggerFor('wazo-ws-message');
|
|
4998
4998
|
|
|
4999
4999
|
class WebSocketClient extends Emitter {
|
|
@@ -5042,19 +5042,19 @@ class WebSocketClient extends Emitter {
|
|
|
5042
5042
|
}
|
|
5043
5043
|
|
|
5044
5044
|
connect() {
|
|
5045
|
-
logger$
|
|
5045
|
+
logger$2.info('connect method started', { host: this.host, token: this.token });
|
|
5046
5046
|
this.socket = new ReconnectingWebSocket__default['default'](this._getUrl.bind(this), [], this.options);
|
|
5047
5047
|
if (this.options.binaryType) {
|
|
5048
5048
|
this.socket.binaryType = this.options.binaryType;
|
|
5049
5049
|
}
|
|
5050
5050
|
|
|
5051
5051
|
this.socket.onopen = () => {
|
|
5052
|
-
logger$
|
|
5052
|
+
logger$2.info('on Wazo WS open', { method: 'connect', host: this.host });
|
|
5053
5053
|
this.eventEmitter.emit(SOCKET_EVENTS.ON_OPEN);
|
|
5054
5054
|
};
|
|
5055
5055
|
|
|
5056
5056
|
this.socket.onerror = event => {
|
|
5057
|
-
logger$
|
|
5057
|
+
logger$2.error('on Wazo WS error', event.target);
|
|
5058
5058
|
this.eventEmitter.emit(SOCKET_EVENTS.ON_ERROR, event);
|
|
5059
5059
|
};
|
|
5060
5060
|
|
|
@@ -5084,7 +5084,7 @@ class WebSocketClient extends Emitter {
|
|
|
5084
5084
|
|
|
5085
5085
|
this.socket.onclose = event => {
|
|
5086
5086
|
// Can't be converted to JSON (circular structure)
|
|
5087
|
-
logger$
|
|
5087
|
+
logger$2.info('on Wazo WS close', {
|
|
5088
5088
|
reason: event.reason,
|
|
5089
5089
|
code: event.code,
|
|
5090
5090
|
readyState: event.target.readyState,
|
|
@@ -5102,12 +5102,12 @@ class WebSocketClient extends Emitter {
|
|
|
5102
5102
|
};
|
|
5103
5103
|
|
|
5104
5104
|
this.socket.onerror = event => {
|
|
5105
|
-
logger$
|
|
5105
|
+
logger$2.info('Wazo WS error', { message: event.message, code: event.code, readyState: event.target.readyState });
|
|
5106
5106
|
};
|
|
5107
5107
|
}
|
|
5108
5108
|
|
|
5109
5109
|
close(force = false) {
|
|
5110
|
-
logger$
|
|
5110
|
+
logger$2.info('Wazo WS close', { socket: !!this.socket, host: this.host, token: this.token });
|
|
5111
5111
|
|
|
5112
5112
|
if (!this.socket) {
|
|
5113
5113
|
return;
|
|
@@ -5125,7 +5125,7 @@ class WebSocketClient extends Emitter {
|
|
|
5125
5125
|
|
|
5126
5126
|
updateToken(token ) {
|
|
5127
5127
|
this.token = token;
|
|
5128
|
-
logger$
|
|
5128
|
+
logger$2.info('Wazo WS updating token', { url: this._getUrl(), token, socket: !!this.socket });
|
|
5129
5129
|
|
|
5130
5130
|
if (this.socket) {
|
|
5131
5131
|
// If still connected, send the token to the WS
|
|
@@ -5143,7 +5143,7 @@ class WebSocketClient extends Emitter {
|
|
|
5143
5143
|
}
|
|
5144
5144
|
|
|
5145
5145
|
startHeartbeat() {
|
|
5146
|
-
logger$
|
|
5146
|
+
logger$2.info('Wazo WS start heartbeat', { host: this.host, token: this.token });
|
|
5147
5147
|
|
|
5148
5148
|
if (!this.socket) {
|
|
5149
5149
|
this.heartbeat.stop();
|
|
@@ -5157,7 +5157,7 @@ class WebSocketClient extends Emitter {
|
|
|
5157
5157
|
}
|
|
5158
5158
|
|
|
5159
5159
|
stopHeartbeat() {
|
|
5160
|
-
logger$
|
|
5160
|
+
logger$2.info('Wazo WS stop heartbeat', { host: this.host, token: this.token });
|
|
5161
5161
|
|
|
5162
5162
|
this.heartbeat.stop();
|
|
5163
5163
|
}
|
|
@@ -5187,7 +5187,7 @@ class WebSocketClient extends Emitter {
|
|
|
5187
5187
|
}
|
|
5188
5188
|
|
|
5189
5189
|
reconnect(reason ) {
|
|
5190
|
-
logger$
|
|
5190
|
+
logger$2.info('Wazo WS reconnect', { reason, socket: !!this.socket, host: this.host, token: this.token });
|
|
5191
5191
|
if (!this.socket) {
|
|
5192
5192
|
return;
|
|
5193
5193
|
}
|
|
@@ -5243,7 +5243,7 @@ class WebSocketClient extends Emitter {
|
|
|
5243
5243
|
this.close();
|
|
5244
5244
|
}
|
|
5245
5245
|
const url = `wss://${this.host || ''}/api/websocketd/?token=${this.token || ''}&version=${this.version}`;
|
|
5246
|
-
logger$
|
|
5246
|
+
logger$2.log('Wazo WS url computed to reconnect', { url });
|
|
5247
5247
|
|
|
5248
5248
|
return url;
|
|
5249
5249
|
}
|
|
@@ -5251,12 +5251,12 @@ class WebSocketClient extends Emitter {
|
|
|
5251
5251
|
_onHeartbeat(message ) {
|
|
5252
5252
|
if (message.payload === 'pong') {
|
|
5253
5253
|
this.heartbeat.onHeartbeat();
|
|
5254
|
-
logger$
|
|
5254
|
+
logger$2.log('on heartbeat received from Wazo WS');
|
|
5255
5255
|
}
|
|
5256
5256
|
}
|
|
5257
5257
|
|
|
5258
5258
|
async _onHeartbeatTimeout() {
|
|
5259
|
-
logger$
|
|
5259
|
+
logger$2.log('heartbeat timed out', { host: this.host, token: this.token });
|
|
5260
5260
|
|
|
5261
5261
|
this.close();
|
|
5262
5262
|
this.eventEmitter.emit(SOCKET_EVENTS.ON_CLOSE, new Error('Websocket ping failure.'));
|
|
@@ -5377,7 +5377,7 @@ var wazoWebsocket = {
|
|
|
5377
5377
|
|
|
5378
5378
|
/* */
|
|
5379
5379
|
|
|
5380
|
-
const parseCandidate = (candidate ) => {
|
|
5380
|
+
const parseCandidate$1 = (candidate ) => {
|
|
5381
5381
|
if (!candidate) {
|
|
5382
5382
|
return null;
|
|
5383
5383
|
}
|
|
@@ -5531,7 +5531,7 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
5531
5531
|
this.peerConnectionDelegate.onicecandidate = event => {
|
|
5532
5532
|
wazoLogger.trace('onicecandidate', event.candidate ? event.candidate.candidate : { done: true });
|
|
5533
5533
|
if (event.candidate) {
|
|
5534
|
-
this.gatheredCandidates.push(parseCandidate(event.candidate.candidate));
|
|
5534
|
+
this.gatheredCandidates.push(parseCandidate$1(event.candidate.candidate));
|
|
5535
5535
|
}
|
|
5536
5536
|
};
|
|
5537
5537
|
|
|
@@ -5900,7 +5900,7 @@ const DEFAULT_ICE_TIMEOUT = 3000;
|
|
|
5900
5900
|
const SEND_STATS_DELAY = 5000;
|
|
5901
5901
|
|
|
5902
5902
|
const states = ['STATUS_NULL', 'STATUS_NEW', 'STATUS_CONNECTING', 'STATUS_CONNECTED', 'STATUS_COMPLETED'];
|
|
5903
|
-
const logger$
|
|
5903
|
+
const logger$1 = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-client') : console;
|
|
5904
5904
|
const statsLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-stats') : console;
|
|
5905
5905
|
|
|
5906
5906
|
// events
|
|
@@ -6076,13 +6076,13 @@ class WebRTCClient extends Emitter {
|
|
|
6076
6076
|
|
|
6077
6077
|
createUserAgent(configOverrides ) {
|
|
6078
6078
|
const webRTCConfiguration = this._createWebRTCConfiguration(configOverrides);
|
|
6079
|
-
logger$
|
|
6079
|
+
logger$1.info('sdk webrtc, creating UA', { webRTCConfiguration });
|
|
6080
6080
|
|
|
6081
6081
|
webRTCConfiguration.delegate = {
|
|
6082
6082
|
onConnect: this.onConnect.bind(this),
|
|
6083
6083
|
onDisconnect: this.onDisconnect.bind(this),
|
|
6084
6084
|
onInvite: (invitation ) => {
|
|
6085
|
-
logger$
|
|
6085
|
+
logger$1.info('sdk webrtc on invite', {
|
|
6086
6086
|
method: 'delegate.onInvite',
|
|
6087
6087
|
id: invitation.id,
|
|
6088
6088
|
remoteURI: invitation.remoteURI,
|
|
@@ -6125,7 +6125,7 @@ class WebRTCClient extends Emitter {
|
|
|
6125
6125
|
}
|
|
6126
6126
|
|
|
6127
6127
|
onConnect() {
|
|
6128
|
-
logger$
|
|
6128
|
+
logger$1.info('sdk webrtc connected', { method: 'delegate.onConnect' });
|
|
6129
6129
|
this.eventEmitter.emit(CONNECTED);
|
|
6130
6130
|
if (!this.isRegistered() && this.registerer && this.registerer.waiting) {
|
|
6131
6131
|
this.registerer.waitingToggle(false);
|
|
@@ -6134,7 +6134,7 @@ class WebRTCClient extends Emitter {
|
|
|
6134
6134
|
}
|
|
6135
6135
|
|
|
6136
6136
|
async onDisconnect(error ) {
|
|
6137
|
-
logger$
|
|
6137
|
+
logger$1.info('sdk webrtc disconnected', { method: 'delegate.onConnect', error });
|
|
6138
6138
|
this.connectionPromise = null;
|
|
6139
6139
|
// The UA will attempt to reconnect automatically when an error occurred
|
|
6140
6140
|
this.eventEmitter.emit(DISCONNECTED, error);
|
|
@@ -6159,37 +6159,37 @@ class WebRTCClient extends Emitter {
|
|
|
6159
6159
|
};
|
|
6160
6160
|
|
|
6161
6161
|
if (this.skipRegister) {
|
|
6162
|
-
logger$
|
|
6162
|
+
logger$1.info('sdk webrtc skip register...', logInfo);
|
|
6163
6163
|
return Promise.resolve();
|
|
6164
6164
|
}
|
|
6165
6165
|
|
|
6166
|
-
logger$
|
|
6166
|
+
logger$1.info('sdk webrtc registering...', logInfo);
|
|
6167
6167
|
|
|
6168
6168
|
if (!this.userAgent) {
|
|
6169
|
-
logger$
|
|
6169
|
+
logger$1.info('sdk webrtc recreating User Agent');
|
|
6170
6170
|
this.userAgent = this.createUserAgent(this.uaConfigOverrides);
|
|
6171
6171
|
}
|
|
6172
6172
|
if (!this.userAgent || this.isRegistered()) {
|
|
6173
|
-
logger$
|
|
6173
|
+
logger$1.info('sdk webrtc registering aborted, already registered or no UA can be created');
|
|
6174
6174
|
return Promise.resolve();
|
|
6175
6175
|
}
|
|
6176
6176
|
|
|
6177
6177
|
if (this.connectionPromise || (this.registerer && this.registerer.waiting)) {
|
|
6178
|
-
logger$
|
|
6178
|
+
logger$1.info('sdk webrtc registering aborted due to a registration in progress.');
|
|
6179
6179
|
return Promise.resolve();
|
|
6180
6180
|
}
|
|
6181
6181
|
|
|
6182
6182
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
6183
6183
|
|
|
6184
6184
|
const onRegisterFailed = () => {
|
|
6185
|
-
logger$
|
|
6185
|
+
logger$1.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
|
|
6186
6186
|
this.connectionPromise = null;
|
|
6187
6187
|
if (this.registerer && this.registerer.waiting) {
|
|
6188
6188
|
this.registerer.waitingToggle(false);
|
|
6189
6189
|
}
|
|
6190
6190
|
|
|
6191
6191
|
if (tries <= MAX_REGISTER_TRIES) {
|
|
6192
|
-
logger$
|
|
6192
|
+
logger$1.info('sdk webrtc registering, retrying...', { tries });
|
|
6193
6193
|
setTimeout(() => this.register(tries + 1), 300);
|
|
6194
6194
|
}
|
|
6195
6195
|
};
|
|
@@ -6198,18 +6198,18 @@ class WebRTCClient extends Emitter {
|
|
|
6198
6198
|
// Avoid race condition with the close method called just before register and setting userAgent to null
|
|
6199
6199
|
// during the resolution of the primise.
|
|
6200
6200
|
if (!this.userAgent) {
|
|
6201
|
-
logger$
|
|
6201
|
+
logger$1.info('sdk webrtc recreating User Agent after connection');
|
|
6202
6202
|
this.userAgent = this.createUserAgent(this.uaConfigOverrides);
|
|
6203
6203
|
}
|
|
6204
6204
|
|
|
6205
|
-
logger$
|
|
6205
|
+
logger$1.info('sdk webrtc registering, transport connected', { registerOptions, ua: !!this.userAgent });
|
|
6206
6206
|
this.registerer = new registerer.Registerer(this.userAgent, registerOptions);
|
|
6207
6207
|
this.connectionPromise = null;
|
|
6208
6208
|
this._monkeyPatchRegisterer(this.registerer);
|
|
6209
6209
|
|
|
6210
6210
|
// Bind registerer events
|
|
6211
6211
|
this.registerer.stateChange.addListener(newState => {
|
|
6212
|
-
logger$
|
|
6212
|
+
logger$1.info('sdk webrtc registering, state changed', { newState });
|
|
6213
6213
|
|
|
6214
6214
|
if (newState === registererState.RegistererState.Registered && this.registerer
|
|
6215
6215
|
&& this.registerer.state === registererState.RegistererState.Registered) {
|
|
@@ -6222,7 +6222,7 @@ class WebRTCClient extends Emitter {
|
|
|
6222
6222
|
const options = {
|
|
6223
6223
|
requestDelegate: {
|
|
6224
6224
|
onReject: response => {
|
|
6225
|
-
logger$
|
|
6225
|
+
logger$1.error('sdk webrtc registering, rejected', { response });
|
|
6226
6226
|
|
|
6227
6227
|
onRegisterFailed();
|
|
6228
6228
|
},
|
|
@@ -6230,13 +6230,13 @@ class WebRTCClient extends Emitter {
|
|
|
6230
6230
|
};
|
|
6231
6231
|
|
|
6232
6232
|
return this.registerer.register(options).catch((e) => {
|
|
6233
|
-
logger$
|
|
6233
|
+
logger$1.error('sdk webrtc registering, error', e);
|
|
6234
6234
|
|
|
6235
6235
|
this.eventEmitter.emit(REGISTRATION_FAILED);
|
|
6236
6236
|
return e;
|
|
6237
6237
|
});
|
|
6238
6238
|
}).catch(error => {
|
|
6239
|
-
logger$
|
|
6239
|
+
logger$1.error('sdk webrtc registering, transport error', error);
|
|
6240
6240
|
onRegisterFailed();
|
|
6241
6241
|
});
|
|
6242
6242
|
}
|
|
@@ -6265,21 +6265,21 @@ class WebRTCClient extends Emitter {
|
|
|
6265
6265
|
}
|
|
6266
6266
|
|
|
6267
6267
|
unregister() {
|
|
6268
|
-
logger$
|
|
6268
|
+
logger$1.info('sdk webrtc unregistering..', { userAgent: !!this.userAgent, registerer: !!this.registerer });
|
|
6269
6269
|
if (!this.registerer) {
|
|
6270
6270
|
return Promise.resolve();
|
|
6271
6271
|
}
|
|
6272
6272
|
|
|
6273
6273
|
try {
|
|
6274
6274
|
return this.registerer.unregister().then(() => {
|
|
6275
|
-
logger$
|
|
6275
|
+
logger$1.info('sdk webrtc unregistered');
|
|
6276
6276
|
this._cleanupRegister();
|
|
6277
6277
|
}).catch(e => {
|
|
6278
|
-
logger$
|
|
6278
|
+
logger$1.error('sdk webrtc unregistering, promise error', e);
|
|
6279
6279
|
this._cleanupRegister();
|
|
6280
6280
|
});
|
|
6281
6281
|
} catch (e) {
|
|
6282
|
-
logger$
|
|
6282
|
+
logger$1.error('sdk webrtc unregistering, error', e);
|
|
6283
6283
|
// Avoid issue with `undefined is not an object (evaluating 'new.target.prototype')` when triggering a new
|
|
6284
6284
|
// error when the registerer is in a bad state
|
|
6285
6285
|
this._cleanupRegister();
|
|
@@ -6287,7 +6287,7 @@ class WebRTCClient extends Emitter {
|
|
|
6287
6287
|
}
|
|
6288
6288
|
|
|
6289
6289
|
stop() {
|
|
6290
|
-
logger$
|
|
6290
|
+
logger$1.info('sdk webrtc stop', { userAgent: !!this.userAgent });
|
|
6291
6291
|
if (!this.userAgent) {
|
|
6292
6292
|
return Promise.resolve();
|
|
6293
6293
|
}
|
|
@@ -6295,12 +6295,12 @@ class WebRTCClient extends Emitter {
|
|
|
6295
6295
|
return this.userAgent.stop().then(() => {
|
|
6296
6296
|
return this._cleanupRegister();
|
|
6297
6297
|
}).catch(e => {
|
|
6298
|
-
logger$
|
|
6298
|
+
logger$1.warn('sdk webrtc stop, error', { message: e.message, stack: e.stack });
|
|
6299
6299
|
});
|
|
6300
6300
|
}
|
|
6301
6301
|
|
|
6302
6302
|
call(number , enableVideo , audioOnly = false, conference = false) {
|
|
6303
|
-
logger$
|
|
6303
|
+
logger$1.info('sdk webrtc creating call', { number, enableVideo, audioOnly, conference });
|
|
6304
6304
|
const inviterOptions = {
|
|
6305
6305
|
sessionDescriptionHandlerOptionsReInvite: {
|
|
6306
6306
|
conference,
|
|
@@ -6331,7 +6331,7 @@ class WebRTCClient extends Emitter {
|
|
|
6331
6331
|
this._onAccepted(session, response.session, true);
|
|
6332
6332
|
},
|
|
6333
6333
|
onReject: (response ) => {
|
|
6334
|
-
logger$
|
|
6334
|
+
logger$1.info('on call rejected', { id: session.id, fromTag: session.fromTag });
|
|
6335
6335
|
this._stopSendingStats(session);
|
|
6336
6336
|
this.stopNetworkMonitoring(session);
|
|
6337
6337
|
|
|
@@ -6354,11 +6354,11 @@ class WebRTCClient extends Emitter {
|
|
|
6354
6354
|
}
|
|
6355
6355
|
|
|
6356
6356
|
answer(session , enableVideo ) {
|
|
6357
|
-
logger$
|
|
6357
|
+
logger$1.info('sdk webrtc answer call', { id: session.id, enableVideo });
|
|
6358
6358
|
|
|
6359
6359
|
if (!session || !session.accept) {
|
|
6360
6360
|
const error = 'No session to answer, or not an invitation';
|
|
6361
|
-
logger$
|
|
6361
|
+
logger$1.warn(error);
|
|
6362
6362
|
return Promise.reject(new Error(error));
|
|
6363
6363
|
}
|
|
6364
6364
|
const options = {
|
|
@@ -6368,15 +6368,15 @@ class WebRTCClient extends Emitter {
|
|
|
6368
6368
|
return session.accept(options).then(() => {
|
|
6369
6369
|
if (session.isCanceled) {
|
|
6370
6370
|
const message = 'accepted a canceled session (or was canceled during the accept phase).';
|
|
6371
|
-
logger$
|
|
6371
|
+
logger$1.error(message, { id: session.id });
|
|
6372
6372
|
this.onCallEnded(session);
|
|
6373
6373
|
|
|
6374
6374
|
throw new CanceledCallError(message);
|
|
6375
6375
|
}
|
|
6376
|
-
logger$
|
|
6376
|
+
logger$1.info('sdk webrtc answer, accepted.');
|
|
6377
6377
|
this._onAccepted(session);
|
|
6378
6378
|
}).catch(e => {
|
|
6379
|
-
logger$
|
|
6379
|
+
logger$1.error(`answer call error for ${session ? session.id : 'n/a'}`, e);
|
|
6380
6380
|
|
|
6381
6381
|
throw e;
|
|
6382
6382
|
});
|
|
@@ -6384,7 +6384,7 @@ class WebRTCClient extends Emitter {
|
|
|
6384
6384
|
|
|
6385
6385
|
hangup(session ) {
|
|
6386
6386
|
const { state, id } = session;
|
|
6387
|
-
logger$
|
|
6387
|
+
logger$1.info('sdk webrtc hangup call', { id, state });
|
|
6388
6388
|
|
|
6389
6389
|
try {
|
|
6390
6390
|
this._stopSendingStats(session);
|
|
@@ -6413,7 +6413,7 @@ class WebRTCClient extends Emitter {
|
|
|
6413
6413
|
|
|
6414
6414
|
return bye();
|
|
6415
6415
|
} catch (error) {
|
|
6416
|
-
logger$
|
|
6416
|
+
logger$1.warn('sdk webrtc hangup, error', error);
|
|
6417
6417
|
}
|
|
6418
6418
|
|
|
6419
6419
|
return null;
|
|
@@ -6431,7 +6431,7 @@ class WebRTCClient extends Emitter {
|
|
|
6431
6431
|
// Fetch and emit an event at `interval` with session network stats
|
|
6432
6432
|
startNetworkMonitoring(session , interval = 1000) {
|
|
6433
6433
|
const sessionId = this.getSipSessionId(session);
|
|
6434
|
-
logger$
|
|
6434
|
+
logger$1.info('starting network inspection', { id: sessionId });
|
|
6435
6435
|
|
|
6436
6436
|
this.sessionNetworkStats[sessionId] = [];
|
|
6437
6437
|
|
|
@@ -6441,7 +6441,7 @@ class WebRTCClient extends Emitter {
|
|
|
6441
6441
|
stopNetworkMonitoring(session ) {
|
|
6442
6442
|
const sessionId = this.getSipSessionId(session);
|
|
6443
6443
|
const exists = sessionId in this.networkMonitoringInterval;
|
|
6444
|
-
logger$
|
|
6444
|
+
logger$1.info('stopping network inspection', { id: sessionId, exists });
|
|
6445
6445
|
|
|
6446
6446
|
if (exists) {
|
|
6447
6447
|
clearInterval(this.networkMonitoringInterval[sessionId]);
|
|
@@ -6451,17 +6451,17 @@ class WebRTCClient extends Emitter {
|
|
|
6451
6451
|
}
|
|
6452
6452
|
|
|
6453
6453
|
reject(session ) {
|
|
6454
|
-
logger$
|
|
6454
|
+
logger$1.info('sdk webrtc reject call', { id: session.id });
|
|
6455
6455
|
|
|
6456
6456
|
try {
|
|
6457
6457
|
return session.reject ? session.reject() : session.cancel();
|
|
6458
6458
|
} catch (e) {
|
|
6459
|
-
logger$
|
|
6459
|
+
logger$1.warn('Error when rejecting call', e.message, e.stack);
|
|
6460
6460
|
}
|
|
6461
6461
|
}
|
|
6462
6462
|
|
|
6463
6463
|
async close() {
|
|
6464
|
-
logger$
|
|
6464
|
+
logger$1.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
6465
6465
|
this._cleanupMedia();
|
|
6466
6466
|
this.connectionPromise = null;
|
|
6467
6467
|
|
|
@@ -6492,7 +6492,7 @@ class WebRTCClient extends Emitter {
|
|
|
6492
6492
|
// eg: "INVITE not rejectable in state Completed"
|
|
6493
6493
|
}
|
|
6494
6494
|
this.userAgent = null;
|
|
6495
|
-
logger$
|
|
6495
|
+
logger$1.info('sdk webrtc client closed');
|
|
6496
6496
|
}
|
|
6497
6497
|
|
|
6498
6498
|
getNumber(session ) {
|
|
@@ -6505,13 +6505,13 @@ class WebRTCClient extends Emitter {
|
|
|
6505
6505
|
}
|
|
6506
6506
|
|
|
6507
6507
|
mute(session ) {
|
|
6508
|
-
logger$
|
|
6508
|
+
logger$1.info('sdk webrtc mute', { id: session.id });
|
|
6509
6509
|
|
|
6510
6510
|
this._toggleAudio(session, true);
|
|
6511
6511
|
}
|
|
6512
6512
|
|
|
6513
6513
|
unmute(session ) {
|
|
6514
|
-
logger$
|
|
6514
|
+
logger$1.info('sdk webrtc unmute', { id: session.id });
|
|
6515
6515
|
|
|
6516
6516
|
this._toggleAudio(session, false);
|
|
6517
6517
|
}
|
|
@@ -6551,13 +6551,13 @@ class WebRTCClient extends Emitter {
|
|
|
6551
6551
|
}
|
|
6552
6552
|
|
|
6553
6553
|
toggleCameraOn(session ) {
|
|
6554
|
-
logger$
|
|
6554
|
+
logger$1.info('sdk webrtc toggle camera on', { id: session.id });
|
|
6555
6555
|
|
|
6556
6556
|
this._toggleVideo(session, false);
|
|
6557
6557
|
}
|
|
6558
6558
|
|
|
6559
6559
|
toggleCameraOff(session ) {
|
|
6560
|
-
logger$
|
|
6560
|
+
logger$1.info('sdk webrtc toggle camera off', { id: session.id });
|
|
6561
6561
|
|
|
6562
6562
|
this._toggleVideo(session, true);
|
|
6563
6563
|
}
|
|
@@ -6566,7 +6566,7 @@ class WebRTCClient extends Emitter {
|
|
|
6566
6566
|
const sessionId = this.getSipSessionId(session);
|
|
6567
6567
|
const hasVideo = hadVideo || this.hasLocalVideo(sessionId);
|
|
6568
6568
|
|
|
6569
|
-
logger$
|
|
6569
|
+
logger$1.info('sdk webrtc hold', {
|
|
6570
6570
|
sessionId,
|
|
6571
6571
|
keys: Object.keys(this.heldSessions),
|
|
6572
6572
|
pendingReinvite: !!session.pendingReinvite,
|
|
@@ -6615,7 +6615,7 @@ class WebRTCClient extends Emitter {
|
|
|
6615
6615
|
const sessionId = this.getSipSessionId(session);
|
|
6616
6616
|
const hasVideo = sessionId in this.heldSessions && this.heldSessions[sessionId].hasVideo;
|
|
6617
6617
|
|
|
6618
|
-
logger$
|
|
6618
|
+
logger$1.info('sdk webrtc unhold', {
|
|
6619
6619
|
sessionId,
|
|
6620
6620
|
keys: Object.keys(this.heldSessions),
|
|
6621
6621
|
pendingReinvite: !!session.pendingReinvite,
|
|
@@ -6763,7 +6763,7 @@ class WebRTCClient extends Emitter {
|
|
|
6763
6763
|
if (!session.sessionDescriptionHandler) {
|
|
6764
6764
|
return;
|
|
6765
6765
|
}
|
|
6766
|
-
logger$
|
|
6766
|
+
logger$1.info('Sending DTMF', {
|
|
6767
6767
|
id: this.getSipSessionId(session),
|
|
6768
6768
|
tone,
|
|
6769
6769
|
});
|
|
@@ -6779,7 +6779,7 @@ class WebRTCClient extends Emitter {
|
|
|
6779
6779
|
transfer(session , target ) {
|
|
6780
6780
|
this.hold(session);
|
|
6781
6781
|
|
|
6782
|
-
logger$
|
|
6782
|
+
logger$1.info('Transfering a session', {
|
|
6783
6783
|
id: this.getSipSessionId(session),
|
|
6784
6784
|
target,
|
|
6785
6785
|
});
|
|
@@ -6801,17 +6801,17 @@ class WebRTCClient extends Emitter {
|
|
|
6801
6801
|
atxfer(session ) {
|
|
6802
6802
|
this.hold(session);
|
|
6803
6803
|
|
|
6804
|
-
logger$
|
|
6804
|
+
logger$1.info('webrtc transfer started', { id: this.getSipSessionId(session) });
|
|
6805
6805
|
|
|
6806
6806
|
const result = {
|
|
6807
6807
|
newSession: null,
|
|
6808
6808
|
init: async (target ) => {
|
|
6809
|
-
logger$
|
|
6809
|
+
logger$1.info('webrtc transfer initialized', { id: this.getSipSessionId(session), target });
|
|
6810
6810
|
|
|
6811
6811
|
result.newSession = await this.call(target);
|
|
6812
6812
|
},
|
|
6813
6813
|
complete: () => {
|
|
6814
|
-
logger$
|
|
6814
|
+
logger$1.info('webrtc transfer completed', {
|
|
6815
6815
|
id: this.getSipSessionId(session),
|
|
6816
6816
|
referId: this.getSipSessionId(result.newSession),
|
|
6817
6817
|
});
|
|
@@ -6832,7 +6832,7 @@ class WebRTCClient extends Emitter {
|
|
|
6832
6832
|
return;
|
|
6833
6833
|
}
|
|
6834
6834
|
|
|
6835
|
-
logger$
|
|
6835
|
+
logger$1.info('send WebRTC message', { sipId: sipSession.id, contentType });
|
|
6836
6836
|
|
|
6837
6837
|
try {
|
|
6838
6838
|
sipSession.message({
|
|
@@ -6874,7 +6874,7 @@ class WebRTCClient extends Emitter {
|
|
|
6874
6874
|
}
|
|
6875
6875
|
|
|
6876
6876
|
changeAudioOutputVolume(volume ) {
|
|
6877
|
-
logger$
|
|
6877
|
+
logger$1.info('Changing audio output volume', { volume });
|
|
6878
6878
|
|
|
6879
6879
|
Object.values(this.audioElements).forEach(audioElement => {
|
|
6880
6880
|
if (audioElement instanceof HTMLAudioElement) {
|
|
@@ -6886,7 +6886,7 @@ class WebRTCClient extends Emitter {
|
|
|
6886
6886
|
}
|
|
6887
6887
|
|
|
6888
6888
|
changeAudioOutputDevice(id ) {
|
|
6889
|
-
logger$
|
|
6889
|
+
logger$1.info('Changing audio output device', { id });
|
|
6890
6890
|
|
|
6891
6891
|
Object.values(this.audioElements).forEach(audioElement => {
|
|
6892
6892
|
// `setSinkId` method is not included in any flow type definitions for HTMLAudioElements but is a valid method
|
|
@@ -6903,7 +6903,7 @@ class WebRTCClient extends Emitter {
|
|
|
6903
6903
|
|
|
6904
6904
|
changeAudioInputDevice(id , session ) {
|
|
6905
6905
|
const currentId = this.getAudioDeviceId();
|
|
6906
|
-
logger$
|
|
6906
|
+
logger$1.info('setting audio input device', { id, currentId, session: !!session });
|
|
6907
6907
|
|
|
6908
6908
|
if (id === currentId) {
|
|
6909
6909
|
return null;
|
|
@@ -6949,7 +6949,7 @@ class WebRTCClient extends Emitter {
|
|
|
6949
6949
|
|
|
6950
6950
|
setVideoInputDevice(id ) {
|
|
6951
6951
|
const currentId = this.getVideoDeviceId();
|
|
6952
|
-
logger$
|
|
6952
|
+
logger$1.info('setting video input device', { id, currentId });
|
|
6953
6953
|
|
|
6954
6954
|
if (id === currentId) {
|
|
6955
6955
|
return null;
|
|
@@ -6974,7 +6974,7 @@ class WebRTCClient extends Emitter {
|
|
|
6974
6974
|
const sessionId = this.getSipSessionId(session);
|
|
6975
6975
|
const localStream = this.getLocalStream(sessionId);
|
|
6976
6976
|
|
|
6977
|
-
logger$
|
|
6977
|
+
logger$1.info('changing video input device', { id, sessionId });
|
|
6978
6978
|
|
|
6979
6979
|
// Release old video stream
|
|
6980
6980
|
if (localStream) {
|
|
@@ -7042,7 +7042,7 @@ class WebRTCClient extends Emitter {
|
|
|
7042
7042
|
const shouldDoScreenSharing = newConstraints && newConstraints.screen;
|
|
7043
7043
|
const desktop = newConstraints && newConstraints.desktop;
|
|
7044
7044
|
|
|
7045
|
-
logger$
|
|
7045
|
+
logger$1.info('Sending reinvite', {
|
|
7046
7046
|
id: this.getSipSessionId(sipSession),
|
|
7047
7047
|
newConstraints,
|
|
7048
7048
|
conference,
|
|
@@ -7080,7 +7080,7 @@ class WebRTCClient extends Emitter {
|
|
|
7080
7080
|
sipSession.incomingInviteRequest.message.body = response.message.body;
|
|
7081
7081
|
}
|
|
7082
7082
|
|
|
7083
|
-
logger$
|
|
7083
|
+
logger$1.info('on re-INVITE accepted', {
|
|
7084
7084
|
id: this.getSipSessionId(sipSession),
|
|
7085
7085
|
wasMuted,
|
|
7086
7086
|
shouldDoScreenSharing,
|
|
@@ -7255,7 +7255,7 @@ class WebRTCClient extends Emitter {
|
|
|
7255
7255
|
}
|
|
7256
7256
|
|
|
7257
7257
|
startHeartbeat() {
|
|
7258
|
-
logger$
|
|
7258
|
+
logger$1.info('sdk webrtc start heartbeat', { userAgent: !!this.userAgent });
|
|
7259
7259
|
if (!this.userAgent) {
|
|
7260
7260
|
this.heartbeat.stop();
|
|
7261
7261
|
return;
|
|
@@ -7268,7 +7268,7 @@ class WebRTCClient extends Emitter {
|
|
|
7268
7268
|
}
|
|
7269
7269
|
|
|
7270
7270
|
stopHeartbeat() {
|
|
7271
|
-
logger$
|
|
7271
|
+
logger$1.info('sdk webrtc stop heartbeat');
|
|
7272
7272
|
this.heartbeat.stop();
|
|
7273
7273
|
}
|
|
7274
7274
|
|
|
@@ -7289,7 +7289,7 @@ class WebRTCClient extends Emitter {
|
|
|
7289
7289
|
}
|
|
7290
7290
|
|
|
7291
7291
|
attemptReconnection() {
|
|
7292
|
-
logger$
|
|
7292
|
+
logger$1.info('attempt reconnection', { userAgent: !!this.userAgent });
|
|
7293
7293
|
if (!this.userAgent) {
|
|
7294
7294
|
return;
|
|
7295
7295
|
}
|
|
@@ -7314,7 +7314,7 @@ class WebRTCClient extends Emitter {
|
|
|
7314
7314
|
return;
|
|
7315
7315
|
}
|
|
7316
7316
|
|
|
7317
|
-
logger$
|
|
7317
|
+
logger$1.info('setting local media stream', {
|
|
7318
7318
|
sipSessionId,
|
|
7319
7319
|
tracks: newStream ? newStream.getTracks() : null,
|
|
7320
7320
|
});
|
|
@@ -7331,7 +7331,7 @@ class WebRTCClient extends Emitter {
|
|
|
7331
7331
|
|
|
7332
7332
|
const oldStream = this.getLocalStream(sipSessionId);
|
|
7333
7333
|
|
|
7334
|
-
logger$
|
|
7334
|
+
logger$1.info('updating local stream', {
|
|
7335
7335
|
sipSessionId,
|
|
7336
7336
|
oldStream: !!oldStream,
|
|
7337
7337
|
tracks: newStream.getTracks(),
|
|
@@ -7351,7 +7351,7 @@ class WebRTCClient extends Emitter {
|
|
|
7351
7351
|
const remoteStream = this.getRemoteStream(sessionId);
|
|
7352
7352
|
const pc = this.getPeerConnection(sessionId);
|
|
7353
7353
|
|
|
7354
|
-
logger$
|
|
7354
|
+
logger$1.info('Updating remote stream', {
|
|
7355
7355
|
sessionId,
|
|
7356
7356
|
tracks: remoteStream ? remoteStream.getTracks() : null,
|
|
7357
7357
|
receiverTracks: pc && pc.getReceivers ? pc.getReceivers().map(receiver => receiver.track) : null,
|
|
@@ -7376,14 +7376,16 @@ class WebRTCClient extends Emitter {
|
|
|
7376
7376
|
const screenSharing = constraints && 'screen' in constraints ? constraints.screen : false;
|
|
7377
7377
|
const isDesktop = constraints && 'desktop' in constraints ? constraints.desktop : false;
|
|
7378
7378
|
const withAudio = constraints && 'audio' in constraints ? constraints.audio : true;
|
|
7379
|
+
const mandatoryVideo = constraints && typeof constraints.video === 'object' ? constraints.video.mandatory : {};
|
|
7379
7380
|
|
|
7380
|
-
logger$
|
|
7381
|
+
logger$1.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
|
|
7381
7382
|
|
|
7382
7383
|
return {
|
|
7383
7384
|
constraints: {
|
|
7384
7385
|
// Exact constraint are not supported with `getDisplayMedia` and we must have a video=false in desktop screenshare
|
|
7385
7386
|
audio: screenSharing ? !isDesktop : (withAudio ? this._getAudioConstraints() : false),
|
|
7386
|
-
video: screenSharing ? (isDesktop
|
|
7387
|
+
video: screenSharing ? (isDesktop
|
|
7388
|
+
? ({ mandatory: { chromeMediaSource: 'desktop', ...(mandatoryVideo || {}) } }) : { cursor: 'always' })
|
|
7387
7389
|
: this._getVideoConstraints(enableVideo),
|
|
7388
7390
|
screen: screenSharing,
|
|
7389
7391
|
desktop: isDesktop,
|
|
@@ -7426,7 +7428,7 @@ class WebRTCClient extends Emitter {
|
|
|
7426
7428
|
}
|
|
7427
7429
|
|
|
7428
7430
|
_onTransportError() {
|
|
7429
|
-
logger$
|
|
7431
|
+
logger$1.error('on transport error');
|
|
7430
7432
|
this.eventEmitter.emit(TRANSPORT_ERROR);
|
|
7431
7433
|
this.attemptReconnection();
|
|
7432
7434
|
}
|
|
@@ -7435,7 +7437,7 @@ class WebRTCClient extends Emitter {
|
|
|
7435
7437
|
const body = message && typeof message === 'object' ? message.data : message;
|
|
7436
7438
|
if (body && body.indexOf('200 OK') !== -1) {
|
|
7437
7439
|
if (this.hasHeartbeat()) {
|
|
7438
|
-
logger$
|
|
7440
|
+
logger$1.info('on heartbeat received from Asterisk', { hasHeartbeat: this.hasHeartbeat() });
|
|
7439
7441
|
|
|
7440
7442
|
this.heartbeat.onHeartbeat();
|
|
7441
7443
|
if (this.heartbeatCb) {
|
|
@@ -7446,7 +7448,7 @@ class WebRTCClient extends Emitter {
|
|
|
7446
7448
|
}
|
|
7447
7449
|
|
|
7448
7450
|
async _onHeartbeatTimeout() {
|
|
7449
|
-
logger$
|
|
7451
|
+
logger$1.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
|
|
7450
7452
|
|
|
7451
7453
|
if (this.heartbeatTimeoutCb) {
|
|
7452
7454
|
this.heartbeatTimeoutCb();
|
|
@@ -7458,7 +7460,7 @@ class WebRTCClient extends Emitter {
|
|
|
7458
7460
|
try {
|
|
7459
7461
|
await this.userAgent.transport.disconnect();
|
|
7460
7462
|
} catch (e) {
|
|
7461
|
-
logger$
|
|
7463
|
+
logger$1.error('Transport disconnection after heartbeat timeout, error', e);
|
|
7462
7464
|
}
|
|
7463
7465
|
}
|
|
7464
7466
|
|
|
@@ -7491,31 +7493,31 @@ class WebRTCClient extends Emitter {
|
|
|
7491
7493
|
}
|
|
7492
7494
|
|
|
7493
7495
|
_connectIfNeeded() {
|
|
7494
|
-
logger$
|
|
7496
|
+
logger$1.info('connect if needed, checking', { connected: this.isConnected() });
|
|
7495
7497
|
if (!this.userAgent) {
|
|
7496
|
-
logger$
|
|
7498
|
+
logger$1.info('need to recreate User Agent');
|
|
7497
7499
|
this.userAgent = this.createUserAgent(this.uaConfigOverrides);
|
|
7498
7500
|
}
|
|
7499
7501
|
|
|
7500
7502
|
if (this.isConnected()) {
|
|
7501
|
-
logger$
|
|
7503
|
+
logger$1.info('webrtc sdk, already connected');
|
|
7502
7504
|
return Promise.resolve();
|
|
7503
7505
|
}
|
|
7504
7506
|
|
|
7505
7507
|
if (this.isConnecting()) {
|
|
7506
|
-
logger$
|
|
7508
|
+
logger$1.info('webrtc sdk, already connecting...');
|
|
7507
7509
|
|
|
7508
7510
|
this.connectionPromise = this.userAgent.transport.connectPromise;
|
|
7509
7511
|
return this.connectionPromise;
|
|
7510
7512
|
}
|
|
7511
7513
|
|
|
7512
7514
|
if (this.connectionPromise) {
|
|
7513
|
-
logger$
|
|
7515
|
+
logger$1.info('webrtc sdk, connection promise connecting...');
|
|
7514
7516
|
// $FlowFixMe
|
|
7515
7517
|
return this.connectionPromise;
|
|
7516
7518
|
}
|
|
7517
7519
|
|
|
7518
|
-
logger$
|
|
7520
|
+
logger$1.info('WebRTC UA needs to connect');
|
|
7519
7521
|
|
|
7520
7522
|
// Force UA to reconnect
|
|
7521
7523
|
if (this.userAgent && this.userAgent.state !== userAgentState.UserAgentState.Stopped) {
|
|
@@ -7640,7 +7642,7 @@ class WebRTCClient extends Emitter {
|
|
|
7640
7642
|
|
|
7641
7643
|
sdh.peerConnectionDelegate = {
|
|
7642
7644
|
onicecandidateerror: (error ) => {
|
|
7643
|
-
logger$
|
|
7645
|
+
logger$1.error('on icecandidate error', {
|
|
7644
7646
|
address: error.address,
|
|
7645
7647
|
port: error.port,
|
|
7646
7648
|
errorCode: error.errorCode,
|
|
@@ -7669,7 +7671,7 @@ class WebRTCClient extends Emitter {
|
|
|
7669
7671
|
updatedNumber = session.assertedIdentity.uri.normal.user;
|
|
7670
7672
|
updatedCalleeName = session.assertedIdentity.displayName || updatedNumber;
|
|
7671
7673
|
}
|
|
7672
|
-
logger$
|
|
7674
|
+
logger$1.info('re-invite received', { updatedCalleeName, updatedNumber, hadRemoteVideo });
|
|
7673
7675
|
|
|
7674
7676
|
// Useful to know if it's a video upgrade or an unhold from a remote peer with a video stream
|
|
7675
7677
|
|
|
@@ -7690,7 +7692,7 @@ class WebRTCClient extends Emitter {
|
|
|
7690
7692
|
}
|
|
7691
7693
|
|
|
7692
7694
|
_onAccepted(session , sessionDialog , withEvent = true) {
|
|
7693
|
-
logger$
|
|
7695
|
+
logger$1.info('on call accepted', { id: session.id, remoteTag: session.remoteTag });
|
|
7694
7696
|
|
|
7695
7697
|
this.storeSipSession(session);
|
|
7696
7698
|
|
|
@@ -7702,7 +7704,7 @@ class WebRTCClient extends Emitter {
|
|
|
7702
7704
|
const onTrack = (event ) => {
|
|
7703
7705
|
const isAudioOnly = this._isAudioOnly(session);
|
|
7704
7706
|
const { kind, label, readyState, id, muted } = event.track;
|
|
7705
|
-
logger$
|
|
7707
|
+
logger$1.info('on track event', { isAudioOnly, kind, label, readyState, id, muted });
|
|
7706
7708
|
|
|
7707
7709
|
// Stop video track in audio only mode
|
|
7708
7710
|
if (isAudioOnly && kind === 'video') {
|
|
@@ -7718,12 +7720,14 @@ class WebRTCClient extends Emitter {
|
|
|
7718
7720
|
|
|
7719
7721
|
session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
|
|
7720
7722
|
|
|
7721
|
-
|
|
7722
|
-
|
|
7723
|
-
|
|
7724
|
-
|
|
7725
|
-
|
|
7726
|
-
|
|
7723
|
+
if (pc) {
|
|
7724
|
+
pc.oniceconnectionstatechange = () => {
|
|
7725
|
+
logger$1.info('on ice connection state changed', { state: pc.iceConnectionState });
|
|
7726
|
+
if (pc.iceConnectionState === 'disconnected') {
|
|
7727
|
+
this.eventEmitter.emit(ON_DISCONNECTED);
|
|
7728
|
+
}
|
|
7729
|
+
};
|
|
7730
|
+
}
|
|
7727
7731
|
|
|
7728
7732
|
if (withEvent) {
|
|
7729
7733
|
this.eventEmitter.emit(ACCEPTED, session, sessionDialog);
|
|
@@ -7892,10 +7896,10 @@ class WebRTCClient extends Emitter {
|
|
|
7892
7896
|
|
|
7893
7897
|
_stopSendingStats(session ) {
|
|
7894
7898
|
const sessionId = this.getSipSessionId(session);
|
|
7895
|
-
logger$
|
|
7899
|
+
logger$1.trace('Check for stopping stats', { sessionId, ids: Object.keys(this.statsIntervals) });
|
|
7896
7900
|
|
|
7897
7901
|
if (sessionId in this.statsIntervals) {
|
|
7898
|
-
logger$
|
|
7902
|
+
logger$1.trace('Stop sending stats for call', { sessionId });
|
|
7899
7903
|
this.statsIntervals[sessionId]();
|
|
7900
7904
|
delete this.statsIntervals[sessionId];
|
|
7901
7905
|
}
|
|
@@ -7911,7 +7915,7 @@ class WebRTCClient extends Emitter {
|
|
|
7911
7915
|
try {
|
|
7912
7916
|
await this.userAgent.transport.disconnect();
|
|
7913
7917
|
} catch (e) {
|
|
7914
|
-
logger$
|
|
7918
|
+
logger$1.error('WebRTC transport disconnect, error', e);
|
|
7915
7919
|
}
|
|
7916
7920
|
}
|
|
7917
7921
|
}
|
|
@@ -7933,13 +7937,17 @@ class WebRTCClient extends Emitter {
|
|
|
7933
7937
|
const nbStats = this.sessionNetworkStats[sessionId].length;
|
|
7934
7938
|
const lastNetworkStats = this.sessionNetworkStats[sessionId][nbStats - 1];
|
|
7935
7939
|
const lastAudioSent = lastNetworkStats ? lastNetworkStats.audioBytesSent : 0;
|
|
7940
|
+
const lastAudioContentSent = lastNetworkStats ? lastNetworkStats.audioContentSent : 0;
|
|
7936
7941
|
const lastVideoSent = lastNetworkStats ? lastNetworkStats.videoBytesSent : 0;
|
|
7937
7942
|
const lastAudioReceived = lastNetworkStats ? lastNetworkStats.audioBytesReceived : 0;
|
|
7943
|
+
const lastAudioContentReceived = lastNetworkStats ? lastNetworkStats.audioContentReceived : 0;
|
|
7938
7944
|
const lastVideoReceived = lastNetworkStats ? lastNetworkStats.videoBytesReceived : 0;
|
|
7939
7945
|
const lastTransportSent = lastNetworkStats ? lastNetworkStats.transportSent : 0;
|
|
7940
7946
|
const lastTransportReceived = lastNetworkStats ? lastNetworkStats.transportReceived : 0;
|
|
7941
|
-
let audioBytesSent = 0;
|
|
7942
|
-
let audioBytesReceived = 0;
|
|
7947
|
+
let audioBytesSent = 0; // content + header
|
|
7948
|
+
let audioBytesReceived = 0; // content + header
|
|
7949
|
+
let audioContentSent = 0; // useful to detect blank call
|
|
7950
|
+
let audioContentReceived = 0;
|
|
7943
7951
|
let videoBytesSent = 0;
|
|
7944
7952
|
let videoBytesReceived = 0;
|
|
7945
7953
|
let transportSent = 0;
|
|
@@ -7949,6 +7957,7 @@ class WebRTCClient extends Emitter {
|
|
|
7949
7957
|
stats.forEach(report => {
|
|
7950
7958
|
if (report.type === 'outbound-rtp' && report.kind === 'audio') {
|
|
7951
7959
|
audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
|
|
7960
|
+
audioContentSent += Number(report.bytesSent);
|
|
7952
7961
|
}
|
|
7953
7962
|
if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
|
|
7954
7963
|
audioBytesSent += Number(report.bytesSent);
|
|
@@ -7960,6 +7969,7 @@ class WebRTCClient extends Emitter {
|
|
|
7960
7969
|
packetsLost += Number(report.packetsLost);
|
|
7961
7970
|
networkStats.packetsReceived = Number(report.packetsReceived);
|
|
7962
7971
|
audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
|
|
7972
|
+
audioContentReceived += Number(report.bytesReceived);
|
|
7963
7973
|
}
|
|
7964
7974
|
if (report.type === 'inbound-rtp' && report.kind === 'video') {
|
|
7965
7975
|
videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
|
|
@@ -7988,10 +7998,17 @@ class WebRTCClient extends Emitter {
|
|
|
7988
7998
|
});
|
|
7989
7999
|
|
|
7990
8000
|
networkStats.packetsLost = packetsLost;
|
|
8001
|
+
|
|
7991
8002
|
networkStats.totalAudioBytesSent = audioBytesSent;
|
|
7992
8003
|
networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
|
|
7993
8004
|
networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
|
|
7994
8005
|
networkStats.audioBytesReceived = audioBytesReceived;
|
|
8006
|
+
|
|
8007
|
+
networkStats.totalAudioContentSent = audioContentSent;
|
|
8008
|
+
networkStats.audioContentSent = audioContentSent - lastAudioContentSent;
|
|
8009
|
+
networkStats.totalAudioBytesReceived = audioContentReceived - lastAudioContentReceived;
|
|
8010
|
+
networkStats.audioContentReceived = audioContentReceived;
|
|
8011
|
+
|
|
7995
8012
|
networkStats.totalVideoBytesSent = videoBytesSent;
|
|
7996
8013
|
networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
|
|
7997
8014
|
networkStats.totalVideoBytesReceived = videoBytesReceived;
|
|
@@ -8094,7 +8111,7 @@ var webrtc = {
|
|
|
8094
8111
|
}),
|
|
8095
8112
|
};
|
|
8096
8113
|
|
|
8097
|
-
const parseCandidate
|
|
8114
|
+
const parseCandidate = line => {
|
|
8098
8115
|
let parts;
|
|
8099
8116
|
// Parse both variants.
|
|
8100
8117
|
if (line.indexOf('a=candidate:') === 0) {
|
|
@@ -8185,7 +8202,7 @@ var SymmetricNat = {
|
|
|
8185
8202
|
}
|
|
8186
8203
|
|
|
8187
8204
|
if (e.candidate && e.candidate.candidate.indexOf('srflx') !== -1) {
|
|
8188
|
-
const cand = parseCandidate
|
|
8205
|
+
const cand = parseCandidate(e.candidate.candidate);
|
|
8189
8206
|
if (!candidates[cand.relatedPort]) candidates[cand.relatedPort] = [];
|
|
8190
8207
|
candidates[cand.relatedPort].push(cand.port);
|
|
8191
8208
|
} else if (!e.candidate) {
|
|
@@ -8253,7 +8270,7 @@ var iceIpv4 = {
|
|
|
8253
8270
|
const rawCandidate = e.candidate.candidate;
|
|
8254
8271
|
if (rawCandidate.indexOf('srflx') !== -1 || rawCandidate.indexOf('relay') !== -1) {
|
|
8255
8272
|
hasSrflxOrRelay = true;
|
|
8256
|
-
const candidate = parseCandidate
|
|
8273
|
+
const candidate = parseCandidate(e.candidate.candidate);
|
|
8257
8274
|
ips.push(candidate.ip);
|
|
8258
8275
|
}
|
|
8259
8276
|
} else if (!e.candidate) {
|
|
@@ -8290,7 +8307,7 @@ var checks = [
|
|
|
8290
8307
|
|
|
8291
8308
|
//
|
|
8292
8309
|
|
|
8293
|
-
const logger
|
|
8310
|
+
const logger = IssueReporter$1.loggerFor('engine-check');
|
|
8294
8311
|
|
|
8295
8312
|
class Checker {
|
|
8296
8313
|
|
|
@@ -8308,28 +8325,28 @@ class Checker {
|
|
|
8308
8325
|
async check(onCheckBegin = () => {}, onCheckResult = () => {}) {
|
|
8309
8326
|
await this._addEngineVersion();
|
|
8310
8327
|
|
|
8311
|
-
logger
|
|
8328
|
+
logger.info('Engine check starting');
|
|
8312
8329
|
|
|
8313
8330
|
for (let i = 0; i < this.checks.length; i++) {
|
|
8314
8331
|
const { name, check } = this.checks[i];
|
|
8315
8332
|
|
|
8316
|
-
logger
|
|
8333
|
+
logger.info(`Checking ${name} ...`);
|
|
8317
8334
|
|
|
8318
8335
|
onCheckBegin(name);
|
|
8319
8336
|
try {
|
|
8320
8337
|
// eslint-disable-next-line no-await-in-loop
|
|
8321
8338
|
const result = await check(this.server, this.session, this.externalAppConfig);
|
|
8322
|
-
logger
|
|
8339
|
+
logger.info(`Checking ${name} success.`, { result });
|
|
8323
8340
|
|
|
8324
8341
|
onCheckResult(name, result);
|
|
8325
8342
|
} catch (e) {
|
|
8326
|
-
logger
|
|
8343
|
+
logger.info(`Checking ${name} failure`, { message: e.message });
|
|
8327
8344
|
|
|
8328
8345
|
onCheckResult(name, e);
|
|
8329
8346
|
}
|
|
8330
8347
|
}
|
|
8331
8348
|
|
|
8332
|
-
logger
|
|
8349
|
+
logger.info('Engine check done.');
|
|
8333
8350
|
}
|
|
8334
8351
|
|
|
8335
8352
|
addCheck(check ) {
|