
Research
PyPI Package Disguised as Instagram Growth Tool Harvests User Credentials
A deceptive PyPI package posing as an Instagram growth tool collects user credentials and sends them to third-party bot services.
stacktrace-gps
Advanced tools
The stacktrace-gps npm package is a library for enhancing JavaScript stack traces. It provides functionalities to map minified stack traces back to their original source locations, retrieve function names, and resolve source maps. This is particularly useful for debugging and error tracking in production environments where code is often minified.
Pinpointing Original Source Locations
This feature allows you to pinpoint the original source location of a stack frame. The `pinpoint` method takes a stack frame object and returns a promise that resolves to the original position in the source code.
const StackTraceGPS = require('stacktrace-gps');
const stackFrame = { fileName: 'http://example.com/app.min.js', lineNumber: 1, columnNumber: 32 };
const gps = new StackTraceGPS();
gps.pinpoint(stackFrame).then(function(originalPosition) {
console.log(originalPosition);
}).catch(function(error) {
console.error(error);
});
Getting Function Names
This feature allows you to retrieve the function name from a stack frame. The `findFunctionName` method takes a stack frame object and returns a promise that resolves to the function name.
const StackTraceGPS = require('stacktrace-gps');
const stackFrame = { fileName: 'http://example.com/app.min.js', lineNumber: 1, columnNumber: 32 };
const gps = new StackTraceGPS();
gps.findFunctionName(stackFrame).then(function(functionName) {
console.log(functionName);
}).catch(function(error) {
console.error(error);
});
Resolving Source Maps
This feature allows you to resolve source maps for a given stack frame. The `getMappedLocation` method takes a stack frame object and returns a promise that resolves to the mapped location in the source code.
const StackTraceGPS = require('stacktrace-gps');
const stackFrame = { fileName: 'http://example.com/app.min.js', lineNumber: 1, columnNumber: 32 };
const gps = new StackTraceGPS();
gps.getMappedLocation(stackFrame).then(function(mappedLocation) {
console.log(mappedLocation);
}).catch(function(error) {
console.error(error);
});
The source-map package provides a library for working with source maps. It allows you to parse, generate, and manipulate source maps, which can be used to map minified code back to its original source. Compared to stacktrace-gps, source-map offers more low-level control over source map manipulation but does not provide higher-level functionalities like finding function names.
The stacktrace-js package is a library for generating, parsing, and enhancing JavaScript stack traces. It provides functionalities to capture stack traces, map them to original source locations, and integrate with source maps. Compared to stacktrace-gps, stacktrace-js offers a more comprehensive solution for working with stack traces, including capturing stack traces and integrating with various error tracking services.
This library accepts a code location (in the form of a StackFrame) and returns a new StackFrame with a more accurate location (using source maps) and guessed function names.
This is primarily a browser-centric library, but can be used with node.js. See the Offline Usage section below.
var stackframe = new StackFrame({fileName: 'http://localhost:3000/file.min.js', lineNumber: 1, columnNumber: 3284});
var callback = function myCallback(foundFunctionName) { console.log(foundFunctionName); };
// Such meta. Wow
var errback = function myErrback(error) { console.log(StackTrace.fromError(error)); };
var gps = new StackTraceGPS();
// Pinpoint actual function name and source-mapped location
gps.pinpoint(stackframe).then(callback, errback);
//===> Promise(StackFrame({functionName: 'fun', fileName: 'file.js', lineNumber: 203, columnNumber: 9}), Error)
// Better location/name information from source maps
gps.getMappedLocation(stackframe).then(callback, errback);
//===> Promise(StackFrame({fileName: 'file.js', lineNumber: 203, columnNumber: 9}), Error)
// Get function name from location information
gps.findFunctionName(stackframe).then(callback, errback);
//===> Promise(StackFrame({functionName: 'fun', fileName: 'http://localhost:3000/file.min.js', lineNumber: 1, columnNumber: 3284}), Error)
With a bit of preparation, you can use this library offline in any environment. Any encountered fileNames not in the cache return resolved Promises with the original StackFrame. StackTraceGPS will make a best effort to provide as good of response with what is given and will fallback to the original StackFrame if nothing better could be found.
var stack = ErrorStackParser.parse(new Error('boom'));
console.assert(stack[0] == new StackFrame({fileName: 'http://localhost:9999/file.min.js', lineNumber: 1, columnNumber: 32}));
var sourceCache = {'http://localhost:9999/file.min.js': 'var foo=function(){};function bar(){}var baz=eval("XXX");\n//# sourceMappingURL=file.js.map'};
var sourceMap = '{"version":3,"sources":["./file.js"],"sourceRoot":"http://localhost:4000/","names":["foo","bar","baz","eval"],"mappings":"AAAA,GAAIA,KAAM,YACV,SAASC,QACT,GAAIC,KAAMC,KAAK","file":"file.min.js"}';
var sourceMapConsumerCache = {'http://localhost:4000/file.js.map': new SourceMap.SourceMapConsumer(sourceMap)};
var gps = new StackTraceGPS({offline: true, sourceCache: sourceCache, sourceMapConsumerCache: sourceMapConsumerCache});
gps.pinpoint(stack[0]).then(function(betterStackFrame) {
console.assert(betterStackFrame === new StackFrame({functionName: 'bar', fileName: 'http://localhost:9999/file.js', lineNumber: 2, columnNumber: 9}));
});
npm install stacktrace-gps
bower install stacktrace-gps
https://raw.githubusercontent.com/stacktracejs/stacktrace-gps/master/dist/stacktrace-gps.min.js
new StackTraceGPS(/*optional*/ options)
=> StackTraceGPSoptions: Object
true
to prevent all network requests.pinpoint(stackframe)
=> Promise(StackFrame)Enhance function name and use source maps to produce a better StackFrame.
.findFunctionName(stackframe)
=> Promise(StackFrame)Enhance function name and use source maps to produce a better StackFrame.
.getMappedLocation(stackframe)
=> Promise(StackFrame)Enhance function name and use source maps to produce a better StackFrame.
Functions that rely on Source Maps
(pinpoint
and getMappedLocation
) require recent browsers.
Want to be listed as a Contributor? Start with the Contributing Guide!
FAQs
Turns partial code location into precise code location
The npm package stacktrace-gps receives a total of 2,685,323 weekly downloads. As such, stacktrace-gps popularity was classified as popular.
We found that stacktrace-gps demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
A deceptive PyPI package posing as an Instagram growth tool collects user credentials and sends them to third-party bot services.
Product
Socket now supports pylock.toml, enabling secure, reproducible Python builds with advanced scanning and full alignment with PEP 751's new standard.
Security News
Research
Socket uncovered two npm packages that register hidden HTTP endpoints to delete all files on command.