@wazo/sdk 0.37.30 → 0.37.34
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 +4 -4
- package/esm/__tests__/api-client.test.js +30 -0
- package/esm/__tests__/web-rtc-client.test.js +57 -6
- package/esm/api/calld.js +30 -0
- package/esm/api-client.js +30 -0
- package/esm/checker/Checker.js +57 -6
- package/esm/checker/checks/aor.js +30 -0
- package/esm/checker/checks/api.js +30 -0
- package/esm/checker/checks/index.js +57 -6
- package/esm/checker/checks/webrtc-transport.js +57 -6
- package/esm/checker/checks/webrtc.js +57 -6
- package/esm/domain/AdHocAPIConference.js +30 -0
- package/esm/domain/CallSession.js +9 -1
- package/esm/domain/Features.js +30 -0
- package/esm/domain/MeetingStatus.js +29 -0
- package/esm/domain/Phone/CTIPhone.js +39 -1
- package/esm/domain/Phone/WebRTCPhone.js +43 -8
- package/esm/domain/__tests__/CallSession.test.js +41 -5
- package/esm/domain/__tests__/IndirectTransfer.test.js +9 -1
- package/esm/domain/__tests__/Room.test.js +9 -1
- package/esm/index.js +100 -14
- package/esm/service/CallApi.js +30 -0
- package/esm/service/getApiClient.js +30 -0
- package/esm/simple/Auth.js +100 -14
- package/esm/simple/Configuration.js +100 -14
- package/esm/simple/Directory.js +30 -0
- package/esm/simple/Phone.js +100 -14
- package/esm/simple/index.js +100 -14
- package/esm/simple/room/LocalParticipant.js +100 -14
- package/esm/simple/room/Participant.js +100 -14
- package/esm/simple/room/RemoteParticipant.js +100 -14
- package/esm/simple/room/Room.js +100 -14
- package/esm/simple/room/SipRoom.js +100 -14
- package/esm/simple/room/Stream.js +100 -14
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +100 -14
- package/esm/simple/utils.js +100 -14
- package/esm/web-rtc-client.js +57 -6
- package/lib/__tests__/api-client.test.js +30 -0
- package/lib/__tests__/web-rtc-client.test.js +57 -6
- package/lib/api/calld.js +30 -0
- package/lib/api-client.js +30 -0
- package/lib/checker/Checker.js +57 -6
- package/lib/checker/checks/aor.js +30 -0
- package/lib/checker/checks/api.js +30 -0
- package/lib/checker/checks/index.js +57 -6
- package/lib/checker/checks/webrtc-transport.js +57 -6
- package/lib/checker/checks/webrtc.js +57 -6
- package/lib/domain/AdHocAPIConference.js +30 -0
- package/lib/domain/CallSession.js +9 -1
- package/lib/domain/Features.js +30 -0
- package/lib/domain/MeetingStatus.js +31 -0
- package/lib/domain/Phone/CTIPhone.js +39 -1
- package/lib/domain/Phone/WebRTCPhone.js +43 -8
- package/lib/domain/__tests__/CallSession.test.js +41 -5
- package/lib/domain/__tests__/IndirectTransfer.test.js +9 -1
- package/lib/domain/__tests__/Room.test.js +9 -1
- package/lib/index.js +100 -14
- package/lib/service/CallApi.js +30 -0
- package/lib/service/getApiClient.js +30 -0
- package/lib/simple/Auth.js +100 -14
- package/lib/simple/Configuration.js +100 -14
- package/lib/simple/Directory.js +30 -0
- package/lib/simple/Phone.js +100 -14
- package/lib/simple/index.js +100 -14
- package/lib/simple/room/LocalParticipant.js +100 -14
- package/lib/simple/room/Participant.js +100 -14
- package/lib/simple/room/RemoteParticipant.js +100 -14
- package/lib/simple/room/Room.js +100 -14
- package/lib/simple/room/SipRoom.js +100 -14
- package/lib/simple/room/Stream.js +100 -14
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +100 -14
- package/lib/simple/utils.js +100 -14
- package/lib/web-rtc-client.js +57 -6
- package/package.json +1 -1
- package/src/api/calld.js +3 -0
- package/src/domain/CallSession.js +9 -1
- package/src/domain/MeetingStatus.js +27 -0
- package/src/domain/Phone/WebRTCPhone.js +34 -7
- package/src/domain/__tests__/CallSession.test.js +32 -4
- package/src/web-rtc-client.js +27 -6
package/lib/checker/Checker.js
CHANGED
|
@@ -4085,6 +4085,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4085
4085
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4086
4086
|
});
|
|
4087
4087
|
|
|
4088
|
+
//
|
|
4089
|
+
|
|
4090
|
+
|
|
4091
|
+
|
|
4092
|
+
|
|
4093
|
+
|
|
4094
|
+
class MeetingStatus {
|
|
4095
|
+
|
|
4096
|
+
|
|
4097
|
+
|
|
4098
|
+
|
|
4099
|
+
constructor({
|
|
4100
|
+
full,
|
|
4101
|
+
} = {}) {
|
|
4102
|
+
this.full = full;
|
|
4103
|
+
|
|
4104
|
+
// Useful to compare instead of instanceof with minified code
|
|
4105
|
+
this.type = 'MeetingStatus';
|
|
4106
|
+
}
|
|
4107
|
+
|
|
4108
|
+
static parse(plain ) {
|
|
4109
|
+
return new MeetingStatus({
|
|
4110
|
+
full: plain.full,
|
|
4111
|
+
});
|
|
4112
|
+
}
|
|
4113
|
+
|
|
4114
|
+
}
|
|
4115
|
+
|
|
4088
4116
|
/* */
|
|
4089
4117
|
|
|
4090
4118
|
|
|
@@ -4279,6 +4307,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4279
4307
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
4280
4308
|
ApiRequester.successResponseParser),
|
|
4281
4309
|
|
|
4310
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
4311
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
4282
4312
|
});
|
|
4283
4313
|
|
|
4284
4314
|
//
|
|
@@ -5927,7 +5957,7 @@ const ON_NETWORK_STATS = 'onNetworkStats';
|
|
|
5927
5957
|
const ON_DISCONNECTED = 'onDisconnected';
|
|
5928
5958
|
class CanceledCallError extends Error {}
|
|
5929
5959
|
|
|
5930
|
-
const MAX_REGISTER_TRIES =
|
|
5960
|
+
const MAX_REGISTER_TRIES = 5;
|
|
5931
5961
|
|
|
5932
5962
|
|
|
5933
5963
|
|
|
@@ -5981,6 +6011,7 @@ class WebRTCClient extends Emitter {
|
|
|
5981
6011
|
|
|
5982
6012
|
|
|
5983
6013
|
|
|
6014
|
+
|
|
5984
6015
|
|
|
5985
6016
|
// sugar
|
|
5986
6017
|
|
|
@@ -6043,6 +6074,7 @@ class WebRTCClient extends Emitter {
|
|
|
6043
6074
|
this.conferences = {};
|
|
6044
6075
|
this.networkMonitoringInterval = {};
|
|
6045
6076
|
this.sessionNetworkStats = {};
|
|
6077
|
+
this.forceClosed = false;
|
|
6046
6078
|
|
|
6047
6079
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
6048
6080
|
this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
|
|
@@ -6164,6 +6196,8 @@ class WebRTCClient extends Emitter {
|
|
|
6164
6196
|
skipRegister: this.skipRegister,
|
|
6165
6197
|
};
|
|
6166
6198
|
|
|
6199
|
+
this.forceClosed = false;
|
|
6200
|
+
|
|
6167
6201
|
if (this.skipRegister) {
|
|
6168
6202
|
logger$1.info('sdk webrtc skip register...', logInfo);
|
|
6169
6203
|
return Promise.resolve();
|
|
@@ -6188,7 +6222,15 @@ class WebRTCClient extends Emitter {
|
|
|
6188
6222
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
6189
6223
|
|
|
6190
6224
|
const onRegisterFailed = () => {
|
|
6191
|
-
logger$1.info('sdk webrtc registering failed', {
|
|
6225
|
+
logger$1.info('sdk webrtc registering failed', {
|
|
6226
|
+
tries,
|
|
6227
|
+
registerer: !!this.registerer,
|
|
6228
|
+
forceClosed: this.forceClosed,
|
|
6229
|
+
});
|
|
6230
|
+
if (this.forceClosed) {
|
|
6231
|
+
return;
|
|
6232
|
+
}
|
|
6233
|
+
|
|
6192
6234
|
this.connectionPromise = null;
|
|
6193
6235
|
if (this.registerer && this.registerer.waiting) {
|
|
6194
6236
|
this.registerer.waitingToggle(false);
|
|
@@ -6466,8 +6508,9 @@ class WebRTCClient extends Emitter {
|
|
|
6466
6508
|
}
|
|
6467
6509
|
}
|
|
6468
6510
|
|
|
6469
|
-
async close() {
|
|
6470
|
-
logger$1.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
6511
|
+
async close(force = false) {
|
|
6512
|
+
logger$1.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
|
|
6513
|
+
this.forceClosed = force;
|
|
6471
6514
|
this._cleanupMedia();
|
|
6472
6515
|
this.connectionPromise = null;
|
|
6473
6516
|
|
|
@@ -6486,7 +6529,7 @@ class WebRTCClient extends Emitter {
|
|
|
6486
6529
|
this.userAgent.delegate = null;
|
|
6487
6530
|
this.userAgent.stateChange.removeAllListeners();
|
|
6488
6531
|
|
|
6489
|
-
await this._disconnectTransport();
|
|
6532
|
+
await this._disconnectTransport(force);
|
|
6490
6533
|
|
|
6491
6534
|
this._cleanupRegister();
|
|
6492
6535
|
|
|
@@ -7922,7 +7965,15 @@ class WebRTCClient extends Emitter {
|
|
|
7922
7965
|
return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
|
|
7923
7966
|
}
|
|
7924
7967
|
|
|
7925
|
-
async _disconnectTransport() {
|
|
7968
|
+
async _disconnectTransport(force = false) {
|
|
7969
|
+
if (force) {
|
|
7970
|
+
// Bypass sip.js state machine that prevent to close WS with the state `Connecting`
|
|
7971
|
+
this.userAgent.transport.disconnectResolve = () => {};
|
|
7972
|
+
// eslint-disable-next-line
|
|
7973
|
+
this.userAgent.transport._ws.close(1000);
|
|
7974
|
+
return;
|
|
7975
|
+
}
|
|
7976
|
+
|
|
7926
7977
|
// Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
|
|
7927
7978
|
if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
|
|
7928
7979
|
try {
|
|
@@ -4037,6 +4037,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4037
4037
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4038
4038
|
});
|
|
4039
4039
|
|
|
4040
|
+
//
|
|
4041
|
+
|
|
4042
|
+
|
|
4043
|
+
|
|
4044
|
+
|
|
4045
|
+
|
|
4046
|
+
class MeetingStatus {
|
|
4047
|
+
|
|
4048
|
+
|
|
4049
|
+
|
|
4050
|
+
|
|
4051
|
+
constructor({
|
|
4052
|
+
full,
|
|
4053
|
+
} = {}) {
|
|
4054
|
+
this.full = full;
|
|
4055
|
+
|
|
4056
|
+
// Useful to compare instead of instanceof with minified code
|
|
4057
|
+
this.type = 'MeetingStatus';
|
|
4058
|
+
}
|
|
4059
|
+
|
|
4060
|
+
static parse(plain ) {
|
|
4061
|
+
return new MeetingStatus({
|
|
4062
|
+
full: plain.full,
|
|
4063
|
+
});
|
|
4064
|
+
}
|
|
4065
|
+
|
|
4066
|
+
}
|
|
4067
|
+
|
|
4040
4068
|
/* */
|
|
4041
4069
|
|
|
4042
4070
|
|
|
@@ -4231,6 +4259,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4231
4259
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
4232
4260
|
ApiRequester.successResponseParser),
|
|
4233
4261
|
|
|
4262
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
4263
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
4234
4264
|
});
|
|
4235
4265
|
|
|
4236
4266
|
//
|
|
@@ -4037,6 +4037,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4037
4037
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4038
4038
|
});
|
|
4039
4039
|
|
|
4040
|
+
//
|
|
4041
|
+
|
|
4042
|
+
|
|
4043
|
+
|
|
4044
|
+
|
|
4045
|
+
|
|
4046
|
+
class MeetingStatus {
|
|
4047
|
+
|
|
4048
|
+
|
|
4049
|
+
|
|
4050
|
+
|
|
4051
|
+
constructor({
|
|
4052
|
+
full,
|
|
4053
|
+
} = {}) {
|
|
4054
|
+
this.full = full;
|
|
4055
|
+
|
|
4056
|
+
// Useful to compare instead of instanceof with minified code
|
|
4057
|
+
this.type = 'MeetingStatus';
|
|
4058
|
+
}
|
|
4059
|
+
|
|
4060
|
+
static parse(plain ) {
|
|
4061
|
+
return new MeetingStatus({
|
|
4062
|
+
full: plain.full,
|
|
4063
|
+
});
|
|
4064
|
+
}
|
|
4065
|
+
|
|
4066
|
+
}
|
|
4067
|
+
|
|
4040
4068
|
/* */
|
|
4041
4069
|
|
|
4042
4070
|
|
|
@@ -4231,6 +4259,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4231
4259
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
4232
4260
|
ApiRequester.successResponseParser),
|
|
4233
4261
|
|
|
4262
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
4263
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
4234
4264
|
});
|
|
4235
4265
|
|
|
4236
4266
|
//
|
|
@@ -4085,6 +4085,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4085
4085
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4086
4086
|
});
|
|
4087
4087
|
|
|
4088
|
+
//
|
|
4089
|
+
|
|
4090
|
+
|
|
4091
|
+
|
|
4092
|
+
|
|
4093
|
+
|
|
4094
|
+
class MeetingStatus {
|
|
4095
|
+
|
|
4096
|
+
|
|
4097
|
+
|
|
4098
|
+
|
|
4099
|
+
constructor({
|
|
4100
|
+
full,
|
|
4101
|
+
} = {}) {
|
|
4102
|
+
this.full = full;
|
|
4103
|
+
|
|
4104
|
+
// Useful to compare instead of instanceof with minified code
|
|
4105
|
+
this.type = 'MeetingStatus';
|
|
4106
|
+
}
|
|
4107
|
+
|
|
4108
|
+
static parse(plain ) {
|
|
4109
|
+
return new MeetingStatus({
|
|
4110
|
+
full: plain.full,
|
|
4111
|
+
});
|
|
4112
|
+
}
|
|
4113
|
+
|
|
4114
|
+
}
|
|
4115
|
+
|
|
4088
4116
|
/* */
|
|
4089
4117
|
|
|
4090
4118
|
|
|
@@ -4279,6 +4307,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4279
4307
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
4280
4308
|
ApiRequester.successResponseParser),
|
|
4281
4309
|
|
|
4310
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
4311
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
4282
4312
|
});
|
|
4283
4313
|
|
|
4284
4314
|
//
|
|
@@ -5927,7 +5957,7 @@ const ON_NETWORK_STATS = 'onNetworkStats';
|
|
|
5927
5957
|
const ON_DISCONNECTED = 'onDisconnected';
|
|
5928
5958
|
class CanceledCallError extends Error {}
|
|
5929
5959
|
|
|
5930
|
-
const MAX_REGISTER_TRIES =
|
|
5960
|
+
const MAX_REGISTER_TRIES = 5;
|
|
5931
5961
|
|
|
5932
5962
|
|
|
5933
5963
|
|
|
@@ -5981,6 +6011,7 @@ class WebRTCClient extends Emitter {
|
|
|
5981
6011
|
|
|
5982
6012
|
|
|
5983
6013
|
|
|
6014
|
+
|
|
5984
6015
|
|
|
5985
6016
|
// sugar
|
|
5986
6017
|
|
|
@@ -6043,6 +6074,7 @@ class WebRTCClient extends Emitter {
|
|
|
6043
6074
|
this.conferences = {};
|
|
6044
6075
|
this.networkMonitoringInterval = {};
|
|
6045
6076
|
this.sessionNetworkStats = {};
|
|
6077
|
+
this.forceClosed = false;
|
|
6046
6078
|
|
|
6047
6079
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
6048
6080
|
this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
|
|
@@ -6164,6 +6196,8 @@ class WebRTCClient extends Emitter {
|
|
|
6164
6196
|
skipRegister: this.skipRegister,
|
|
6165
6197
|
};
|
|
6166
6198
|
|
|
6199
|
+
this.forceClosed = false;
|
|
6200
|
+
|
|
6167
6201
|
if (this.skipRegister) {
|
|
6168
6202
|
logger.info('sdk webrtc skip register...', logInfo);
|
|
6169
6203
|
return Promise.resolve();
|
|
@@ -6188,7 +6222,15 @@ class WebRTCClient extends Emitter {
|
|
|
6188
6222
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
6189
6223
|
|
|
6190
6224
|
const onRegisterFailed = () => {
|
|
6191
|
-
logger.info('sdk webrtc registering failed', {
|
|
6225
|
+
logger.info('sdk webrtc registering failed', {
|
|
6226
|
+
tries,
|
|
6227
|
+
registerer: !!this.registerer,
|
|
6228
|
+
forceClosed: this.forceClosed,
|
|
6229
|
+
});
|
|
6230
|
+
if (this.forceClosed) {
|
|
6231
|
+
return;
|
|
6232
|
+
}
|
|
6233
|
+
|
|
6192
6234
|
this.connectionPromise = null;
|
|
6193
6235
|
if (this.registerer && this.registerer.waiting) {
|
|
6194
6236
|
this.registerer.waitingToggle(false);
|
|
@@ -6466,8 +6508,9 @@ class WebRTCClient extends Emitter {
|
|
|
6466
6508
|
}
|
|
6467
6509
|
}
|
|
6468
6510
|
|
|
6469
|
-
async close() {
|
|
6470
|
-
logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
6511
|
+
async close(force = false) {
|
|
6512
|
+
logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
|
|
6513
|
+
this.forceClosed = force;
|
|
6471
6514
|
this._cleanupMedia();
|
|
6472
6515
|
this.connectionPromise = null;
|
|
6473
6516
|
|
|
@@ -6486,7 +6529,7 @@ class WebRTCClient extends Emitter {
|
|
|
6486
6529
|
this.userAgent.delegate = null;
|
|
6487
6530
|
this.userAgent.stateChange.removeAllListeners();
|
|
6488
6531
|
|
|
6489
|
-
await this._disconnectTransport();
|
|
6532
|
+
await this._disconnectTransport(force);
|
|
6490
6533
|
|
|
6491
6534
|
this._cleanupRegister();
|
|
6492
6535
|
|
|
@@ -7922,7 +7965,15 @@ class WebRTCClient extends Emitter {
|
|
|
7922
7965
|
return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
|
|
7923
7966
|
}
|
|
7924
7967
|
|
|
7925
|
-
async _disconnectTransport() {
|
|
7968
|
+
async _disconnectTransport(force = false) {
|
|
7969
|
+
if (force) {
|
|
7970
|
+
// Bypass sip.js state machine that prevent to close WS with the state `Connecting`
|
|
7971
|
+
this.userAgent.transport.disconnectResolve = () => {};
|
|
7972
|
+
// eslint-disable-next-line
|
|
7973
|
+
this.userAgent.transport._ws.close(1000);
|
|
7974
|
+
return;
|
|
7975
|
+
}
|
|
7976
|
+
|
|
7926
7977
|
// Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
|
|
7927
7978
|
if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
|
|
7928
7979
|
try {
|
|
@@ -4588,6 +4588,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4588
4588
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4589
4589
|
});
|
|
4590
4590
|
|
|
4591
|
+
//
|
|
4592
|
+
|
|
4593
|
+
|
|
4594
|
+
|
|
4595
|
+
|
|
4596
|
+
|
|
4597
|
+
class MeetingStatus {
|
|
4598
|
+
|
|
4599
|
+
|
|
4600
|
+
|
|
4601
|
+
|
|
4602
|
+
constructor({
|
|
4603
|
+
full,
|
|
4604
|
+
} = {}) {
|
|
4605
|
+
this.full = full;
|
|
4606
|
+
|
|
4607
|
+
// Useful to compare instead of instanceof with minified code
|
|
4608
|
+
this.type = 'MeetingStatus';
|
|
4609
|
+
}
|
|
4610
|
+
|
|
4611
|
+
static parse(plain ) {
|
|
4612
|
+
return new MeetingStatus({
|
|
4613
|
+
full: plain.full,
|
|
4614
|
+
});
|
|
4615
|
+
}
|
|
4616
|
+
|
|
4617
|
+
}
|
|
4618
|
+
|
|
4591
4619
|
/* */
|
|
4592
4620
|
|
|
4593
4621
|
|
|
@@ -4782,6 +4810,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4782
4810
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
4783
4811
|
ApiRequester.successResponseParser),
|
|
4784
4812
|
|
|
4813
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
4814
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
4785
4815
|
});
|
|
4786
4816
|
|
|
4787
4817
|
//
|
|
@@ -5341,7 +5371,7 @@ const ON_NETWORK_STATS = 'onNetworkStats';
|
|
|
5341
5371
|
const ON_DISCONNECTED = 'onDisconnected';
|
|
5342
5372
|
class CanceledCallError extends Error {}
|
|
5343
5373
|
|
|
5344
|
-
const MAX_REGISTER_TRIES =
|
|
5374
|
+
const MAX_REGISTER_TRIES = 5;
|
|
5345
5375
|
|
|
5346
5376
|
|
|
5347
5377
|
|
|
@@ -5395,6 +5425,7 @@ class WebRTCClient extends Emitter {
|
|
|
5395
5425
|
|
|
5396
5426
|
|
|
5397
5427
|
|
|
5428
|
+
|
|
5398
5429
|
|
|
5399
5430
|
// sugar
|
|
5400
5431
|
|
|
@@ -5457,6 +5488,7 @@ class WebRTCClient extends Emitter {
|
|
|
5457
5488
|
this.conferences = {};
|
|
5458
5489
|
this.networkMonitoringInterval = {};
|
|
5459
5490
|
this.sessionNetworkStats = {};
|
|
5491
|
+
this.forceClosed = false;
|
|
5460
5492
|
|
|
5461
5493
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
5462
5494
|
this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
|
|
@@ -5578,6 +5610,8 @@ class WebRTCClient extends Emitter {
|
|
|
5578
5610
|
skipRegister: this.skipRegister,
|
|
5579
5611
|
};
|
|
5580
5612
|
|
|
5613
|
+
this.forceClosed = false;
|
|
5614
|
+
|
|
5581
5615
|
if (this.skipRegister) {
|
|
5582
5616
|
logger.info('sdk webrtc skip register...', logInfo);
|
|
5583
5617
|
return Promise.resolve();
|
|
@@ -5602,7 +5636,15 @@ class WebRTCClient extends Emitter {
|
|
|
5602
5636
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
5603
5637
|
|
|
5604
5638
|
const onRegisterFailed = () => {
|
|
5605
|
-
logger.info('sdk webrtc registering failed', {
|
|
5639
|
+
logger.info('sdk webrtc registering failed', {
|
|
5640
|
+
tries,
|
|
5641
|
+
registerer: !!this.registerer,
|
|
5642
|
+
forceClosed: this.forceClosed,
|
|
5643
|
+
});
|
|
5644
|
+
if (this.forceClosed) {
|
|
5645
|
+
return;
|
|
5646
|
+
}
|
|
5647
|
+
|
|
5606
5648
|
this.connectionPromise = null;
|
|
5607
5649
|
if (this.registerer && this.registerer.waiting) {
|
|
5608
5650
|
this.registerer.waitingToggle(false);
|
|
@@ -5880,8 +5922,9 @@ class WebRTCClient extends Emitter {
|
|
|
5880
5922
|
}
|
|
5881
5923
|
}
|
|
5882
5924
|
|
|
5883
|
-
async close() {
|
|
5884
|
-
logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
5925
|
+
async close(force = false) {
|
|
5926
|
+
logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
|
|
5927
|
+
this.forceClosed = force;
|
|
5885
5928
|
this._cleanupMedia();
|
|
5886
5929
|
this.connectionPromise = null;
|
|
5887
5930
|
|
|
@@ -5900,7 +5943,7 @@ class WebRTCClient extends Emitter {
|
|
|
5900
5943
|
this.userAgent.delegate = null;
|
|
5901
5944
|
this.userAgent.stateChange.removeAllListeners();
|
|
5902
5945
|
|
|
5903
|
-
await this._disconnectTransport();
|
|
5946
|
+
await this._disconnectTransport(force);
|
|
5904
5947
|
|
|
5905
5948
|
this._cleanupRegister();
|
|
5906
5949
|
|
|
@@ -7336,7 +7379,15 @@ class WebRTCClient extends Emitter {
|
|
|
7336
7379
|
return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
|
|
7337
7380
|
}
|
|
7338
7381
|
|
|
7339
|
-
async _disconnectTransport() {
|
|
7382
|
+
async _disconnectTransport(force = false) {
|
|
7383
|
+
if (force) {
|
|
7384
|
+
// Bypass sip.js state machine that prevent to close WS with the state `Connecting`
|
|
7385
|
+
this.userAgent.transport.disconnectResolve = () => {};
|
|
7386
|
+
// eslint-disable-next-line
|
|
7387
|
+
this.userAgent.transport._ws.close(1000);
|
|
7388
|
+
return;
|
|
7389
|
+
}
|
|
7390
|
+
|
|
7340
7391
|
// Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
|
|
7341
7392
|
if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
|
|
7342
7393
|
try {
|
|
@@ -4588,6 +4588,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4588
4588
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4589
4589
|
});
|
|
4590
4590
|
|
|
4591
|
+
//
|
|
4592
|
+
|
|
4593
|
+
|
|
4594
|
+
|
|
4595
|
+
|
|
4596
|
+
|
|
4597
|
+
class MeetingStatus {
|
|
4598
|
+
|
|
4599
|
+
|
|
4600
|
+
|
|
4601
|
+
|
|
4602
|
+
constructor({
|
|
4603
|
+
full,
|
|
4604
|
+
} = {}) {
|
|
4605
|
+
this.full = full;
|
|
4606
|
+
|
|
4607
|
+
// Useful to compare instead of instanceof with minified code
|
|
4608
|
+
this.type = 'MeetingStatus';
|
|
4609
|
+
}
|
|
4610
|
+
|
|
4611
|
+
static parse(plain ) {
|
|
4612
|
+
return new MeetingStatus({
|
|
4613
|
+
full: plain.full,
|
|
4614
|
+
});
|
|
4615
|
+
}
|
|
4616
|
+
|
|
4617
|
+
}
|
|
4618
|
+
|
|
4591
4619
|
/* */
|
|
4592
4620
|
|
|
4593
4621
|
|
|
@@ -4782,6 +4810,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4782
4810
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
4783
4811
|
ApiRequester.successResponseParser),
|
|
4784
4812
|
|
|
4813
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
4814
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
4785
4815
|
});
|
|
4786
4816
|
|
|
4787
4817
|
//
|
|
@@ -5341,7 +5371,7 @@ const ON_NETWORK_STATS = 'onNetworkStats';
|
|
|
5341
5371
|
const ON_DISCONNECTED = 'onDisconnected';
|
|
5342
5372
|
class CanceledCallError extends Error {}
|
|
5343
5373
|
|
|
5344
|
-
const MAX_REGISTER_TRIES =
|
|
5374
|
+
const MAX_REGISTER_TRIES = 5;
|
|
5345
5375
|
|
|
5346
5376
|
|
|
5347
5377
|
|
|
@@ -5395,6 +5425,7 @@ class WebRTCClient extends Emitter {
|
|
|
5395
5425
|
|
|
5396
5426
|
|
|
5397
5427
|
|
|
5428
|
+
|
|
5398
5429
|
|
|
5399
5430
|
// sugar
|
|
5400
5431
|
|
|
@@ -5457,6 +5488,7 @@ class WebRTCClient extends Emitter {
|
|
|
5457
5488
|
this.conferences = {};
|
|
5458
5489
|
this.networkMonitoringInterval = {};
|
|
5459
5490
|
this.sessionNetworkStats = {};
|
|
5491
|
+
this.forceClosed = false;
|
|
5460
5492
|
|
|
5461
5493
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
5462
5494
|
this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
|
|
@@ -5578,6 +5610,8 @@ class WebRTCClient extends Emitter {
|
|
|
5578
5610
|
skipRegister: this.skipRegister,
|
|
5579
5611
|
};
|
|
5580
5612
|
|
|
5613
|
+
this.forceClosed = false;
|
|
5614
|
+
|
|
5581
5615
|
if (this.skipRegister) {
|
|
5582
5616
|
logger.info('sdk webrtc skip register...', logInfo);
|
|
5583
5617
|
return Promise.resolve();
|
|
@@ -5602,7 +5636,15 @@ class WebRTCClient extends Emitter {
|
|
|
5602
5636
|
const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
|
|
5603
5637
|
|
|
5604
5638
|
const onRegisterFailed = () => {
|
|
5605
|
-
logger.info('sdk webrtc registering failed', {
|
|
5639
|
+
logger.info('sdk webrtc registering failed', {
|
|
5640
|
+
tries,
|
|
5641
|
+
registerer: !!this.registerer,
|
|
5642
|
+
forceClosed: this.forceClosed,
|
|
5643
|
+
});
|
|
5644
|
+
if (this.forceClosed) {
|
|
5645
|
+
return;
|
|
5646
|
+
}
|
|
5647
|
+
|
|
5606
5648
|
this.connectionPromise = null;
|
|
5607
5649
|
if (this.registerer && this.registerer.waiting) {
|
|
5608
5650
|
this.registerer.waitingToggle(false);
|
|
@@ -5880,8 +5922,9 @@ class WebRTCClient extends Emitter {
|
|
|
5880
5922
|
}
|
|
5881
5923
|
}
|
|
5882
5924
|
|
|
5883
|
-
async close() {
|
|
5884
|
-
logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
|
|
5925
|
+
async close(force = false) {
|
|
5926
|
+
logger.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
|
|
5927
|
+
this.forceClosed = force;
|
|
5885
5928
|
this._cleanupMedia();
|
|
5886
5929
|
this.connectionPromise = null;
|
|
5887
5930
|
|
|
@@ -5900,7 +5943,7 @@ class WebRTCClient extends Emitter {
|
|
|
5900
5943
|
this.userAgent.delegate = null;
|
|
5901
5944
|
this.userAgent.stateChange.removeAllListeners();
|
|
5902
5945
|
|
|
5903
|
-
await this._disconnectTransport();
|
|
5946
|
+
await this._disconnectTransport(force);
|
|
5904
5947
|
|
|
5905
5948
|
this._cleanupRegister();
|
|
5906
5949
|
|
|
@@ -7336,7 +7379,15 @@ class WebRTCClient extends Emitter {
|
|
|
7336
7379
|
return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
|
|
7337
7380
|
}
|
|
7338
7381
|
|
|
7339
|
-
async _disconnectTransport() {
|
|
7382
|
+
async _disconnectTransport(force = false) {
|
|
7383
|
+
if (force) {
|
|
7384
|
+
// Bypass sip.js state machine that prevent to close WS with the state `Connecting`
|
|
7385
|
+
this.userAgent.transport.disconnectResolve = () => {};
|
|
7386
|
+
// eslint-disable-next-line
|
|
7387
|
+
this.userAgent.transport._ws.close(1000);
|
|
7388
|
+
return;
|
|
7389
|
+
}
|
|
7390
|
+
|
|
7340
7391
|
// Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
|
|
7341
7392
|
if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
|
|
7342
7393
|
try {
|
|
@@ -4022,6 +4022,34 @@ var chatdMethods = (client , baseUrl ) => ({
|
|
|
4022
4022
|
client.get(`${baseUrl}/users/me/rooms/messages`, options),
|
|
4023
4023
|
});
|
|
4024
4024
|
|
|
4025
|
+
//
|
|
4026
|
+
|
|
4027
|
+
|
|
4028
|
+
|
|
4029
|
+
|
|
4030
|
+
|
|
4031
|
+
class MeetingStatus {
|
|
4032
|
+
|
|
4033
|
+
|
|
4034
|
+
|
|
4035
|
+
|
|
4036
|
+
constructor({
|
|
4037
|
+
full,
|
|
4038
|
+
} = {}) {
|
|
4039
|
+
this.full = full;
|
|
4040
|
+
|
|
4041
|
+
// Useful to compare instead of instanceof with minified code
|
|
4042
|
+
this.type = 'MeetingStatus';
|
|
4043
|
+
}
|
|
4044
|
+
|
|
4045
|
+
static parse(plain ) {
|
|
4046
|
+
return new MeetingStatus({
|
|
4047
|
+
full: plain.full,
|
|
4048
|
+
});
|
|
4049
|
+
}
|
|
4050
|
+
|
|
4051
|
+
}
|
|
4052
|
+
|
|
4025
4053
|
/* */
|
|
4026
4054
|
|
|
4027
4055
|
|
|
@@ -4216,6 +4244,8 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4216
4244
|
client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
|
|
4217
4245
|
ApiRequester.successResponseParser),
|
|
4218
4246
|
|
|
4247
|
+
guestGetMeetingStatus: (meetingUuid ) =>
|
|
4248
|
+
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
|
|
4219
4249
|
});
|
|
4220
4250
|
|
|
4221
4251
|
//
|
|
@@ -370,13 +370,21 @@ class CallSession {
|
|
|
370
370
|
|
|
371
371
|
// Retro-compatibility: `answered` was a boolean before. We can reproduce the behaviour with a getter/setter
|
|
372
372
|
set answered(value ) {
|
|
373
|
-
this.answerTime = value ? new Date() : null;
|
|
373
|
+
this.answerTime = value ? this.answerTime || new Date() : null;
|
|
374
374
|
}
|
|
375
375
|
|
|
376
376
|
get answered() {
|
|
377
377
|
return !!this.answerTime;
|
|
378
378
|
}
|
|
379
379
|
|
|
380
|
+
toJSON() {
|
|
381
|
+
const jsonObj = { ...this };
|
|
382
|
+
// $FlowFixMe
|
|
383
|
+
jsonObj.answered = this.answered;
|
|
384
|
+
|
|
385
|
+
return jsonObj;
|
|
386
|
+
}
|
|
387
|
+
|
|
380
388
|
static parseCall(call ) {
|
|
381
389
|
return new CallSession({
|
|
382
390
|
callId: call.id,
|