diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-07-02 00:08:51 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-07-04 16:27:29 +0000 |
| commit | f5e737bf9645271f8525070f9ba6de1f476fafd9 (patch) | |
| tree | fd99f88429d31a19750d7518a2a84d2c61a275db | |
| parent | 474ca7f221de4aa918e9ce658fe285e25191f628 (diff) | |
| download | karakeep-f5e737bf9645271f8525070f9ba6de1f476fafd9.tar.zst | |
refactor: Move the trpc endpoint to hono
| -rw-r--r-- | apps/web/app/api/trpc/[trpc]/route.ts | 22 | ||||
| -rw-r--r-- | packages/api/index.ts | 2 | ||||
| -rw-r--r-- | packages/api/package.json | 1 | ||||
| -rw-r--r-- | packages/api/routes/trpc.ts | 28 | ||||
| -rw-r--r-- | pnpm-lock.yaml | 15 |
5 files changed, 46 insertions, 22 deletions
diff --git a/apps/web/app/api/trpc/[trpc]/route.ts b/apps/web/app/api/trpc/[trpc]/route.ts deleted file mode 100644 index 87e262f3..00000000 --- a/apps/web/app/api/trpc/[trpc]/route.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { createContextFromRequest } from "@/server/api/client"; -import { fetchRequestHandler } from "@trpc/server/adapters/fetch"; - -import { appRouter } from "@karakeep/trpc/routers/_app"; - -const handler = (req: Request) => - fetchRequestHandler({ - endpoint: "/api/trpc", - req, - router: appRouter, - onError: ({ path, error }) => { - if (process.env.NODE_ENV === "development") { - console.error(`❌ tRPC failed on ${path}`); - } - console.error(error); - }, - - createContext: async (opts) => { - return await createContextFromRequest(opts.req); - }, - }); -export { handler as GET, handler as POST }; diff --git a/packages/api/index.ts b/packages/api/index.ts index 5147ea37..ab7cdbe2 100644 --- a/packages/api/index.ts +++ b/packages/api/index.ts @@ -12,6 +12,7 @@ import lists from "./routes/lists"; import publicRoute from "./routes/public"; import rss from "./routes/rss"; import tags from "./routes/tags"; +import trpc from "./routes/trpc"; import users from "./routes/users"; const v1 = new Hono<{ @@ -43,6 +44,7 @@ const app = new Hono<{ await next(); }) .use(trpcAdapter) + .route("/trpc", trpc) .route("/v1", v1) .route("/assets", assets) .route("/public", publicRoute); diff --git a/packages/api/package.json b/packages/api/package.json index d51b108b..54656e64 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -13,6 +13,7 @@ "test": "vitest" }, "dependencies": { + "@hono/trpc-server": "^0.4.0", "@hono/zod-validator": "^0.5.0", "@karakeep/db": "workspace:*", "@karakeep/shared": "workspace:*", diff --git a/packages/api/routes/trpc.ts b/packages/api/routes/trpc.ts new file mode 100644 index 00000000..3d83f64a --- /dev/null +++ b/packages/api/routes/trpc.ts @@ -0,0 +1,28 @@ +import { trpcServer } from "@hono/trpc-server"; +import { Hono } from "hono"; + +import { Context } from "@karakeep/trpc"; +import { appRouter } from "@karakeep/trpc/routers/_app"; + +const trpc = new Hono<{ + Variables: { + ctx: Context; + }; +}>().use( + "/*", + trpcServer({ + endpoint: "/api/trpc", + router: appRouter, + createContext: (_, c) => { + return c.var.ctx; + }, + onError: ({ path, error }) => { + if (process.env.NODE_ENV === "development") { + console.error(`❌ tRPC failed on ${path}`); + } + console.error(error); + }, + }), +); + +export default trpc; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8abb7ee1..56038d5b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -929,6 +929,9 @@ importers: packages/api: dependencies: + '@hono/trpc-server': + specifier: ^0.4.0 + version: 0.4.0(@trpc/server@11.0.0(typescript@5.8.2))(hono@4.7.11) '@hono/zod-validator': specifier: ^0.5.0 version: 0.5.0(hono@4.7.11)(zod@3.24.2) @@ -3131,6 +3134,13 @@ packages: '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@hono/trpc-server@0.4.0': + resolution: {integrity: sha512-LGlJfCmNIGMwcknZEIYdujVMs9OkNVazhpOhaz3kTWOXvNL660VOHpvvktosCiJrajyBY1RtIJKQ+IKaQvNuSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@trpc/server': ^10.10.0 || >11.0.0-rc + hono: '>=4.*' + '@hono/zod-validator@0.5.0': resolution: {integrity: sha512-ds5bW6DCgAnNHP33E3ieSbaZFd5dkV52ZjyaXtGoR06APFrCtzAsKZxTHwOrJNBdXsi0e5wNwo5L4nVEVnJUdg==} peerDependencies: @@ -17517,6 +17527,11 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 + '@hono/trpc-server@0.4.0(@trpc/server@11.0.0(typescript@5.8.2))(hono@4.7.11)': + dependencies: + '@trpc/server': 11.0.0(typescript@5.8.2) + hono: 4.7.11 + '@hono/zod-validator@0.5.0(hono@4.7.11)(zod@3.24.2)': dependencies: hono: 4.7.11 |
