diff --git a/src/components/CountViewer.tsx b/src/components/CountViewer.tsx
index 3608d8f..94832df 100644
--- a/src/components/CountViewer.tsx
+++ b/src/components/CountViewer.tsx
@@ -454,7 +454,7 @@ export function CountViewer({
-
{String(error.message || error)}
+
{error.message || "An error occurred"}
)}
diff --git a/src/hooks/useCountQuery.ts b/src/hooks/useCountQuery.ts
index 579054a..bac5b03 100644
--- a/src/hooks/useCountQuery.ts
+++ b/src/hooks/useCountQuery.ts
@@ -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,
),
);