@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
@@ -1909,13 +1909,9 @@ class IssueReporter {
1909
1909
 
1910
1910
  setTimeout(() => {
1911
1911
  if (isArray) {
1912
- payload = payload.map(message => {
1913
- message._retry = retry + 1;
1914
- return message;
1915
- });
1916
- } else {
1917
- // $FlowFixMe
1918
- payload._retry = retry + 1;
1912
+ payload = payload.map(message => this._writeRetryCount(message, retry + 1));
1913
+ } else if (payload && typeof payload === 'object') {
1914
+ payload = this._writeRetryCount(payload, retry + 1);
1919
1915
  }
1920
1916
 
1921
1917
  this._sendDebugToGrafana(payload, retry + 1);
@@ -1923,6 +1919,15 @@ class IssueReporter {
1923
1919
  });
1924
1920
  }
1925
1921
 
1922
+ _writeRetryCount(message , count ) {
1923
+ if (message && typeof message === 'object') {
1924
+ // $FlowFixMe
1925
+ message._retry = count;
1926
+ }
1927
+
1928
+ return message;
1929
+ }
1930
+
1926
1931
  _isLevelAbove(level1 , level2 ) {
1927
1932
  const index1 = LOG_LEVELS.indexOf(level1);
1928
1933
  const index2 = LOG_LEVELS.indexOf(level2);
@@ -2265,9 +2270,12 @@ var authMethods = (client , baseUrl ) => ({
2265
2270
  expiration: expiration || DETAULT_EXPIRATION,
2266
2271
  refresh_token: refreshToken,
2267
2272
  client_id: client.clientId,
2268
- tenant_id: tenantId,
2269
2273
  };
2270
2274
 
2275
+ if (tenantId) {
2276
+ body.tenant_id = tenantId;
2277
+ }
2278
+
2271
2279
  const headers = {
2272
2280
  'Content-Type': 'application/json',
2273
2281
  ...(isMobile ? { 'Wazo-Session-Type': 'mobile' } : {}),
@@ -5415,6 +5423,7 @@ class ApiClient {
5415
5423
 
5416
5424
 
5417
5425
 
5426
+
5418
5427
 
5419
5428
 
5420
5429
 
@@ -5467,23 +5476,31 @@ class ApiClient {
5467
5476
  return null;
5468
5477
  }
5469
5478
 
5470
- const session = await this.auth.refreshToken(
5471
- this.refreshToken,
5472
- this.refreshBackend,
5473
- this.refreshExpiration,
5474
- this.isMobile,
5475
- this.refreshTenantId,
5476
- );
5479
+ try {
5480
+ const session = await this.auth.refreshToken(
5481
+ this.refreshToken,
5482
+ this.refreshBackend,
5483
+ this.refreshExpiration,
5484
+ this.isMobile,
5485
+ this.refreshTenantId,
5486
+ );
5477
5487
 
5478
- logger$a.info('token refreshed', { token: session.token });
5488
+ logger$a.info('token refreshed', { token: session.token });
5479
5489
 
5480
- if (this.onRefreshToken) {
5481
- this.onRefreshToken(session.token, session);
5482
- }
5490
+ if (this.onRefreshToken) {
5491
+ this.onRefreshToken(session.token, session);
5492
+ }
5483
5493
 
5484
- this.setToken(session.token);
5494
+ this.setToken(session.token);
5495
+
5496
+ return session.token;
5497
+ } catch (error) {
5498
+ logger$a.error('token refresh, error', error);
5485
5499
 
5486
- return session.token;
5500
+ if (this.onRefreshTokenError) {
5501
+ this.onRefreshTokenError(error);
5502
+ }
5503
+ }
5487
5504
  }
5488
5505
 
5489
5506
  setToken(token ) {
@@ -5506,6 +5523,10 @@ class ApiClient {
5506
5523
  this.onRefreshToken = onRefreshToken;
5507
5524
  }
5508
5525
 
5526
+ setOnRefreshTokenError(callback ) {
5527
+ this.onRefreshTokenError = callback;
5528
+ }
5529
+
5509
5530
  setRefreshExpiration(refreshExpiration ) {
5510
5531
  this.refreshExpiration = refreshExpiration;
5511
5532
  }
@@ -5541,7 +5562,9 @@ global.wazoClients = global.wazoClients || {};
5541
5562
  global.wazoClientId = global.wazoClientId || {};
5542
5563
  global.wazoClientToken = global.wazoClientToken || {};
5543
5564
  global.wazoRefreshToken = global.wazoRefreshToken || {};
5565
+ global.wazoRefreshTenantId = global.wazoRefreshTenantId || {};
5544
5566
  global.wazoOnRefreshToken = global.wazoOnRefreshToken || {};
5567
+ global.wazoOnRefreshTokenError = global.wazoOnRefreshTokenError || {};
5545
5568
  global.wazoRefreshExpiration = global.wazoRefreshExpiration || {};
5546
5569
  global.wazoRefreshBackend = global.wazoRefreshBackend || {};
5547
5570
  global.wazoIsMobile = global.wazoIsMobile || {};
@@ -5563,10 +5586,18 @@ const setRefreshToken = (newRefreshToken , forServer = null) =>
5563
5586
  global.wazoRefreshToken[forServer] = newRefreshToken;
5564
5587
  };
5565
5588
 
5589
+ const setRefreshTenantId = (refreshTenantId , forServer = null) => {
5590
+ global.wazoRefreshTenantId[forServer] = refreshTenantId;
5591
+ };
5592
+
5566
5593
  const setOnRefreshToken = (onRefreshToken , forServer = null) => {
5567
5594
  global.wazoOnRefreshToken[forServer] = onRefreshToken;
5568
5595
  };
5569
5596
 
5597
+ const setOnRefreshTokenError = (callback , forServer = null) => {
5598
+ global.wazoOnRefreshTokenError[forServer] = callback;
5599
+ };
5600
+
5570
5601
  const setRefreshExpiration = (refreshExpiration , forServer = null) => {
5571
5602
  global.wazoRefreshExpiration[forServer] = refreshExpiration;
5572
5603
  };
@@ -5585,12 +5616,20 @@ const fillClient = (apiClient ) => {
5585
5616
 
5586
5617
  apiClient.setRefreshToken(global.wazoRefreshToken[server] || global.wazoRefreshToken[null] || apiClient.refreshToken);
5587
5618
 
5619
+ apiClient.setRefreshTenantId(
5620
+ global.wazoRefreshTenantId[server] || global.wazoRefreshTenantId[null] || apiClient.refreshTenantId,
5621
+ );
5622
+
5588
5623
  apiClient.setFetchOptions(global.wazoFetchOptions[server] || global.wazoFetchOptions[null] || apiClient.fetchOptions);
5589
5624
 
5590
5625
  apiClient.setOnRefreshToken(
5591
5626
  global.wazoOnRefreshToken[server] || global.wazoOnRefreshToken[null] || apiClient.onRefreshToken,
5592
5627
  );
5593
5628
 
5629
+ apiClient.setOnRefreshTokenError(
5630
+ global.wazoOnRefreshTokenError[server] || global.wazoOnRefreshTokenError[null] || apiClient.onRefreshTokenError,
5631
+ );
5632
+
5594
5633
  apiClient.setRefreshExpiration(
5595
5634
  global.wazoRefreshExpiration[server] || global.wazoRefreshExpiration[null] || apiClient.refreshExpiration,
5596
5635
  );
@@ -5604,7 +5643,7 @@ const fillClient = (apiClient ) => {
5604
5643
  return apiClient;
5605
5644
  };
5606
5645
 
5607
- var getApiClient = (forServer ) => {
5646
+ var getApiClient = (forServer = null) => {
5608
5647
  const server = forServer || global.wazoCurrentServer || '';
5609
5648
  if (server in global.wazoClients) {
5610
5649
  return fillClient(global.wazoClients[server]);
@@ -7140,8 +7179,10 @@ class WebRTCClient extends Emitter {
7140
7179
  conference: isConference,
7141
7180
  };
7142
7181
 
7143
- // Avoid sdh to created a new stream
7144
- session.sessionDescriptionHandler.localMediaStreamConstraints = options.constraints;
7182
+ // Avoid sdh to create a new stream
7183
+ if (session.sessionDescriptionHandler) {
7184
+ session.sessionDescriptionHandler.localMediaStreamConstraints = options.constraints;
7185
+ }
7145
7186
 
7146
7187
  // Send re-INVITE
7147
7188
  return session.invite(options);
@@ -11152,7 +11193,7 @@ class WebSocketClient extends Emitter {
11152
11193
  this.close();
11153
11194
  }
11154
11195
  const url = `wss://${this.host || ''}/api/websocketd/?token=${this.token || ''}&version=${this.version}`;
11155
- logger$6.log('Wazo WS url computed to reconnect', { url });
11196
+ logger$6.info('Wazo WS url computed to reconnect', { url });
11156
11197
 
11157
11198
  return url;
11158
11199
  }
@@ -13627,6 +13668,153 @@ class Checker {
13627
13668
  }
13628
13669
  }
13629
13670
 
13671
+ //
13672
+ /* eslint-disable no-unused-vars */
13673
+ /* global window, document */
13674
+ const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
13675
+ const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
13676
+ const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
13677
+ const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
13678
+ const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
13679
+
13680
+ class Softphone {
13681
+ url = 'https://softphone.wazo.io';
13682
+ width = 500;
13683
+ height = 600;
13684
+ displayed = false;
13685
+ iframe = null;
13686
+
13687
+ onLinkEnabled(link ) {}
13688
+
13689
+ onCallMade(call ) {}
13690
+ onCallIncoming(call ) {}
13691
+ onCallEnded(call , card , direction , fromExtension ) {}
13692
+ onAuthenticated(session ) {}
13693
+
13694
+ init(url , width , height ) {
13695
+ if (url) {
13696
+ this.url = url;
13697
+ }
13698
+ if (width) {
13699
+ this.width = width;
13700
+ }
13701
+ if (height) {
13702
+ this.height = height;
13703
+ }
13704
+
13705
+ window.addEventListener('message', this._onMessage.bind(this), false);
13706
+
13707
+ this._createIframe();
13708
+ }
13709
+
13710
+ parseLinks() {
13711
+ const links = this._getLinks();
13712
+
13713
+ links.forEach(link => {
13714
+ link.setAttribute('data-wazo-parsed', true);
13715
+ link.addEventListener('click', this._onLinkClick.bind(this));
13716
+ this.onLinkEnabled(link);
13717
+ });
13718
+ }
13719
+
13720
+ makeCall(number ) {
13721
+ this.displaySoftphone();
13722
+
13723
+ if (this.iframe) {
13724
+ this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
13725
+ }
13726
+ }
13727
+
13728
+ toggleSoftphoneDisplay() {
13729
+ if (this.displayed) {
13730
+ this.hideSoftphone();
13731
+ } else {
13732
+ this.displaySoftphone();
13733
+ }
13734
+
13735
+ this.displayed = !this.displayed;
13736
+ }
13737
+
13738
+ displaySoftphone() {
13739
+ if (!this.iframe) {
13740
+ this._createIframe();
13741
+ }
13742
+
13743
+ if (this.iframe) {
13744
+ this.iframe.style.display = 'block';
13745
+ }
13746
+ }
13747
+
13748
+ hideSoftphone() {
13749
+ if (this.iframe) {
13750
+ this.iframe.style.display = 'none';
13751
+ }
13752
+ }
13753
+
13754
+ _createIframe() {
13755
+ this.iframe = document.createElement('iframe');
13756
+ // $FlowFixMe
13757
+ this.iframe.width = this.width;
13758
+ // $FlowFixMe
13759
+ this.iframe.height = this.height;
13760
+ // $FlowFixMe
13761
+ this.iframe.allow = 'camera *; microphone *; autoplay *; display-capture *';
13762
+ this.iframe.style.position = 'absolute';
13763
+ this.iframe.style.left = '0';
13764
+ this.iframe.style.bottom = '0';
13765
+ this.iframe.style.border = '1px solid #aaa';
13766
+ this.iframe.src = this.url;
13767
+ this.iframe.style.display = 'none';
13768
+ this.iframe.id = 'wazo-softphone';
13769
+
13770
+ // $FlowFixMe
13771
+ document.body.appendChild(this.iframe);
13772
+ }
13773
+
13774
+ _getLinks() {
13775
+ return [].slice.call(document.querySelectorAll('a:not([data-wazo-parsed])'), 0)
13776
+ .filter(link => link.href.indexOf('tel:') === 0 || link.href.indexOf('callto:') === 0);
13777
+ }
13778
+
13779
+ _onLinkClick(e ) {
13780
+ e.preventDefault();
13781
+ const number = e.target.href.split(':')[1];
13782
+
13783
+ this.makeCall(number);
13784
+ }
13785
+
13786
+ _onAuthenticated() {
13787
+ this.parseLinks();
13788
+ }
13789
+
13790
+ _onMessage(event ) {
13791
+ if (!event.data) {
13792
+ return;
13793
+ }
13794
+
13795
+ switch (event.data.type) {
13796
+ case SDK_ON_CALL_MADE:
13797
+ this.onCallMade(event.data.callSession);
13798
+ break;
13799
+ case SDK_CALL_ENDED: {
13800
+ const { callSession, content, direction, userExtension } = event.data;
13801
+ this.onCallEnded(callSession, content, direction, userExtension);
13802
+ break;
13803
+ }
13804
+ case SDK_CALL_INCOMING:
13805
+ this.onCallIncoming(event.data.callSession);
13806
+ break;
13807
+ case SDK_AUTHENTICATED:
13808
+ // $FlowFixMe
13809
+ this._onAuthenticated(event.data.session);
13810
+ this.onAuthenticated(event.data.session);
13811
+ break;
13812
+ }
13813
+ }
13814
+ }
13815
+
13816
+ var Softphone$1 = new Softphone();
13817
+
13630
13818
  /* global window */
13631
13819
 
13632
13820
  const Wazo = {
@@ -13647,6 +13835,7 @@ const Wazo = {
13647
13835
  loggerFor: IssueReporter$1.loggerFor.bind(IssueReporter$1),
13648
13836
  Features: Features$1,
13649
13837
  Checker,
13838
+ Softphone: Softphone$1,
13650
13839
 
13651
13840
  // Domain
13652
13841
  domain: {
@@ -13718,6 +13907,7 @@ class Auth {
13718
13907
 
13719
13908
 
13720
13909
 
13910
+
13721
13911
 
13722
13912
 
13723
13913
 
@@ -13755,6 +13945,14 @@ class Auth {
13755
13945
  this.onRefreshTokenCallback(token, session);
13756
13946
  }
13757
13947
  });
13948
+
13949
+ setOnRefreshTokenError(error => {
13950
+ logger.error('on refresh token error', error);
13951
+
13952
+ if (this.onRefreshTokenCallbackError) {
13953
+ this.onRefreshTokenCallbackError(error);
13954
+ }
13955
+ });
13758
13956
  }
13759
13957
 
13760
13958
  setFetchOptions(options ) {
@@ -13843,6 +14041,10 @@ class Auth {
13843
14041
  this.onRefreshTokenCallback = callback;
13844
14042
  }
13845
14043
 
14044
+ setOnRefreshTokenError(callback ) {
14045
+ this.onRefreshTokenCallbackError = callback;
14046
+ }
14047
+
13846
14048
  checkAuthorizations(session , authorizationName ) {
13847
14049
  if (!authorizationName) {
13848
14050
  return;
@@ -13875,6 +14077,12 @@ class Auth {
13875
14077
  setRefreshToken(refreshToken);
13876
14078
  }
13877
14079
 
14080
+ setRefreshTenantId(refreshTenantId ) {
14081
+ setRefreshTenantId(refreshTenantId);
14082
+
14083
+ getApiClient().setRefreshTenantId(refreshTenantId);
14084
+ }
14085
+
13878
14086
  forceRefreshToken() {
13879
14087
  getApiClient().forceRefreshToken();
13880
14088
  }