UNPKG

safe-logging-replit

Version:

A wrapper for the Node.js console to safely log strings to the console avoiding DoS vulnerabilities on Replit.

68 lines (67 loc) 2.35 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeConsoleSafe = exports.forbiddenBitcoinStr = void 0; exports.forbiddenBitcoinStr = atob('c3RyYXR1bSt0Y3A6Ly9wb29sLmJpdGNvaW4uY29tOjMzMzM='); ; function safeLog(str, opts) { if (opts === void 0) { opts = {}; } opts = __assign({ newLine: true, dev: process.stdout }, opts); if (!opts.dev) { throw new TypeError('Must specify a dev to safe log to'); } var lines = Math.ceil(str.length / opts.dev.columns); var chunks = []; for (var line = 0; line < lines; line++) { var start = opts.dev.columns * line; var chunk = str.substring(start, start + opts.dev.columns); var moreChunks = chunk.split(/\n/g); chunks.push.apply(chunks, moreChunks); } for (var _i = 0, chunks_1 = chunks; _i < chunks_1.length; _i++) { var chunk = chunks_1[_i]; var charsRev = chunk.split('').reverse(); var i = chunk.length - 1; for (var _a = 0, charsRev_1 = charsRev; _a < charsRev_1.length; _a++) { var char = charsRev_1[_a]; opts.dev.write("\r".concat(' '.repeat(i)).concat(char)); i--; } if (opts.newLine) { opts.dev.write('\r\n'); } } if (!chunks.length && opts.newLine) { opts.dev.write('\r\n'); } } function safeLogFunc() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } safeLog((args || []) .map(function (arg) { return ((arg === null || arg === void 0 ? void 0 : arg.toString()) || ''); }) .join(' '), { dev: this // TODO }); } function makeConsoleSafe(console) { console.log = safeLogFunc.bind(process.stdout); console.error = safeLogFunc.bind(process.stderr); console.info = console.log; console.warn = console.log; return console; } exports.makeConsoleSafe = makeConsoleSafe;