- main
- manifest
- deps
- main
- Install
- Run
addEventListener("fetch", (event) => {
function findBestMatch(preference, options) {
let bestMatch = "";
let highestQuality = -1;
for (let p of preference) {
for (let o of options) {
if (o.includes(p)) {
let quality = 1;
let qIndex = o.indexOf("q=");
if (qIndex > -1) {
quality = parseFloat(o.substring(qIndex + 2));
}
if (quality > highestQuality) {
bestMatch = o.split(";")[0];
highestQuality = quality;
}
}
}
}
return bestMatch;
}
const originalReq = event.request;
let url = new URL(event.request.url);
let searchEntries = url.searchParams.entries();
let filteredEntries = Array.from(searchEntries).filter((entry) =>
["query", "page", "foo"].includes(entry[0])
);
let filteredParams = new URLSearchParams(filteredEntries);
let fooValue = filteredParams.get("foo");
if (fooValue) {
filteredParams.set("foo", fooValue.toLocaleLowerCase());
}
filteredParams.sort();
url.search = filteredParams;
const newReq = new Request(url, originalReq);
newReq.headers.delete("user-agent");
newReq.headers.delete("cookie");
let acceptValue = newReq.headers.get("accept-language");
if (acceptValue) {
const preference = ["en", "de", "fr", "nl"];
const options = acceptValue.split(",").map((opt) => opt.trim());
let selection = findBestMatch(preference, options);
if (selection === "") {
selection = "de";
}
newReq.headers.set("accept-language", selection);
}
acceptValue = newReq.headers.get("accept-encoding");
if (acceptValue) {
const preference = ["br", "compress", "deflate", "gzip", "identity"];
const options = acceptValue.split(",").map((opt) => opt.trim());
let selection = findBestMatch(preference, options);
if (selection === "") {
selection = "identity";
}
newReq.headers.set("accept-encoding", selection);
}
acceptValue = newReq.headers.get("accept-charset");
if (acceptValue) {
const preference = ["iso-8859-5", "iso-8859-2", "utf-8"];
const options = acceptValue.split(",").map((opt) => opt.trim());
let selection = findBestMatch(preference, options);
if (selection === "") {
selection = "utf-8";
}
newReq.headers.set("accept-charset", selection);
}
console.log(newReq.url);
newReq.headers.forEach((value, name) => console.log(name + ": " + value));
const backendResponse = fetch(newReq, {
backend: "origin_0"
});
event.respondWith(backendResponse);
});