/* * Copyright (C) 2026 Fluxer Contributors * * This file is part of Fluxer. * * Fluxer is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Fluxer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Fluxer. If not, see . */ import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; import {HttpStatus} from '@fluxer/constants/src/HttpConstants'; import {FluxerError, type FluxerErrorData} from '@fluxer/errors/src/FluxerError'; interface HttpErrorOptions { code?: string; message?: string; data?: FluxerErrorData; headers?: Record; cause?: Error; } export class BadRequestError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.BAD_REQUEST, message: options.message ?? 'Bad Request', status: HttpStatus.BAD_REQUEST, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'BadRequestError'; } } export class UnauthorizedError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.UNAUTHORIZED, message: options.message ?? 'Unauthorized', status: HttpStatus.UNAUTHORIZED, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'UnauthorizedError'; } } export class ForbiddenError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.FORBIDDEN, message: options.message ?? 'Forbidden', status: HttpStatus.FORBIDDEN, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'ForbiddenError'; } } export class NotFoundError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.NOT_FOUND, message: options.message ?? 'Not Found', status: HttpStatus.NOT_FOUND, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'NotFoundError'; } } export class MethodNotAllowedError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.METHOD_NOT_ALLOWED, message: options.message ?? 'Method Not Allowed', status: HttpStatus.METHOD_NOT_ALLOWED, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'MethodNotAllowedError'; } } export class ConflictError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.CONFLICT, message: options.message ?? 'Conflict', status: HttpStatus.CONFLICT, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'ConflictError'; } } export class GoneError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.GONE, message: options.message ?? 'Gone', status: HttpStatus.GONE, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'GoneError'; } } export class InternalServerError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.INTERNAL_SERVER_ERROR, message: options.message ?? 'Internal Server Error', status: HttpStatus.INTERNAL_SERVER_ERROR, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'InternalServerError'; } } export class NotImplementedError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.NOT_IMPLEMENTED, message: options.message ?? 'Not Implemented', status: HttpStatus.NOT_IMPLEMENTED, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'NotImplementedError'; } } export class ServiceUnavailableError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.SERVICE_UNAVAILABLE, message: options.message ?? 'Service Unavailable', status: HttpStatus.SERVICE_UNAVAILABLE, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'ServiceUnavailableError'; } } export class BadGatewayError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.BAD_GATEWAY, message: options.message ?? 'Bad Gateway', status: HttpStatus.BAD_GATEWAY, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'BadGatewayError'; } } export class GatewayTimeoutError extends FluxerError { constructor(options: HttpErrorOptions = {}) { super({ code: options.code ?? APIErrorCodes.GATEWAY_TIMEOUT, message: options.message ?? 'Gateway Timeout', status: HttpStatus.GATEWAY_TIMEOUT, data: options.data, headers: options.headers, cause: options.cause, }); this.name = 'GatewayTimeoutError'; } }