import type { ActionFunctionArgs } from "@remix-run/server-runtime"; import { json } from "@remix-run/server-runtime"; import { z } from "zod"; import { authenticateApiRequest } from "~/services/apiAuth.server"; import { logger } from "~/services/logger.server"; import { ServiceValidationError } from "~/v3/services/baseService.server"; import { CreateTaskRunAttemptService } from "~/v3/services/createTaskRunAttempt.server"; const ParamsSchema = z.object({ /* This is the run friendly ID */ runParam: z.string(), }); export async function action({ request, params }: ActionFunctionArgs) { // Authenticate the request const authenticationResult = await authenticateApiRequest(request); if (!authenticationResult) { return json({ error: "Invalid or Missing API Key" }, { status: 401 }); } const parsed = ParamsSchema.safeParse(params); if (!parsed.success) { return json({ error: "Invalid or missing run ID" }, { status: 400 }); } const { runParam } = parsed.data; const service = new CreateTaskRunAttemptService(); try { const { execution } = await service.call({ runId: runParam, authenticatedEnv: authenticationResult.environment, }); return json(execution, { status: 200 }); } catch (error) { if (error instanceof ServiceValidationError) { return json({ error: error.message }, { status: error.status ?? 422 }); } logger.error("Failed to create run attempt", { error }); return json({ error: "Something went wrong, please try again." }, { status: 500 }); } }