import type { Database } from '@tursodatabase/database'; import { getDatabase } from '$lib/server/database'; import { randomUUID } from 'node:crypto'; type AuditValue = Record | unknown[] | null; export async function recordIsacAudit(input: { actorId: string; category: string; action: string; entityId: string; before?: AuditValue; after?: AuditValue; database?: Database; createdAt?: string; }) { const database = input.database ?? (await getDatabase()); await ( await database.prepare(`INSERT INTO audit_log (id,actor_id,entity_type,entity_id,action,before_json,after_json,created_at) VALUES(?,?,?,?,?,?,?,?)`) ).run( randomUUID(), input.actorId, input.category, input.entityId, input.action, input.before === undefined ? null : JSON.stringify(input.before), input.after === undefined ? null : JSON.stringify(input.after), input.createdAt ?? new Date().toISOString(), ); } export async function auditRecord( table: string, id: string, suppliedDatabase?: Database, ): Promise | null> { if ( ![ 'stat_attributes', 'talents', 'brand_sets', 'gear', 'weapons', 'weapon_mods', 'gear_mods', 'os_protocols', 'skill_chip_sets', 'specializations', 'specialization_focuses', 'specialization_abilities', 'specialization_combat_effects', 'specialization_tree_nodes', 'roles', ].includes(table) ) { throw new Error('Unsupported audit table'); } const database = suppliedDatabase ?? (await getDatabase()); return ( (await ( await database.prepare(`SELECT * FROM ${table} WHERE id=?`) ).get(id)) ?? null ); }