123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.logLevels = exports.default = exports.LoggerController = exports.LogOrder = exports.LogLevel = void 0;
- var _node = require("parse/node");
- var _AdaptableController = _interopRequireDefault(require("./AdaptableController"));
- var _LoggerAdapter = require("../Adapters/Logger/LoggerAdapter");
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
- const MILLISECONDS_IN_A_DAY = 24 * 60 * 60 * 1000;
- const LOG_STRING_TRUNCATE_LENGTH = 1000;
- const truncationMarker = '... (truncated)';
- const LogLevel = exports.LogLevel = {
- INFO: 'info',
- ERROR: 'error'
- };
- const LogOrder = exports.LogOrder = {
- DESCENDING: 'desc',
- ASCENDING: 'asc'
- };
- const logLevels = exports.logLevels = ['error', 'warn', 'info', 'debug', 'verbose', 'silly', 'silent'];
- class LoggerController extends _AdaptableController.default {
- constructor(adapter, appId, options = {
- logLevel: 'info'
- }) {
- super(adapter, appId, options);
- let level = 'info';
- if (options.verbose) {
- level = 'verbose';
- }
- if (options.logLevel) {
- level = options.logLevel;
- }
- const index = logLevels.indexOf(level);
- logLevels.forEach((level, levelIndex) => {
- if (levelIndex > index) {
-
- this[level] = () => {};
- }
- });
- }
- maskSensitiveUrl(path) {
- const urlString = 'http://localhost' + path;
- const urlObj = new URL(urlString);
- const query = urlObj.searchParams;
- let sanitizedQuery = '?';
- for (const [key, value] of query) {
- if (key !== 'password') {
-
- sanitizedQuery += key + '=' + value + '&';
- } else {
-
- sanitizedQuery += key + '=' + '********' + '&';
- }
- }
-
- sanitizedQuery = sanitizedQuery.slice(0, -1);
-
- return urlObj.pathname + sanitizedQuery;
- }
- maskSensitive(argArray) {
- return argArray.map(e => {
- if (!e) {
- return e;
- }
- if (typeof e === 'string') {
- return e.replace(/(password".?:.?")[^"]*"/g, '$1********"');
- }
-
-
- if (e.url) {
-
- if (typeof e.url === 'string') {
- e.url = this.maskSensitiveUrl(e.url);
- } else if (Array.isArray(e.url)) {
-
- e.url = e.url.map(item => {
- if (typeof item === 'string') {
- return this.maskSensitiveUrl(item);
- }
- return item;
- });
- }
- }
- if (e.body) {
- for (const key of Object.keys(e.body)) {
- if (key === 'password') {
- e.body[key] = '********';
- break;
- }
- }
- }
- if (e.params) {
- for (const key of Object.keys(e.params)) {
- if (key === 'password') {
- e.params[key] = '********';
- break;
- }
- }
- }
- return e;
- });
- }
- log(level, args) {
-
- args = this.maskSensitive([...args]);
- args = [].concat(level, args.map(arg => {
- if (typeof arg === 'function') {
- return arg();
- }
- return arg;
- }));
- this.adapter.log.apply(this.adapter, args);
- }
- info() {
- return this.log('info', arguments);
- }
- error() {
- return this.log('error', arguments);
- }
- warn() {
- return this.log('warn', arguments);
- }
- verbose() {
- return this.log('verbose', arguments);
- }
- debug() {
- return this.log('debug', arguments);
- }
- silly() {
- return this.log('silly', arguments);
- }
- logRequest({
- method,
- url,
- headers,
- body
- }) {
- this.verbose(() => {
- const stringifiedBody = JSON.stringify(body, null, 2);
- return `REQUEST for [${method}] ${url}: ${stringifiedBody}`;
- }, {
- method,
- url,
- headers,
- body
- });
- }
- logResponse({
- method,
- url,
- result
- }) {
- this.verbose(() => {
- const stringifiedResponse = JSON.stringify(result, null, 2);
- return `RESPONSE from [${method}] ${url}: ${stringifiedResponse}`;
- }, {
- result: result
- });
- }
-
- static validDateTime(date) {
- if (!date) {
- return null;
- }
- date = new Date(date);
- if (!isNaN(date.getTime())) {
- return date;
- }
- return null;
- }
- truncateLogMessage(string) {
- if (string && string.length > LOG_STRING_TRUNCATE_LENGTH) {
- const truncated = string.substring(0, LOG_STRING_TRUNCATE_LENGTH) + truncationMarker;
- return truncated;
- }
- return string;
- }
- static parseOptions(options = {}) {
- const from = LoggerController.validDateTime(options.from) || new Date(Date.now() - 7 * MILLISECONDS_IN_A_DAY);
- const until = LoggerController.validDateTime(options.until) || new Date();
- const size = Number(options.size) || 10;
- const order = options.order || LogOrder.DESCENDING;
- const level = options.level || LogLevel.INFO;
- return {
- from,
- until,
- size,
- order,
- level
- };
- }
-
-
-
-
-
-
-
- getLogs(options = {}) {
- if (!this.adapter) {
- throw new _node.Parse.Error(_node.Parse.Error.PUSH_MISCONFIGURED, 'Logger adapter is not available');
- }
- if (typeof this.adapter.query !== 'function') {
- throw new _node.Parse.Error(_node.Parse.Error.PUSH_MISCONFIGURED, 'Querying logs is not supported with this adapter');
- }
- options = LoggerController.parseOptions(options);
- return this.adapter.query(options);
- }
- expectedAdapterType() {
- return _LoggerAdapter.LoggerAdapter;
- }
- }
- exports.LoggerController = LoggerController;
- var _default = exports.default = LoggerController;
|