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 = { 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, }); }