File size: 1,147 Bytes
4e23b01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import { ErrorCodes, isError2 } from '@moonshot-ai/agent-core-v2';
import { errEnvelope } from './envelope';
import { ErrorCode } from './protocol/error-codes';
import type { FastifyError } from 'fastify';
interface ErrorHandlerHost {
setErrorHandler(
handler: (
err: FastifyError,
req: { id: string; log: { error: (obj: object | string, msg?: string) => void } },
reply: { status(code: number): { send(payload: unknown): void } },
) => void,
): unknown;
}
export function installErrorHandler(app: ErrorHandlerHost): void {
app.setErrorHandler((err, req, reply) => {
const requestId = req.id;
if (isError2(err) && err.code === ErrorCodes.CONFIG_INVALID) {
reply
.status(200)
.send(errEnvelope(ErrorCode.VALIDATION_FAILED, err.message, requestId, err.stack));
return;
}
req.log.error({ err, request_id: requestId }, 'unhandled error');
reply.status(200).send(
errEnvelope(
ErrorCode.INTERNAL_ERROR,
err.message !== undefined && err.message !== '' ? err.message : 'internal error',
requestId,
err.stack,
),
);
});
}
|