SPB Git

spb/autoscholar

Public
963 B · 35 lines typescript
1import { auditEvents, type Db, securityEvents, type Tx } from "@autoscholar/db";2import { redact } from "@autoscholar/observability";34export type Actor = { type: "admin" | "worker" | "system"; id?: string | null; ip?: string | null };56export async function audit(7  db: Db | Tx,8  actor: Actor,9  action: string,10  target?: { type: string; id: string },11  detail: Record<string, unknown> = {},12): Promise<void> {13  await db.insert(auditEvents).values({14    actorType: actor.type,15    actorId: actor.id ?? null,16    action,17    targetType: target?.type ?? null,18    targetId: target?.id ?? null,19    detail: redact(detail),20    ip: actor.ip ?? null,21  });22}2324export async function securityEvent(25  db: Db | Tx,26  kind: string,27  detail: Record<string, unknown> = {},28  userId?: string | null,29  ip?: string | null,30): Promise<void> {31  await db32    .insert(securityEvents)33    .values({ kind, detail: redact(detail), userId: userId ?? null, ip: ip ?? null });34}35
Files · ad78891b6b969902dedc372df227e1adc3cd93ba
Menu

Theme