mirror of
https://github.com/pnpm/pnpm.git
synced 2026-06-28 01:45:30 -04:00
Add verdaccio's per-uplink tuning knobs to pnpr's proxy uplinks, parsed
from the same config.yaml shape verdaccio uses:
- maxage: per-uplink packument freshness window; overrides the
global packument_ttl when set, otherwise defers to it.
- timeout: per-request deadline applied to every upstream fetch
(default 30s).
- max_fails / circuit breaker: after max_fails consecutive failures the
fail_timeout uplink short-circuits with a 503 until the fail_timeout
cooldown lapses, then one probe per window is allowed
through (defaults 2 / 5m). max_fails: 0 disables it.
- cache: when false, tarballs stream through without being written
to the local mirror (default true).
Interval values accept verdaccio's format ("2m", "30s", "1h30m", or a
bare number of seconds, as either a YAML string or a numeric scalar);
an unparsable or out-of-range value is a named InvalidConfig error
rather than a silent fallback or a panic. Defaults match verdaccio
(timeout 30s, max_fails 2, fail_timeout 5m, cache true).
Circuit breaker behavior:
- Only a 5xx or transport error counts as a failure; a non-404 4xx
(auth / rate-limit / bad request) surfaces verbatim and never opens
the circuit.
- The half-open probe is gated on the cooldown window, so exactly one
probe runs per fail_timeout and a cancelled or dropped probe cannot
stick the breaker open.
- An open breaker reports the configured uplink name, not its upstream
URL, so the 503 does not disclose internal endpoints.
Part of the verdaccio-parity tracking issue pnpm/pnpm#11973.
Co-authored-by: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Zoltan Kochan <z@kochan.io>