import type { ProtocolError, ProtocolErrorCode } from "@earendil-works/pi-protocol"; export class ServerError extends Error { readonly code: ProtocolErrorCode; constructor(error: ProtocolError) { super(error.message); this.name = "ServerError"; this.code = error.code; } } export class DisconnectedError extends Error { constructor(message = "Client is disconnected", cause?: Error) { super(message, cause === undefined ? undefined : { cause }); this.name = "DisconnectedError"; } } export class ClientDisposedError extends Error { constructor() { super("Client is disposed"); this.name = "ClientDisposedError"; } } export function toError(error: unknown): Error { return error instanceof Error ? error : new Error(String(error)); } export function toDisconnectedError(error: unknown): DisconnectedError { const cause = toError(error); return cause instanceof DisconnectedError ? cause : new DisconnectedError(cause.message, cause); }