/**
* Simple in-memory job manager for background tasks
*/
const jobs = new Map();
// Clean up old jobs after 1 hour
const JOB_TTL_MS = 60 * 60 * 1000;
function generateJobId() {
return `job_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
}
function cleanupOldJobs() {
const now = Date.now();
for (const [id, job] of jobs.entries()) {
if (job.completedAt && now - job.completedAt.getTime() > JOB_TTL_MS) {
jobs.delete(id);
}
}
}
export function createJob(type) {
cleanupOldJobs();
const job = {
id: generateJobId(),
type,
status: "pending",
startedAt: new Date(),
};
jobs.set(job.id, job);
return job;
}
export function getJob(id) {
return jobs.get(id);
}
export function updateJob(id, updates) {
const job = jobs.get(id);
if (job) {
Object.assign(job, updates);
}
}
export function listJobs() {
cleanupOldJobs();
return Array.from(jobs.values()).sort((a, b) => b.startedAt.getTime() - a.startedAt.getTime());
}
export function listActiveJobs() {
return listJobs().filter((j) => j.status === "pending" || j.status === "running");
}