67 lines
1.6 KiB
TypeScript
67 lines
1.6 KiB
TypeScript
import { z } from "zod";
|
|
import { requireAdmin } from "@/lib/middleware/admin";
|
|
import {
|
|
getAllToolConfigs,
|
|
getToolConfig,
|
|
upsertToolConfig,
|
|
} from "@/lib/db/queries";
|
|
import { ChatSDKError } from "@/lib/errors";
|
|
|
|
const toolConfigSchema = z.object({
|
|
toolName: z.string(),
|
|
isEnabled: z.boolean(),
|
|
description: z.string().optional(),
|
|
config: z.any().optional(),
|
|
});
|
|
|
|
export async function GET(request: Request) {
|
|
try {
|
|
await requireAdmin();
|
|
|
|
const { searchParams } = new URL(request.url);
|
|
const toolName = searchParams.get("toolName");
|
|
|
|
if (toolName) {
|
|
const config = await getToolConfig({ toolName });
|
|
return Response.json({ config });
|
|
}
|
|
|
|
const configs = await getAllToolConfigs();
|
|
return Response.json({ configs });
|
|
} catch (error) {
|
|
if (error instanceof ChatSDKError) {
|
|
return error.toResponse();
|
|
}
|
|
return new ChatSDKError("offline:admin").toResponse();
|
|
}
|
|
}
|
|
|
|
export async function POST(request: Request) {
|
|
try {
|
|
const session = await requireAdmin();
|
|
|
|
const body = await request.json();
|
|
const { toolName, isEnabled, description, config } =
|
|
toolConfigSchema.parse(body);
|
|
|
|
const result = await upsertToolConfig({
|
|
toolName,
|
|
isEnabled,
|
|
description,
|
|
config,
|
|
updatedBy: session.user.id,
|
|
});
|
|
|
|
return Response.json({ config: result[0] });
|
|
} catch (error) {
|
|
if (error instanceof ChatSDKError) {
|
|
return error.toResponse();
|
|
}
|
|
if (error instanceof z.ZodError) {
|
|
return new ChatSDKError("bad_request:api", error.message).toResponse();
|
|
}
|
|
return new ChatSDKError("offline:admin").toResponse();
|
|
}
|
|
}
|
|
|