@webex/plugin-logger 3.0.0-beta.4 → 3.0.0-beta.400

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.
package/src/logger.js CHANGED
@@ -3,17 +3,8 @@
3
3
  */
4
4
 
5
5
  import {inBrowser, patterns} from '@webex/common';
6
- import {
7
- WebexHttpError,
8
- WebexPlugin
9
- } from '@webex/webex-core';
10
- import {
11
- cloneDeep,
12
- has,
13
- isArray,
14
- isObject,
15
- isString
16
- } from 'lodash';
6
+ import {WebexHttpError, WebexPlugin} from '@webex/webex-core';
7
+ import {cloneDeep, has, isArray, isObject, isString} from 'lodash';
17
8
 
18
9
  const precedence = {
19
10
  silent: 0,
@@ -24,7 +15,7 @@ const precedence = {
24
15
  log: 5,
25
16
  info: 6,
26
17
  debug: 7,
27
- trace: 8
18
+ trace: 8,
28
19
  };
29
20
 
30
21
  export const levels = Object.keys(precedence).filter((level) => level !== 'silent');
@@ -34,12 +25,12 @@ const fallbacks = {
34
25
  warn: ['error', 'log'],
35
26
  info: ['log'],
36
27
  debug: ['info', 'log'],
37
- trace: ['debug', 'info', 'log']
28
+ trace: ['debug', 'info', 'log'],
38
29
  };
39
30
 
40
31
  const LOG_TYPES = {
41
32
  SDK: 'sdk',
42
- CLIENT: 'client'
33
+ CLIENT: 'client',
43
34
  };
44
35
 
45
36
  const SDK_LOG_TYPE_NAME = 'wx-js-sdk';
@@ -69,6 +60,9 @@ function walkAndFilter(object, visited = []) {
69
60
  if (patterns.containsEmails.test(object)) {
70
61
  return object.replace(patterns.containsEmails, '[REDACTED]');
71
62
  }
63
+ if (patterns.containsMTID.test(object)) {
64
+ return object.replace(patterns.containsMTID, '$1[REDACTED]');
65
+ }
72
66
  }
73
67
 
74
68
  return object;
@@ -77,8 +71,7 @@ function walkAndFilter(object, visited = []) {
77
71
  for (const [key, value] of Object.entries(object)) {
78
72
  if (authTokenKeyPattern.test(key)) {
79
73
  Reflect.deleteProperty(object, key);
80
- }
81
- else {
74
+ } else {
82
75
  object[key] = walkAndFilter(value, visited);
83
76
  }
84
77
  }
@@ -97,14 +90,14 @@ const Logger = WebexPlugin.extend({
97
90
  cache: false,
98
91
  fn() {
99
92
  return this.getCurrentLevel();
100
- }
93
+ },
101
94
  },
102
95
  client_level: {
103
96
  cache: false,
104
97
  fn() {
105
98
  return this.getCurrentClientLevel();
106
- }
107
- }
99
+ },
100
+ },
108
101
  },
109
102
  session: {
110
103
  // for when configured to use single buffer
@@ -112,27 +105,27 @@ const Logger = WebexPlugin.extend({
112
105
  type: 'array',
113
106
  default() {
114
107
  return [];
115
- }
108
+ },
116
109
  },
117
110
  groupLevel: {
118
111
  type: 'number',
119
112
  default() {
120
113
  return 0;
121
- }
114
+ },
122
115
  },
123
116
  // for when configured to use separate buffers
124
117
  sdkBuffer: {
125
118
  type: 'array',
126
119
  default() {
127
120
  return [];
128
- }
121
+ },
129
122
  },
130
123
  clientBuffer: {
131
124
  type: 'array',
132
125
  default() {
133
126
  return [];
134
- }
135
- }
127
+ },
128
+ },
136
129
  },
137
130
 
138
131
  /**
@@ -178,7 +171,10 @@ const Logger = WebexPlugin.extend({
178
171
  * @returns {boolean}
179
172
  */
180
173
  shouldPrint(level, type = LOG_TYPES.SDK) {
181
- return precedence[level] <= precedence[type === LOG_TYPES.SDK ? this.getCurrentLevel() : this.getCurrentClientLevel()];
174
+ return (
175
+ precedence[level] <=
176
+ precedence[type === LOG_TYPES.SDK ? this.getCurrentLevel() : this.getCurrentClientLevel()]
177
+ );
182
178
  },
183
179
 
184
180
  /**
@@ -194,7 +190,10 @@ const Logger = WebexPlugin.extend({
194
190
  * @returns {boolean}
195
191
  */
196
192
  shouldBuffer(level) {
197
- return precedence[level] <= (this.config.bufferLogLevel ? precedence[this.config.bufferLogLevel] : precedence.info);
193
+ return (
194
+ precedence[level] <=
195
+ (this.config.bufferLogLevel ? precedence[this.config.bufferLogLevel] : precedence.info)
196
+ );
198
197
  },
199
198
 
200
199
  /**
@@ -223,7 +222,8 @@ const Logger = WebexPlugin.extend({
223
222
  }
224
223
 
225
224
  // Use server-side-feature toggles to configure log levels
226
- const level = this.webex.internal.device && this.webex.internal.device.features.developer.get('log-level');
225
+ const level =
226
+ this.webex.internal.device && this.webex.internal.device.features.developer.get('log-level');
227
227
 
228
228
  if (level) {
229
229
  if (levels.includes(level)) {
@@ -275,11 +275,14 @@ const Logger = WebexPlugin.extend({
275
275
  // merge the client and sdk buffers
276
276
  // while we have entries in either buffer
277
277
  while (clientIndex < this.clientBuffer.length || sdkIndex < this.sdkBuffer.length) {
278
- // if we have remaining entries in the SDK buffer
279
- if (sdkIndex < this.sdkBuffer.length &&
278
+ // if we have remaining entries in the SDK buffer
279
+ if (
280
+ sdkIndex < this.sdkBuffer.length &&
280
281
  // and we haven't exhausted all the client buffer entries, or SDK date is before client date
281
282
  (clientIndex >= this.clientBuffer.length ||
282
- (new Date(getDate(this.sdkBuffer[sdkIndex])) <= new Date(getDate(this.clientBuffer[clientIndex]))))) {
283
+ new Date(getDate(this.sdkBuffer[sdkIndex])) <=
284
+ new Date(getDate(this.clientBuffer[clientIndex])))
285
+ ) {
283
286
  // then add to the SDK buffer
284
287
  buffer.push(this.sdkBuffer[sdkIndex]);
285
288
  sdkIndex += 1;
@@ -291,13 +294,12 @@ const Logger = WebexPlugin.extend({
291
294
  clientIndex += 1;
292
295
  }
293
296
  }
294
- }
295
- else {
297
+ } else {
296
298
  buffer = this.buffer;
297
299
  }
298
300
 
299
301
  return buffer.join('\n');
300
- }
302
+ },
301
303
  });
302
304
 
303
305
  /**
@@ -323,16 +325,18 @@ function makeLoggerMethod(level, impl, type, neverPrint = false, alwaysBuffer =
323
325
  // in Ampersand, even if the initialize method is used to set this up. so we keep the type to achieve
324
326
  // a sort of late binding to allow retrieving a name from config.
325
327
  const logType = type;
326
- const clientName = logType === LOG_TYPES.SDK ? SDK_LOG_TYPE_NAME : (this.config.clientName || logType);
328
+ const clientName =
329
+ logType === LOG_TYPES.SDK ? SDK_LOG_TYPE_NAME : this.config.clientName || logType;
327
330
 
328
331
  let buffer;
329
332
  let historyLength;
330
333
 
331
334
  if (this.config.separateLogBuffers) {
332
- historyLength = this.config.clientHistoryLength ? this.config.clientHistoryLength : this.config.historyLength;
335
+ historyLength = this.config.clientHistoryLength
336
+ ? this.config.clientHistoryLength
337
+ : this.config.historyLength;
333
338
  buffer = logType === LOG_TYPES.SDK ? this.sdkBuffer : this.clientBuffer;
334
- }
335
- else {
339
+ } else {
336
340
  buffer = this.buffer;
337
341
  historyLength = this.config.historyLength;
338
342
  }
@@ -350,6 +354,29 @@ function makeLoggerMethod(level, impl, type, neverPrint = false, alwaysBuffer =
350
354
  if (item instanceof WebexHttpError) {
351
355
  return item.toString();
352
356
  }
357
+ if (typeof item === 'object') {
358
+ let cache = [];
359
+ let returnItem;
360
+ try {
361
+ returnItem = JSON.stringify(item, (_key, value) => {
362
+ if (typeof value === 'object' && value !== null) {
363
+ if (cache.includes(value)) {
364
+ // Circular reference found, discard key
365
+ return undefined;
366
+ }
367
+ // Store value in our collection
368
+ cache.push(value);
369
+ }
370
+
371
+ return value;
372
+ });
373
+ } catch (e) {
374
+ returnItem = `Failed to stringify: ${item}`;
375
+ }
376
+ cache = null;
377
+
378
+ return returnItem;
379
+ }
353
380
 
354
381
  return item;
355
382
  });
@@ -376,13 +403,12 @@ function makeLoggerMethod(level, impl, type, neverPrint = false, alwaysBuffer =
376
403
  stringified.unshift('| '.repeat(this.groupLevel));
377
404
  buffer.push(stringified);
378
405
  if (buffer.length > historyLength) {
379
- buffer.shift();
406
+ buffer.splice(0, buffer.length - historyLength);
380
407
  }
381
408
  if (level === 'group') this.groupLevel += 1;
382
409
  if (level === 'groupEnd' && this.groupLevel > 0) this.groupLevel -= 1;
383
410
  }
384
- }
385
- catch (reason) {
411
+ } catch (reason) {
386
412
  if (!neverPrint) {
387
413
  /* istanbul ignore next */
388
414
  // eslint-disable-next-line no-console
@@ -404,14 +430,24 @@ levels.forEach((level) => {
404
430
  }
405
431
  }
406
432
 
407
-
408
433
  // eslint-disable-next-line complexity
409
434
  Logger.prototype[`client_${level}`] = makeLoggerMethod(level, impl, LOG_TYPES.CLIENT);
410
435
  Logger.prototype[level] = makeLoggerMethod(level, impl, LOG_TYPES.SDK);
411
436
  });
412
437
 
413
- Logger.prototype.client_logToBuffer =
414
- makeLoggerMethod(levels.info, levels.info, LOG_TYPES.CLIENT, true, true);
415
- Logger.prototype.logToBuffer = makeLoggerMethod(levels.info, levels.info, LOG_TYPES.SDK, true, true);
438
+ Logger.prototype.client_logToBuffer = makeLoggerMethod(
439
+ levels.info,
440
+ levels.info,
441
+ LOG_TYPES.CLIENT,
442
+ true,
443
+ true
444
+ );
445
+ Logger.prototype.logToBuffer = makeLoggerMethod(
446
+ levels.info,
447
+ levels.info,
448
+ LOG_TYPES.SDK,
449
+ true,
450
+ true
451
+ );
416
452
 
417
453
  export default Logger;