Socket
Socket
Sign inDemoInstall

raven

Package Overview
Dependencies
1
Maintainers
1
Versions
70
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.0 to 0.2.0

lib/parsers.js

88

lib/client.js

@@ -1,2 +0,3 @@

var zlib = require('zlib'),
var parsers = require('./parsers'),
zlib = require('zlib'),
utils = require('./utils'),

@@ -7,10 +8,22 @@ parseUrl = require('url').parse,

module.exports.version = '0.2.0';
var Client = function Client(dsn, options) {
if(arguments.length === 0) {
// no arguments, use default from environment
dsn = process.env.SENTRY_DSN;
options = {};
}
if(typeof dsn === 'object') {
// They must only be passing through options
options = dsn;
dsn = process.env.SENTRY_DSN;
}
options = options || {};
this.dsn = utils.parseDSN(dsn);
this.name = options.name || require('os').hostname();
this.site = options.site;
this.name = options.name || process.env.SENTRY_NAME || require('os').hostname();
this.site = options.site || process.env.SENTRY_SITE;
this.root = options.root || process.cwd();
if(!process.env.NODE_ENV || !(process.env.NODE_ENV == 'production' || process.env.NODE_ENV == 'test')) {
console.log('Warning: Sentry logging is disabled, please set NODE_ENV=production');
console.warn('Warning: Sentry logging is disabled, please set NODE_ENV=production');
this._enabled = false;

@@ -33,8 +46,9 @@ } else {

kwargs['event_id'] = event_id;
kwargs['timestamp'] = new Date().toISOString().split('.')[0];
kwargs['project'] = this.dsn.project_id;
kwargs['modules'] = utils.getModules();
kwargs['server_name'] = kwargs['server_name'] || this.name;
kwargs['extra'] = kwargs['extra'] || {};
kwargs['extra']['node'] = process.version;
if(!kwargs['checksum']){
checksum = kwargs['checksum'] = utils.construct_checksum(kwargs);
checksum = kwargs['checksum'] = utils.constructChecksum(kwargs);
} else {

@@ -44,5 +58,6 @@ checksum = kwargs['checksum'];

kwargs['server_name'] = kwargs['server_name'] || this.name;
kwargs['event_id'] = event_id;
kwargs['timestamp'] = new Date().toISOString().split('.')[0];
kwargs['project'] = this.dsn.project_id;
kwargs['site'] = kwargs['site'] || this.site;
kwargs['extra'] = kwargs['extra'] || {};

@@ -55,3 +70,3 @@ // this will happen asynchronously. We don't care about it's response.

_.sendRemote = function sendRemote(message, headers, callback) {
_.sendRemote = function sendRemote(message, headers, cb) {
var self = this;

@@ -80,5 +95,5 @@ var options = {

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

@@ -92,6 +107,5 @@ 'Content-Length': message.length

_.createFromText =
_.create_from_text = function createFromText(message, kwargs, callback) {
if(!callback && typeof kwargs === 'function') {
callback = kwargs;
_.captureMessage = function captureMessage(message, kwargs, cb) {
if(!cb && typeof kwargs === 'function') {
cb = kwargs;
kwargs = {};

@@ -101,18 +115,12 @@ } else {

}
kwargs['message'] = message;
kwargs['sentry.interfaces.Message'] = {
message: message,
params: []
};
var result = this.process(kwargs);
callback && callback(result);
var result = this.process(parsers.parseText(message, kwargs));
cb && cb(result);
return result;
};
_.createFromError =
_.create_from_exception =
_.create_from_error = function createFromError(err, kwargs, callback) {
_.captureError =
_.captureException = function captureError(err, kwargs, cb) {
var self = this;
if(!callback && typeof kwargs === 'function') {
callback = kwargs;
if(!cb && typeof kwargs === 'function') {
cb = kwargs;
kwargs = {};

@@ -122,12 +130,20 @@ } else {

}
utils.parseStack(err.stack, function(e, frames) {
kwargs['message'] = err.name+': '+err.message;
kwargs['sentry.interfaces.Exception'] = {type:err.name, value:err.message};
kwargs['sentry.interfaces.Stacktrace'] = {frames:frames};
kwargs['culprit'] = err.name + ' in ' + err.stack.split('\n')[1].match(/^.*?\((.*?):\d+:\d+\)$/)[1].replace(process.cwd()+'/', '');
var result = self.process(kwargs);
callback && callback(result);
parsers.parseError(err, kwargs, function(kw) {
var result = self.process(kw);
cb && cb(result);
});
};
_.captureQuery = function captureQuery(query, engine, kwargs, cb) {
if(!cb && typeof kwargs === 'function') {
cb = kwargs;
kwargs = {};
} else {
kwargs = kwargs || {};
}
var result = this.process(parsers.parseQuery(query, engine, kwargs));
cb && cb(result);
return result;
};
_.patchGlobal = function patchGlobal() {

@@ -134,0 +150,0 @@ module.exports.patchGlobal(this);

@@ -1,22 +0,8 @@

var Client = require('../client').Client
, url = require('url');
var raven = require('../client'),
parsers = require('../parsers');
module.exports = function raven(client) {
client = (client instanceof Client) ? client : new Client(client);
module.exports = function connectMiddleware(client) {
client = (client instanceof raven.Client) ? client : new raven.Client(client);
return function(err, req, res, next) {
var kwargs = {
'sentry.interfaces.Http': {
method: req.method,
query_string: url.parse(req.url).query,
headers: req.headers,
cookies: req.cookies || '<unavailable: use cookieParser middleware>',
data: req.body || '<unavailable: use bodyParser middleware>',
url: (function build_absolute_url() {
var protocol = req.socket.encrypted ? 'https' : 'http',
host = req.headers.host || '<no host>';
return protocol+'://'+host+req.url;
}()),
env: process.env
}
};
var kwargs = parsers.parseRequest(req);
client.createFromError(err, kwargs, function(result) {

@@ -23,0 +9,0 @@ res.sentry = client.getIdent(result);

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

var crypto = require('crypto'),
var raven = require('./client'),
crypto = require('crypto'),
fs = require('fs'),
url = require('url'),
LINES_OF_CONTEXT = 7;
url = require('url');
module.exports.construct_checksum = function construct_checksum(kwargs) {
module.exports.constructChecksum = function constructChecksum(kwargs) {
var checksum = crypto.createHash('md5');

@@ -12,3 +12,3 @@ checksum.update(kwargs['message'] || '');

module.exports.get_signature = function get_signature(key, message, timestamp) {
module.exports.getSignature = function getSignature(key, message, timestamp) {
var hmac = crypto.createHmac('sha1', key);

@@ -19,9 +19,9 @@ hmac.update(timestamp+' '+message);

module.exports.get_auth_header = function get_auth_header(signature, timestamp, api_key, project_id) {
module.exports.getAuthHeader = function getAuthHeader(signature, timestamp, api_key, project_id) {
var header = ['Sentry sentry_version=2.0'];
header.push('sentry_signature='+signature);
header.push('sentry_timestamp='+timestamp);
header.push('sentry_client=raven-node/0.1');
if(api_key) header.push('sentry_key='+api_key);
if(project_id) header.push('project_id='+project_id);
header.push('sentry_client=raven-node/'+raven.version);
header.push('sentry_key='+api_key);
header.push('project_id='+project_id);
return header.join(', ');

@@ -50,2 +50,25 @@ };

var module_cache;
module.exports.getModules = function getModules() {
if(module_cache) {
return module_cache;
}
var path = require('path');
var cwd = path.resolve('.');
var folders = fs.readdirSync(path.join(cwd, './node_modules/'));
folders = folders.filter(function(f){
return f.charAt(0) !== '.';
});
module_cache = {};
folders.forEach(function(folder) {
try {
var json = require(path.join(cwd, './node_modules/'+folder+'/package.json'));
module_cache[json.name] = json.version;
} catch(e){}
});
return module_cache;
};
var LINES_OF_CONTEXT = 7;
/*

@@ -55,3 +78,3 @@ * Testing out with a custom stack track.

*/
module.exports.parseStackBetter = function parseStackBetter(err, callback) {
module.exports.parseStackBetter = function parseStackBetter(err, cb) {
var orig = Error.prepareStackTrace;

@@ -82,3 +105,3 @@ Error.prepareStackTrace = function(_, stack){ return stack; };

module.exports.parseStack = function parseStack(stack, callback) {
module.exports.parseStack = function parseStack(stack, cb) {
// grab all lines except the first

@@ -88,8 +111,12 @@ var lines = stack.split('\n').slice(1), callbacks=lines.length, frames=[], cache={};

lines.forEach(function(line, index) {
var data = line.match(/^\s*at (.+?) \((.+?):(\d+):(\d+)\)$/).slice(1),
var data = line.match(/^\s*at (?:(.+(?: \[\w\s+\])?) )?\(?(.+?)(?::(\d+):(\d+))?\)?$/).slice(1),
frame = {
'function': data[0],
filename: data[1],
lineno: ~~data[2]
};
// only set the function key if it exists
if(data[0]) {
frame['function'] = data[0];
}
// internal Node files are not full path names. Ignore them.

@@ -100,9 +127,12 @@ if(frame.filename[0] === '/' || frame.filename[0] === '.') {

parseLines(cache[frame.filename]);
if(--callbacks === 0) callback(null, frames);
if(--callbacks === 0) cb(null, frames);
} else {
fs.readFile(frame.filename, function(err, file) {
file = file.toString().split('\n');
cache[frame.filename] = file;
parseLines(file);
if(--callbacks === 0) callback(null, frames);
if(!err) {
file = file.toString().split('\n');
cache[frame.filename] = file;
parseLines(file);
}
frames[index] = frame;
if(--callbacks === 0) cb(null, frames);
});

@@ -112,3 +142,3 @@ }

frames[index] = frame;
if(--callbacks === 0) callback(null, frames);
if(--callbacks === 0) cb(null, frames);
}

@@ -120,5 +150,4 @@

frame.post_context = lines.slice(frame.lineno, frame.lineno+LINES_OF_CONTEXT);
frames[index] = frame;
}
});
};

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

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

@@ -14,3 +14,3 @@ "author": "Matt Robenolt <matt@ydekproductions.com>",

"engines": {
"node": ">= 0.6.0 < 0.7.0"
"node": ">= 0.6.0"
},

@@ -25,4 +25,5 @@ "dependencies": {

"should": "*",
"nock": "*"
"nock": "*",
"glob": "*"
}
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc