@wazo/sdk 0.37.31 → 0.37.35
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 +41 -0
- package/esm/__tests__/web-rtc-client.test.js +68 -6
- package/esm/api/auth.js +5 -0
- package/esm/api/call-logd.js +6 -0
- package/esm/api/calld.js +30 -0
- package/esm/api-client.js +41 -0
- package/esm/checker/Checker.js +68 -6
- package/esm/checker/checks/aor.js +41 -0
- package/esm/checker/checks/api.js +41 -0
- package/esm/checker/checks/index.js +68 -6
- package/esm/checker/checks/webrtc-transport.js +68 -6
- package/esm/checker/checks/webrtc.js +68 -6
- package/esm/domain/AdHocAPIConference.js +41 -0
- package/esm/domain/CallLog.js +6 -0
- package/esm/domain/CallSession.js +8 -0
- package/esm/domain/Features.js +41 -0
- package/esm/domain/MeetingStatus.js +29 -0
- package/esm/domain/Phone/CTIPhone.js +49 -0
- package/esm/domain/Phone/WebRTCPhone.js +33 -6
- package/esm/domain/__tests__/CallLog.test.js +6 -0
- package/esm/domain/__tests__/CallSession.test.js +40 -4
- package/esm/domain/__tests__/IndirectTransfer.test.js +8 -0
- package/esm/domain/__tests__/Room.test.js +8 -0
- package/esm/index.js +101 -12
- package/esm/service/CallApi.js +41 -0
- package/esm/service/getApiClient.js +41 -0
- package/esm/simple/Auth.js +101 -12
- package/esm/simple/Configuration.js +101 -12
- package/esm/simple/Directory.js +41 -0
- package/esm/simple/Phone.js +101 -12
- package/esm/simple/index.js +101 -12
- package/esm/simple/room/LocalParticipant.js +101 -12
- package/esm/simple/room/Participant.js +101 -12
- package/esm/simple/room/RemoteParticipant.js +101 -12
- package/esm/simple/room/Room.js +101 -12
- package/esm/simple/room/SipRoom.js +101 -12
- package/esm/simple/room/Stream.js +101 -12
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +101 -12
- package/esm/simple/utils.js +101 -12
- package/esm/web-rtc-client.js +68 -6
- package/lib/__tests__/api-client.test.js +41 -0
- package/lib/__tests__/web-rtc-client.test.js +68 -6
- package/lib/api/auth.js +5 -0
- package/lib/api/call-logd.js +6 -0
- package/lib/api/calld.js +30 -0
- package/lib/api-client.js +41 -0
- package/lib/checker/Checker.js +68 -6
- package/lib/checker/checks/aor.js +41 -0
- package/lib/checker/checks/api.js +41 -0
- package/lib/checker/checks/index.js +68 -6
- package/lib/checker/checks/webrtc-transport.js +68 -6
- package/lib/checker/checks/webrtc.js +68 -6
- package/lib/domain/AdHocAPIConference.js +41 -0
- package/lib/domain/CallLog.js +6 -0
- package/lib/domain/CallSession.js +8 -0
- package/lib/domain/Features.js +41 -0
- package/lib/domain/MeetingStatus.js +31 -0
- package/lib/domain/Phone/CTIPhone.js +49 -0
- package/lib/domain/Phone/WebRTCPhone.js +33 -6
- package/lib/domain/__tests__/CallLog.test.js +6 -0
- package/lib/domain/__tests__/CallSession.test.js +40 -4
- package/lib/domain/__tests__/IndirectTransfer.test.js +8 -0
- package/lib/domain/__tests__/Room.test.js +8 -0
- package/lib/index.js +101 -12
- package/lib/service/CallApi.js +41 -0
- package/lib/service/getApiClient.js +41 -0
- package/lib/simple/Auth.js +101 -12
- package/lib/simple/Configuration.js +101 -12
- package/lib/simple/Directory.js +41 -0
- package/lib/simple/Phone.js +101 -12
- package/lib/simple/index.js +101 -12
- package/lib/simple/room/LocalParticipant.js +101 -12
- package/lib/simple/room/Participant.js +101 -12
- package/lib/simple/room/RemoteParticipant.js +101 -12
- package/lib/simple/room/Room.js +101 -12
- package/lib/simple/room/SipRoom.js +101 -12
- package/lib/simple/room/Stream.js +101 -12
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +101 -12
- package/lib/simple/utils.js +101 -12
- package/lib/web-rtc-client.js +68 -6
- package/package.json +1 -1
- package/src/api/auth.js +5 -0
- package/src/api/calld.js +3 -0
- package/src/domain/CallLog.js +6 -0
- package/src/domain/CallSession.js +8 -0
- package/src/domain/MeetingStatus.js +27 -0
- package/src/domain/Phone/WebRTCPhone.js +25 -6
- package/src/domain/__tests__/CallSession.test.js +32 -4
- package/src/web-rtc-client.js +27 -6
package/lib/simple/room/Room.js
CHANGED
|
@@ -2228,6 +2228,7 @@ var authMethods = (client , baseUrl ) => ({
|
|
|
2228
2228
|
|
|
2229
2229
|
|
|
2230
2230
|
|
|
2231
|
+
|
|
2231
2232
|
) {
|
|
2232
2233
|
const body = {
|
|
2233
2234
|
backend: params.backend || DEFAULT_BACKEND_USER,
|
|
@@ -2247,6 +2248,10 @@ var authMethods = (client , baseUrl ) => ({
|
|
|
2247
2248
|
headers['Wazo-Session-Type'] = 'mobile';
|
|
2248
2249
|
}
|
|
2249
2250
|
|
|
2251
|
+
if (params.tenantId) {
|
|
2252
|
+
body.tenant_id = params.tenantId;
|
|
2253
|
+
}
|
|
2254
|
+
|
|
2250
2255
|
return client.post(`${baseUrl}/token`, body, headers).then(response => Session.parse(response));
|
|
2251
2256
|
},
|
|
2252
2257
|
|
|
@@ -3603,6 +3608,14 @@ class CallSession {
|
|
|
3603
3608
|
return !!this.answerTime;
|
|
3604
3609
|
}
|
|
3605
3610
|
|
|
3611
|
+
toJSON() {
|
|
3612
|
+
const jsonObj = { ...this };
|
|
3613
|
+
// $FlowFixMe
|
|
3614
|
+
jsonObj.answered = this.answered;
|
|
3615
|
+
|
|
3616
|
+
return jsonObj;
|
|
3617
|
+
}
|
|
3618
|
+
|
|
3606
3619
|
static parseCall(call ) {
|
|
3607
3620
|
return new CallSession({
|
|
3608
3621
|
callId: call.id,
|
|
@@ -3713,11 +3726,13 @@ class Recording {
|
|
|
3713
3726
|
|
|
3714
3727
|
|
|
3715
3728
|
|
|
3729
|
+
|
|
3716
3730
|
|
|
3717
3731
|
|
|
3718
3732
|
|
|
3719
3733
|
|
|
3720
3734
|
|
|
3735
|
+
|
|
3721
3736
|
|
|
3722
3737
|
|
|
3723
3738
|
|
|
@@ -3738,10 +3753,12 @@ class Recording {
|
|
|
3738
3753
|
|
|
3739
3754
|
|
|
3740
3755
|
|
|
3756
|
+
|
|
3741
3757
|
|
|
3742
3758
|
|
|
3743
3759
|
|
|
3744
3760
|
|
|
3761
|
+
|
|
3745
3762
|
|
|
3746
3763
|
|
|
3747
3764
|
|
|
@@ -3803,10 +3820,12 @@ class CallLog {
|
|
|
3803
3820
|
|| plain.destination_extension
|
|
3804
3821
|
|| `meeting-${plain.requested_name || plain.destination_name || ''}`,
|
|
3805
3822
|
name: plain.requested_name || plain.destination_name || '',
|
|
3823
|
+
uuid: plain.destination_user_uuid,
|
|
3806
3824
|
},
|
|
3807
3825
|
source: {
|
|
3808
3826
|
extension: plain.source_extension,
|
|
3809
3827
|
name: plain.source_name,
|
|
3828
|
+
uuid: plain.source_user_uuid,
|
|
3810
3829
|
},
|
|
3811
3830
|
id: plain.id,
|
|
3812
3831
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
@@ -4854,6 +4873,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4854
4873
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4855
4874
|
});
|
|
4856
4875
|
|
|
4876
|
+
//
|
|
4877
|
+
|
|
4878
|
+
|
|
4879
|
+
|
|
4880
|
+
|
|
4881
|
+
|
|
4882
|
+
class MeetingStatus {
|
|
4883
|
+
|
|
4884
|
+
|
|
4885
|
+
|
|
4886
|
+
|
|
4887
|
+
constructor({
|
|
4888
|
+
full,
|
|
4889
|
+
} = {}) {
|
|
4890
|
+
this.full = full;
|
|
4891
|
+
|
|
4892
|
+
// Useful to compare instead of instanceof with minified code
|
|
4893
|
+
this.type = 'MeetingStatus';
|
|
4894
|
+
}
|
|
4895
|
+
|
|
4896
|
+
static parse(plain ) {
|
|
4897
|
+
return new MeetingStatus({
|
|
4898
|
+
full: plain.full,
|
|
4899
|
+
});
|
|
4900
|
+
}
|
|
4901
|
+
|
|
4902
|
+
}
|
|
4903
|
+
|
|
4857
4904
|
/* */
|
|
4858
4905
|
|
|
4859
4906
|
|
|
@@ -5048,6 +5095,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
5048
5095
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
5049
5096
|
ApiRequester.successResponseParser),
|
|
5050
5097
|
|
|
5098
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
5099
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
5051
5100
|
});
|
|
5052
5101
|
|
|
5053
5102
|
//
|
|
@@ -6637,7 +6686,7 @@ const events$1 = [REGISTERED, UNREGISTERED, REGISTRATION_FAILED, INVITE];
|
|
|
6637
6686
|
const transportEvents = [CONNECTED, DISCONNECTED, TRANSPORT_ERROR, MESSAGE];
|
|
6638
6687
|
class CanceledCallError extends Error {}
|
|
6639
6688
|
|
|
6640
|
-
const MAX_REGISTER_TRIES =
|
|
6689
|
+
const MAX_REGISTER_TRIES = 5;
|
|
6641
6690
|
|
|
6642
6691
|
|
|
6643
6692
|
|
|
@@ -6691,6 +6740,7 @@ class WebRTCClient extends Emitter {
|
|
|
6691
6740
|
|
|
6692
6741
|
|
|
6693
6742
|
|
|
6743
|
+
|
|
6694
6744
|
|
|
6695
6745
|
// sugar
|
|
6696
6746
|
|
|
@@ -6753,6 +6803,7 @@ class WebRTCClient extends Emitter {
|
|
|
6753
6803
|
this.conferences = {};
|
|
6754
6804
|
this.networkMonitoringInterval = {};
|
|
6755
6805
|
this.sessionNetworkStats = {};
|
|
6806
|
+
this.forceClosed = false;
|
|
6756
6807
|
|
|
6757
6808
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
6758
6809
|
this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
|
|
@@ -6874,6 +6925,8 @@ class WebRTCClient extends Emitter {
|
|
|
6874
6925
|
skipRegister: this.skipRegister,
|
|
6875
6926
|
};
|
|
6876
6927
|
|
|
6928
|
+
this.forceClosed = false;
|
|
6929
|
+
|
|
6877
6930
|
if (this.skipRegister) {
|
|
6878
6931
|
logger$8.info('sdk webrtc skip register...', logInfo);
|
|
6879
6932
|
return Promise.resolve();
|
|
@@ -6898,7 +6951,15 @@ class WebRTCClient extends Emitter {
|
|
|
6898
6951
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
6899
6952
|
|
|
6900
6953
|
const onRegisterFailed = () => {
|
|
6901
|
-
logger$8.info('sdk webrtc registering failed', {
|
|
6954
|
+
logger$8.info('sdk webrtc registering failed', {
|
|
6955
|
+
tries,
|
|
6956
|
+
registerer: !!this.registerer,
|
|
6957
|
+
forceClosed: this.forceClosed,
|
|
6958
|
+
});
|
|
6959
|
+
if (this.forceClosed) {
|
|
6960
|
+
return;
|
|
6961
|
+
}
|
|
6962
|
+
|
|
6902
6963
|
this.connectionPromise = null;
|
|
6903
6964
|
if (this.registerer && this.registerer.waiting) {
|
|
6904
6965
|
this.registerer.waitingToggle(false);
|
|
@@ -7176,8 +7237,9 @@ class WebRTCClient extends Emitter {
|
|
|
7176
7237
|
}
|
|
7177
7238
|
}
|
|
7178
7239
|
|
|
7179
|
-
async close() {
|
|
7180
|
-
logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
7240
|
+
async close(force = false) {
|
|
7241
|
+
logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
|
|
7242
|
+
this.forceClosed = force;
|
|
7181
7243
|
this._cleanupMedia();
|
|
7182
7244
|
this.connectionPromise = null;
|
|
7183
7245
|
|
|
@@ -7196,7 +7258,7 @@ class WebRTCClient extends Emitter {
|
|
|
7196
7258
|
this.userAgent.delegate = null;
|
|
7197
7259
|
this.userAgent.stateChange.removeAllListeners();
|
|
7198
7260
|
|
|
7199
|
-
await this._disconnectTransport();
|
|
7261
|
+
await this._disconnectTransport(force);
|
|
7200
7262
|
|
|
7201
7263
|
this._cleanupRegister();
|
|
7202
7264
|
|
|
@@ -8632,7 +8694,15 @@ class WebRTCClient extends Emitter {
|
|
|
8632
8694
|
return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
|
|
8633
8695
|
}
|
|
8634
8696
|
|
|
8635
|
-
async _disconnectTransport() {
|
|
8697
|
+
async _disconnectTransport(force = false) {
|
|
8698
|
+
if (force) {
|
|
8699
|
+
// Bypass sip.js state machine that prevent to close WS with the state `Connecting`
|
|
8700
|
+
this.userAgent.transport.disconnectResolve = () => {};
|
|
8701
|
+
// eslint-disable-next-line
|
|
8702
|
+
this.userAgent.transport._ws.close(1000);
|
|
8703
|
+
return;
|
|
8704
|
+
}
|
|
8705
|
+
|
|
8636
8706
|
// Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
|
|
8637
8707
|
if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
|
|
8638
8708
|
try {
|
|
@@ -9579,6 +9649,12 @@ class WebRTCPhone extends Emitter {
|
|
|
9579
9649
|
return Promise.resolve(null);
|
|
9580
9650
|
}
|
|
9581
9651
|
|
|
9652
|
+
const sipSessionId = this.getSipSessionIdFromCallSession(callSession);
|
|
9653
|
+
if (sipSessionId && !(sipSessionId in this.callSessions)) {
|
|
9654
|
+
logger$7.warn('Call session already ended or not found, can\'t accept it.', { sipSessionId });
|
|
9655
|
+
return Promise.resolve(null);
|
|
9656
|
+
}
|
|
9657
|
+
|
|
9582
9658
|
if (callSession.getId() in this.acceptedSessions) {
|
|
9583
9659
|
logger$7.warn('CallSession already accepted.', { id: callSession ? callSession.getId() : 'n/a' });
|
|
9584
9660
|
return Promise.resolve(callSession.sipCallId);
|
|
@@ -10039,7 +10115,7 @@ class WebRTCPhone extends Emitter {
|
|
|
10039
10115
|
return this.client && this.client.isConference(callSession.sipCallId);
|
|
10040
10116
|
}
|
|
10041
10117
|
|
|
10042
|
-
async close() {
|
|
10118
|
+
async close(force = false) {
|
|
10043
10119
|
logger$7.info('WebRTC close');
|
|
10044
10120
|
|
|
10045
10121
|
try {
|
|
@@ -10051,7 +10127,7 @@ class WebRTCPhone extends Emitter {
|
|
|
10051
10127
|
logger$7.error('WebRTC close, unregister error', e);
|
|
10052
10128
|
}
|
|
10053
10129
|
|
|
10054
|
-
this.client.close();
|
|
10130
|
+
this.client.close(force);
|
|
10055
10131
|
this.unbind();
|
|
10056
10132
|
|
|
10057
10133
|
this.incomingSessions = [];
|
|
@@ -10203,9 +10279,17 @@ class WebRTCPhone extends Emitter {
|
|
|
10203
10279
|
});
|
|
10204
10280
|
|
|
10205
10281
|
this.client.on(this.client.ACCEPTED, (sipSession ) => {
|
|
10206
|
-
|
|
10282
|
+
const sessionId = this.getSipSessionId(sipSession);
|
|
10283
|
+
const hasSession = sessionId in this.callSessions;
|
|
10284
|
+
|
|
10285
|
+
logger$7.info('WebRTC call accepted', { sipId: sessionId, hasSession });
|
|
10286
|
+
|
|
10287
|
+
if (!hasSession) {
|
|
10288
|
+
logger$7.warn('Call accepted ignored, session is no longer present in the WebRtcPhone', { sessionId });
|
|
10289
|
+
return;
|
|
10290
|
+
}
|
|
10207
10291
|
|
|
10208
|
-
this._onCallAccepted(sipSession, this.client.hasVideo(
|
|
10292
|
+
this._onCallAccepted(sipSession, this.client.hasVideo(sessionId));
|
|
10209
10293
|
|
|
10210
10294
|
if (this.audioOutputDeviceId) {
|
|
10211
10295
|
this.client.changeAudioOutputDevice(this.audioOutputDeviceId);
|
|
@@ -10341,9 +10425,14 @@ class WebRTCPhone extends Emitter {
|
|
|
10341
10425
|
return this.client.getSipSessionId(sipSession);
|
|
10342
10426
|
}
|
|
10343
10427
|
|
|
10344
|
-
|
|
10428
|
+
getSipSessionIdFromCallSession(callSession ) {
|
|
10345
10429
|
const sipSession = this.findSipSession(callSession);
|
|
10346
|
-
|
|
10430
|
+
|
|
10431
|
+
return sipSession ? this.getSipSessionId(sipSession) : null;
|
|
10432
|
+
}
|
|
10433
|
+
|
|
10434
|
+
_updateCallSession(callSession ) {
|
|
10435
|
+
const sipSessionId = this.getSipSessionIdFromCallSession(callSession);
|
|
10347
10436
|
|
|
10348
10437
|
if (sipSessionId) {
|
|
10349
10438
|
this.callSessions[sipSessionId] = callSession;
|
|
@@ -2226,6 +2226,7 @@ var authMethods = (client , baseUrl ) => ({
|
|
|
2226
2226
|
|
|
2227
2227
|
|
|
2228
2228
|
|
|
2229
|
+
|
|
2229
2230
|
) {
|
|
2230
2231
|
const body = {
|
|
2231
2232
|
backend: params.backend || DEFAULT_BACKEND_USER,
|
|
@@ -2245,6 +2246,10 @@ var authMethods = (client , baseUrl ) => ({
|
|
|
2245
2246
|
headers['Wazo-Session-Type'] = 'mobile';
|
|
2246
2247
|
}
|
|
2247
2248
|
|
|
2249
|
+
if (params.tenantId) {
|
|
2250
|
+
body.tenant_id = params.tenantId;
|
|
2251
|
+
}
|
|
2252
|
+
|
|
2248
2253
|
return client.post(`${baseUrl}/token`, body, headers).then(response => Session.parse(response));
|
|
2249
2254
|
},
|
|
2250
2255
|
|
|
@@ -3601,6 +3606,14 @@ class CallSession {
|
|
|
3601
3606
|
return !!this.answerTime;
|
|
3602
3607
|
}
|
|
3603
3608
|
|
|
3609
|
+
toJSON() {
|
|
3610
|
+
const jsonObj = { ...this };
|
|
3611
|
+
// $FlowFixMe
|
|
3612
|
+
jsonObj.answered = this.answered;
|
|
3613
|
+
|
|
3614
|
+
return jsonObj;
|
|
3615
|
+
}
|
|
3616
|
+
|
|
3604
3617
|
static parseCall(call ) {
|
|
3605
3618
|
return new CallSession({
|
|
3606
3619
|
callId: call.id,
|
|
@@ -3711,11 +3724,13 @@ class Recording {
|
|
|
3711
3724
|
|
|
3712
3725
|
|
|
3713
3726
|
|
|
3727
|
+
|
|
3714
3728
|
|
|
3715
3729
|
|
|
3716
3730
|
|
|
3717
3731
|
|
|
3718
3732
|
|
|
3733
|
+
|
|
3719
3734
|
|
|
3720
3735
|
|
|
3721
3736
|
|
|
@@ -3736,10 +3751,12 @@ class Recording {
|
|
|
3736
3751
|
|
|
3737
3752
|
|
|
3738
3753
|
|
|
3754
|
+
|
|
3739
3755
|
|
|
3740
3756
|
|
|
3741
3757
|
|
|
3742
3758
|
|
|
3759
|
+
|
|
3743
3760
|
|
|
3744
3761
|
|
|
3745
3762
|
|
|
@@ -3801,10 +3818,12 @@ class CallLog {
|
|
|
3801
3818
|
|| plain.destination_extension
|
|
3802
3819
|
|| `meeting-${plain.requested_name || plain.destination_name || ''}`,
|
|
3803
3820
|
name: plain.requested_name || plain.destination_name || '',
|
|
3821
|
+
uuid: plain.destination_user_uuid,
|
|
3804
3822
|
},
|
|
3805
3823
|
source: {
|
|
3806
3824
|
extension: plain.source_extension,
|
|
3807
3825
|
name: plain.source_name,
|
|
3826
|
+
uuid: plain.source_user_uuid,
|
|
3808
3827
|
},
|
|
3809
3828
|
id: plain.id,
|
|
3810
3829
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
@@ -4852,6 +4871,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4852
4871
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4853
4872
|
});
|
|
4854
4873
|
|
|
4874
|
+
//
|
|
4875
|
+
|
|
4876
|
+
|
|
4877
|
+
|
|
4878
|
+
|
|
4879
|
+
|
|
4880
|
+
class MeetingStatus {
|
|
4881
|
+
|
|
4882
|
+
|
|
4883
|
+
|
|
4884
|
+
|
|
4885
|
+
constructor({
|
|
4886
|
+
full,
|
|
4887
|
+
} = {}) {
|
|
4888
|
+
this.full = full;
|
|
4889
|
+
|
|
4890
|
+
// Useful to compare instead of instanceof with minified code
|
|
4891
|
+
this.type = 'MeetingStatus';
|
|
4892
|
+
}
|
|
4893
|
+
|
|
4894
|
+
static parse(plain ) {
|
|
4895
|
+
return new MeetingStatus({
|
|
4896
|
+
full: plain.full,
|
|
4897
|
+
});
|
|
4898
|
+
}
|
|
4899
|
+
|
|
4900
|
+
}
|
|
4901
|
+
|
|
4855
4902
|
/* */
|
|
4856
4903
|
|
|
4857
4904
|
|
|
@@ -5046,6 +5093,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
5046
5093
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
5047
5094
|
ApiRequester.successResponseParser),
|
|
5048
5095
|
|
|
5096
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
5097
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
5049
5098
|
});
|
|
5050
5099
|
|
|
5051
5100
|
//
|
|
@@ -6635,7 +6684,7 @@ const events$1 = [REGISTERED, UNREGISTERED, REGISTRATION_FAILED, INVITE];
|
|
|
6635
6684
|
const transportEvents = [CONNECTED, DISCONNECTED, TRANSPORT_ERROR, MESSAGE];
|
|
6636
6685
|
class CanceledCallError extends Error {}
|
|
6637
6686
|
|
|
6638
|
-
const MAX_REGISTER_TRIES =
|
|
6687
|
+
const MAX_REGISTER_TRIES = 5;
|
|
6639
6688
|
|
|
6640
6689
|
|
|
6641
6690
|
|
|
@@ -6689,6 +6738,7 @@ class WebRTCClient extends Emitter {
|
|
|
6689
6738
|
|
|
6690
6739
|
|
|
6691
6740
|
|
|
6741
|
+
|
|
6692
6742
|
|
|
6693
6743
|
// sugar
|
|
6694
6744
|
|
|
@@ -6751,6 +6801,7 @@ class WebRTCClient extends Emitter {
|
|
|
6751
6801
|
this.conferences = {};
|
|
6752
6802
|
this.networkMonitoringInterval = {};
|
|
6753
6803
|
this.sessionNetworkStats = {};
|
|
6804
|
+
this.forceClosed = false;
|
|
6754
6805
|
|
|
6755
6806
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
6756
6807
|
this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
|
|
@@ -6872,6 +6923,8 @@ class WebRTCClient extends Emitter {
|
|
|
6872
6923
|
skipRegister: this.skipRegister,
|
|
6873
6924
|
};
|
|
6874
6925
|
|
|
6926
|
+
this.forceClosed = false;
|
|
6927
|
+
|
|
6875
6928
|
if (this.skipRegister) {
|
|
6876
6929
|
logger$8.info('sdk webrtc skip register...', logInfo);
|
|
6877
6930
|
return Promise.resolve();
|
|
@@ -6896,7 +6949,15 @@ class WebRTCClient extends Emitter {
|
|
|
6896
6949
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
6897
6950
|
|
|
6898
6951
|
const onRegisterFailed = () => {
|
|
6899
|
-
logger$8.info('sdk webrtc registering failed', {
|
|
6952
|
+
logger$8.info('sdk webrtc registering failed', {
|
|
6953
|
+
tries,
|
|
6954
|
+
registerer: !!this.registerer,
|
|
6955
|
+
forceClosed: this.forceClosed,
|
|
6956
|
+
});
|
|
6957
|
+
if (this.forceClosed) {
|
|
6958
|
+
return;
|
|
6959
|
+
}
|
|
6960
|
+
|
|
6900
6961
|
this.connectionPromise = null;
|
|
6901
6962
|
if (this.registerer && this.registerer.waiting) {
|
|
6902
6963
|
this.registerer.waitingToggle(false);
|
|
@@ -7174,8 +7235,9 @@ class WebRTCClient extends Emitter {
|
|
|
7174
7235
|
}
|
|
7175
7236
|
}
|
|
7176
7237
|
|
|
7177
|
-
async close() {
|
|
7178
|
-
logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
7238
|
+
async close(force = false) {
|
|
7239
|
+
logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
|
|
7240
|
+
this.forceClosed = force;
|
|
7179
7241
|
this._cleanupMedia();
|
|
7180
7242
|
this.connectionPromise = null;
|
|
7181
7243
|
|
|
@@ -7194,7 +7256,7 @@ class WebRTCClient extends Emitter {
|
|
|
7194
7256
|
this.userAgent.delegate = null;
|
|
7195
7257
|
this.userAgent.stateChange.removeAllListeners();
|
|
7196
7258
|
|
|
7197
|
-
await this._disconnectTransport();
|
|
7259
|
+
await this._disconnectTransport(force);
|
|
7198
7260
|
|
|
7199
7261
|
this._cleanupRegister();
|
|
7200
7262
|
|
|
@@ -8630,7 +8692,15 @@ class WebRTCClient extends Emitter {
|
|
|
8630
8692
|
return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
|
|
8631
8693
|
}
|
|
8632
8694
|
|
|
8633
|
-
async _disconnectTransport() {
|
|
8695
|
+
async _disconnectTransport(force = false) {
|
|
8696
|
+
if (force) {
|
|
8697
|
+
// Bypass sip.js state machine that prevent to close WS with the state `Connecting`
|
|
8698
|
+
this.userAgent.transport.disconnectResolve = () => {};
|
|
8699
|
+
// eslint-disable-next-line
|
|
8700
|
+
this.userAgent.transport._ws.close(1000);
|
|
8701
|
+
return;
|
|
8702
|
+
}
|
|
8703
|
+
|
|
8634
8704
|
// Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
|
|
8635
8705
|
if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
|
|
8636
8706
|
try {
|
|
@@ -9577,6 +9647,12 @@ class WebRTCPhone extends Emitter {
|
|
|
9577
9647
|
return Promise.resolve(null);
|
|
9578
9648
|
}
|
|
9579
9649
|
|
|
9650
|
+
const sipSessionId = this.getSipSessionIdFromCallSession(callSession);
|
|
9651
|
+
if (sipSessionId && !(sipSessionId in this.callSessions)) {
|
|
9652
|
+
logger$7.warn('Call session already ended or not found, can\'t accept it.', { sipSessionId });
|
|
9653
|
+
return Promise.resolve(null);
|
|
9654
|
+
}
|
|
9655
|
+
|
|
9580
9656
|
if (callSession.getId() in this.acceptedSessions) {
|
|
9581
9657
|
logger$7.warn('CallSession already accepted.', { id: callSession ? callSession.getId() : 'n/a' });
|
|
9582
9658
|
return Promise.resolve(callSession.sipCallId);
|
|
@@ -10037,7 +10113,7 @@ class WebRTCPhone extends Emitter {
|
|
|
10037
10113
|
return this.client && this.client.isConference(callSession.sipCallId);
|
|
10038
10114
|
}
|
|
10039
10115
|
|
|
10040
|
-
async close() {
|
|
10116
|
+
async close(force = false) {
|
|
10041
10117
|
logger$7.info('WebRTC close');
|
|
10042
10118
|
|
|
10043
10119
|
try {
|
|
@@ -10049,7 +10125,7 @@ class WebRTCPhone extends Emitter {
|
|
|
10049
10125
|
logger$7.error('WebRTC close, unregister error', e);
|
|
10050
10126
|
}
|
|
10051
10127
|
|
|
10052
|
-
this.client.close();
|
|
10128
|
+
this.client.close(force);
|
|
10053
10129
|
this.unbind();
|
|
10054
10130
|
|
|
10055
10131
|
this.incomingSessions = [];
|
|
@@ -10201,9 +10277,17 @@ class WebRTCPhone extends Emitter {
|
|
|
10201
10277
|
});
|
|
10202
10278
|
|
|
10203
10279
|
this.client.on(this.client.ACCEPTED, (sipSession ) => {
|
|
10204
|
-
|
|
10280
|
+
const sessionId = this.getSipSessionId(sipSession);
|
|
10281
|
+
const hasSession = sessionId in this.callSessions;
|
|
10282
|
+
|
|
10283
|
+
logger$7.info('WebRTC call accepted', { sipId: sessionId, hasSession });
|
|
10284
|
+
|
|
10285
|
+
if (!hasSession) {
|
|
10286
|
+
logger$7.warn('Call accepted ignored, session is no longer present in the WebRtcPhone', { sessionId });
|
|
10287
|
+
return;
|
|
10288
|
+
}
|
|
10205
10289
|
|
|
10206
|
-
this._onCallAccepted(sipSession, this.client.hasVideo(
|
|
10290
|
+
this._onCallAccepted(sipSession, this.client.hasVideo(sessionId));
|
|
10207
10291
|
|
|
10208
10292
|
if (this.audioOutputDeviceId) {
|
|
10209
10293
|
this.client.changeAudioOutputDevice(this.audioOutputDeviceId);
|
|
@@ -10339,9 +10423,14 @@ class WebRTCPhone extends Emitter {
|
|
|
10339
10423
|
return this.client.getSipSessionId(sipSession);
|
|
10340
10424
|
}
|
|
10341
10425
|
|
|
10342
|
-
|
|
10426
|
+
getSipSessionIdFromCallSession(callSession ) {
|
|
10343
10427
|
const sipSession = this.findSipSession(callSession);
|
|
10344
|
-
|
|
10428
|
+
|
|
10429
|
+
return sipSession ? this.getSipSessionId(sipSession) : null;
|
|
10430
|
+
}
|
|
10431
|
+
|
|
10432
|
+
_updateCallSession(callSession ) {
|
|
10433
|
+
const sipSessionId = this.getSipSessionIdFromCallSession(callSession);
|
|
10345
10434
|
|
|
10346
10435
|
if (sipSessionId) {
|
|
10347
10436
|
this.callSessions[sipSessionId] = callSession;
|