diff --git a/src/bundle/rewriters/headers.ts b/src/bundle/rewriters/headers.ts index c055992..3c0c4d2 100644 --- a/src/bundle/rewriters/headers.ts +++ b/src/bundle/rewriters/headers.ts @@ -22,23 +22,22 @@ const cspHeaders = [ const urlHeaders = [ "location", - "Location", "content-location", "referer" ]; -export function rewriteHeaders(headers: BareHeaders, origin?: string) { +export function rewriteHeaders(rawHeaders: BareHeaders, origin?: string) { + const headers = {}; + for (const key in rawHeaders) { + headers[key.toLowerCase()] = rawHeaders[key]; + } cspHeaders.forEach((header) => { delete headers[header]; - delete headers[header.toLowerCase()]; }); urlHeaders.forEach((header) => { - if (headers[header]) { + if (headers[header]) headers[header] = encodeUrl(headers[header] as string, origin); - } else if (headers[header.toLowerCase()]) { - headers[header.toLowerCase()] = encodeUrl(headers[header.toLowerCase()] as string, origin); - } }) return headers; diff --git a/src/scramjet.config.ts b/src/scramjet.config.ts index 10d7aec..ffc27fc 100644 --- a/src/scramjet.config.ts +++ b/src/scramjet.config.ts @@ -5,13 +5,11 @@ declare global { __scramjet$config: { prefix: string; codec: Codec - scramjet: { - config: string; - bundle: string; - worker: string; - client: string; - codecs: string; - } + config: string; + bundle: string; + worker: string; + client: string; + codecs: string; } } } @@ -19,11 +17,9 @@ declare global { self.__scramjet$config = { prefix: "/scramjet/", codec: self.__scramjet$codecs.plain, - scramjet: { - config: "/scramjet.config.js", - bundle: "/scramjet.bundle.js", - worker: "/scramjet.worker.js", - client: "/scramjet.client.js", - codecs: "/scramjet.codecs.js" - } + config: "/scramjet.config.js", + bundle: "/scramjet.bundle.js", + worker: "/scramjet.worker.js", + client: "/scramjet.client.js", + codecs: "/scramjet.codecs.js" } \ No newline at end of file diff --git a/src/worker/index.ts b/src/worker/index.ts index 3b29de9..93551e3 100644 --- a/src/worker/index.ts +++ b/src/worker/index.ts @@ -1,6 +1,3 @@ -importScripts("/scramjet.codecs.js"); -importScripts("/scramjet.config.js"); -importScripts("/scramjet.bundle.js"); import { BareClient } from "@mercuryworkshop/bare-mux"; import { BareResponseFetch } from "@mercuryworkshop/bare-mux" @@ -26,7 +23,6 @@ self.ScramjetServiceWorker = class ScramjetServiceWorker { try { const url = new URL(self.__scramjet$bundle.rewriters.url.decodeUrl(request.url)); - // implement header rewriting later const response: BareResponseFetch = await this.client.fetch(url, { method: request.method, body: request.body, @@ -37,7 +33,7 @@ self.ScramjetServiceWorker = class ScramjetServiceWorker { redirect: request.redirect, }); - + console.log(response) let responseBody; const responseHeaders = self.__scramjet$bundle.rewriters.rewriteHeaders(response.rawHeaders, origin); if (response.body) { @@ -62,8 +58,8 @@ self.ScramjetServiceWorker = class ScramjetServiceWorker { } } - if (responseHeaders.accept === "text/event-stream") { - responseHeaders.headers["content-type"] = "text/event-stream"; + if (responseHeaders["accept"] === "text/event-stream") { + responseHeaders["content-type"] = "text/event-stream"; } if (crossOriginIsolated) { responseHeaders["Cross-Origin-Embedder-Policy"] = "require-corp"; diff --git a/static/sw.js b/static/sw.js index 40b8344..a33ea11 100644 --- a/static/sw.js +++ b/static/sw.js @@ -1,7 +1,8 @@ -importScripts("./scramjet.codecs.js"); -importScripts("./scramjet.config.js"); -importScripts("./scramjet.worker.js"); -importScripts("./bare-client.js") +importScripts("scramjet.codecs.js"); +importScripts("scramjet.config.js"); +importScripts( __scramjet$config.bundle || "scramjet.bundle.js") +importScripts( __scramjet$config.worker || "scramjet.worker.js"); +importScripts("bare-client.js") const scramjet = new ScramjetServiceWorker();