43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import type { APIRoute } from 'astro';
|
|
import { MECHANIC_OPS } from '@/lib/db/mechanic';
|
|
|
|
export const POST: APIRoute = async ({ request }) => {
|
|
// 1. Security Check (The Token)
|
|
const authHeader = request.headers.get('Authorization');
|
|
const token = import.meta.env.GOD_MODE_TOKEN || process.env.GOD_MODE_TOKEN;
|
|
|
|
// Allow either Bearer token or exact match (for flexibility)
|
|
if (authHeader !== `Bearer ${token}` && request.headers.get('X-God-Token') !== token) {
|
|
return new Response('Unauthorized: You are not God.', { status: 401 });
|
|
}
|
|
|
|
// 2. Parse the Command
|
|
const body = await request.json();
|
|
const op = body.operation; // 'vacuum', 'reindex', 'kill_locks'
|
|
|
|
try {
|
|
let result = '';
|
|
|
|
// 3. Execute the Mechanic
|
|
switch (op) {
|
|
case 'vacuum':
|
|
result = await MECHANIC_OPS.maintenance.vacuum();
|
|
break;
|
|
case 'reindex':
|
|
result = await MECHANIC_OPS.maintenance.reindex();
|
|
break;
|
|
case 'kill_locks':
|
|
result = await MECHANIC_OPS.maintenance.kill_locks();
|
|
break;
|
|
default:
|
|
return new Response('Unknown Operation', { status: 400 });
|
|
}
|
|
|
|
// 4. Return Success
|
|
return new Response(result, { status: 200 });
|
|
|
|
} catch (error) {
|
|
return new Response(`Error: ${(error as Error).message}`, { status: 500 });
|
|
}
|
|
};
|