HTTP probe previously tested forward-proxy GET only, so extraction
returned "alive" proxies that cannot tunnel HTTPS (CONNECT 400/EOF).
All three protocol probes now require: handshake -> CONNECT target:443
-> real TLS handshake with cert verify -> tunneled HTTPS HEAD reply.
Extraction accepts ?host= to probe the consumer's real target site
(e.g. vivid2api sends host=chatgpt.com); probe timeout 3s->6s and
batches 4->8 since the usable rate against strict checks is ~7%.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
HTTP: require a 2xx status line for generate_204 (Cloudflare edge IPs
answered "HTTP/1.1 409" and were marked alive). SOCKS5: require
REP=0x00 granted. SOCKS4: require REP=0x5a. Verified live: CF anycast
samples now dead, real socks5/http stay alive.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
merchantPost now retries once after clearing the cached token and
re-authenticating when the upstream signals an invalid session:
HTML login page, HTTP 401, or business msgs containing login-expiry
keywords. Previously a stale token left stock queries returning
empty until manual intervention.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The plain ip:port output forced consumers to guess the protocol.
The probe already knows it from the handshake, so return the full
URL directly (socks5h/http/socks4).
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Fresh-deployed instances run the first alive-check and most free
proxies die, leaving long lists of "0" regions. Dim them so alive
regions stand out; data itself is correct.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Deploy platforms that route to the container's exposed/compose port
(8890) were hitting the fun backend directly, which 404s unmatched
GET paths. Now nginx answers on both ports so either routing lands
on the SPA/API proxy layer.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>