fix: reduce noise for api errors

This commit is contained in:
Carl-Gerhard Lindesvärd
2026-02-27 20:20:16 +01:00
parent f4602f8e56
commit b0aa7f4196

View File

@@ -1,3 +1,4 @@
/** biome-ignore-all lint/suspicious/useAwait: fastify need async or done callbacks */
process.env.TZ = 'UTC'; process.env.TZ = 'UTC';
import compress from '@fastify/compress'; import compress from '@fastify/compress';
@@ -151,7 +152,7 @@ const startServer = async () => {
validateSessionToken(req.cookies.session) validateSessionToken(req.cookies.session)
); );
req.session = session; req.session = session;
} catch (e) { } catch {
req.session = EMPTY_SESSION; req.session = EMPTY_SESSION;
} }
} else if (process.env.DEMO_USER_ID) { } else if (process.env.DEMO_USER_ID) {
@@ -160,7 +161,7 @@ const startServer = async () => {
validateSessionToken(null) validateSessionToken(null)
); );
req.session = session; req.session = session;
} catch (e) { } catch {
req.session = EMPTY_SESSION; req.session = EMPTY_SESSION;
} }
} else { } else {
@@ -220,35 +221,46 @@ const startServer = async () => {
); );
}); });
const SKIP_LOG_ERRORS = ['UNAUTHORIZED', 'FST_ERR_CTP_INVALID_MEDIA_TYPE'];
fastify.setErrorHandler((error, request, reply) => { fastify.setErrorHandler((error, request, reply) => {
if (error instanceof HttpError) { if (error.statusCode === 429) {
request.log.error(`${error.message}`, error); return reply.status(429).send({
if (process.env.NODE_ENV === 'production' && error.status === 500) {
request.log.error('request error', { error });
reply.status(500).send('Internal server error');
} else {
reply.status(error.status).send({
status: error.status,
error: error.error,
message: error.message,
});
}
} else if (error.statusCode === 429) {
reply.status(429).send({
status: 429, status: 429,
error: 'Too Many Requests', error: 'Too Many Requests',
message: 'You have exceeded the rate limit for this endpoint.', message: 'You have exceeded the rate limit for this endpoint.',
}); });
} else if (error.statusCode === 400) {
reply.status(400).send({
status: 400,
error,
message: 'The request was invalid.',
});
} else {
request.log.error('request error', { error });
reply.status(500).send('Internal server error');
} }
if (error instanceof HttpError) {
if (!SKIP_LOG_ERRORS.includes(error.code)) {
request.log.error('internal server error', { error });
}
if (process.env.NODE_ENV === 'production' && error.status === 500) {
return reply.status(500).send('Internal server error');
}
return reply.status(error.status).send({
status: error.status,
error: error.error,
message: error.message,
});
}
if (!SKIP_LOG_ERRORS.includes(error.code)) {
request.log.error('request error', { error });
}
const status = error?.statusCode ?? 500;
if (process.env.NODE_ENV === 'production' && status === 500) {
return reply.status(500).send('Internal server error');
}
return reply.status(status).send({
status,
error,
message: error.message,
});
}); });
if (process.env.NODE_ENV === 'production') { if (process.env.NODE_ENV === 'production') {