@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/dist/config.js CHANGED
@@ -1,17 +1,13 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
-
9
7
  exports.default = void 0;
10
-
11
8
  /*!
12
9
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
13
10
  */
14
-
15
11
  /**
16
12
  * @typedef {Object} LoggerConfig
17
13
  * @property {string} [level=process.env.WEBEX_LOG_LEVEL] - Maximum log level that
@@ -27,7 +23,7 @@ exports.default = void 0;
27
23
  var _default = {
28
24
  logger: {
29
25
  level: process.env.WEBEX_LOG_LEVEL,
30
- historyLength: 1000
26
+ historyLength: 10000
31
27
  }
32
28
  };
33
29
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["logger","level","process","env","WEBEX_LOG_LEVEL","historyLength"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * @typedef {Object} LoggerConfig\n * @property {string} [level=process.env.WEBEX_LOG_LEVEL] - Maximum log level that\n * should be printed to the console. One of\n * silent|error|warn|log|info|debug|trace\n * @property {number} [historyLength=1000] - Maximum number of entries to store in the log buffer.\n * @example\n * {\n * level: process.env.WEBEX_LOG_LEVEL,\n * historyLength: 1000\n * }\n */\n\nexport default {\n logger: {\n level: process.env.WEBEX_LOG_LEVEL,\n historyLength: 1000\n }\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;eAEe;EACbA,MAAM,EAAE;IACNC,KAAK,EAAEC,OAAO,CAACC,GAAR,CAAYC,eADb;IAENC,aAAa,EAAE;EAFT;AADK,C"}
1
+ {"version":3,"names":["logger","level","process","env","WEBEX_LOG_LEVEL","historyLength"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * @typedef {Object} LoggerConfig\n * @property {string} [level=process.env.WEBEX_LOG_LEVEL] - Maximum log level that\n * should be printed to the console. One of\n * silent|error|warn|log|info|debug|trace\n * @property {number} [historyLength=1000] - Maximum number of entries to store in the log buffer.\n * @example\n * {\n * level: process.env.WEBEX_LOG_LEVEL,\n * historyLength: 1000\n * }\n */\n\nexport default {\n logger: {\n level: process.env.WEBEX_LOG_LEVEL,\n historyLength: 10000,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA,eAae;EACbA,MAAM,EAAE;IACNC,KAAK,EAAEC,OAAO,CAACC,GAAG,CAACC,eAAe;IAClCC,aAAa,EAAE;EACjB;AACF,CAAC;AAAA"}
package/dist/index.js CHANGED
@@ -1,46 +1,34 @@
1
1
  "use strict";
2
2
 
3
3
  var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
4
-
5
4
  var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
6
-
7
5
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
8
-
9
6
  var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
10
-
11
7
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
12
-
13
8
  _Object$defineProperty(exports, "__esModule", {
14
9
  value: true
15
10
  });
16
-
17
11
  _Object$defineProperty(exports, "default", {
18
12
  enumerable: true,
19
13
  get: function get() {
20
14
  return _logger.default;
21
15
  }
22
16
  });
23
-
24
17
  _Object$defineProperty(exports, "levels", {
25
18
  enumerable: true,
26
19
  get: function get() {
27
20
  return _logger.levels;
28
21
  }
29
22
  });
30
-
31
23
  var _webexCore = require("@webex/webex-core");
32
-
33
24
  var _logger = _interopRequireWildcard(require("./logger"));
34
-
35
25
  var _config = _interopRequireDefault(require("./config"));
36
-
37
26
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
38
-
39
27
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
40
-
41
28
  /*!
42
29
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
43
30
  */
31
+
44
32
  (0, _webexCore.registerPlugin)('logger', _logger.default, {
45
33
  config: _config.default,
46
34
  replace: true
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["registerPlugin","Logger","config","replace"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Logger from './logger';\nimport config from './config';\n\nregisterPlugin('logger', Logger, {\n config,\n replace: true\n});\n\nexport {\n default,\n levels\n} from './logger';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AAEA;;AACA;;;;;;AAPA;AACA;AACA;AAOA,IAAAA,yBAAA,EAAe,QAAf,EAAyBC,eAAzB,EAAiC;EAC/BC,MAAM,EAANA,eAD+B;EAE/BC,OAAO,EAAE;AAFsB,CAAjC"}
1
+ {"version":3,"names":["registerPlugin","Logger","config","replace"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Logger from './logger';\nimport config from './config';\n\nregisterPlugin('logger', Logger, {\n config,\n replace: true,\n});\n\nexport {default, levels} from './logger';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAIA;AAEA;AACA;AAA8B;AAAA;AAP9B;AACA;AACA;;AAOA,IAAAA,yBAAc,EAAC,QAAQ,EAAEC,eAAM,EAAE;EAC/BC,MAAM,EAANA,eAAM;EACNC,OAAO,EAAE;AACX,CAAC,CAAC"}
package/dist/logger.js CHANGED
@@ -1,42 +1,29 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.levels = exports.default = void 0;
12
-
13
9
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
14
-
15
10
  var _entries = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/entries"));
16
-
17
11
  var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
18
-
12
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
13
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
19
14
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
20
-
21
15
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
22
-
23
16
  var _isString2 = _interopRequireDefault(require("lodash/isString"));
24
-
25
17
  var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
26
-
27
18
  var _isArray2 = _interopRequireDefault(require("lodash/isArray"));
28
-
29
19
  var _has2 = _interopRequireDefault(require("lodash/has"));
30
-
31
20
  var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
32
-
33
21
  var _common = require("@webex/common");
34
-
35
22
  var _webexCore = require("@webex/webex-core");
36
-
37
23
  /*!
38
24
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
39
25
  */
26
+
40
27
  var precedence = {
41
28
  silent: 0,
42
29
  group: 1,
@@ -65,6 +52,7 @@ var LOG_TYPES = {
65
52
  };
66
53
  var SDK_LOG_TYPE_NAME = 'wx-js-sdk';
67
54
  var authTokenKeyPattern = /[Aa]uthorization/;
55
+
68
56
  /**
69
57
  * Recursively strips "authorization" fields from the specified object
70
58
  * @param {Object} object
@@ -72,52 +60,45 @@ var authTokenKeyPattern = /[Aa]uthorization/;
72
60
  * @private
73
61
  * @returns {Object}
74
62
  */
75
-
76
63
  function walkAndFilter(object) {
77
64
  var visited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
78
-
79
65
  if (visited.includes(object)) {
80
66
  // Prevent circular references
81
67
  return object;
82
68
  }
83
-
84
69
  visited.push(object);
85
-
86
70
  if ((0, _isArray2.default)(object)) {
87
71
  return object.map(function (o) {
88
72
  return walkAndFilter(o, visited);
89
73
  });
90
74
  }
91
-
92
75
  if (!(0, _isObject2.default)(object)) {
93
76
  if ((0, _isString2.default)(object)) {
94
77
  if (_common.patterns.containsEmails.test(object)) {
95
78
  return object.replace(_common.patterns.containsEmails, '[REDACTED]');
96
79
  }
80
+ if (_common.patterns.containsMTID.test(object)) {
81
+ return object.replace(_common.patterns.containsMTID, '$1[REDACTED]');
82
+ }
97
83
  }
98
-
99
84
  return object;
100
85
  }
101
-
102
86
  for (var _i = 0, _Object$entries = (0, _entries.default)(object); _i < _Object$entries.length; _i++) {
103
87
  var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
104
- key = _Object$entries$_i[0],
105
- value = _Object$entries$_i[1];
106
-
88
+ key = _Object$entries$_i[0],
89
+ value = _Object$entries$_i[1];
107
90
  if (authTokenKeyPattern.test(key)) {
108
91
  (0, _deleteProperty.default)(object, key);
109
92
  } else {
110
93
  object[key] = walkAndFilter(value, visited);
111
94
  }
112
95
  }
113
-
114
96
  return object;
115
97
  }
98
+
116
99
  /**
117
100
  * @class
118
101
  */
119
-
120
-
121
102
  var Logger = _webexCore.WebexPlugin.extend({
122
103
  namespace: 'Logger',
123
104
  derived: {
@@ -162,7 +143,6 @@ var Logger = _webexCore.WebexPlugin.extend({
162
143
  }
163
144
  }
164
145
  },
165
-
166
146
  /**
167
147
  * Ensures auth headers don't get printed in logs
168
148
  * @param {Array<mixed>} args
@@ -171,10 +151,9 @@ var Logger = _webexCore.WebexPlugin.extend({
171
151
  * @returns {Array<mixed>}
172
152
  */
173
153
  filter: function filter() {
174
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
175
- args[_key] = arguments[_key];
154
+ for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {
155
+ args[_key2] = arguments[_key2];
176
156
  }
177
-
178
157
  return args.map(function (arg) {
179
158
  // WebexHttpError already ensures auth tokens don't get printed, so, no
180
159
  // need to alter it here.
@@ -188,15 +167,12 @@ var Logger = _webexCore.WebexPlugin.extend({
188
167
  ret += 'END STACK';
189
168
  return ret;
190
169
  }
191
-
192
170
  return arg;
193
171
  }
194
-
195
172
  arg = (0, _cloneDeep2.default)(arg);
196
173
  return walkAndFilter(arg);
197
174
  });
198
175
  },
199
-
200
176
  /**
201
177
  * Determines if the current level allows logs at the specified level to be
202
178
  * printed
@@ -210,7 +186,6 @@ var Logger = _webexCore.WebexPlugin.extend({
210
186
  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : LOG_TYPES.SDK;
211
187
  return precedence[level] <= precedence[type === LOG_TYPES.SDK ? this.getCurrentLevel() : this.getCurrentClientLevel()];
212
188
  },
213
-
214
189
  /**
215
190
  * Determines if the current level allows logs at the specified level to be
216
191
  * put into the log buffer. We're configuring it omit trace and debug logs
@@ -226,7 +201,6 @@ var Logger = _webexCore.WebexPlugin.extend({
226
201
  shouldBuffer: function shouldBuffer(level) {
227
202
  return precedence[level] <= (this.config.bufferLogLevel ? precedence[this.config.bufferLogLevel] : precedence.info);
228
203
  },
229
-
230
204
  /**
231
205
  * Indicates the current SDK log level based on env vars, feature toggles, and
232
206
  * user type.
@@ -242,28 +216,24 @@ var Logger = _webexCore.WebexPlugin.extend({
242
216
  if (this.config.level) {
243
217
  return this.config.level;
244
218
  }
245
-
246
219
  if (levels.includes(process.env.WEBEX_LOG_LEVEL)) {
247
220
  return process.env.WEBEX_LOG_LEVEL;
248
- } // Always use debug-level logging in test mode;
249
-
221
+ }
250
222
 
223
+ // Always use debug-level logging in test mode;
251
224
  if (process.env.NODE_ENV === 'test') {
252
225
  return 'trace';
253
- } // Use server-side-feature toggles to configure log levels
254
-
226
+ }
255
227
 
228
+ // Use server-side-feature toggles to configure log levels
256
229
  var level = this.webex.internal.device && this.webex.internal.device.features.developer.get('log-level');
257
-
258
230
  if (level) {
259
231
  if (levels.includes(level)) {
260
232
  return level;
261
233
  }
262
234
  }
263
-
264
235
  return 'error';
265
236
  },
266
-
267
237
  /**
268
238
  * Indicates the current client log level based on config, defaults to SDK level
269
239
  * @instance
@@ -276,12 +246,11 @@ var Logger = _webexCore.WebexPlugin.extend({
276
246
  // If a client log level has been explicitly set via config, alway use it.
277
247
  if (this.config.clientLevel) {
278
248
  return this.config.clientLevel;
279
- } // otherwise default to SDK level
280
-
249
+ }
281
250
 
251
+ // otherwise default to SDK level
282
252
  return this.getCurrentLevel();
283
253
  },
284
-
285
254
  /**
286
255
  * Format logs (for upload)
287
256
  *
@@ -297,22 +266,22 @@ var Logger = _webexCore.WebexPlugin.extend({
297
266
  function getDate(log) {
298
267
  return log[1];
299
268
  }
300
-
301
269
  var buffer = [];
302
270
  var clientIndex = 0;
303
271
  var sdkIndex = 0;
304
-
305
272
  if (this.config.separateLogBuffers) {
306
273
  // merge the client and sdk buffers
307
274
  // while we have entries in either buffer
308
275
  while (clientIndex < this.clientBuffer.length || sdkIndex < this.sdkBuffer.length) {
309
276
  // if we have remaining entries in the SDK buffer
310
- if (sdkIndex < this.sdkBuffer.length && ( // and we haven't exhausted all the client buffer entries, or SDK date is before client date
277
+ if (sdkIndex < this.sdkBuffer.length && (
278
+ // and we haven't exhausted all the client buffer entries, or SDK date is before client date
311
279
  clientIndex >= this.clientBuffer.length || new Date(getDate(this.sdkBuffer[sdkIndex])) <= new Date(getDate(this.clientBuffer[clientIndex])))) {
312
280
  // then add to the SDK buffer
313
281
  buffer.push(this.sdkBuffer[sdkIndex]);
314
282
  sdkIndex += 1;
315
- } // otherwise if we haven't exhausted all the client buffer entries, add client entry, whether it was because
283
+ }
284
+ // otherwise if we haven't exhausted all the client buffer entries, add client entry, whether it was because
316
285
  // it was the only remaining entries or date was later (the above if)
317
286
  else if (clientIndex < this.clientBuffer.length) {
318
287
  buffer.push(this.clientBuffer[clientIndex]);
@@ -322,11 +291,11 @@ var Logger = _webexCore.WebexPlugin.extend({
322
291
  } else {
323
292
  buffer = this.buffer;
324
293
  }
325
-
326
294
  return buffer.join('\n');
327
295
  },
328
- version: "3.0.0-beta.4"
296
+ version: "3.0.0-beta.400"
329
297
  });
298
+
330
299
  /**
331
300
  * Creates a logger method
332
301
  *
@@ -342,8 +311,6 @@ var Logger = _webexCore.WebexPlugin.extend({
342
311
  * @memberof Logger
343
312
  * @returns {function} logger method with specified params
344
313
  */
345
-
346
-
347
314
  function makeLoggerMethod(level, impl, type) {
348
315
  var neverPrint = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
349
316
  var alwaysBuffer = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
@@ -357,7 +324,6 @@ function makeLoggerMethod(level, impl, type) {
357
324
  var clientName = logType === LOG_TYPES.SDK ? SDK_LOG_TYPE_NAME : this.config.clientName || logType;
358
325
  var buffer;
359
326
  var historyLength;
360
-
361
327
  if (this.config.separateLogBuffers) {
362
328
  historyLength = this.config.clientHistoryLength ? this.config.clientHistoryLength : this.config.historyLength;
363
329
  buffer = logType === LOG_TYPES.SDK ? this.sdkBuffer : this.clientBuffer;
@@ -365,52 +331,63 @@ function makeLoggerMethod(level, impl, type) {
365
331
  buffer = this.buffer;
366
332
  historyLength = this.config.historyLength;
367
333
  }
368
-
369
334
  try {
370
335
  var shouldPrint = !neverPrint && this.shouldPrint(level, logType);
371
336
  var shouldBuffer = alwaysBuffer || this.shouldBuffer(level);
372
-
373
337
  if (!shouldBuffer && !shouldPrint) {
374
338
  return;
375
339
  }
376
-
377
340
  var filtered = [clientName].concat((0, _toConsumableArray2.default)(this.filter.apply(this, arguments)));
378
341
  var stringified = filtered.map(function (item) {
379
342
  if (item instanceof _webexCore.WebexHttpError) {
380
343
  return item.toString();
381
344
  }
382
-
345
+ if ((0, _typeof2.default)(item) === 'object') {
346
+ var cache = [];
347
+ var returnItem;
348
+ try {
349
+ returnItem = (0, _stringify.default)(item, function (_key, value) {
350
+ if ((0, _typeof2.default)(value) === 'object' && value !== null) {
351
+ if (cache.includes(value)) {
352
+ // Circular reference found, discard key
353
+ return undefined;
354
+ }
355
+ // Store value in our collection
356
+ cache.push(value);
357
+ }
358
+ return value;
359
+ });
360
+ } catch (e) {
361
+ returnItem = "Failed to stringify: ".concat(item);
362
+ }
363
+ cache = null;
364
+ return returnItem;
365
+ }
383
366
  return item;
384
367
  });
385
-
386
368
  if (shouldPrint) {
387
369
  var _console;
388
-
389
370
  // when logging an object in browsers, we tend to get a dynamic
390
371
  // reference, thus going back to look at the logged value doesn't
391
372
  // necessarily show the state at log time, thus we print the stringified
392
373
  // value.
393
374
  var toPrint = _common.inBrowser ? stringified : filtered;
394
- /* istanbul ignore if */
395
375
 
376
+ /* istanbul ignore if */
396
377
  if (process.env.NODE_ENV === 'test' && (0, _has2.default)(this, 'webex.internal.device.url')) {
397
378
  toPrint.unshift(this.webex.internal.device.url.slice(-3));
398
- } // eslint-disable-next-line no-console
399
-
400
-
379
+ }
380
+ // eslint-disable-next-line no-console
401
381
  (_console = console)[impl].apply(_console, (0, _toConsumableArray2.default)(toPrint));
402
382
  }
403
-
404
383
  if (shouldBuffer) {
405
384
  var logDate = new Date();
406
385
  stringified.unshift(logDate.toISOString());
407
386
  stringified.unshift('| '.repeat(this.groupLevel));
408
387
  buffer.push(stringified);
409
-
410
388
  if (buffer.length > historyLength) {
411
- buffer.shift();
389
+ buffer.splice(0, buffer.length - historyLength);
412
390
  }
413
-
414
391
  if (level === 'group') this.groupLevel += 1;
415
392
  if (level === 'groupEnd' && this.groupLevel > 0) this.groupLevel -= 1;
416
393
  }
@@ -423,20 +400,18 @@ function makeLoggerMethod(level, impl, type) {
423
400
  }
424
401
  };
425
402
  }
426
-
427
403
  levels.forEach(function (level) {
428
404
  var impls = fallbacks[level];
429
405
  var impl = level;
430
-
431
406
  if (impls) {
432
- impls = impls.slice(); // eslint-disable-next-line no-console
433
-
407
+ impls = impls.slice();
408
+ // eslint-disable-next-line no-console
434
409
  while (!console[impl]) {
435
410
  impl = impls.pop();
436
411
  }
437
- } // eslint-disable-next-line complexity
438
-
412
+ }
439
413
 
414
+ // eslint-disable-next-line complexity
440
415
  Logger.prototype["client_".concat(level)] = makeLoggerMethod(level, impl, LOG_TYPES.CLIENT);
441
416
  Logger.prototype[level] = makeLoggerMethod(level, impl, LOG_TYPES.SDK);
442
417
  });
@@ -1 +1 @@
1
- {"version":3,"names":["precedence","silent","group","groupEnd","error","warn","log","info","debug","trace","levels","filter","level","fallbacks","LOG_TYPES","SDK","CLIENT","SDK_LOG_TYPE_NAME","authTokenKeyPattern","walkAndFilter","object","visited","includes","push","map","o","patterns","containsEmails","test","replace","key","value","Logger","WebexPlugin","extend","namespace","derived","cache","fn","getCurrentLevel","client_level","getCurrentClientLevel","session","buffer","type","default","groupLevel","sdkBuffer","clientBuffer","args","arg","Error","process","env","NODE_ENV","inBrowser","ret","toString","stack","shouldPrint","shouldBuffer","config","bufferLogLevel","WEBEX_LOG_LEVEL","webex","internal","device","features","developer","get","clientLevel","formatLogs","getDate","clientIndex","sdkIndex","separateLogBuffers","length","Date","join","makeLoggerMethod","impl","neverPrint","alwaysBuffer","wrappedConsoleMethod","logType","clientName","historyLength","clientHistoryLength","filtered","stringified","item","WebexHttpError","toPrint","unshift","url","slice","console","logDate","toISOString","repeat","shift","reason","forEach","impls","pop","prototype","client_logToBuffer","logToBuffer"],"sources":["logger.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {inBrowser, patterns} from '@webex/common';\nimport {\n WebexHttpError,\n WebexPlugin\n} from '@webex/webex-core';\nimport {\n cloneDeep,\n has,\n isArray,\n isObject,\n isString\n} from 'lodash';\n\nconst precedence = {\n silent: 0,\n group: 1,\n groupEnd: 2,\n error: 3,\n warn: 4,\n log: 5,\n info: 6,\n debug: 7,\n trace: 8\n};\n\nexport const levels = Object.keys(precedence).filter((level) => level !== 'silent');\n\nconst fallbacks = {\n error: ['log'],\n warn: ['error', 'log'],\n info: ['log'],\n debug: ['info', 'log'],\n trace: ['debug', 'info', 'log']\n};\n\nconst LOG_TYPES = {\n SDK: 'sdk',\n CLIENT: 'client'\n};\n\nconst SDK_LOG_TYPE_NAME = 'wx-js-sdk';\n\nconst authTokenKeyPattern = /[Aa]uthorization/;\n\n/**\n * Recursively strips \"authorization\" fields from the specified object\n * @param {Object} object\n * @param {Array<mixed>} [visited]\n * @private\n * @returns {Object}\n */\nfunction walkAndFilter(object, visited = []) {\n if (visited.includes(object)) {\n // Prevent circular references\n return object;\n }\n\n visited.push(object);\n\n if (isArray(object)) {\n return object.map((o) => walkAndFilter(o, visited));\n }\n if (!isObject(object)) {\n if (isString(object)) {\n if (patterns.containsEmails.test(object)) {\n return object.replace(patterns.containsEmails, '[REDACTED]');\n }\n }\n\n return object;\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (authTokenKeyPattern.test(key)) {\n Reflect.deleteProperty(object, key);\n }\n else {\n object[key] = walkAndFilter(value, visited);\n }\n }\n\n return object;\n}\n\n/**\n * @class\n */\nconst Logger = WebexPlugin.extend({\n namespace: 'Logger',\n\n derived: {\n level: {\n cache: false,\n fn() {\n return this.getCurrentLevel();\n }\n },\n client_level: {\n cache: false,\n fn() {\n return this.getCurrentClientLevel();\n }\n }\n },\n session: {\n // for when configured to use single buffer\n buffer: {\n type: 'array',\n default() {\n return [];\n }\n },\n groupLevel: {\n type: 'number',\n default() {\n return 0;\n }\n },\n // for when configured to use separate buffers\n sdkBuffer: {\n type: 'array',\n default() {\n return [];\n }\n },\n clientBuffer: {\n type: 'array',\n default() {\n return [];\n }\n }\n },\n\n /**\n * Ensures auth headers don't get printed in logs\n * @param {Array<mixed>} args\n * @private\n * @memberof Logger\n * @returns {Array<mixed>}\n */\n filter(...args) {\n return args.map((arg) => {\n // WebexHttpError already ensures auth tokens don't get printed, so, no\n // need to alter it here.\n if (arg instanceof Error) {\n // karma logs won't print subclassed errors correctly, so we need\n // explicitly call their tostring methods.\n if (process.env.NODE_ENV === 'test' && inBrowser) {\n let ret = arg.toString();\n\n ret += 'BEGIN STACK';\n ret += arg.stack;\n ret += 'END STACK';\n\n return ret;\n }\n\n return arg;\n }\n\n arg = cloneDeep(arg);\n\n return walkAndFilter(arg);\n });\n },\n\n /**\n * Determines if the current level allows logs at the specified level to be\n * printed\n * @param {string} level\n * @param {string} type type of log, SDK or client\n * @private\n * @memberof Logger\n * @returns {boolean}\n */\n shouldPrint(level, type = LOG_TYPES.SDK) {\n return precedence[level] <= precedence[type === LOG_TYPES.SDK ? this.getCurrentLevel() : this.getCurrentClientLevel()];\n },\n\n /**\n * Determines if the current level allows logs at the specified level to be\n * put into the log buffer. We're configuring it omit trace and debug logs\n * because there are *a lot* of debug logs that really don't provide value at\n * runtime (they're helpful for debugging locally, but really just pollute the\n * uploaded logs and push useful info out).\n * @param {string} level\n * @param {string} type type of log, SDK or client\n * @private\n * @memberof Logger\n * @returns {boolean}\n */\n shouldBuffer(level) {\n return precedence[level] <= (this.config.bufferLogLevel ? precedence[this.config.bufferLogLevel] : precedence.info);\n },\n\n /**\n * Indicates the current SDK log level based on env vars, feature toggles, and\n * user type.\n * @instance\n * @memberof Logger\n * @private\n * @memberof Logger\n * @returns {string}\n */\n // eslint-disable-next-line complexity\n getCurrentLevel() {\n // If a level has been explicitly set via config, alway use it.\n if (this.config.level) {\n return this.config.level;\n }\n\n if (levels.includes(process.env.WEBEX_LOG_LEVEL)) {\n return process.env.WEBEX_LOG_LEVEL;\n }\n\n // Always use debug-level logging in test mode;\n if (process.env.NODE_ENV === 'test') {\n return 'trace';\n }\n\n // Use server-side-feature toggles to configure log levels\n const level = this.webex.internal.device && this.webex.internal.device.features.developer.get('log-level');\n\n if (level) {\n if (levels.includes(level)) {\n return level;\n }\n }\n\n return 'error';\n },\n\n /**\n * Indicates the current client log level based on config, defaults to SDK level\n * @instance\n * @memberof Logger\n * @private\n * @memberof Logger\n * @returns {string}\n */\n getCurrentClientLevel() {\n // If a client log level has been explicitly set via config, alway use it.\n if (this.config.clientLevel) {\n return this.config.clientLevel;\n }\n\n // otherwise default to SDK level\n return this.getCurrentLevel();\n },\n\n /**\n * Format logs (for upload)\n *\n * If separate client, SDK buffers is configured, merge the buffers, if configured\n *\n * @instance\n * @memberof Logger\n * @public\n * @memberof Logger\n * @returns {string} formatted buffer\n */\n formatLogs() {\n function getDate(log) {\n return log[1];\n }\n let buffer = [];\n let clientIndex = 0;\n let sdkIndex = 0;\n\n if (this.config.separateLogBuffers) {\n // merge the client and sdk buffers\n // while we have entries in either buffer\n while (clientIndex < this.clientBuffer.length || sdkIndex < this.sdkBuffer.length) {\n // if we have remaining entries in the SDK buffer\n if (sdkIndex < this.sdkBuffer.length &&\n // and we haven't exhausted all the client buffer entries, or SDK date is before client date\n (clientIndex >= this.clientBuffer.length ||\n (new Date(getDate(this.sdkBuffer[sdkIndex])) <= new Date(getDate(this.clientBuffer[clientIndex]))))) {\n // then add to the SDK buffer\n buffer.push(this.sdkBuffer[sdkIndex]);\n sdkIndex += 1;\n }\n // otherwise if we haven't exhausted all the client buffer entries, add client entry, whether it was because\n // it was the only remaining entries or date was later (the above if)\n else if (clientIndex < this.clientBuffer.length) {\n buffer.push(this.clientBuffer[clientIndex]);\n clientIndex += 1;\n }\n }\n }\n else {\n buffer = this.buffer;\n }\n\n return buffer.join('\\n');\n }\n});\n\n/**\n * Creates a logger method\n *\n *\n * @param {string} level level to create (info, error, warn, etc.)\n * @param {string} impl the level to use when writing to console\n * @param {string} type type of log, SDK or client\n * @param {bool} neverPrint function never prints to console\n * @param {bool} alwaysBuffer function always logs to log buffer\n * @instance\n * @memberof Logger\n * @private\n * @memberof Logger\n * @returns {function} logger method with specified params\n */\nfunction makeLoggerMethod(level, impl, type, neverPrint = false, alwaysBuffer = false) {\n // Much of the complexity in the following function is due to a test-mode-only\n // helper\n return function wrappedConsoleMethod(...args) {\n // it would be easier to just pass in the name and buffer here, but the config isn't completely initialized\n // in Ampersand, even if the initialize method is used to set this up. so we keep the type to achieve\n // a sort of late binding to allow retrieving a name from config.\n const logType = type;\n const clientName = logType === LOG_TYPES.SDK ? SDK_LOG_TYPE_NAME : (this.config.clientName || logType);\n\n let buffer;\n let historyLength;\n\n if (this.config.separateLogBuffers) {\n historyLength = this.config.clientHistoryLength ? this.config.clientHistoryLength : this.config.historyLength;\n buffer = logType === LOG_TYPES.SDK ? this.sdkBuffer : this.clientBuffer;\n }\n else {\n buffer = this.buffer;\n historyLength = this.config.historyLength;\n }\n\n try {\n const shouldPrint = !neverPrint && this.shouldPrint(level, logType);\n const shouldBuffer = alwaysBuffer || this.shouldBuffer(level);\n\n if (!shouldBuffer && !shouldPrint) {\n return;\n }\n\n const filtered = [clientName, ...this.filter(...args)];\n const stringified = filtered.map((item) => {\n if (item instanceof WebexHttpError) {\n return item.toString();\n }\n\n return item;\n });\n\n if (shouldPrint) {\n // when logging an object in browsers, we tend to get a dynamic\n // reference, thus going back to look at the logged value doesn't\n // necessarily show the state at log time, thus we print the stringified\n // value.\n const toPrint = inBrowser ? stringified : filtered;\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'test' && has(this, 'webex.internal.device.url')) {\n toPrint.unshift(this.webex.internal.device.url.slice(-3));\n }\n // eslint-disable-next-line no-console\n console[impl](...toPrint);\n }\n\n if (shouldBuffer) {\n const logDate = new Date();\n\n stringified.unshift(logDate.toISOString());\n stringified.unshift('| '.repeat(this.groupLevel));\n buffer.push(stringified);\n if (buffer.length > historyLength) {\n buffer.shift();\n }\n if (level === 'group') this.groupLevel += 1;\n if (level === 'groupEnd' && this.groupLevel > 0) this.groupLevel -= 1;\n }\n }\n catch (reason) {\n if (!neverPrint) {\n /* istanbul ignore next */\n // eslint-disable-next-line no-console\n console.warn(`failed to execute Logger#${level}`, reason);\n }\n }\n };\n}\n\nlevels.forEach((level) => {\n let impls = fallbacks[level];\n let impl = level;\n\n if (impls) {\n impls = impls.slice();\n // eslint-disable-next-line no-console\n while (!console[impl]) {\n impl = impls.pop();\n }\n }\n\n\n // eslint-disable-next-line complexity\n Logger.prototype[`client_${level}`] = makeLoggerMethod(level, impl, LOG_TYPES.CLIENT);\n Logger.prototype[level] = makeLoggerMethod(level, impl, LOG_TYPES.SDK);\n});\n\nLogger.prototype.client_logToBuffer =\n makeLoggerMethod(levels.info, levels.info, LOG_TYPES.CLIENT, true, true);\nLogger.prototype.logToBuffer = makeLoggerMethod(levels.info, levels.info, LOG_TYPES.SDK, true, true);\n\nexport default Logger;\n"],"mappings":"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"}
1
+ {"version":3,"names":["precedence","silent","group","groupEnd","error","warn","log","info","debug","trace","levels","filter","level","fallbacks","LOG_TYPES","SDK","CLIENT","SDK_LOG_TYPE_NAME","authTokenKeyPattern","walkAndFilter","object","visited","includes","push","map","o","patterns","containsEmails","test","replace","containsMTID","key","value","Logger","WebexPlugin","extend","namespace","derived","cache","fn","getCurrentLevel","client_level","getCurrentClientLevel","session","buffer","type","default","groupLevel","sdkBuffer","clientBuffer","args","arg","Error","process","env","NODE_ENV","inBrowser","ret","toString","stack","shouldPrint","shouldBuffer","config","bufferLogLevel","WEBEX_LOG_LEVEL","webex","internal","device","features","developer","get","clientLevel","formatLogs","getDate","clientIndex","sdkIndex","separateLogBuffers","length","Date","join","makeLoggerMethod","impl","neverPrint","alwaysBuffer","wrappedConsoleMethod","logType","clientName","historyLength","clientHistoryLength","filtered","stringified","item","WebexHttpError","returnItem","_key","undefined","e","toPrint","unshift","url","slice","console","logDate","toISOString","repeat","splice","reason","forEach","impls","pop","prototype","client_logToBuffer","logToBuffer"],"sources":["logger.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {inBrowser, patterns} from '@webex/common';\nimport {WebexHttpError, WebexPlugin} from '@webex/webex-core';\nimport {cloneDeep, has, isArray, isObject, isString} from 'lodash';\n\nconst precedence = {\n silent: 0,\n group: 1,\n groupEnd: 2,\n error: 3,\n warn: 4,\n log: 5,\n info: 6,\n debug: 7,\n trace: 8,\n};\n\nexport const levels = Object.keys(precedence).filter((level) => level !== 'silent');\n\nconst fallbacks = {\n error: ['log'],\n warn: ['error', 'log'],\n info: ['log'],\n debug: ['info', 'log'],\n trace: ['debug', 'info', 'log'],\n};\n\nconst LOG_TYPES = {\n SDK: 'sdk',\n CLIENT: 'client',\n};\n\nconst SDK_LOG_TYPE_NAME = 'wx-js-sdk';\n\nconst authTokenKeyPattern = /[Aa]uthorization/;\n\n/**\n * Recursively strips \"authorization\" fields from the specified object\n * @param {Object} object\n * @param {Array<mixed>} [visited]\n * @private\n * @returns {Object}\n */\nfunction walkAndFilter(object, visited = []) {\n if (visited.includes(object)) {\n // Prevent circular references\n return object;\n }\n\n visited.push(object);\n\n if (isArray(object)) {\n return object.map((o) => walkAndFilter(o, visited));\n }\n if (!isObject(object)) {\n if (isString(object)) {\n if (patterns.containsEmails.test(object)) {\n return object.replace(patterns.containsEmails, '[REDACTED]');\n }\n if (patterns.containsMTID.test(object)) {\n return object.replace(patterns.containsMTID, '$1[REDACTED]');\n }\n }\n\n return object;\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (authTokenKeyPattern.test(key)) {\n Reflect.deleteProperty(object, key);\n } else {\n object[key] = walkAndFilter(value, visited);\n }\n }\n\n return object;\n}\n\n/**\n * @class\n */\nconst Logger = WebexPlugin.extend({\n namespace: 'Logger',\n\n derived: {\n level: {\n cache: false,\n fn() {\n return this.getCurrentLevel();\n },\n },\n client_level: {\n cache: false,\n fn() {\n return this.getCurrentClientLevel();\n },\n },\n },\n session: {\n // for when configured to use single buffer\n buffer: {\n type: 'array',\n default() {\n return [];\n },\n },\n groupLevel: {\n type: 'number',\n default() {\n return 0;\n },\n },\n // for when configured to use separate buffers\n sdkBuffer: {\n type: 'array',\n default() {\n return [];\n },\n },\n clientBuffer: {\n type: 'array',\n default() {\n return [];\n },\n },\n },\n\n /**\n * Ensures auth headers don't get printed in logs\n * @param {Array<mixed>} args\n * @private\n * @memberof Logger\n * @returns {Array<mixed>}\n */\n filter(...args) {\n return args.map((arg) => {\n // WebexHttpError already ensures auth tokens don't get printed, so, no\n // need to alter it here.\n if (arg instanceof Error) {\n // karma logs won't print subclassed errors correctly, so we need\n // explicitly call their tostring methods.\n if (process.env.NODE_ENV === 'test' && inBrowser) {\n let ret = arg.toString();\n\n ret += 'BEGIN STACK';\n ret += arg.stack;\n ret += 'END STACK';\n\n return ret;\n }\n\n return arg;\n }\n\n arg = cloneDeep(arg);\n\n return walkAndFilter(arg);\n });\n },\n\n /**\n * Determines if the current level allows logs at the specified level to be\n * printed\n * @param {string} level\n * @param {string} type type of log, SDK or client\n * @private\n * @memberof Logger\n * @returns {boolean}\n */\n shouldPrint(level, type = LOG_TYPES.SDK) {\n return (\n precedence[level] <=\n precedence[type === LOG_TYPES.SDK ? this.getCurrentLevel() : this.getCurrentClientLevel()]\n );\n },\n\n /**\n * Determines if the current level allows logs at the specified level to be\n * put into the log buffer. We're configuring it omit trace and debug logs\n * because there are *a lot* of debug logs that really don't provide value at\n * runtime (they're helpful for debugging locally, but really just pollute the\n * uploaded logs and push useful info out).\n * @param {string} level\n * @param {string} type type of log, SDK or client\n * @private\n * @memberof Logger\n * @returns {boolean}\n */\n shouldBuffer(level) {\n return (\n precedence[level] <=\n (this.config.bufferLogLevel ? precedence[this.config.bufferLogLevel] : precedence.info)\n );\n },\n\n /**\n * Indicates the current SDK log level based on env vars, feature toggles, and\n * user type.\n * @instance\n * @memberof Logger\n * @private\n * @memberof Logger\n * @returns {string}\n */\n // eslint-disable-next-line complexity\n getCurrentLevel() {\n // If a level has been explicitly set via config, alway use it.\n if (this.config.level) {\n return this.config.level;\n }\n\n if (levels.includes(process.env.WEBEX_LOG_LEVEL)) {\n return process.env.WEBEX_LOG_LEVEL;\n }\n\n // Always use debug-level logging in test mode;\n if (process.env.NODE_ENV === 'test') {\n return 'trace';\n }\n\n // Use server-side-feature toggles to configure log levels\n const level =\n this.webex.internal.device && this.webex.internal.device.features.developer.get('log-level');\n\n if (level) {\n if (levels.includes(level)) {\n return level;\n }\n }\n\n return 'error';\n },\n\n /**\n * Indicates the current client log level based on config, defaults to SDK level\n * @instance\n * @memberof Logger\n * @private\n * @memberof Logger\n * @returns {string}\n */\n getCurrentClientLevel() {\n // If a client log level has been explicitly set via config, alway use it.\n if (this.config.clientLevel) {\n return this.config.clientLevel;\n }\n\n // otherwise default to SDK level\n return this.getCurrentLevel();\n },\n\n /**\n * Format logs (for upload)\n *\n * If separate client, SDK buffers is configured, merge the buffers, if configured\n *\n * @instance\n * @memberof Logger\n * @public\n * @memberof Logger\n * @returns {string} formatted buffer\n */\n formatLogs() {\n function getDate(log) {\n return log[1];\n }\n let buffer = [];\n let clientIndex = 0;\n let sdkIndex = 0;\n\n if (this.config.separateLogBuffers) {\n // merge the client and sdk buffers\n // while we have entries in either buffer\n while (clientIndex < this.clientBuffer.length || sdkIndex < this.sdkBuffer.length) {\n // if we have remaining entries in the SDK buffer\n if (\n sdkIndex < this.sdkBuffer.length &&\n // and we haven't exhausted all the client buffer entries, or SDK date is before client date\n (clientIndex >= this.clientBuffer.length ||\n new Date(getDate(this.sdkBuffer[sdkIndex])) <=\n new Date(getDate(this.clientBuffer[clientIndex])))\n ) {\n // then add to the SDK buffer\n buffer.push(this.sdkBuffer[sdkIndex]);\n sdkIndex += 1;\n }\n // otherwise if we haven't exhausted all the client buffer entries, add client entry, whether it was because\n // it was the only remaining entries or date was later (the above if)\n else if (clientIndex < this.clientBuffer.length) {\n buffer.push(this.clientBuffer[clientIndex]);\n clientIndex += 1;\n }\n }\n } else {\n buffer = this.buffer;\n }\n\n return buffer.join('\\n');\n },\n});\n\n/**\n * Creates a logger method\n *\n *\n * @param {string} level level to create (info, error, warn, etc.)\n * @param {string} impl the level to use when writing to console\n * @param {string} type type of log, SDK or client\n * @param {bool} neverPrint function never prints to console\n * @param {bool} alwaysBuffer function always logs to log buffer\n * @instance\n * @memberof Logger\n * @private\n * @memberof Logger\n * @returns {function} logger method with specified params\n */\nfunction makeLoggerMethod(level, impl, type, neverPrint = false, alwaysBuffer = false) {\n // Much of the complexity in the following function is due to a test-mode-only\n // helper\n return function wrappedConsoleMethod(...args) {\n // it would be easier to just pass in the name and buffer here, but the config isn't completely initialized\n // in Ampersand, even if the initialize method is used to set this up. so we keep the type to achieve\n // a sort of late binding to allow retrieving a name from config.\n const logType = type;\n const clientName =\n logType === LOG_TYPES.SDK ? SDK_LOG_TYPE_NAME : this.config.clientName || logType;\n\n let buffer;\n let historyLength;\n\n if (this.config.separateLogBuffers) {\n historyLength = this.config.clientHistoryLength\n ? this.config.clientHistoryLength\n : this.config.historyLength;\n buffer = logType === LOG_TYPES.SDK ? this.sdkBuffer : this.clientBuffer;\n } else {\n buffer = this.buffer;\n historyLength = this.config.historyLength;\n }\n\n try {\n const shouldPrint = !neverPrint && this.shouldPrint(level, logType);\n const shouldBuffer = alwaysBuffer || this.shouldBuffer(level);\n\n if (!shouldBuffer && !shouldPrint) {\n return;\n }\n\n const filtered = [clientName, ...this.filter(...args)];\n const stringified = filtered.map((item) => {\n if (item instanceof WebexHttpError) {\n return item.toString();\n }\n if (typeof item === 'object') {\n let cache = [];\n let returnItem;\n try {\n returnItem = JSON.stringify(item, (_key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (cache.includes(value)) {\n // Circular reference found, discard key\n return undefined;\n }\n // Store value in our collection\n cache.push(value);\n }\n\n return value;\n });\n } catch (e) {\n returnItem = `Failed to stringify: ${item}`;\n }\n cache = null;\n\n return returnItem;\n }\n\n return item;\n });\n\n if (shouldPrint) {\n // when logging an object in browsers, we tend to get a dynamic\n // reference, thus going back to look at the logged value doesn't\n // necessarily show the state at log time, thus we print the stringified\n // value.\n const toPrint = inBrowser ? stringified : filtered;\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'test' && has(this, 'webex.internal.device.url')) {\n toPrint.unshift(this.webex.internal.device.url.slice(-3));\n }\n // eslint-disable-next-line no-console\n console[impl](...toPrint);\n }\n\n if (shouldBuffer) {\n const logDate = new Date();\n\n stringified.unshift(logDate.toISOString());\n stringified.unshift('| '.repeat(this.groupLevel));\n buffer.push(stringified);\n if (buffer.length > historyLength) {\n buffer.splice(0, buffer.length - historyLength);\n }\n if (level === 'group') this.groupLevel += 1;\n if (level === 'groupEnd' && this.groupLevel > 0) this.groupLevel -= 1;\n }\n } catch (reason) {\n if (!neverPrint) {\n /* istanbul ignore next */\n // eslint-disable-next-line no-console\n console.warn(`failed to execute Logger#${level}`, reason);\n }\n }\n };\n}\n\nlevels.forEach((level) => {\n let impls = fallbacks[level];\n let impl = level;\n\n if (impls) {\n impls = impls.slice();\n // eslint-disable-next-line no-console\n while (!console[impl]) {\n impl = impls.pop();\n }\n }\n\n // eslint-disable-next-line complexity\n Logger.prototype[`client_${level}`] = makeLoggerMethod(level, impl, LOG_TYPES.CLIENT);\n Logger.prototype[level] = makeLoggerMethod(level, impl, LOG_TYPES.SDK);\n});\n\nLogger.prototype.client_logToBuffer = makeLoggerMethod(\n levels.info,\n levels.info,\n LOG_TYPES.CLIENT,\n true,\n true\n);\nLogger.prototype.logToBuffer = makeLoggerMethod(\n levels.info,\n levels.info,\n LOG_TYPES.SDK,\n true,\n true\n);\n\nexport default Logger;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-logger",
3
- "version": "3.0.0-beta.4",
3
+ "version": "3.0.0-beta.400",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -23,12 +23,12 @@
23
23
  "sinon": "^9.2.4"
24
24
  },
25
25
  "dependencies": {
26
- "@webex/common": "3.0.0-beta.4",
27
- "@webex/plugin-logger": "3.0.0-beta.4",
28
- "@webex/test-helper-chai": "3.0.0-beta.4",
29
- "@webex/test-helper-mocha": "3.0.0-beta.4",
30
- "@webex/test-helper-mock-webex": "3.0.0-beta.4",
31
- "@webex/webex-core": "3.0.0-beta.4",
26
+ "@webex/common": "3.0.0-beta.400",
27
+ "@webex/plugin-logger": "3.0.0-beta.400",
28
+ "@webex/test-helper-chai": "3.0.0-beta.400",
29
+ "@webex/test-helper-mocha": "3.0.0-beta.400",
30
+ "@webex/test-helper-mock-webex": "3.0.0-beta.400",
31
+ "@webex/webex-core": "3.0.0-beta.400",
32
32
  "lodash": "^4.17.21"
33
33
  }
34
34
  }
package/src/config.js CHANGED
@@ -18,6 +18,6 @@
18
18
  export default {
19
19
  logger: {
20
20
  level: process.env.WEBEX_LOG_LEVEL,
21
- historyLength: 1000
22
- }
21
+ historyLength: 10000,
22
+ },
23
23
  };
package/src/index.js CHANGED
@@ -9,10 +9,7 @@ import config from './config';
9
9
 
10
10
  registerPlugin('logger', Logger, {
11
11
  config,
12
- replace: true
12
+ replace: true,
13
13
  });
14
14
 
15
- export {
16
- default,
17
- levels
18
- } from './logger';
15
+ export {default, levels} from './logger';