Socket
Socket
Sign inDemoInstall

raven

Package Overview
Dependencies
Maintainers
1
Versions
70
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

raven - npm Package Compare versions

Comparing version 0.4.6 to 0.4.7

5

index.js

@@ -7,2 +7,5 @@ module.exports = require('./lib/client');

// friendly alias for "raven.middleware.express"
module.exports.middleware.express = module.exports.middleware.connect;
module.exports.middleware.express = module.exports.middleware.connect;
// To infinity and beyond
Error.stackTraceLimit = Infinity;

9

lib/client.js

@@ -28,3 +28,4 @@ var parsers = require('./parsers');

this.root = options.root || process.cwd();
if(!this.dsn || !process.env.NODE_ENV || !(process.env.NODE_ENV == 'production' || process.env.NODE_ENV == 'test')) {
this.loggerName = options.logger || '';
if(!this.dsn || !process.env.NODE_ENV || process.env.NODE_ENV !== 'production') {
this._enabled = false;

@@ -59,2 +60,3 @@ } else {

kwargs['extra']['node'] = process.version;
kwargs['logger'] = this.loggerName;

@@ -72,3 +74,3 @@ if(!kwargs['checksum']){

kwargs['platform'] = 'node';
// this will happen asynchronously. We don't care about it's response.

@@ -85,5 +87,4 @@ this._enabled && this.send(kwargs);

timestamp = new Date().getTime(),
signature = utils.getSignature(self.dsn.private_key, message, timestamp),
headers = {
'X-Sentry-Auth': utils.getAuthHeader(signature, timestamp, self.dsn.public_key, self.dsn.project_id),
'X-Sentry-Auth': utils.getAuthHeader(timestamp, self.dsn.public_key, self.dsn.project_id),
'Content-Type': 'application/octet-stream',

@@ -90,0 +91,0 @@ 'Content-Length': message.length

@@ -7,26 +7,24 @@ var utils = require('./utils');

kwargs['message'] = message;
kwargs['sentry.interfaces.Message'] = {
message: message,
params: []
};
return kwargs;
};
module.exports.parseError = function parseError(err, kwargs, cb) {
utils.parseStack(err.stack, function(e, frames) {
kwargs['message'] = err.name+': '+(err.message || '<no message>');
kwargs['sentry.interfaces.Exception'] = {type:err.name, value:err.message};
if(frames) {
kwargs['sentry.interfaces.Stacktrace'] = {frames:frames};
kwargs['culprit'] = [
(frames[0].filename || 'unknown file').replace(process.cwd()+'/', ''),
(frames[0]['function'] || 'unknown function')
].join(':');
}
if(err) {
kwargs['sentry.interfaces.Message'] = {
message: err,
params: []
};
}
var orig = Error.prepareStackTrace;
Error.prepareStackTrace = function(_, stack) { return stack; };
// prepareStackTrace is triggered the first time .stack is accessed
// so this is explicitly triggering it
var stack = err.stack;
// TODO: restore back an original style stack for anyone else that cares.
Error.prepareStackTrace = orig;
utils.parseStack(stack, function(frames) {
kwargs['message'] = err.name + ': ' + (err.message || '<no message>');
kwargs['sentry.interfaces.Exception'] = {
type: err.name,
value:err.message
};
kwargs['sentry.interfaces.Stacktrace'] = {frames: frames};
cb(kwargs);

@@ -62,2 +60,2 @@ });

return kwargs;
};
};

@@ -19,11 +19,4 @@ var raven = require('./client');

module.exports.getSignature = function getSignature(key, message, timestamp) {
var hmac = crypto.createHmac('sha1', key);
hmac.update(timestamp+' '+message);
return hmac.digest('hex');
};
module.exports.getAuthHeader = function getAuthHeader(signature, timestamp, api_key, project_id) {
module.exports.getAuthHeader = function getAuthHeader(timestamp, api_key, project_id) {
var header = ['Sentry sentry_version=2.0'];
header.push('sentry_signature='+signature);
header.push('sentry_timestamp='+timestamp);

@@ -96,59 +89,67 @@ header.push('sentry_client=raven-node/'+raven.version);

var LINES_OF_CONTEXT = 7;
module.exports.parseStack = function parseStack(stack, cb) {
try {
// grab all lines except the first
var lines = stack.split('\n').slice(1),
callbacks=lines.length,
frames=[],
cache={};
function parseStack(stack, cb) {
var frames = [],
cache = {},
callbacks = stack.length;
if(lines.length === 0) {
throw new Error('No lines to parse!');
stack.forEach(function(line, index) {
var frame = {
filename: line.getFileName(),
lineno: line.getLineNumber(),
'function': line.getFunctionName() || '?'
}, isInternal = line.isNative() ||
(frame.filename[0] !== '/' &&
frame.filename[0] !== '.');
// in_app is either an internal Node function or a module within node_modules
frame.in_app = isInternal || !!~frame.filename.indexOf('node_modules/');
// internal Node files are not full path names. Ignore them.
if (isInternal) {
frames[index] = frame;
if (--callbacks === 0) cb(frames);
return;
}
lines.forEach(function(line, index) {
var pattern = /^\s*at (?:(.+(?: \[\w\s+\])?) )?\(?(.+?)(?::(\d+):(\d+))?\)?$/,
data = line.match(pattern).slice(1),
frame = {
filename: data[1],
lineno: ~~data[2]
};
if (frame.filename in cache) {
parseLines(cache[frame.filename]);
if (--callbcaks === 0) cb(frames);
return;
}
// only set the function key if it exists
if(data[0]) {
frame['function'] = data[0];
fs.readFile(frame.filename, function(err, file) {
if (!err) {
file = file.toString().split('\n');
cache[frame.filename] = file;
parseLines(file, frame);
}
// internal Node files are not full path names. Ignore them.
if(frame.filename[0] === '/' || frame.filename[0] === '.') {
// check if it has been read in first
if(frame.filename in cache) {
parseLines(cache[frame.filename]);
if(--callbacks === 0) cb(null, frames);
} else {
fs.readFile(frame.filename, function(err, file) {
if(!err) {
file = file.toString().split('\n');
cache[frame.filename] = file;
parseLines(file);
}
frames[index] = frame;
if(--callbacks === 0) cb(null, frames);
});
}
} else {
frames[index] = frame;
if(--callbacks === 0) cb(null, frames);
}
frames[index] = frame;
if (--callbacks === 0) cb(frames);
});
function parseLines(lines) {
frame.pre_context = lines.slice(Math.max(0, frame.lineno-(LINES_OF_CONTEXT+1)), frame.lineno-1);
frame.context_line = lines[frame.lineno-1];
frame.post_context = lines.slice(frame.lineno, frame.lineno+LINES_OF_CONTEXT);
}
});
} catch(e) {
cb(new Error('Can\'t parse stack trace:\n' + stack));
}
};
function parseLines(lines) {
frame.pre_context = lines.slice(Math.max(0, frame.lineno-(LINES_OF_CONTEXT+1)), frame.lineno-1);
frame.context_line = lines[frame.lineno-1];
frame.post_context = lines.slice(frame.lineno, frame.lineno+LINES_OF_CONTEXT);
}
// console.log(line.getThis());
// console.log(line.getTypeName());
// console.log(line.getFunction().caller);
// console.log(line.getFunction()+'');
// console.log(line.getFunctionName());
// console.log(line.getMethodName());
// console.log(line.getFileName());
// console.log(line.getLineNumber());
// console.log(line.getColumnNumber());
// console.log(line.getEvalOrigin());
// console.log(line.isToplevel());
// console.log(line.isNative());
// console.log(line.isConstructor());
});
}
module.exports.parseStack = parseStack;

@@ -5,3 +5,3 @@ {

"keywords": ["raven", "sentry", "python"],
"version": "0.4.6",
"version": "0.4.7",
"repository": "git://github.com/mattrobenolt/raven-node.git",

@@ -8,0 +8,0 @@ "author": "Matt Robenolt <matt@ydekproductions.com>",

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