import { Request } from 'express'; // ---- Error handling ---- export class AppError extends Error { statusCode: number; code?: string; constructor(message: string, statusCode: number, code?: string) { super(message); this.name = 'AppError'; this.statusCode = statusCode; this.code = code; } } // ---- API response shape ---- export interface ApiResponse { data: T | null; error: string | null; meta?: Record; } export function ok(data: T, meta?: Record): ApiResponse { return { data, error: null, ...(meta ? { meta } : {}) }; } export function err(message: string, meta?: Record): ApiResponse { return { data: null, error: message, ...(meta ? { meta } : {}) }; } // ---- Augmented request ---- export interface AuthenticatedRequest extends Request { user: { sub: string }; }