UNPKG

rollbar

Version:

Effortlessly track and debug errors in your JavaScript applications with Rollbar. This package includes advanced error tracking features and an intuitive interface to help you identify and fix issues more quickly.

93 lines (80 loc) 2.06 kB
var _ = require('./utility'); var traverse = require('./utility/traverse'); function scrub(data, scrubFields, scrubPaths) { scrubFields = scrubFields || []; if (scrubPaths) { for (var i = 0; i < scrubPaths.length; ++i) { scrubPath(data, scrubPaths[i]); } } var paramRes = _getScrubFieldRegexs(scrubFields); var queryRes = _getScrubQueryParamRegexs(scrubFields); function redactQueryParam(dummy0, paramPart) { return paramPart + _.redact(); } function paramScrubber(v) { var i; if (_.isType(v, 'string')) { for (i = 0; i < queryRes.length; ++i) { v = v.replace(queryRes[i], redactQueryParam); } } return v; } function valScrubber(k, v) { var i; for (i = 0; i < paramRes.length; ++i) { if (paramRes[i].test(k)) { v = _.redact(); break; } } return v; } function scrubber(k, v, seen) { var tmpV = valScrubber(k, v); if (tmpV === v) { if (_.isType(v, 'object') || _.isType(v, 'array')) { return traverse(v, scrubber, seen); } return paramScrubber(tmpV); } else { return tmpV; } } return traverse(data, scrubber); } function scrubPath(obj, path) { var keys = path.split('.'); var last = keys.length - 1; try { for (var i = 0; i <= last; ++i) { if (i < last) { obj = obj[keys[i]]; } else { obj[keys[i]] = _.redact(); } } } catch (e) { // Missing key is OK; } } function _getScrubFieldRegexs(scrubFields) { var ret = []; var pat; for (var i = 0; i < scrubFields.length; ++i) { pat = '^\\[?(%5[bB])?' + scrubFields[i] + '\\[?(%5[bB])?\\]?(%5[dD])?$'; ret.push(new RegExp(pat, 'i')); } return ret; } function _getScrubQueryParamRegexs(scrubFields) { var ret = []; var pat; for (var i = 0; i < scrubFields.length; ++i) { pat = '\\[?(%5[bB])?' + scrubFields[i] + '\\[?(%5[bB])?\\]?(%5[dD])?'; ret.push(new RegExp('(' + pat + '=)([^&\\n]+)', 'igm')); } return ret; } module.exports = scrub;