aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web/server/api/trpc.ts
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-11 14:54:52 +0000
committerMohamedBassem <me@mbassem.com>2024-02-11 14:55:09 +0000
commit2c2d05fd0a2c3c26d765f8a6beb88d907a097c1d (patch)
treec4738ba0bc011d60361f89aca9be3293474ab9e9 /packages/web/server/api/trpc.ts
parentc2f1d6d8b8a0f09820153fc736806b147d46abfe (diff)
downloadkarakeep-2c2d05fd0a2c3c26d765f8a6beb88d907a097c1d.tar.zst
refactor: Migrating to trpc instead of next's route handers
Diffstat (limited to 'packages/web/server/api/trpc.ts')
-rw-r--r--packages/web/server/api/trpc.ts31
1 files changed, 31 insertions, 0 deletions
diff --git a/packages/web/server/api/trpc.ts b/packages/web/server/api/trpc.ts
new file mode 100644
index 00000000..82aa2d18
--- /dev/null
+++ b/packages/web/server/api/trpc.ts
@@ -0,0 +1,31 @@
+import { TRPCError, initTRPC } from "@trpc/server";
+import { Session } from "next-auth";
+
+export type Context = {
+ session: Session | null;
+};
+
+// Avoid exporting the entire t-object
+// since it's not very descriptive.
+// For instance, the use of a t variable
+// is common in i18n libraries.
+const t = initTRPC.context<Context>().create();
+export const createCallerFactory = t.createCallerFactory;
+// Base router and procedure helpers
+export const router = t.router;
+export const procedure = t.procedure;
+export const publicProcedure = t.procedure;
+
+export const authedProcedure = t.procedure.use(function isAuthed(opts) {
+ const user = opts.ctx.session?.user;
+
+ if (!user) {
+ throw new TRPCError({ code: "UNAUTHORIZED" });
+ }
+
+ return opts.next({
+ ctx: {
+ user,
+ },
+ });
+});