40 lines · 1.3 KB · TypeScript
RawDownload
import { NextRequest } from "next/server";import { parseGitAction } from "@/features/agent/contracts";import { assertGitCwd, loadGitState, runGitAction } from "@/features/agent/git";import { requireApiAccess } from "@/lib/auth/guard";import { errorMessage, jsonError } from "@/app/api/_lib/route-helpers"; export const runtime = "nodejs";export const dynamic = "force-dynamic"; export async function GET(request: NextRequest) {  const denied = requireApiAccess(request);  if (denied) return denied;  const { cwd, error } = assertGitCwd(request.nextUrl.searchParams.get("cwd"));  if (error) return error;  try {    return Response.json(await loadGitState(cwd));  } catch (err) {    return jsonError(errorMessage(err, "Git operation failed"));  }} export async function POST(request: NextRequest) {  const denied = requireApiAccess(request);  if (denied) return denied;  const { cwd, error } = assertGitCwd(request.nextUrl.searchParams.get("cwd"));  if (error) return error;  let body: unknown;  try {    body = await request.json();  } catch {    return jsonError("Invalid JSON body");  }  const action = parseGitAction(body);  if (!action.ok) return jsonError(action.error);  try {    return Response.json(await runGitAction(cwd, action.value));  } catch (err) {    return jsonError(errorMessage(err, "Git operation failed"));  }}