From 593e06383e1f6bc48418c79d69de058d05d74404 Mon Sep 17 00:00:00 2001 From: Toshit Chawda Date: Sat, 12 Oct 2024 19:59:21 -0700 Subject: [PATCH 1/9] just make it a ref --- rewriter/src/rewrite.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rewriter/src/rewrite.rs b/rewriter/src/rewrite.rs index 672beec..ea233d3 100644 --- a/rewriter/src/rewrite.rs +++ b/rewriter/src/rewrite.rs @@ -419,7 +419,7 @@ fn expression_span(e: &Expression) -> Span { } // js MUST not be able to get a reference to any of these because sbx -const UNSAFE_GLOBALS: [&str; 9] = [ +const UNSAFE_GLOBALS: &[&str] = &[ "window", "self", "globalThis", From 8ff087efb254d239fbd6d1720f8e6cb7e794a120 Mon Sep 17 00:00:00 2001 From: wearrrrr Date: Sat, 12 Oct 2024 21:52:34 -0500 Subject: [PATCH 2/9] no-debugger --- eslint.config.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/eslint.config.mjs b/eslint.config.mjs index 5d5c5c3..acc5a46 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -46,6 +46,7 @@ export default [ "no-unreachable": "warn", "no-undef": "off", "no-empty": "off", + "no-debugger": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/ban-types": "off", From c3ccd8f238a2963c403fda1c46ddc58a68e1f5a4 Mon Sep 17 00:00:00 2001 From: wearrrrr Date: Sat, 12 Oct 2024 21:59:15 -0500 Subject: [PATCH 3/9] lint fixes --- src/client/dom/serviceworker.ts | 8 +++--- src/client/dom/storage.ts | 2 +- src/client/global.ts | 1 - src/client/helpers.ts | 35 ++++++++++++------------- src/client/shared/requests/fetch.ts | 4 +-- src/client/shared/requests/websocket.ts | 4 +-- src/client/shared/unproxy.ts | 8 +++--- src/shared/rewriters/html.ts | 3 ++- src/shared/rewriters/js.ts | 4 +-- src/shared/rewriters/url.ts | 10 ++++--- src/worker/fetch.ts | 5 +--- src/worker/index.ts | 1 - 12 files changed, 41 insertions(+), 44 deletions(-) diff --git a/src/client/dom/serviceworker.ts b/src/client/dom/serviceworker.ts index a31882a..841a600 100644 --- a/src/client/dom/serviceworker.ts +++ b/src/client/dom/serviceworker.ts @@ -7,11 +7,11 @@ import { getOwnPropertyDescriptorHandler } from "../helpers"; export const order = 2; export const enabled = () => config.flags.serviceworkers; -export function disabled(client: ScramjetClient, self: Self) { +export function disabled(_client: ScramjetClient, _self: Self) { Reflect.deleteProperty(Navigator.prototype, "serviceWorker"); } -export default function (client: ScramjetClient, self: Self) { +export default function (client: ScramjetClient, _self: Self) { let registration; client.Proxy("EventTarget.prototype.addEventListener", { @@ -45,7 +45,7 @@ export default function (client: ScramjetClient, self: Self) { }); client.Trap("navigator.serviceWorker.ready", { - get(ctx) { + get(_ctx) { console.log(registration); return new Promise((resolve) => resolve(registration)); @@ -53,7 +53,7 @@ export default function (client: ScramjetClient, self: Self) { }); client.Trap("navigator.serviceWorker.controller", { - get(ctx) { + get(_ctx) { return registration?.active; }, }); diff --git a/src/client/dom/storage.ts b/src/client/dom/storage.ts index 5d9f625..d5aa220 100644 --- a/src/client/dom/storage.ts +++ b/src/client/dom/storage.ts @@ -63,7 +63,7 @@ export default function (client: ScramjetClient, self: typeof window) { ownKeys(target) { return Reflect.ownKeys(target) .filter((f) => typeof f === "string" && f.startsWith(client.url.host)) - .map((f) => f.substring(client.url.host.length + 1)); + .map((f) => typeof f === "string" ? f.substring(client.url.host.length + 1) : f); }, getOwnPropertyDescriptor(target, property) { diff --git a/src/client/global.ts b/src/client/global.ts index d294b7b..3ea0d08 100644 --- a/src/client/global.ts +++ b/src/client/global.ts @@ -1,6 +1,5 @@ // import { encodeUrl } from "../shared"; import { ScramjetClient } from "./client"; -import { indirectEval } from "./shared/eval"; // import { config } from "../shared"; import { getOwnPropertyDescriptorHandler } from "./helpers"; diff --git a/src/client/helpers.ts b/src/client/helpers.ts index ba5fff4..f2b75e5 100644 --- a/src/client/helpers.ts +++ b/src/client/helpers.ts @@ -2,27 +2,26 @@ export function getOwnPropertyDescriptorHandler(target, prop) { const realDescriptor = Reflect.getOwnPropertyDescriptor(target, prop); return realDescriptor; + // const d: PropertyDescriptor = {}; - const d: PropertyDescriptor = {}; + // if (realDescriptor.enumerable !== undefined) + // d.enumerable = realDescriptor.enumerable; + // if (realDescriptor.configurable !== undefined) + // d.configurable = realDescriptor.configurable; + // if (realDescriptor.writable !== undefined) + // d.writable = realDescriptor.writable; - if (realDescriptor.enumerable !== undefined) - d.enumerable = realDescriptor.enumerable; - if (realDescriptor.configurable !== undefined) - d.configurable = realDescriptor.configurable; - if (realDescriptor.writable !== undefined) - d.writable = realDescriptor.writable; + // if (realDescriptor.get) { + // d.get = () => this.get(target, prop); + // } - if (realDescriptor.get) { - d.get = () => this.get(target, prop); - } + // if (realDescriptor.set) { + // d.set = (value) => this.set(target, prop, value); + // } - if (realDescriptor.set) { - d.set = (value) => this.set(target, prop, value); - } + // if (realDescriptor.value) { + // d.value = this.get(target, prop); + // } - if (realDescriptor.value) { - d.value = this.get(target, prop); - } - - return d; + // return d; } diff --git a/src/client/shared/requests/fetch.ts b/src/client/shared/requests/fetch.ts index f6756c0..db056d1 100644 --- a/src/client/shared/requests/fetch.ts +++ b/src/client/shared/requests/fetch.ts @@ -3,9 +3,9 @@ import { isemulatedsw } from "../.."; import { unrewriteUrl } from "../../../shared"; import { ScramjetClient } from "../../client"; -import { rewriteUrl, rewriteHeaders } from "../../../shared"; +import { rewriteUrl } from "../../../shared"; -export default function (client: ScramjetClient, self: typeof globalThis) { +export default function (client: ScramjetClient, _self: typeof globalThis) { client.Proxy("fetch", { apply(ctx) { if (typeof ctx.args[0] === "string" || ctx.args[0] instanceof URL) { diff --git a/src/client/shared/requests/websocket.ts b/src/client/shared/requests/websocket.ts index 5eb9b22..748759c 100644 --- a/src/client/shared/requests/websocket.ts +++ b/src/client/shared/requests/websocket.ts @@ -59,7 +59,7 @@ export default function (client: ScramjetClient, self: typeof globalThis) { fakeWebSocket.dispatchEvent(fakeev); } - barews.addEventListener("open", (ev) => { + barews.addEventListener("open", () => { fakeEventSend(new Event("open")); }); barews.addEventListener("close", (ev) => { @@ -76,7 +76,7 @@ export default function (client: ScramjetClient, self: typeof globalThis) { fakeEventSend(fakeev); }); - barews.addEventListener("error", (ev) => { + barews.addEventListener("error", () => { fakeEventSend(new Event("error")); }); diff --git a/src/client/shared/unproxy.ts b/src/client/shared/unproxy.ts index 9905c2a..991b77c 100644 --- a/src/client/shared/unproxy.ts +++ b/src/client/shared/unproxy.ts @@ -51,17 +51,17 @@ export default function (client: ScramjetClient, self: typeof window) { if (desc.get) { client.RawProxy(desc, "get", { - apply(ctx) { + apply(getCtx) { // value of this in the getter needs to be corrected - unproxy(ctx, client); + unproxy(getCtx, client); }, }); } if (desc.set) { client.RawProxy(desc, "set", { - apply(ctx) { - unproxy(ctx, client); + apply(setCtx) { + unproxy(setCtx, client); }, }); } diff --git a/src/shared/rewriters/html.ts b/src/shared/rewriters/html.ts index 5de72fa..03cb91f 100644 --- a/src/shared/rewriters/html.ts +++ b/src/shared/rewriters/html.ts @@ -138,7 +138,8 @@ export const htmlRules: { // because they can't be fetch'd return unrewriteBlob(value); } - return rewriteUrl(value, meta); + +return rewriteUrl(value, meta); }, src: ["video", "audio"], }, diff --git a/src/shared/rewriters/js.ts b/src/shared/rewriters/js.ts index aad5ce5..b530d46 100644 --- a/src/shared/rewriters/js.ts +++ b/src/shared/rewriters/js.ts @@ -25,7 +25,7 @@ export function rewriteJs(js: string | ArrayBuffer, meta: URLMeta) { return rewriteJsNaiive(text); } - const before = performance.now(); + // const before = performance.now(); if (typeof js === "string") { js = new TextDecoder().decode( rewrite_js(js, meta.base.href, self.$scramjet) @@ -37,7 +37,7 @@ export function rewriteJs(js: string | ArrayBuffer, meta: URLMeta) { self.$scramjet ); } - const after = performance.now(); + // const after = performance.now(); // dbg.debug("Rewrite took", Math.floor((after - before) * 10) / 10, "ms"); diff --git a/src/shared/rewriters/url.ts b/src/shared/rewriters/url.ts index 183ffc4..25bea41 100644 --- a/src/shared/rewriters/url.ts +++ b/src/shared/rewriters/url.ts @@ -14,13 +14,15 @@ function tryCanParseURL(url: string, origin?: string | URL): URL | null { } export function rewriteBlob(url: string, meta: URLMeta) { - let blob = new URL(url.substring("blob:".length)); - return "blob:" + meta.origin.origin + blob.pathname; + const blob = new URL(url.substring("blob:".length)); + +return "blob:" + meta.origin.origin + blob.pathname; } export function unrewriteBlob(url: string) { - let blob = new URL(url.substring("blob:".length)); - return "blob:" + location.origin + blob.pathname; + const blob = new URL(url.substring("blob:".length)); + +return "blob:" + location.origin + blob.pathname; } export function rewriteUrl(url: string | URL, meta: URLMeta) { diff --git a/src/worker/fetch.ts b/src/worker/fetch.ts index ff22db2..02fdd3c 100644 --- a/src/worker/fetch.ts +++ b/src/worker/fetch.ts @@ -57,7 +57,7 @@ export async function swfetch( dataurl = unrewriteBlob(dataurl); } - let response: Response = await fetch(dataurl, {}); + const response: Response = await fetch(dataurl, {}); let body: BodyType; @@ -285,15 +285,12 @@ async function rewriteBody( } else { return response.body; } - break; case "script": return rewriteJs(await response.arrayBuffer(), meta); // Disable threading for now, it's causing issues. // responseBody = await this.threadpool.rewriteJs(await responseBody.arrayBuffer(), url.toString()); - break; case "style": return rewriteCss(await response.text(), meta); - break; case "sharedworker": case "worker": return rewriteWorkers(await response.arrayBuffer(), workertype, meta); diff --git a/src/worker/index.ts b/src/worker/index.ts index 2e47692..79f8edd 100644 --- a/src/worker/index.ts +++ b/src/worker/index.ts @@ -2,7 +2,6 @@ import { FakeServiceWorker } from "./fakesw"; import { swfetch } from "./fetch"; import { ScramjetThreadpool } from "./threadpool"; import type BareClient from "@mercuryworkshop/bare-mux"; -import { ScramjetConfig } from "../types"; export class ScramjetServiceWorker extends EventTarget { client: BareClient; From d1d38142e751b63909e590be7c33dbc1c4026da4 Mon Sep 17 00:00:00 2001 From: Toshit <45221816+r58Playz@users.noreply.github.com> Date: Sat, 12 Oct 2024 20:08:08 -0700 Subject: [PATCH 4/9] nuke velzie stuff --- .github/workflows/main.yml | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9bbeabd..41244a9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,6 +5,11 @@ on: pull_request: workflow_dispatch: +permissions: + contents: read + pages: write + id-token: write + jobs: build: runs-on: ubuntu-latest @@ -41,6 +46,13 @@ jobs: dist/*.js.map - name: build statics run: bash buildstatic.sh + - name: upload pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: './staticbuild' + - name: deploy to github + id: deployment + uses: actions/deploy-pages@v4 upload: name: Upload release @@ -78,16 +90,3 @@ jobs: body: ${{ github.event.head_commit.message }} artifacts: "scramjet.zip" prerelease: true - deploy: - runs-on: ubuntu-latest - needs: build # Deploy after the build job finishes - permissions: - pages: write - id-token: write - - steps: - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ github.token }} - publish_dir: ./staticbuild From 63db07da8901173abc047387e67a576fda0cc076 Mon Sep 17 00:00:00 2001 From: wearrrrr Date: Sat, 12 Oct 2024 22:09:27 -0500 Subject: [PATCH 5/9] eslint warnings are GONE, please keep it this way --- src/client/dom/element.ts | 2 +- src/client/dom/history.ts | 2 +- src/client/dom/origin.ts | 3 +-- src/client/dom/performance.ts | 2 +- src/client/dom/storage.ts | 2 +- src/client/location.ts | 2 +- src/client/shared/antiantidebugger.ts | 4 ++-- src/client/shared/function.ts | 2 +- src/client/shared/indexeddb.ts | 2 +- src/client/shared/requests/beacon.ts | 2 +- src/client/shared/worker.ts | 1 - src/client/shared/wrap.ts | 8 ++++---- src/client/swruntime.ts | 3 ++- src/sync.ts | 12 ++++++------ src/thread/thread.ts | 8 ++++---- 15 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/client/dom/element.ts b/src/client/dom/element.ts index aa4ea8c..0847cb6 100644 --- a/src/client/dom/element.ts +++ b/src/client/dom/element.ts @@ -166,7 +166,7 @@ export default function (client: ScramjetClient, self: typeof window) { }); client.Proxy("Element.prototype.setAttributeNS", { apply(ctx) { - const [namespace, name, value] = ctx.args; + const [_namespace, name, value] = ctx.args; const ruleList = htmlRules.find((rule) => { const r = rule[name]; diff --git a/src/client/dom/history.ts b/src/client/dom/history.ts index 37ece22..3a67d74 100644 --- a/src/client/dom/history.ts +++ b/src/client/dom/history.ts @@ -2,7 +2,7 @@ import { ScramjetClient } from "../client"; import { rewriteUrl } from "../../shared"; import { UrlChangeEvent } from "../events"; -export default function (client: ScramjetClient, self: typeof globalThis) { +export default function (client: ScramjetClient, _self: typeof globalThis) { client.Proxy("history.pushState", { apply(ctx) { if (ctx.args[2]) ctx.args[2] = rewriteUrl(ctx.args[2], client.meta); diff --git a/src/client/dom/origin.ts b/src/client/dom/origin.ts index 3f2c124..95fef2c 100644 --- a/src/client/dom/origin.ts +++ b/src/client/dom/origin.ts @@ -1,7 +1,6 @@ import { ScramjetClient } from "../client"; -import { unrewriteUrl } from "../../shared"; -export default function (client: ScramjetClient, self: typeof window) { +export default function (client: ScramjetClient, _self: typeof window) { client.Trap("origin", { get() { // this isn't right!! diff --git a/src/client/dom/performance.ts b/src/client/dom/performance.ts index fce56e5..cd04403 100644 --- a/src/client/dom/performance.ts +++ b/src/client/dom/performance.ts @@ -1,7 +1,7 @@ import { unrewriteUrl } from "../../shared"; import { ScramjetClient } from "../client"; -export default function (client: ScramjetClient, self: typeof globalThis) { +export default function (client: ScramjetClient, _self: typeof globalThis) { client.Trap("PerformanceEntry.prototype.name", { get(ctx) { return unrewriteUrl(ctx.get() as string); diff --git a/src/client/dom/storage.ts b/src/client/dom/storage.ts index d5aa220..cd287ce 100644 --- a/src/client/dom/storage.ts +++ b/src/client/dom/storage.ts @@ -86,7 +86,7 @@ export default function (client: ScramjetClient, self: typeof window) { }; const realLocalStorage = self.localStorage; - const realSessionStorage = self.sessionStorage; + // const realSessionStorage = self.sessionStorage; const localStorageProxy = new Proxy(self.localStorage, handler); const sessionStorageProxy = new Proxy(self.sessionStorage, handler); diff --git a/src/client/location.ts b/src/client/location.ts index bf912db..2d2b8b5 100644 --- a/src/client/location.ts +++ b/src/client/location.ts @@ -1,7 +1,7 @@ // @ts-nocheck import { ScramjetClient } from "./client"; import { nativeGetOwnPropertyDescriptor } from "./natives"; -import { unrewriteUrl, rewriteUrl } from "../shared"; +import { rewriteUrl } from "../shared"; import { iswindow } from "."; export function createLocationProxy( diff --git a/src/client/shared/antiantidebugger.ts b/src/client/shared/antiantidebugger.ts index e119afd..0e67d17 100644 --- a/src/client/shared/antiantidebugger.ts +++ b/src/client/shared/antiantidebugger.ts @@ -10,10 +10,10 @@ export default function (client: ScramjetClient) { const log = console.log; client.Trap("console.log", { - set(ctx, v) { + set(_ctx, _v) { // is there a legitimate reason to let sites do this? }, - get(ctx) { + get(_ctx) { return log; }, }); diff --git a/src/client/shared/function.ts b/src/client/shared/function.ts index a9a1b45..e193743 100644 --- a/src/client/shared/function.ts +++ b/src/client/shared/function.ts @@ -8,7 +8,7 @@ function rewriteFunction(ctx: ProxyCtx, client: ScramjetClient) { ctx.return(ctx.fn(content)()); } -export default function (client: ScramjetClient, self: Self) { +export default function (client: ScramjetClient, _self: Self) { const handler: Proxy = { apply(ctx) { rewriteFunction(ctx, client); diff --git a/src/client/shared/indexeddb.ts b/src/client/shared/indexeddb.ts index 4b57257..962dff5 100644 --- a/src/client/shared/indexeddb.ts +++ b/src/client/shared/indexeddb.ts @@ -1,6 +1,6 @@ import { ScramjetClient } from "../client"; -export default function (client: ScramjetClient, self: Self) { +export default function (client: ScramjetClient, _self: Self) { client.Proxy("IDBFactory.prototype.open", { apply(ctx) { ctx.args[0] = `${client.url.origin}@${ctx.args[0]}`; diff --git a/src/client/shared/requests/beacon.ts b/src/client/shared/requests/beacon.ts index f758521..02da29c 100644 --- a/src/client/shared/requests/beacon.ts +++ b/src/client/shared/requests/beacon.ts @@ -1,7 +1,7 @@ import { rewriteUrl } from "../../../shared"; import { ScramjetClient } from "../../client"; -export default function (client: ScramjetClient, self) { +export default function (client: ScramjetClient, _self) { client.Proxy("navigator.sendBeacon", { apply(ctx) { ctx.args[0] = rewriteUrl(ctx.args[0], client.meta); diff --git a/src/client/shared/worker.ts b/src/client/shared/worker.ts index a6e10c8..3cd1008 100644 --- a/src/client/shared/worker.ts +++ b/src/client/shared/worker.ts @@ -1,7 +1,6 @@ import { iswindow } from ".."; import { BareMuxConnection } from "../../shared"; import { rewriteUrl } from "../../shared"; -import type { MessageC2W } from "../../worker"; import { ScramjetClient } from "../client"; const sharedworkerpostmessage = MessagePort.prototype.postMessage; diff --git a/src/client/shared/wrap.ts b/src/client/shared/wrap.ts index 596ffd0..f3bdcf3 100644 --- a/src/client/shared/wrap.ts +++ b/src/client/shared/wrap.ts @@ -2,15 +2,15 @@ import { iswindow, isworker } from ".."; import { SCRAMJETCLIENT } from "../../symbols"; import { ScramjetClient } from "../client"; import { config } from "../../shared"; -import { argdbg } from "./err"; import { indirectEval } from "./eval"; +// import { argdbg } from "./err"; export function createWrapFn(client: ScramjetClient, self: typeof globalThis) { return function (identifier: any, args: any) { if (args && typeof args === "object" && args.length === 0) - for (const arg of args) { - // argdbg(arg); - } + // for (const arg of args) { + // argdbg(arg); + // } if (iswindow && identifier instanceof self.Window) { return client.globalProxy; } else if (iswindow && identifier instanceof self.parent.self.Window) { diff --git a/src/client/swruntime.ts b/src/client/swruntime.ts index 6b21b2c..8ce0aae 100644 --- a/src/client/swruntime.ts +++ b/src/client/swruntime.ts @@ -38,6 +38,7 @@ export class ScramjetServiceWorkerRuntime { postMessage: () => {}, addEventListener: () => {}, removeEventListener: () => {}, + // @ts-ignore dispatchEvent: (_e: Event) => {}, }, showNotification: async () => {}, @@ -123,7 +124,7 @@ function handleMessage( function trustEvent(event: Event): Event { return new Proxy(event, { - get(target, prop, reciever) { + get(target, prop, _reciever) { if (prop === "isTrusted") return true; return Reflect.get(target, prop); diff --git a/src/sync.ts b/src/sync.ts index 1372ca1..bc80ae7 100644 --- a/src/sync.ts +++ b/src/sync.ts @@ -31,14 +31,14 @@ addEventListener( cursor += 2; // next write the header string - const headers = xhr.getAllResponseHeaders(); - view.setUint32(cursor, headers.length); + const resHeaders = xhr.getAllResponseHeaders(); + view.setUint32(cursor, resHeaders.length); cursor += 4; - if (sab.byteLength < cursor + headers.length) - sab.grow(cursor + headers.length); - u8view.set(new TextEncoder().encode(headers), cursor); - cursor += headers.length; + if (sab.byteLength < cursor + resHeaders.length) + sab.grow(cursor + resHeaders.length); + u8view.set(new TextEncoder().encode(resHeaders), cursor); + cursor += resHeaders.length; view.setUint32(cursor, xhr.response.byteLength); cursor += 4; diff --git a/src/thread/thread.ts b/src/thread/thread.ts index dc208bc..d565064 100644 --- a/src/thread/thread.ts +++ b/src/thread/thread.ts @@ -1,8 +1,8 @@ import { rewriteJs } from "../shared/rewriters/js"; // @ts-ignore -onconnect = (e) => { - const port = e.ports[0]; +onconnect = (ev) => { + const port = ev.ports[0]; console.log("thread: connected to port", port); port.postMessage("ready"); @@ -20,10 +20,10 @@ onconnect = (e) => { token, result: res, }); - } catch (e) { + } catch (err) { port.postMessage({ token, - error: e.message, + error: err.message, }); } From 4128bc778a47d34c67d361acda6109f109c18166 Mon Sep 17 00:00:00 2001 From: wearrrrr Date: Sat, 12 Oct 2024 22:55:31 -0500 Subject: [PATCH 6/9] Revert previous commit --- src/client/dom/element.ts | 2 +- src/client/dom/history.ts | 2 +- src/client/dom/origin.ts | 3 ++- src/client/dom/performance.ts | 2 +- src/client/dom/storage.ts | 2 +- src/client/location.ts | 2 +- src/client/shared/antiantidebugger.ts | 4 ++-- src/client/shared/function.ts | 2 +- src/client/shared/indexeddb.ts | 2 +- src/client/shared/requests/beacon.ts | 2 +- src/client/shared/worker.ts | 1 + src/client/shared/wrap.ts | 8 ++++---- src/client/swruntime.ts | 3 +-- src/sync.ts | 12 ++++++------ src/thread/thread.ts | 8 ++++---- 15 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/client/dom/element.ts b/src/client/dom/element.ts index 0847cb6..aa4ea8c 100644 --- a/src/client/dom/element.ts +++ b/src/client/dom/element.ts @@ -166,7 +166,7 @@ export default function (client: ScramjetClient, self: typeof window) { }); client.Proxy("Element.prototype.setAttributeNS", { apply(ctx) { - const [_namespace, name, value] = ctx.args; + const [namespace, name, value] = ctx.args; const ruleList = htmlRules.find((rule) => { const r = rule[name]; diff --git a/src/client/dom/history.ts b/src/client/dom/history.ts index 3a67d74..37ece22 100644 --- a/src/client/dom/history.ts +++ b/src/client/dom/history.ts @@ -2,7 +2,7 @@ import { ScramjetClient } from "../client"; import { rewriteUrl } from "../../shared"; import { UrlChangeEvent } from "../events"; -export default function (client: ScramjetClient, _self: typeof globalThis) { +export default function (client: ScramjetClient, self: typeof globalThis) { client.Proxy("history.pushState", { apply(ctx) { if (ctx.args[2]) ctx.args[2] = rewriteUrl(ctx.args[2], client.meta); diff --git a/src/client/dom/origin.ts b/src/client/dom/origin.ts index 95fef2c..3f2c124 100644 --- a/src/client/dom/origin.ts +++ b/src/client/dom/origin.ts @@ -1,6 +1,7 @@ import { ScramjetClient } from "../client"; +import { unrewriteUrl } from "../../shared"; -export default function (client: ScramjetClient, _self: typeof window) { +export default function (client: ScramjetClient, self: typeof window) { client.Trap("origin", { get() { // this isn't right!! diff --git a/src/client/dom/performance.ts b/src/client/dom/performance.ts index cd04403..fce56e5 100644 --- a/src/client/dom/performance.ts +++ b/src/client/dom/performance.ts @@ -1,7 +1,7 @@ import { unrewriteUrl } from "../../shared"; import { ScramjetClient } from "../client"; -export default function (client: ScramjetClient, _self: typeof globalThis) { +export default function (client: ScramjetClient, self: typeof globalThis) { client.Trap("PerformanceEntry.prototype.name", { get(ctx) { return unrewriteUrl(ctx.get() as string); diff --git a/src/client/dom/storage.ts b/src/client/dom/storage.ts index cd287ce..d5aa220 100644 --- a/src/client/dom/storage.ts +++ b/src/client/dom/storage.ts @@ -86,7 +86,7 @@ export default function (client: ScramjetClient, self: typeof window) { }; const realLocalStorage = self.localStorage; - // const realSessionStorage = self.sessionStorage; + const realSessionStorage = self.sessionStorage; const localStorageProxy = new Proxy(self.localStorage, handler); const sessionStorageProxy = new Proxy(self.sessionStorage, handler); diff --git a/src/client/location.ts b/src/client/location.ts index 2d2b8b5..bf912db 100644 --- a/src/client/location.ts +++ b/src/client/location.ts @@ -1,7 +1,7 @@ // @ts-nocheck import { ScramjetClient } from "./client"; import { nativeGetOwnPropertyDescriptor } from "./natives"; -import { rewriteUrl } from "../shared"; +import { unrewriteUrl, rewriteUrl } from "../shared"; import { iswindow } from "."; export function createLocationProxy( diff --git a/src/client/shared/antiantidebugger.ts b/src/client/shared/antiantidebugger.ts index 0e67d17..e119afd 100644 --- a/src/client/shared/antiantidebugger.ts +++ b/src/client/shared/antiantidebugger.ts @@ -10,10 +10,10 @@ export default function (client: ScramjetClient) { const log = console.log; client.Trap("console.log", { - set(_ctx, _v) { + set(ctx, v) { // is there a legitimate reason to let sites do this? }, - get(_ctx) { + get(ctx) { return log; }, }); diff --git a/src/client/shared/function.ts b/src/client/shared/function.ts index e193743..a9a1b45 100644 --- a/src/client/shared/function.ts +++ b/src/client/shared/function.ts @@ -8,7 +8,7 @@ function rewriteFunction(ctx: ProxyCtx, client: ScramjetClient) { ctx.return(ctx.fn(content)()); } -export default function (client: ScramjetClient, _self: Self) { +export default function (client: ScramjetClient, self: Self) { const handler: Proxy = { apply(ctx) { rewriteFunction(ctx, client); diff --git a/src/client/shared/indexeddb.ts b/src/client/shared/indexeddb.ts index 962dff5..4b57257 100644 --- a/src/client/shared/indexeddb.ts +++ b/src/client/shared/indexeddb.ts @@ -1,6 +1,6 @@ import { ScramjetClient } from "../client"; -export default function (client: ScramjetClient, _self: Self) { +export default function (client: ScramjetClient, self: Self) { client.Proxy("IDBFactory.prototype.open", { apply(ctx) { ctx.args[0] = `${client.url.origin}@${ctx.args[0]}`; diff --git a/src/client/shared/requests/beacon.ts b/src/client/shared/requests/beacon.ts index 02da29c..f758521 100644 --- a/src/client/shared/requests/beacon.ts +++ b/src/client/shared/requests/beacon.ts @@ -1,7 +1,7 @@ import { rewriteUrl } from "../../../shared"; import { ScramjetClient } from "../../client"; -export default function (client: ScramjetClient, _self) { +export default function (client: ScramjetClient, self) { client.Proxy("navigator.sendBeacon", { apply(ctx) { ctx.args[0] = rewriteUrl(ctx.args[0], client.meta); diff --git a/src/client/shared/worker.ts b/src/client/shared/worker.ts index 3cd1008..a6e10c8 100644 --- a/src/client/shared/worker.ts +++ b/src/client/shared/worker.ts @@ -1,6 +1,7 @@ import { iswindow } from ".."; import { BareMuxConnection } from "../../shared"; import { rewriteUrl } from "../../shared"; +import type { MessageC2W } from "../../worker"; import { ScramjetClient } from "../client"; const sharedworkerpostmessage = MessagePort.prototype.postMessage; diff --git a/src/client/shared/wrap.ts b/src/client/shared/wrap.ts index f3bdcf3..596ffd0 100644 --- a/src/client/shared/wrap.ts +++ b/src/client/shared/wrap.ts @@ -2,15 +2,15 @@ import { iswindow, isworker } from ".."; import { SCRAMJETCLIENT } from "../../symbols"; import { ScramjetClient } from "../client"; import { config } from "../../shared"; +import { argdbg } from "./err"; import { indirectEval } from "./eval"; -// import { argdbg } from "./err"; export function createWrapFn(client: ScramjetClient, self: typeof globalThis) { return function (identifier: any, args: any) { if (args && typeof args === "object" && args.length === 0) - // for (const arg of args) { - // argdbg(arg); - // } + for (const arg of args) { + // argdbg(arg); + } if (iswindow && identifier instanceof self.Window) { return client.globalProxy; } else if (iswindow && identifier instanceof self.parent.self.Window) { diff --git a/src/client/swruntime.ts b/src/client/swruntime.ts index 8ce0aae..6b21b2c 100644 --- a/src/client/swruntime.ts +++ b/src/client/swruntime.ts @@ -38,7 +38,6 @@ export class ScramjetServiceWorkerRuntime { postMessage: () => {}, addEventListener: () => {}, removeEventListener: () => {}, - // @ts-ignore dispatchEvent: (_e: Event) => {}, }, showNotification: async () => {}, @@ -124,7 +123,7 @@ function handleMessage( function trustEvent(event: Event): Event { return new Proxy(event, { - get(target, prop, _reciever) { + get(target, prop, reciever) { if (prop === "isTrusted") return true; return Reflect.get(target, prop); diff --git a/src/sync.ts b/src/sync.ts index bc80ae7..1372ca1 100644 --- a/src/sync.ts +++ b/src/sync.ts @@ -31,14 +31,14 @@ addEventListener( cursor += 2; // next write the header string - const resHeaders = xhr.getAllResponseHeaders(); - view.setUint32(cursor, resHeaders.length); + const headers = xhr.getAllResponseHeaders(); + view.setUint32(cursor, headers.length); cursor += 4; - if (sab.byteLength < cursor + resHeaders.length) - sab.grow(cursor + resHeaders.length); - u8view.set(new TextEncoder().encode(resHeaders), cursor); - cursor += resHeaders.length; + if (sab.byteLength < cursor + headers.length) + sab.grow(cursor + headers.length); + u8view.set(new TextEncoder().encode(headers), cursor); + cursor += headers.length; view.setUint32(cursor, xhr.response.byteLength); cursor += 4; diff --git a/src/thread/thread.ts b/src/thread/thread.ts index d565064..dc208bc 100644 --- a/src/thread/thread.ts +++ b/src/thread/thread.ts @@ -1,8 +1,8 @@ import { rewriteJs } from "../shared/rewriters/js"; // @ts-ignore -onconnect = (ev) => { - const port = ev.ports[0]; +onconnect = (e) => { + const port = e.ports[0]; console.log("thread: connected to port", port); port.postMessage("ready"); @@ -20,10 +20,10 @@ onconnect = (ev) => { token, result: res, }); - } catch (err) { + } catch (e) { port.postMessage({ token, - error: err.message, + error: e.message, }); } From a3cb21a5001fc0fcd5846f763706a92838513c92 Mon Sep 17 00:00:00 2001 From: wearrrrr Date: Sat, 12 Oct 2024 22:57:46 -0500 Subject: [PATCH 7/9] Refactor velzie's global proxy refactor in a way that doesn't break things (i think) --- src/client/global.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/client/global.ts b/src/client/global.ts index 3ea0d08..f015c82 100644 --- a/src/client/global.ts +++ b/src/client/global.ts @@ -2,6 +2,7 @@ import { ScramjetClient } from "./client"; // import { config } from "../shared"; import { getOwnPropertyDescriptorHandler } from "./helpers"; +import { indirectEval } from "./shared/eval"; export const UNSAFE_GLOBALS = [ "window", @@ -20,11 +21,15 @@ export function createGlobalProxy( ): typeof globalThis { return new Proxy(self, { get(target, prop) { - const value = Reflect.get(target, prop); + if (prop === "location") return client.locationProxy; + if (typeof prop === "string" && UNSAFE_GLOBALS.includes(prop)) return client.wrapfn(self[prop]); + if (prop === "$scramjet") return; + if (prop === "eval") return indirectEval.bind(client); + const value = Reflect.get(target, prop); if (typeof prop === "string" && UNSAFE_GLOBALS.includes(prop)) return client.wrapfn(value); - + return value; }, From 70779ffe5bf459996153b8515ee10be7d31e1eb7 Mon Sep 17 00:00:00 2001 From: Percs <83934299+Percslol@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:49:46 -0500 Subject: [PATCH 8/9] chore: remove threading --- rspack.config.js | 2 - src/controller/index.ts | 1 - src/thread/thread.ts | 41 ------------------- src/types.d.ts | 1 - src/worker/fetch.ts | 2 - src/worker/index.ts | 4 -- src/worker/threadpool.ts | 88 ---------------------------------------- static/ui.js | 1 - 8 files changed, 140 deletions(-) delete mode 100644 src/thread/thread.ts delete mode 100644 src/worker/threadpool.ts diff --git a/rspack.config.js b/rspack.config.js index 8eca8af..8f85593 100644 --- a/rspack.config.js +++ b/rspack.config.js @@ -10,12 +10,10 @@ const __dirname = fileURLToPath(new URL(".", import.meta.url)); const packagemeta = JSON.parse(await readFile("package.json")); export default defineConfig({ - // change to production when needed mode: "development", entry: { shared: join(__dirname, "src/shared/index.ts"), worker: join(__dirname, "src/worker/index.ts"), - thread: join(__dirname, "src/thread/thread.ts"), client: join(__dirname, "src/client/index.ts"), codecs: join(__dirname, "src/codecs/index.ts"), controller: join(__dirname, "src/controller/index.ts"), diff --git a/src/controller/index.ts b/src/controller/index.ts index ca8827c..8469b74 100644 --- a/src/controller/index.ts +++ b/src/controller/index.ts @@ -21,7 +21,6 @@ export class ScramjetController { wasm: "/scramjet.wasm.js", shared: "/scramjet.shared.js", worker: "/scramjet.worker.js", - thread: "/scramjet.thread.js", client: "/scramjet.client.js", codecs: "/scramjet.codecs.js", sync: "/scramjet.sync.js", diff --git a/src/thread/thread.ts b/src/thread/thread.ts deleted file mode 100644 index dc208bc..0000000 --- a/src/thread/thread.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { rewriteJs } from "../shared/rewriters/js"; - -// @ts-ignore -onconnect = (e) => { - const port = e.ports[0]; - - console.log("thread: connected to port", port); - port.postMessage("ready"); - - let syncToken = 0; - port.onmessage = ({ data }) => { - console.log("thread: received message", data); - const [task, ...args] = data; - const token = syncToken++; - - try { - const res = tasks[task](...args); - console.log("thread: task", task, "completed with token", token); - port.postMessage({ - token, - result: res, - }); - } catch (e) { - port.postMessage({ - token, - error: e.message, - }); - } - - port.postMessage("idle"); - }; -}; - -const tasks = { - rewriteJs: taskRewriteJs, -}; - -function taskRewriteJs(js: ArrayBuffer, origin: string): string { - // idk how to get the codec from here - return rewriteJs(js, new URL(origin), () => {}); -} diff --git a/src/types.d.ts b/src/types.d.ts index c6d48fe..669568d 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -47,7 +47,6 @@ interface ScramjetConfig { wasm: string; shared: string; worker: string; - thread: string; client: string; codecs: string; sync: string; diff --git a/src/worker/fetch.ts b/src/worker/fetch.ts index 02fdd3c..838bfa9 100644 --- a/src/worker/fetch.ts +++ b/src/worker/fetch.ts @@ -287,8 +287,6 @@ async function rewriteBody( } case "script": return rewriteJs(await response.arrayBuffer(), meta); - // Disable threading for now, it's causing issues. - // responseBody = await this.threadpool.rewriteJs(await responseBody.arrayBuffer(), url.toString()); case "style": return rewriteCss(await response.text(), meta); case "sharedworker": diff --git a/src/worker/index.ts b/src/worker/index.ts index 79f8edd..84dc94c 100644 --- a/src/worker/index.ts +++ b/src/worker/index.ts @@ -1,12 +1,10 @@ import { FakeServiceWorker } from "./fakesw"; import { swfetch } from "./fetch"; -import { ScramjetThreadpool } from "./threadpool"; import type BareClient from "@mercuryworkshop/bare-mux"; export class ScramjetServiceWorker extends EventTarget { client: BareClient; config: typeof self.$scramjet.config; - threadpool: ScramjetThreadpool; syncPool: Record void> = {}; synctoken = 0; @@ -19,8 +17,6 @@ export class ScramjetServiceWorker extends EventTarget { super(); this.client = new self.$scramjet.shared.util.BareClient(); - this.threadpool = new ScramjetThreadpool(); - addEventListener("message", ({ data }: { data: MessageC2W }) => { if (!("scramjet$type" in data)) return; diff --git a/src/worker/threadpool.ts b/src/worker/threadpool.ts deleted file mode 100644 index 2381cef..0000000 --- a/src/worker/threadpool.ts +++ /dev/null @@ -1,88 +0,0 @@ -type Thread = { - handle: MessagePort; - ready: boolean; - busy: boolean; - syncToken: number; - promises: Map; -}; - -export class ScramjetThreadpool { - threads: Thread[] = []; - constructor() { - self.addEventListener("message", ({ data }) => { - if (data.scramjet$type == "add") { - this.spawn(data.handle); - } - }); - } - - spawn(handle) { - const thread = { - handle, - ready: false, - busy: false, - syncToken: 0, - promises: new Map(), - }; - - this.threads.push(thread); - - thread.handle.onmessage = (e) => { - if (e.data === "ready") { - thread.ready = true; - - return; - } - if (e.data === "idle") { - thread.busy = false; - - return; - } - - const { token, result, error } = e.data; - const { resolve, reject } = thread.promises.get(token); - thread.promises.delete(token); - - if (error) { - reject(error); - } else { - resolve(result); - } - }; - - thread.handle.start(); - } - - pick(): Thread | undefined { - const alive = this.threads.filter((t) => t.ready); - const idle = alive.filter((t) => !t.busy); - - // no threads - if (!alive.length) return; - - // there is a thread, but it's busy - if (!idle.length) return alive[Math.floor(Math.random() * alive.length)]; - - // there's an open thread - return idle[Math.floor(Math.random() * idle.length)]; - } - - run(task: string, args: any[], transferrable: any[]): Promise { - const thread = this.pick(); - if (!thread) throw new Error("No threads available"); - thread.busy = true; - - const token = thread.syncToken++; - - // console.log("runthread: dispatching task", task, "to thread", thread, "of token", token) - return new Promise((resolve, reject) => { - thread.promises.set(token, { resolve, reject }); - - thread.handle.postMessage([task, ...args], transferrable); - }); - } - - async rewriteJs(js: ArrayBuffer, origin: string): Promise { - return await this.run("rewriteJs", [js, origin], [js]); - } -} diff --git a/static/ui.js b/static/ui.js index 8514e12..2dc20c5 100644 --- a/static/ui.js +++ b/static/ui.js @@ -2,7 +2,6 @@ const scramjet = new ScramjetController({ wasm: "/scram/scramjet.wasm.js", codecs: "/scram/scramjet.codecs.js", worker: "/scram/scramjet.worker.js", - thread: "/scram/scramjet.thread.js", client: "/scram/scramjet.client.js", shared: "/scram/scramjet.shared.js", sync: "/scram/scramjet.sync.js", From a94f969a7b966680c40a32b434e9494f9a543712 Mon Sep 17 00:00:00 2001 From: Percs <83934299+Percslol@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:51:57 -0500 Subject: [PATCH 9/9] chore: prettier --- .github/workflows/main.yml | 2 +- src/client/dom/storage.ts | 4 +++- src/client/global.ts | 7 +++---- src/client/shared/wrap.ts | 3 --- src/shared/rewriters/html.ts | 4 ++-- src/shared/rewriters/url.ts | 8 ++++---- 6 files changed, 13 insertions(+), 15 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 41244a9..f49d0a0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -49,7 +49,7 @@ jobs: - name: upload pages artifact uses: actions/upload-pages-artifact@v3 with: - path: './staticbuild' + path: "./staticbuild" - name: deploy to github id: deployment uses: actions/deploy-pages@v4 diff --git a/src/client/dom/storage.ts b/src/client/dom/storage.ts index d5aa220..af4bce7 100644 --- a/src/client/dom/storage.ts +++ b/src/client/dom/storage.ts @@ -63,7 +63,9 @@ export default function (client: ScramjetClient, self: typeof window) { ownKeys(target) { return Reflect.ownKeys(target) .filter((f) => typeof f === "string" && f.startsWith(client.url.host)) - .map((f) => typeof f === "string" ? f.substring(client.url.host.length + 1) : f); + .map((f) => + typeof f === "string" ? f.substring(client.url.host.length + 1) : f + ); }, getOwnPropertyDescriptor(target, property) { diff --git a/src/client/global.ts b/src/client/global.ts index f015c82..e0a9853 100644 --- a/src/client/global.ts +++ b/src/client/global.ts @@ -22,14 +22,13 @@ export function createGlobalProxy( return new Proxy(self, { get(target, prop) { if (prop === "location") return client.locationProxy; - if (typeof prop === "string" && UNSAFE_GLOBALS.includes(prop)) return client.wrapfn(self[prop]); + if (typeof prop === "string" && UNSAFE_GLOBALS.includes(prop)) + return client.wrapfn(self[prop]); if (prop === "$scramjet") return; if (prop === "eval") return indirectEval.bind(client); const value = Reflect.get(target, prop); - if (typeof prop === "string" && UNSAFE_GLOBALS.includes(prop)) - return client.wrapfn(value); - + return value; }, diff --git a/src/client/shared/wrap.ts b/src/client/shared/wrap.ts index 596ffd0..fbed974 100644 --- a/src/client/shared/wrap.ts +++ b/src/client/shared/wrap.ts @@ -47,9 +47,6 @@ export function createWrapFn(client: ScramjetClient, self: typeof globalThis) { } else if (isworker && identifier instanceof self.WorkerGlobalScope) { return client.globalProxy; } - if (identifier == self.eval) { - return indirectEval.bind(client); - } return identifier; }; diff --git a/src/shared/rewriters/html.ts b/src/shared/rewriters/html.ts index 03cb91f..8b619be 100644 --- a/src/shared/rewriters/html.ts +++ b/src/shared/rewriters/html.ts @@ -138,8 +138,8 @@ export const htmlRules: { // because they can't be fetch'd return unrewriteBlob(value); } - -return rewriteUrl(value, meta); + + return rewriteUrl(value, meta); }, src: ["video", "audio"], }, diff --git a/src/shared/rewriters/url.ts b/src/shared/rewriters/url.ts index 25bea41..50ca14a 100644 --- a/src/shared/rewriters/url.ts +++ b/src/shared/rewriters/url.ts @@ -15,14 +15,14 @@ function tryCanParseURL(url: string, origin?: string | URL): URL | null { export function rewriteBlob(url: string, meta: URLMeta) { const blob = new URL(url.substring("blob:".length)); - -return "blob:" + meta.origin.origin + blob.pathname; + + return "blob:" + meta.origin.origin + blob.pathname; } export function unrewriteBlob(url: string) { const blob = new URL(url.substring("blob:".length)); - -return "blob:" + location.origin + blob.pathname; + + return "blob:" + location.origin + blob.pathname; } export function rewriteUrl(url: string | URL, meta: URLMeta) {