40 lines
1 KiB
JavaScript
40 lines
1 KiB
JavaScript
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);
|
|
}
|