File size: 1,282 Bytes
1f21206 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | /**
* Unified error handling utilities
*/
import { diagnosticsService } from '../services/diagnosticsService.js'
export class ApiError extends Error {
constructor(
public statusCode: number,
message: string,
public code?: string
) {
super(message)
this.name = 'ApiError'
}
static badRequest(message: string) {
return new ApiError(400, message, 'BAD_REQUEST')
}
static notFound(message: string) {
return new ApiError(404, message, 'NOT_FOUND')
}
static conflict(message: string) {
return new ApiError(409, message, 'CONFLICT')
}
static internal(message: string) {
return new ApiError(500, message, 'INTERNAL_ERROR')
}
}
export function errorResponse(error: unknown): Response {
if (error instanceof ApiError) {
return Response.json(
{ error: error.code || 'ERROR', message: error.message },
{ status: error.statusCode }
)
}
void diagnosticsService.recordEvent({
type: 'api_unhandled_error',
severity: 'error',
summary: error instanceof Error ? error.message : String(error),
details: error,
})
console.error('[Server] Unexpected error:', error)
return Response.json(
{ error: 'INTERNAL_ERROR', message: 'An unexpected error occurred' },
{ status: 500 }
)
}
|