jackwener/OpenCLI · error · CommandExecutionError
${label} request failed: ${err?.message ?? err}
Error message
${label} request failed: ${err?.message ?? err} What it means
rfcFetch wraps the fetch call to the IETF datatracker. When the request fails at the network level (DNS failure, connection refused, TLS error, timeout) it throws CommandExecutionError including the label and underlying error message, advising that datatracker.ietf.org may be unreachable.
Source
Thrown at clis/rfc/utils.js:40
if (!Number.isInteger(n) || n <= 0 || String(n) !== s) {
throw new ArgumentError(
`rfc number "${value}" is not a valid RFC number`,
'Pass a positive integer (e.g. 9000, 791, 2616).',
);
}
if (n > 999999) {
throw new ArgumentError('rfc number must be <= 999999');
}
return n;
}
export async function rfcFetch(url, label) {
let resp;
try {
resp = await fetch(url, { headers: { 'user-agent': UA, accept: 'application/json' } });
}
catch (err) {
throw new CommandExecutionError(
`${label} request failed: ${err?.message ?? err}`,
'Check that datatracker.ietf.org is reachable from this network.',
);
}
if (resp.status === 404) {
throw new EmptyResultError(label, `IETF datatracker returned 404 for ${url}.`);
}
if (resp.status === 429) {
throw new CommandExecutionError(`${label} returned HTTP 429 (rate limited)`);
}
if (!resp.ok) {
throw new CommandExecutionError(`${label} returned HTTP ${resp.status}`);
}
let body;
try {
body = await resp.json();
}
catch (err) {View on GitHub (pinned to 49907e53dc)
Solutions
- Check network connectivity (curl https://datatracker.ietf.org/doc/rfc9000/doc.json).
- Verify DNS resolution and any proxy settings (HTTPS_PROXY etc.).
- Retry after transient network issues; consider adding retry/backoff.
- Catch CommandExecutionError and surface the hint about datatracker reachability.
Example fix
// before
// no handling
const doc = await rfcFetch(url, 'rfc 9000');
// after
try {
const doc = await rfcFetch(url, 'rfc 9000');
} catch (e) {
console.error('Datatracker unreachable, check network/proxy:', e.message);
} Defensive patterns
Strategy: retry
Validate before calling
// Optional pre-check
const reachable = await fetch('https://datatracker.ietf.org/', { method: 'HEAD' }).then(r => r.ok).catch(() => false);
if (!reachable) console.warn('datatracker.ietf.org unreachable'); Type guard
null
Try / catch
async function fetchWithRetry(url, label, attempts = 3) {
for (let i = 0; i < attempts; i++) {
try {
return await rfcFetch(url, label);
} catch (err) {
const transient = err instanceof CommandExecutionError && /request failed/.test(err.message);
if (!transient || i === attempts - 1) throw err;
await new Promise(r => setTimeout(r, 2 ** i * 500));
}
}
} Prevention
- Check network/proxy availability before bulk lookups.
- Set HTTPS_PROXY correctly on corporate networks.
- Add retry with exponential backoff for transient failures.
- Cache RFC metadata locally to reduce network dependence.
When it happens
Trigger: Any fetch() rejection: no internet connection, DNS unable to resolve datatracker.ietf.org, blocked egress on corporate networks/proxies, or TLS interception failures.
Common situations: Working offline, VPN/proxy blocking the request, firewall rules in CI environments, or transient datatracker outages.
Related errors
- coingecko derivatives request failed: ${err?.message ?? err}
- dongchedi ${contextHint} network error: ${err?.message || er
- `${label} request failed: ${err?.message ?? err}`
- hf models request failed: ${error?.message || error}
- ${label} request failed: ${err?.message ?? err}. Check that
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/04f535d0c9b94daf.
Report an issue: GitHub.