Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
promise-coalesce
Advanced tools
Coalesces multiple promises for the same identifier into a single request
Coalesces multiple promises for the same identifier into a single request.
Reduces load on downstream systems when requests occur at the same time, without dropping requests or needing exclusion locks or wait-and-retry attempts.
With npm:
npm install promise-coalesce
With yarn:
yarn add promise-coalesce
import { coalesceAsync } from 'promise-coalesce';
await coalesceAsync('some-group-key', async () => {
/* your logic */
});
Cache Miss Relief Buffer
import { coalesceAsync } from 'promise-coalesce';
// Imagine you want to retrieve a value, and you have a cache to speed things up.
// If the value isn't in the cache, you'll need to get it from the source system,
// which can be a time-consuming process like a database query or an API request.
async function getValue(cacheKey: string): Promise<YourData> {
// When multiple requests try to fetch the same value from the cache at the same time,
// because of the way async operations work, yielding the event loop at each `await`,
// then they will all try to get it from the cache.
let cachedValue = await cache.get(cacheKey);
// They will take turns checking the condition and all see that the value is missing.
if (!cachedValue) {
// Here's where `coalesceAsync` comes to the rescue!
// Instead of making multiple expensive calls to the source system,
// we use `coalesceAsync`` to ensure it's called only once, and other requests
// wanting the same cache key wait for the result.
cachedValue = await coalesceAsync<YourData>(cacheKey, async () => {
// Now, we fetch the value from the source system.
const sourceValue = await getSourceValue();
// We also cache it for future use.
await cache.set(cacheKey, sourceValue, ttl);
// Now, the value is in the cache, and future requests will avoid calling the source system
// until the cached data expires (based on TTL).
return sourceValue;
});
}
return cachedValue;
}
This solution is inspired by node-cache-manager's
CallbackFiller from the v4.x
line.
It was removed
in the v5.x
line, and promise-coalesce
is an attempt to recover that feature
while also being generic enough for other applications.
FAQs
Coalesces multiple promises for the same identifier into a single request
The npm package promise-coalesce receives a total of 724,491 weekly downloads. As such, promise-coalesce popularity was classified as popular.
We found that promise-coalesce 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
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.