fabro/lib
Bryan Helmkamp 3834fbe53d fix(server): convert auth resolver panics to fail-closed errors
Completes the R52/R53 fail-closed posture from 1c0caa239. The jwt and
mtls strategy branches were still using panic!/expect/assert! when
their required material was missing or malformed, which would crash
the server binary instead of returning a clean startup error.

- decode_pem_env: return anyhow::Result<String> instead of panicking
  on invalid base64 or invalid UTF-8.
- resolve_auth_mode_with_lookup: convert the missing-FABRO_JWT_PUBLIC_KEY,
  invalid-PEM, and missing-[server.listen.tls]-for-mtls cases from
  panics to anyhow::Err returns prefixed with "Fabro server refuses
  to start".
- Update the resolve_auth_mode doc to drop the "Panics if..." caveat.
- Add three fail-closed tests covering each new error path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 21:53:52 -04:00
..
crates fix(server): convert auth resolver panics to fail-closed errors 2026-04-09 21:53:52 -04:00
packages/fabro-api-client Merge origin/main into main 2026-04-09 21:11:55 -04:00