Just a function
One call — retry(fn, options). No classes, no builders. The function receives the attempt number and a per-attempt AbortSignal.
A tiny, typed, isomorphic retry — exponential backoff, jitter, per-attempt timeouts, a total time budget, cancellation and polling. Zero dependencies.