Classify a failed request
The application keeps provider detail for protected diagnostics while returning a stable internal category.
async function capture(payload) {
const response = await fetch(endpoint, requestFor(payload));
const text = await response.text();
const body = safeJson(text);
if (response.ok) return validateCapture(body);
const retryable =
response.status === 429 || response.status >= 500;
throw new CaptureError({
category: response.status === 401 ? "authentication" :
response.status === 429 ? "rate_limit" :
response.status >= 500 ? "provider" : "request",
retryable,
status: response.status,
safeMessage: body?.error ?? "Capture request failed",
});
}
