From 3505cb7d6416d101a4fcb1be27fc22e0171bacd2 Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Sun, 18 May 2025 16:58:08 +0100 Subject: refactor: Migrate from NextJs's API routes to Hono based routes for the API (#1432) * Setup Hono and migrate the highlights API there * Implement the tags and lists endpoint * Implement the bookmarks and users endpoints * Add the trpc error code adapter * Remove the old nextjs handlers * fix api key not found handling * Fix trpc error handling * Fix 204 handling * Fix search ordering * Implement the singlefile endpoint * Implement the asset serving endpoints * Implement webauth * Add hono as a catch all route under api * fix tests --- packages/api/index.ts | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 packages/api/index.ts (limited to 'packages/api/index.ts') diff --git a/packages/api/index.ts b/packages/api/index.ts new file mode 100644 index 00000000..00919f3e --- /dev/null +++ b/packages/api/index.ts @@ -0,0 +1,46 @@ +import { Hono } from "hono"; +import { logger } from "hono/logger"; +import { poweredBy } from "hono/powered-by"; + +import { Context } from "@karakeep/trpc"; + +import trpcAdapter from "./middlewares/trpcAdapter"; +import assets from "./routes/assets"; +import bookmarks from "./routes/bookmarks"; +import highlights from "./routes/highlights"; +import lists from "./routes/lists"; +import tags from "./routes/tags"; +import users from "./routes/users"; + +const v1 = new Hono<{ + Variables: { + ctx: Context; + }; +}>() + .route("/highlights", highlights) + .route("/bookmarks", bookmarks) + .route("/lists", lists) + .route("/tags", tags) + .route("/users", users) + .route("/assets", assets); + +const app = new Hono<{ + Variables: { + // This is going to be coming from the web app + ctx: Context; + }; +}>() + .use(logger()) + .use(poweredBy()) + .use(async (c, next) => { + // Ensure that the ctx is set + if (!c.var.ctx) { + throw new Error("Context is not set"); + } + await next(); + }) + .use(trpcAdapter) + .route("/v1", v1) + .route("/assets", assets); + +export default app; -- cgit v1.2.3-70-g09d2