Files
suaveplan/packages/observability/monitor/audit-logging/src/schemas/audit-logging.schemas.ts
2026-05-27 23:47:53 +01:00

116 lines
3.7 KiB
TypeScript

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()),
});