Replace remote with local repo
This commit is contained in:
44
app/api/tools/unlock/route.ts
Normal file
44
app/api/tools/unlock/route.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* POST /api/tools/unlock { handle, toolId }
|
||||
* Deducts VOID credits and permanently marks the tool as unlocked for this handle.
|
||||
*/
|
||||
|
||||
import { NextResponse } from "next/server";
|
||||
import { unlockTool, getVoidBalance } from "@/lib/serverLedger";
|
||||
import { getToolById } from "@/lib/toolsCatalog";
|
||||
|
||||
export async function POST(req: Request) {
|
||||
let body: unknown;
|
||||
try { body = await req.json(); } catch {
|
||||
return NextResponse.json({ ok: false, error: "Invalid JSON" }, { status: 400 });
|
||||
}
|
||||
|
||||
const { handle, toolId } = (body as Record<string, unknown>) ?? {};
|
||||
|
||||
if (typeof handle !== "string" || !handle.trim()) {
|
||||
return NextResponse.json({ ok: false, error: "handle is required" }, { status: 400 });
|
||||
}
|
||||
if (typeof toolId !== "string" || !toolId.trim()) {
|
||||
return NextResponse.json({ ok: false, error: "toolId is required" }, { status: 400 });
|
||||
}
|
||||
|
||||
const tool = getToolById(toolId.trim());
|
||||
if (!tool) {
|
||||
return NextResponse.json({ ok: false, error: "Unknown tool" }, { status: 404 });
|
||||
}
|
||||
if (tool.comingSoon) {
|
||||
return NextResponse.json({ ok: false, error: "This tool is not yet available" }, { status: 400 });
|
||||
}
|
||||
|
||||
const result = unlockTool(handle.trim(), tool.id, tool.cost);
|
||||
if (!result.ok) {
|
||||
return NextResponse.json({ ok: false, error: result.error }, { status: 402 });
|
||||
}
|
||||
|
||||
return NextResponse.json({
|
||||
ok: true,
|
||||
toolId: tool.id,
|
||||
voidSpent: tool.cost,
|
||||
voidBalance: getVoidBalance(handle.trim()),
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user