BillTracker/services/auditService.cts

49 lines
1.1 KiB
TypeScript
Raw Permalink Normal View History

import type { Db } from '../types/db';
const { getDb } = require('../db/database.cts');
const { log } = require('../utils/logger.cts');
interface AuditParams {
user_id?: number | null;
action: string;
entity_type?: string | null;
entity_id?: number | null;
details?: any;
ip_address?: string | null;
user_agent?: string | null;
}
/**
* Log a security-sensitive action to the audit_log table.
*/
function logAudit({
user_id,
action,
entity_type,
entity_id,
details,
ip_address,
user_agent,
}: AuditParams): void {
const db: Db = getDb();
try {
db.prepare(
`INSERT INTO audit_log (user_id, action, entity_type, entity_id, details_json, ip_address, user_agent)
VALUES (?, ?, ?, ?, ?, ?, ?)`,
).run(
user_id || null,
action,
entity_type || null,
entity_id || null,
details ? JSON.stringify(details) : null,
ip_address || null,
user_agent || null,
);
} catch (err: any) {
// Audit logging should never crash the app
log.error('[audit-error] Failed to log audit event:', err.message);
}
}
module.exports = { logAudit };