import z from "zod"; import { AuditEventType, AuditSeverity } from "../constants/index.js"; /** Zod schema for AuditSeverity. */ export const AuditSeveritySchema = z.enum([ AuditSeverity.DEBUG, AuditSeverity.INFO, AuditSeverity.WARNING, AuditSeverity.ERROR, AuditSeverity.CRITICAL, ]); /** Zod schema for AuditEventType. */ export const AuditEventTypeSchema = z.enum([ AuditEventType.AUTH_LOGIN, AuditEventType.AUTH_LOGOUT, AuditEventType.AUTH_REGISTER, AuditEventType.AUTH_PASSWORD_CHANGE, AuditEventType.AUTH_PASSWORD_RESET, AuditEventType.AUTH_MFA_ENABLE, AuditEventType.AUTH_MFA_DISABLE, AuditEventType.AUTH_SESSION_CREATE, AuditEventType.AUTH_SESSION_REVOKE, AuditEventType.AUTH_API_KEY_CREATE, AuditEventType.AUTH_API_KEY_REVOKE, AuditEventType.AUTHZ_PERMISSION_CHECK, AuditEventType.AUTHZ_PERMISSION_GRANT, AuditEventType.AUTHZ_PERMISSION_REVOKE, AuditEventType.AUTHZ_ROLE_ASSIGN, AuditEventType.AUTHZ_ROLE_UNASSIGN, AuditEventType.DATA_CREATE, AuditEventType.DATA_READ, AuditEventType.DATA_UPDATE, AuditEventType.DATA_DELETE, AuditEventType.DATA_EXPORT, AuditEventType.DATA_IMPORT, AuditEventType.SYSTEM_CONFIG_CHANGE, AuditEventType.SYSTEM_SECURITY_ALERT, AuditEventType.SYSTEM_RATE_LIMIT, AuditEventType.SYSTEM_ERROR, AuditEventType.GDPR_DATA_EXPORT, AuditEventType.GDPR_DATA_DELETE, AuditEventType.GDPR_CONSENT_CHANGE, ]); /** Zod schema for AuditActor. */ export const AuditActorSchema = z.object({ userId: z.string().optional(), sessionId: z.string().optional(), apiKeyId: z.string().optional(), ipAddress: z.string().optional(), userAgent: z.string().optional(), tenantId: z.string().optional(), }); /** Zod schema for AuditTarget. */ export const AuditTargetSchema = z.object({ type: z.string(), id: z.string(), metadata: z.record(z.string(), z.unknown()).optional(), }); /** Zod schema for a complete AuditEvent. */ export const AuditEventSchema = z.object({ id: z.string(), type: z.union([AuditEventTypeSchema, z.string()]), severity: AuditSeveritySchema, actor: AuditActorSchema, target: AuditTargetSchema.optional(), details: z.record(z.string(), z.unknown()).optional(), timestamp: z.date(), previousHash: z.string().optional(), hash: z.string(), tenantId: z.string().optional(), correlationId: z.string().optional(), }); /** Zod schema for AuditQueryOptions. */ export const AuditQueryOptionsSchema = z.object({ eventTypes: z.array(AuditEventTypeSchema).optional(), userId: z.string().optional(), sessionId: z.string().optional(), severity: z .union([AuditSeveritySchema, z.array(AuditSeveritySchema)]) .optional(), targetType: z.string().optional(), targetId: z.string().optional(), startTime: z.date().optional(), endTime: z.date().optional(), limit: z.number().int().positive().optional(), offset: z.number().int().nonnegative().optional(), order: z.enum(["asc", "desc"]).optional(), tenantId: z.string().optional(), }); /** Zod schema for AuditRetentionPolicy. */ export const AuditRetentionPolicySchema = z.object({ retentionDays: z.number().int().positive(), archiveBeforeDelete: z.boolean(), archiveLocation: z.string().optional(), }); /** Zod schema for ChainVerificationResult. */ export const ChainVerificationResultSchema = z.object({ valid: z.boolean(), brokenAt: z.number().int().nonnegative().optional(), reason: z.string().optional(), }); /** Zod schema for RetentionResult. */ export const RetentionResultSchema = z.object({ eventsDeleted: z.number().int().nonnegative(), eventsArchived: z.number().int().nonnegative(), errors: z.array(z.string()), });