diff --git a/src/bundle/rewriters/headers.ts b/src/bundle/rewriters/headers.ts index 2c72810..c055992 100644 --- a/src/bundle/rewriters/headers.ts +++ b/src/bundle/rewriters/headers.ts @@ -22,6 +22,7 @@ const cspHeaders = [ const urlHeaders = [ "location", + "Location", "content-location", "referer" ]; diff --git a/src/worker/index.ts b/src/worker/index.ts index 7b550a9..3b29de9 100644 --- a/src/worker/index.ts +++ b/src/worker/index.ts @@ -17,50 +17,53 @@ self.ScramjetServiceWorker = class ScramjetServiceWorker { this.client = new BareClient(); } - route(event: Event | any) { - const { request } = event; + route({ request }: FetchEvent) { if (request.url.startsWith(location.origin + self.__scramjet$config.prefix)) return true; else return false; } - async fetch(event: FetchEvent) { + async fetch({ request }: FetchEvent) { try { - const url = new URL(self.__scramjet$bundle.rewriters.url.decodeUrl(event.request.url)); + 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: event.request.method, - body: event.request.body, - headers: event.request.headers + method: request.method, + body: request.body, + headers: request.headers, + credentials: "omit", + mode: request.mode === "cors" ? request.mode : "same-origin", + cache: request.cache, + redirect: request.redirect, }); let responseBody; const responseHeaders = self.__scramjet$bundle.rewriters.rewriteHeaders(response.rawHeaders, origin); if (response.body) { - switch (event.request.destination) { - case "iframe": - case "document": - responseBody = self.__scramjet$bundle.rewriters.rewriteHtml(await response.text(), url.origin); - break; - case "script": - responseBody = self.__scramjet$bundle.rewriters.rewriteJs(await response.text(), url.origin); - break; - case "style": - responseBody = self.__scramjet$bundle.rewriters.rewriteCss(await response.text(), url.origin); - break; - case "sharedworker": - break; - case "worker": - break; - default: - responseBody = response.body; - break; + switch (request.destination) { + case "iframe": + case "document": + responseBody = self.__scramjet$bundle.rewriters.rewriteHtml(await response.text(), url.origin); + break; + case "script": + responseBody = self.__scramjet$bundle.rewriters.rewriteJs(await response.text(), url.origin); + break; + case "style": + responseBody = self.__scramjet$bundle.rewriters.rewriteCss(await response.text(), url.origin); + break; + case "sharedworker": + break; + case "worker": + break; + default: + responseBody = response.body; + break; } } - if (responseHeaders.accept === 'text/event-stream') { - responseHeaders.headers['content-type'] = 'text/event-stream'; + if (responseHeaders.accept === "text/event-stream") { + responseHeaders.headers["content-type"] = "text/event-stream"; } if (crossOriginIsolated) { responseHeaders["Cross-Origin-Embedder-Policy"] = "require-corp"; @@ -72,7 +75,7 @@ self.ScramjetServiceWorker = class ScramjetServiceWorker { statusText: response.statusText }) } catch (err) { - if (!['document', 'iframe'].includes(event.request.destination)) + if (!["document", "iframe"].includes(request.destination)) return new Response(undefined, { status: 500 }); console.error(err);