endpoints.path: /
endpoints.endpoint_type: HTTP
endpoints.scan_time: 2025-10-01T14:20:17.625302
endpoints.uri: https://cdn.bootscdn.com/
endpoints.protocol: HTTP/1.1
endpoints.status_reason: Found
endpoints.key: cache-control
endpoints.headers: no-cache
endpoints.key: content-length
endpoints.headers: 0
endpoints.key: location
endpoints.headers: https://cdn.bootscdn.com/challenge?next=/
endpoints.supported_versions: HTTP/1.1 HTTP/2
endpoints.banner: HTTP/1.1 302 Found
  content-length: 0
  location: https://cdn.bootscdn.com/challenge?next=/
  cache-control: no-cache
  
endpoints.ip: 46.8.9.226
endpoints.path: /challenge
endpoints.endpoint_type: HTTP
endpoints.scan_time: 2025-10-01T14:20:45.619200
endpoints.uri: https://cdn.bootscdn.com/challenge
endpoints.protocol: HTTP/1.1
endpoints.status_reason: OK
endpoints.key: date
endpoints.headers: <REDACTED>
endpoints.key: content-type
endpoints.headers: text/html
endpoints.key: last-modified
endpoints.headers: Thu, 14 Aug 2025 10:31:53 GMT
endpoints.key: transfer-encoding
endpoints.headers: chunked
endpoints.key: etag
endpoints.headers: W/"689dbb19-13cb"
endpoints.key: content-encoding
endpoints.headers: gzip
endpoints.key: server
endpoints.headers: nginx
endpoints.html_tags: <title>Browser Check</title> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width,initial-scale=1" />
endpoints.body: <!doctype html>
  <html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <title>Browser Check</title>
    <style>
      :root{
        --bg: #f6f7fb; --card:#ffffff; --text:#1f2937; --muted:#6b7280; --accent:#2563eb; --border:#e5e7eb;
      }
      @media (prefers-color-scheme: dark) {
        :root{ --bg:#0b1020; --card:#0f172a; --text:#e5e7eb; --muted:#9aa4b2; --accent:#60a5fa; --border:#1f2937; }
      }
      *{ box-sizing:border-box }
      html,body{ height:100% }
      body{
        margin:0; font:16px/1.6 system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,"Helvetica Neue",Arial,sans-serif;
        color:var(--text); background:
          radial-gradient(1200px 700px at 20% -10%, rgba(37,99,235,0.12), transparent 60%),
          radial-gradient(900px 600px at 110% 10%, rgba(99,102,241,0.1), transparent 55%),
          var(--bg);
        display:grid; place-items:center; padding:24px;
      }
      .card{
        width:min(720px,100%); background:var(--card);
        border:1px solid var(--border); border-radius:18px; padding:28px 28px 24px;
        box-shadow:0 10px 30px rgba(0,0,0,0.06);
        text-align:center;
      }
      .badge{
        display:inline-flex; align-items:center; gap:10px;
        padding:10px 14px; border:1px solid var(--border); border-radius:999px; color:var(--muted);
        background:linear-gradient(180deg, rgba(255,255,255,0.4), rgba(255,255,255,0.1));
        margin-bottom:18px; font-size:14px;
      }
      .shield{ font-size:18px }
      h1{ margin:0 0 8px; font-size:28px; line-height:1.2 }
      p{ margin:0 0 12px; color:var(--muted) }
      .row{ display:flex; align-items:center; justify-content:center; gap:16px; margin-top:10px }
      .spinner{
        width:20px; height:20px; border-radius:50%; border:3px solid transparent;
        border-top-color:var(--accent); border-right-color:var(--accent); animation:spin 0.9s linear infinite;
      }
      @keyframes spin{ to{ transform:rotate(360deg) } }
      .small{ font-size:13px }
      .sep{ height:1px; background:var(--border); margin:18px 0 }
      button{
        appearance:none; border:none; border-radius:12px; padding:10px 14px; cursor:pointer;
        background:var(--accent); color:#fff; font-weight:600; letter-spacing:.2px;
        box-shadow:0 6px 18px rgba(37,99,235,.25);
      }
      button[disabled]{ opacity:.6; cursor:not-allowed; box-shadow:none }
      code{ background:rgba(125,125,125,.12); padding:.1rem .35rem; border-radius:6px }
      .hidden{ display:none }
    </style>
  </head>
  <body>
    <main class="card" role="main" aria-live="polite">
      <div class="badge"><span class="shield">🛡️</span> Browser verification</div>
      <h1>Please hold on…</h1>
      <p>This process usually takes less than 2&nbsp;seconds.</p>
  
      <div class="row">
        <div class="spinner" aria-hidden="true"></div>
        <p id="status">Preparing access…</p>
      </div>
  
      <div class="sep"></div>
      <p class="small">
        If this page does not redirect automatically, click
        <button id="retry" type="button" class="small">Try again</button>
      </p>
  
      <noscript>
        <div class="sep"></div>
        <p><strong>JavaScript is required.</strong> Please enable JavaScript and reload this page.</p>
      </noscript>
    </main>
  
    <script>
    (function(){
      const nextUrl = new URLSearchParams(location.search).get("next") || "/";
      const statusEl = document.getElementById("status");
      const retryBtn = document.getElementById("retry");
  
      // Minimal headless detection – only webdriver
      const isHeadless = !!navigator.webdriver;
  
      // Only way to get the cookie: JS calls POST /challenge/ok
      async function passOnce(signal){
        const res = await fetch("/challenge/ok", {
          method: "POST",
          credentials: "include",
          headers: { "X-CH": "1" },
          cache: "no-store",
          signal
        });
        return res.ok;
      }
  
      async function sleep(ms){ return new Promise(r => setTimeout(r, ms)); }
  
      async function run(){
        if(isHeadless){
          statusEl.textContent = "Automated mode detected. Redirecting…";
          location.replace("/blocked"); // handled by HAProxy/Nginx
          return;
        }
  
        const controller = new AbortController();
        const attempts = [0, 300, 800];
        for(let i=0;i<attempts.length;i++){
          if(attempts[i]) await sleep(attempts[i]);
          statusEl.textContent = i === 0 ? "Verifying…" : `Retrying (${i+1}/${attempts.length})…`;
          try{
            const ok = await passOnce(controller.signal);
            if(ok){
              statusEl.textContent = "Done. Redirecting…";
              location.replace(nextUrl);
              return;
            }
          }catch(e){
            // ignore and retry
          }
        }
  
        statusEl.textContent = "Verification failed. Please try again.";
        retryBtn.disabled = false;
      }
  
      retryBtn.addEventListener("click", () => {
        retryBtn.disabled = true;
        statusEl.textContent = "Retrying…";
        run();
      });
  
      retryBtn.disabled = true;
      run();
    })();
    </script>
  </body>
  </html>
  
endpoints.html_title: Browser Check
endpoints.supported_versions: HTTP/1.1 HTTP/2
endpoints.banner: HTTP/1.1 200 OK
  server: nginx
  date:  <REDACTED>
  content-type: text/html
  last-modified: Thu, 14 Aug 2025 10:31:53 GMT
  transfer-encoding: chunked
  etag: W/"689dbb19-13cb"
  content-encoding: gzip
  
endpoints.ip: 46.8.9.226
[binary data, 5 values, 151 bytes]