diff options
| author | MohamedBassem <me@mbassem.com> | 2024-02-12 14:52:00 +0000 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-02-12 14:55:00 +0000 |
| commit | 6aacc0c7a86e36c52a3c2c1d26fe58cefcd3bec4 (patch) | |
| tree | bad306e872d6bfcc2c67f00caa3880c8aa56070f /packages/web/server/api/routers/apiKeys.ts | |
| parent | 230cafb6dfc8d3bad57d84ef13c3669f5bf5331a (diff) | |
| download | karakeep-6aacc0c7a86e36c52a3c2c1d26fe58cefcd3bec4.tar.zst | |
feature: Add support for managing API keys
Diffstat (limited to 'packages/web/server/api/routers/apiKeys.ts')
| -rw-r--r-- | packages/web/server/api/routers/apiKeys.ts | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/packages/web/server/api/routers/apiKeys.ts b/packages/web/server/api/routers/apiKeys.ts new file mode 100644 index 00000000..b681d43f --- /dev/null +++ b/packages/web/server/api/routers/apiKeys.ts @@ -0,0 +1,67 @@ +import { generateApiKey } from "@/server/auth"; +import { authedProcedure, router } from "../trpc"; +import { prisma } from "@remember/db"; +import { z } from "zod"; + +export const apiKeysAppRouter = router({ + create: authedProcedure + .input( + z.object({ + name: z.string(), + }), + ) + .output( + z.object({ + id: z.string(), + name: z.string(), + key: z.string(), + createdAt: z.date(), + }), + ) + .mutation(async ({ input, ctx }) => { + return await generateApiKey(input.name, ctx.user.id); + }), + revoke: authedProcedure + .input( + z.object({ + id: z.string(), + }), + ) + .output(z.object({})) + .mutation(async ({ input, ctx }) => { + const resp = await prisma.apiKey.delete({ + where: { + id: input.id, + userId: ctx.user.id, + }, + }); + return resp; + }), + list: authedProcedure + .output( + z.object({ + keys: z.array( + z.object({ + id: z.string(), + name: z.string(), + createdAt: z.date(), + keyId: z.string(), + }), + ), + }), + ) + .query(async ({ ctx }) => { + const resp = await prisma.apiKey.findMany({ + where: { + userId: ctx.user.id, + }, + select: { + id: true, + name: true, + createdAt: true, + keyId: true, + }, + }); + return { keys: resp }; + }), +}); |
