Skip to content

Commit 227c27b

Browse files
authored
Fix Compile & URL Decoding Bug + Add Optional Opt-in Redirect Tracking
- Pass in a "x-cancel-redirect" custom header and set it to a true value to stop and log redirect behavior instead of automatically following - Fixes compiling const error echoed in #39, Zibri#29, and Zibri#24 - Fixes bug that breaks URL-encoded URLs passed into the function by accidentally decoding them as addressed in Zibri#30 Later commits may expand on redirect tracking to add infinite loop protections
1 parent 6925031 commit 227c27b

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

index.js

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,13 @@ addEventListener("fetch", async event => {
8888
if (customHeaders !== null) {
8989
Object.entries(customHeaders).forEach((entry) => (filteredHeaders[entry[0]] = entry[1]));
9090
}
91-
92-
const newRequest = new Request(event.request, {
93-
redirect: "follow",
94-
headers: filteredHeaders
95-
});
96-
97-
const response = await fetch(targetUrl, newRequest);
98-
const responseHeaders = new Headers(response.headers);
99-
const exposedHeaders = [];
100-
const allResponseHeaders = {};
91+
const newRequest = customHeaders["x-cancel-redirect"] ? new Request(event.request, { headers: filteredHeaders }) : new Request(event.request, { redirect: "follow", headers: filteredHeaders });
92+
93+
const response = await fetch(originUrl.search.substr(1), newRequest);
94+
console.log({targetUrl: targetUrl, response: response});
95+
let responseHeaders = new Headers(response.headers);
96+
let exposedHeaders = [];
97+
let allResponseHeaders = {};
10198
for (const [key, value] of response.headers.entries()) {
10299
exposedHeaders.push(key);
103100
allResponseHeaders[key] = value;
@@ -107,7 +104,14 @@ addEventListener("fetch", async event => {
107104

108105
responseHeaders.set("Access-Control-Expose-Headers", exposedHeaders.join(","));
109106
responseHeaders.set("cors-received-headers", JSON.stringify(allResponseHeaders));
110-
107+
108+
if (customHeaders["x-cancel-redirect"]) {
109+
responseHeaders.set("x-request-url", targetUrl);
110+
responseHeaders.set("x-final-url", response.url);
111+
}
112+
113+
console.log({targetUrl: targetUrl, responseHeaders: responseHeaders});
114+
111115
const responseBody = isPreflightRequest ? null : await response.arrayBuffer();
112116

113117
const responseInit = {
@@ -118,7 +122,7 @@ addEventListener("fetch", async event => {
118122
return new Response(responseBody, responseInit);
119123

120124
} else {
121-
const responseHeaders = new Headers();
125+
let responseHeaders = new Headers();
122126
responseHeaders = setupCORSHeaders(responseHeaders);
123127

124128
let country = false;

0 commit comments

Comments
 (0)