import { initTRPC } from '@trpc/server' import { z } from 'zod' import type { H3Event } from 'h3' import type { inferAsyncReturnType } from '@trpc/server' const baseURL = 'https://jsonplaceholder.typicode.com' const TodoShape = z.object({ userId: z.number(), id: z.number(), title: z.string(), completed: z.boolean(), }) export type Todo = z.infer const t = initTRPC.context().create() // We explicitly export the methods we use here // This allows us to create reusable & protected base procedures export const middleware = t.middleware export const router = t.router export const publicProcedure = t.procedure export const appRouter = router({ getTodos: publicProcedure.query(() => { return $fetch(`${baseURL}/todos`) }), getTodo: publicProcedure .input(z.number()) .query((req) => { return $fetch(`${baseURL}/todos/${req.input}`) }), addTodo: publicProcedure .input(TodoShape) .mutation((req) => { return $fetch(`${baseURL}/todos`, { method: 'POST', body: req.input, }) }), }) export type AppRouter = typeof appRouter export async function createContext(event: H3Event) { // Create your context based on the request object // Will be available as `ctx` in all your resolvers // This is just an example of something you'd might want to do in your ctx fn // const x = useCookies(event) console.log(event.req.headers) return { } } type Context = inferAsyncReturnType