@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.
Files changed (70) hide show
  1. package/dist/wazo-sdk.js +2 -2
  2. package/esm/__tests__/api-client.test.js +30 -0
  3. package/esm/__tests__/web-rtc-client.test.js +56 -5
  4. package/esm/api/calld.js +30 -0
  5. package/esm/api-client.js +30 -0
  6. package/esm/checker/Checker.js +56 -5
  7. package/esm/checker/checks/aor.js +30 -0
  8. package/esm/checker/checks/api.js +30 -0
  9. package/esm/checker/checks/index.js +56 -5
  10. package/esm/checker/checks/webrtc-transport.js +56 -5
  11. package/esm/checker/checks/webrtc.js +56 -5
  12. package/esm/domain/AdHocAPIConference.js +30 -0
  13. package/esm/domain/Features.js +30 -0
  14. package/esm/domain/MeetingStatus.js +29 -0
  15. package/esm/domain/Phone/CTIPhone.js +30 -0
  16. package/esm/domain/Phone/WebRTCPhone.js +2 -2
  17. package/esm/index.js +58 -7
  18. package/esm/service/CallApi.js +30 -0
  19. package/esm/service/getApiClient.js +30 -0
  20. package/esm/simple/Auth.js +58 -7
  21. package/esm/simple/Configuration.js +58 -7
  22. package/esm/simple/Directory.js +30 -0
  23. package/esm/simple/Phone.js +58 -7
  24. package/esm/simple/index.js +58 -7
  25. package/esm/simple/room/LocalParticipant.js +58 -7
  26. package/esm/simple/room/Participant.js +58 -7
  27. package/esm/simple/room/RemoteParticipant.js +58 -7
  28. package/esm/simple/room/Room.js +58 -7
  29. package/esm/simple/room/SipRoom.js +58 -7
  30. package/esm/simple/room/Stream.js +58 -7
  31. package/esm/simple/room/__tests__/RemoteParticipant.test.js +58 -7
  32. package/esm/simple/utils.js +58 -7
  33. package/esm/web-rtc-client.js +56 -5
  34. package/lib/__tests__/api-client.test.js +30 -0
  35. package/lib/__tests__/web-rtc-client.test.js +56 -5
  36. package/lib/api/calld.js +30 -0
  37. package/lib/api-client.js +30 -0
  38. package/lib/checker/Checker.js +56 -5
  39. package/lib/checker/checks/aor.js +30 -0
  40. package/lib/checker/checks/api.js +30 -0
  41. package/lib/checker/checks/index.js +56 -5
  42. package/lib/checker/checks/webrtc-transport.js +56 -5
  43. package/lib/checker/checks/webrtc.js +56 -5
  44. package/lib/domain/AdHocAPIConference.js +30 -0
  45. package/lib/domain/Features.js +30 -0
  46. package/lib/domain/MeetingStatus.js +31 -0
  47. package/lib/domain/Phone/CTIPhone.js +30 -0
  48. package/lib/domain/Phone/WebRTCPhone.js +2 -2
  49. package/lib/index.js +58 -7
  50. package/lib/service/CallApi.js +30 -0
  51. package/lib/service/getApiClient.js +30 -0
  52. package/lib/simple/Auth.js +58 -7
  53. package/lib/simple/Configuration.js +58 -7
  54. package/lib/simple/Directory.js +30 -0
  55. package/lib/simple/Phone.js +58 -7
  56. package/lib/simple/index.js +58 -7
  57. package/lib/simple/room/LocalParticipant.js +58 -7
  58. package/lib/simple/room/Participant.js +58 -7
  59. package/lib/simple/room/RemoteParticipant.js +58 -7
  60. package/lib/simple/room/Room.js +58 -7
  61. package/lib/simple/room/SipRoom.js +58 -7
  62. package/lib/simple/room/Stream.js +58 -7
  63. package/lib/simple/room/__tests__/RemoteParticipant.test.js +58 -7
  64. package/lib/simple/utils.js +58 -7
  65. package/lib/web-rtc-client.js +56 -5
  66. package/package.json +1 -1
  67. package/src/api/calld.js +3 -0
  68. package/src/domain/MeetingStatus.js +27 -0
  69. package/src/domain/Phone/WebRTCPhone.js +2 -2
  70. package/src/web-rtc-client.js +26 -5
@@ -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
  //
@@ -4852,6 +4852,34 @@ var chatdMethods = (client , baseUrl ) => ({
4852
4852
  client.get(`${baseUrl}/users/me/rooms/messages`, options),
4853
4853
  });
4854
4854
 
4855
+ //
4856
+
4857
+
4858
+
4859
+
4860
+
4861
+ class MeetingStatus {
4862
+
4863
+
4864
+
4865
+
4866
+ constructor({
4867
+ full,
4868
+ } = {}) {
4869
+ this.full = full;
4870
+
4871
+ // Useful to compare instead of instanceof with minified code
4872
+ this.type = 'MeetingStatus';
4873
+ }
4874
+
4875
+ static parse(plain ) {
4876
+ return new MeetingStatus({
4877
+ full: plain.full,
4878
+ });
4879
+ }
4880
+
4881
+ }
4882
+
4855
4883
  /* */
4856
4884
 
4857
4885
 
@@ -5046,6 +5074,8 @@ var calldMethods = (client , baseUrl ) => ({
5046
5074
  client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
5047
5075
  ApiRequester.successResponseParser),
5048
5076
 
5077
+ guestGetMeetingStatus: (meetingUuid ) =>
5078
+ client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
5049
5079
  });
5050
5080
 
5051
5081
  //
@@ -6425,6 +6455,7 @@ class WebRTCClient extends Emitter {
6425
6455
 
6426
6456
 
6427
6457
 
6458
+
6428
6459
 
6429
6460
  // sugar
6430
6461
 
@@ -6487,6 +6518,7 @@ class WebRTCClient extends Emitter {
6487
6518
  this.conferences = {};
6488
6519
  this.networkMonitoringInterval = {};
6489
6520
  this.sessionNetworkStats = {};
6521
+ this.forceClosed = false;
6490
6522
 
6491
6523
  this._boundOnHeartbeat = this._onHeartbeat.bind(this);
6492
6524
  this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
@@ -6608,6 +6640,8 @@ class WebRTCClient extends Emitter {
6608
6640
  skipRegister: this.skipRegister,
6609
6641
  };
6610
6642
 
6643
+ this.forceClosed = false;
6644
+
6611
6645
  if (this.skipRegister) {
6612
6646
  logger$9.info('sdk webrtc skip register...', logInfo);
6613
6647
  return Promise.resolve();
@@ -6632,7 +6666,15 @@ class WebRTCClient extends Emitter {
6632
6666
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
6633
6667
 
6634
6668
  const onRegisterFailed = () => {
6635
- logger$9.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6669
+ logger$9.info('sdk webrtc registering failed', {
6670
+ tries,
6671
+ registerer: !!this.registerer,
6672
+ forceClosed: this.forceClosed,
6673
+ });
6674
+ if (this.forceClosed) {
6675
+ return;
6676
+ }
6677
+
6636
6678
  this.connectionPromise = null;
6637
6679
  if (this.registerer && this.registerer.waiting) {
6638
6680
  this.registerer.waitingToggle(false);
@@ -6910,8 +6952,9 @@ class WebRTCClient extends Emitter {
6910
6952
  }
6911
6953
  }
6912
6954
 
6913
- async close() {
6914
- logger$9.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
6955
+ async close(force = false) {
6956
+ logger$9.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
6957
+ this.forceClosed = force;
6915
6958
  this._cleanupMedia();
6916
6959
  this.connectionPromise = null;
6917
6960
 
@@ -6930,7 +6973,7 @@ class WebRTCClient extends Emitter {
6930
6973
  this.userAgent.delegate = null;
6931
6974
  this.userAgent.stateChange.removeAllListeners();
6932
6975
 
6933
- await this._disconnectTransport();
6976
+ await this._disconnectTransport(force);
6934
6977
 
6935
6978
  this._cleanupRegister();
6936
6979
 
@@ -8366,7 +8409,15 @@ class WebRTCClient extends Emitter {
8366
8409
  return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
8367
8410
  }
8368
8411
 
8369
- async _disconnectTransport() {
8412
+ async _disconnectTransport(force = false) {
8413
+ if (force) {
8414
+ // Bypass sip.js state machine that prevent to close WS with the state `Connecting`
8415
+ this.userAgent.transport.disconnectResolve = () => {};
8416
+ // eslint-disable-next-line
8417
+ this.userAgent.transport._ws.close(1000);
8418
+ return;
8419
+ }
8420
+
8370
8421
  // Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
8371
8422
  if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
8372
8423
  try {
@@ -9773,7 +9824,7 @@ class WebRTCPhone extends Emitter {
9773
9824
  return this.client && this.client.isConference(callSession.sipCallId);
9774
9825
  }
9775
9826
 
9776
- async close() {
9827
+ async close(force = false) {
9777
9828
  logger$8.info('WebRTC close');
9778
9829
 
9779
9830
  try {
@@ -9785,7 +9836,7 @@ class WebRTCPhone extends Emitter {
9785
9836
  logger$8.error('WebRTC close, unregister error', e);
9786
9837
  }
9787
9838
 
9788
- this.client.close();
9839
+ this.client.close(force);
9789
9840
  this.unbind();
9790
9841
 
9791
9842
  this.incomingSessions = [];
@@ -4852,6 +4852,34 @@ var chatdMethods = (client , baseUrl ) => ({
4852
4852
  client.get(`${baseUrl}/users/me/rooms/messages`, options),
4853
4853
  });
4854
4854
 
4855
+ //
4856
+
4857
+
4858
+
4859
+
4860
+
4861
+ class MeetingStatus {
4862
+
4863
+
4864
+
4865
+
4866
+ constructor({
4867
+ full,
4868
+ } = {}) {
4869
+ this.full = full;
4870
+
4871
+ // Useful to compare instead of instanceof with minified code
4872
+ this.type = 'MeetingStatus';
4873
+ }
4874
+
4875
+ static parse(plain ) {
4876
+ return new MeetingStatus({
4877
+ full: plain.full,
4878
+ });
4879
+ }
4880
+
4881
+ }
4882
+
4855
4883
  /* */
4856
4884
 
4857
4885
 
@@ -5046,6 +5074,8 @@ var calldMethods = (client , baseUrl ) => ({
5046
5074
  client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
5047
5075
  ApiRequester.successResponseParser),
5048
5076
 
5077
+ guestGetMeetingStatus: (meetingUuid ) =>
5078
+ client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
5049
5079
  });
5050
5080
 
5051
5081
  //
@@ -6689,6 +6719,7 @@ class WebRTCClient extends Emitter {
6689
6719
 
6690
6720
 
6691
6721
 
6722
+
6692
6723
 
6693
6724
  // sugar
6694
6725
 
@@ -6751,6 +6782,7 @@ class WebRTCClient extends Emitter {
6751
6782
  this.conferences = {};
6752
6783
  this.networkMonitoringInterval = {};
6753
6784
  this.sessionNetworkStats = {};
6785
+ this.forceClosed = false;
6754
6786
 
6755
6787
  this._boundOnHeartbeat = this._onHeartbeat.bind(this);
6756
6788
  this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
@@ -6872,6 +6904,8 @@ class WebRTCClient extends Emitter {
6872
6904
  skipRegister: this.skipRegister,
6873
6905
  };
6874
6906
 
6907
+ this.forceClosed = false;
6908
+
6875
6909
  if (this.skipRegister) {
6876
6910
  logger$8.info('sdk webrtc skip register...', logInfo);
6877
6911
  return Promise.resolve();
@@ -6896,7 +6930,15 @@ class WebRTCClient extends Emitter {
6896
6930
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
6897
6931
 
6898
6932
  const onRegisterFailed = () => {
6899
- logger$8.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6933
+ logger$8.info('sdk webrtc registering failed', {
6934
+ tries,
6935
+ registerer: !!this.registerer,
6936
+ forceClosed: this.forceClosed,
6937
+ });
6938
+ if (this.forceClosed) {
6939
+ return;
6940
+ }
6941
+
6900
6942
  this.connectionPromise = null;
6901
6943
  if (this.registerer && this.registerer.waiting) {
6902
6944
  this.registerer.waitingToggle(false);
@@ -7174,8 +7216,9 @@ class WebRTCClient extends Emitter {
7174
7216
  }
7175
7217
  }
7176
7218
 
7177
- async close() {
7178
- logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
7219
+ async close(force = false) {
7220
+ logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
7221
+ this.forceClosed = force;
7179
7222
  this._cleanupMedia();
7180
7223
  this.connectionPromise = null;
7181
7224
 
@@ -7194,7 +7237,7 @@ class WebRTCClient extends Emitter {
7194
7237
  this.userAgent.delegate = null;
7195
7238
  this.userAgent.stateChange.removeAllListeners();
7196
7239
 
7197
- await this._disconnectTransport();
7240
+ await this._disconnectTransport(force);
7198
7241
 
7199
7242
  this._cleanupRegister();
7200
7243
 
@@ -8630,7 +8673,15 @@ class WebRTCClient extends Emitter {
8630
8673
  return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
8631
8674
  }
8632
8675
 
8633
- async _disconnectTransport() {
8676
+ async _disconnectTransport(force = false) {
8677
+ if (force) {
8678
+ // Bypass sip.js state machine that prevent to close WS with the state `Connecting`
8679
+ this.userAgent.transport.disconnectResolve = () => {};
8680
+ // eslint-disable-next-line
8681
+ this.userAgent.transport._ws.close(1000);
8682
+ return;
8683
+ }
8684
+
8634
8685
  // Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
8635
8686
  if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
8636
8687
  try {
@@ -10037,7 +10088,7 @@ class WebRTCPhone extends Emitter {
10037
10088
  return this.client && this.client.isConference(callSession.sipCallId);
10038
10089
  }
10039
10090
 
10040
- async close() {
10091
+ async close(force = false) {
10041
10092
  logger$7.info('WebRTC close');
10042
10093
 
10043
10094
  try {
@@ -10049,7 +10100,7 @@ class WebRTCPhone extends Emitter {
10049
10100
  logger$7.error('WebRTC close, unregister error', e);
10050
10101
  }
10051
10102
 
10052
- this.client.close();
10103
+ this.client.close(force);
10053
10104
  this.unbind();
10054
10105
 
10055
10106
  this.incomingSessions = [];
@@ -4852,6 +4852,34 @@ var chatdMethods = (client , baseUrl ) => ({
4852
4852
  client.get(`${baseUrl}/users/me/rooms/messages`, options),
4853
4853
  });
4854
4854
 
4855
+ //
4856
+
4857
+
4858
+
4859
+
4860
+
4861
+ class MeetingStatus {
4862
+
4863
+
4864
+
4865
+
4866
+ constructor({
4867
+ full,
4868
+ } = {}) {
4869
+ this.full = full;
4870
+
4871
+ // Useful to compare instead of instanceof with minified code
4872
+ this.type = 'MeetingStatus';
4873
+ }
4874
+
4875
+ static parse(plain ) {
4876
+ return new MeetingStatus({
4877
+ full: plain.full,
4878
+ });
4879
+ }
4880
+
4881
+ }
4882
+
4855
4883
  /* */
4856
4884
 
4857
4885
 
@@ -5046,6 +5074,8 @@ var calldMethods = (client , baseUrl ) => ({
5046
5074
  client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
5047
5075
  ApiRequester.successResponseParser),
5048
5076
 
5077
+ guestGetMeetingStatus: (meetingUuid ) =>
5078
+ client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
5049
5079
  });
5050
5080
 
5051
5081
  //
@@ -6689,6 +6719,7 @@ class WebRTCClient extends Emitter {
6689
6719
 
6690
6720
 
6691
6721
 
6722
+
6692
6723
 
6693
6724
  // sugar
6694
6725
 
@@ -6751,6 +6782,7 @@ class WebRTCClient extends Emitter {
6751
6782
  this.conferences = {};
6752
6783
  this.networkMonitoringInterval = {};
6753
6784
  this.sessionNetworkStats = {};
6785
+ this.forceClosed = false;
6754
6786
 
6755
6787
  this._boundOnHeartbeat = this._onHeartbeat.bind(this);
6756
6788
  this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
@@ -6872,6 +6904,8 @@ class WebRTCClient extends Emitter {
6872
6904
  skipRegister: this.skipRegister,
6873
6905
  };
6874
6906
 
6907
+ this.forceClosed = false;
6908
+
6875
6909
  if (this.skipRegister) {
6876
6910
  logger$8.info('sdk webrtc skip register...', logInfo);
6877
6911
  return Promise.resolve();
@@ -6896,7 +6930,15 @@ class WebRTCClient extends Emitter {
6896
6930
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
6897
6931
 
6898
6932
  const onRegisterFailed = () => {
6899
- logger$8.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6933
+ logger$8.info('sdk webrtc registering failed', {
6934
+ tries,
6935
+ registerer: !!this.registerer,
6936
+ forceClosed: this.forceClosed,
6937
+ });
6938
+ if (this.forceClosed) {
6939
+ return;
6940
+ }
6941
+
6900
6942
  this.connectionPromise = null;
6901
6943
  if (this.registerer && this.registerer.waiting) {
6902
6944
  this.registerer.waitingToggle(false);
@@ -7174,8 +7216,9 @@ class WebRTCClient extends Emitter {
7174
7216
  }
7175
7217
  }
7176
7218
 
7177
- async close() {
7178
- logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
7219
+ async close(force = false) {
7220
+ logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
7221
+ this.forceClosed = force;
7179
7222
  this._cleanupMedia();
7180
7223
  this.connectionPromise = null;
7181
7224
 
@@ -7194,7 +7237,7 @@ class WebRTCClient extends Emitter {
7194
7237
  this.userAgent.delegate = null;
7195
7238
  this.userAgent.stateChange.removeAllListeners();
7196
7239
 
7197
- await this._disconnectTransport();
7240
+ await this._disconnectTransport(force);
7198
7241
 
7199
7242
  this._cleanupRegister();
7200
7243
 
@@ -8630,7 +8673,15 @@ class WebRTCClient extends Emitter {
8630
8673
  return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
8631
8674
  }
8632
8675
 
8633
- async _disconnectTransport() {
8676
+ async _disconnectTransport(force = false) {
8677
+ if (force) {
8678
+ // Bypass sip.js state machine that prevent to close WS with the state `Connecting`
8679
+ this.userAgent.transport.disconnectResolve = () => {};
8680
+ // eslint-disable-next-line
8681
+ this.userAgent.transport._ws.close(1000);
8682
+ return;
8683
+ }
8684
+
8634
8685
  // Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
8635
8686
  if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
8636
8687
  try {
@@ -10037,7 +10088,7 @@ class WebRTCPhone extends Emitter {
10037
10088
  return this.client && this.client.isConference(callSession.sipCallId);
10038
10089
  }
10039
10090
 
10040
- async close() {
10091
+ async close(force = false) {
10041
10092
  logger$7.info('WebRTC close');
10042
10093
 
10043
10094
  try {
@@ -10049,7 +10100,7 @@ class WebRTCPhone extends Emitter {
10049
10100
  logger$7.error('WebRTC close, unregister error', e);
10050
10101
  }
10051
10102
 
10052
- this.client.close();
10103
+ this.client.close(force);
10053
10104
  this.unbind();
10054
10105
 
10055
10106
  this.incomingSessions = [];
@@ -4852,6 +4852,34 @@ var chatdMethods = (client , baseUrl ) => ({
4852
4852
  client.get(`${baseUrl}/users/me/rooms/messages`, options),
4853
4853
  });
4854
4854
 
4855
+ //
4856
+
4857
+
4858
+
4859
+
4860
+
4861
+ class MeetingStatus {
4862
+
4863
+
4864
+
4865
+
4866
+ constructor({
4867
+ full,
4868
+ } = {}) {
4869
+ this.full = full;
4870
+
4871
+ // Useful to compare instead of instanceof with minified code
4872
+ this.type = 'MeetingStatus';
4873
+ }
4874
+
4875
+ static parse(plain ) {
4876
+ return new MeetingStatus({
4877
+ full: plain.full,
4878
+ });
4879
+ }
4880
+
4881
+ }
4882
+
4855
4883
  /* */
4856
4884
 
4857
4885
 
@@ -5046,6 +5074,8 @@ var calldMethods = (client , baseUrl ) => ({
5046
5074
  client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
5047
5075
  ApiRequester.successResponseParser),
5048
5076
 
5077
+ guestGetMeetingStatus: (meetingUuid ) =>
5078
+ client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
5049
5079
  });
5050
5080
 
5051
5081
  //
@@ -6689,6 +6719,7 @@ class WebRTCClient extends Emitter {
6689
6719
 
6690
6720
 
6691
6721
 
6722
+
6692
6723
 
6693
6724
  // sugar
6694
6725
 
@@ -6751,6 +6782,7 @@ class WebRTCClient extends Emitter {
6751
6782
  this.conferences = {};
6752
6783
  this.networkMonitoringInterval = {};
6753
6784
  this.sessionNetworkStats = {};
6785
+ this.forceClosed = false;
6754
6786
 
6755
6787
  this._boundOnHeartbeat = this._onHeartbeat.bind(this);
6756
6788
  this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
@@ -6872,6 +6904,8 @@ class WebRTCClient extends Emitter {
6872
6904
  skipRegister: this.skipRegister,
6873
6905
  };
6874
6906
 
6907
+ this.forceClosed = false;
6908
+
6875
6909
  if (this.skipRegister) {
6876
6910
  logger$8.info('sdk webrtc skip register...', logInfo);
6877
6911
  return Promise.resolve();
@@ -6896,7 +6930,15 @@ class WebRTCClient extends Emitter {
6896
6930
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
6897
6931
 
6898
6932
  const onRegisterFailed = () => {
6899
- logger$8.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6933
+ logger$8.info('sdk webrtc registering failed', {
6934
+ tries,
6935
+ registerer: !!this.registerer,
6936
+ forceClosed: this.forceClosed,
6937
+ });
6938
+ if (this.forceClosed) {
6939
+ return;
6940
+ }
6941
+
6900
6942
  this.connectionPromise = null;
6901
6943
  if (this.registerer && this.registerer.waiting) {
6902
6944
  this.registerer.waitingToggle(false);
@@ -7174,8 +7216,9 @@ class WebRTCClient extends Emitter {
7174
7216
  }
7175
7217
  }
7176
7218
 
7177
- async close() {
7178
- logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
7219
+ async close(force = false) {
7220
+ logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
7221
+ this.forceClosed = force;
7179
7222
  this._cleanupMedia();
7180
7223
  this.connectionPromise = null;
7181
7224
 
@@ -7194,7 +7237,7 @@ class WebRTCClient extends Emitter {
7194
7237
  this.userAgent.delegate = null;
7195
7238
  this.userAgent.stateChange.removeAllListeners();
7196
7239
 
7197
- await this._disconnectTransport();
7240
+ await this._disconnectTransport(force);
7198
7241
 
7199
7242
  this._cleanupRegister();
7200
7243
 
@@ -8630,7 +8673,15 @@ class WebRTCClient extends Emitter {
8630
8673
  return userAgent.UserAgent.makeURI(`sip:${target}@${this.config.host}`);
8631
8674
  }
8632
8675
 
8633
- async _disconnectTransport() {
8676
+ async _disconnectTransport(force = false) {
8677
+ if (force) {
8678
+ // Bypass sip.js state machine that prevent to close WS with the state `Connecting`
8679
+ this.userAgent.transport.disconnectResolve = () => {};
8680
+ // eslint-disable-next-line
8681
+ this.userAgent.transport._ws.close(1000);
8682
+ return;
8683
+ }
8684
+
8634
8685
  // Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
8635
8686
  if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
8636
8687
  try {
@@ -10037,7 +10088,7 @@ class WebRTCPhone extends Emitter {
10037
10088
  return this.client && this.client.isConference(callSession.sipCallId);
10038
10089
  }
10039
10090
 
10040
- async close() {
10091
+ async close(force = false) {
10041
10092
  logger$7.info('WebRTC close');
10042
10093
 
10043
10094
  try {
@@ -10049,7 +10100,7 @@ class WebRTCPhone extends Emitter {
10049
10100
  logger$7.error('WebRTC close, unregister error', e);
10050
10101
  }
10051
10102
 
10052
- this.client.close();
10103
+ this.client.close(force);
10053
10104
  this.unbind();
10054
10105
 
10055
10106
  this.incomingSessions = [];