@wazo/sdk 0.37.31 → 0.37.32
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 +2 -2
- package/esm/__tests__/api-client.test.js +30 -0
- package/esm/__tests__/web-rtc-client.test.js +56 -5
- package/esm/api/calld.js +30 -0
- package/esm/api-client.js +30 -0
- package/esm/checker/Checker.js +56 -5
- package/esm/checker/checks/aor.js +30 -0
- package/esm/checker/checks/api.js +30 -0
- package/esm/checker/checks/index.js +56 -5
- package/esm/checker/checks/webrtc-transport.js +56 -5
- package/esm/checker/checks/webrtc.js +56 -5
- package/esm/domain/AdHocAPIConference.js +30 -0
- package/esm/domain/Features.js +30 -0
- package/esm/domain/MeetingStatus.js +29 -0
- package/esm/domain/Phone/CTIPhone.js +30 -0
- package/esm/domain/Phone/WebRTCPhone.js +2 -2
- package/esm/index.js +58 -7
- package/esm/service/CallApi.js +30 -0
- package/esm/service/getApiClient.js +30 -0
- package/esm/simple/Auth.js +58 -7
- package/esm/simple/Configuration.js +58 -7
- package/esm/simple/Directory.js +30 -0
- package/esm/simple/Phone.js +58 -7
- package/esm/simple/index.js +58 -7
- package/esm/simple/room/LocalParticipant.js +58 -7
- package/esm/simple/room/Participant.js +58 -7
- package/esm/simple/room/RemoteParticipant.js +58 -7
- package/esm/simple/room/Room.js +58 -7
- package/esm/simple/room/SipRoom.js +58 -7
- package/esm/simple/room/Stream.js +58 -7
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +58 -7
- package/esm/simple/utils.js +58 -7
- package/esm/web-rtc-client.js +56 -5
- package/lib/__tests__/api-client.test.js +30 -0
- package/lib/__tests__/web-rtc-client.test.js +56 -5
- package/lib/api/calld.js +30 -0
- package/lib/api-client.js +30 -0
- package/lib/checker/Checker.js +56 -5
- package/lib/checker/checks/aor.js +30 -0
- package/lib/checker/checks/api.js +30 -0
- package/lib/checker/checks/index.js +56 -5
- package/lib/checker/checks/webrtc-transport.js +56 -5
- package/lib/checker/checks/webrtc.js +56 -5
- package/lib/domain/AdHocAPIConference.js +30 -0
- package/lib/domain/Features.js +30 -0
- package/lib/domain/MeetingStatus.js +31 -0
- package/lib/domain/Phone/CTIPhone.js +30 -0
- package/lib/domain/Phone/WebRTCPhone.js +2 -2
- package/lib/index.js +58 -7
- package/lib/service/CallApi.js +30 -0
- package/lib/service/getApiClient.js +30 -0
- package/lib/simple/Auth.js +58 -7
- package/lib/simple/Configuration.js +58 -7
- package/lib/simple/Directory.js +30 -0
- package/lib/simple/Phone.js +58 -7
- package/lib/simple/index.js +58 -7
- package/lib/simple/room/LocalParticipant.js +58 -7
- package/lib/simple/room/Participant.js +58 -7
- package/lib/simple/room/RemoteParticipant.js +58 -7
- package/lib/simple/room/Room.js +58 -7
- package/lib/simple/room/SipRoom.js +58 -7
- package/lib/simple/room/Stream.js +58 -7
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +58 -7
- package/lib/simple/utils.js +58 -7
- package/lib/web-rtc-client.js +56 -5
- package/package.json +1 -1
- package/src/api/calld.js +3 -0
- package/src/domain/MeetingStatus.js +27 -0
- package/src/domain/Phone/WebRTCPhone.js +2 -2
- package/src/web-rtc-client.js +26 -5
package/lib/simple/utils.js
CHANGED
|
@@ -4854,6 +4854,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4854
4854
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4855
4855
|
});
|
|
4856
4856
|
|
|
4857
|
+
//
|
|
4858
|
+
|
|
4859
|
+
|
|
4860
|
+
|
|
4861
|
+
|
|
4862
|
+
|
|
4863
|
+
class MeetingStatus {
|
|
4864
|
+
|
|
4865
|
+
|
|
4866
|
+
|
|
4867
|
+
|
|
4868
|
+
constructor({
|
|
4869
|
+
full,
|
|
4870
|
+
} = {}) {
|
|
4871
|
+
this.full = full;
|
|
4872
|
+
|
|
4873
|
+
// Useful to compare instead of instanceof with minified code
|
|
4874
|
+
this.type = 'MeetingStatus';
|
|
4875
|
+
}
|
|
4876
|
+
|
|
4877
|
+
static parse(plain ) {
|
|
4878
|
+
return new MeetingStatus({
|
|
4879
|
+
full: plain.full,
|
|
4880
|
+
});
|
|
4881
|
+
}
|
|
4882
|
+
|
|
4883
|
+
}
|
|
4884
|
+
|
|
4857
4885
|
/* */
|
|
4858
4886
|
|
|
4859
4887
|
|
|
@@ -5048,6 +5076,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
5048
5076
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
5049
5077
|
ApiRequester.successResponseParser),
|
|
5050
5078
|
|
|
5079
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
5080
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
5051
5081
|
});
|
|
5052
5082
|
|
|
5053
5083
|
//
|
|
@@ -6691,6 +6721,7 @@ class WebRTCClient extends Emitter {
|
|
|
6691
6721
|
|
|
6692
6722
|
|
|
6693
6723
|
|
|
6724
|
+
|
|
6694
6725
|
|
|
6695
6726
|
// sugar
|
|
6696
6727
|
|
|
@@ -6753,6 +6784,7 @@ class WebRTCClient extends Emitter {
|
|
|
6753
6784
|
this.conferences = {};
|
|
6754
6785
|
this.networkMonitoringInterval = {};
|
|
6755
6786
|
this.sessionNetworkStats = {};
|
|
6787
|
+
this.forceClosed = false;
|
|
6756
6788
|
|
|
6757
6789
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
6758
6790
|
this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
|
|
@@ -6874,6 +6906,8 @@ class WebRTCClient extends Emitter {
|
|
|
6874
6906
|
skipRegister: this.skipRegister,
|
|
6875
6907
|
};
|
|
6876
6908
|
|
|
6909
|
+
this.forceClosed = false;
|
|
6910
|
+
|
|
6877
6911
|
if (this.skipRegister) {
|
|
6878
6912
|
logger$8.info('sdk webrtc skip register...', logInfo);
|
|
6879
6913
|
return Promise.resolve();
|
|
@@ -6898,7 +6932,15 @@ class WebRTCClient extends Emitter {
|
|
|
6898
6932
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
6899
6933
|
|
|
6900
6934
|
const onRegisterFailed = () => {
|
|
6901
|
-
logger$8.info('sdk webrtc registering failed', {
|
|
6935
|
+
logger$8.info('sdk webrtc registering failed', {
|
|
6936
|
+
tries,
|
|
6937
|
+
registerer: !!this.registerer,
|
|
6938
|
+
forceClosed: this.forceClosed,
|
|
6939
|
+
});
|
|
6940
|
+
if (this.forceClosed) {
|
|
6941
|
+
return;
|
|
6942
|
+
}
|
|
6943
|
+
|
|
6902
6944
|
this.connectionPromise = null;
|
|
6903
6945
|
if (this.registerer && this.registerer.waiting) {
|
|
6904
6946
|
this.registerer.waitingToggle(false);
|
|
@@ -7176,8 +7218,9 @@ class WebRTCClient extends Emitter {
|
|
|
7176
7218
|
}
|
|
7177
7219
|
}
|
|
7178
7220
|
|
|
7179
|
-
async close() {
|
|
7180
|
-
logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
7221
|
+
async close(force = false) {
|
|
7222
|
+
logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
|
|
7223
|
+
this.forceClosed = force;
|
|
7181
7224
|
this._cleanupMedia();
|
|
7182
7225
|
this.connectionPromise = null;
|
|
7183
7226
|
|
|
@@ -7196,7 +7239,7 @@ class WebRTCClient extends Emitter {
|
|
|
7196
7239
|
this.userAgent.delegate = null;
|
|
7197
7240
|
this.userAgent.stateChange.removeAllListeners();
|
|
7198
7241
|
|
|
7199
|
-
await this._disconnectTransport();
|
|
7242
|
+
await this._disconnectTransport(force);
|
|
7200
7243
|
|
|
7201
7244
|
this._cleanupRegister();
|
|
7202
7245
|
|
|
@@ -8632,7 +8675,15 @@ class WebRTCClient extends Emitter {
|
|
|
8632
8675
|
return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
|
|
8633
8676
|
}
|
|
8634
8677
|
|
|
8635
|
-
async _disconnectTransport() {
|
|
8678
|
+
async _disconnectTransport(force = false) {
|
|
8679
|
+
if (force) {
|
|
8680
|
+
// Bypass sip.js state machine that prevent to close WS with the state `Connecting`
|
|
8681
|
+
this.userAgent.transport.disconnectResolve = () => {};
|
|
8682
|
+
// eslint-disable-next-line
|
|
8683
|
+
this.userAgent.transport._ws.close(1000);
|
|
8684
|
+
return;
|
|
8685
|
+
}
|
|
8686
|
+
|
|
8636
8687
|
// Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
|
|
8637
8688
|
if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
|
|
8638
8689
|
try {
|
|
@@ -10039,7 +10090,7 @@ class WebRTCPhone extends Emitter {
|
|
|
10039
10090
|
return this.client && this.client.isConference(callSession.sipCallId);
|
|
10040
10091
|
}
|
|
10041
10092
|
|
|
10042
|
-
async close() {
|
|
10093
|
+
async close(force = false) {
|
|
10043
10094
|
logger$7.info('WebRTC close');
|
|
10044
10095
|
|
|
10045
10096
|
try {
|
|
@@ -10051,7 +10102,7 @@ class WebRTCPhone extends Emitter {
|
|
|
10051
10102
|
logger$7.error('WebRTC close, unregister error', e);
|
|
10052
10103
|
}
|
|
10053
10104
|
|
|
10054
|
-
this.client.close();
|
|
10105
|
+
this.client.close(force);
|
|
10055
10106
|
this.unbind();
|
|
10056
10107
|
|
|
10057
10108
|
this.incomingSessions = [];
|
package/lib/web-rtc-client.js
CHANGED
|
@@ -4590,6 +4590,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4590
4590
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4591
4591
|
});
|
|
4592
4592
|
|
|
4593
|
+
//
|
|
4594
|
+
|
|
4595
|
+
|
|
4596
|
+
|
|
4597
|
+
|
|
4598
|
+
|
|
4599
|
+
class MeetingStatus {
|
|
4600
|
+
|
|
4601
|
+
|
|
4602
|
+
|
|
4603
|
+
|
|
4604
|
+
constructor({
|
|
4605
|
+
full,
|
|
4606
|
+
} = {}) {
|
|
4607
|
+
this.full = full;
|
|
4608
|
+
|
|
4609
|
+
// Useful to compare instead of instanceof with minified code
|
|
4610
|
+
this.type = 'MeetingStatus';
|
|
4611
|
+
}
|
|
4612
|
+
|
|
4613
|
+
static parse(plain ) {
|
|
4614
|
+
return new MeetingStatus({
|
|
4615
|
+
full: plain.full,
|
|
4616
|
+
});
|
|
4617
|
+
}
|
|
4618
|
+
|
|
4619
|
+
}
|
|
4620
|
+
|
|
4593
4621
|
/* */
|
|
4594
4622
|
|
|
4595
4623
|
|
|
@@ -4784,6 +4812,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4784
4812
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
4785
4813
|
ApiRequester.successResponseParser),
|
|
4786
4814
|
|
|
4815
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
4816
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
4787
4817
|
});
|
|
4788
4818
|
|
|
4789
4819
|
//
|
|
@@ -5400,6 +5430,7 @@ class WebRTCClient extends Emitter {
|
|
|
5400
5430
|
|
|
5401
5431
|
|
|
5402
5432
|
|
|
5433
|
+
|
|
5403
5434
|
|
|
5404
5435
|
// sugar
|
|
5405
5436
|
|
|
@@ -5462,6 +5493,7 @@ class WebRTCClient extends Emitter {
|
|
|
5462
5493
|
this.conferences = {};
|
|
5463
5494
|
this.networkMonitoringInterval = {};
|
|
5464
5495
|
this.sessionNetworkStats = {};
|
|
5496
|
+
this.forceClosed = false;
|
|
5465
5497
|
|
|
5466
5498
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
5467
5499
|
this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
|
|
@@ -5583,6 +5615,8 @@ class WebRTCClient extends Emitter {
|
|
|
5583
5615
|
skipRegister: this.skipRegister,
|
|
5584
5616
|
};
|
|
5585
5617
|
|
|
5618
|
+
this.forceClosed = false;
|
|
5619
|
+
|
|
5586
5620
|
if (this.skipRegister) {
|
|
5587
5621
|
logger.info('sdk webrtc skip register...', logInfo);
|
|
5588
5622
|
return Promise.resolve();
|
|
@@ -5607,7 +5641,15 @@ class WebRTCClient extends Emitter {
|
|
|
5607
5641
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
5608
5642
|
|
|
5609
5643
|
const onRegisterFailed = () => {
|
|
5610
|
-
logger.info('sdk webrtc registering failed', {
|
|
5644
|
+
logger.info('sdk webrtc registering failed', {
|
|
5645
|
+
tries,
|
|
5646
|
+
registerer: !!this.registerer,
|
|
5647
|
+
forceClosed: this.forceClosed,
|
|
5648
|
+
});
|
|
5649
|
+
if (this.forceClosed) {
|
|
5650
|
+
return;
|
|
5651
|
+
}
|
|
5652
|
+
|
|
5611
5653
|
this.connectionPromise = null;
|
|
5612
5654
|
if (this.registerer && this.registerer.waiting) {
|
|
5613
5655
|
this.registerer.waitingToggle(false);
|
|
@@ -5885,8 +5927,9 @@ class WebRTCClient extends Emitter {
|
|
|
5885
5927
|
}
|
|
5886
5928
|
}
|
|
5887
5929
|
|
|
5888
|
-
async close() {
|
|
5889
|
-
logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
5930
|
+
async close(force = false) {
|
|
5931
|
+
logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
|
|
5932
|
+
this.forceClosed = force;
|
|
5890
5933
|
this._cleanupMedia();
|
|
5891
5934
|
this.connectionPromise = null;
|
|
5892
5935
|
|
|
@@ -5905,7 +5948,7 @@ class WebRTCClient extends Emitter {
|
|
|
5905
5948
|
this.userAgent.delegate = null;
|
|
5906
5949
|
this.userAgent.stateChange.removeAllListeners();
|
|
5907
5950
|
|
|
5908
|
-
await this._disconnectTransport();
|
|
5951
|
+
await this._disconnectTransport(force);
|
|
5909
5952
|
|
|
5910
5953
|
this._cleanupRegister();
|
|
5911
5954
|
|
|
@@ -7341,7 +7384,15 @@ class WebRTCClient extends Emitter {
|
|
|
7341
7384
|
return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
|
|
7342
7385
|
}
|
|
7343
7386
|
|
|
7344
|
-
async _disconnectTransport() {
|
|
7387
|
+
async _disconnectTransport(force = false) {
|
|
7388
|
+
if (force) {
|
|
7389
|
+
// Bypass sip.js state machine that prevent to close WS with the state `Connecting`
|
|
7390
|
+
this.userAgent.transport.disconnectResolve = () => {};
|
|
7391
|
+
// eslint-disable-next-line
|
|
7392
|
+
this.userAgent.transport._ws.close(1000);
|
|
7393
|
+
return;
|
|
7394
|
+
}
|
|
7395
|
+
|
|
7345
7396
|
// Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
|
|
7346
7397
|
if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
|
|
7347
7398
|
try {
|
package/package.json
CHANGED
package/src/api/calld.js
CHANGED
|
@@ -7,6 +7,7 @@ import ChatMessage from '../domain/ChatMessage';
|
|
|
7
7
|
import Voicemail from '../domain/Voicemail';
|
|
8
8
|
import Call from '../domain/Call';
|
|
9
9
|
import IndirectTransfer from '../domain/IndirectTransfer';
|
|
10
|
+
import MeetingStatus from '../domain/MeetingStatus';
|
|
10
11
|
|
|
11
12
|
type CallQuery = {
|
|
12
13
|
from_mobile: boolean,
|
|
@@ -200,4 +201,6 @@ export default (client: ApiRequester, baseUrl: string) => ({
|
|
|
200
201
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
201
202
|
ApiRequester.successResponseParser),
|
|
202
203
|
|
|
204
|
+
guestGetMeetingStatus: (meetingUuid: string): Promise<MeetingStatus> =>
|
|
205
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
203
206
|
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
export type MeetingStatusResponse = {
|
|
4
|
+
full: boolean
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export default class MeetingStatus {
|
|
8
|
+
type: string;
|
|
9
|
+
|
|
10
|
+
full: boolean;
|
|
11
|
+
|
|
12
|
+
constructor({
|
|
13
|
+
full,
|
|
14
|
+
}: Object = {}) {
|
|
15
|
+
this.full = full;
|
|
16
|
+
|
|
17
|
+
// Useful to compare instead of instanceof with minified code
|
|
18
|
+
this.type = 'MeetingStatus';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
static parse(plain: MeetingStatusResponse): MeetingStatus {
|
|
22
|
+
return new MeetingStatus({
|
|
23
|
+
full: plain.full,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
}
|
|
@@ -1301,7 +1301,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
|
|
|
1301
1301
|
return this.client && this.client.isConference(callSession.sipCallId);
|
|
1302
1302
|
}
|
|
1303
1303
|
|
|
1304
|
-
async close(): Promise<void> {
|
|
1304
|
+
async close(force: boolean = false): Promise<void> {
|
|
1305
1305
|
logger.info('WebRTC close');
|
|
1306
1306
|
|
|
1307
1307
|
try {
|
|
@@ -1313,7 +1313,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
|
|
|
1313
1313
|
logger.error('WebRTC close, unregister error', e);
|
|
1314
1314
|
}
|
|
1315
1315
|
|
|
1316
|
-
this.client.close();
|
|
1316
|
+
this.client.close(force);
|
|
1317
1317
|
this.unbind();
|
|
1318
1318
|
|
|
1319
1319
|
this.incomingSessions = [];
|
package/src/web-rtc-client.js
CHANGED
|
@@ -129,6 +129,7 @@ export default class WebRTCClient extends Emitter {
|
|
|
129
129
|
skipRegister: boolean;
|
|
130
130
|
networkMonitoringInterval: { [string]: IntervalID };
|
|
131
131
|
sessionNetworkStats: { [string]: Object };
|
|
132
|
+
forceClosed: boolean;
|
|
132
133
|
|
|
133
134
|
// sugar
|
|
134
135
|
ON_USER_AGENT: string;
|
|
@@ -191,6 +192,7 @@ export default class WebRTCClient extends Emitter {
|
|
|
191
192
|
this.conferences = {};
|
|
192
193
|
this.networkMonitoringInterval = {};
|
|
193
194
|
this.sessionNetworkStats = {};
|
|
195
|
+
this.forceClosed = false;
|
|
194
196
|
|
|
195
197
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
196
198
|
this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
|
|
@@ -312,6 +314,8 @@ export default class WebRTCClient extends Emitter {
|
|
|
312
314
|
skipRegister: this.skipRegister,
|
|
313
315
|
};
|
|
314
316
|
|
|
317
|
+
this.forceClosed = false;
|
|
318
|
+
|
|
315
319
|
if (this.skipRegister) {
|
|
316
320
|
logger.info('sdk webrtc skip register...', logInfo);
|
|
317
321
|
return Promise.resolve();
|
|
@@ -336,7 +340,15 @@ export default class WebRTCClient extends Emitter {
|
|
|
336
340
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
337
341
|
|
|
338
342
|
const onRegisterFailed = () => {
|
|
339
|
-
logger.info('sdk webrtc registering failed', {
|
|
343
|
+
logger.info('sdk webrtc registering failed', {
|
|
344
|
+
tries,
|
|
345
|
+
registerer: !!this.registerer,
|
|
346
|
+
forceClosed: this.forceClosed,
|
|
347
|
+
});
|
|
348
|
+
if (this.forceClosed) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
|
|
340
352
|
this.connectionPromise = null;
|
|
341
353
|
if (this.registerer && this.registerer.waiting) {
|
|
342
354
|
this.registerer.waitingToggle(false);
|
|
@@ -614,8 +626,9 @@ export default class WebRTCClient extends Emitter {
|
|
|
614
626
|
}
|
|
615
627
|
}
|
|
616
628
|
|
|
617
|
-
async close() {
|
|
618
|
-
logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
629
|
+
async close(force: boolean = false) {
|
|
630
|
+
logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
|
|
631
|
+
this.forceClosed = force;
|
|
619
632
|
this._cleanupMedia();
|
|
620
633
|
this.connectionPromise = null;
|
|
621
634
|
|
|
@@ -634,7 +647,7 @@ export default class WebRTCClient extends Emitter {
|
|
|
634
647
|
this.userAgent.delegate = null;
|
|
635
648
|
this.userAgent.stateChange.removeAllListeners();
|
|
636
649
|
|
|
637
|
-
await this._disconnectTransport();
|
|
650
|
+
await this._disconnectTransport(force);
|
|
638
651
|
|
|
639
652
|
this._cleanupRegister();
|
|
640
653
|
|
|
@@ -2070,7 +2083,15 @@ export default class WebRTCClient extends Emitter {
|
|
|
2070
2083
|
return UserAgent.makeURI(`sip:${target}@${this.config.host}`);
|
|
2071
2084
|
}
|
|
2072
2085
|
|
|
2073
|
-
async _disconnectTransport() {
|
|
2086
|
+
async _disconnectTransport(force: boolean = false) {
|
|
2087
|
+
if (force) {
|
|
2088
|
+
// Bypass sip.js state machine that prevent to close WS with the state `Connecting`
|
|
2089
|
+
this.userAgent.transport.disconnectResolve = () => {};
|
|
2090
|
+
// eslint-disable-next-line
|
|
2091
|
+
this.userAgent.transport._ws.close(1000);
|
|
2092
|
+
return;
|
|
2093
|
+
}
|
|
2094
|
+
|
|
2074
2095
|
// Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
|
|
2075
2096
|
if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
|
|
2076
2097
|
try {
|