ProblemThe developers page creates keys but has no rotate/revoke/expiry UI; initialKeys are static and Math.random fallback leaks mock behavior.
Solution
- Add key actions: rotate (revoke + mint replacement, preserving usage history), revoke with confirmation, set expiry, and scope selection (read-only/read-write).
- Back with
/api/keys/:id/rotate, :id/revoke, PATCH /api/keys/:id.
- Show masked keys with single-copy reveal (never render full key in DOM).
- Add an audit entry on every rotate/revoke.
Acceptance Criteria
- Rotating mints a new key and revokes the old immediately.
- Full keys never appear in the DOM text content.
- Scope changes are enforced server-side.
npm run build passes.
Note for Contributors: Write a clear PR description. Show rotate → new key → old rejected.
ProblemThe developers page creates keys but has no rotate/revoke/expiry UI;
initialKeysare static andMath.randomfallback leaks mock behavior.Solution
/api/keys/:id/rotate,:id/revoke,PATCH /api/keys/:id.Acceptance Criteria
npm run buildpasses.Note for Contributors: Write a clear PR description. Show rotate → new key → old rejected.