@wazo/sdk 0.39.13 → 0.39.14

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 (60) hide show
  1. package/dist/wazo-sdk.js +3 -3
  2. package/esm/api-client.js +3 -2
  3. package/esm/service/IssueReporter.js +9 -1
  4. package/esm/simple/Auth.js +2 -3
  5. package/esm/simple/Phone.js +20 -16
  6. package/esm/simple/Websocket.js +2 -1
  7. package/esm/types/api-client.d.ts.map +1 -1
  8. package/esm/types/index.d.ts +2 -0
  9. package/esm/types/index.d.ts.map +1 -1
  10. package/esm/types/service/IssueReporter.d.ts +1 -0
  11. package/esm/types/service/IssueReporter.d.ts.map +1 -1
  12. package/esm/types/simple/Auth.d.ts.map +1 -1
  13. package/esm/types/simple/Phone.d.ts.map +1 -1
  14. package/esm/types/simple/Websocket.d.ts.map +1 -1
  15. package/esm/types/simple/index.d.ts +1 -0
  16. package/esm/types/simple/index.d.ts.map +1 -1
  17. package/esm/types/utils/string.d.ts +1 -0
  18. package/esm/types/utils/string.d.ts.map +1 -1
  19. package/esm/types/web-rtc-client.d.ts +1 -0
  20. package/esm/types/web-rtc-client.d.ts.map +1 -1
  21. package/esm/types/websocket-client.d.ts.map +1 -1
  22. package/esm/utils/__tests__/string.test.js +26 -1
  23. package/esm/utils/string.js +6 -0
  24. package/esm/web-rtc-client.js +20 -2
  25. package/esm/websocket-client.js +10 -9
  26. package/lib/.DS_Store +0 -0
  27. package/lib/api-client.js +3 -2
  28. package/lib/service/IssueReporter.js +9 -1
  29. package/lib/simple/Auth.js +2 -3
  30. package/lib/simple/Phone.js +20 -16
  31. package/lib/simple/Websocket.js +2 -1
  32. package/lib/types/api-client.d.ts.map +1 -1
  33. package/lib/types/index.d.ts +2 -0
  34. package/lib/types/index.d.ts.map +1 -1
  35. package/lib/types/service/IssueReporter.d.ts +1 -0
  36. package/lib/types/service/IssueReporter.d.ts.map +1 -1
  37. package/lib/types/simple/Auth.d.ts.map +1 -1
  38. package/lib/types/simple/Phone.d.ts.map +1 -1
  39. package/lib/types/simple/Websocket.d.ts.map +1 -1
  40. package/lib/types/simple/index.d.ts +1 -0
  41. package/lib/types/simple/index.d.ts.map +1 -1
  42. package/lib/types/utils/string.d.ts +1 -0
  43. package/lib/types/utils/string.d.ts.map +1 -1
  44. package/lib/types/web-rtc-client.d.ts +1 -0
  45. package/lib/types/web-rtc-client.d.ts.map +1 -1
  46. package/lib/types/websocket-client.d.ts.map +1 -1
  47. package/lib/utils/__tests__/string.test.js +25 -0
  48. package/lib/utils/string.js +8 -1
  49. package/lib/web-rtc-client.js +22 -2
  50. package/lib/websocket-client.js +10 -9
  51. package/package.json +1 -1
  52. package/src/api-client.ts +3 -2
  53. package/src/service/IssueReporter.ts +11 -1
  54. package/src/simple/Auth.ts +3 -3
  55. package/src/simple/Phone.ts +21 -16
  56. package/src/simple/Websocket.ts +2 -1
  57. package/src/utils/__tests__/string.test.ts +31 -1
  58. package/src/utils/string.ts +8 -0
  59. package/src/web-rtc-client.ts +24 -2
  60. package/src/websocket-client.ts +10 -9
@@ -290,22 +290,7 @@ class Phone extends Emitter implements IPhone {
290
290
  options.log.builtinEnabled = false;
291
291
  options.log.logLevel = 'debug';
292
292
 
293
- options.log.connector = (level: any, className: string, label: any, content: string) => {
294
- const protocolIndex = content && content.indexOf ? protocolDebugMessages.findIndex(prefix => content.indexOf(prefix) !== -1) : -1;
295
-
296
- if (className === 'sip.Transport' && protocolIndex !== -1) {
297
- const direction = protocolIndex === 0 ? 'receiving' : 'sending';
298
- const message = content.replace(`${protocolDebugMessages[protocolIndex]}\n\n`, '').replace('\r\n', '\n');
299
- protocolLogger.trace(message, {
300
- className,
301
- direction,
302
- });
303
- } else {
304
- sipLogger.trace(content, {
305
- className,
306
- });
307
- }
308
- };
293
+ options.log.connector = this._logConnector;
309
294
  }
310
295
 
311
296
  this.client = new WazoWebRTCClient({
@@ -609,6 +594,10 @@ class Phone extends Emitter implements IPhone {
609
594
  }
610
595
  }
611
596
 
597
+ enableLogger(): void {
598
+ this.client.enableLogger(this._logConnector);
599
+ }
600
+
612
601
  _transferEvents() {
613
602
  this.unbind();
614
603
  [...clientEvents, ...transportEvents].forEach(event => {
@@ -623,6 +612,22 @@ class Phone extends Emitter implements IPhone {
623
612
  });
624
613
  }
625
614
 
615
+ _logConnector(level: any, className: string, label: any, content: string): void {
616
+ const protocolIndex = content && content.indexOf ? protocolDebugMessages.findIndex(prefix => content.indexOf(prefix) !== -1) : -1;
617
+
618
+ if (className === 'sip.Transport' && protocolIndex !== -1) {
619
+ const direction = protocolIndex === 0 ? 'receiving' : 'sending';
620
+ const message = content.replace(`${protocolDebugMessages[protocolIndex]}\n\n`, '').replace('\r\n', '\n');
621
+ protocolLogger.trace(message, {
622
+ className,
623
+ direction,
624
+ });
625
+ } else {
626
+ sipLogger.trace(content, {
627
+ className,
628
+ });
629
+ }
630
+ }
626
631
  }
627
632
 
628
633
  if (!global.wazoTelephonyInstance) {
@@ -2,6 +2,7 @@ import type Session from '../domain/Session';
2
2
  import WazoWebSocketClient, * as WebSocketClient from '../websocket-client';
3
3
  import Emitter, { IEmitter } from '../utils/Emitter';
4
4
  import IssueReporter from '../service/IssueReporter';
5
+ import { obfuscateToken } from '../utils/string';
5
6
 
6
7
  const {
7
8
  SOCKET_EVENTS,
@@ -59,7 +60,7 @@ class Websocket extends Emitter implements IWebsocket {
59
60
  open(host: string, session: Session) {
60
61
  logger.info('open simple WebSocket', {
61
62
  host,
62
- token: session.token,
63
+ token: obfuscateToken(session.token),
63
64
  });
64
65
  this.ws = new WazoWebSocketClient({
65
66
  host,
@@ -1,4 +1,4 @@
1
- import { camelToUnderscore } from '../string';
1
+ import { camelToUnderscore, obfuscateToken } from '../string';
2
2
 
3
3
  describe('string utils', () => {
4
4
  describe('camelToUnderscore', () => {
@@ -22,4 +22,34 @@ describe('string utils', () => {
22
22
  expect(camelToUnderscore('L123')).toEqual('l123');
23
23
  });
24
24
  });
25
+
26
+ describe('obfuscateToken', () => {
27
+ it('should return null when token is null', () => {
28
+ const result = obfuscateToken(null);
29
+ expect(result).toBeNull();
30
+ });
31
+
32
+ it('should return undefined when token is undefined', () => {
33
+ const result = obfuscateToken(undefined);
34
+ expect(result).toBeUndefined();
35
+ });
36
+
37
+ it('should obfuscate the token by replacing characters after the first part with "xxxxxx"', () => {
38
+ const token = '12345-67890-abcdef';
39
+ const result = obfuscateToken(token);
40
+ expect(result).toBe('12345-xxxxxx-xxxxxx');
41
+ });
42
+
43
+ it('should handle tokens with a single part', () => {
44
+ const token = 'singlepart';
45
+ const result = obfuscateToken(token);
46
+ expect(result).toBe('singlepart');
47
+ });
48
+
49
+ it('should handle tokens with two parts', () => {
50
+ const token = 'part1-part2';
51
+ const result = obfuscateToken(token);
52
+ expect(result).toBe('part1-xxxxxx');
53
+ });
54
+ });
25
55
  });
@@ -5,3 +5,11 @@ export const camelToUnderscore = (key: string): string => {
5
5
 
6
6
  return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
7
7
  };
8
+
9
+ export const obfuscateToken = (token: string | null | undefined) => {
10
+ if (!token) {
11
+ return token;
12
+ }
13
+
14
+ return token.split('-').map((part, index) => (index === 0 ? part : 'xxxxxx')).join('-');
15
+ };
@@ -253,7 +253,11 @@ export default class WebRTCClient extends Emitter {
253
253
  createUserAgent(uaConfigOverrides?: UserAgentConfigOverrides): UserAgent {
254
254
  const uaOptions = this._createUaOptions(uaConfigOverrides);
255
255
 
256
- logger.info('sdk webrtc, creating UA', { uaOptions, clientId: this.clientId });
256
+ logger.info('sdk webrtc, creating UA', {
257
+ uaOptions: { ...uaOptions, authorizationPassword: `${uaOptions?.authorizationPassword?.slice(0, 5)}xxxx` },
258
+ clientId: this.clientId,
259
+ });
260
+
257
261
  uaOptions.delegate = {
258
262
  onConnect: this.onConnect.bind(this),
259
263
  onDisconnect: this.onDisconnect.bind(this),
@@ -412,7 +416,7 @@ export default class WebRTCClient extends Emitter {
412
416
 
413
417
  return this._connectIfNeeded().then(() => {
414
418
  // Avoid race condition with the close method called just before register and setting userAgent to null
415
- // during the resolution of the primise.
419
+ // during the resolution of the promise.
416
420
  if (!this.userAgent) {
417
421
  logger.info('sdk webrtc recreating User Agent after connection');
418
422
  this.userAgent = this.createUserAgent(this.uaConfigOverrides);
@@ -1874,6 +1878,24 @@ export default class WebRTCClient extends Emitter {
1874
1878
  this.attemptReconnection();
1875
1879
  }
1876
1880
 
1881
+ enableLogger(logConnector: (level: any, className: string, label: any, content: string) => void): void {
1882
+ if (!this.userAgent) {
1883
+ return;
1884
+ }
1885
+
1886
+ if (this.userAgent?.transport) {
1887
+ // @ts-ignore
1888
+ this.userAgent.transport.configuration.traceSip = true;
1889
+ }
1890
+
1891
+ // @ts-ignore
1892
+ this.userAgent.loggerFactory.builtinEnabled = true;
1893
+ // @ts-ignore
1894
+ this.userAgent.loggerFactory.level = 3; // debug
1895
+ // @ts-ignore
1896
+ this.userAgent.loggerFactory.connector = logConnector;
1897
+ }
1898
+
1877
1899
  _onHeartbeat(message: string | Record<string, any>): void {
1878
1900
  const body = message && typeof message === 'object' ? message.data : message;
1879
1901
 
@@ -6,6 +6,7 @@ import Emitter from './utils/Emitter';
6
6
  import type { WebSocketMessage } from './types/WebSocketMessage';
7
7
  import IssueReporter from './service/IssueReporter';
8
8
  import Heartbeat from './utils/Heartbeat';
9
+ import { obfuscateToken } from './utils/string';
9
10
 
10
11
  export const SOCKET_EVENTS = {
11
12
  ON_OPEN: 'onopen',
@@ -177,7 +178,7 @@ class WebSocketClient extends Emitter {
177
178
  connect() {
178
179
  logger.info('connect method started', {
179
180
  host: this.host,
180
- token: this.token,
181
+ token: obfuscateToken(this.token),
181
182
  });
182
183
  this.socket = new ReconnectingWebSocket(this._getUrl.bind(this), [], this.options);
183
184
 
@@ -234,7 +235,7 @@ class WebSocketClient extends Emitter {
234
235
  code: event.code,
235
236
  readyState: event.target.readyState,
236
237
  host: this.host,
237
- token: this.token,
238
+ token: obfuscateToken(this.token),
238
239
  });
239
240
  this.initialized = false;
240
241
  this.eventEmitter.emit(SOCKET_EVENTS.ON_CLOSE, event);
@@ -265,7 +266,7 @@ class WebSocketClient extends Emitter {
265
266
  logger.info('Wazo WS close', {
266
267
  socket: !!this.socket,
267
268
  host: this.host,
268
- token: this.token,
269
+ token: obfuscateToken(this.token),
269
270
  });
270
271
 
271
272
  if (!this.socket) {
@@ -286,7 +287,7 @@ class WebSocketClient extends Emitter {
286
287
  this.token = token;
287
288
  logger.info('Wazo WS updating token', {
288
289
  url: this._getUrl(),
289
- token,
290
+ token: obfuscateToken(token),
290
291
  socket: !!this.socket,
291
292
  });
292
293
 
@@ -312,7 +313,7 @@ class WebSocketClient extends Emitter {
312
313
  startHeartbeat() {
313
314
  logger.info('Wazo WS start heartbeat', {
314
315
  host: this.host,
315
- token: this.token,
316
+ token: obfuscateToken(this.token),
316
317
  });
317
318
 
318
319
  if (!this.socket) {
@@ -328,7 +329,7 @@ class WebSocketClient extends Emitter {
328
329
  stopHeartbeat() {
329
330
  logger.info('Wazo WS stop heartbeat', {
330
331
  host: this.host,
331
- token: this.token,
332
+ token: obfuscateToken(this.token),
332
333
  });
333
334
  this.heartbeat.stop();
334
335
  }
@@ -366,7 +367,7 @@ class WebSocketClient extends Emitter {
366
367
  reason,
367
368
  socket: !!this.socket,
368
369
  host: this.host,
369
- token: this.token,
370
+ token: obfuscateToken(this.token),
370
371
  });
371
372
 
372
373
  if (!this.socket) {
@@ -439,7 +440,7 @@ class WebSocketClient extends Emitter {
439
440
  }
440
441
 
441
442
  logger.info('Wazo WS url computed to reconnect', {
442
- url,
443
+ url: url.replace(this.token!, obfuscateToken(this.token) as string),
443
444
  });
444
445
  return url;
445
446
  }
@@ -454,7 +455,7 @@ class WebSocketClient extends Emitter {
454
455
  async _onHeartbeatTimeout() {
455
456
  logger.log('heartbeat timed out', {
456
457
  host: this.host,
457
- token: this.token,
458
+ token: obfuscateToken(this.token),
458
459
  });
459
460
  this.close();
460
461
  this.eventEmitter.emit(SOCKET_EVENTS.ON_CLOSE, new Error('Websocket ping failure.'));