Insert turnstile

class ElementHandler {
  element(element, env) {
    element.append(`<script>
    (function() {
      if (sessionStorage.getItem("ts")) return dataLayer.push({ event: "turnStyleOmitted" });;
      console.log("zaraz loaded");
      var tsblock = document.createElement("div");
      tsblock.id = "ts";
      var modal = document.createElement("div");
      modal.style.display = "none";
      modal.appendChild(tsblock);
      document.body.appendChild(modal);
      var onloadTurnstileCallback = function () {
        console.log("ts loaded");
        var tsid = turnstile.render(tsblock, {
          appearance: "interaction-only",
          sitekey: "0x4AAAAAAAYCU50u94XytH6Y",
          action: window.location.hostname.replaceAll('.','_'),
          "refresh-timeout": "none",
          callback: function (token) {
            console.log("Challenge Success token", token);
            modal.style.display = "none";
            turnstile.remove(tsid);
            sessionStorage.setItem("ts", true);
          },
          "before-interactive-callback": function (before) {
             console.log("before", before);
             modal.style =
               "position: fixed;width: 100vw;height: 100vh;left: 0;top: 0;z-index: 9999;background-color: #00000076;display: flex;justify-content: center;align-items: center;backdrop-filter: blur(6px);";
             dataLayer.push({ event: "turnStyleLaunched" });
          },
          "error-callback": function (err) {
            dataLayer.push({ event: "turnStyleError", turnStyleError: err });
            console.log("error", err);
          },
      });
    };
    const script = document.createElement('script');
    script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js??render=explicit';
    script.type = 'text/javascript';
    script.onload=onloadTurnstileCallback;
    script.defer = true;
    document.head.appendChild(script);
  })();
  </script>`, {html: true});
    console.log("injected");
  }
}

async function handleRequest(req, env) {
  const res = await fetch(req)
    if (!['api'].some(v => res.url.includes(v))) {
    return new HTMLRewriter().on("body", new ElementHandler()).transform(res, env)
  }  
  return res;
}

  
addEventListener("fetch", (event, env) => {
  event.respondWith(
    handleRequest(event.request, env).catch(
      (err) => new Response(err.stack, { status: 500 })
    )
  );
});