@wazo/sdk 0.37.41 → 0.38.0

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 (112) hide show
  1. package/dist/wazo-sdk.js +3 -3
  2. package/esm/__tests__/api-client.test.js +45 -22
  3. package/esm/__tests__/web-rtc-client.test.js +49 -24
  4. package/esm/api/agentd.js +12 -7
  5. package/esm/api/amid.js +12 -7
  6. package/esm/api/application.js +12 -7
  7. package/esm/api/auth.js +16 -8
  8. package/esm/api/call-logd.js +12 -7
  9. package/esm/api/calld.js +12 -7
  10. package/esm/api/chatd.js +12 -7
  11. package/esm/api/confd.js +12 -7
  12. package/esm/api/ctid-ng.js +14 -7
  13. package/esm/api/dird.js +12 -7
  14. package/esm/api/webhookd.js +12 -7
  15. package/esm/api-client.js +45 -22
  16. package/esm/checker/Checker.js +50 -25
  17. package/esm/checker/checks/aor.js +45 -22
  18. package/esm/checker/checks/api.js +45 -22
  19. package/esm/checker/checks/index.js +50 -25
  20. package/esm/checker/checks/wazo-websocket.js +13 -8
  21. package/esm/checker/checks/webrtc-transport.js +49 -24
  22. package/esm/checker/checks/webrtc.js +49 -24
  23. package/esm/domain/AdHocAPIConference.js +54 -23
  24. package/esm/domain/Features.js +54 -23
  25. package/esm/domain/Phone/CTIPhone.js +54 -23
  26. package/esm/domain/Phone/WebRTCPhone.js +14 -7
  27. package/esm/index.js +233 -25
  28. package/esm/lib/WazoSessionDescriptionHandler.js +12 -7
  29. package/esm/service/CallApi.js +54 -23
  30. package/esm/service/IssueReporter.js +12 -7
  31. package/esm/service/__tests__/IssueReporter.test.js +18 -7
  32. package/esm/service/getApiClient.js +63 -24
  33. package/esm/simple/Auth.js +233 -25
  34. package/esm/simple/Configuration.js +233 -25
  35. package/esm/simple/Directory.js +54 -23
  36. package/esm/simple/Phone.js +233 -25
  37. package/esm/simple/Softphone.js +148 -0
  38. package/esm/simple/Websocket.js +13 -8
  39. package/esm/simple/index.js +233 -25
  40. package/esm/simple/room/LocalParticipant.js +233 -25
  41. package/esm/simple/room/Participant.js +233 -25
  42. package/esm/simple/room/RemoteParticipant.js +233 -25
  43. package/esm/simple/room/Room.js +233 -25
  44. package/esm/simple/room/SipRoom.js +233 -25
  45. package/esm/simple/room/Stream.js +233 -25
  46. package/esm/simple/room/__tests__/RemoteParticipant.test.js +233 -25
  47. package/esm/simple/utils.js +233 -25
  48. package/esm/utils/__tests__/api-requester.test.js +12 -7
  49. package/esm/utils/api-requester.js +12 -7
  50. package/esm/web-rtc-client.js +49 -24
  51. package/esm/websocket-client.js +13 -8
  52. package/lib/__tests__/api-client.test.js +45 -22
  53. package/lib/__tests__/web-rtc-client.test.js +49 -24
  54. package/lib/api/agentd.js +12 -7
  55. package/lib/api/amid.js +12 -7
  56. package/lib/api/application.js +12 -7
  57. package/lib/api/auth.js +16 -8
  58. package/lib/api/call-logd.js +12 -7
  59. package/lib/api/calld.js +12 -7
  60. package/lib/api/chatd.js +12 -7
  61. package/lib/api/confd.js +12 -7
  62. package/lib/api/ctid-ng.js +14 -7
  63. package/lib/api/dird.js +12 -7
  64. package/lib/api/webhookd.js +12 -7
  65. package/lib/api-client.js +45 -22
  66. package/lib/checker/Checker.js +50 -25
  67. package/lib/checker/checks/aor.js +45 -22
  68. package/lib/checker/checks/api.js +45 -22
  69. package/lib/checker/checks/index.js +50 -25
  70. package/lib/checker/checks/wazo-websocket.js +13 -8
  71. package/lib/checker/checks/webrtc-transport.js +49 -24
  72. package/lib/checker/checks/webrtc.js +49 -24
  73. package/lib/domain/AdHocAPIConference.js +54 -23
  74. package/lib/domain/Features.js +54 -23
  75. package/lib/domain/Phone/CTIPhone.js +54 -23
  76. package/lib/domain/Phone/WebRTCPhone.js +14 -7
  77. package/lib/index.js +233 -25
  78. package/lib/lib/WazoSessionDescriptionHandler.js +12 -7
  79. package/lib/service/CallApi.js +54 -23
  80. package/lib/service/IssueReporter.js +12 -7
  81. package/lib/service/__tests__/IssueReporter.test.js +18 -7
  82. package/lib/service/getApiClient.js +64 -23
  83. package/lib/simple/Auth.js +233 -25
  84. package/lib/simple/Configuration.js +233 -25
  85. package/lib/simple/Directory.js +54 -23
  86. package/lib/simple/Phone.js +233 -25
  87. package/lib/simple/Softphone.js +150 -0
  88. package/lib/simple/Websocket.js +13 -8
  89. package/lib/simple/index.js +233 -25
  90. package/lib/simple/room/LocalParticipant.js +233 -25
  91. package/lib/simple/room/Participant.js +233 -25
  92. package/lib/simple/room/RemoteParticipant.js +233 -25
  93. package/lib/simple/room/Room.js +233 -25
  94. package/lib/simple/room/SipRoom.js +233 -25
  95. package/lib/simple/room/Stream.js +233 -25
  96. package/lib/simple/room/__tests__/RemoteParticipant.test.js +233 -25
  97. package/lib/simple/utils.js +233 -25
  98. package/lib/utils/__tests__/api-requester.test.js +12 -7
  99. package/lib/utils/api-requester.js +12 -7
  100. package/lib/web-rtc-client.js +49 -24
  101. package/lib/websocket-client.js +13 -8
  102. package/package.json +1 -1
  103. package/src/api/auth.js +4 -1
  104. package/src/api-client.js +26 -13
  105. package/src/service/IssueReporter.js +12 -7
  106. package/src/service/__tests__/IssueReporter.test.js +6 -0
  107. package/src/service/getApiClient.js +19 -1
  108. package/src/simple/Auth.js +21 -0
  109. package/src/simple/Softphone.js +148 -0
  110. package/src/simple/index.js +2 -0
  111. package/src/web-rtc-client.js +4 -2
  112. package/src/websocket-client.js +1 -1
@@ -716,13 +716,9 @@ class IssueReporter {
716
716
 
717
717
  setTimeout(() => {
718
718
  if (isArray) {
719
- payload = payload.map(message => {
720
- message._retry = retry + 1;
721
- return message;
722
- });
723
- } else {
724
- // $FlowFixMe
725
- payload._retry = retry + 1;
719
+ payload = payload.map(message => this._writeRetryCount(message, retry + 1));
720
+ } else if (payload && typeof payload === 'object') {
721
+ payload = this._writeRetryCount(payload, retry + 1);
726
722
  }
727
723
 
728
724
  this._sendDebugToGrafana(payload, retry + 1);
@@ -730,6 +726,15 @@ class IssueReporter {
730
726
  });
731
727
  }
732
728
 
729
+ _writeRetryCount(message , count ) {
730
+ if (message && typeof message === 'object') {
731
+ // $FlowFixMe
732
+ message._retry = count;
733
+ }
734
+
735
+ return message;
736
+ }
737
+
733
738
  _isLevelAbove(level1 , level2 ) {
734
739
  const index1 = LOG_LEVELS.indexOf(level1);
735
740
  const index2 = LOG_LEVELS.indexOf(level2);
@@ -2301,9 +2306,12 @@ var authMethods = (client , baseUrl ) => ({
2301
2306
  expiration: expiration || DETAULT_EXPIRATION,
2302
2307
  refresh_token: refreshToken,
2303
2308
  client_id: client.clientId,
2304
- tenant_id: tenantId,
2305
2309
  };
2306
2310
 
2311
+ if (tenantId) {
2312
+ body.tenant_id = tenantId;
2313
+ }
2314
+
2307
2315
  const headers = {
2308
2316
  'Content-Type': 'application/json',
2309
2317
  ...(isMobile ? { 'Wazo-Session-Type': 'mobile' } : {}),
@@ -5425,6 +5433,7 @@ class ApiClient {
5425
5433
 
5426
5434
 
5427
5435
 
5436
+
5428
5437
 
5429
5438
 
5430
5439
 
@@ -5477,23 +5486,31 @@ class ApiClient {
5477
5486
  return null;
5478
5487
  }
5479
5488
 
5480
- const session = await this.auth.refreshToken(
5481
- this.refreshToken,
5482
- this.refreshBackend,
5483
- this.refreshExpiration,
5484
- this.isMobile,
5485
- this.refreshTenantId,
5486
- );
5489
+ try {
5490
+ const session = await this.auth.refreshToken(
5491
+ this.refreshToken,
5492
+ this.refreshBackend,
5493
+ this.refreshExpiration,
5494
+ this.isMobile,
5495
+ this.refreshTenantId,
5496
+ );
5487
5497
 
5488
- logger$a.info('token refreshed', { token: session.token });
5498
+ logger$a.info('token refreshed', { token: session.token });
5489
5499
 
5490
- if (this.onRefreshToken) {
5491
- this.onRefreshToken(session.token, session);
5492
- }
5500
+ if (this.onRefreshToken) {
5501
+ this.onRefreshToken(session.token, session);
5502
+ }
5493
5503
 
5494
- this.setToken(session.token);
5504
+ this.setToken(session.token);
5505
+
5506
+ return session.token;
5507
+ } catch (error) {
5508
+ logger$a.error('token refresh, error', error);
5495
5509
 
5496
- return session.token;
5510
+ if (this.onRefreshTokenError) {
5511
+ this.onRefreshTokenError(error);
5512
+ }
5513
+ }
5497
5514
  }
5498
5515
 
5499
5516
  setToken(token ) {
@@ -5516,6 +5533,10 @@ class ApiClient {
5516
5533
  this.onRefreshToken = onRefreshToken;
5517
5534
  }
5518
5535
 
5536
+ setOnRefreshTokenError(callback ) {
5537
+ this.onRefreshTokenError = callback;
5538
+ }
5539
+
5519
5540
  setRefreshExpiration(refreshExpiration ) {
5520
5541
  this.refreshExpiration = refreshExpiration;
5521
5542
  }
@@ -5551,7 +5572,9 @@ global.wazoClients = global.wazoClients || {};
5551
5572
  global.wazoClientId = global.wazoClientId || {};
5552
5573
  global.wazoClientToken = global.wazoClientToken || {};
5553
5574
  global.wazoRefreshToken = global.wazoRefreshToken || {};
5575
+ global.wazoRefreshTenantId = global.wazoRefreshTenantId || {};
5554
5576
  global.wazoOnRefreshToken = global.wazoOnRefreshToken || {};
5577
+ global.wazoOnRefreshTokenError = global.wazoOnRefreshTokenError || {};
5555
5578
  global.wazoRefreshExpiration = global.wazoRefreshExpiration || {};
5556
5579
  global.wazoRefreshBackend = global.wazoRefreshBackend || {};
5557
5580
  global.wazoIsMobile = global.wazoIsMobile || {};
@@ -5573,10 +5596,18 @@ const setRefreshToken = (newRefreshToken , forServer = null) =>
5573
5596
  global.wazoRefreshToken[forServer] = newRefreshToken;
5574
5597
  };
5575
5598
 
5599
+ const setRefreshTenantId = (refreshTenantId , forServer = null) => {
5600
+ global.wazoRefreshTenantId[forServer] = refreshTenantId;
5601
+ };
5602
+
5576
5603
  const setOnRefreshToken = (onRefreshToken , forServer = null) => {
5577
5604
  global.wazoOnRefreshToken[forServer] = onRefreshToken;
5578
5605
  };
5579
5606
 
5607
+ const setOnRefreshTokenError = (callback , forServer = null) => {
5608
+ global.wazoOnRefreshTokenError[forServer] = callback;
5609
+ };
5610
+
5580
5611
  const setRefreshExpiration = (refreshExpiration , forServer = null) => {
5581
5612
  global.wazoRefreshExpiration[forServer] = refreshExpiration;
5582
5613
  };
@@ -5595,12 +5626,20 @@ const fillClient = (apiClient ) => {
5595
5626
 
5596
5627
  apiClient.setRefreshToken(global.wazoRefreshToken[server] || global.wazoRefreshToken[null] || apiClient.refreshToken);
5597
5628
 
5629
+ apiClient.setRefreshTenantId(
5630
+ global.wazoRefreshTenantId[server] || global.wazoRefreshTenantId[null] || apiClient.refreshTenantId,
5631
+ );
5632
+
5598
5633
  apiClient.setFetchOptions(global.wazoFetchOptions[server] || global.wazoFetchOptions[null] || apiClient.fetchOptions);
5599
5634
 
5600
5635
  apiClient.setOnRefreshToken(
5601
5636
  global.wazoOnRefreshToken[server] || global.wazoOnRefreshToken[null] || apiClient.onRefreshToken,
5602
5637
  );
5603
5638
 
5639
+ apiClient.setOnRefreshTokenError(
5640
+ global.wazoOnRefreshTokenError[server] || global.wazoOnRefreshTokenError[null] || apiClient.onRefreshTokenError,
5641
+ );
5642
+
5604
5643
  apiClient.setRefreshExpiration(
5605
5644
  global.wazoRefreshExpiration[server] || global.wazoRefreshExpiration[null] || apiClient.refreshExpiration,
5606
5645
  );
@@ -5614,7 +5653,7 @@ const fillClient = (apiClient ) => {
5614
5653
  return apiClient;
5615
5654
  };
5616
5655
 
5617
- var getApiClient = (forServer ) => {
5656
+ var getApiClient = (forServer = null) => {
5618
5657
  const server = forServer || global.wazoCurrentServer || '';
5619
5658
  if (server in global.wazoClients) {
5620
5659
  return fillClient(global.wazoClients[server]);
@@ -5641,6 +5680,7 @@ class Auth {
5641
5680
 
5642
5681
 
5643
5682
 
5683
+
5644
5684
 
5645
5685
 
5646
5686
 
@@ -5678,6 +5718,14 @@ class Auth {
5678
5718
  this.onRefreshTokenCallback(token, session);
5679
5719
  }
5680
5720
  });
5721
+
5722
+ setOnRefreshTokenError(error => {
5723
+ logger$9.error('on refresh token error', error);
5724
+
5725
+ if (this.onRefreshTokenCallbackError) {
5726
+ this.onRefreshTokenCallbackError(error);
5727
+ }
5728
+ });
5681
5729
  }
5682
5730
 
5683
5731
  setFetchOptions(options ) {
@@ -5766,6 +5814,10 @@ class Auth {
5766
5814
  this.onRefreshTokenCallback = callback;
5767
5815
  }
5768
5816
 
5817
+ setOnRefreshTokenError(callback ) {
5818
+ this.onRefreshTokenCallbackError = callback;
5819
+ }
5820
+
5769
5821
  checkAuthorizations(session , authorizationName ) {
5770
5822
  if (!authorizationName) {
5771
5823
  return;
@@ -5798,6 +5850,12 @@ class Auth {
5798
5850
  setRefreshToken(refreshToken);
5799
5851
  }
5800
5852
 
5853
+ setRefreshTenantId(refreshTenantId ) {
5854
+ setRefreshTenantId(refreshTenantId);
5855
+
5856
+ getApiClient().setRefreshTenantId(refreshTenantId);
5857
+ }
5858
+
5801
5859
  forceRefreshToken() {
5802
5860
  getApiClient().forceRefreshToken();
5803
5861
  }
@@ -7432,8 +7490,10 @@ class WebRTCClient extends Emitter {
7432
7490
  conference: isConference,
7433
7491
  };
7434
7492
 
7435
- // Avoid sdh to created a new stream
7436
- session.sessionDescriptionHandler.localMediaStreamConstraints = options.constraints;
7493
+ // Avoid sdh to create a new stream
7494
+ if (session.sessionDescriptionHandler) {
7495
+ session.sessionDescriptionHandler.localMediaStreamConstraints = options.constraints;
7496
+ }
7437
7497
 
7438
7498
  // Send re-INVITE
7439
7499
  return session.invite(options);
@@ -11444,7 +11504,7 @@ class WebSocketClient extends Emitter {
11444
11504
  this.close();
11445
11505
  }
11446
11506
  const url = `wss://${this.host || ''}/api/websocketd/?token=${this.token || ''}&version=${this.version}`;
11447
- logger$5.log('Wazo WS url computed to reconnect', { url });
11507
+ logger$5.info('Wazo WS url computed to reconnect', { url });
11448
11508
 
11449
11509
  return url;
11450
11510
  }
@@ -12788,6 +12848,153 @@ class Checker {
12788
12848
  }
12789
12849
  }
12790
12850
 
12851
+ //
12852
+ /* eslint-disable no-unused-vars */
12853
+ /* global window, document */
12854
+ const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
12855
+ const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
12856
+ const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
12857
+ const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
12858
+ const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
12859
+
12860
+ class Softphone {
12861
+ url = 'https://softphone.wazo.io';
12862
+ width = 500;
12863
+ height = 600;
12864
+ displayed = false;
12865
+ iframe = null;
12866
+
12867
+ onLinkEnabled(link ) {}
12868
+
12869
+ onCallMade(call ) {}
12870
+ onCallIncoming(call ) {}
12871
+ onCallEnded(call , card , direction , fromExtension ) {}
12872
+ onAuthenticated(session ) {}
12873
+
12874
+ init(url , width , height ) {
12875
+ if (url) {
12876
+ this.url = url;
12877
+ }
12878
+ if (width) {
12879
+ this.width = width;
12880
+ }
12881
+ if (height) {
12882
+ this.height = height;
12883
+ }
12884
+
12885
+ window.addEventListener('message', this._onMessage.bind(this), false);
12886
+
12887
+ this._createIframe();
12888
+ }
12889
+
12890
+ parseLinks() {
12891
+ const links = this._getLinks();
12892
+
12893
+ links.forEach(link => {
12894
+ link.setAttribute('data-wazo-parsed', true);
12895
+ link.addEventListener('click', this._onLinkClick.bind(this));
12896
+ this.onLinkEnabled(link);
12897
+ });
12898
+ }
12899
+
12900
+ makeCall(number ) {
12901
+ this.displaySoftphone();
12902
+
12903
+ if (this.iframe) {
12904
+ this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
12905
+ }
12906
+ }
12907
+
12908
+ toggleSoftphoneDisplay() {
12909
+ if (this.displayed) {
12910
+ this.hideSoftphone();
12911
+ } else {
12912
+ this.displaySoftphone();
12913
+ }
12914
+
12915
+ this.displayed = !this.displayed;
12916
+ }
12917
+
12918
+ displaySoftphone() {
12919
+ if (!this.iframe) {
12920
+ this._createIframe();
12921
+ }
12922
+
12923
+ if (this.iframe) {
12924
+ this.iframe.style.display = 'block';
12925
+ }
12926
+ }
12927
+
12928
+ hideSoftphone() {
12929
+ if (this.iframe) {
12930
+ this.iframe.style.display = 'none';
12931
+ }
12932
+ }
12933
+
12934
+ _createIframe() {
12935
+ this.iframe = document.createElement('iframe');
12936
+ // $FlowFixMe
12937
+ this.iframe.width = this.width;
12938
+ // $FlowFixMe
12939
+ this.iframe.height = this.height;
12940
+ // $FlowFixMe
12941
+ this.iframe.allow = 'camera *; microphone *; autoplay *; display-capture *';
12942
+ this.iframe.style.position = 'absolute';
12943
+ this.iframe.style.left = '0';
12944
+ this.iframe.style.bottom = '0';
12945
+ this.iframe.style.border = '1px solid #aaa';
12946
+ this.iframe.src = this.url;
12947
+ this.iframe.style.display = 'none';
12948
+ this.iframe.id = 'wazo-softphone';
12949
+
12950
+ // $FlowFixMe
12951
+ document.body.appendChild(this.iframe);
12952
+ }
12953
+
12954
+ _getLinks() {
12955
+ return [].slice.call(document.querySelectorAll('a:not([data-wazo-parsed])'), 0)
12956
+ .filter(link => link.href.indexOf('tel:') === 0 || link.href.indexOf('callto:') === 0);
12957
+ }
12958
+
12959
+ _onLinkClick(e ) {
12960
+ e.preventDefault();
12961
+ const number = e.target.href.split(':')[1];
12962
+
12963
+ this.makeCall(number);
12964
+ }
12965
+
12966
+ _onAuthenticated() {
12967
+ this.parseLinks();
12968
+ }
12969
+
12970
+ _onMessage(event ) {
12971
+ if (!event.data) {
12972
+ return;
12973
+ }
12974
+
12975
+ switch (event.data.type) {
12976
+ case SDK_ON_CALL_MADE:
12977
+ this.onCallMade(event.data.callSession);
12978
+ break;
12979
+ case SDK_CALL_ENDED: {
12980
+ const { callSession, content, direction, userExtension } = event.data;
12981
+ this.onCallEnded(callSession, content, direction, userExtension);
12982
+ break;
12983
+ }
12984
+ case SDK_CALL_INCOMING:
12985
+ this.onCallIncoming(event.data.callSession);
12986
+ break;
12987
+ case SDK_AUTHENTICATED:
12988
+ // $FlowFixMe
12989
+ this._onAuthenticated(event.data.session);
12990
+ this.onAuthenticated(event.data.session);
12991
+ break;
12992
+ }
12993
+ }
12994
+ }
12995
+
12996
+ var Softphone$1 = new Softphone();
12997
+
12791
12998
  /* global window */
12792
12999
 
12793
13000
  const Wazo = {
@@ -12808,6 +13015,7 @@ const Wazo = {
12808
13015
  loggerFor: IssueReporter$1.loggerFor.bind(IssueReporter$1),
12809
13016
  Features: Features$1,
12810
13017
  Checker,
13018
+ Softphone: Softphone$1,
12811
13019
 
12812
13020
  // Domain
12813
13021
  domain: {