Spaces:
Paused
Paused
File size: 1,467 Bytes
5d0a52f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | import type { Context, Next } from "hono";
import type { OpenAIErrorBody } from "../types/openai.js";
function makeError(
message: string,
type: string,
code: string | null,
): OpenAIErrorBody {
return {
error: {
message,
type,
param: null,
code,
},
};
}
export async function errorHandler(c: Context, next: Next): Promise<void> {
try {
await next();
} catch (err: unknown) {
const message = err instanceof Error ? err.message : "Internal server error";
console.error("[ErrorHandler]", message);
const status = (err as { status?: number }).status;
if (status === 401) {
c.status(401);
return c.json(
makeError(
"Invalid or expired ChatGPT token. Please re-authenticate.",
"invalid_request_error",
"invalid_api_key",
),
) as never;
}
if (status === 429) {
c.status(429);
return c.json(
makeError(
"Rate limit exceeded. Please try again later.",
"rate_limit_error",
"rate_limit_exceeded",
),
) as never;
}
if (status && status >= 500) {
c.status(502);
return c.json(
makeError(
`Upstream server error: ${message}`,
"server_error",
"server_error",
),
) as never;
}
c.status(500);
return c.json(
makeError(message, "server_error", "internal_error"),
) as never;
}
}
|