import vine from '@vinejs/vine' const parameterCriteriaItemSchema = vine.object({ name: vine.string().trim().minLength(1), value: vine.any(), }) const criteriaSchema = vine.object({ manufacturer: vine.string().optional(), oui: vine.string().optional(), productClass: vine.string().optional(), serialNumber: vine.string().optional(), parameterCriteria: vine.array(parameterCriteriaItemSchema).optional(), }) const inventoryPathSchema = vine.object({ path: vine.string().trim().minLength(1), }) const desiredParameterSchema = vine.object({ name: vine.string().trim().minLength(1), value: vine.any(), type: vine.enum(['string', 'int', 'unsignedInt', 'boolean', 'dateTime']), }) const firmwareTargetSchema = vine.object({ productClass: vine.string().trim().minLength(1), targetVersion: vine.string().trim().minLength(1), }) const scheduleWindowSchema = vine.object({ daysOfWeek: vine.array(vine.number().min(0).max(6)).minLength(1), startHour: vine.number().min(0).max(23), endHour: vine.number().min(0).max(23), timezone: vine.string().trim().minLength(1), }) export const createConfigurationValidator = vine.compile( vine.object({ identifier: vine.string().trim().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/), name: vine.string().trim().minLength(1), version: vine.string().trim().regex(/^\d+\.\d+\.\d+$/), priority: vine.number().positive(), policy: vine.enum(['once', 'maintain']), enabled: vine.boolean().optional(), tags: vine.array(vine.string().trim()).optional(), criteria: criteriaSchema.optional(), inventory: vine.array(inventoryPathSchema).optional(), desiredParameters: vine.array(desiredParameterSchema).optional(), firmwareTarget: firmwareTargetSchema.optional(), schedule: scheduleWindowSchema.optional(), }) ) export const updateConfigurationValidator = vine.compile( vine.object({ name: vine.string().trim().minLength(1).optional(), version: vine.string().trim().regex(/^\d+\.\d+\.\d+$/).optional(), priority: vine.number().positive().optional(), policy: vine.enum(['once', 'maintain']).optional(), enabled: vine.boolean().optional(), tags: vine.array(vine.string().trim()).optional(), criteria: criteriaSchema.optional(), inventory: vine.array(inventoryPathSchema).optional(), desiredParameters: vine.array(desiredParameterSchema).optional(), firmwareTarget: firmwareTargetSchema.optional(), schedule: scheduleWindowSchema.optional(), }) )