import { type LoaderFunctionArgs, json } from "@remix-run/server-runtime"; import { type GetDeploymentResponseBody } from "@trigger.dev/core/v3"; import { z } from "zod"; import { prisma } from "~/db.server"; import { authenticateApiRequest } from "~/services/apiAuth.server"; import { logger } from "~/services/logger.server"; const ParamsSchema = z.object({ deploymentId: z.string(), }); export async function loader({ request, params }: LoaderFunctionArgs) { const parsedParams = ParamsSchema.safeParse(params); if (!parsedParams.success) { return json({ error: "Invalid params" }, { status: 400 }); } try { // Next authenticate the request const authenticationResult = await authenticateApiRequest(request); if (!authenticationResult) { logger.info("Invalid or missing api key", { url: request.url }); return json({ error: "Invalid or Missing API key" }, { status: 401 }); } const authenticatedEnv = authenticationResult.environment; const { deploymentId } = parsedParams.data; const deployment = await prisma.workerDeployment.findFirst({ where: { friendlyId: deploymentId, environmentId: authenticatedEnv.id, }, include: { worker: { include: { tasks: true, }, }, integrationDeployments: true, }, }); if (!deployment) { return json({ error: "Deployment not found" }, { status: 404 }); } return json({ id: deployment.friendlyId, status: deployment.status, contentHash: deployment.contentHash, shortCode: deployment.shortCode, version: deployment.version, imageReference: deployment.imageReference, imagePlatform: deployment.imagePlatform, commitSHA: deployment.commitSHA, externalBuildData: deployment.externalBuildData as GetDeploymentResponseBody["externalBuildData"], errorData: deployment.errorData as GetDeploymentResponseBody["errorData"], worker: deployment.worker ? { id: deployment.worker.friendlyId, version: deployment.worker.version, tasks: deployment.worker.tasks.map((task) => ({ id: task.friendlyId, slug: task.slug, filePath: task.filePath, exportName: task.exportName ?? "@deprecated", })), } : undefined, integrationDeployments: deployment.integrationDeployments.length > 0 ? deployment.integrationDeployments.map((id) => ({ id: id.id, integrationName: id.integrationName, integrationDeploymentId: id.integrationDeploymentId, commitSHA: id.commitSHA, createdAt: id.createdAt, })) : undefined, } satisfies GetDeploymentResponseBody); } catch (error) { if (error instanceof Response) throw error; logger.error("Failed to load deployment", { error }); return json({ error: "Internal Server Error" }, { status: 500 }); } }