stock-bot/apps/wcag-ada/config/src/schemas/worker.schema.ts
2025-06-28 11:11:34 -04:00

49 lines
No EOL
1.7 KiB
TypeScript

import { z } from 'zod';
export const workerConfigSchema = z.object({
enabled: z.boolean().default(true),
concurrency: z.number().min(1).max(10).default(2),
queueName: z.string().default('accessibility-scans'),
redis: z.object({
host: z.string().default('localhost'),
port: z.number().default(6379),
password: z.string().optional(),
db: z.number().default(2), // Different DB for WCAG
maxRetriesPerRequest: z.number().nullable().default(null),
}).default({}),
jobs: z.object({
scan: z.object({
priority: z.number().default(0),
attempts: z.number().default(3),
backoff: z.object({
type: z.enum(['exponential', 'fixed']).default('exponential'),
delay: z.number().default(2000),
}).default({}),
timeout: z.number().default(300000), // 5 minutes
removeOnComplete: z.object({
age: z.number().default(86400), // 24 hours
count: z.number().default(100),
}).default({}),
removeOnFail: z.object({
age: z.number().default(604800), // 7 days
count: z.number().default(500),
}).default({}),
}).default({}),
report: z.object({
priority: z.number().default(1),
attempts: z.number().default(2),
backoff: z.object({
type: z.enum(['exponential', 'fixed']).default('exponential'),
delay: z.number().default(5000),
}).default({}),
timeout: z.number().default(600000), // 10 minutes
}).default({}),
}).default({}),
scheduler: z.object({
enabled: z.boolean().default(true),
interval: z.number().default(60000), // Check every minute
timezone: z.string().default('UTC'),
}).default({}),
});
export type WorkerConfig = z.infer<typeof workerConfigSchema>;