mirror of
https://github.com/nicotsx/ironmount.git
synced 2025-12-10 12:10:51 +01:00
* feat: report partial backups with warnings * chore: rebase * chore: remove un-used size prop
42 lines
1.5 KiB
TypeScript
42 lines
1.5 KiB
TypeScript
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<number, string> = {
|
|
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";
|
|
}
|
|
}
|