shinmentakezo07
Add OmniRoute codebase without binary assets
9e4583c
Raw
History Blame Contribute Delete
3.03 kB
"use server";
import { NextResponse } from "next/server";
import { listBackups, restoreBackup, deleteBackup } from "@/shared/services/backupService";
import { ensureCliConfigWriteAllowed } from "@/shared/services/cliRuntime";
const VALID_TOOLS = ["claude", "codex", "droid", "openclaw", "cline", "kilo"];
// GET /api/cli-tools/backups?tool=claude β€” list backups
export async function GET(request) {
try {
const { searchParams } = new URL(request.url);
const tool = searchParams.get("tool") || searchParams.get("toolId");
if (tool && !VALID_TOOLS.includes(tool)) {
return NextResponse.json({ error: `Invalid tool: ${tool}` }, { status: 400 });
}
if (tool) {
const backups = await listBackups(tool);
return NextResponse.json({ tool, backups });
}
// List all tools
const result = {};
for (const t of VALID_TOOLS) {
result[t] = await listBackups(t);
}
return NextResponse.json({ backups: result });
} catch (error) {
console.log("Error listing backups:", error.message);
return NextResponse.json({ error: "Failed to list backups" }, { status: 500 });
}
}
// POST /api/cli-tools/backups { tool, backupId } β€” restore a backup
export async function POST(request) {
try {
const writeGuard = ensureCliConfigWriteAllowed();
if (writeGuard) {
return NextResponse.json({ error: writeGuard }, { status: 403 });
}
const body = await request.json();
const tool = body.tool || body.toolId;
const backupId = body.backupId;
if (!tool || !backupId) {
return NextResponse.json({ error: "tool and backupId are required" }, { status: 400 });
}
if (!VALID_TOOLS.includes(tool)) {
return NextResponse.json({ error: `Invalid tool: ${tool}` }, { status: 400 });
}
const result = await restoreBackup(tool, backupId);
return NextResponse.json({
success: true,
message: `Backup restored for ${tool}`,
...result,
});
} catch (error) {
console.log("Error restoring backup:", error.message);
return NextResponse.json(
{ error: error.message || "Failed to restore backup" },
{ status: 500 }
);
}
}
// DELETE /api/cli-tools/backups { tool, backupId } β€” delete a backup
export async function DELETE(request) {
try {
const body = await request.json();
const tool = body.tool || body.toolId;
const backupId = body.backupId;
if (!tool || !backupId) {
return NextResponse.json({ error: "tool and backupId are required" }, { status: 400 });
}
if (!VALID_TOOLS.includes(tool)) {
return NextResponse.json({ error: `Invalid tool: ${tool}` }, { status: 400 });
}
const result = await deleteBackup(tool, backupId);
return NextResponse.json({
success: true,
message: `Backup deleted for ${tool}`,
...result,
});
} catch (error) {
console.log("Error deleting backup:", error.message);
return NextResponse.json({ error: "Failed to delete backup" }, { status: 500 });
}
}