49 lines
No EOL
1.7 KiB
TypeScript
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>; |