UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

81 lines (68 loc) 2.29 kB
import { z } from 'zod'; import { ApiKeyModel } from '@/database/models/apiKey'; import { authedProcedure, router } from '@/libs/trpc/lambda'; import { serverDatabase } from '@/libs/trpc/lambda/middleware'; import { KeyVaultsGateKeeper } from '@/server/modules/KeyVaultsEncrypt'; const apiKeyProcedure = authedProcedure.use(serverDatabase).use(async (opts) => { const { ctx } = opts; const gateKeeper = await KeyVaultsGateKeeper.initWithEnvKey(); return opts.next({ ctx: { apiKeyModel: new ApiKeyModel(ctx.serverDB, ctx.userId), gateKeeper, }, }); }); export const apiKeyRouter = router({ createApiKey: apiKeyProcedure .input( z.object({ expiresAt: z.date().optional().nullable(), name: z.string(), }), ) .mutation(async ({ input, ctx }) => { return await ctx.apiKeyModel.create(input, ctx.gateKeeper.encrypt); }), deleteAllApiKeys: apiKeyProcedure.mutation(async ({ ctx }) => { return ctx.apiKeyModel.deleteAll(); }), deleteApiKey: apiKeyProcedure .input(z.object({ id: z.number() })) .mutation(async ({ input, ctx }) => { return ctx.apiKeyModel.delete(input.id); }), getApiKey: apiKeyProcedure .input(z.object({ apiKey: z.string() })) .query(async ({ input, ctx }) => { return ctx.apiKeyModel.findByKey(input.apiKey, ctx.gateKeeper.encrypt); }), getApiKeyById: apiKeyProcedure .input(z.object({ id: z.number() })) .query(async ({ input, ctx }) => { return ctx.apiKeyModel.findById(input.id); }), getApiKeys: apiKeyProcedure.query(async ({ ctx }) => { return ctx.apiKeyModel.query(ctx.gateKeeper.decrypt); }), updateApiKey: apiKeyProcedure .input( z.object({ id: z.number(), value: z.object({ description: z.string().optional(), enabled: z.boolean().optional(), expiresAt: z.date().optional().nullable(), name: z.string().optional(), }), }), ) .mutation(async ({ input, ctx }) => { return ctx.apiKeyModel.update(input.id, input.value); }), validateApiKey: apiKeyProcedure .input(z.object({ key: z.string() })) .query(async ({ input, ctx }) => { return ctx.apiKeyModel.validateKey(input.key); }), });