app/routes/api.jobs.$jobId.environment.tsx (83 lines of code) (raw):

import { json, type LoaderFunctionArgs } from "@remix-run/node"; import { getJobStore } from "~/lib/server/jobStore"; import { extractCredentialsFromCookie, hasValidCredentials, } from "~/lib/server/auth"; // GET /api/jobs/:jobId/environment - Get job environment variables export async function loader({ request, params }: LoaderFunctionArgs) { const { jobId } = params; if (!jobId) { return json( { error: { code: "MISSING_JOB_ID", message: "Job ID is required", }, }, { status: 400 } ); } // Check authentication const cookieHeader = request.headers.get("Cookie"); const credentials = extractCredentialsFromCookie(cookieHeader); if (!hasValidCredentials(credentials)) { return json( { error: { code: "UNAUTHORIZED", message: "Authentication required - please provide API credentials through the UI", }, }, { status: 401 } ); } try { const jobStore = getJobStore(); const job = await jobStore.getJob(jobId); if (!job) { return json( { error: { code: "JOB_NOT_FOUND", message: "Job not found", }, }, { status: 404 } ); } // Check if the user has access to this job const username = credentials.hfUserInfo?.username; if (job.author && job.author !== username) { return json( { error: { code: "FORBIDDEN", message: "You do not have access to this job", }, }, { status: 403 } ); } // Return job environment information return json({ jobId: job.id, title: job.title, status: job.status, environment: job.environment || {}, secrets: job.secrets || {}, // Already masked in jobProcessor apiJobId: job.apiJobId, repository: job.repository, createdAt: job.createdAt, updatedAt: job.updatedAt, }); } catch (error) { console.error(`Error getting job environment for ${jobId}:`, error); return json( { error: { code: "INTERNAL_ERROR", message: "Failed to get job environment", }, }, { status: 500 } ); } }