@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
@@ -4842,6 +4842,34 @@ var chatdMethods = (client , baseUrl ) => ({
4842
4842
  client.get(`${baseUrl}/users/me/rooms/messages`, options),
4843
4843
  });
4844
4844
 
4845
+ //
4846
+
4847
+
4848
+
4849
+
4850
+
4851
+ class MeetingStatus {
4852
+
4853
+
4854
+
4855
+
4856
+ constructor({
4857
+ full,
4858
+ } = {}) {
4859
+ this.full = full;
4860
+
4861
+ // Useful to compare instead of instanceof with minified code
4862
+ this.type = 'MeetingStatus';
4863
+ }
4864
+
4865
+ static parse(plain ) {
4866
+ return new MeetingStatus({
4867
+ full: plain.full,
4868
+ });
4869
+ }
4870
+
4871
+ }
4872
+
4845
4873
  /* */
4846
4874
 
4847
4875
 
@@ -5036,6 +5064,8 @@ var calldMethods = (client , baseUrl ) => ({
5036
5064
  client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
5037
5065
  ApiRequester.successResponseParser),
5038
5066
 
5067
+ guestGetMeetingStatus: (meetingUuid ) =>
5068
+ client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
5039
5069
  });
5040
5070
 
5041
5071
  //
@@ -6415,6 +6445,7 @@ class WebRTCClient extends Emitter {
6415
6445
 
6416
6446
 
6417
6447
 
6448
+
6418
6449
 
6419
6450
  // sugar
6420
6451
 
@@ -6477,6 +6508,7 @@ class WebRTCClient extends Emitter {
6477
6508
  this.conferences = {};
6478
6509
  this.networkMonitoringInterval = {};
6479
6510
  this.sessionNetworkStats = {};
6511
+ this.forceClosed = false;
6480
6512
 
6481
6513
  this._boundOnHeartbeat = this._onHeartbeat.bind(this);
6482
6514
  this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
@@ -6598,6 +6630,8 @@ class WebRTCClient extends Emitter {
6598
6630
  skipRegister: this.skipRegister,
6599
6631
  };
6600
6632
 
6633
+ this.forceClosed = false;
6634
+
6601
6635
  if (this.skipRegister) {
6602
6636
  logger$9.info('sdk webrtc skip register...', logInfo);
6603
6637
  return Promise.resolve();
@@ -6622,7 +6656,15 @@ class WebRTCClient extends Emitter {
6622
6656
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
6623
6657
 
6624
6658
  const onRegisterFailed = () => {
6625
- logger$9.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6659
+ logger$9.info('sdk webrtc registering failed', {
6660
+ tries,
6661
+ registerer: !!this.registerer,
6662
+ forceClosed: this.forceClosed,
6663
+ });
6664
+ if (this.forceClosed) {
6665
+ return;
6666
+ }
6667
+
6626
6668
  this.connectionPromise = null;
6627
6669
  if (this.registerer && this.registerer.waiting) {
6628
6670
  this.registerer.waitingToggle(false);
@@ -6900,8 +6942,9 @@ class WebRTCClient extends Emitter {
6900
6942
  }
6901
6943
  }
6902
6944
 
6903
- async close() {
6904
- logger$9.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
6945
+ async close(force = false) {
6946
+ logger$9.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
6947
+ this.forceClosed = force;
6905
6948
  this._cleanupMedia();
6906
6949
  this.connectionPromise = null;
6907
6950
 
@@ -6920,7 +6963,7 @@ class WebRTCClient extends Emitter {
6920
6963
  this.userAgent.delegate = null;
6921
6964
  this.userAgent.stateChange.removeAllListeners();
6922
6965
 
6923
- await this._disconnectTransport();
6966
+ await this._disconnectTransport(force);
6924
6967
 
6925
6968
  this._cleanupRegister();
6926
6969
 
@@ -8356,7 +8399,15 @@ class WebRTCClient extends Emitter {
8356
8399
  return UserAgent.makeURI(`sip:${target}@${this.config.host}`);
8357
8400
  }
8358
8401
 
8359
- async _disconnectTransport() {
8402
+ async _disconnectTransport(force = false) {
8403
+ if (force) {
8404
+ // Bypass sip.js state machine that prevent to close WS with the state `Connecting`
8405
+ this.userAgent.transport.disconnectResolve = () => {};
8406
+ // eslint-disable-next-line
8407
+ this.userAgent.transport._ws.close(1000);
8408
+ return;
8409
+ }
8410
+
8360
8411
  // Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
8361
8412
  if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
8362
8413
  try {
@@ -9763,7 +9814,7 @@ class WebRTCPhone extends Emitter {
9763
9814
  return this.client && this.client.isConference(callSession.sipCallId);
9764
9815
  }
9765
9816
 
9766
- async close() {
9817
+ async close(force = false) {
9767
9818
  logger$8.info('WebRTC close');
9768
9819
 
9769
9820
  try {
@@ -9775,7 +9826,7 @@ class WebRTCPhone extends Emitter {
9775
9826
  logger$8.error('WebRTC close, unregister error', e);
9776
9827
  }
9777
9828
 
9778
- this.client.close();
9829
+ this.client.close(force);
9779
9830
  this.unbind();
9780
9831
 
9781
9832
  this.incomingSessions = [];
@@ -4842,6 +4842,34 @@ var chatdMethods = (client , baseUrl ) => ({
4842
4842
  client.get(`${baseUrl}/users/me/rooms/messages`, options),
4843
4843
  });
4844
4844
 
4845
+ //
4846
+
4847
+
4848
+
4849
+
4850
+
4851
+ class MeetingStatus {
4852
+
4853
+
4854
+
4855
+
4856
+ constructor({
4857
+ full,
4858
+ } = {}) {
4859
+ this.full = full;
4860
+
4861
+ // Useful to compare instead of instanceof with minified code
4862
+ this.type = 'MeetingStatus';
4863
+ }
4864
+
4865
+ static parse(plain ) {
4866
+ return new MeetingStatus({
4867
+ full: plain.full,
4868
+ });
4869
+ }
4870
+
4871
+ }
4872
+
4845
4873
  /* */
4846
4874
 
4847
4875
 
@@ -5036,6 +5064,8 @@ var calldMethods = (client , baseUrl ) => ({
5036
5064
  client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
5037
5065
  ApiRequester.successResponseParser),
5038
5066
 
5067
+ guestGetMeetingStatus: (meetingUuid ) =>
5068
+ client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
5039
5069
  });
5040
5070
 
5041
5071
  //
@@ -6415,6 +6445,7 @@ class WebRTCClient extends Emitter {
6415
6445
 
6416
6446
 
6417
6447
 
6448
+
6418
6449
 
6419
6450
  // sugar
6420
6451
 
@@ -6477,6 +6508,7 @@ class WebRTCClient extends Emitter {
6477
6508
  this.conferences = {};
6478
6509
  this.networkMonitoringInterval = {};
6479
6510
  this.sessionNetworkStats = {};
6511
+ this.forceClosed = false;
6480
6512
 
6481
6513
  this._boundOnHeartbeat = this._onHeartbeat.bind(this);
6482
6514
  this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
@@ -6598,6 +6630,8 @@ class WebRTCClient extends Emitter {
6598
6630
  skipRegister: this.skipRegister,
6599
6631
  };
6600
6632
 
6633
+ this.forceClosed = false;
6634
+
6601
6635
  if (this.skipRegister) {
6602
6636
  logger$9.info('sdk webrtc skip register...', logInfo);
6603
6637
  return Promise.resolve();
@@ -6622,7 +6656,15 @@ class WebRTCClient extends Emitter {
6622
6656
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
6623
6657
 
6624
6658
  const onRegisterFailed = () => {
6625
- logger$9.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6659
+ logger$9.info('sdk webrtc registering failed', {
6660
+ tries,
6661
+ registerer: !!this.registerer,
6662
+ forceClosed: this.forceClosed,
6663
+ });
6664
+ if (this.forceClosed) {
6665
+ return;
6666
+ }
6667
+
6626
6668
  this.connectionPromise = null;
6627
6669
  if (this.registerer && this.registerer.waiting) {
6628
6670
  this.registerer.waitingToggle(false);
@@ -6900,8 +6942,9 @@ class WebRTCClient extends Emitter {
6900
6942
  }
6901
6943
  }
6902
6944
 
6903
- async close() {
6904
- logger$9.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
6945
+ async close(force = false) {
6946
+ logger$9.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
6947
+ this.forceClosed = force;
6905
6948
  this._cleanupMedia();
6906
6949
  this.connectionPromise = null;
6907
6950
 
@@ -6920,7 +6963,7 @@ class WebRTCClient extends Emitter {
6920
6963
  this.userAgent.delegate = null;
6921
6964
  this.userAgent.stateChange.removeAllListeners();
6922
6965
 
6923
- await this._disconnectTransport();
6966
+ await this._disconnectTransport(force);
6924
6967
 
6925
6968
  this._cleanupRegister();
6926
6969
 
@@ -8356,7 +8399,15 @@ class WebRTCClient extends Emitter {
8356
8399
  return UserAgent.makeURI(`sip:${target}@${this.config.host}`);
8357
8400
  }
8358
8401
 
8359
- async _disconnectTransport() {
8402
+ async _disconnectTransport(force = false) {
8403
+ if (force) {
8404
+ // Bypass sip.js state machine that prevent to close WS with the state `Connecting`
8405
+ this.userAgent.transport.disconnectResolve = () => {};
8406
+ // eslint-disable-next-line
8407
+ this.userAgent.transport._ws.close(1000);
8408
+ return;
8409
+ }
8410
+
8360
8411
  // Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
8361
8412
  if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
8362
8413
  try {
@@ -9763,7 +9814,7 @@ class WebRTCPhone extends Emitter {
9763
9814
  return this.client && this.client.isConference(callSession.sipCallId);
9764
9815
  }
9765
9816
 
9766
- async close() {
9817
+ async close(force = false) {
9767
9818
  logger$8.info('WebRTC close');
9768
9819
 
9769
9820
  try {
@@ -9775,7 +9826,7 @@ class WebRTCPhone extends Emitter {
9775
9826
  logger$8.error('WebRTC close, unregister error', e);
9776
9827
  }
9777
9828
 
9778
- this.client.close();
9829
+ this.client.close(force);
9779
9830
  this.unbind();
9780
9831
 
9781
9832
  this.incomingSessions = [];
@@ -4016,6 +4016,34 @@ var chatdMethods = (client , baseUrl ) => ({
4016
4016
  client.get(`${baseUrl}/users/me/rooms/messages`, options),
4017
4017
  });
4018
4018
 
4019
+ //
4020
+
4021
+
4022
+
4023
+
4024
+
4025
+ class MeetingStatus {
4026
+
4027
+
4028
+
4029
+
4030
+ constructor({
4031
+ full,
4032
+ } = {}) {
4033
+ this.full = full;
4034
+
4035
+ // Useful to compare instead of instanceof with minified code
4036
+ this.type = 'MeetingStatus';
4037
+ }
4038
+
4039
+ static parse(plain ) {
4040
+ return new MeetingStatus({
4041
+ full: plain.full,
4042
+ });
4043
+ }
4044
+
4045
+ }
4046
+
4019
4047
  /* */
4020
4048
 
4021
4049
 
@@ -4210,6 +4238,8 @@ var calldMethods = (client , baseUrl ) => ({
4210
4238
  client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
4211
4239
  ApiRequester.successResponseParser),
4212
4240
 
4241
+ guestGetMeetingStatus: (meetingUuid ) =>
4242
+ client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
4213
4243
  });
4214
4244
 
4215
4245
  //
@@ -4842,6 +4842,34 @@ var chatdMethods = (client , baseUrl ) => ({
4842
4842
  client.get(`${baseUrl}/users/me/rooms/messages`, options),
4843
4843
  });
4844
4844
 
4845
+ //
4846
+
4847
+
4848
+
4849
+
4850
+
4851
+ class MeetingStatus {
4852
+
4853
+
4854
+
4855
+
4856
+ constructor({
4857
+ full,
4858
+ } = {}) {
4859
+ this.full = full;
4860
+
4861
+ // Useful to compare instead of instanceof with minified code
4862
+ this.type = 'MeetingStatus';
4863
+ }
4864
+
4865
+ static parse(plain ) {
4866
+ return new MeetingStatus({
4867
+ full: plain.full,
4868
+ });
4869
+ }
4870
+
4871
+ }
4872
+
4845
4873
  /* */
4846
4874
 
4847
4875
 
@@ -5036,6 +5064,8 @@ var calldMethods = (client , baseUrl ) => ({
5036
5064
  client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
5037
5065
  ApiRequester.successResponseParser),
5038
5066
 
5067
+ guestGetMeetingStatus: (meetingUuid ) =>
5068
+ client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
5039
5069
  });
5040
5070
 
5041
5071
  //
@@ -6415,6 +6445,7 @@ class WebRTCClient extends Emitter {
6415
6445
 
6416
6446
 
6417
6447
 
6448
+
6418
6449
 
6419
6450
  // sugar
6420
6451
 
@@ -6477,6 +6508,7 @@ class WebRTCClient extends Emitter {
6477
6508
  this.conferences = {};
6478
6509
  this.networkMonitoringInterval = {};
6479
6510
  this.sessionNetworkStats = {};
6511
+ this.forceClosed = false;
6480
6512
 
6481
6513
  this._boundOnHeartbeat = this._onHeartbeat.bind(this);
6482
6514
  this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
@@ -6598,6 +6630,8 @@ class WebRTCClient extends Emitter {
6598
6630
  skipRegister: this.skipRegister,
6599
6631
  };
6600
6632
 
6633
+ this.forceClosed = false;
6634
+
6601
6635
  if (this.skipRegister) {
6602
6636
  logger$9.info('sdk webrtc skip register...', logInfo);
6603
6637
  return Promise.resolve();
@@ -6622,7 +6656,15 @@ class WebRTCClient extends Emitter {
6622
6656
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
6623
6657
 
6624
6658
  const onRegisterFailed = () => {
6625
- logger$9.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6659
+ logger$9.info('sdk webrtc registering failed', {
6660
+ tries,
6661
+ registerer: !!this.registerer,
6662
+ forceClosed: this.forceClosed,
6663
+ });
6664
+ if (this.forceClosed) {
6665
+ return;
6666
+ }
6667
+
6626
6668
  this.connectionPromise = null;
6627
6669
  if (this.registerer && this.registerer.waiting) {
6628
6670
  this.registerer.waitingToggle(false);
@@ -6900,8 +6942,9 @@ class WebRTCClient extends Emitter {
6900
6942
  }
6901
6943
  }
6902
6944
 
6903
- async close() {
6904
- logger$9.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
6945
+ async close(force = false) {
6946
+ logger$9.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
6947
+ this.forceClosed = force;
6905
6948
  this._cleanupMedia();
6906
6949
  this.connectionPromise = null;
6907
6950
 
@@ -6920,7 +6963,7 @@ class WebRTCClient extends Emitter {
6920
6963
  this.userAgent.delegate = null;
6921
6964
  this.userAgent.stateChange.removeAllListeners();
6922
6965
 
6923
- await this._disconnectTransport();
6966
+ await this._disconnectTransport(force);
6924
6967
 
6925
6968
  this._cleanupRegister();
6926
6969
 
@@ -8356,7 +8399,15 @@ class WebRTCClient extends Emitter {
8356
8399
  return UserAgent.makeURI(`sip:${target}@${this.config.host}`);
8357
8400
  }
8358
8401
 
8359
- async _disconnectTransport() {
8402
+ async _disconnectTransport(force = false) {
8403
+ if (force) {
8404
+ // Bypass sip.js state machine that prevent to close WS with the state `Connecting`
8405
+ this.userAgent.transport.disconnectResolve = () => {};
8406
+ // eslint-disable-next-line
8407
+ this.userAgent.transport._ws.close(1000);
8408
+ return;
8409
+ }
8410
+
8360
8411
  // Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
8361
8412
  if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
8362
8413
  try {
@@ -9763,7 +9814,7 @@ class WebRTCPhone extends Emitter {
9763
9814
  return this.client && this.client.isConference(callSession.sipCallId);
9764
9815
  }
9765
9816
 
9766
- async close() {
9817
+ async close(force = false) {
9767
9818
  logger$8.info('WebRTC close');
9768
9819
 
9769
9820
  try {
@@ -9775,7 +9826,7 @@ class WebRTCPhone extends Emitter {
9775
9826
  logger$8.error('WebRTC close, unregister error', e);
9776
9827
  }
9777
9828
 
9778
- this.client.close();
9829
+ this.client.close(force);
9779
9830
  this.unbind();
9780
9831
 
9781
9832
  this.incomingSessions = [];
@@ -4842,6 +4842,34 @@ var chatdMethods = (client , baseUrl ) => ({
4842
4842
  client.get(`${baseUrl}/users/me/rooms/messages`, options),
4843
4843
  });
4844
4844
 
4845
+ //
4846
+
4847
+
4848
+
4849
+
4850
+
4851
+ class MeetingStatus {
4852
+
4853
+
4854
+
4855
+
4856
+ constructor({
4857
+ full,
4858
+ } = {}) {
4859
+ this.full = full;
4860
+
4861
+ // Useful to compare instead of instanceof with minified code
4862
+ this.type = 'MeetingStatus';
4863
+ }
4864
+
4865
+ static parse(plain ) {
4866
+ return new MeetingStatus({
4867
+ full: plain.full,
4868
+ });
4869
+ }
4870
+
4871
+ }
4872
+
4845
4873
  /* */
4846
4874
 
4847
4875
 
@@ -5036,6 +5064,8 @@ var calldMethods = (client , baseUrl ) => ({
5036
5064
  client.put(`${baseUrl}/users/me/calls/${callId}/record/resume`, null, null,
5037
5065
  ApiRequester.successResponseParser),
5038
5066
 
5067
+ guestGetMeetingStatus: (meetingUuid ) =>
5068
+ client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}/status`).then(MeetingStatus.parse),
5039
5069
  });
5040
5070
 
5041
5071
  //
@@ -6679,6 +6709,7 @@ class WebRTCClient extends Emitter {
6679
6709
 
6680
6710
 
6681
6711
 
6712
+
6682
6713
 
6683
6714
  // sugar
6684
6715
 
@@ -6741,6 +6772,7 @@ class WebRTCClient extends Emitter {
6741
6772
  this.conferences = {};
6742
6773
  this.networkMonitoringInterval = {};
6743
6774
  this.sessionNetworkStats = {};
6775
+ this.forceClosed = false;
6744
6776
 
6745
6777
  this._boundOnHeartbeat = this._onHeartbeat.bind(this);
6746
6778
  this.heartbeat = new Heartbeat(config.heartbeatDelay, config.heartbeatTimeout, config.maxHeartbeats);
@@ -6862,6 +6894,8 @@ class WebRTCClient extends Emitter {
6862
6894
  skipRegister: this.skipRegister,
6863
6895
  };
6864
6896
 
6897
+ this.forceClosed = false;
6898
+
6865
6899
  if (this.skipRegister) {
6866
6900
  logger$8.info('sdk webrtc skip register...', logInfo);
6867
6901
  return Promise.resolve();
@@ -6886,7 +6920,15 @@ class WebRTCClient extends Emitter {
6886
6920
  const registerOptions = this._isWeb() ? {} : { extraContactHeaderParams: ['mobility=mobile'] };
6887
6921
 
6888
6922
  const onRegisterFailed = () => {
6889
- logger$8.info('sdk webrtc registering failed', { tries, registerer: !!this.registerer });
6923
+ logger$8.info('sdk webrtc registering failed', {
6924
+ tries,
6925
+ registerer: !!this.registerer,
6926
+ forceClosed: this.forceClosed,
6927
+ });
6928
+ if (this.forceClosed) {
6929
+ return;
6930
+ }
6931
+
6890
6932
  this.connectionPromise = null;
6891
6933
  if (this.registerer && this.registerer.waiting) {
6892
6934
  this.registerer.waitingToggle(false);
@@ -7164,8 +7206,9 @@ class WebRTCClient extends Emitter {
7164
7206
  }
7165
7207
  }
7166
7208
 
7167
- async close() {
7168
- logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent });
7209
+ async close(force = false) {
7210
+ logger$8.info('sdk webrtc closing client', { userAgent: !!this.userAgent, force });
7211
+ this.forceClosed = force;
7169
7212
  this._cleanupMedia();
7170
7213
  this.connectionPromise = null;
7171
7214
 
@@ -7184,7 +7227,7 @@ class WebRTCClient extends Emitter {
7184
7227
  this.userAgent.delegate = null;
7185
7228
  this.userAgent.stateChange.removeAllListeners();
7186
7229
 
7187
- await this._disconnectTransport();
7230
+ await this._disconnectTransport(force);
7188
7231
 
7189
7232
  this._cleanupRegister();
7190
7233
 
@@ -8620,7 +8663,15 @@ class WebRTCClient extends Emitter {
8620
8663
  return UserAgent.makeURI(`sip:${target}@${this.config.host}`);
8621
8664
  }
8622
8665
 
8623
- async _disconnectTransport() {
8666
+ async _disconnectTransport(force = false) {
8667
+ if (force) {
8668
+ // Bypass sip.js state machine that prevent to close WS with the state `Connecting`
8669
+ this.userAgent.transport.disconnectResolve = () => {};
8670
+ // eslint-disable-next-line
8671
+ this.userAgent.transport._ws.close(1000);
8672
+ return;
8673
+ }
8674
+
8624
8675
  // Check if `disconnectPromise` is not present to avoid `Disconnect promise must not be defined` errors.
8625
8676
  if (this.userAgent && this.userAgent.transport && !this.userAgent.transport.disconnectPromise) {
8626
8677
  try {
@@ -10027,7 +10078,7 @@ class WebRTCPhone extends Emitter {
10027
10078
  return this.client && this.client.isConference(callSession.sipCallId);
10028
10079
  }
10029
10080
 
10030
- async close() {
10081
+ async close(force = false) {
10031
10082
  logger$7.info('WebRTC close');
10032
10083
 
10033
10084
  try {
@@ -10039,7 +10090,7 @@ class WebRTCPhone extends Emitter {
10039
10090
  logger$7.error('WebRTC close, unregister error', e);
10040
10091
  }
10041
10092
 
10042
- this.client.close();
10093
+ this.client.close(force);
10043
10094
  this.unbind();
10044
10095
 
10045
10096
  this.incomingSessions = [];