Route X account and eligibility checks directly while regional pricing
and checkout creation share the configured proxy exit, keeping quoted
currency and amounts consistent for the customer.
A decline now cools the card×node pair and the exit's shared IP for 30
minutes first; only a card declined through two distinct nodes enters a
whole-card cooldown, and do_not_try_again blocks just that card. Card
and rotation status stay readable with no cards configured and no longer
report expired cooldowns as blocks. Links-only recovery works without a
payment card, and the recovery status endpoint reports the
payment-protection pause.
Add encrypted card pool management, persisted card and outbound rotation, and per-card decline cooldowns. Improve customer and redemption-code lookup, recovery controls, and filtering; rebuild frontend assets and refresh mock screenshots.
Give read-only eligibility checks four independent slots so payment processing no longer blocks them. Cover concurrency, slot cleanup, card rotation, and lookup behavior with tests.
The history scrub replaced the wizard's default catalog constants
with placeholders, which would write a nonfunctional catalog for
anyone accepting the defaults. Restore X's real gifting identifiers
— they are published in x.com checkout pages, not operator secrets.
Move the hardcoded merchant account, product IDs, amounts and
currency into an encrypted catalog vault record read per checkout
flow. The setup wizard offers the X Premium defaults (X's public
gifting identifiers) or a fully custom catalog, put --name catalog
updates it, and status validates it. Tests use fake catalog
fixtures instead of real identifiers.
put --name now accepts api-auth (JSON) and stripe-key (the raw
pk_live_ key), so status failure messages can point at a working
repair path instead of the setup wizard, which refuses an existing
vault. The wizard also prints explicit recovery instructions when it
aborts after creating the vault, and validates the site origin
exactly like the web server.
xgift setup guides the operator through writing X cookies and API
auth metadata, the payment card with billing details, the proxy
(direct, guided AnyTLS, or pasted sing-box JSON validated by a real
embedded start), and the Stripe publishable key into a freshly
created encrypted vault, generating the vault password to a
persistent owner-only file. It can also emit site.env and a random
admin password for the web service. Secrets are read without echo on
terminals while piped stdin stays scriptable. The status command now
also verifies the api-auth and stripe-key records.