Skip to content

Commit 29ee9e3

Browse files
committed
Release v2.18.0
1 parent aaf6770 commit 29ee9e3

26 files changed

+306
-46
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Rollbar.js
22

33

4-
[![Build Status](https://travis-ci.org/rollbar/rollbar.js.svg?branch=v2.17.0)](https://travis-ci.org/rollbar/rollbar.js)
4+
[![Build Status](https://travis-ci.org/rollbar/rollbar.js.svg?branch=v2.18.0)](https://travis-ci.org/rollbar/rollbar.js)
55
[![Code Quality: Javascript](https://img.shields.io/lgtm/grade/javascript/g/rollbar/rollbar.js.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/rollbar/rollbar.js/context:javascript)
66
[![Total Alerts](https://img.shields.io/lgtm/alerts/g/rollbar/rollbar.js.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/rollbar/rollbar.js/alerts)
77

dist/rollbar.js

+71-6
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,27 @@ function setCustomItemKeys(item, custom) {
599599
}
600600
}
601601

602+
function addErrorContext(item, errors) {
603+
var custom = item.data.custom || {};
604+
var contextAdded = false;
605+
606+
try {
607+
for (var i = 0; i < errors.length; ++i) {
608+
if (errors[i].hasOwnProperty('rollbarContext')) {
609+
custom = merge(custom, errors[i].rollbarContext);
610+
contextAdded = true;
611+
}
612+
}
613+
614+
// Avoid adding an empty object to the data.
615+
if (contextAdded) {
616+
item.data.custom = custom;
617+
}
618+
} catch (e) {
619+
item.diagnostic.error_context = 'Failed: ' + e.message;
620+
}
621+
}
622+
602623
var TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];
603624
var TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];
604625

@@ -695,8 +716,15 @@ function set(obj, path, value) {
695716
}
696717
}
697718

698-
function scrub(data, scrubFields) {
719+
function scrub(data, scrubFields, scrubPaths) {
699720
scrubFields = scrubFields || [];
721+
722+
if (scrubPaths) {
723+
for (var i = 0; i < scrubPaths.length; ++i) {
724+
scrubPath(data, scrubPaths[i]);
725+
}
726+
}
727+
700728
var paramRes = _getScrubFieldRegexs(scrubFields);
701729
var queryRes = _getScrubQueryParamRegexs(scrubFields);
702730

@@ -740,6 +768,22 @@ function scrub(data, scrubFields) {
740768
return traverse(data, scrubber, []);
741769
}
742770

771+
function scrubPath(obj, path) {
772+
var keys = path.split('.');
773+
var last = keys.length - 1;
774+
try {
775+
for (var i = 0; i <= last; ++i) {
776+
if (i < last) {
777+
obj = obj[keys[i]];
778+
} else {
779+
obj[keys[i]] = redact();
780+
}
781+
}
782+
} catch (e) {
783+
// Missing key is OK;
784+
}
785+
}
786+
743787
function _getScrubFieldRegexs(scrubFields) {
744788
var ret = [];
745789
var pat;
@@ -846,6 +890,7 @@ function handleOptions(current, input, payload) {
846890
module.exports = {
847891
addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,
848892
createItem: createItem,
893+
addErrorContext: addErrorContext,
849894
createTelemetryEvent: createTelemetryEvent,
850895
filterIp: filterIp,
851896
formatArgsAsString: formatArgsAsString,
@@ -1840,7 +1885,7 @@ function _gWindow() {
18401885
/* global __DEFAULT_ENDPOINT__:false */
18411886

18421887
var defaultOptions = {
1843-
version: "2.17.0",
1888+
version: "2.18.0",
18441889
scrubFields: ["pw","pass","passwd","password","secret","confirm_password","confirmPassword","password_confirmation","passwordConfirmation","access_token","accessToken","X-Rollbar-Access-Token","secret_key","secretKey","secretToken","cc-number","card number","cardnumber","cardnum","ccnum","ccnumber","cc num","creditcardnumber","credit card number","newcreditcardnumber","new credit card","creditcardno","credit card no","card#","card #","cc-csc","cvc","cvc2","cvv2","ccv2","security code","card verification","name on credit card","name on card","nameoncard","cardholder","card holder","name des karteninhabers","ccname","card type","cardtype","cc type","cctype","payment type","expiration date","expirationdate","expdate","cc-exp","ccmonth","ccyear"],
18451890
logLevel: "debug",
18461891
reportLevel: "debug",
@@ -4408,6 +4453,10 @@ function handleItemWithError(item, options, callback) {
44084453
if (item.err) {
44094454
try {
44104455
item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err, item.skipFrames);
4456+
4457+
if (options.addErrorContext) {
4458+
addErrorContext(item);
4459+
}
44114460
} catch (e) {
44124461
logger.error('Error while parsing the error object.', e);
44134462
try {
@@ -4421,6 +4470,20 @@ function handleItemWithError(item, options, callback) {
44214470
callback(null, item);
44224471
}
44234472

4473+
function addErrorContext(item) {
4474+
var chain = [];
4475+
var err = item.err;
4476+
4477+
chain.push(err);
4478+
4479+
while (err.nested) {
4480+
err = err.nested;
4481+
chain.push(err);
4482+
}
4483+
4484+
_.addErrorContext(item, chain);
4485+
}
4486+
44244487
function ensureItemHasSomethingToSay(item, options, callback) {
44254488
if (!item.message && !item.stackInfo && !item.custom) {
44264489
callback(new Error('No message, stack info, or custom data'), null);
@@ -4681,8 +4744,9 @@ function errorClass(stackInfo, guess, options) {
46814744
}
46824745

46834746
function scrubPayload(item, options, callback) {
4684-
var scrubFields = options.scrubFields;
4685-
item.data = _.scrub(item.data, scrubFields);
4747+
var scrubFields = options.scrubFields || [];
4748+
var scrubPaths = options.scrubPaths || [];
4749+
item.data = _.scrub(item.data, scrubFields, scrubPaths);
46864750
callback(null, item);
46874751
}
46884752

@@ -5777,8 +5841,9 @@ Instrumenter.prototype.instrumentNetwork = function() {
57775841
}
57785842
var body = null;
57795843
if (self.autoInstrument.networkResponseBody) {
5780-
if (typeof resp.text === 'function') { // Response.text() is not implemented on multiple platforms
5781-
body = resp.text(); //returns a Promise
5844+
if (typeof resp.text === 'function') { // Response.text() is not implemented on some platforms
5845+
// The response must be cloned to prevent reading (and locking) the original stream.
5846+
body = resp.clone().text(); //returns a Promise
57825847
}
57835848
}
57845849
if (headers || body) {

dist/rollbar.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/rollbar.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/rollbar.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/rollbar.named-amd.js

+71-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/rollbar.named-amd.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/rollbar.named-amd.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/rollbar.named-amd.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)