tRPC

T

tRPC

Move Fast & Break Nothing. End-to-end typesafe APIs made easy.

Join

input using z.or not working properly

i have an input like this let input = z.object({ name: z.string().optional() }).or(z.object({ id: z.number().optional()...

How can I disable batching with fastify adapter?

I cant seem to find a way to disable batching for my server, and this link doesnt help me much https://trpc.io/docs/v9/links#disabling-request-batching what am I missing? I fell like I miss a sentence or 2 from the docs.......

Issue with monorepo architecture ant tRPC

Hi, we had an issue with batched requests that if we batch some requests they produce a TRPCClientError which says Cannot read properties of undefined (reading 'messsage') so I have read that at least error problem was fixed in newer versions, so we tried to update version, but then the builds started to fail. We get this error (photos in the thread) and more information

Using tRPC in CRON jobs

Hey everyone, this might be a very stupid question, but is it possible to use tRPC inside a CRON job? I saw that Vercel now supports them, and since I use tRPC inside a NextJS project, I thought that it could be used. Unfortunately, I wasn't able to find anything online.

async createContext for Express Adapter

Been debugging an odd behavior for the past hour, it seems like that an async function does not work in the express adapter. Is that supposed to work or is that the expected behavior? If this is a bug i can toss together a quick sandbox, but figured I check first whether this is expected or not. If this is expected behavior, should the async calls happen in middleware instead? Seems a bit at odds. Thoughts?...

Is it possible to split the router definition with the imlementation?

I want to define the server router(input\output\meta) in a separate package from the server package I want to have a package that will contain the types I use + the router definition, another for the server itself(will use the router definition like an interface), and lastly the client package which ill only need to import the types package to work is this possible?...

Cache not working for `useQuery`

I have a query like this: ```js const { data: article, isFetching } = api.public.getArticle.useQuery({ id: targetId, });...

Zod File Upload Validation with Open-Api Support?

Hi guys, anyone know how to validate file upload with zod and get also open-api support?

Zod validation and open-api support for File on the server?

Hi guys, anyone know how to validate a File upload using zod? and also have open-api support?

is context cached?

If I put an object on the context that represents the User record from my database... ``` export async function createContext(event: H3Event){ if (!dbUser) { const userService = new UserService();...

JSON inferred router output not matching

Hello. I have a procedure query which is returning Json from a postgresql db using Prisma. The type in the query on the server is showing up as JsonValue (definitions below). The inferred type from the router.procedure.query() on a createTRPCProxyClient instance comes back as expected, but the type definition using inferRouterOutputs<AppRouter> types the Json data as string | null. Any ideas? Thanks. New to tRPC so sorry if this is a no-brainer....

Best way to implement input based validation on a router procedure

Hi guys, bit of a noob. I have already created a 'protectedProcedure', ensuring the user is logged in, but for some of my procedures, I also want to ensure the user is an ADMIN for the account specified on the input. This is my first try with validation just added at the top of the procedure implementation... ``` changeUserAccessWithinAccount: protectedProcedure .input(z.object({ user_id: z.number(), account_id: z.number(), access: z.enum([ACCOUNT_ACCESS.ADMIN, ACCOUNT_ACCESS.OWNER, ACCOUNT_ACCESS.READ_ONLY, ACCOUNT_ACCESS.READ_WRITE]) })) .query(async ({ ctx, input }) => {...

[Help] Turbo shared types

I have a turborepo with two apps (web and embed). web is a t3 stack and embed is a create-react-app. I am trying to use the trpc endpoint from web to embed. I managed to make it work by configuring web's cors. However, I am getting type issues when importing AppRouter in the embed app. I don't think you can just import AppRouter from web like import type { AppRouter } from "../../../web/src/server/routers/_app"; which is currently what I am doing. So my question is how would I go about this? do I need to somehow share the types between the two? if so how would I do it?. Should I just seperate trpc as an internal package?...

Cache SSG helper response

I'm using createProxySSGHelpers in GSSP with ssr: false in the global config. I trying to cache a response of a public procedure called there, but I'm running into a dead end. I tried following the "App caching" example in the docs (https://trpc.io/docs/caching#app-caching), but the responseMeta option is unavailable if ssr: false. (At least TS tells me so)...

Is there are any relationship between tRPC and RPC(or gRPC)?

So I'm a newbie, and I wonder if there's any connection between these two concepts (or something familiar). thanks for you guys help.

Inference on routes & procedures

I have some routes that all have the same methods/procedures, but the input and output is specific to them due to prisma. I made it this far in making a generic hook but the return type of the data is always "any". Any help would be appreciated. ```ts // server routes const routeOne = router({...

Input is too big for a single dispatch

I decided to try tRPC for my Crypto analytics dashboard. However, I'm having a hard time passing the time series data between the client & the server. First I received an HTTP error Request header too large I was able to fix this by setting maxURLLength However, now I receive another error "Input is too big for a single dispatch" ...

How to manage custom errors (e.g. custom error codes) in tRPC?

What's the recommended way to add fields to a TRPCError? How do you make that typesafe also on the client (e.g. custom error code is a specific union type). Thanks...

typesafe permissions

Hi, So I wanted to infer all the procedures from my router recursively & assign a permission (string[]) to each one them. I wrote the following, ```ts type GetProceduresRecusivelyAndAssignPermissions<T extends AnyRouter> = { [K in keyof T]: T[K] extends AnyProcedure ? { permissions: string[] } : T[K] extends AnyRouter...

awaiting for procedure & logging the response.

Hi, I was wondering if there is a way to handle the return object via the post-middleware's? I know we could do something like, ```ts const logMiddleware = t.middleware(async ({ ctx, next }) => { const res = await next(); // insert logging here return res;...