const scriptName = "/js/script.js";
const endpoint = "/api/event";

addEventListener("fetch", (event) => {
  event.passThroughOnException();
  event.respondWith(handleRequest(event));
});

async function handleRequest(event) {
  const url = new URL(event.request.url);
  const pathname = url.pathname;

  if (pathname === scriptName) {
    return getScript(event);
  } else if (pathname === endpoint) {
    return postData(event);
  }
  return new Response(null, { status: 404 });
}

async function getScript(event) {
  const cache = caches.default;
  let response = await cache.match(event.request);

  if (!response) {
    const scriptUrl =
      "https://plausible.io/js/plausible.outbound-links.tagged-events.js";
    response = await fetch(scriptUrl);
    if (response.ok)
      event.waitUntil(cache.put(event.request, response.clone()));
  }

  return response;
}

async function postData(event) {
  const request = new Request(event.request);
  request.headers.delete("cookie");
  return await fetch("https://plausible.io/api/event", request);
}