4-digit auto-submit PIN + operator name in audit logs

Login: fixed-length 4-digit PIN that auto-submits on the 4th digit (no submit
button to scroll to on small iPhone screens) and clears on a wrong PIN.
Compact, vertically-centered keypad so it fits without scrolling.

Operator tracking: after PIN auth, staff enter their name (new /operator
screen, persisted per device). The name is sent as X-Operator on every authed
request and recorded on each check-in/undo/ice audit entry (new Operator
column), so logs show who did what. Shown in the scanner header and the admin
audit view.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hank 2026-07-08 16:45:23 +00:00
parent 336d2a5c83
commit 0e8fe3bb9a
11 changed files with 311 additions and 102 deletions

View file

@ -87,7 +87,8 @@ export async function ticketRoutes(app: FastifyInstance): Promise<void> {
count?: number;
resource?: "tickets" | "ice";
};
return redeem(app.ctx, normalizeCode(code), count ?? 1, resource ?? "tickets");
const operator = String(req.headers["x-operator"] ?? "").slice(0, 80);
return redeem(app.ctx, normalizeCode(code), count ?? 1, resource ?? "tickets", operator);
},
);