const TRANSPORT_ERROR_PATTERNS = [ /\bSocketCloseError\b/i, /\bSocketOpenError\b/i, /\bSocket is not connected\b/i, /Unable to connect to the T3 server WebSocket\./i, /\bis not connected\.$/i, /\bdisconnected\.$/i, /\bcould not establish a WebSocket connection\.$/i, /\bClientProtocolError\b/i, /\bRpcClientError\b/i, /\bping timeout\b/i,] as const;/** * Check whether an error message originates from a transport-level connection * failure (socket close, socket open, ping timeout, etc.) rather than a * business-logic error. */export function isTransportConnectionErrorMessage(message: string | null | undefined): boolean { if (typeof message !== "string") { return false; } const normalizedMessage = message.trim(); if (normalizedMessage.length === 0) { return false; } return TRANSPORT_ERROR_PATTERNS.some((pattern) => pattern.test(normalizedMessage));}/** * Strip transport connection errors from user-facing error messages. * Returns `null` for transport errors so the UI can distinguish between * real errors and transient connection issues. */export function sanitizeThreadErrorMessage(message: string | null | undefined): string | null { return isTransportConnectionErrorMessage(message) ? null : (message ?? null);}
const TRANSPORT_ERROR_PATTERNS = [
/\bSocketCloseError\b/i,
/\bSocketOpenError\b/i,
/\bSocket is not connected\b/i,
/Unable to connect to the T3 server WebSocket\./i,
/\bis not connected\.$/i,
/\bdisconnected\.$/i,
/\bcould not establish a WebSocket connection\.$/i,
/\bClientProtocolError\b/i,
/\bRpcClientError\b/i,
/\bping timeout\b/i,
] as const;
/**
* Check whether an error message originates from a transport-level connection
* failure (socket close, socket open, ping timeout, etc.) rather than a
* business-logic error.
*/
export function isTransportConnectionErrorMessage(message: string | null | undefined): boolean {
if (typeof message !== "string") {
return false;
}
const normalizedMessage = message.trim();
if (normalizedMessage.length === 0) {
return false;
}
return TRANSPORT_ERROR_PATTERNS.some((pattern) => pattern.test(normalizedMessage));
}
/**
* Strip transport connection errors from user-facing error messages.
* Returns `null` for transport errors so the UI can distinguish between
* real errors and transient connection issues.
*/
export function sanitizeThreadErrorMessage(message: string | null | undefined): string | null {
return isTransportConnectionErrorMessage(message) ? null : (message ?? null);
}