A one-defect patch, and the defect is that a documented mechanism was not
applied on one path.
fingerprint_client.py's --key defaulted to
os.environ.get("TWOCAPTCHA_KEY") and only that. So a key put in .env —
exactly as §3, the README and .env.example instruct — worked for every
engine and failed here with "No API key".
It now reads through env_config.env_value, calling load_env() itself
because this is a standalone entry point that no engine has necessarily run
first.
Why the loader and not os.environ
Measured both ways with TWOCAPTCHA_KEY=your_2captcha_api_key_here exported:
| What the user saw | |
|---|---|
| before | Fingerprint API rejected the key (401) — note this is a separate subscription from captcha solving |
| after | TWOCAPTCHA_KEY is still set to the placeholder from .env.example — treating it as unset |
The old message sent the reader off to check a subscription they never
needed.
Provenance
Found on a sibling repo's first live --fingerprint run, then checked
across the family before patching: five repos had it, one had already fixed
it. This release makes all seven identical.
Pinned by a check verified to fail on the old code — that it loads .env
itself, reads through the loader, does not read os.environ directly,
that a placeholder still reads as unset, and that the help string does not
interpolate its default, which is one substring away from printing a live
credential to anyone who types --help.
Nothing else changed. No flag, no default, no output column.