/** * SMI-733: Audit Logging System * * Provides structured audit logging for security-relevant events. * Stores audit trails in SQLite database for compliance and forensics. * * Schema defined in docs/security/index.md ยง3.2 */ import type { Database as DatabaseType } from '../db/database-interface.js'; import type { AuditEventType, AuditActor, AuditResult, AuditLogEntry, AuditQueryFilter, AuditLoggerConfig, AuditStats } from './audit-types.js'; import { MIN_RETENTION_DAYS, MAX_RETENTION_DAYS } from './audit-types.js'; export type { AuditEventType, AuditActor, AuditResult, AuditLogEntry, AuditQueryFilter, AuditLoggerConfig, AuditStats, }; export { MIN_RETENTION_DAYS, MAX_RETENTION_DAYS }; /** * Audit Logger implementation with SQLite backend * * @example * ```typescript * const auditLogger = new AuditLogger(db) * * // Log URL fetch * await auditLogger.log({ * event_type: 'url_fetch', * actor: 'adapter', * resource: 'https://example.com/skill.yaml', * action: 'fetch', * result: 'success', * metadata: { status: 200, duration: 123 } * }) * * // Query audit trail * const recentBlocks = await auditLogger.query({ * result: 'blocked', * since: new Date(Date.now() - 24 * 60 * 60 * 1000) * }) * ``` */ export declare class AuditLogger { private db; private config; private stmts; constructor(db: DatabaseType, config?: AuditLoggerConfig); /** * Prepare SQL statements for performance */ private prepareStatements; /** * Ensure the audit_logs table exists */ private ensureTableExists; /** * Log an audit event * * @param entry - Audit log entry (id, timestamp, created_at are auto-generated) */ log(entry: Omit & { timestamp?: string; }): void; /** * Query audit logs with filters * * @param filter - Query filters * @returns Array of matching audit log entries */ query(filter?: AuditQueryFilter): AuditLogEntry[]; /** * Get audit statistics * * @returns Statistics about audit log entries */ getStats(): AuditStats; /** * Clean up old audit logs (internal implementation) * * @param olderThan - Delete logs older than this date * @param skipMetaLog - Skip meta-logging (used internally to prevent recursion) * @returns Number of deleted entries */ private cleanupInternal; /** * Clean up old audit logs * * @deprecated Use cleanupOldLogs() instead for validated retention-based cleanup * @param olderThan - Delete logs older than this date * @returns Number of deleted entries */ cleanup(olderThan: Date): number; /** * Validate retention days parameter * * @param retentionDays - Number of days to validate * @throws Error if retentionDays is invalid */ private validateRetentionDays; /** * Clean up old audit logs based on retention policy * * SMI-1012: Audit log retention policy with input validation * * @param retentionDays - Number of days to retain logs (default: 90, min: 1, max: 3650) * @returns Number of deleted rows * @throws Error if retentionDays is invalid (< 1, > 3650, or non-integer) * * @example * ```typescript * // Delete logs older than 90 days (default) * const deleted = auditLogger.cleanupOldLogs() * * // Delete logs older than 30 days * const deleted = auditLogger.cleanupOldLogs(30) * * // These will throw errors: * auditLogger.cleanupOldLogs(0) // Error: minimum is 1 day * auditLogger.cleanupOldLogs(-5) // Error: minimum is 1 day * ``` */ cleanupOldLogs(retentionDays?: number): number; /** * Export audit logs to JSON * * @param filter - Query filters * @returns JSON string of audit logs */ export(filter?: AuditQueryFilter): string; } //# sourceMappingURL=AuditLogger.d.ts.map