@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
@@ -425,13 +425,9 @@ class IssueReporter {
425
425
 
426
426
  setTimeout(() => {
427
427
  if (isArray) {
428
- payload = payload.map(message => {
429
- message._retry = retry + 1;
430
- return message;
431
- });
432
- } else {
433
- // $FlowFixMe
434
- payload._retry = retry + 1;
428
+ payload = payload.map(message => this._writeRetryCount(message, retry + 1));
429
+ } else if (payload && typeof payload === 'object') {
430
+ payload = this._writeRetryCount(payload, retry + 1);
435
431
  }
436
432
 
437
433
  this._sendDebugToGrafana(payload, retry + 1);
@@ -439,6 +435,15 @@ class IssueReporter {
439
435
  });
440
436
  }
441
437
 
438
+ _writeRetryCount(message , count ) {
439
+ if (message && typeof message === 'object') {
440
+ // $FlowFixMe
441
+ message._retry = count;
442
+ }
443
+
444
+ return message;
445
+ }
446
+
442
447
  _isLevelAbove(level1 , level2 ) {
443
448
  const index1 = LOG_LEVELS.indexOf(level1);
444
449
  const index2 = LOG_LEVELS.indexOf(level2);
@@ -2275,9 +2280,12 @@ var authMethods = (client , baseUrl ) => ({
2275
2280
  expiration: expiration || DETAULT_EXPIRATION,
2276
2281
  refresh_token: refreshToken,
2277
2282
  client_id: client.clientId,
2278
- tenant_id: tenantId,
2279
2283
  };
2280
2284
 
2285
+ if (tenantId) {
2286
+ body.tenant_id = tenantId;
2287
+ }
2288
+
2281
2289
  const headers = {
2282
2290
  'Content-Type': 'application/json',
2283
2291
  ...(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
  }
@@ -13072,6 +13132,153 @@ class Checker {
13072
13132
  }
13073
13133
  }
13074
13134
 
13135
+ //
13136
+ /* eslint-disable no-unused-vars */
13137
+ /* global window, document */
13138
+ const SDK_CLICK_TO_CALL = 'sdk/CLICK_TO_CALL';
13139
+ const SDK_ON_CALL_MADE = 'sdk/SDK_ON_CALL_MADE';
13140
+ const SDK_CALL_ENDED = 'sdk/ON_CALL_ENDED';
13141
+ const SDK_CALL_INCOMING = 'sdk/SDK_CALL_INCOMING';
13142
+ const SDK_AUTHENTICATED = 'sdk/SDK_AUTHENTICATED';
13143
+
13144
+ class Softphone {
13145
+ url = 'https://softphone.wazo.io';
13146
+ width = 500;
13147
+ height = 600;
13148
+ displayed = false;
13149
+ iframe = null;
13150
+
13151
+ onLinkEnabled(link ) {}
13152
+
13153
+ onCallMade(call ) {}
13154
+ onCallIncoming(call ) {}
13155
+ onCallEnded(call , card , direction , fromExtension ) {}
13156
+ onAuthenticated(session ) {}
13157
+
13158
+ init(url , width , height ) {
13159
+ if (url) {
13160
+ this.url = url;
13161
+ }
13162
+ if (width) {
13163
+ this.width = width;
13164
+ }
13165
+ if (height) {
13166
+ this.height = height;
13167
+ }
13168
+
13169
+ window.addEventListener('message', this._onMessage.bind(this), false);
13170
+
13171
+ this._createIframe();
13172
+ }
13173
+
13174
+ parseLinks() {
13175
+ const links = this._getLinks();
13176
+
13177
+ links.forEach(link => {
13178
+ link.setAttribute('data-wazo-parsed', true);
13179
+ link.addEventListener('click', this._onLinkClick.bind(this));
13180
+ this.onLinkEnabled(link);
13181
+ });
13182
+ }
13183
+
13184
+ makeCall(number ) {
13185
+ this.displaySoftphone();
13186
+
13187
+ if (this.iframe) {
13188
+ this.iframe.contentWindow.postMessage({ type: SDK_CLICK_TO_CALL, number }, '*');
13189
+ }
13190
+ }
13191
+
13192
+ toggleSoftphoneDisplay() {
13193
+ if (this.displayed) {
13194
+ this.hideSoftphone();
13195
+ } else {
13196
+ this.displaySoftphone();
13197
+ }
13198
+
13199
+ this.displayed = !this.displayed;
13200
+ }
13201
+
13202
+ displaySoftphone() {
13203
+ if (!this.iframe) {
13204
+ this._createIframe();
13205
+ }
13206
+
13207
+ if (this.iframe) {
13208
+ this.iframe.style.display = 'block';
13209
+ }
13210
+ }
13211
+
13212
+ hideSoftphone() {
13213
+ if (this.iframe) {
13214
+ this.iframe.style.display = 'none';
13215
+ }
13216
+ }
13217
+
13218
+ _createIframe() {
13219
+ this.iframe = document.createElement('iframe');
13220
+ // $FlowFixMe
13221
+ this.iframe.width = this.width;
13222
+ // $FlowFixMe
13223
+ this.iframe.height = this.height;
13224
+ // $FlowFixMe
13225
+ this.iframe.allow = 'camera *; microphone *; autoplay *; display-capture *';
13226
+ this.iframe.style.position = 'absolute';
13227
+ this.iframe.style.left = '0';
13228
+ this.iframe.style.bottom = '0';
13229
+ this.iframe.style.border = '1px solid #aaa';
13230
+ this.iframe.src = this.url;
13231
+ this.iframe.style.display = 'none';
13232
+ this.iframe.id = 'wazo-softphone';
13233
+
13234
+ // $FlowFixMe
13235
+ document.body.appendChild(this.iframe);
13236
+ }
13237
+
13238
+ _getLinks() {
13239
+ return [].slice.call(document.querySelectorAll('a:not([data-wazo-parsed])'), 0)
13240
+ .filter(link => link.href.indexOf('tel:') === 0 || link.href.indexOf('callto:') === 0);
13241
+ }
13242
+
13243
+ _onLinkClick(e ) {
13244
+ e.preventDefault();
13245
+ const number = e.target.href.split(':')[1];
13246
+
13247
+ this.makeCall(number);
13248
+ }
13249
+
13250
+ _onAuthenticated() {
13251
+ this.parseLinks();
13252
+ }
13253
+
13254
+ _onMessage(event ) {
13255
+ if (!event.data) {
13256
+ return;
13257
+ }
13258
+
13259
+ switch (event.data.type) {
13260
+ case SDK_ON_CALL_MADE:
13261
+ this.onCallMade(event.data.callSession);
13262
+ break;
13263
+ case SDK_CALL_ENDED: {
13264
+ const { callSession, content, direction, userExtension } = event.data;
13265
+ this.onCallEnded(callSession, content, direction, userExtension);
13266
+ break;
13267
+ }
13268
+ case SDK_CALL_INCOMING:
13269
+ this.onCallIncoming(event.data.callSession);
13270
+ break;
13271
+ case SDK_AUTHENTICATED:
13272
+ // $FlowFixMe
13273
+ this._onAuthenticated(event.data.session);
13274
+ this.onAuthenticated(event.data.session);
13275
+ break;
13276
+ }
13277
+ }
13278
+ }
13279
+
13280
+ var Softphone$1 = new Softphone();
13281
+
13075
13282
  /* global window */
13076
13283
 
13077
13284
  const Wazo = {
@@ -13092,6 +13299,7 @@ const Wazo = {
13092
13299
  loggerFor: IssueReporter$1.loggerFor.bind(IssueReporter$1),
13093
13300
  Features: Features$1,
13094
13301
  Checker,
13302
+ Softphone: Softphone$1,
13095
13303
 
13096
13304
  // Domain
13097
13305
  domain: {