export interface AuditConfig { storage: AuditStorage; stream?: boolean; retention?: string; encryption?: boolean; onError?: (error: AuditError) => void; filters?: AuditFilter[]; formatters?: AuditFormatter[]; } export type AuditStorage = | 'firebase' | 'supabase' | 'postgres' | 'mongodb' | 'elasticsearch' | 'custom'; export interface AuditEvent { id: string; timestamp: Date; actor: Actor; action: string; resource: Resource; result: 'success' | 'failure' | 'error'; changes?: Changes; metadata?: Record; context?: Context; tags?: string[]; } export interface Actor { id: string; type: 'user' | 'system' | 'api' | 'service'; name?: string; email?: string; metadata?: Record; } export interface Resource { type: string; id: string; name?: string; parent?: Resource; metadata?: Record; } export interface Changes { before?: Record; after?: Record; diff?: ChangeDiff[]; } export interface ChangeDiff { field: string; before: any; after: any; operation: 'add' | 'update' | 'delete'; } export interface Context { ip?: string; userAgent?: string; sessionId?: string; requestId?: string; correlationId?: string; location?: { country?: string; city?: string; lat?: number; lon?: number; }; } export interface AuditError { code: string; message: string; event?: Partial; originalError?: any; } export interface AuditFilter { name: string; filter: (event: AuditEvent) => boolean; } export interface AuditFormatter { name: string; format: (event: AuditEvent) => AuditEvent; }