webchat: show real ws errors
This commit is contained in:
31
apps/macos/Sources/Clawdis/Resources/WebChat/format-error.js
Normal file
31
apps/macos/Sources/Clawdis/Resources/WebChat/format-error.js
Normal file
@@ -0,0 +1,31 @@
|
||||
// Shared formatter for WebChat bootstrap errors so UI shows actionable messages.
|
||||
export const formatError = (err) => {
|
||||
if (!err) return "Unknown error";
|
||||
if (err instanceof Error) return err.stack || err.message || String(err);
|
||||
|
||||
const isCloseEvent =
|
||||
(typeof CloseEvent !== "undefined" && err instanceof CloseEvent) ||
|
||||
(typeof err?.code === "number" &&
|
||||
(err?.reason !== undefined || err?.wasClean !== undefined));
|
||||
if (isCloseEvent) {
|
||||
const reason = err.reason?.trim();
|
||||
const parts = [`WebSocket closed (${err.code})`];
|
||||
if (reason) parts.push(`reason: ${reason}`);
|
||||
if (err.wasClean) parts.push("clean close");
|
||||
return parts.join("; ");
|
||||
}
|
||||
|
||||
const isWsErrorEvent =
|
||||
err?.type === "error" && typeof err?.target?.readyState === "number";
|
||||
if (isWsErrorEvent) {
|
||||
const states = ["connecting", "open", "closing", "closed"];
|
||||
const stateLabel = states[err.target.readyState] ?? err.target.readyState;
|
||||
return `WebSocket error (state: ${stateLabel})`;
|
||||
}
|
||||
|
||||
try {
|
||||
return JSON.stringify(err);
|
||||
} catch {
|
||||
return String(err);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user