From 27dd6a0fd672f9cab6903035af646980566fe481 Mon Sep 17 00:00:00 2001 From: Ahmed Elsakaan Date: Sun, 26 May 2024 01:08:42 +0100 Subject: [PATCH] feat: trpc api --- README.md | 3 +- bun.lockb | Bin 397294 -> 400831 bytes cspell.config.yaml | 3 +- package.json | 6 +++ src/app/(dashboard)/app/page.tsx | 6 ++- src/app/api/trpc/[trpc]/route.ts | 29 +++++++++++++ src/app/layout.tsx | 3 +- src/lib/trpc/react.tsx | 68 +++++++++++++++++++++++++++++++ src/lib/trpc/server.ts | 18 ++++++++ src/server/index.ts | 10 +++++ src/server/routers/greeting.ts | 13 ++++++ src/server/trpc.ts | 46 +++++++++++++++++++++ 12 files changed, 200 insertions(+), 5 deletions(-) create mode 100644 src/app/api/trpc/[trpc]/route.ts create mode 100644 src/lib/trpc/react.tsx create mode 100644 src/lib/trpc/server.ts create mode 100644 src/server/index.ts create mode 100644 src/server/routers/greeting.ts create mode 100644 src/server/trpc.ts diff --git a/README.md b/README.md index 63ed8969..df09c3f8 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ - [x] Playwright E2E tests. - [x] github actions. - [x] SEO (dub.co is a great reference) for example robots.ts file. +- [x] tRPC api with tanstack query. - [ ] Shadcn UI. - [ ] Slate/Plate.js editor. -- [ ] tRPC api with tanstack query. - [ ] New & Refined README.md. - [ ] Add a `CONTRIBUTING.md` file. @@ -18,7 +18,6 @@ - [x] Neon Database / Drizzle orm. - [x] Upstash redis - [x] Clerk authentication. -- [ ] Arcjet. - [ ] Resend & React email. - [ ] Stripe payment. - [ ] Sentry. diff --git a/bun.lockb b/bun.lockb index 529f0bd18d3a52b9bf555b97ba1658962e386e60..132832e582b553eb6728d1749bc8a53f283580b6 100755 GIT binary patch delta 81362 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

-}n6slXCw! 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 T=1)3$=pFy&p?4DY%>4fV^#!`u delta 79608 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

-S_0;qtpZ&`fPP_sXXb_h>jZWR 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

Hello World

+

{message}

); } diff --git a/src/app/api/trpc/[trpc]/route.ts b/src/app/api/trpc/[trpc]/route.ts new file mode 100644 index 00000000..71570b8d --- /dev/null +++ b/src/app/api/trpc/[trpc]/route.ts @@ -0,0 +1,29 @@ +import type { NextRequest } from 'next/server'; + +import { fetchRequestHandler } from '@trpc/server/adapters/fetch'; + +import { env } from '@/env'; +import { appRouter } from '@/server'; +import { createTRPCContext } from '@/server/trpc'; + +const createContext = async (req: NextRequest) => { + return createTRPCContext({ + headers: req.headers, + }); +}; + +const handler = (req: NextRequest) => + fetchRequestHandler({ + endpoint: '/api/trpc', + req, + router: appRouter, + createContext: () => createContext(req), + onError: ({ path, error }) => { + env.NODE_ENV === 'development' && + console.error( + `❌ tRPC failed on ${path ?? ''}: ${error.message}`, + ); + }, + }); + +export { handler as GET, handler as POST }; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 13a9f52d..9c76917c 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -12,6 +12,7 @@ import { ThemeProvider } from 'next-themes'; import type { PropsWithChildren } from 'react'; import { constructMetadata } from '@/lib/utils'; +import { TRPCReactProvider } from '@/lib/trpc/react'; export const metadata: Metadata = constructMetadata(); @@ -34,7 +35,7 @@ export default function RootLayout({ children }: PropsWithChildren) { > - {children} + {children} diff --git a/src/lib/trpc/react.tsx b/src/lib/trpc/react.tsx new file mode 100644 index 00000000..2d037c76 --- /dev/null +++ b/src/lib/trpc/react.tsx @@ -0,0 +1,68 @@ +'use client'; + +import { useState } from 'react'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { loggerLink, unstable_httpBatchStreamLink } from '@trpc/client'; +import { createTRPCReact } from '@trpc/react-query'; +import { type inferRouterInputs, type inferRouterOutputs } from '@trpc/server'; +import superjson from 'superjson'; + +import { getBaseUrl } from '@/lib/utils'; +import { type AppRouter } from '@/server'; + +const createQueryClient = () => new QueryClient(); + +let clientQueryClientSingleton: QueryClient | undefined = undefined; +const getQueryClient = () => { + if (typeof window === 'undefined') { + return createQueryClient(); + } + return (clientQueryClientSingleton ??= createQueryClient()); +}; + +export const api = createTRPCReact(); + +export type RouterInputs = inferRouterInputs; +export type RouterOutputs = inferRouterOutputs; + +/** + * The TRPC React Provider is a component that initializes trpc and react query. + * @param props Props for the TRPC React Provider. + * @param props.children The children of the TRPC React Provider, which would be + * the entire page/layout in most cases. + * @returns React Provider component that initializes trpc and react query + * integration for the client. + */ +export function TRPCReactProvider(props: { children: React.ReactNode }) { + const queryClient = getQueryClient(); + + const [trpcClient] = useState(() => + api.createClient({ + links: [ + loggerLink({ + enabled: (op) => + process.env.NODE_ENV === 'development' || + (op.direction === 'down' && op.result instanceof Error), + }), + unstable_httpBatchStreamLink({ + transformer: superjson, + url: getBaseUrl() + '/api/trpc', + headers: () => { + const headers = new Headers(); + headers.set('x-trpc-source', 'nextjs-react'); + return headers; + }, + }), + ], + }), + ); + + return ( + + + {props.children} + + + ); +} diff --git a/src/lib/trpc/server.ts b/src/lib/trpc/server.ts new file mode 100644 index 00000000..31d70046 --- /dev/null +++ b/src/lib/trpc/server.ts @@ -0,0 +1,18 @@ +import 'server-only'; + +import { cache } from 'react'; +import { headers } from 'next/headers'; + +import { createCaller } from '@/server'; +import { createTRPCContext } from '@/server/trpc'; + +const createContext = cache(async () => { + const heads = new Headers(headers()); + heads.set('x-trpc-source', 'rsc'); + + return createTRPCContext({ + headers: heads, + }); +}); + +export const api = createCaller(createContext); diff --git a/src/server/index.ts b/src/server/index.ts new file mode 100644 index 00000000..b3d6d3f6 --- /dev/null +++ b/src/server/index.ts @@ -0,0 +1,10 @@ +import { greetingRouter } from './routers/greeting'; +import { createCallerFactory, createRouter } from './trpc'; + +export const appRouter = createRouter({ + greeting: greetingRouter, +}); + +export type AppRouter = typeof appRouter; + +export const createCaller = createCallerFactory(appRouter); diff --git a/src/server/routers/greeting.ts b/src/server/routers/greeting.ts new file mode 100644 index 00000000..f37b4821 --- /dev/null +++ b/src/server/routers/greeting.ts @@ -0,0 +1,13 @@ +import { z } from 'zod'; + +import { createRouter, protectedProcedure } from '../trpc'; + +export const greetingRouter = createRouter({ + protected: protectedProcedure + .input(z.object({ name: z.string().optional() }).optional()) + .query(({ input, ctx }) => { + return { + message: `Hello, ${input?.name ?? ctx.session.firstName ?? ''}, I'm from the tRPC procedure!`, + }; + }), +}); diff --git a/src/server/trpc.ts b/src/server/trpc.ts new file mode 100644 index 00000000..e5249653 --- /dev/null +++ b/src/server/trpc.ts @@ -0,0 +1,46 @@ +import { currentUser } from '@clerk/nextjs/server'; +import { initTRPC, TRPCError } from '@trpc/server'; +import superjson from 'superjson'; +import { ZodError } from 'zod'; + +import { db } from '@/db'; + +export const createTRPCContext = async (opts: { headers: Headers }) => { + const session = await currentUser(); + + return { + db, + session, + ...opts, + }; +}; + +const t = initTRPC.context().create({ + transformer: superjson, + errorFormatter({ shape, error }) { + return { + ...shape, + data: { + ...shape.data, + zodError: + error.cause instanceof ZodError ? error.cause.flatten() : null, + }, + }; + }, +}); + +export const createCallerFactory = t.createCallerFactory; +export const createRouter = t.router; +export const publicProcedure = t.procedure; + +export const protectedProcedure = t.procedure.use(({ ctx, next }) => { + if (!ctx.session) { + throw new TRPCError({ code: 'UNAUTHORIZED' }); + } + + return next({ + ctx: { + session: { ...ctx.session }, + }, + }); +});