Handle operator timeouts as gateway errors

This commit is contained in:
Alexa Amundson
2025-11-23 15:14:05 -06:00
parent cc730a156f
commit b7b04e6d84

View File

@@ -25,27 +25,38 @@ export class HttpOperatorClient implements OperatorClient {
const controller = new AbortController(); const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs); const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);
const res = await fetch(`${this.baseUrl}${path}`, { try {
method: "GET", const res = await fetch(`${this.baseUrl}${path}`, {
signal: controller.signal, method: "GET",
headers: { signal: controller.signal,
"content-type": "application/json", headers: {
}, "content-type": "application/json",
}).catch((err) => { },
clearTimeout(timeoutId); });
throw err;
});
clearTimeout(timeoutId); if (!res.ok) {
const text = await res.text().catch(() => "");
const error = new Error(`Operator error ${res.status}: ${text}`);
(error as any).statusCode = 502;
throw error;
}
if (!res.ok) { return res.json() as Promise<T>;
const text = await res.text().catch(() => ""); } catch (err: any) {
const error = new Error(`Operator error ${res.status}: ${text}`); if (err?.name === "AbortError" || controller.signal.aborted) {
(error as any).statusCode = 502; const timeoutError = new Error("Operator request timed out");
(timeoutError as any).statusCode = 504;
throw timeoutError;
}
const error = err instanceof Error ? err : new Error("Operator request failed");
if (!(error as any).statusCode) {
(error as any).statusCode = 502;
}
throw error; throw error;
} finally {
clearTimeout(timeoutId);
} }
return res.json() as Promise<T>;
} }
async getFinanceSummary(): Promise<FinanceSummary> { async getFinanceSummary(): Promise<FinanceSummary> {