/** * Custom application exceptions. * @module errors */ export class AppError extends Error { public readonly statusCode: number; public readonly isOperational: boolean; constructor( message: string, statusCode: number = 500, isOperational: boolean = true ) { super(message); this.statusCode = statusCode; this.isOperational = isOperational; Error.captureStackTrace(this, this.constructor); } } export class ValidationError extends AppError { constructor(message: string) { super(message, 400); } } export class NotFoundError extends AppError { constructor(resource: string) { super(`${resource} not found`, 404); } } export class AuthenticationError extends AppError { constructor(message: string = 'Authentication failed') { super(message, 401); } }