49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { getCanvasAgentFeatureFlagsFromSystemSettings } from "@/lib/canvas/agent-feature-settings";
|
|
import { applyCanvasOperationPlan } from "@/lib/canvas/agent-mutations";
|
|
import { handleCanvasAgentOperationRouteRequest } from "@/lib/canvas/agent-operation-route";
|
|
import { z } from "zod";
|
|
import {
|
|
openApiErrorResponse,
|
|
requireOpenApiPrincipal,
|
|
} from "@/lib/access-keys/openapi-auth";
|
|
|
|
const canvasIdSchema = z.string().uuid();
|
|
|
|
export async function POST(
|
|
request: Request,
|
|
{ params }: { params: Promise<{ id: string }> }
|
|
) {
|
|
try {
|
|
const principal = await requireOpenApiPrincipal(request, "canvas:write");
|
|
const { id: rawId } = await params;
|
|
const parsedId = canvasIdSchema.safeParse(rawId);
|
|
if (!parsedId.success) {
|
|
return Response.json(
|
|
{
|
|
success: false,
|
|
error: "Invalid canvas ID",
|
|
code: "INVALID_CANVAS_ID",
|
|
},
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
const id = parsedId.data;
|
|
const response = await handleCanvasAgentOperationRouteRequest({
|
|
userId: principal.userId,
|
|
projectId: id,
|
|
readBody: () => request.json(),
|
|
features: await getCanvasAgentFeatureFlagsFromSystemSettings(),
|
|
applyOperation: applyCanvasOperationPlan,
|
|
logger: console,
|
|
});
|
|
|
|
return Response.json(response.body, {
|
|
status: response.status,
|
|
headers: { "Cache-Control": "no-store" },
|
|
});
|
|
} catch (error) {
|
|
return openApiErrorResponse(error);
|
|
}
|
|
}
|