summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/mastodon
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/server/api/mastodon')
-rw-r--r--packages/backend/src/server/api/mastodon/MastodonApiServerService.ts20
-rw-r--r--packages/backend/src/server/api/mastodon/MastodonLogger.ts7
2 files changed, 19 insertions, 8 deletions
diff --git a/packages/backend/src/server/api/mastodon/MastodonApiServerService.ts b/packages/backend/src/server/api/mastodon/MastodonApiServerService.ts
index 5b682df529..359408d882 100644
--- a/packages/backend/src/server/api/mastodon/MastodonApiServerService.ts
+++ b/packages/backend/src/server/api/mastodon/MastodonApiServerService.ts
@@ -46,17 +46,21 @@ export class MastodonApiServerService {
this.serverUtilityService.addCORS(fastify);
this.serverUtilityService.addFlattenedQueryType(fastify);
- fastify.setErrorHandler((error, request, reply) => {
- try {
- const data = getErrorData(error);
- const status = getErrorStatus(error);
+ // Convert JS exceptions into error responses
+ fastify.setErrorHandler((error, _, reply) => {
+ const data = getErrorData(error);
+ const status = getErrorStatus(error);
- this.logger.error(request, data, status);
+ reply.code(status).send(data);
+ });
- reply.code(status).send(data);
- } catch (e) {
- this.logger.logger.error('Recursive error in mastodon API - this is a bug!', { e }, true);
+ // Log error responses (including converted JSON exceptions)
+ fastify.addHook('onSend', (request, reply, payload, done) => {
+ if (reply.statusCode >= 400) {
+ const data = getErrorData(payload);
+ this.logger.error(request, data, reply.statusCode);
}
+ done();
});
// External endpoints
diff --git a/packages/backend/src/server/api/mastodon/MastodonLogger.ts b/packages/backend/src/server/api/mastodon/MastodonLogger.ts
index 228f9a631b..096a3521a7 100644
--- a/packages/backend/src/server/api/mastodon/MastodonLogger.ts
+++ b/packages/backend/src/server/api/mastodon/MastodonLogger.ts
@@ -65,6 +65,13 @@ export function getErrorData(error: unknown): MastodonError {
return convertGenericError(error);
}
+ if ('error' in error && typeof(error.error) === 'string') {
+ // "error_description" is string, undefined, or not present.
+ if (!('error_description' in error) || typeof(error.error_description) === 'string' || typeof(error.error_description) === 'undefined') {
+ return error as MastodonError;
+ }
+ }
+
return convertUnknownError(error);
}