spb/autoscholar
Public
1import { allSettings, getEnv, SETTING_KEYS, setSetting } from "@autoscholar/core";2import { z } from "zod";3import { handler, json, parseBody } from "@/lib/server/api";4import { db } from "@/lib/server/db";5import { requireAdmin } from "@/lib/server/session";67export const runtime = "nodejs";89export const GET = handler(async (req) => {10 await requireAdmin(req);11 const env = getEnv();12 return json({13 settings: await allSettings(db()),14 env: {15 publishingEnabled: env.PUBLISHING_ENABLED === 1,16 dispatchEnabled: env.DISPATCH_ENABLED === 1,17 stagingMode: env.STAGING_MODE === 1,18 model: env.ANTHROPIC_MODEL,19 reviewerModel: env.ANTHROPIC_REVIEWER_MODEL,20 defaultBudgetUsd: env.DEFAULT_MAX_BUDGET_USD,21 defaultRuntimeMinutes: env.DEFAULT_MAX_RUNTIME_MINUTES,22 leaseTtlSeconds: env.LEASE_TTL_SECONDS,23 },24 providers: {25 anthropicKeyOnControlPlane: !!process.env.ANTHROPIC_API_KEY,26 enrollmentSecretConfigured: !!env.WORKER_ENROLLMENT_SECRET,27 },28 });29});3031export const POST = handler(async (req) => {32 const sess = await requireAdmin(req, { mutation: true });33 const body = await parseBody(34 req,35 z.object({36 key: z.enum([37 SETTING_KEYS.dispatchPaused,38 SETTING_KEYS.publishingHalted,39 SETTING_KEYS.publishingHaltedModes,40 ]),41 value: z.union([z.boolean(), z.array(z.string())]),42 }),43 );44 await setSetting(db(), body.key, body.value, { id: sess.userId, ip: sess.ip });45 return json({ ok: true });46});47