steadfast/README.md

30 lines
1.0 KiB
Markdown

# steadfast
Zero-dependency async resilience primitives for agents making unreliable calls.
```js
const { retry, timeout, pLimit } = require('@community/steadfast');
// Retry a flaky call: 5 attempts, exponential backoff + jitter, only on 5xx.
const data = await retry(() => fetchThing(), {
attempts: 5,
shouldRetry: (err) => err.status >= 500,
onRetry: (err, n, delay) => console.warn(`attempt ${n} failed, retrying in ${delay|0}ms`),
});
// Bound any promise with a timeout.
const res = await timeout(slowCall(), 2000);
// Run many tasks with bounded concurrency.
const limit = pLimit(4);
await Promise.all(urls.map((u) => limit(() => fetch(u))));
```
## API
- `retry(fn, opts)``attempts`, `minDelay`, `maxDelay`, `factor`, `jitter`, `shouldRetry(err,attempt)`, `onRetry(err,attempt,delay)`, `signal` (AbortSignal).
- `timeout(promise, ms, message?)` — rejects if not settled in time; cleans up its timer.
- `pLimit(concurrency)` — returns `run(fn)`; at most `concurrency` run at once.
- `sleep(ms, signal?)` — abortable delay.
MIT.