UNPKG

@bitzonegaming/roleplay-engine-framework

Version:
68 lines (67 loc) 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createErrorHandler = createErrorHandler; const roleplay_engine_sdk_1 = require("@bitzonegaming/roleplay-engine-sdk"); const errors_1 = require("../../core/errors"); const service_1 = require("../../domains/localization/service"); /** * Creates an error handler with access to the server context for localization * @param context - The server context for accessing services * @returns The error handler function */ function createErrorHandler(context) { return async function errorHandler(error, request, reply) { if (error instanceof roleplay_engine_sdk_1.EngineError) { context.logger.error(`[EngineError] Http request failed for [${request.method}] ${request.url}`, error); reply.status(error.statusCode).send({ key: error.key, message: error.message, params: error.params, }); return; } if (error instanceof errors_1.GamemodeServerError) { const acceptLanguage = request.headers['accept-language']; const locale = acceptLanguage ? acceptLanguage.split(',')[0].split(';')[0].trim() : undefined; const localizationService = context.getService(service_1.LocalizationService); const translatedErrorMessage = localizationService.translateError(error.key, error.params, locale); const message = error.message && translatedErrorMessage === error.key ? error.message : translatedErrorMessage; reply.status(error.statusCode).send({ key: error.key, message: message, params: error.params, }); return; } // Handle validation errors if ('validation' in error && error.validation) { reply.status(400).send({ key: 'VALIDATION_ERROR', message: 'Request validation failed', params: { details: JSON.stringify(error.validation), }, }); return; } // Handle other Fastify errors if ('statusCode' in error && typeof error.statusCode === 'number') { reply.status(error.statusCode).send({ key: 'HTTP_ERROR', message: error.message, params: {}, }); return; } // Default to 500 for unknown errors reply.status(500).send({ key: 'INTERNAL_SERVER_ERROR', message: 'An unexpected error occurred', params: { message: error.message, }, }); }; }