fix: improve error message extraction in COUNT queries

Replace generic "[object Event]" errors with meaningful messages by:
- Detecting and extracting messages from Error objects
- Handling WebSocket Event objects (extract type: "Connection error")
- Handling CloseEvent objects (extract reason)
- Supporting string errors
- Falling back to JSON.stringify for unknown objects
- Always creating proper Error instances with extracted message

Now errors show actual context like "Connection error", "Connection close",
or specific error messages instead of "[object Event]".
This commit is contained in:
Claude
2025-12-23 07:13:06 +00:00
parent 7bba5ff654
commit cad9f011a5
2 changed files with 24 additions and 4 deletions

View File

@@ -454,7 +454,7 @@ export function CountViewer({
<div className="border-t border-border px-4 py-3 bg-red-500/10">
<div className="flex items-center gap-2 text-sm text-red-500">
<AlertCircle className="size-4" />
<span>{String(error.message || error)}</span>
<span>{error.message || "An error occurred"}</span>
</div>
</div>
)}

View File

@@ -106,16 +106,36 @@ export function useCountQuery(
return updated;
});
},
error: (err: Error) => {
error: (err: any) => {
console.error("COUNT: Error", err);
setError(err);
// Extract meaningful error message from various error types
let errorMessage = "Unknown error";
if (err instanceof Error) {
errorMessage = err.message;
} else if (err && typeof err === "object") {
if ("message" in err && typeof err.message === "string") {
errorMessage = err.message;
} else if ("type" in err) {
// WebSocket Event objects
errorMessage = `Connection ${err.type}`;
} else if ("reason" in err && typeof err.reason === "string") {
errorMessage = err.reason;
} else {
errorMessage = JSON.stringify(err);
}
} else if (typeof err === "string") {
errorMessage = err;
}
setError(new Error(errorMessage));
setLoading(false);
// Mark all still-loading relays as errored
setResults((prev) =>
prev.map((r) =>
r.status === "loading"
? { ...r, status: "error" as CountStatus, error: err.message }
? { ...r, status: "error" as CountStatus, error: errorMessage }
: r,
),
);