fix(agents): centralize failover status parsing

This commit is contained in:
Peter Steinberger
2026-05-29 08:05:05 -04:00
parent a18bc56996
commit 2cd0c8b515
2 changed files with 5 additions and 2 deletions

View File

@@ -77,6 +77,8 @@ describe("failover-error", () => {
}),
).toBe("billing");
expect(resolveFailoverReasonFromError({ statusCode: "429" })).toBe("rate_limit");
expect(resolveFailoverReasonFromError({ statusCode: "+429" })).toBe("rate_limit");
expect(resolveFailoverReasonFromError({ statusCode: "0x1ad" })).toBeNull();
expect(resolveFailoverReasonFromError({ status: 403 })).toBe("auth");
expect(resolveFailoverReasonFromError({ status: 408 })).toBe("timeout");
expect(resolveFailoverReasonFromError({ status: 410 })).toBe("timeout");

View File

@@ -1,4 +1,5 @@
import { readErrorName } from "../infra/errors.js";
import { parseStrictNonNegativeInteger } from "../shared/number-coercion.js";
import {
classifyFailoverSignal,
inferSignalStatus,
@@ -132,8 +133,8 @@ function readDirectStatusCode(err: unknown): number | undefined {
if (typeof candidate === "number") {
return candidate;
}
if (typeof candidate === "string" && /^\d+$/.test(candidate)) {
return Number(candidate);
if (typeof candidate === "string") {
return parseStrictNonNegativeInteger(candidate);
}
return undefined;
}