@next-nest-auth/nestauth
Version:
NestAuth is an authentication solution for NestJS applications, designed to handle user login, session management, and token-based authentication (JWT). It integrates seamlessly with Next.js and other frontends to provide a unified authentication system,
68 lines (61 loc) • 2.14 kB
text/typescript
import {
ExceptionFilter,
Catch,
ArgumentsHost,
HttpException,
} from "@nestjs/common";
()
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: any, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
let status = 500;
let message = "Internal Server Error";
if (
exception instanceof HttpException ||
(exception?.status && exception?.response)
) {
status = exception.status ?? 500;
const exceptionResponse =
exception.response ?? exception.getResponse?.();
if (typeof exceptionResponse === "string") {
message = exceptionResponse;
} else if (
typeof exceptionResponse === "object" &&
(exceptionResponse as any).message
) {
message = (exceptionResponse as any).message;
} else if (
typeof exceptionResponse === "object" &&
(exceptionResponse as any).error
) {
message = (exceptionResponse as any).error;
}
} else {
console.error("Unexpected error:", exception);
}
const responseBody = {
statusCode: status,
message,
path: request?.url,
app: "nestauth",
};
// Try to send response for Express or Fastify
try {
if (
typeof response.status === "function" &&
typeof response.json === "function"
) {
response.status(status).json(responseBody);
} else if (typeof response.send === "function") {
response.code?.(status); // Fastify specific
response.send(responseBody);
} else {
console.error("Unsupported response object:", response);
}
} catch (err) {
console.error("Error while sending error response:", err);
}
}
}