v2.3.1
Security
- Redact the bearer token (
HETZNER_API_TOKEN/HETZNER_STORAGE_API_TOKEN) from rethrown axios error cause chains (defense-in-depth, #44). API errors are wrapped asnew Error(msg, { cause: err }); the chainedAxiosErrorpreviously retained the token inconfig.headers.Authorizationand Node's rawrequest._headerblock, so a logger walking the cause viautil.inspect(err, { depth: null })orAxiosError.toJSON()could surface it. A centralwrapHetznerErrornow sanitizes the error in place — scrubbingAuthorization/proxy-authorization/cookieheaders (case-insensitively) on bothconfigrefs, and droppingconfig.auth/proxy.auth, therequest/response.requestobjects, and any objectcause. The singlerequest()chokepoint routes both the Cloud (api.hetzner.cloud) and Storage Box (api.hetzner.com) call paths through it, so both token families are covered. Thrown messages are unchanged. Locked with a regression test asserting no token survivesutil.inspect(depth:null)ortoJSON(), through bothhetznerRequestandstorageBoxRequest.
Fleet lockstep with lexware v3.2.1.
Full Changelog: v2.3.0...v2.3.1