import { ConflictError, NotFoundError } from "http-errors-enhanced"; import { sanitizeSensitiveData } from "./sanitize"; export const handleServiceError = (error: unknown) => { if (error instanceof ConflictError) { return { message: sanitizeSensitiveData(error.message), status: 409 as const }; } if (error instanceof NotFoundError) { return { message: sanitizeSensitiveData(error.message), status: 404 as const }; } return { message: sanitizeSensitiveData(toMessage(error)), status: 500 as const }; }; export const toMessage = (err: unknown): string => { const message = err instanceof Error ? err.message : String(err); return sanitizeSensitiveData(message); }; const resticErrorCodes: Record = { 1: "Command failed: An error occurred while executing the command.", 2: "Go runtime error: A runtime error occurred in the Go program.", 3: "Backup could not read all files: Some files could not be read during backup.", 10: "Repository not found: The specified repository could not be found.", 11: "Failed to lock repository: Unable to acquire a lock on the repository. Try to run doctor on the repository.", 12: "Wrong repository password: The provided password for the repository is incorrect.", 130: "Backup interrupted: The backup process was interrupted.", }; export class ResticError extends Error { code: number; constructor(code: number, stderr: string) { const message = resticErrorCodes[code] || `Unknown restic error with code ${code}`; super(`${message}\n${stderr}`); this.code = code; this.name = "ResticError"; } }