import { SsrFBlockedError } from "../infra/net/ssrf.js"; import { InvalidBrowserNavigationUrlError } from "./navigation-guard.js"; export class BrowserError extends Error { status: number; constructor(message: string, status = 500, options?: ErrorOptions) { super(message, options); this.name = new.target.name; this.status = status; } } export class BrowserValidationError extends BrowserError { constructor(message: string, options?: ErrorOptions) { super(message, 400, options); } } export class BrowserConfigurationError extends BrowserError { constructor(message: string, options?: ErrorOptions) { super(message, 400, options); } } export class BrowserTargetAmbiguousError extends BrowserError { constructor(message = "ambiguous target id prefix", options?: ErrorOptions) { super(message, 409, options); } } export class BrowserTabNotFoundError extends BrowserError { constructor(message = "tab not found", options?: ErrorOptions) { super(message, 404, options); } } export class BrowserProfileNotFoundError extends BrowserError { constructor(message: string, options?: ErrorOptions) { super(message, 404, options); } } export class BrowserConflictError extends BrowserError { constructor(message: string, options?: ErrorOptions) { super(message, 409, options); } } export class BrowserResetUnsupportedError extends BrowserError { constructor(message: string, options?: ErrorOptions) { super(message, 400, options); } } export class BrowserProfileUnavailableError extends BrowserError { constructor(message: string, options?: ErrorOptions) { super(message, 409, options); } } export class BrowserResourceExhaustedError extends BrowserError { constructor(message: string, options?: ErrorOptions) { super(message, 507, options); } } export function toBrowserErrorResponse(err: unknown): { status: number; message: string; } | null { if (err instanceof BrowserError) { return { status: err.status, message: err.message }; } if (err instanceof SsrFBlockedError) { return { status: 400, message: err.message }; } if (err instanceof InvalidBrowserNavigationUrlError) { return { status: 400, message: err.message }; } return null; }