Every network call in this repo goes through src/policy/fetch.ts. It refuses, at runtime, anything below.
www.draftkings.com/lobby/getcontests and /lineup/getavailableplayers* — unauthenticated, the same URLs DK's own lobby page loads. Rate-limited to one request per 30 s per host. Never run from a datacenter IP.api.draftkings.com, sportsbook*.draftkings.com, *.underdogfantasy.com, *.prizepicks.com. These are bot-walled by their operators; the wall is the answer. No proxies (HTTP_PROXY/HTTPS_PROXY/ALL_PROXY set → refuse to start), no stealth, no spoofed browser fingerprints.policyFetch strips Cookie and Authorization headers. No logged-in scraping, ever.dfsroto/<version> (+dfsroto.win/policy). If a host blocks that UA, we stop, we do not disguise. (Bisected 2026-09-16: DK's WAF rejects any UA containing https:// — a scanner-signature rule; curl/8.7.1 and no-UA both pass. So: no URL scheme in the string. Still named.)DFSROTO_HOME_IP (or DFSROTO_ALLOW_ANY_IP=1 is set explicitly for local dev with cached data).Test: test/policy.test.ts asserts every denylisted host is refused and every allowlisted host is rate-limited.