
Research
Security News
Lazarus Strikes npm Again with New Wave of Malicious Packages
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
A timeout controller for asynchronous requests with defer.
areq is a timeout controller for asynchronous requests with Promise defers (e.g., Q.defer()). It tackles the event listener registering and timeout rejection for you.
$ npm install areq --save
var Q = require('q'),
Areq = require('areq'),
EventEmitter = require('events');
var myEmitter = new EventEmitter(),
areq = new Areq(myEmitter, 6000); // timeout after 6 seconds
var fooAsyncReq = function (callback) {
var deferred = Q.defer();
areq.register('some_event', deferred, function (result) {
if (result !== 'what_i_want') {
areq.reject('some_event', new Error('Bad response.'));
} else {
areq.resolve('some_event', result);
}
});
return deferred.promise.nodeify(callback);
};
fooAsyncReq(function (err, result) {
if (err)
console.log(err);
else
console.log(result);
});
Create an instance of Areq Class, which will be denoted as
areq
in this document.
Arguments
emitter
(EventEmitter): The emitter that emits the events for your listening to resolve the asynchronous responses.areqTimeout
(Number, optional): The default timeout in milliseconds. If elapsed time from the moment of a request sending out has reached this setting, the request will be rejected with a timeout error. If it is not given, a value of 30000 ms will be used as the default.Returns:
Example
var Areq = require('areq');
var areq = new Areq(foo_nwk_controller);
// foo_nwk_controller is your event emitter to dispatch messages from lower layer
Register an unique event to listen for the specific response coming from the emitter.
Arguments
evt
(String): The unique event according to the specific response.deferred
(Object): The defer object used in your method.listener
(Function): The event listener. With areq
, now you should use areq.resolve(evt, value)
and areq.reject(evt, err)
instead of using deferred.resolve(value)
and deferred.reject(err)
. areq.resolve()
and areq.reject()
will take care of the listener deregistering and timeout cleaning for you.time
(Number, optional): Register this areq with a timeout in milliseconds. A default value of 30000 will be used if not given.Returns:
Example
var myAreqMethod = function () {
var deferred = Q.defer(),
transId = my_nwk_controller.nextTransId(),
eventToListen = 'AF:incomingMsg:' + transId;
// event to listner maybe like this: AF:incomingMsg:172,
// where 172 is a unique transection id
areq.register(eventToListen, deferred, function (result) {
if (result !== 'what_i_want')
areq.reject(eventToListen, new Error('Bad response.'));
else
areq.resolve(eventToListen, result);
}, 10000); // if this reponse doesn't come back wihtin 10 secs,
// your myAreqMethod() will be rejected with a timeout error
return deferred.promise.nodeify(callback);
};
// now call your myAreqMethod() somewhere in the code
// (1) with thenable style
myAreqMethod().then(function (rsp) {
console.log(rsp);
}).fail(function (err) {
console.log(err);
}).done();
// (2) with err-back style
myAreqMethod(function (err, rsp) {
if (err)
console.log(err);
else
console.log(rsp);
});
Resolve the received response if the response is exactly that you need.
Arguments
evt
(String): The unique event according to the specific response.value
(Depends): The value to be resolved.Returns:
var myAreqMethod = function () {
var deferred = Q.defer(),
transId = my_nwk_controller.nextTransId(),
eventToListen = 'ZDO:incomingMsg:' + transId;
areq.register(eventToListen, deferred, function (rsp) {
if (rsp.status !== 0 && rsp.status !== 'SUCCESS')
areq.reject(eventToListen, new Error('Bad response.'));
else
areq.resolve(eventToListen, rsp);
}); // if this reponse doesn't come back wihtin default 30 secs,
// myAreqMethod() will be rejected with a timeout error
return deferred.promise.nodeify(callback);
};
// now call your myAreqMethod() somewhere in the code
myAreqMethod(function (err, rsp) {
if (err)
console.log(err);
else
console.log(rsp);
});
Reject the received response if the response is not what you need.
Arguments
evt
(String): The unique event according to the specific response.err
(Error): The reason why you reject this response.Returns:
Example
See the exmaple given with resolve() method.
Get record of the given event name. Returns undefined if not found.
Arguments
evt
(String): The unique event according to the specific response.Returns:
Example
areq.getRecord('AF:incomingMsg:6:11:162'); // { deferred: xxx, listener: yyy }
areq.getRecord('No_such_event_is_waiting'); // undefined
Checks if the event is pending. Usually, if you find someone is pending over there, it is suggested to change a new event to listen to. For example, get another transection id to make a new event name for your request.
Arguments
evt
(String): The unique event according to the specific response.Returns:
true
is the given event is pending, otherwise returns false
.Example
areq.isEventPending('AF:incomingMsg:6:11:161'); // true
areq.isEventPending('AF:incomingMsg:6:11:162'); // false
FAQs
A timeout controller for asynchronous requests with defer.
The npm package areq receives a total of 53 weekly downloads. As such, areq popularity was classified as not popular.
We found that areq demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer 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
Security News
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
Security News
Socket CEO Feross Aboukhadijeh discusses the open web, open source security, and how Socket tackles software supply chain attacks on The Pair Program podcast.
Security News
Opengrep continues building momentum with the alpha release of its Playground tool, demonstrating the project's rapid evolution just two months after its initial launch.