import { Queue } from "bullmq"; import { redisConnection } from "./connection"; /** Job types dispatched to the selenium Python worker. */ export type SeleniumJobType = | "eligibility-check" | "claim-status-check" | "claim-submit" | "claim-pre-auth" | "ddma-eligibility-check" | "deltains-eligibility-check" | "unitedsco-eligibility-check" | "cca-eligibility-check" | "cca-claim-submit" | "cca-preauth-submit" | "ddma-claim-submit" | "tuftssco-eligibility-check" | "mh-eligibility-history-check" | "cmsp-eligibility-history-remaining-check"; export interface SeleniumJobData { jobType: SeleniumJobType; userId: number; socketId?: string; /** Fully-enriched payload sent to the Python service. */ enrichedPayload: any; /** Extra fields used for DB post-processing */ insuranceId?: string; formFirstName?: string; formLastName?: string; formDob?: string; claimId?: number; /** Base64-encoded files for claim submit */ files?: { originalname: string; bufferBase64: string; mimetype: string }[]; } export interface OcrJobData { userId: number; socketId?: string; files: { originalname: string; bufferBase64: string; mimetype: string }[]; } const defaultOpts = { removeOnComplete: { count: 100 }, removeOnFail: { count: 50 }, attempts: 1, backoff: { type: "exponential" as const, delay: 5000 }, }; export const seleniumQueue = new Queue("selenium-jobs", { connection: redisConnection, defaultJobOptions: defaultOpts, }); export const ocrQueue = new Queue("ocr-jobs", { connection: redisConnection, defaultJobOptions: { ...defaultOpts, attempts: 2 }, });