2023-10-04 17:36:52 +03:00

39 lines
914 B
TypeScript

import { HttpError } from './error';
import { TRPCError } from '@trpc/server';
import type { TRPC_ERROR_CODE_KEY } from '@trpc/server/rpc';
const HTTP_CODE_TO_JSONRPC2: Record<number, TRPC_ERROR_CODE_KEY> = {
400: 'BAD_REQUEST',
401: 'UNAUTHORIZED',
403: 'FORBIDDEN',
404: 'NOT_FOUND',
405: 'METHOD_NOT_SUPPORTED',
408: 'TIMEOUT',
409: 'CONFLICT',
412: 'PRECONDITION_FAILED',
413: 'PAYLOAD_TOO_LARGE',
429: 'TOO_MANY_REQUESTS',
499: 'CLIENT_CLOSED_REQUEST',
500: 'INTERNAL_SERVER_ERROR',
};
export function createTRPCError(error: unknown) {
let code: TRPC_ERROR_CODE_KEY = 'INTERNAL_SERVER_ERROR';
let message = '';
if (error instanceof HttpError) {
const { statusCode = 500 } = error;
code = HTTP_CODE_TO_JSONRPC2[statusCode];
}
if (error instanceof Error) {
message = error.message;
}
return new TRPCError({
cause: error,
code,
message,
});
}