Socket
Socket
Sign inDemoInstall

rollbar

Package Overview
Dependencies
Maintainers
4
Versions
151
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rollbar - npm Package Compare versions

Comparing version 2.20.0 to 2.21.0

2

dist/rollbar.snippet.js

@@ -1,1 +0,1 @@

!function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,"a",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p="",o(o.s=0)}([function(r,e,o){"use strict";var n=o(1),t=o(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.20.0/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";var n=o(2),t=o(3);function a(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}var l=0;function i(r,e){this.options=r,this._rollbarOldOnError=null;var o=l++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}var s=o(4),d=function(r,e){return new i(r,e)},c=function(r){return new s(d,r)};function u(r){return a((function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)}))}i.prototype.loadFull=function(r,e,o,n,t){var l=!1,i=e.createElement("script"),s=e.getElementsByTagName("script")[0],d=s.parentNode;i.crossOrigin="",i.src=n.rollbarJsUrl,o||(i.async=!0),i.onload=i.onreadystatechange=a((function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){i.onload=i.onreadystatechange=null;try{d.removeChild(i)}catch(r){}l=!0,function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(a=n.args||[],i=0;i<a.length;++i)if("function"==typeof(l=a[i])){l(e);break}}"function"==typeof t&&t(e)}()}})),d.insertBefore(i,s)},i.prototype.wrap=function(r,e,o){try{var n;if(n="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&("string"==typeof e&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var p="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<p.length;++f)i.prototype[p[f]]=u(p[f]);r.exports={setupShim:function(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var l=new c(e);return a((function(){e.captureUncaught&&(l._rollbarOldOnError=r.onerror,n.captureUncaughtExceptions(r,l,!0),e.wrapGlobalEventHandlers&&t(r,l,!0)),e.captureUnhandledRejections&&n.captureUnhandledRejections(r,l,!0);var a=e.autoInstrument;return!1!==e.enabled&&(void 0===a||!0===a||"object"==typeof a&&a.network)&&r.addEventListener&&(r.addEventListener("load",l.captureLoad.bind(l)),r.addEventListener("DOMContentLoaded",l.captureDomContentLoaded.bind(l))),r[o]=l,l}))()}},Rollbar:c}},function(r,e,o){"use strict";function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=e.handleUncaughtException.apply(e,n);o&&o.apply(r,n),"anonymous"===t&&(e.anonymousErrorsPending+=1)}r.exports={captureUncaughtExceptions:function(r,e,o){if(r){var t;if("function"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}e.handleAnonymousErrors();var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}},captureUnhandledRejections:function(r,e,o){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting `promise` from event"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){}o||(o="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}}},function(r,e,o){"use strict";function n(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports=function(r,e,o){if(r){var t,a,l="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(t=0;t<l.length;++t)r[a=l[t]]&&r[a].prototype&&n(e,r[a].prototype,o)}}},function(r,e,o){"use strict";function n(r,e){this.impl=r(e,this),this.options=e,function(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<o.length;n++)r[o[n]]=e(o[n])}(n.prototype)}n.prototype._swapAndProcessMessages=function(r,e){var o,n,t;for(this.impl=r(this.options);o=e.shift();)n=o.method,t=o.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=n},function(r,e,o){"use strict";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){for(var o,n,t=(r=r||{}).globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]);
!function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,"a",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p="",o(o.s=0)}([function(r,e,o){"use strict";var n=o(1),t=o(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.21.0/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";var n=o(2),t=o(3);function a(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}var l=0;function i(r,e){this.options=r,this._rollbarOldOnError=null;var o=l++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}var s=o(4),d=function(r,e){return new i(r,e)},c=function(r){return new s(d,r)};function u(r){return a((function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)}))}i.prototype.loadFull=function(r,e,o,n,t){var l=!1,i=e.createElement("script"),s=e.getElementsByTagName("script")[0],d=s.parentNode;i.crossOrigin="",i.src=n.rollbarJsUrl,o||(i.async=!0),i.onload=i.onreadystatechange=a((function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){i.onload=i.onreadystatechange=null;try{d.removeChild(i)}catch(r){}l=!0,function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(a=n.args||[],i=0;i<a.length;++i)if("function"==typeof(l=a[i])){l(e);break}}"function"==typeof t&&t(e)}()}})),d.insertBefore(i,s)},i.prototype.wrap=function(r,e,o){try{var n;if(n="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&("string"==typeof e&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var p="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<p.length;++f)i.prototype[p[f]]=u(p[f]);r.exports={setupShim:function(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var l=new c(e);return a((function(){e.captureUncaught&&(l._rollbarOldOnError=r.onerror,n.captureUncaughtExceptions(r,l,!0),e.wrapGlobalEventHandlers&&t(r,l,!0)),e.captureUnhandledRejections&&n.captureUnhandledRejections(r,l,!0);var a=e.autoInstrument;return!1!==e.enabled&&(void 0===a||!0===a||"object"==typeof a&&a.network)&&r.addEventListener&&(r.addEventListener("load",l.captureLoad.bind(l)),r.addEventListener("DOMContentLoaded",l.captureDomContentLoaded.bind(l))),r[o]=l,l}))()}},Rollbar:c}},function(r,e,o){"use strict";function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=e.handleUncaughtException.apply(e,n);o&&o.apply(r,n),"anonymous"===t&&(e.anonymousErrorsPending+=1)}r.exports={captureUncaughtExceptions:function(r,e,o){if(r){var t;if("function"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}e.handleAnonymousErrors();var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}},captureUnhandledRejections:function(r,e,o){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting `promise` from event"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){}o||(o="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}}},function(r,e,o){"use strict";function n(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports=function(r,e,o){if(r){var t,a,l="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(t=0;t<l.length;++t)r[a=l[t]]&&r[a].prototype&&n(e,r[a].prototype,o)}}},function(r,e,o){"use strict";function n(r,e){this.impl=r(e,this),this.options=e,function(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<o.length;n++)r[o[n]]=e(o[n])}(n.prototype)}n.prototype._swapAndProcessMessages=function(r,e){var o,n,t;for(this.impl=r(this.options);o=e.shift();)n=o.method,t=o.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=n},function(r,e,o){"use strict";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){for(var o,n,t=(r=r||{}).globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]);
{
"name": "rollbar",
"version": "2.20.0",
"version": "2.21.0",
"repository": {

@@ -5,0 +5,0 @@ "type": "git",

# Rollbar.js
![Build Status](https://github.com/rollbar/rollbar.js/workflows/Rollbar.js%20CI/badge.svg?branch=v2.20.0)
![Build Status](https://github.com/rollbar/rollbar.js/workflows/Rollbar.js%20CI/badge.svg?branch=v2.21.0)
[![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)

@@ -6,0 +6,0 @@ [![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)

module.exports = {
version: '2.20.0',
version: '2.21.0',
endpoint: 'api.rollbar.com/api/1/item/',

@@ -4,0 +4,0 @@ logLevel: 'debug',

@@ -14,2 +14,4 @@ /* globals Map */

var DEFAULT_OPTIONS = {
enabled: true,
uncaughtOnly: true,
depth: 1,

@@ -20,3 +22,3 @@ maxProperties: 30,

function Locals(options) {
function Locals(options, logger) {
if (!(this instanceof Locals)) {

@@ -28,2 +30,4 @@ return new Locals(options);

this.options = _.merge(DEFAULT_OPTIONS, options);
this.initialized = false;
this.logger = logger;

@@ -34,3 +38,5 @@ this.initSession();

Locals.prototype.initSession = function() {
if (Locals.session) { return; }
if (Locals.session) {
this.disconnectSession();
}

@@ -58,8 +64,49 @@ Locals.session = new inspector.Session();

var self = this;
Locals.session.post('Debugger.enable', (_err, _result) => {
Locals.session.post('Debugger.setPauseOnExceptions', { state: 'all'}, (_err, _result) => {
});
self.initialized = true;
updatePauseState(self.options, self.logger);
});
}
Locals.prototype.disconnectSession = function() {
if (Locals.session) {
updatePauseState({ enabled: false }, this.logger);
Locals.session.disconnect();
Locals.session = null;
}
}
Locals.prototype.updateOptions = function(options) {
var pauseStateChanged = this.options.enabled != options.enabled || this.options.uncaughtOnly != options.uncaughtOnly;
this.options = _.merge(this.options, options);
if (this.initialized && pauseStateChanged) {
updatePauseState(this.options, this.logger);
}
}
function updatePauseState(options, logger) {
var state = pauseStateFromOptions(options);
console.log('setPauseOnExceptions', state);
Locals.session.post('Debugger.setPauseOnExceptions', { state: state}, (err, _result) => {
if (err) {
logger.error('error in setPauseOnExceptions', err);
}
});
}
function pauseStateFromOptions(options) {
if (options.enabled) {
if (options.uncaughtOnly) {
return 'uncaught';
} else {
return 'all';
}
} else {
return 'none';
}
}
Locals.prototype.currentLocalsMap = function() {

@@ -66,0 +113,0 @@ return new Map(Locals.currentErrors);

@@ -19,3 +19,2 @@ var util = require('util');

var truncation = require('../truncation');
var Locals = require('./locals');
var polyfillJSON = require('../../vendor/JSON-js/json3');

@@ -46,7 +45,3 @@

if (this.options.locals) {
// Capturing stack local variables is only supported in Node 10 and higher.
var nodeMajorVersion = process.versions.node.split('.')[0];
if (nodeMajorVersion >= 10) {
this.locals = new Locals(this.options.locals);
}
this.locals = initLocals(this.options.locals, logger);
}

@@ -59,2 +54,21 @@ addTransformsToNotifier(this.client.notifier);

function initLocals(localsOptions, logger) {
// Capturing stack local variables is only supported in Node 10 and higher.
var nodeMajorVersion = process.versions.node.split('.')[0];
if (nodeMajorVersion < 10) { return null; }
var Locals;
if (typeof localsOptions === 'function') {
Locals = localsOptions;
localsOptions = null; // use defaults
} else if (_.isType(localsOptions, 'object')) {
Locals = localsOptions.module;
delete localsOptions.module;
} else {
logger.error('options.locals or options.locals.module must be a Locals module');
return null;
}
return new Locals(localsOptions, logger);
}
var _instance = null;

@@ -105,2 +119,10 @@ Rollbar.init = function (options, client) {

this.setupUnhandledCapture();
if (this.options.locals) {
if (this.locals) {
this.locals.updateOptions(this.options.locals);
} else {
this.locals = initLocals(this.options.locals, logger)
}
}
return this;

@@ -107,0 +129,0 @@ };

@@ -9,2 +9,3 @@ 'use strict';

var Rollbar = require('../src/server/rollbar');
var logger = require('../src/server/logger');
var Locals = require('../src/server/locals');

@@ -26,3 +27,3 @@ var localsFixtures = require('./fixtures/locals.fixtures');

await wait(500);
callback(rollbar);
callback(null, rollbar);
}

@@ -36,5 +37,18 @@

await wait(500);
callback(rollbar);
callback(null, rollbar);
}
async function nodeThrowAndCatch(rollbar, callback) {
setTimeout(function () {
var error = new Error('caught error');
try {
throw error;
} catch (e) {
rollbar.error(e);
}
}, 1);
await wait(500);
callback(null, rollbar);
}
function nestedError(nestedMessage, _password) {

@@ -61,3 +75,3 @@ var nestedError = new Error(nestedMessage);

await wait(500);
callback(rollbar);
callback(null, rollbar);
}

@@ -93,3 +107,3 @@

await wait(500);
callback(rollbar);
callback(null, rollbar);
}

@@ -110,3 +124,3 @@

await wait(500);
callback(rollbar);
callback(null, rollbar);
}

@@ -120,6 +134,157 @@

function verifyThrownError(r) {
var addItemStub = r.addItemStub;
assert.isTrue(addItemStub.called);
var data = addItemStub.getCall(0).args[3].data;
assert.equal(data.body.trace_chain[0].exception.message, 'node error');
if (nodeMajorVersion >= 10) {
// Node 10+; locals enabled
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals.error, '<Error object>');
assert.equal(data.body.trace_chain[0].frames[length-2].locals.timer, '<Timeout object>');
} else {
// Node 8; locals disabled
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals, undefined);
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
}
addItemStub.restore();
}
function verifyCaughtError(r) {
var addItemStub = r.addItemStub;
assert.isTrue(addItemStub.called);
var data = addItemStub.getCall(0).args[3].data;
assert.equal(data.body.trace_chain[0].exception.message, 'caught error');
if (nodeMajorVersion >= 10) {
// Node 10+; locals enabled
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals.error, '<Error object>');
assert.equal(data.body.trace_chain[0].frames[length-2].locals.timer, '<Timeout object>');
} else {
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals, undefined);
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
}
addItemStub.restore();
}
function verifyNestedError(r) {
var addItemStub = r.addItemStub;
assert.isTrue(addItemStub.called);
var data = addItemStub.getCall(0).args[3].data;
assert.equal(data.body.trace_chain[0].exception.message, 'test error');
assert.equal(data.body.trace_chain[1].exception.message, 'nested test error');
if (nodeMajorVersion >= 10) {
// Node 10+; locals enabled
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals.err, '<Error object>');
assert.equal(data.body.trace_chain[0].frames[length-2].locals.timer, '<Timeout object>');
length = data.body.trace_chain[1].frames.length;
assert.equal(data.body.trace_chain[1].frames[length-1].locals.nestedMessage, 'nested test error');
assert.equal(data.body.trace_chain[1].frames[length-1].locals.nestedError, '<Error object>');
assert.equal(data.body.trace_chain[1].frames[length-2].locals.message, 'test error');
assert.equal(data.body.trace_chain[1].frames[length-2].locals.password, '********');
assert.equal(data.body.trace_chain[1].frames[length-2].locals.err, '<Error object>');
assert.equal(data.body.trace_chain[1].frames[length-2].locals.newMessage, 'nested test error');
} else {
// Node 8; locals disabled
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals, undefined);
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
}
addItemStub.restore();
}
function verifyRejectedPromise(r) {
var addItemStub = r.addItemStub;
assert.isTrue(addItemStub.called);
var data = addItemStub.getCall(0).args[3].data;
assert.equal(data.body.trace_chain[0].exception.message, 'promise reject');
if (nodeMajorVersion >= 10) {
// Node 10+; locals enabled
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals.error, '<Error object>');
assert.equal(data.body.trace_chain[0].frames[length-1].locals.rollbar, '<Rollbar object>');
assert.equal(data.body.trace_chain[0].frames[length-2].locals.notifier, '<Notifier object>');
assert.equal(data.body.trace_chain[0].frames[length-2].locals.r, '<Rollbar object>');
} else {
// Node 8; locals disabled
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals, undefined);
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
}
addItemStub.restore();
}
function verifyDefaultOptions(options) {
assert.equal(options.enabled, true);
assert.equal(options.uncaughtOnly, true);
assert.equal(options.depth, 1);
assert.equal(options.maxProperties, 30);
assert.equal(options.maxArray, 5);
}
vows.describe('locals')
.addBatch({
'on exception': {
'uncaught': {
'enabled': {
topic: function() {
var rollbar = new Rollbar({
accessToken: 'abc123',
captureUncaught: true,
captureUnhandledRejections: true,
locals: { module: Locals, uncaughtOnly: true, depth: 0 }
});
var notifier = rollbar.client.notifier;
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
nodeThrow(rollbar, this.callback);
},
'should include locals': function(_err, r) {
verifyThrownError(r);
},
'then disabled': {
topic: function(_err, r) {
r.configure({ locals: { enabled: false }});
var notifier = r.client.notifier;
r.addItemStub = sinon.stub(notifier.queue, 'addItem');
nodeThrowNested(r, this.callback);
},
'should not include locals': function(_err, r) {
var addItemStub = r.addItemStub;
assert.isTrue(addItemStub.called);
var data = addItemStub.getCall(0).args[3].data;
assert.equal(data.body.trace_chain[0].exception.message, 'test error');
assert.equal(data.body.trace_chain[1].exception.message, 'nested test error');
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals, undefined);
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
addItemStub.restore();
},
'then enabled': {
topic: function(_err, r) {
r.configure({ locals: { enabled: true, uncaughtOnly: false }});
var notifier = r.client.notifier;
r.addItemStub = sinon.stub(notifier.queue, 'addItem');
promiseReject(r, this.callback);
},
'should include locals': function(_err, r) {
verifyRejectedPromise(r);
},
}
}
}
})
.addBatch({
'on caught error': {
'uncaughtOnly: true': {
topic: function() {

@@ -129,3 +294,4 @@ var rollbar = new Rollbar({

captureUncaught: true,
locals: { depth: 0 }
captureUnhandledRejections: true,
locals: { module: Locals, uncaughtOnly:true, depth: 0 }
});

@@ -135,5 +301,5 @@ var notifier = rollbar.client.notifier;

nodeThrow(rollbar, this.callback);
nodeThrowAndCatch(rollbar, this.callback);
},
'should include locals': function(r) {
'should not include locals': function(_err, r) {
var addItemStub = r.addItemStub;

@@ -143,92 +309,65 @@

var data = addItemStub.getCall(0).args[3].data;
assert.equal(data.body.trace_chain[0].exception.message, 'node error');
if (nodeMajorVersion < 10) {
// Node 8; locals disabled
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals, undefined);
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
} else {
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals.error, '<Error object>');
assert.equal(data.body.trace_chain[0].frames[length-2].locals.timer, '<Timeout object>');
}
addItemStub.reset();
Locals.session = undefined;
assert.equal(data.body.trace_chain[0].exception.message, 'caught error');
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals, undefined);
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
addItemStub.restore();
},
'nested': {
topic: function() {
var rollbar = new Rollbar({
accessToken: 'abc123',
captureUncaught: true,
locals: { depth: 0 }
});
var notifier = rollbar.client.notifier;
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
'then uncaughtOnly: false': {
topic: function(_err, r) {
r.configure({ locals: { uncaughtOnly: false }});
var notifier = r.client.notifier;
r.addItemStub = sinon.stub(notifier.queue, 'addItem');
nodeThrowNested(rollbar, this.callback);
nodeThrowAndCatch(r, this.callback);
},
'should include locals': function(r) {
var addItemStub = r.addItemStub;
'should include locals': function(_err, r) {
verifyCaughtError(r);
}
}
}
}
})
assert.isTrue(addItemStub.called);
var data = addItemStub.getCall(0).args[3].data;
assert.equal(data.body.trace_chain[0].exception.message, 'test error');
assert.equal(data.body.trace_chain[1].exception.message, 'nested test error');
if (nodeMajorVersion < 10) {
// Node 8; locals disabled
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals, undefined);
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
} else {
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals.err, '<Error object>');
assert.equal(data.body.trace_chain[0].frames[length-2].locals.timer, '<Timeout object>');
.addBatch({
'on exception': {
'uncaught': {
topic: function() {
var rollbar = new Rollbar({
accessToken: 'abc123',
captureUncaught: true,
captureUnhandledRejections: true,
locals: { module: Locals, uncaughtOnly: true, depth: 0 }
});
var notifier = rollbar.client.notifier;
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
length = data.body.trace_chain[1].frames.length;
assert.equal(data.body.trace_chain[1].frames[length-1].locals.nestedMessage, 'nested test error');
assert.equal(data.body.trace_chain[1].frames[length-1].locals.nestedError, '<Error object>');
assert.equal(data.body.trace_chain[1].frames[length-2].locals.message, 'test error');
assert.equal(data.body.trace_chain[1].frames[length-2].locals.password, '********');
assert.equal(data.body.trace_chain[1].frames[length-2].locals.err, '<Error object>');
assert.equal(data.body.trace_chain[1].frames[length-2].locals.newMessage, 'nested test error');
}
addItemStub.reset();
Locals.session = undefined;
},
'promise rejection': {
topic: function() {
var rollbar = new Rollbar({
accessToken: 'abc123',
captureUnhandledRejections: true,
locals: { depth: 0 }
});
var notifier = rollbar.client.notifier;
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
nodeThrow(rollbar, this.callback);
},
'should include locals': function(_err, r) {
verifyThrownError(r);
}
}
}
})
promiseReject(rollbar, this.callback);
},
'should include locals': function(r) {
var addItemStub = r.addItemStub;
.addBatch({
'on exception': {
'nested': {
topic: function() {
var rollbar = new Rollbar({
accessToken: 'abc123',
captureUncaught: true,
locals: { module: Locals, uncaughtOnly: false, depth: 0 }
});
var notifier = rollbar.client.notifier;
rollbar.addItemStub = sinon.stub(notifier.queue, 'addItem');
assert.isTrue(addItemStub.called);
var data = addItemStub.getCall(0).args[3].data;
assert.equal(data.body.trace_chain[0].exception.message, 'promise reject');
if (nodeMajorVersion < 10) {
// Node 8; locals disabled
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals, undefined);
assert.equal(data.body.trace_chain[0].frames[length-2].locals, undefined);
} else {
var length = data.body.trace_chain[0].frames.length;
assert.equal(data.body.trace_chain[0].frames[length-1].locals.error, '<Error object>');
assert.equal(data.body.trace_chain[0].frames[length-1].locals.rollbar, '<Rollbar object>');
assert.equal(data.body.trace_chain[0].frames[length-2].locals.notifier, '<Notifier object>');
assert.equal(data.body.trace_chain[0].frames[length-2].locals.rollbar, '<Rollbar object>');
}
addItemStub.reset();
Locals.session = undefined;
},
}
}
},
nodeThrowNested(rollbar, this.callback);
},
'should include locals': function(_err, r) {
verifyNestedError(r);
},
}
}

@@ -239,2 +378,23 @@ })

'on exception': {
'promise rejection': {
topic: function() {
var r = new Rollbar({
accessToken: 'abc123',
captureUnhandledRejections: true,
locals: { module: Locals, uncaughtOnly: false, depth: 0 }
});
var notifier = r.client.notifier;
r.addItemStub = sinon.stub(notifier.queue, 'addItem');
promiseReject(r, this.callback);
},
'should include locals': function(_err, r) {
verifyRejectedPromise(r);
},
}
}
})
.addBatch({
'on exception': {
'with custom options': {

@@ -245,3 +405,3 @@ topic: function() {

captureUncaught: true,
locals: { depth: 2, maxProperties: 5, maxArray: 2 }
locals: { module: Locals, depth: 2, maxProperties: 5, maxArray: 2 }
});

@@ -253,3 +413,3 @@ var notifier = rollbar.client.notifier;

},
'should include locals': function(r) {
'should include locals': function(_err, r) {
var addItemStub = r.addItemStub;

@@ -288,3 +448,3 @@

captureUncaught: true,
locals: true
locals: Locals
});

@@ -296,3 +456,3 @@ var notifier = rollbar.client.notifier;

},
'should include locals': function(r) {
'should include locals': function(_err, r) {
var addItemStub = r.addItemStub;

@@ -322,34 +482,36 @@

'constructor': {
'passing no arguments': {
'passing true boolean': {
topic: function() {
return new Locals();
return new Locals(true, logger);
},
'should use defaults': function(locals) {
var options = locals.options;
assert.equal(options.depth, 1);
assert.equal(options.maxProperties, 30);
assert.equal(options.maxArray, 5);
verifyDefaultOptions(locals.options);
}
},
'passing true boolean': {
'passing false boolean': {
topic: function() {
return new Locals(true);
return new Locals(false, logger);
},
'should use defaults': function(locals) {
var options = locals.options;
assert.equal(options.depth, 1);
assert.equal(options.maxProperties, 30);
assert.equal(options.maxArray, 5);
verifyDefaultOptions(locals.options);
}
},
'passing false boolean': {
'passing empty object': {
topic: function() {
return new Locals(false);
return new Locals({}, logger);
},
'should use defaults': function(locals) {
verifyDefaultOptions(locals.options);
}
},
'passing depth option': {
topic: function() {
return new Locals({ depth: 0 }, logger);
},
'should use updated depth with remaining defaults': function(locals) {
var options = locals.options;
assert.equal(options.depth, 1);
assert.equal(options.enabled, true);
assert.equal(options.uncaughtOnly, true);
assert.equal(options.depth, 0);
assert.equal(options.maxProperties, 30);

@@ -359,9 +521,11 @@ assert.equal(options.maxArray, 5);

},
'passing empty object': {
'passing enabled option': {
topic: function() {
return new Locals({});
return new Locals({ enabled: false }, logger);
},
'should use defaults': function(locals) {
'should use updated enabled with remaining defaults': function(locals) {
var options = locals.options;
assert.equal(options.enabled, false);
assert.equal(options.uncaughtOnly, true);
assert.equal(options.depth, 1);

@@ -372,10 +536,12 @@ assert.equal(options.maxProperties, 30);

},
'passing depth option': {
'passing uncaughtOnly option': {
topic: function() {
return new Locals({ depth: 0 });
return new Locals({ uncaughtOnly: false }, logger);
},
'should use updated depth with remaining defaults': function(locals) {
'should use updated uncaughtOnly with remaining defaults': function(locals) {
var options = locals.options;
assert.equal(options.depth, 0);
assert.equal(options.enabled, true);
assert.equal(options.uncaughtOnly, false);
assert.equal(options.depth, 1);
assert.equal(options.maxProperties, 30);

@@ -387,3 +553,9 @@ assert.equal(options.maxArray, 5);

topic: function() {
return new Locals({ depth: 2, maxProperties: 15, maxArray: 10 });
return new Locals({
enabled: false,
uncaughtOnly: false,
depth: 2,
maxProperties: 15,
maxArray: 10
}, logger);
},

@@ -393,2 +565,4 @@ 'should use updated options': function(locals) {

assert.equal(options.enabled, false);
assert.equal(options.uncaughtOnly, false);
assert.equal(options.depth, 2);

@@ -407,3 +581,3 @@ assert.equal(options.maxProperties, 15);

topic: function() {
var locals = new Locals();
var locals = new Locals({}, logger);
var err = new Error('post error');

@@ -451,3 +625,3 @@ sinon.stub(Locals.session, 'post').yields(err);

var locals = new Locals({ depth: 0 });
var locals = new Locals({ depth: 0 }, logger);
sinon.stub(Locals.session, 'post').callsFake(fakeSessionPostHandler(getPropertiesResponses));

@@ -498,3 +672,3 @@

var locals = new Locals({ depth: 0 });
var locals = new Locals({ depth: 0 }, logger);
sinon.stub(Locals.session, 'post').callsFake(fakeSessionPostHandler(getPropertiesResponses));

@@ -548,3 +722,3 @@

var locals = new Locals({ depth: 1 });
var locals = new Locals({ depth: 1 }, logger);
sinon.stub(Locals.session, 'post').callsFake(fakeSessionPostHandler(getPropertiesResponses));

@@ -596,3 +770,3 @@

var locals = new Locals();
var locals = new Locals({}, logger);
sinon.stub(Locals.session, 'post').callsFake(fakeSessionPostHandler(getPropertiesResponses));

@@ -644,3 +818,3 @@

var locals = new Locals();
var locals = new Locals({}, logger);
sinon.stub(Locals.session, 'post').callsFake(fakeSessionPostHandler(getPropertiesResponses));

@@ -678,3 +852,3 @@

topic: function() {
var locals = new Locals();
var locals = new Locals({}, logger);

@@ -681,0 +855,0 @@ // Ensure empty map, as vows uses the same class object between tests.

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc