
Research
/Security News
Shai Hulud Strikes Again (v2)
Another wave of Shai-Hulud campaign has hit npm with more than 500 packages and 700+ versions affected.
@paybase/pool
Advanced tools
A highly flexible process pooling library for Node.js. Built with @paybase/csp.
$ npm install --save @paybase/pool
or
$ yarn add @paybase/pool
This library exposes a single factory method for creating pools.
createPool({ poolSize = 5, createProcess, createAsyncProcess, handler }) -> Pool|Promise<Pool>The pool factory takes an options object containing 3 of 4 properties:
poolSize - defaults to 5, determines the size of the poolcreateProcess - defines a process factory function which can return anythingcreateAsyncProcess - defines an async process factory which can return anything, useful if your process requires time to become active.handler(process, input) -> Promise - defines a function which handles a unit of work. The handler must return a Promise and receives a process (as defined by the process factory) and the input from a call to run on the poolYou must supply only one of createProcess or createAsyncProcess! If you supply createAsyncProcess the return value of the createPool factory will be a Promise<Pool>.
A returned Pool exposes 2 methods:
Pool.run(input) -> Promise - The interface defined to run against the pool of processes, supplied input can be of any type as the handler supplied at pool creation defines how the input interacts which the underlying processPool.close -> Promise - A mechanism for destroying the pool when it is no longer neededBy defining our process as a plain Symbol, or true for that matter, we can limit request parallelisation to the size of the pool.
const assert = require('assert');
const fetch = require('node-fetch');
const createPool = require('@paybase/pool');
const { run, close } = createPool({
poolSize: 2,
createProcess: () => Symbol('process'),
handler: (_, query) => {
console.log(`🚀 running request with query: ${query}`);
return fetch(`https://postman-echo.com/get?q=${query}`)
.then(res => res.json())
.then(res => assert.equal(res.args.q, query));
.then(_ => console.log(`👌 request completed successfully`));
}
});
(async () => {
const queries = Array.from({ length: 20 }, (_, i) => run(`${++i}`));
await Promise.all(queries);
close();
})();

For spawning multiple child processes and spreading work across processes in the pool.
const assert = require('assert');
const { spawn } = require('child_process');
const createPool = require('@paybase/pool');
const { run, close } = createPool({
poolSize: 10,
createProcess: () => {
const p = spawn('cat', [ '-' ]);
p.stdin.setEncoding('utf-8');
p.stdout.setEncoding('utf-8');
return p;
},
handler: (p, input) =>
new Promise(resolve => {
p.stdout.once('data', d => {
assert(d, input);
console.log(`👌 received data: ${d.trim()} from pid: ${p.pid}`);
resolve(d);
});
console.log(`🚀 sending data: ${input.trim()} to pid: ${p.pid}`);
p.stdin.write(input);
}),
});
(async () => {
const inputs = Array.from({ length: 100 }, (_, i) => run(`${++i}\n`));
await Promise.all(inputs);
close();
})();

Contributions are welcomed and appreciated!
Feel free to get in touch if you have any questions.
Please see the LICENSE file for more information.
FAQs
a pooling mechanism built on top of csp
We found that @paybase/pool demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 12 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
/Security News
Another wave of Shai-Hulud campaign has hit npm with more than 500 packages and 700+ versions affected.

Product
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.

Security News
ENISA has become a CVE Program Root, giving the EU a central authority for coordinating vulnerability reporting, disclosure, and cross-border response.