116 lines
3.7 KiB
TypeScript
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()),
|
|
});
|