@@ -1156,7 +1156,21 @@ function Stack(exception) {
1156
1156
1157
1157
1158
1158
function parse ( e ) {
1159
- return new Stack ( e ) ;
1159
+ var err = e ;
1160
+
1161
+ if ( err . nested ) {
1162
+ var traceChain = [ ] ;
1163
+ while ( err ) {
1164
+ traceChain . push ( new Stack ( err ) ) ;
1165
+ err = err . nested ;
1166
+ }
1167
+
1168
+ // Return primary error with full trace chain attached.
1169
+ traceChain [ 0 ] . traceChain = traceChain ;
1170
+ return traceChain [ 0 ] ;
1171
+ } else {
1172
+ return new Stack ( err ) ;
1173
+ }
1160
1174
}
1161
1175
1162
1176
@@ -1461,7 +1475,10 @@ Rollbar.prototype.handleUncaughtException = function(message, url, lineno, colno
1461
1475
if ( ! this . options . captureUncaught && ! this . options . handleUncaughtExceptions ) {
1462
1476
return ;
1463
1477
}
1464
- if ( this . options . inspectAnonymousErrors && this . isChrome && ! error ) {
1478
+
1479
+ // Chrome will always send 5+ arrguments and error will be valid or null, not undefined.
1480
+ // If error is undefined, we have a different caller.
1481
+ if ( this . options . inspectAnonymousErrors && this . isChrome && ( error === null ) ) {
1465
1482
this . anonymousErrorsPending += 1 ; // See Rollbar.prototype.handleAnonymousErrors()
1466
1483
return ;
1467
1484
}
@@ -1685,6 +1702,7 @@ Rollbar.prototype.captureLoad = function(e, ts) {
1685
1702
1686
1703
function addTransformsToNotifier ( notifier , gWindow ) {
1687
1704
notifier
1705
+ . addTransform ( transforms . handleDomException )
1688
1706
. addTransform ( transforms . handleItemWithError )
1689
1707
. addTransform ( transforms . ensureItemHasSomethingToSay )
1690
1708
. addTransform ( transforms . addBaseInfo )
@@ -1737,7 +1755,7 @@ function _gWindow() {
1737
1755
/* global __DEFAULT_ENDPOINT__:false */
1738
1756
1739
1757
var defaultOptions = {
1740
- version : "2.9 .0" ,
1758
+ version : "2.10 .0" ,
1741
1759
scrubFields : [ "pw" , "pass" , "passwd" , "password" , "secret" , "confirm_password" , "confirmPassword" , "password_confirmation" , "passwordConfirmation" , "access_token" , "accessToken" , "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" , "cvc2" , "cvv2" , "ccv2" , "security code" , "card verification" , "name on credit card" , "name on card" , "nameoncard" , "cardholder" , "card holder" , "name des karteninhabers" , "card type" , "cardtype" , "cc type" , "cctype" , "payment type" , "expiration date" , "expirationdate" , "expdate" , "cc-exp" ] ,
1742
1760
logLevel : "debug" ,
1743
1761
reportLevel : "debug" ,
@@ -1749,7 +1767,8 @@ var defaultOptions = {
1749
1767
sendConfig : false ,
1750
1768
includeItemsInTelemetry : true ,
1751
1769
captureIp : true ,
1752
- inspectAnonymousErrors : true
1770
+ inspectAnonymousErrors : true ,
1771
+ ignoreDuplicateErrors : true
1753
1772
} ;
1754
1773
1755
1774
module . exports = Rollbar ;
@@ -1871,7 +1890,7 @@ Rollbar.prototype._log = function(defaultLevel, item) {
1871
1890
callback = item . callback ;
1872
1891
delete item . callback ;
1873
1892
}
1874
- if ( this . _sameAsLastError ( item ) ) {
1893
+ if ( this . options . ignoreDuplicateErrors && this . _sameAsLastError ( item ) ) {
1875
1894
if ( callback ) {
1876
1895
var error = new Error ( 'ignored identical item' ) ;
1877
1896
error . item = item ;
@@ -3703,7 +3722,7 @@ module.exports = {
3703
3722
// Will return undefined otherwise
3704
3723
function getIEVersion ( ) {
3705
3724
var undef ;
3706
- if ( ! document ) {
3725
+ if ( typeof document === 'undefined' ) {
3707
3726
return undef ;
3708
3727
}
3709
3728
@@ -4127,6 +4146,18 @@ var _ = __webpack_require__(0);
4127
4146
var errorParser = __webpack_require__ ( 4 ) ;
4128
4147
var logger = __webpack_require__ ( 1 ) ;
4129
4148
4149
+ function handleDomException ( item , options , callback ) {
4150
+ if ( item . err && errorParser . Stack ( item . err ) . name === 'DOMException' ) {
4151
+ var originalError = new Error ( ) ;
4152
+ originalError . name = item . err . name ;
4153
+ originalError . message = item . err . message ;
4154
+ originalError . stack = item . err . stack ;
4155
+ originalError . nested = item . err ;
4156
+ item . err = originalError ;
4157
+ }
4158
+ callback ( null , item ) ;
4159
+ }
4160
+
4130
4161
function handleItemWithError ( item , options , callback ) {
4131
4162
item . data = item . data || { } ;
4132
4163
if ( item . err ) {
@@ -4234,7 +4265,11 @@ function addPluginInfo(window) {
4234
4265
4235
4266
function addBody ( item , options , callback ) {
4236
4267
if ( item . stackInfo ) {
4237
- addBodyTrace ( item , options , callback ) ;
4268
+ if ( item . stackInfo . traceChain ) {
4269
+ addBodyTraceChain ( item , options , callback ) ;
4270
+ } else {
4271
+ addBodyTrace ( item , options , callback ) ;
4272
+ }
4238
4273
} else {
4239
4274
addBodyMessage ( item , options , callback ) ;
4240
4275
}
@@ -4245,13 +4280,7 @@ function addBodyMessage(item, options, callback) {
4245
4280
var custom = item . custom ;
4246
4281
4247
4282
if ( ! message ) {
4248
- if ( custom ) {
4249
- var scrubFields = options . scrubFields ;
4250
- var messageResult = _ . stringify ( _ . scrub ( custom , scrubFields ) ) ;
4251
- message = messageResult . error || messageResult . value || '' ;
4252
- } else {
4253
- message = '' ;
4254
- }
4283
+ message = 'Item sent with null or missing arguments.' ;
4255
4284
}
4256
4285
var result = {
4257
4286
body : message
@@ -4265,11 +4294,51 @@ function addBodyMessage(item, options, callback) {
4265
4294
callback ( null , item ) ;
4266
4295
}
4267
4296
4297
+ function stackFromItem ( item ) {
4298
+ // Transform a TraceKit stackInfo object into a Rollbar trace
4299
+ var stack = item . stackInfo . stack ;
4300
+ if ( stack && stack . length === 0 && item . _unhandledStackInfo && item . _unhandledStackInfo . stack ) {
4301
+ stack = item . _unhandledStackInfo . stack ;
4302
+ }
4303
+ return stack ;
4304
+ }
4305
+
4306
+ function addBodyTraceChain ( item , options , callback ) {
4307
+ var traceChain = item . stackInfo . traceChain ;
4308
+ var traces = [ ] ;
4309
+
4310
+ var traceChainLength = traceChain . length ;
4311
+ for ( var i = 0 ; i < traceChainLength ; i ++ ) {
4312
+ var trace = buildTrace ( item , traceChain [ i ] , options ) ;
4313
+ traces . push ( trace ) ;
4314
+ }
4315
+
4316
+ _ . set ( item , 'data.body' , { trace_chain : traces } ) ;
4317
+ callback ( null , item ) ;
4318
+ }
4268
4319
4269
4320
function addBodyTrace ( item , options , callback ) {
4270
- var description = item . data . description ;
4271
- var stackInfo = item . stackInfo ;
4272
- var custom = item . custom ;
4321
+ var stack = stackFromItem ( item ) ;
4322
+
4323
+ if ( stack ) {
4324
+ var trace = buildTrace ( item , item . stackInfo , options ) ;
4325
+ _ . set ( item , 'data.body' , { trace : trace } ) ;
4326
+ callback ( null , item ) ;
4327
+ } else {
4328
+ var stackInfo = item . stackInfo ;
4329
+ var guess = errorParser . guessErrorClass ( stackInfo . message ) ;
4330
+ var className = stackInfo . name || guess [ 0 ] ;
4331
+ var message = guess [ 1 ] ;
4332
+
4333
+ item . message = className + ': ' + message ;
4334
+ addBodyMessage ( item , options , callback ) ;
4335
+ }
4336
+ }
4337
+
4338
+ function buildTrace ( item , stackInfo , options ) {
4339
+ var description = item && item . data . description ;
4340
+ var custom = item && item . custom ;
4341
+ var stack = stackFromItem ( item ) ;
4273
4342
4274
4343
var guess = errorParser . guessErrorClass ( stackInfo . message ) ;
4275
4344
var className = stackInfo . name || guess [ 0 ] ;
@@ -4285,11 +4354,6 @@ function addBodyTrace(item, options, callback) {
4285
4354
trace . exception . description = description ;
4286
4355
}
4287
4356
4288
- // Transform a TraceKit stackInfo object into a Rollbar trace
4289
- var stack = stackInfo . stack ;
4290
- if ( stack && stack . length === 0 && item . _unhandledStackInfo && item . _unhandledStackInfo . stack ) {
4291
- stack = item . _unhandledStackInfo . stack ;
4292
- }
4293
4357
if ( stack ) {
4294
4358
if ( stack . length === 0 ) {
4295
4359
trace . exception . stack = stackInfo . rawStack ;
@@ -4355,12 +4419,9 @@ function addBodyTrace(item, options, callback) {
4355
4419
if ( custom ) {
4356
4420
trace . extra = _ . merge ( custom ) ;
4357
4421
}
4358
- _ . set ( item , 'data.body' , { trace : trace } ) ;
4359
- callback ( null , item ) ;
4360
- } else {
4361
- item . message = className + ': ' + message ;
4362
- addBodyMessage ( item , options , callback ) ;
4363
4422
}
4423
+
4424
+ return trace ;
4364
4425
}
4365
4426
4366
4427
function scrubPayload ( item , options , callback ) {
@@ -4370,6 +4431,7 @@ function scrubPayload(item, options, callback) {
4370
4431
}
4371
4432
4372
4433
module . exports = {
4434
+ handleDomException : handleDomException ,
4373
4435
handleItemWithError : handleItemWithError ,
4374
4436
ensureItemHasSomethingToSay : ensureItemHasSomethingToSay ,
4375
4437
addBaseInfo : addBaseInfo ,
0 commit comments