betterbrowsing.org  ·  AppEsteem web-compliance test harness
← Home

Spur Monocle anonymized-connection assessment

Tests (browser-zone exit classification — diagnostic, not a harm row). Loads Spur Monocle's browser JS, which produces an encrypted assessment of the connection — whether it looks like a VPN, a proxy, a datacenter egress, or otherwise anonymized. The page relays that encrypted bundle to /monocle/assess, which decrypts it with the operator's Spur secret key and returns the verdict. Run this through an intermediary (residential proxy, datacenter, or an "agent-safe" hosted-browser exit) and compare the verdict to a direct run: if Spur flags the exit as anon / vpn / proxied, the intermediary's exit is not passing as an ordinary residential connection.

The Monocle SDK is served from mcl.betterbrowsing.org (our custom Monocle domain), not Spur's shared js.mcl.io host — some intermediaries host-block the well-known Spur host. A MONOCLE-TIMEOUT with no_bundle means the SDK didn't load or finish within the 60 s budget — that can be a host block or simply an exit too slow to complete. Disambiguate by fetching mcl.betterbrowsing.org/d/mcl.js through the same exit: a 200 means it loaded (so the timeout was latency, not a block); a failure means the host was blocked.

Authenticated: the decrypt/attribution relay (/monocle/assess) is not a free reputation lookup — it only answers requests carrying a valid operator HMAC (the same BBFRONT_KEYS secret as /api/front). The operator's test automation opens this page with a signed token in the URL — /monocle?ts=<unix>&auth=<hmac>&key_id=v1 — and the page forwards it. Without a token the page shows MONOCLE-UNAUTHORIZED and returns no data.

Driven over CDP: a probe navigates here (with the token), waits for document.title to start with MONOCLE-DONE / MONOCLE-TIMEOUT / MONOCLE-UNAUTHORIZED / MONOCLE-UNCONFIGURED, then reads the JSON in #result. The server_observed_ip field is the IP the origin function saw — compare it to assessment.ip (the IP Spur scored) as an exit-coherence check.

initializing…