@wazo/sdk 0.37.23 → 0.37.24
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 +22 -17
- package/esm/__tests__/web-rtc-client.test.js +105 -100
- package/esm/api/amid.js +1 -1
- package/esm/api/call-logd.js +2 -2
- package/esm/api/confd.js +10 -5
- 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 +22 -17
- package/esm/checker/Checker.js +130 -125
- package/esm/checker/checks/aor.js +22 -17
- package/esm/checker/checks/api.js +22 -17
- package/esm/checker/checks/index.js +120 -115
- package/esm/checker/checks/wazo-websocket.js +15 -15
- package/esm/checker/checks/webrtc-transport.js +105 -100
- package/esm/checker/checks/webrtc.js +105 -100
- package/esm/domain/AdHocAPIConference.js +22 -17
- package/esm/domain/CallLog.js +1 -1
- package/esm/domain/Contact.js +1 -1
- package/esm/domain/Features.js +22 -17
- package/esm/domain/Meeting.js +12 -5
- package/esm/domain/Phone/CTIPhone.js +36 -31
- package/esm/domain/Phone/WebRTCPhone.js +110 -87
- package/esm/domain/__tests__/CallLog.test.js +1 -1
- package/esm/domain/__tests__/Contact.test.js +1 -1
- package/esm/domain/__tests__/Meeting.test.js +144 -0
- package/esm/index.js +365 -337
- package/esm/lib/WazoSessionDescriptionHandler.js +1 -1
- package/esm/service/CallApi.js +22 -17
- package/esm/service/IssueReporter.js +1 -1
- package/esm/service/__tests__/IssueReporter.test.js +1 -1
- package/esm/service/getApiClient.js +22 -17
- package/esm/simple/Auth.js +355 -327
- package/esm/simple/Configuration.js +355 -327
- package/esm/simple/Directory.js +22 -17
- package/esm/simple/Phone.js +355 -327
- package/esm/simple/Websocket.js +17 -17
- package/esm/simple/index.js +359 -331
- package/esm/simple/room/LocalParticipant.js +359 -331
- package/esm/simple/room/Participant.js +359 -331
- package/esm/simple/room/RemoteParticipant.js +359 -331
- package/esm/simple/room/Room.js +360 -332
- package/esm/simple/room/SipRoom.js +359 -331
- package/esm/simple/room/Stream.js +359 -331
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +359 -331
- package/esm/simple/utils.js +359 -331
- package/esm/types/WebSocketMessage.js +1 -1
- package/esm/web-rtc-client.js +105 -100
- package/esm/websocket-client.js +15 -15
- package/lib/__tests__/api-client.test.js +22 -17
- package/lib/__tests__/web-rtc-client.test.js +105 -100
- package/lib/api/amid.js +1 -1
- package/lib/api/call-logd.js +2 -2
- package/lib/api/confd.js +10 -5
- 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 +22 -17
- package/lib/checker/Checker.js +130 -125
- package/lib/checker/checks/aor.js +22 -17
- package/lib/checker/checks/api.js +22 -17
- package/lib/checker/checks/index.js +120 -115
- package/lib/checker/checks/wazo-websocket.js +15 -15
- package/lib/checker/checks/webrtc-transport.js +105 -100
- package/lib/checker/checks/webrtc.js +105 -100
- package/lib/domain/AdHocAPIConference.js +22 -17
- package/lib/domain/CallLog.js +1 -1
- package/lib/domain/Contact.js +1 -1
- package/lib/domain/Features.js +22 -17
- package/lib/domain/Meeting.js +16 -5
- package/lib/domain/Phone/CTIPhone.js +36 -31
- package/lib/domain/Phone/WebRTCPhone.js +110 -87
- package/lib/domain/__tests__/CallLog.test.js +1 -1
- package/lib/domain/__tests__/Contact.test.js +1 -1
- package/lib/domain/__tests__/Meeting.test.js +150 -0
- package/lib/index.js +365 -337
- package/lib/lib/WazoSessionDescriptionHandler.js +1 -1
- package/lib/service/CallApi.js +22 -17
- package/lib/service/IssueReporter.js +1 -1
- package/lib/service/__tests__/IssueReporter.test.js +1 -1
- package/lib/service/getApiClient.js +22 -17
- package/lib/simple/Auth.js +355 -327
- package/lib/simple/Configuration.js +355 -327
- package/lib/simple/Directory.js +22 -17
- package/lib/simple/Phone.js +355 -327
- package/lib/simple/Websocket.js +17 -17
- package/lib/simple/index.js +359 -331
- package/lib/simple/room/LocalParticipant.js +359 -331
- package/lib/simple/room/Participant.js +359 -331
- package/lib/simple/room/RemoteParticipant.js +359 -331
- package/lib/simple/room/Room.js +360 -332
- package/lib/simple/room/SipRoom.js +359 -331
- package/lib/simple/room/Stream.js +359 -331
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +359 -331
- package/lib/simple/utils.js +359 -331
- package/lib/types/WebSocketMessage.js +2 -0
- package/lib/web-rtc-client.js +105 -100
- package/lib/websocket-client.js +15 -15
- package/package.json +1 -1
- package/src/domain/Meeting.js +12 -5
- package/src/domain/Phone/WebRTCPhone.js +24 -1
- package/src/domain/__tests__/Meeting.test.js +50 -0
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
|
|
471
|
+
const logger = 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
|
|
610
|
+
logger.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
|
|
630
|
+
logger.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
|
|
640
|
+
logger.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
|
|
650
|
+
logger.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
|
|
678
|
+
logger.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
|
|
684
|
+
logger.info('token refreshed', { isTokenNotFound });
|
|
685
685
|
if (isTokenNotFound) {
|
|
686
686
|
const pathParts = path.split('/');
|
|
687
687
|
pathParts.pop();
|
|
@@ -2639,8 +2639,9 @@ class ExternalApp {
|
|
|
2639
2639
|
|
|
2640
2640
|
|
|
2641
2641
|
|
|
2642
|
-
|
|
2642
|
+
|
|
2643
2643
|
|
|
2644
|
+
|
|
2644
2645
|
|
|
2645
2646
|
|
|
2646
2647
|
class Meeting {
|
|
@@ -2651,9 +2652,10 @@ class Meeting {
|
|
|
2651
2652
|
|
|
2652
2653
|
|
|
2653
2654
|
|
|
2654
|
-
|
|
2655
|
+
|
|
2655
2656
|
|
|
2656
2657
|
|
|
2658
|
+
|
|
2657
2659
|
|
|
2658
2660
|
static parse(plain ) {
|
|
2659
2661
|
return new Meeting({
|
|
@@ -2663,8 +2665,9 @@ class Meeting {
|
|
|
2663
2665
|
ownerUuids: plain.owner_uuids,
|
|
2664
2666
|
port: plain.port,
|
|
2665
2667
|
uuid: plain.uuid,
|
|
2666
|
-
|
|
2668
|
+
extension: plain.exten,
|
|
2667
2669
|
persistent: plain.persistent,
|
|
2670
|
+
creationTime: moment__default['default'](plain.creation_time).toDate(),
|
|
2668
2671
|
});
|
|
2669
2672
|
}
|
|
2670
2673
|
|
|
@@ -2686,8 +2689,9 @@ class Meeting {
|
|
|
2686
2689
|
ownerUuids,
|
|
2687
2690
|
port,
|
|
2688
2691
|
uri,
|
|
2689
|
-
|
|
2692
|
+
extension,
|
|
2690
2693
|
persistent,
|
|
2694
|
+
creationTime,
|
|
2691
2695
|
} = {}) {
|
|
2692
2696
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2693
2697
|
this.uri = uri;
|
|
@@ -2695,8 +2699,9 @@ class Meeting {
|
|
|
2695
2699
|
this.ownerUuids = ownerUuids;
|
|
2696
2700
|
this.port = port;
|
|
2697
2701
|
this.uuid = uuid;
|
|
2698
|
-
this.
|
|
2702
|
+
this.extension = extension;
|
|
2699
2703
|
this.persistent = persistent;
|
|
2704
|
+
this.creationTime = creationTime;
|
|
2700
2705
|
|
|
2701
2706
|
// Useful to compare instead of instanceof with minified code
|
|
2702
2707
|
this.type = 'Meeting';
|
|
@@ -3644,7 +3649,7 @@ const TRANSFER_FLOW_BLIND = 'blind';
|
|
|
3644
3649
|
|
|
3645
3650
|
// const MINIMUM_WAZO_ENGINE_VERSION_FOR_CTI_HOLD = '20.11';
|
|
3646
3651
|
|
|
3647
|
-
IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
|
|
3652
|
+
const logger$1 = IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
|
|
3648
3653
|
|
|
3649
3654
|
/* */
|
|
3650
3655
|
|
|
@@ -4563,7 +4568,7 @@ const AGENTD_VERSION = '1.0';
|
|
|
4563
4568
|
const WEBHOOKD_VERSION = '1.0';
|
|
4564
4569
|
const AMID_VERSION = '1.0';
|
|
4565
4570
|
|
|
4566
|
-
const logger$
|
|
4571
|
+
const logger$2 = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
|
|
4567
4572
|
|
|
4568
4573
|
class ApiClient {
|
|
4569
4574
|
|
|
@@ -4615,12 +4620,12 @@ class ApiClient {
|
|
|
4615
4620
|
}
|
|
4616
4621
|
|
|
4617
4622
|
async forceRefreshToken() {
|
|
4618
|
-
logger$
|
|
4623
|
+
logger$2.info('forcing refresh token, calling callback');
|
|
4619
4624
|
return this.refreshTokenCallback();
|
|
4620
4625
|
}
|
|
4621
4626
|
|
|
4622
4627
|
async refreshTokenCallback() {
|
|
4623
|
-
logger$
|
|
4628
|
+
logger$2.info('refresh token callback called', {
|
|
4624
4629
|
refreshToken: this.refreshToken,
|
|
4625
4630
|
refreshBackend: this.refreshBackend,
|
|
4626
4631
|
refreshExpiration: this.refreshExpiration,
|
|
@@ -4638,7 +4643,7 @@ class ApiClient {
|
|
|
4638
4643
|
this.isMobile,
|
|
4639
4644
|
);
|
|
4640
4645
|
|
|
4641
|
-
logger$
|
|
4646
|
+
logger$2.info('token refreshed', { token: session.token });
|
|
4642
4647
|
|
|
4643
4648
|
if (this.onRefreshToken) {
|
|
4644
4649
|
this.onRefreshToken(session.token, session);
|
|
@@ -4988,7 +4993,7 @@ const BLACKLIST_EVENTS = [
|
|
|
4988
4993
|
];
|
|
4989
4994
|
|
|
4990
4995
|
const HEARTBEAT_ENGINE_VERSION = '20.09';
|
|
4991
|
-
const logger$
|
|
4996
|
+
const logger$3 = IssueReporter$1.loggerFor('wazo-ws');
|
|
4992
4997
|
const messageLogger = IssueReporter$1.loggerFor('wazo-ws-message');
|
|
4993
4998
|
|
|
4994
4999
|
class WebSocketClient extends Emitter {
|
|
@@ -5037,19 +5042,19 @@ class WebSocketClient extends Emitter {
|
|
|
5037
5042
|
}
|
|
5038
5043
|
|
|
5039
5044
|
connect() {
|
|
5040
|
-
logger$
|
|
5045
|
+
logger$3.info('connect method started', { host: this.host, token: this.token });
|
|
5041
5046
|
this.socket = new ReconnectingWebSocket__default['default'](this._getUrl.bind(this), [], this.options);
|
|
5042
5047
|
if (this.options.binaryType) {
|
|
5043
5048
|
this.socket.binaryType = this.options.binaryType;
|
|
5044
5049
|
}
|
|
5045
5050
|
|
|
5046
5051
|
this.socket.onopen = () => {
|
|
5047
|
-
logger$
|
|
5052
|
+
logger$3.info('on Wazo WS open', { method: 'connect', host: this.host });
|
|
5048
5053
|
this.eventEmitter.emit(SOCKET_EVENTS.ON_OPEN);
|
|
5049
5054
|
};
|
|
5050
5055
|
|
|
5051
5056
|
this.socket.onerror = event => {
|
|
5052
|
-
logger$
|
|
5057
|
+
logger$3.error('on Wazo WS error', event.target);
|
|
5053
5058
|
this.eventEmitter.emit(SOCKET_EVENTS.ON_ERROR, event);
|
|
5054
5059
|
};
|
|
5055
5060
|
|
|
@@ -5079,7 +5084,7 @@ class WebSocketClient extends Emitter {
|
|
|
5079
5084
|
|
|
5080
5085
|
this.socket.onclose = event => {
|
|
5081
5086
|
// Can't be converted to JSON (circular structure)
|
|
5082
|
-
logger$
|
|
5087
|
+
logger$3.info('on Wazo WS close', {
|
|
5083
5088
|
reason: event.reason,
|
|
5084
5089
|
code: event.code,
|
|
5085
5090
|
readyState: event.target.readyState,
|
|
@@ -5097,12 +5102,12 @@ class WebSocketClient extends Emitter {
|
|
|
5097
5102
|
};
|
|
5098
5103
|
|
|
5099
5104
|
this.socket.onerror = event => {
|
|
5100
|
-
logger$
|
|
5105
|
+
logger$3.info('Wazo WS error', { message: event.message, code: event.code, readyState: event.target.readyState });
|
|
5101
5106
|
};
|
|
5102
5107
|
}
|
|
5103
5108
|
|
|
5104
5109
|
close(force = false) {
|
|
5105
|
-
logger$
|
|
5110
|
+
logger$3.info('Wazo WS close', { socket: !!this.socket, host: this.host, token: this.token });
|
|
5106
5111
|
|
|
5107
5112
|
if (!this.socket) {
|
|
5108
5113
|
return;
|
|
@@ -5120,7 +5125,7 @@ class WebSocketClient extends Emitter {
|
|
|
5120
5125
|
|
|
5121
5126
|
updateToken(token ) {
|
|
5122
5127
|
this.token = token;
|
|
5123
|
-
logger$
|
|
5128
|
+
logger$3.info('Wazo WS updating token', { url: this._getUrl(), token, socket: !!this.socket });
|
|
5124
5129
|
|
|
5125
5130
|
if (this.socket) {
|
|
5126
5131
|
// If still connected, send the token to the WS
|
|
@@ -5138,7 +5143,7 @@ class WebSocketClient extends Emitter {
|
|
|
5138
5143
|
}
|
|
5139
5144
|
|
|
5140
5145
|
startHeartbeat() {
|
|
5141
|
-
logger$
|
|
5146
|
+
logger$3.info('Wazo WS start heartbeat', { host: this.host, token: this.token });
|
|
5142
5147
|
|
|
5143
5148
|
if (!this.socket) {
|
|
5144
5149
|
this.heartbeat.stop();
|
|
@@ -5152,7 +5157,7 @@ class WebSocketClient extends Emitter {
|
|
|
5152
5157
|
}
|
|
5153
5158
|
|
|
5154
5159
|
stopHeartbeat() {
|
|
5155
|
-
logger$
|
|
5160
|
+
logger$3.info('Wazo WS stop heartbeat', { host: this.host, token: this.token });
|
|
5156
5161
|
|
|
5157
5162
|
this.heartbeat.stop();
|
|
5158
5163
|
}
|
|
@@ -5182,7 +5187,7 @@ class WebSocketClient extends Emitter {
|
|
|
5182
5187
|
}
|
|
5183
5188
|
|
|
5184
5189
|
reconnect(reason ) {
|
|
5185
|
-
logger$
|
|
5190
|
+
logger$3.info('Wazo WS reconnect', { reason, socket: !!this.socket, host: this.host, token: this.token });
|
|
5186
5191
|
if (!this.socket) {
|
|
5187
5192
|
return;
|
|
5188
5193
|
}
|
|
@@ -5238,7 +5243,7 @@ class WebSocketClient extends Emitter {
|
|
|
5238
5243
|
this.close();
|
|
5239
5244
|
}
|
|
5240
5245
|
const url = `wss://${this.host || ''}/api/websocketd/?token=${this.token || ''}&version=${this.version}`;
|
|
5241
|
-
logger$
|
|
5246
|
+
logger$3.log('Wazo WS url computed to reconnect', { url });
|
|
5242
5247
|
|
|
5243
5248
|
return url;
|
|
5244
5249
|
}
|
|
@@ -5246,12 +5251,12 @@ class WebSocketClient extends Emitter {
|
|
|
5246
5251
|
_onHeartbeat(message ) {
|
|
5247
5252
|
if (message.payload === 'pong') {
|
|
5248
5253
|
this.heartbeat.onHeartbeat();
|
|
5249
|
-
logger$
|
|
5254
|
+
logger$3.log('on heartbeat received from Wazo WS');
|
|
5250
5255
|
}
|
|
5251
5256
|
}
|
|
5252
5257
|
|
|
5253
5258
|
async _onHeartbeatTimeout() {
|
|
5254
|
-
logger$
|
|
5259
|
+
logger$3.log('heartbeat timed out', { host: this.host, token: this.token });
|
|
5255
5260
|
|
|
5256
5261
|
this.close();
|
|
5257
5262
|
this.eventEmitter.emit(SOCKET_EVENTS.ON_CLOSE, new Error('Websocket ping failure.'));
|
|
@@ -5372,7 +5377,7 @@ var wazoWebsocket = {
|
|
|
5372
5377
|
|
|
5373
5378
|
/* */
|
|
5374
5379
|
|
|
5375
|
-
const parseCandidate
|
|
5380
|
+
const parseCandidate = (candidate ) => {
|
|
5376
5381
|
if (!candidate) {
|
|
5377
5382
|
return null;
|
|
5378
5383
|
}
|
|
@@ -5526,7 +5531,7 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
5526
5531
|
this.peerConnectionDelegate.onicecandidate = event => {
|
|
5527
5532
|
wazoLogger.trace('onicecandidate', event.candidate ? event.candidate.candidate : { done: true });
|
|
5528
5533
|
if (event.candidate) {
|
|
5529
|
-
this.gatheredCandidates.push(parseCandidate
|
|
5534
|
+
this.gatheredCandidates.push(parseCandidate(event.candidate.candidate));
|
|
5530
5535
|
}
|
|
5531
5536
|
};
|
|
5532
5537
|
|
|
@@ -5895,7 +5900,7 @@ const DEFAULT_ICE_TIMEOUT = 3000;
|
|
|
5895
5900
|
const SEND_STATS_DELAY = 5000;
|
|
5896
5901
|
|
|
5897
5902
|
const states = ['STATUS_NULL', 'STATUS_NEW', 'STATUS_CONNECTING', 'STATUS_CONNECTED', 'STATUS_COMPLETED'];
|
|
5898
|
-
const logger$
|
|
5903
|
+
const logger$4 = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-client') : console;
|
|
5899
5904
|
const statsLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-stats') : console;
|
|
5900
5905
|
|
|
5901
5906
|
// events
|
|
@@ -6071,13 +6076,13 @@ class WebRTCClient extends Emitter {
|
|
|
6071
6076
|
|
|
6072
6077
|
createUserAgent(configOverrides ) {
|
|
6073
6078
|
const webRTCConfiguration = this._createWebRTCConfiguration(configOverrides);
|
|
6074
|
-
logger$
|
|
6079
|
+
logger$4.info('sdk webrtc, creating UA', { webRTCConfiguration });
|
|
6075
6080
|
|
|
6076
6081
|
webRTCConfiguration.delegate = {
|
|
6077
6082
|
onConnect: this.onConnect.bind(this),
|
|
6078
6083
|
onDisconnect: this.onDisconnect.bind(this),
|
|
6079
6084
|
onInvite: (invitation ) => {
|
|
6080
|
-
logger$
|
|
6085
|
+
logger$4.info('sdk webrtc on invite', {
|
|
6081
6086
|
method: 'delegate.onInvite',
|
|
6082
6087
|
id: invitation.id,
|
|
6083
6088
|
remoteURI: invitation.remoteURI,
|
|
@@ -6120,7 +6125,7 @@ class WebRTCClient extends Emitter {
|
|
|
6120
6125
|
}
|
|
6121
6126
|
|
|
6122
6127
|
onConnect() {
|
|
6123
|
-
logger$
|
|
6128
|
+
logger$4.info('sdk webrtc connected', { method: 'delegate.onConnect' });
|
|
6124
6129
|
this.eventEmitter.emit(CONNECTED);
|
|
6125
6130
|
if (!this.isRegistered() && this.registerer && this.registerer.waiting) {
|
|
6126
6131
|
this.registerer.waitingToggle(false);
|
|
@@ -6129,7 +6134,7 @@ class WebRTCClient extends Emitter {
|
|
|
6129
6134
|
}
|
|
6130
6135
|
|
|
6131
6136
|
async onDisconnect(error ) {
|
|
6132
|
-
logger$
|
|
6137
|
+
logger$4.info('sdk webrtc disconnected', { method: 'delegate.onConnect', error });
|
|
6133
6138
|
this.connectionPromise = null;
|
|
6134
6139
|
// The UA will attempt to reconnect automatically when an error occurred
|
|
6135
6140
|
this.eventEmitter.emit(DISCONNECTED, error);
|
|
@@ -6154,37 +6159,37 @@ class WebRTCClient extends Emitter {
|
|
|
6154
6159
|
};
|
|
6155
6160
|
|
|
6156
6161
|
if (this.skipRegister) {
|
|
6157
|
-
logger$
|
|
6162
|
+
logger$4.info('sdk webrtc skip register...', logInfo);
|
|
6158
6163
|
return Promise.resolve();
|
|
6159
6164
|
}
|
|
6160
6165
|
|
|
6161
|
-
logger$
|
|
6166
|
+
logger$4.info('sdk webrtc registering...', logInfo);
|
|
6162
6167
|
|
|
6163
6168
|
if (!this.userAgent) {
|
|
6164
|
-
logger$
|
|
6169
|
+
logger$4.info('sdk webrtc recreating User Agent');
|
|
6165
6170
|
this.userAgent = this.createUserAgent(this.uaConfigOverrides);
|
|
6166
6171
|
}
|
|
6167
6172
|
if (!this.userAgent || this.isRegistered()) {
|
|
6168
|
-
logger$
|
|
6173
|
+
logger$4.info('sdk webrtc registering aborted, already registered or no UA can be created');
|
|
6169
6174
|
return Promise.resolve();
|
|
6170
6175
|
}
|
|
6171
6176
|
|
|
6172
6177
|
if (this.connectionPromise || (this.registerer && this.registerer.waiting)) {
|
|
6173
|
-
logger$
|
|
6178
|
+
logger$4.info('sdk webrtc registering aborted due to a registration in progress.');
|
|
6174
6179
|
return Promise.resolve();
|
|
6175
6180
|
}
|
|
6176
6181
|
|
|
6177
6182
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
6178
6183
|
|
|
6179
6184
|
const onRegisterFailed = () => {
|
|
6180
|
-
logger$
|
|
6185
|
+
logger$4.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
|
|
6181
6186
|
this.connectionPromise = null;
|
|
6182
6187
|
if (this.registerer && this.registerer.waiting) {
|
|
6183
6188
|
this.registerer.waitingToggle(false);
|
|
6184
6189
|
}
|
|
6185
6190
|
|
|
6186
6191
|
if (tries <= MAX_REGISTER_TRIES) {
|
|
6187
|
-
logger$
|
|
6192
|
+
logger$4.info('sdk webrtc registering, retrying...', { tries });
|
|
6188
6193
|
setTimeout(() => this.register(tries + 1), 300);
|
|
6189
6194
|
}
|
|
6190
6195
|
};
|
|
@@ -6193,18 +6198,18 @@ class WebRTCClient extends Emitter {
|
|
|
6193
6198
|
// Avoid race condition with the close method called just before register and setting userAgent to null
|
|
6194
6199
|
// during the resolution of the primise.
|
|
6195
6200
|
if (!this.userAgent) {
|
|
6196
|
-
logger$
|
|
6201
|
+
logger$4.info('sdk webrtc recreating User Agent after connection');
|
|
6197
6202
|
this.userAgent = this.createUserAgent(this.uaConfigOverrides);
|
|
6198
6203
|
}
|
|
6199
6204
|
|
|
6200
|
-
logger$
|
|
6205
|
+
logger$4.info('sdk webrtc registering, transport connected', { registerOptions, ua: !!this.userAgent });
|
|
6201
6206
|
this.registerer = new registerer.Registerer(this.userAgent, registerOptions);
|
|
6202
6207
|
this.connectionPromise = null;
|
|
6203
6208
|
this._monkeyPatchRegisterer(this.registerer);
|
|
6204
6209
|
|
|
6205
6210
|
// Bind registerer events
|
|
6206
6211
|
this.registerer.stateChange.addListener(newState => {
|
|
6207
|
-
logger$
|
|
6212
|
+
logger$4.info('sdk webrtc registering, state changed', { newState });
|
|
6208
6213
|
|
|
6209
6214
|
if (newState === registererState.RegistererState.Registered && this.registerer
|
|
6210
6215
|
&& this.registerer.state === registererState.RegistererState.Registered) {
|
|
@@ -6217,7 +6222,7 @@ class WebRTCClient extends Emitter {
|
|
|
6217
6222
|
const options = {
|
|
6218
6223
|
requestDelegate: {
|
|
6219
6224
|
onReject: response => {
|
|
6220
|
-
logger$
|
|
6225
|
+
logger$4.error('sdk webrtc registering, rejected', { response });
|
|
6221
6226
|
|
|
6222
6227
|
onRegisterFailed();
|
|
6223
6228
|
},
|
|
@@ -6225,13 +6230,13 @@ class WebRTCClient extends Emitter {
|
|
|
6225
6230
|
};
|
|
6226
6231
|
|
|
6227
6232
|
return this.registerer.register(options).catch((e) => {
|
|
6228
|
-
logger$
|
|
6233
|
+
logger$4.error('sdk webrtc registering, error', e);
|
|
6229
6234
|
|
|
6230
6235
|
this.eventEmitter.emit(REGISTRATION_FAILED);
|
|
6231
6236
|
return e;
|
|
6232
6237
|
});
|
|
6233
6238
|
}).catch(error => {
|
|
6234
|
-
logger$
|
|
6239
|
+
logger$4.error('sdk webrtc registering, transport error', error);
|
|
6235
6240
|
onRegisterFailed();
|
|
6236
6241
|
});
|
|
6237
6242
|
}
|
|
@@ -6260,21 +6265,21 @@ class WebRTCClient extends Emitter {
|
|
|
6260
6265
|
}
|
|
6261
6266
|
|
|
6262
6267
|
unregister() {
|
|
6263
|
-
logger$
|
|
6268
|
+
logger$4.info('sdk webrtc unregistering..', { userAgent: !!this.userAgent, registerer: !!this.registerer });
|
|
6264
6269
|
if (!this.registerer) {
|
|
6265
6270
|
return Promise.resolve();
|
|
6266
6271
|
}
|
|
6267
6272
|
|
|
6268
6273
|
try {
|
|
6269
6274
|
return this.registerer.unregister().then(() => {
|
|
6270
|
-
logger$
|
|
6275
|
+
logger$4.info('sdk webrtc unregistered');
|
|
6271
6276
|
this._cleanupRegister();
|
|
6272
6277
|
}).catch(e => {
|
|
6273
|
-
logger$
|
|
6278
|
+
logger$4.error('sdk webrtc unregistering, promise error', e);
|
|
6274
6279
|
this._cleanupRegister();
|
|
6275
6280
|
});
|
|
6276
6281
|
} catch (e) {
|
|
6277
|
-
logger$
|
|
6282
|
+
logger$4.error('sdk webrtc unregistering, error', e);
|
|
6278
6283
|
// Avoid issue with `undefined is not an object (evaluating 'new.target.prototype')` when triggering a new
|
|
6279
6284
|
// error when the registerer is in a bad state
|
|
6280
6285
|
this._cleanupRegister();
|
|
@@ -6282,7 +6287,7 @@ class WebRTCClient extends Emitter {
|
|
|
6282
6287
|
}
|
|
6283
6288
|
|
|
6284
6289
|
stop() {
|
|
6285
|
-
logger$
|
|
6290
|
+
logger$4.info('sdk webrtc stop', { userAgent: !!this.userAgent });
|
|
6286
6291
|
if (!this.userAgent) {
|
|
6287
6292
|
return Promise.resolve();
|
|
6288
6293
|
}
|
|
@@ -6290,12 +6295,12 @@ class WebRTCClient extends Emitter {
|
|
|
6290
6295
|
return this.userAgent.stop().then(() => {
|
|
6291
6296
|
return this._cleanupRegister();
|
|
6292
6297
|
}).catch(e => {
|
|
6293
|
-
logger$
|
|
6298
|
+
logger$4.warn('sdk webrtc stop, error', { message: e.message, stack: e.stack });
|
|
6294
6299
|
});
|
|
6295
6300
|
}
|
|
6296
6301
|
|
|
6297
6302
|
call(number , enableVideo , audioOnly = false, conference = false) {
|
|
6298
|
-
logger$
|
|
6303
|
+
logger$4.info('sdk webrtc creating call', { number, enableVideo, audioOnly });
|
|
6299
6304
|
const inviterOptions = {
|
|
6300
6305
|
sessionDescriptionHandlerOptionsReInvite: {
|
|
6301
6306
|
conference,
|
|
@@ -6326,7 +6331,7 @@ class WebRTCClient extends Emitter {
|
|
|
6326
6331
|
this._onAccepted(session, response.session, true);
|
|
6327
6332
|
},
|
|
6328
6333
|
onReject: (response ) => {
|
|
6329
|
-
logger$
|
|
6334
|
+
logger$4.info('on call rejected', { id: session.id, fromTag: session.fromTag });
|
|
6330
6335
|
this._stopSendingStats(session);
|
|
6331
6336
|
this.stopNetworkMonitoring(session);
|
|
6332
6337
|
|
|
@@ -6349,11 +6354,11 @@ class WebRTCClient extends Emitter {
|
|
|
6349
6354
|
}
|
|
6350
6355
|
|
|
6351
6356
|
answer(session , enableVideo ) {
|
|
6352
|
-
logger$
|
|
6357
|
+
logger$4.info('sdk webrtc answer call', { id: session.id, enableVideo });
|
|
6353
6358
|
|
|
6354
6359
|
if (!session || !session.accept) {
|
|
6355
6360
|
const error = 'No session to answer, or not an invitation';
|
|
6356
|
-
logger$
|
|
6361
|
+
logger$4.warn(error);
|
|
6357
6362
|
return Promise.reject(new Error(error));
|
|
6358
6363
|
}
|
|
6359
6364
|
const options = {
|
|
@@ -6363,15 +6368,15 @@ class WebRTCClient extends Emitter {
|
|
|
6363
6368
|
return session.accept(options).then(() => {
|
|
6364
6369
|
if (session.isCanceled) {
|
|
6365
6370
|
const message = 'accepted a canceled session (or was canceled during the accept phase).';
|
|
6366
|
-
logger$
|
|
6371
|
+
logger$4.error(message, { id: session.id });
|
|
6367
6372
|
this.onCallEnded(session);
|
|
6368
6373
|
|
|
6369
6374
|
throw new CanceledCallError(message);
|
|
6370
6375
|
}
|
|
6371
|
-
logger$
|
|
6376
|
+
logger$4.info('sdk webrtc answer, accepted.');
|
|
6372
6377
|
this._onAccepted(session);
|
|
6373
6378
|
}).catch(e => {
|
|
6374
|
-
logger$
|
|
6379
|
+
logger$4.error(`answer call error for ${session ? session.id : 'n/a'}`, e);
|
|
6375
6380
|
|
|
6376
6381
|
throw e;
|
|
6377
6382
|
});
|
|
@@ -6379,7 +6384,7 @@ class WebRTCClient extends Emitter {
|
|
|
6379
6384
|
|
|
6380
6385
|
hangup(session ) {
|
|
6381
6386
|
const { state, id } = session;
|
|
6382
|
-
logger$
|
|
6387
|
+
logger$4.info('sdk webrtc hangup call', { id, state });
|
|
6383
6388
|
|
|
6384
6389
|
try {
|
|
6385
6390
|
this._stopSendingStats(session);
|
|
@@ -6408,7 +6413,7 @@ class WebRTCClient extends Emitter {
|
|
|
6408
6413
|
|
|
6409
6414
|
return bye();
|
|
6410
6415
|
} catch (error) {
|
|
6411
|
-
logger$
|
|
6416
|
+
logger$4.warn('sdk webrtc hangup, error', error);
|
|
6412
6417
|
}
|
|
6413
6418
|
|
|
6414
6419
|
return null;
|
|
@@ -6426,7 +6431,7 @@ class WebRTCClient extends Emitter {
|
|
|
6426
6431
|
// Fetch and emit an event at `interval` with session network stats
|
|
6427
6432
|
startNetworkMonitoring(session , interval = 1000) {
|
|
6428
6433
|
const sessionId = this.getSipSessionId(session);
|
|
6429
|
-
logger$
|
|
6434
|
+
logger$4.info('starting network inspection', { id: sessionId });
|
|
6430
6435
|
|
|
6431
6436
|
this.sessionNetworkStats[sessionId] = [];
|
|
6432
6437
|
|
|
@@ -6436,7 +6441,7 @@ class WebRTCClient extends Emitter {
|
|
|
6436
6441
|
stopNetworkMonitoring(session ) {
|
|
6437
6442
|
const sessionId = this.getSipSessionId(session);
|
|
6438
6443
|
const exists = sessionId in this.networkMonitoringInterval;
|
|
6439
|
-
logger$
|
|
6444
|
+
logger$4.info('stopping network inspection', { id: sessionId, exists });
|
|
6440
6445
|
|
|
6441
6446
|
if (exists) {
|
|
6442
6447
|
clearInterval(this.networkMonitoringInterval[sessionId]);
|
|
@@ -6446,17 +6451,17 @@ class WebRTCClient extends Emitter {
|
|
|
6446
6451
|
}
|
|
6447
6452
|
|
|
6448
6453
|
reject(session ) {
|
|
6449
|
-
logger$
|
|
6454
|
+
logger$4.info('sdk webrtc reject call', { id: session.id });
|
|
6450
6455
|
|
|
6451
6456
|
try {
|
|
6452
6457
|
return session.reject ? session.reject() : session.cancel();
|
|
6453
6458
|
} catch (e) {
|
|
6454
|
-
logger$
|
|
6459
|
+
logger$4.warn('Error when rejecting call', e.message, e.stack);
|
|
6455
6460
|
}
|
|
6456
6461
|
}
|
|
6457
6462
|
|
|
6458
6463
|
async close() {
|
|
6459
|
-
logger$
|
|
6464
|
+
logger$4.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
6460
6465
|
this._cleanupMedia();
|
|
6461
6466
|
this.connectionPromise = null;
|
|
6462
6467
|
|
|
@@ -6487,7 +6492,7 @@ class WebRTCClient extends Emitter {
|
|
|
6487
6492
|
// eg: "INVITE not rejectable in state Completed"
|
|
6488
6493
|
}
|
|
6489
6494
|
this.userAgent = null;
|
|
6490
|
-
logger$
|
|
6495
|
+
logger$4.info('sdk webrtc client closed');
|
|
6491
6496
|
}
|
|
6492
6497
|
|
|
6493
6498
|
getNumber(session ) {
|
|
@@ -6500,13 +6505,13 @@ class WebRTCClient extends Emitter {
|
|
|
6500
6505
|
}
|
|
6501
6506
|
|
|
6502
6507
|
mute(session ) {
|
|
6503
|
-
logger$
|
|
6508
|
+
logger$4.info('sdk webrtc mute', { id: session.id });
|
|
6504
6509
|
|
|
6505
6510
|
this._toggleAudio(session, true);
|
|
6506
6511
|
}
|
|
6507
6512
|
|
|
6508
6513
|
unmute(session ) {
|
|
6509
|
-
logger$
|
|
6514
|
+
logger$4.info('sdk webrtc unmute', { id: session.id });
|
|
6510
6515
|
|
|
6511
6516
|
this._toggleAudio(session, false);
|
|
6512
6517
|
}
|
|
@@ -6546,13 +6551,13 @@ class WebRTCClient extends Emitter {
|
|
|
6546
6551
|
}
|
|
6547
6552
|
|
|
6548
6553
|
toggleCameraOn(session ) {
|
|
6549
|
-
logger$
|
|
6554
|
+
logger$4.info('sdk webrtc toggle camera on', { id: session.id });
|
|
6550
6555
|
|
|
6551
6556
|
this._toggleVideo(session, false);
|
|
6552
6557
|
}
|
|
6553
6558
|
|
|
6554
6559
|
toggleCameraOff(session ) {
|
|
6555
|
-
logger$
|
|
6560
|
+
logger$4.info('sdk webrtc toggle camera off', { id: session.id });
|
|
6556
6561
|
|
|
6557
6562
|
this._toggleVideo(session, true);
|
|
6558
6563
|
}
|
|
@@ -6561,7 +6566,7 @@ class WebRTCClient extends Emitter {
|
|
|
6561
6566
|
const sessionId = this.getSipSessionId(session);
|
|
6562
6567
|
const hasVideo = hadVideo || this.hasLocalVideo(sessionId);
|
|
6563
6568
|
|
|
6564
|
-
logger$
|
|
6569
|
+
logger$4.info('sdk webrtc hold', {
|
|
6565
6570
|
sessionId,
|
|
6566
6571
|
keys: Object.keys(this.heldSessions),
|
|
6567
6572
|
pendingReinvite: !!session.pendingReinvite,
|
|
@@ -6610,7 +6615,7 @@ class WebRTCClient extends Emitter {
|
|
|
6610
6615
|
const sessionId = this.getSipSessionId(session);
|
|
6611
6616
|
const hasVideo = sessionId in this.heldSessions && this.heldSessions[sessionId].hasVideo;
|
|
6612
6617
|
|
|
6613
|
-
logger$
|
|
6618
|
+
logger$4.info('sdk webrtc unhold', {
|
|
6614
6619
|
sessionId,
|
|
6615
6620
|
keys: Object.keys(this.heldSessions),
|
|
6616
6621
|
pendingReinvite: !!session.pendingReinvite,
|
|
@@ -6758,7 +6763,7 @@ class WebRTCClient extends Emitter {
|
|
|
6758
6763
|
if (!session.sessionDescriptionHandler) {
|
|
6759
6764
|
return;
|
|
6760
6765
|
}
|
|
6761
|
-
logger$
|
|
6766
|
+
logger$4.info('Sending DTMF', {
|
|
6762
6767
|
id: this.getSipSessionId(session),
|
|
6763
6768
|
tone,
|
|
6764
6769
|
});
|
|
@@ -6774,7 +6779,7 @@ class WebRTCClient extends Emitter {
|
|
|
6774
6779
|
transfer(session , target ) {
|
|
6775
6780
|
this.hold(session);
|
|
6776
6781
|
|
|
6777
|
-
logger$
|
|
6782
|
+
logger$4.info('Transfering a session', {
|
|
6778
6783
|
id: this.getSipSessionId(session),
|
|
6779
6784
|
target,
|
|
6780
6785
|
});
|
|
@@ -6796,17 +6801,17 @@ class WebRTCClient extends Emitter {
|
|
|
6796
6801
|
atxfer(session ) {
|
|
6797
6802
|
this.hold(session);
|
|
6798
6803
|
|
|
6799
|
-
logger$
|
|
6804
|
+
logger$4.info('webrtc transfer started', { id: this.getSipSessionId(session) });
|
|
6800
6805
|
|
|
6801
6806
|
const result = {
|
|
6802
6807
|
newSession: null,
|
|
6803
6808
|
init: async (target ) => {
|
|
6804
|
-
logger$
|
|
6809
|
+
logger$4.info('webrtc transfer initialized', { id: this.getSipSessionId(session), target });
|
|
6805
6810
|
|
|
6806
6811
|
result.newSession = await this.call(target);
|
|
6807
6812
|
},
|
|
6808
6813
|
complete: () => {
|
|
6809
|
-
logger$
|
|
6814
|
+
logger$4.info('webrtc transfer completed', {
|
|
6810
6815
|
id: this.getSipSessionId(session),
|
|
6811
6816
|
referId: this.getSipSessionId(result.newSession),
|
|
6812
6817
|
});
|
|
@@ -6827,7 +6832,7 @@ class WebRTCClient extends Emitter {
|
|
|
6827
6832
|
return;
|
|
6828
6833
|
}
|
|
6829
6834
|
|
|
6830
|
-
logger$
|
|
6835
|
+
logger$4.info('send WebRTC message', { sipId: sipSession.id, contentType });
|
|
6831
6836
|
|
|
6832
6837
|
try {
|
|
6833
6838
|
sipSession.message({
|
|
@@ -6869,7 +6874,7 @@ class WebRTCClient extends Emitter {
|
|
|
6869
6874
|
}
|
|
6870
6875
|
|
|
6871
6876
|
changeAudioOutputVolume(volume ) {
|
|
6872
|
-
logger$
|
|
6877
|
+
logger$4.info('Changing audio output volume', { volume });
|
|
6873
6878
|
|
|
6874
6879
|
Object.values(this.audioElements).forEach(audioElement => {
|
|
6875
6880
|
if (audioElement instanceof HTMLAudioElement) {
|
|
@@ -6881,7 +6886,7 @@ class WebRTCClient extends Emitter {
|
|
|
6881
6886
|
}
|
|
6882
6887
|
|
|
6883
6888
|
changeAudioOutputDevice(id ) {
|
|
6884
|
-
logger$
|
|
6889
|
+
logger$4.info('Changing audio output device', { id });
|
|
6885
6890
|
|
|
6886
6891
|
Object.values(this.audioElements).forEach(audioElement => {
|
|
6887
6892
|
// `setSinkId` method is not included in any flow type definitions for HTMLAudioElements but is a valid method
|
|
@@ -6898,7 +6903,7 @@ class WebRTCClient extends Emitter {
|
|
|
6898
6903
|
|
|
6899
6904
|
changeAudioInputDevice(id , session ) {
|
|
6900
6905
|
const currentId = this.getAudioDeviceId();
|
|
6901
|
-
logger$
|
|
6906
|
+
logger$4.info('setting audio input device', { id, currentId, session: !!session });
|
|
6902
6907
|
|
|
6903
6908
|
if (id === currentId) {
|
|
6904
6909
|
return null;
|
|
@@ -6944,7 +6949,7 @@ class WebRTCClient extends Emitter {
|
|
|
6944
6949
|
|
|
6945
6950
|
setVideoInputDevice(id ) {
|
|
6946
6951
|
const currentId = this.getVideoDeviceId();
|
|
6947
|
-
logger$
|
|
6952
|
+
logger$4.info('setting video input device', { id, currentId });
|
|
6948
6953
|
|
|
6949
6954
|
if (id === currentId) {
|
|
6950
6955
|
return null;
|
|
@@ -6969,7 +6974,7 @@ class WebRTCClient extends Emitter {
|
|
|
6969
6974
|
const sessionId = this.getSipSessionId(session);
|
|
6970
6975
|
const localStream = this.getLocalStream(sessionId);
|
|
6971
6976
|
|
|
6972
|
-
logger$
|
|
6977
|
+
logger$4.info('changing video input device', { id, sessionId });
|
|
6973
6978
|
|
|
6974
6979
|
// Release old video stream
|
|
6975
6980
|
if (localStream) {
|
|
@@ -7037,7 +7042,7 @@ class WebRTCClient extends Emitter {
|
|
|
7037
7042
|
const shouldDoScreenSharing = newConstraints && newConstraints.screen;
|
|
7038
7043
|
const desktop = newConstraints && newConstraints.desktop;
|
|
7039
7044
|
|
|
7040
|
-
logger$
|
|
7045
|
+
logger$4.info('Sending reinvite', {
|
|
7041
7046
|
id: this.getSipSessionId(sipSession),
|
|
7042
7047
|
newConstraints,
|
|
7043
7048
|
conference,
|
|
@@ -7075,7 +7080,7 @@ class WebRTCClient extends Emitter {
|
|
|
7075
7080
|
sipSession.incomingInviteRequest.message.body = response.message.body;
|
|
7076
7081
|
}
|
|
7077
7082
|
|
|
7078
|
-
logger$
|
|
7083
|
+
logger$4.info('on re-INVITE accepted', {
|
|
7079
7084
|
id: this.getSipSessionId(sipSession),
|
|
7080
7085
|
wasMuted,
|
|
7081
7086
|
shouldDoScreenSharing,
|
|
@@ -7250,7 +7255,7 @@ class WebRTCClient extends Emitter {
|
|
|
7250
7255
|
}
|
|
7251
7256
|
|
|
7252
7257
|
startHeartbeat() {
|
|
7253
|
-
logger$
|
|
7258
|
+
logger$4.info('sdk webrtc start heartbeat', { userAgent: !!this.userAgent });
|
|
7254
7259
|
if (!this.userAgent) {
|
|
7255
7260
|
this.heartbeat.stop();
|
|
7256
7261
|
return;
|
|
@@ -7263,7 +7268,7 @@ class WebRTCClient extends Emitter {
|
|
|
7263
7268
|
}
|
|
7264
7269
|
|
|
7265
7270
|
stopHeartbeat() {
|
|
7266
|
-
logger$
|
|
7271
|
+
logger$4.info('sdk webrtc stop heartbeat');
|
|
7267
7272
|
this.heartbeat.stop();
|
|
7268
7273
|
}
|
|
7269
7274
|
|
|
@@ -7284,7 +7289,7 @@ class WebRTCClient extends Emitter {
|
|
|
7284
7289
|
}
|
|
7285
7290
|
|
|
7286
7291
|
attemptReconnection() {
|
|
7287
|
-
logger$
|
|
7292
|
+
logger$4.info('attempt reconnection', { userAgent: !!this.userAgent });
|
|
7288
7293
|
if (!this.userAgent) {
|
|
7289
7294
|
return;
|
|
7290
7295
|
}
|
|
@@ -7309,7 +7314,7 @@ class WebRTCClient extends Emitter {
|
|
|
7309
7314
|
return;
|
|
7310
7315
|
}
|
|
7311
7316
|
|
|
7312
|
-
logger$
|
|
7317
|
+
logger$4.info('setting local media stream', {
|
|
7313
7318
|
sipSessionId,
|
|
7314
7319
|
tracks: newStream ? newStream.getTracks() : null,
|
|
7315
7320
|
});
|
|
@@ -7326,7 +7331,7 @@ class WebRTCClient extends Emitter {
|
|
|
7326
7331
|
|
|
7327
7332
|
const oldStream = this.getLocalStream(sipSessionId);
|
|
7328
7333
|
|
|
7329
|
-
logger$
|
|
7334
|
+
logger$4.info('updating local stream', {
|
|
7330
7335
|
sipSessionId,
|
|
7331
7336
|
oldStream: !!oldStream,
|
|
7332
7337
|
tracks: newStream.getTracks(),
|
|
@@ -7346,7 +7351,7 @@ class WebRTCClient extends Emitter {
|
|
|
7346
7351
|
const remoteStream = this.getRemoteStream(sessionId);
|
|
7347
7352
|
const pc = this.getPeerConnection(sessionId);
|
|
7348
7353
|
|
|
7349
|
-
logger$
|
|
7354
|
+
logger$4.info('Updating remote stream', {
|
|
7350
7355
|
sessionId,
|
|
7351
7356
|
tracks: remoteStream ? remoteStream.getTracks() : null,
|
|
7352
7357
|
receiverTracks: pc && pc.getReceivers ? pc.getReceivers().map(receiver => receiver.track) : null,
|
|
@@ -7372,7 +7377,7 @@ class WebRTCClient extends Emitter {
|
|
|
7372
7377
|
const isDesktop = constraints && 'desktop' in constraints ? constraints.desktop : false;
|
|
7373
7378
|
const withAudio = constraints && 'audio' in constraints ? constraints.audio : true;
|
|
7374
7379
|
|
|
7375
|
-
logger$
|
|
7380
|
+
logger$4.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
|
|
7376
7381
|
|
|
7377
7382
|
return {
|
|
7378
7383
|
constraints: {
|
|
@@ -7421,7 +7426,7 @@ class WebRTCClient extends Emitter {
|
|
|
7421
7426
|
}
|
|
7422
7427
|
|
|
7423
7428
|
_onTransportError() {
|
|
7424
|
-
logger$
|
|
7429
|
+
logger$4.error('on transport error');
|
|
7425
7430
|
this.eventEmitter.emit(TRANSPORT_ERROR);
|
|
7426
7431
|
this.attemptReconnection();
|
|
7427
7432
|
}
|
|
@@ -7430,7 +7435,7 @@ class WebRTCClient extends Emitter {
|
|
|
7430
7435
|
const body = message && typeof message === 'object' ? message.data : message;
|
|
7431
7436
|
if (body && body.indexOf('200 OK') !== -1) {
|
|
7432
7437
|
if (this.hasHeartbeat()) {
|
|
7433
|
-
logger$
|
|
7438
|
+
logger$4.info('on heartbeat received from Asterisk', { hasHeartbeat: this.hasHeartbeat() });
|
|
7434
7439
|
|
|
7435
7440
|
this.heartbeat.onHeartbeat();
|
|
7436
7441
|
if (this.heartbeatCb) {
|
|
@@ -7441,7 +7446,7 @@ class WebRTCClient extends Emitter {
|
|
|
7441
7446
|
}
|
|
7442
7447
|
|
|
7443
7448
|
async _onHeartbeatTimeout() {
|
|
7444
|
-
logger$
|
|
7449
|
+
logger$4.info('sdk webrtc heartbeat timed out', { userAgent: !!this.userAgent, cb: !!this.heartbeatTimeoutCb });
|
|
7445
7450
|
|
|
7446
7451
|
if (this.heartbeatTimeoutCb) {
|
|
7447
7452
|
this.heartbeatTimeoutCb();
|
|
@@ -7453,7 +7458,7 @@ class WebRTCClient extends Emitter {
|
|
|
7453
7458
|
try {
|
|
7454
7459
|
await this.userAgent.transport.disconnect();
|
|
7455
7460
|
} catch (e) {
|
|
7456
|
-
logger$
|
|
7461
|
+
logger$4.error('Transport disconnection after heartbeat timeout, error', e);
|
|
7457
7462
|
}
|
|
7458
7463
|
}
|
|
7459
7464
|
|
|
@@ -7486,31 +7491,31 @@ class WebRTCClient extends Emitter {
|
|
|
7486
7491
|
}
|
|
7487
7492
|
|
|
7488
7493
|
_connectIfNeeded() {
|
|
7489
|
-
logger$
|
|
7494
|
+
logger$4.info('connect if needed, checking', { connected: this.isConnected() });
|
|
7490
7495
|
if (!this.userAgent) {
|
|
7491
|
-
logger$
|
|
7496
|
+
logger$4.info('need to recreate User Agent');
|
|
7492
7497
|
this.userAgent = this.createUserAgent(this.uaConfigOverrides);
|
|
7493
7498
|
}
|
|
7494
7499
|
|
|
7495
7500
|
if (this.isConnected()) {
|
|
7496
|
-
logger$
|
|
7501
|
+
logger$4.info('webrtc sdk, already connected');
|
|
7497
7502
|
return Promise.resolve();
|
|
7498
7503
|
}
|
|
7499
7504
|
|
|
7500
7505
|
if (this.isConnecting()) {
|
|
7501
|
-
logger$
|
|
7506
|
+
logger$4.info('webrtc sdk, already connecting...');
|
|
7502
7507
|
|
|
7503
7508
|
this.connectionPromise = this.userAgent.transport.connectPromise;
|
|
7504
7509
|
return this.connectionPromise;
|
|
7505
7510
|
}
|
|
7506
7511
|
|
|
7507
7512
|
if (this.connectionPromise) {
|
|
7508
|
-
logger$
|
|
7513
|
+
logger$4.info('webrtc sdk, connection promise connecting...');
|
|
7509
7514
|
// $FlowFixMe
|
|
7510
7515
|
return this.connectionPromise;
|
|
7511
7516
|
}
|
|
7512
7517
|
|
|
7513
|
-
logger$
|
|
7518
|
+
logger$4.info('WebRTC UA needs to connect');
|
|
7514
7519
|
|
|
7515
7520
|
// Force UA to reconnect
|
|
7516
7521
|
if (this.userAgent && this.userAgent.state !== userAgentState.UserAgentState.Stopped) {
|
|
@@ -7635,7 +7640,7 @@ class WebRTCClient extends Emitter {
|
|
|
7635
7640
|
|
|
7636
7641
|
sdh.peerConnectionDelegate = {
|
|
7637
7642
|
onicecandidateerror: (error ) => {
|
|
7638
|
-
logger$
|
|
7643
|
+
logger$4.error('on icecandidate error', {
|
|
7639
7644
|
address: error.address,
|
|
7640
7645
|
port: error.port,
|
|
7641
7646
|
errorCode: error.errorCode,
|
|
@@ -7664,7 +7669,7 @@ class WebRTCClient extends Emitter {
|
|
|
7664
7669
|
updatedNumber = session.assertedIdentity.uri.normal.user;
|
|
7665
7670
|
updatedCalleeName = session.assertedIdentity.displayName || updatedNumber;
|
|
7666
7671
|
}
|
|
7667
|
-
logger$
|
|
7672
|
+
logger$4.info('re-invite received', { updatedCalleeName, updatedNumber, hadRemoteVideo });
|
|
7668
7673
|
|
|
7669
7674
|
// Useful to know if it's a video upgrade or an unhold from a remote peer with a video stream
|
|
7670
7675
|
|
|
@@ -7685,7 +7690,7 @@ class WebRTCClient extends Emitter {
|
|
|
7685
7690
|
}
|
|
7686
7691
|
|
|
7687
7692
|
_onAccepted(session , sessionDialog , withEvent = true) {
|
|
7688
|
-
logger$
|
|
7693
|
+
logger$4.info('on call accepted', { id: session.id, remoteTag: session.remoteTag });
|
|
7689
7694
|
|
|
7690
7695
|
this.storeSipSession(session);
|
|
7691
7696
|
|
|
@@ -7697,7 +7702,7 @@ class WebRTCClient extends Emitter {
|
|
|
7697
7702
|
const onTrack = (event ) => {
|
|
7698
7703
|
const isAudioOnly = this._isAudioOnly(session);
|
|
7699
7704
|
const { kind, label, readyState, id, muted } = event.track;
|
|
7700
|
-
logger$
|
|
7705
|
+
logger$4.info('on track event', { isAudioOnly, kind, label, readyState, id, muted });
|
|
7701
7706
|
|
|
7702
7707
|
// Stop video track in audio only mode
|
|
7703
7708
|
if (isAudioOnly && kind === 'video') {
|
|
@@ -7714,7 +7719,7 @@ class WebRTCClient extends Emitter {
|
|
|
7714
7719
|
session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
|
|
7715
7720
|
|
|
7716
7721
|
pc.oniceconnectionstatechange = () => {
|
|
7717
|
-
logger$
|
|
7722
|
+
logger$4.info('on ice connection state changed', { state: pc.iceConnectionState });
|
|
7718
7723
|
if (pc.iceConnectionState === 'disconnected') {
|
|
7719
7724
|
this.eventEmitter.emit(ON_DISCONNECTED);
|
|
7720
7725
|
}
|
|
@@ -7887,10 +7892,10 @@ class WebRTCClient extends Emitter {
|
|
|
7887
7892
|
|
|
7888
7893
|
_stopSendingStats(session ) {
|
|
7889
7894
|
const sessionId = this.getSipSessionId(session);
|
|
7890
|
-
logger$
|
|
7895
|
+
logger$4.trace('Check for stopping stats', { sessionId, ids: Object.keys(this.statsIntervals) });
|
|
7891
7896
|
|
|
7892
7897
|
if (sessionId in this.statsIntervals) {
|
|
7893
|
-
logger$
|
|
7898
|
+
logger$4.trace('Stop sending stats for call', { sessionId });
|
|
7894
7899
|
this.statsIntervals[sessionId]();
|
|
7895
7900
|
delete this.statsIntervals[sessionId];
|
|
7896
7901
|
}
|
|
@@ -7906,7 +7911,7 @@ class WebRTCClient extends Emitter {
|
|
|
7906
7911
|
try {
|
|
7907
7912
|
await this.userAgent.transport.disconnect();
|
|
7908
7913
|
} catch (e) {
|
|
7909
|
-
logger$
|
|
7914
|
+
logger$4.error('WebRTC transport disconnect, error', e);
|
|
7910
7915
|
}
|
|
7911
7916
|
}
|
|
7912
7917
|
}
|
|
@@ -8089,7 +8094,7 @@ var webrtc = {
|
|
|
8089
8094
|
}),
|
|
8090
8095
|
};
|
|
8091
8096
|
|
|
8092
|
-
const parseCandidate = line => {
|
|
8097
|
+
const parseCandidate$1 = line => {
|
|
8093
8098
|
let parts;
|
|
8094
8099
|
// Parse both variants.
|
|
8095
8100
|
if (line.indexOf('a=candidate:') === 0) {
|
|
@@ -8180,7 +8185,7 @@ var SymmetricNat = {
|
|
|
8180
8185
|
}
|
|
8181
8186
|
|
|
8182
8187
|
if (e.candidate && e.candidate.candidate.indexOf('srflx') !== -1) {
|
|
8183
|
-
const cand = parseCandidate(e.candidate.candidate);
|
|
8188
|
+
const cand = parseCandidate$1(e.candidate.candidate);
|
|
8184
8189
|
if (!candidates[cand.relatedPort]) candidates[cand.relatedPort] = [];
|
|
8185
8190
|
candidates[cand.relatedPort].push(cand.port);
|
|
8186
8191
|
} else if (!e.candidate) {
|
|
@@ -8248,7 +8253,7 @@ var iceIpv4 = {
|
|
|
8248
8253
|
const rawCandidate = e.candidate.candidate;
|
|
8249
8254
|
if (rawCandidate.indexOf('srflx') !== -1 || rawCandidate.indexOf('relay') !== -1) {
|
|
8250
8255
|
hasSrflxOrRelay = true;
|
|
8251
|
-
const candidate = parseCandidate(e.candidate.candidate);
|
|
8256
|
+
const candidate = parseCandidate$1(e.candidate.candidate);
|
|
8252
8257
|
ips.push(candidate.ip);
|
|
8253
8258
|
}
|
|
8254
8259
|
} else if (!e.candidate) {
|
|
@@ -8285,7 +8290,7 @@ var checks = [
|
|
|
8285
8290
|
|
|
8286
8291
|
//
|
|
8287
8292
|
|
|
8288
|
-
const logger = IssueReporter$1.loggerFor('engine-check');
|
|
8293
|
+
const logger$5 = IssueReporter$1.loggerFor('engine-check');
|
|
8289
8294
|
|
|
8290
8295
|
class Checker {
|
|
8291
8296
|
|
|
@@ -8303,28 +8308,28 @@ class Checker {
|
|
|
8303
8308
|
async check(onCheckBegin = () => {}, onCheckResult = () => {}) {
|
|
8304
8309
|
await this._addEngineVersion();
|
|
8305
8310
|
|
|
8306
|
-
logger.info('Engine check starting');
|
|
8311
|
+
logger$5.info('Engine check starting');
|
|
8307
8312
|
|
|
8308
8313
|
for (let i = 0; i < this.checks.length; i++) {
|
|
8309
8314
|
const { name, check } = this.checks[i];
|
|
8310
8315
|
|
|
8311
|
-
logger.info(`Checking ${name} ...`);
|
|
8316
|
+
logger$5.info(`Checking ${name} ...`);
|
|
8312
8317
|
|
|
8313
8318
|
onCheckBegin(name);
|
|
8314
8319
|
try {
|
|
8315
8320
|
// eslint-disable-next-line no-await-in-loop
|
|
8316
8321
|
const result = await check(this.server, this.session, this.externalAppConfig);
|
|
8317
|
-
logger.info(`Checking ${name} success.`, { result });
|
|
8322
|
+
logger$5.info(`Checking ${name} success.`, { result });
|
|
8318
8323
|
|
|
8319
8324
|
onCheckResult(name, result);
|
|
8320
8325
|
} catch (e) {
|
|
8321
|
-
logger.info(`Checking ${name} failure`, { message: e.message });
|
|
8326
|
+
logger$5.info(`Checking ${name} failure`, { message: e.message });
|
|
8322
8327
|
|
|
8323
8328
|
onCheckResult(name, e);
|
|
8324
8329
|
}
|
|
8325
8330
|
}
|
|
8326
8331
|
|
|
8327
|
-
logger.info('Engine check done.');
|
|
8332
|
+
logger$5.info('Engine check done.');
|
|
8328
8333
|
}
|
|
8329
8334
|
|
|
8330
8335
|
addCheck(check ) {
|