Files
2026-07-26 18:25:37 +09:00

55 lines
1.7 KiB
JavaScript

import { logger } from "../index.js";
import { IdentifiableError } from "../../../../misc/identifiable-error.js";
import { ApiError } from "../../error.js";
export class MastoApiError extends Error {
statusCode;
errorDescription;
constructor(statusCode, message, description){
if (message == null) {
switch(statusCode){
case 404:
message = 'Record not found';
break;
default:
message = 'Unknown error occurred';
break;
}
}
super(message);
this.errorDescription = description;
this.statusCode = statusCode;
}
}
export async function CatchErrorsMiddleware(ctx, next) {
try {
await next();
} catch (e) {
if (e instanceof MastoApiError) {
ctx.status = e.statusCode;
ctx.body = {
error: e.message,
error_description: e.errorDescription
};
return;
} else if (e instanceof IdentifiableError) {
if (e.message.length < 1) e.message = e.id;
ctx.status = 400;
} else if (e instanceof ApiError) {
ctx.status = e.httpStatusCode ?? 500;
} else {
logger.error(`Error occured in ${ctx.method} ${ctx.path}:`);
if (e instanceof Error) {
if (e.stack) logger.error(e.stack);
else logger.error(`${e.name}: ${e.message}`);
} else {
logger.error(e);
}
ctx.status = 500;
}
ctx.body = {
error: e.message ?? e
};
return;
}
}