aboutsummaryrefslogtreecommitdiffstats
path: root/packages/api/index.ts
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-05-18 16:58:08 +0100
committerGitHub <noreply@github.com>2025-05-18 16:58:08 +0100
commit3505cb7d6416d101a4fcb1be27fc22e0171bacd2 (patch)
treeef9f55504b8a5b20add8c0ebe916972ab4ab0178 /packages/api/index.ts
parent74e74fa6425f072107de3a9bc9dd8f91c5ac9a7d (diff)
downloadkarakeep-3505cb7d6416d101a4fcb1be27fc22e0171bacd2.tar.zst
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
Diffstat (limited to 'packages/api/index.ts')
-rw-r--r--packages/api/index.ts46
1 files changed, 46 insertions, 0 deletions
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;