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
JavaScript
;
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;