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