From 58a1f6fbb2fac1382aa0953131ebcd75884cc7aa Mon Sep 17 00:00:00 2001 From: Avad3 <65318266+Avad3@users.noreply.github.com> Date: Sun, 11 Aug 2024 11:46:25 -0400 Subject: [PATCH 1/5] fix link header rewriter --- src/shared/rewriters/headers.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/shared/rewriters/headers.ts b/src/shared/rewriters/headers.ts index 30bd1de..3032806 100644 --- a/src/shared/rewriters/headers.ts +++ b/src/shared/rewriters/headers.ts @@ -24,6 +24,11 @@ const cspHeaders = [ const urlHeaders = ["location", "content-location", "referer"]; +function rewriteLinkHeader(link: string, origin?: URL) { + return link + .replace(/<(.*)>/gi, (match) => encodeUrl(match, origin)); +} + export function rewriteHeaders(rawHeaders: BareHeaders, origin?: URL) { const headers = {}; @@ -43,11 +48,13 @@ export function rewriteHeaders(rawHeaders: BareHeaders, origin?: URL) { ); }); - // if (headers["link"]) { - // headers["link"] = headers["link"].replace(/<(.*?)>/gi, (match) => - // encodeUrl(match, origin) - // ); - // } + if (typeof headers["link"] === "string") { + headers["link"] = rewriteLinkHeader(headers["link"], origin) + } else if (Array.isArray(headers["link"])) { + headers["link"] = headers["link"].map((link) => + rewriteLinkHeader(link, origin) + ); + } return headers; } From 1fcc4efa1b439b689d4780d441757abafe2622d1 Mon Sep 17 00:00:00 2001 From: ProgrammerIn-wonderland <3838shah@gmail.com> Date: Sun, 11 Aug 2024 17:50:44 -0400 Subject: [PATCH 2/5] make build.sh executable --- rewriter/build.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 rewriter/build.sh diff --git a/rewriter/build.sh b/rewriter/build.sh old mode 100644 new mode 100755 From 77d492fffbdd5758809b4bf502158d342256e4d1 Mon Sep 17 00:00:00 2001 From: ProgrammerIn-wonderland <3838shah@gmail.com> Date: Sun, 11 Aug 2024 21:57:41 -0400 Subject: [PATCH 3/5] replace url.canparse with canparseurl and bind to 0.0.0.0 --- server.js | 2 +- src/shared/rewriters/url.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index 1615ecc..164ec03 100644 --- a/server.js +++ b/server.js @@ -76,7 +76,7 @@ fastify.register(fastifyStatic, { }); fastify.listen({ port: process.env.PORT || 1337, - // host: "0.0.0.0", + host: "0.0.0.0", }); writeFileSync( diff --git a/src/shared/rewriters/url.ts b/src/shared/rewriters/url.ts index 0832d33..5e5410a 100644 --- a/src/shared/rewriters/url.ts +++ b/src/shared/rewriters/url.ts @@ -52,7 +52,7 @@ export function decodeUrl(url: string | URL) { } if ( - URL.canParse(url) && + canParseUrl(url) && new URL(url).pathname.startsWith(self.$scramjet.config.prefix + "worker") ) { return new URL(new URL(url).searchParams.get("origin")).href; From 1999996b2a3407835cf40af473ec77e0b57c7f41 Mon Sep 17 00:00:00 2001 From: ProgrammerIn-wonderland <3838shah@gmail.com> Date: Sun, 11 Aug 2024 22:09:12 -0400 Subject: [PATCH 4/5] tryCanParseURL --- src/shared/rewriters/url.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/shared/rewriters/url.ts b/src/shared/rewriters/url.ts index 5e5410a..81149d3 100644 --- a/src/shared/rewriters/url.ts +++ b/src/shared/rewriters/url.ts @@ -1,12 +1,10 @@ import { rewriteJs } from "./js"; -function canParseUrl(url: string, origin?: URL) { +function tryCanParseURL(url: string, origin?: string | URL): URL | null { try { - new URL(url, origin); - - return true; + return new URL(url, origin); } catch { - return false; + return null; } } @@ -36,7 +34,7 @@ export function encodeUrl(url: string | URL, origin?: URL) { return "javascript:" + rewriteJs(url.slice("javascript:".length), origin); } else if (/^(#|mailto|about|data|blob)/.test(url)) { return url; - } else if (canParseUrl(url, origin)) { + } else if (tryCanParseURL(url, origin)) { return ( location.origin + self.$scramjet.config.prefix + @@ -52,15 +50,16 @@ export function decodeUrl(url: string | URL) { } if ( - canParseUrl(url) && - new URL(url).pathname.startsWith(self.$scramjet.config.prefix + "worker") + tryCanParseURL(url)?.pathname.startsWith( + self.$scramjet.config.prefix + "worker" + ) ) { return new URL(new URL(url).searchParams.get("origin")).href; } if (/^(#|about|data|mailto|javascript)/.test(url)) { return url; - } else if (canParseUrl(url)) { + } else if (tryCanParseURL(url)) { return self.$scramjet.codec.decode( url.slice((location.origin + self.$scramjet.config.prefix).length) ); From 1d10e44ba03f571692d3a68d059ce66b87d82020 Mon Sep 17 00:00:00 2001 From: Toshit Chawda Date: Tue, 13 Aug 2024 21:08:36 -0700 Subject: [PATCH 5/5] playstore bypass support --- src/shared/rewriters/headers.ts | 5 ++--- src/shared/rewriters/js.ts | 6 ++++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/shared/rewriters/headers.ts b/src/shared/rewriters/headers.ts index 3032806..9dca828 100644 --- a/src/shared/rewriters/headers.ts +++ b/src/shared/rewriters/headers.ts @@ -25,8 +25,7 @@ const cspHeaders = [ const urlHeaders = ["location", "content-location", "referer"]; function rewriteLinkHeader(link: string, origin?: URL) { - return link - .replace(/<(.*)>/gi, (match) => encodeUrl(match, origin)); + return link.replace(/<(.*)>/gi, (match) => encodeUrl(match, origin)); } export function rewriteHeaders(rawHeaders: BareHeaders, origin?: URL) { @@ -49,7 +48,7 @@ export function rewriteHeaders(rawHeaders: BareHeaders, origin?: URL) { }); if (typeof headers["link"] === "string") { - headers["link"] = rewriteLinkHeader(headers["link"], origin) + headers["link"] = rewriteLinkHeader(headers["link"], origin); } else if (Array.isArray(headers["link"])) { headers["link"] = headers["link"].map((link) => rewriteLinkHeader(link, origin) diff --git a/src/shared/rewriters/js.ts b/src/shared/rewriters/js.ts index ab4bd05..0be28da 100644 --- a/src/shared/rewriters/js.ts +++ b/src/shared/rewriters/js.ts @@ -20,7 +20,8 @@ Error.stackTraceLimit = 50; global.rws = rewriteJs; export function rewriteJs(js: string | ArrayBuffer, origin?: URL) { - if ("window" in globalThis) origin ??= new URL(decodeUrl(location.href)); + if ("window" in globalThis) + origin = origin ?? new URL(decodeUrl(location.href)); const before = performance.now(); if (typeof js === "string") { @@ -48,7 +49,8 @@ export function rewriteJs(js: string | ArrayBuffer, origin?: URL) { // // if you can ensure all the preconditions are met this is faster than full rewrites export function rewriteJsNaiive(js: string | ArrayBuffer, origin?: URL) { - if ("window" in globalThis) origin ??= new URL(decodeUrl(location.href)); + if ("window" in globalThis) + origin = origin ?? new URL(decodeUrl(location.href)); if (typeof js !== "string") { js = new TextDecoder().decode(js);