Skip to main content

apps/gateway/src/workers/job-processor.ts

Metadata

Indexed Symbols

  • sleep (line 8, function) - Implements sleep for background job processing.
  • readPayload (line 12, function) - Implements read payload for background job processing.
  • processImportJob (line 16, function) - Implements process import job for background job processing.
  • processExportJob (line 50, function) - Implements process export job for background job processing.
  • processJob (line 72, function) - Implements process job for background job processing.
  • run (line 106, function) - Implements run for background job processing.

Markdown Headings (if applicable)

No markdown headings detected.

Source Preview

import { randomUUID } from "node:crypto";
import { coreResourceSchemas } from "@anchor/contracts";
import { env } from "../config/env.js";
import { createResource } from "../services/resource-repository.js";
import { markBackgroundJobStatus, reserveQueuedJobs, type BackgroundJob } from "../services/job-repository.js";
import { heartbeatWorker } from "../services/worker-runtime-repository.js";

function sleep(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}

function readPayload(job: BackgroundJob): Record<string, unknown> {
return (job.payload ?? {}) as Record<string, unknown>;
}

async function processImportJob(job: BackgroundJob): Promise<void> {
const payload = readPayload(job);
const candidateResourceType = typeof payload.resourceType === "string" ? payload.resourceType : "Ticket";
const resourceType = candidateResourceType in coreResourceSchemas ? candidateResourceType : "Ticket";
const data = (typeof payload.data === "object" && payload.data ? payload.data : {}) as Record<string, unknown>;

const id = typeof data.id === "string" ? data.id : randomUUID();
const now = new Date().toISOString();

await createResource(resourceType, job.workspaceId, id, {