roxxie-proxy-u-prod 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +123 -0
- package/SOURCE.md +29 -0
- package/THIRD_PARTY_NOTICES.md +24 -0
- package/dist/assets/filters-Bu_3nHVy.bin +0 -0
- package/dist/assets/index-BdRlQ7d_.css +1 -0
- package/dist/assets/index-DcvPYWS3.js +3621 -0
- package/dist/assets/inject-BnVzMVpl.js +40 -0
- package/dist/assets/scramjet-C9HLwI-y.wasm +0 -0
- package/dist/defaultfavicon.png +0 -0
- package/dist/icon.png +0 -0
- package/dist/roxxie-icon.svg +12 -0
- package/embed.js +70 -0
- package/examples/single-page.html +25 -0
- package/package.json +42 -0
- package/runtime/controller.sw.js +273 -0
- package/runtime/index.html +18 -0
- package/runtime/localcontrollersw.js +7 -0
- package/runtime/roxxie-network.json +13 -0
- package/runtime/sw.js +6 -0
- package/scripts/build.mjs +344 -0
- package/scripts/smoke.mjs +123 -0
- package/scripts/verify.mjs +122 -0
- package/source/external/dreamlandjs/LICENSE +21 -0
- package/source/external/dreamlandjs/README.md +22 -0
- package/source/external/dreamlandjs/dist/core.d.ts +167 -0
- package/source/external/dreamlandjs/dist/core.js +2 -0
- package/source/external/dreamlandjs/dist/core.js.map +1 -0
- package/source/external/dreamlandjs/dist/core.size.html +4950 -0
- package/source/external/dreamlandjs/dist/js-runtime.d.ts +3 -0
- package/source/external/dreamlandjs/dist/js-runtime.js +2 -0
- package/source/external/dreamlandjs/dist/js-runtime.js.map +1 -0
- package/source/external/dreamlandjs/dist/jsx-runtime.d.ts +1 -0
- package/source/external/dreamlandjs/dist/jsx-runtime.js +2 -0
- package/source/external/dreamlandjs/dist/jsx-runtime.js.map +1 -0
- package/source/external/dreamlandjs/dist/motion.d.ts +19 -0
- package/source/external/dreamlandjs/dist/motion.js +2 -0
- package/source/external/dreamlandjs/dist/motion.js.map +1 -0
- package/source/external/dreamlandjs/dist/router.d.ts +48 -0
- package/source/external/dreamlandjs/dist/router.js +2 -0
- package/source/external/dreamlandjs/dist/router.js.map +1 -0
- package/source/external/dreamlandjs/dist/ssr.client.d.ts +3 -0
- package/source/external/dreamlandjs/dist/ssr.client.js +2 -0
- package/source/external/dreamlandjs/dist/ssr.client.js.map +1 -0
- package/source/external/dreamlandjs/dist/ssr.client.size.html +4950 -0
- package/source/external/dreamlandjs/dist/ssr.hybrid.d.ts +7 -0
- package/source/external/dreamlandjs/dist/ssr.hybrid.js +2 -0
- package/source/external/dreamlandjs/dist/ssr.hybrid.js.map +1 -0
- package/source/external/dreamlandjs/dist/ssr.hybrid.size.html +4950 -0
- package/source/external/dreamlandjs/dist/ssr.server.d.ts +11 -0
- package/source/external/dreamlandjs/dist/ssr.server.js +2373 -0
- package/source/external/dreamlandjs/dist/ssr.server.js.map +1 -0
- package/source/external/dreamlandjs/dist/types/core/consts.d.ts +16 -0
- package/source/external/dreamlandjs/dist/types/core/css/index.d.ts +11 -0
- package/source/external/dreamlandjs/dist/types/core/css/selectorParser.d.ts +50 -0
- package/source/external/dreamlandjs/dist/types/core/delegate.d.ts +10 -0
- package/source/external/dreamlandjs/dist/types/core/index.d.ts +9 -0
- package/source/external/dreamlandjs/dist/types/core/jsx/child.d.ts +2 -0
- package/source/external/dreamlandjs/dist/types/core/jsx/definitions.d.ts +76 -0
- package/source/external/dreamlandjs/dist/types/core/jsx/dom.d.ts +28 -0
- package/source/external/dreamlandjs/dist/types/core/jsx/index.d.ts +14 -0
- package/source/external/dreamlandjs/dist/types/core/state/index.d.ts +1 -0
- package/source/external/dreamlandjs/dist/types/core/state/pointers.d.ts +37 -0
- package/source/external/dreamlandjs/dist/types/core/state/state.d.ts +13 -0
- package/source/external/dreamlandjs/dist/types/core/state/use.d.ts +11 -0
- package/source/external/dreamlandjs/dist/types/core/utils.d.ts +4 -0
- package/source/external/dreamlandjs/dist/types/js-runtime/index.d.ts +1 -0
- package/source/external/dreamlandjs/dist/types/jsx-runtime/index.d.ts +2 -0
- package/source/external/dreamlandjs/dist/types/motion/index.d.ts +15 -0
- package/source/external/dreamlandjs/dist/types/router/index.d.ts +45 -0
- package/source/external/dreamlandjs/dist/types/ssr/client/index.d.ts +1 -0
- package/source/external/dreamlandjs/dist/types/ssr/common/consts.d.ts +4 -0
- package/source/external/dreamlandjs/dist/types/ssr/common/serialize.d.ts +4 -0
- package/source/external/dreamlandjs/dist/types/ssr/common/types.d.ts +21 -0
- package/source/external/dreamlandjs/dist/types/ssr/hybrid/index.d.ts +4 -0
- package/source/external/dreamlandjs/dist/types/ssr/server/index.d.ts +7 -0
- package/source/external/dreamlandjs/dist/types/ssr/server/vdom.d.ts +71 -0
- package/source/external/dreamlandjs/dist/types/util/index.d.ts +1 -0
- package/source/external/dreamlandjs/dist/types/util/store.d.ts +26 -0
- package/source/external/dreamlandjs/dist/types/vite/css-minifier.d.ts +7 -0
- package/source/external/dreamlandjs/dist/types/vite/index.d.ts +11 -0
- package/source/external/dreamlandjs/dist/util.d.ts +29 -0
- package/source/external/dreamlandjs/dist/util.js +2 -0
- package/source/external/dreamlandjs/dist/util.js.map +1 -0
- package/source/external/dreamlandjs/dist/vite.d.ts +19 -0
- package/source/external/dreamlandjs/dist/vite.js +2 -0
- package/source/external/dreamlandjs/dist/vite.js.map +1 -0
- package/source/external/dreamlandjs/package.json +101 -0
- package/source/external/dreamlandjs/rollup.config.ts +302 -0
- package/source/external/dreamlandjs/rollup.plugins.ts +1134 -0
- package/source/external/dreamlandjs/src/core/consts.d.ts +16 -0
- package/source/external/dreamlandjs/src/core/consts.js +18 -0
- package/source/external/dreamlandjs/src/core/css/index.ts +111 -0
- package/source/external/dreamlandjs/src/core/css/selectorParser.ts +313 -0
- package/source/external/dreamlandjs/src/core/delegate.ts +28 -0
- package/source/external/dreamlandjs/src/core/index.ts +31 -0
- package/source/external/dreamlandjs/src/core/jsx/child.ts +91 -0
- package/source/external/dreamlandjs/src/core/jsx/definitions.ts +125 -0
- package/source/external/dreamlandjs/src/core/jsx/dom.ts +49 -0
- package/source/external/dreamlandjs/src/core/jsx/index.ts +289 -0
- package/source/external/dreamlandjs/src/core/state/index.ts +1 -0
- package/source/external/dreamlandjs/src/core/state/pointers.ts +310 -0
- package/source/external/dreamlandjs/src/core/state/state.ts +112 -0
- package/source/external/dreamlandjs/src/core/state/use.ts +82 -0
- package/source/external/dreamlandjs/src/core/utils.ts +48 -0
- package/source/external/dreamlandjs/src/js-runtime/index.ts +4 -0
- package/source/external/dreamlandjs/src/jsx-runtime/index.ts +3 -0
- package/source/external/dreamlandjs/src/motion/index.ts +156 -0
- package/source/external/dreamlandjs/src/router/index.tsx +394 -0
- package/source/external/dreamlandjs/src/router/tsconfig.json +9 -0
- package/source/external/dreamlandjs/src/ssr/client/index.ts +193 -0
- package/source/external/dreamlandjs/src/ssr/common/consts.ts +5 -0
- package/source/external/dreamlandjs/src/ssr/common/serialize.ts +115 -0
- package/source/external/dreamlandjs/src/ssr/common/types.ts +28 -0
- package/source/external/dreamlandjs/src/ssr/hybrid/index.ts +144 -0
- package/source/external/dreamlandjs/src/ssr/server/index.ts +157 -0
- package/source/external/dreamlandjs/src/ssr/server/tsconfig.json +7 -0
- package/source/external/dreamlandjs/src/ssr/server/vdom.ts +285 -0
- package/source/external/dreamlandjs/src/util/index.ts +10 -0
- package/source/external/dreamlandjs/src/util/store.ts +134 -0
- package/source/external/dreamlandjs/src/vite/css-minifier.ts +222 -0
- package/source/external/dreamlandjs/src/vite/index.ts +60 -0
- package/source/external/dreamlandjs/src/vite/tsconfig.json +7 -0
- package/source/external/dreamlandjs/tsconfig.json +15 -0
- package/source/package.json +48 -0
- package/source/packages/adrift-protocol/package.json +31 -0
- package/source/packages/adrift-protocol/src/index.ts +348 -0
- package/source/packages/adrift-protocol/tsconfig.json +18 -0
- package/source/packages/cdp/LICENSE +21 -0
- package/source/packages/cdp/README.md +47 -0
- package/source/packages/cdp/dist/chobitsu.js +2 -0
- package/source/packages/cdp/dist/chobitsu.js.map +1 -0
- package/source/packages/cdp/package.json +73 -0
- package/source/packages/cdp/script/build.js +15 -0
- package/source/packages/cdp/src/Chobitsu.ts +110 -0
- package/source/packages/cdp/src/domains/CSS.ts +378 -0
- package/source/packages/cdp/src/domains/CacheStorage.ts +8 -0
- package/source/packages/cdp/src/domains/DOM.ts +487 -0
- package/source/packages/cdp/src/domains/DOMDebugger.ts +109 -0
- package/source/packages/cdp/src/domains/DOMStorage.ts +122 -0
- package/source/packages/cdp/src/domains/Debugger.ts +25 -0
- package/source/packages/cdp/src/domains/IndexedDB.ts +207 -0
- package/source/packages/cdp/src/domains/Input.ts +177 -0
- package/source/packages/cdp/src/domains/Network.ts +251 -0
- package/source/packages/cdp/src/domains/Overlay.ts +230 -0
- package/source/packages/cdp/src/domains/Page.ts +296 -0
- package/source/packages/cdp/src/domains/Runtime.ts +273 -0
- package/source/packages/cdp/src/domains/Storage.ts +71 -0
- package/source/packages/cdp/src/index.d.ts +8 -0
- package/source/packages/cdp/src/index.ts +153 -0
- package/source/packages/cdp/src/lib/connector.ts +15 -0
- package/source/packages/cdp/src/lib/constants.ts +1 -0
- package/source/packages/cdp/src/lib/evaluate.ts +59 -0
- package/source/packages/cdp/src/lib/mutationObserver.ts +39 -0
- package/source/packages/cdp/src/lib/nodeManager.ts +142 -0
- package/source/packages/cdp/src/lib/objManager.ts +422 -0
- package/source/packages/cdp/src/lib/request.ts +313 -0
- package/source/packages/cdp/src/lib/resources.ts +59 -0
- package/source/packages/cdp/src/lib/scriptMananger.ts +62 -0
- package/source/packages/cdp/src/lib/stylesheet.ts +146 -0
- package/source/packages/cdp/src/lib/util.ts +105 -0
- package/source/packages/cdp/tsconfig.json +16 -0
- package/source/packages/cdp/webpack.config.js +48 -0
- package/source/packages/chrome/index.html +17 -0
- package/source/packages/chrome/package.json +41 -0
- package/source/packages/chrome/public/ROXXIE_NETWORK.md +22 -0
- package/source/packages/chrome/public/controller.sw.js +273 -0
- package/source/packages/chrome/public/defaultfavicon.png +0 -0
- package/source/packages/chrome/public/icon.png +0 -0
- package/source/packages/chrome/public/localcontrollersw.js +7 -0
- package/source/packages/chrome/public/roxxie-icon.svg +12 -0
- package/source/packages/chrome/public/roxxie-network.json +13 -0
- package/source/packages/chrome/public/sw.js +6 -0
- package/source/packages/chrome/src/App.tsx +269 -0
- package/source/packages/chrome/src/CDP.ts +285 -0
- package/source/packages/chrome/src/Tab/History.ts +186 -0
- package/source/packages/chrome/src/Tab/Tab.tsx +219 -0
- package/source/packages/chrome/src/Tab/screenshot.ts +66 -0
- package/source/packages/chrome/src/Tab/serialize.ts +221 -0
- package/source/packages/chrome/src/adblock/AdBlockPlugin.test.ts +159 -0
- package/source/packages/chrome/src/adblock/AdBlockPlugin.ts +232 -0
- package/source/packages/chrome/src/adblock/AdBlockService.test.ts +148 -0
- package/source/packages/chrome/src/adblock/AdBlockService.ts +166 -0
- package/source/packages/chrome/src/adblock/NOTICE.md +14 -0
- package/source/packages/chrome/src/adblock/assets/filters.bin +0 -0
- package/source/packages/chrome/src/adblock/index.ts +18 -0
- package/source/packages/chrome/src/assets/favicon.ts +4 -0
- package/source/packages/chrome/src/components/BookmarkPopup.tsx +101 -0
- package/source/packages/chrome/src/components/BookmarksStrip.tsx +150 -0
- package/source/packages/chrome/src/components/Button.tsx +99 -0
- package/source/packages/chrome/src/components/Checkbox.tsx +89 -0
- package/source/packages/chrome/src/components/DownloadsPopup.tsx +230 -0
- package/source/packages/chrome/src/components/Favicon.tsx +65 -0
- package/source/packages/chrome/src/components/Icon.tsx +29 -0
- package/source/packages/chrome/src/components/Input.tsx +82 -0
- package/source/packages/chrome/src/components/Menu.tsx +287 -0
- package/source/packages/chrome/src/components/Omnibar/BookmarkButton.tsx +73 -0
- package/source/packages/chrome/src/components/Omnibar/CircularProgress.tsx +83 -0
- package/source/packages/chrome/src/components/Omnibar/Omnibar.tsx +455 -0
- package/source/packages/chrome/src/components/Omnibar/OmnibarButton.tsx +48 -0
- package/source/packages/chrome/src/components/Omnibar/Omnibox.tsx +466 -0
- package/source/packages/chrome/src/components/Omnibar/SiteOptionsButton.tsx +52 -0
- package/source/packages/chrome/src/components/Omnibar/Suggestion.tsx +186 -0
- package/source/packages/chrome/src/components/Omnibar/UrlInput.tsx +198 -0
- package/source/packages/chrome/src/components/Omnibar/suggestions.ts +468 -0
- package/source/packages/chrome/src/components/Omnibar/utils.ts +11 -0
- package/source/packages/chrome/src/components/ReportBrokenSiteModal.tsx +279 -0
- package/source/packages/chrome/src/components/Shell.tsx +191 -0
- package/source/packages/chrome/src/components/SiteInformationPopup.tsx +96 -0
- package/source/packages/chrome/src/components/SmallIconButton.tsx +36 -0
- package/source/packages/chrome/src/components/StartScreen.tsx +386 -0
- package/source/packages/chrome/src/components/TabStrip/DragTab.tsx +546 -0
- package/source/packages/chrome/src/components/TabStrip/Sidebar.tsx +820 -0
- package/source/packages/chrome/src/components/TabStrip/TabHoverCard.tsx +87 -0
- package/source/packages/chrome/src/components/TabStrip/TabStrip.tsx +510 -0
- package/source/packages/chrome/src/components/TopSiteButton.tsx +234 -0
- package/source/packages/chrome/src/consts.ts +3 -0
- package/source/packages/chrome/src/icons.ts +70 -0
- package/source/packages/chrome/src/index.ts +168 -0
- package/source/packages/chrome/src/migrations/0-from-legacy.ts +6 -0
- package/source/packages/chrome/src/migrations/1-vertical-tab-settings.ts +15 -0
- package/source/packages/chrome/src/migrations/index.ts +42 -0
- package/source/packages/chrome/src/pages/AboutPage.tsx +37 -0
- package/source/packages/chrome/src/pages/DownloadsPage.tsx +133 -0
- package/source/packages/chrome/src/pages/HistoryPage.tsx +99 -0
- package/source/packages/chrome/src/pages/NewTabPage.tsx +264 -0
- package/source/packages/chrome/src/pages/PlaygroundPage.tsx +43 -0
- package/source/packages/chrome/src/pages/SettingsPage.tsx +1931 -0
- package/source/packages/chrome/src/proxy/Controller.ts +331 -0
- package/source/packages/chrome/src/proxy/ProxyFrame.ts +26 -0
- package/source/packages/chrome/src/proxy/cache.ts +487 -0
- package/source/packages/chrome/src/proxy/codec.ts +11 -0
- package/source/packages/chrome/src/proxy/contextitems.ts +180 -0
- package/source/packages/chrome/src/proxy/index.ts +5 -0
- package/source/packages/chrome/src/proxy/roxxie.ts +85 -0
- package/source/packages/chrome/src/proxy/scramjet.ts +642 -0
- package/source/packages/chrome/src/reset.css +124 -0
- package/source/packages/chrome/src/runtime-base.ts +16 -0
- package/source/packages/chrome/src/sentry.tsx +45 -0
- package/source/packages/chrome/src/services/DownloadsService.ts +136 -0
- package/source/packages/chrome/src/services/FaviconService.ts +161 -0
- package/source/packages/chrome/src/services/KVWrapper.ts +169 -0
- package/source/packages/chrome/src/services/ProfileService.ts +94 -0
- package/source/packages/chrome/src/services/Service.ts +10 -0
- package/source/packages/chrome/src/services/SettingsService.ts +108 -0
- package/source/packages/chrome/src/services/TabsService.ts +161 -0
- package/source/packages/chrome/src/startup.test.ts +129 -0
- package/source/packages/chrome/src/startup.ts +161 -0
- package/source/packages/chrome/src/style.css +229 -0
- package/source/packages/chrome/src/themes.ts +756 -0
- package/source/packages/chrome/src/util/StatefulClass.ts +31 -0
- package/source/packages/chrome/src/util/index.ts +74 -0
- package/source/packages/chrome/src/util/memoize.ts +13 -0
- package/source/packages/chrome/src/vite-env.d.ts +16 -0
- package/source/packages/chrome/tsconfig.json +30 -0
- package/source/packages/chrome/vite.config.ts +47 -0
- package/source/packages/inject/package.json +20 -0
- package/source/packages/inject/src/context.ts +194 -0
- package/source/packages/inject/src/emulators/alwaysLastBubble.ts +168 -0
- package/source/packages/inject/src/emulators/anchors.ts +55 -0
- package/source/packages/inject/src/emulators/contextmenu.ts +46 -0
- package/source/packages/inject/src/emulators/history.ts +51 -0
- package/source/packages/inject/src/emulators/titlewatcher.ts +42 -0
- package/source/packages/inject/src/emulators/windowopen.ts +134 -0
- package/source/packages/inject/src/errorpage/errorpage.css +234 -0
- package/source/packages/inject/src/errorpage/errorpage.html +29 -0
- package/source/packages/inject/src/errorpage/errorpage.ts +76 -0
- package/source/packages/inject/src/index.ts +62 -0
- package/source/packages/inject/src/transport.ts +97 -0
- package/source/packages/inject/src/types.d.ts +136 -0
- package/source/packages/roxxie-transport/package.json +36 -0
- package/source/packages/roxxie-transport/src/binary.ts +398 -0
- package/source/packages/roxxie-transport/src/config.ts +254 -0
- package/source/packages/roxxie-transport/src/connection.ts +767 -0
- package/source/packages/roxxie-transport/src/index.ts +5 -0
- package/source/packages/roxxie-transport/src/tracker.ts +651 -0
- package/source/packages/roxxie-transport/src/transport.ts +414 -0
- package/source/packages/roxxie-transport/tsconfig.json +18 -0
- package/source/packages/scramjet/packages/controller/package.json +37 -0
- package/source/packages/scramjet/packages/controller/src/index.ts +861 -0
- package/source/packages/scramjet/packages/controller/src/inject.ts +365 -0
- package/source/packages/scramjet/packages/controller/src/sw.ts +231 -0
- package/source/packages/scramjet/packages/controller/src/symbols.ts +1 -0
- package/source/packages/scramjet/packages/controller/src/types.d.ts +140 -0
- package/source/packages/scramjet/packages/controller/src/typesEntry.ts +6 -0
- package/source/packages/scramjet/packages/controller/src/version.ts +30 -0
- package/source/packages/scramjet/packages/controller/tsconfig.json +24 -0
- package/source/packages/scramjet/packages/core/dist/scramjet-external.mjs +57 -0
- package/source/packages/scramjet/packages/core/dist/scramjet.js +13599 -0
- package/source/packages/scramjet/packages/core/dist/scramjet.js.map +1 -0
- package/source/packages/scramjet/packages/core/dist/scramjet.mjs +13649 -0
- package/source/packages/scramjet/packages/core/dist/scramjet.mjs.map +1 -0
- package/source/packages/scramjet/packages/core/dist/scramjet.wasm +0 -0
- package/source/packages/scramjet/packages/core/dist/scramjet_bundled.js +13601 -0
- package/source/packages/scramjet/packages/core/dist/scramjet_bundled.js.map +1 -0
- package/source/packages/scramjet/packages/core/dist/scramjet_bundled.mjs +13651 -0
- package/source/packages/scramjet/packages/core/dist/scramjet_bundled.mjs.map +1 -0
- package/source/packages/scramjet/packages/core/dist/temp-types-build/index.js +23 -0
- package/source/packages/scramjet/packages/core/dist/temp-types-build/index.js.map +1 -0
- package/source/packages/scramjet/packages/core/dist/types/Tap.d.ts +39 -0
- package/source/packages/scramjet/packages/core/dist/types/client/client.d.ts +115 -0
- package/source/packages/scramjet/packages/core/dist/types/client/entry.d.ts +5 -0
- package/source/packages/scramjet/packages/core/dist/types/client/events.d.ts +10 -0
- package/source/packages/scramjet/packages/core/dist/types/client/helpers.d.ts +1 -0
- package/source/packages/scramjet/packages/core/dist/types/client/index.d.ts +7 -0
- package/source/packages/scramjet/packages/core/dist/types/client/location.d.ts +2 -0
- package/source/packages/scramjet/packages/core/dist/types/client/shared/eval.d.ts +3 -0
- package/source/packages/scramjet/packages/core/dist/types/client/shared/sourcemaps.d.ts +19 -0
- package/source/packages/scramjet/packages/core/dist/types/client/shared/wrap.d.ts +4 -0
- package/source/packages/scramjet/packages/core/dist/types/client/singletonbox.d.ts +18 -0
- package/source/packages/scramjet/packages/core/dist/types/fetch/body.d.ts +3 -0
- package/source/packages/scramjet/packages/core/dist/types/fetch/fetch.d.ts +7 -0
- package/source/packages/scramjet/packages/core/dist/types/fetch/headers.d.ts +19 -0
- package/source/packages/scramjet/packages/core/dist/types/fetch/index.d.ts +128 -0
- package/source/packages/scramjet/packages/core/dist/types/fetch/parse.d.ts +23 -0
- package/source/packages/scramjet/packages/core/dist/types/fetch/util.d.ts +7 -0
- package/source/packages/scramjet/packages/core/dist/types/index.d.ts +12 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/cookie.d.ts +26 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/headers.d.ts +13 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/htmlRules.d.ts +6 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/index.d.ts +50 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/mime.d.ts +53 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/refresh.d.ts +7 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/css.d.ts +4 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/html.d.ts +33 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/index.d.ts +6 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/js.d.ts +11 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/url.d.ts +24 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/wasm.d.ts +7 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/worker.d.ts +3 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/set-cookie-parser.d.ts +20 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/snapshot.d.ts +186 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/sniffEncoding.d.ts +65 -0
- package/source/packages/scramjet/packages/core/dist/types/shared/util.d.ts +2 -0
- package/source/packages/scramjet/packages/core/dist/types/symbols.d.ts +6 -0
- package/source/packages/scramjet/packages/core/dist/types/types.d.ts +60 -0
- package/source/packages/scramjet/packages/core/dist/types/typesEntry.d.ts +5 -0
- package/source/packages/scramjet/packages/core/lib/index.cjs +7 -0
- package/source/packages/scramjet/packages/core/lib/index.d.ts +8 -0
- package/source/packages/scramjet/packages/core/package.json +69 -0
- package/source/packages/scramjet/packages/core/rewriter/Cargo.lock +1985 -0
- package/source/packages/scramjet/packages/core/rewriter/Cargo.toml +20 -0
- package/source/packages/scramjet/packages/core/rewriter/coverage-macro/Cargo.toml +15 -0
- package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/analyze.rs +1118 -0
- package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/ast_table.rs +927 -0
- package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/helper_index.rs +556 -0
- package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/lib.rs +455 -0
- package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/reachability.rs +85 -0
- package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/templates.rs +192 -0
- package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/witness.rs +597 -0
- package/source/packages/scramjet/packages/core/rewriter/js/Cargo.toml +18 -0
- package/source/packages/scramjet/packages/core/rewriter/js/src/cfg.rs +45 -0
- package/source/packages/scramjet/packages/core/rewriter/js/src/changes.rs +379 -0
- package/source/packages/scramjet/packages/core/rewriter/js/src/lib.rs +171 -0
- package/source/packages/scramjet/packages/core/rewriter/js/src/rewrite.rs +290 -0
- package/source/packages/scramjet/packages/core/rewriter/js/src/visitor.rs +967 -0
- package/source/packages/scramjet/packages/core/rewriter/native/Cargo.toml +22 -0
- package/source/packages/scramjet/packages/core/rewriter/native/src/main.rs +166 -0
- package/source/packages/scramjet/packages/core/rewriter/native/src/rewriter.rs +161 -0
- package/source/packages/scramjet/packages/core/rewriter/native/src/test_runner.rs +156 -0
- package/source/packages/scramjet/packages/core/rewriter/rust-toolchain.toml +5 -0
- package/source/packages/scramjet/packages/core/rewriter/rustfmt.toml +2 -0
- package/source/packages/scramjet/packages/core/rewriter/transform/Cargo.toml +16 -0
- package/source/packages/scramjet/packages/core/rewriter/transform/src/lib.rs +242 -0
- package/source/packages/scramjet/packages/core/rewriter/transform/src/transform.rs +123 -0
- package/source/packages/scramjet/packages/core/rewriter/wasm/Cargo.toml +22 -0
- package/source/packages/scramjet/packages/core/rewriter/wasm/build.sh +128 -0
- package/source/packages/scramjet/packages/core/rewriter/wasm/src/error.rs +56 -0
- package/source/packages/scramjet/packages/core/rewriter/wasm/src/jsr.rs +125 -0
- package/source/packages/scramjet/packages/core/rewriter/wasm/src/lib.rs +144 -0
- package/source/packages/scramjet/packages/core/src/Tap.ts +166 -0
- package/source/packages/scramjet/packages/core/src/client/client.ts +916 -0
- package/source/packages/scramjet/packages/core/src/client/dom/attr.ts +94 -0
- package/source/packages/scramjet/packages/core/src/client/dom/beacon.ts +11 -0
- package/source/packages/scramjet/packages/core/src/client/dom/cookie.ts +21 -0
- package/source/packages/scramjet/packages/core/src/client/dom/css.ts +106 -0
- package/source/packages/scramjet/packages/core/src/client/dom/document.ts +140 -0
- package/source/packages/scramjet/packages/core/src/client/dom/element.ts +783 -0
- package/source/packages/scramjet/packages/core/src/client/dom/fontface.ts +11 -0
- package/source/packages/scramjet/packages/core/src/client/dom/fragments.ts +32 -0
- package/source/packages/scramjet/packages/core/src/client/dom/history.ts +35 -0
- package/source/packages/scramjet/packages/core/src/client/dom/open.ts +59 -0
- package/source/packages/scramjet/packages/core/src/client/dom/origin.ts +13 -0
- package/source/packages/scramjet/packages/core/src/client/dom/performance.ts +50 -0
- package/source/packages/scramjet/packages/core/src/client/dom/protocol.ts +17 -0
- package/source/packages/scramjet/packages/core/src/client/dom/storage.ts +107 -0
- package/source/packages/scramjet/packages/core/src/client/entry.ts +12 -0
- package/source/packages/scramjet/packages/core/src/client/events.ts +10 -0
- package/source/packages/scramjet/packages/core/src/client/helpers.ts +7 -0
- package/source/packages/scramjet/packages/core/src/client/index.ts +7 -0
- package/source/packages/scramjet/packages/core/src/client/location.ts +139 -0
- package/source/packages/scramjet/packages/core/src/client/shared/antiantidebugger.ts +20 -0
- package/source/packages/scramjet/packages/core/src/client/shared/blob.ts +35 -0
- package/source/packages/scramjet/packages/core/src/client/shared/caches.ts +31 -0
- package/source/packages/scramjet/packages/core/src/client/shared/chrome.ts +90 -0
- package/source/packages/scramjet/packages/core/src/client/shared/err.ts +55 -0
- package/source/packages/scramjet/packages/core/src/client/shared/error.ts +42 -0
- package/source/packages/scramjet/packages/core/src/client/shared/eval.ts +40 -0
- package/source/packages/scramjet/packages/core/src/client/shared/event.ts +215 -0
- package/source/packages/scramjet/packages/core/src/client/shared/function.ts +59 -0
- package/source/packages/scramjet/packages/core/src/client/shared/import.ts +46 -0
- package/source/packages/scramjet/packages/core/src/client/shared/indexeddb.ts +18 -0
- package/source/packages/scramjet/packages/core/src/client/shared/opfs.ts +27 -0
- package/source/packages/scramjet/packages/core/src/client/shared/postmessage.ts +113 -0
- package/source/packages/scramjet/packages/core/src/client/shared/realm.ts +26 -0
- package/source/packages/scramjet/packages/core/src/client/shared/requests/eventsource.ts +17 -0
- package/source/packages/scramjet/packages/core/src/client/shared/requests/fetch.ts +67 -0
- package/source/packages/scramjet/packages/core/src/client/shared/requests/websocket.ts +389 -0
- package/source/packages/scramjet/packages/core/src/client/shared/requests/xmlhttprequest.ts +163 -0
- package/source/packages/scramjet/packages/core/src/client/shared/settimeout.ts +20 -0
- package/source/packages/scramjet/packages/core/src/client/shared/sourcemaps.ts +203 -0
- package/source/packages/scramjet/packages/core/src/client/shared/worker.ts +72 -0
- package/source/packages/scramjet/packages/core/src/client/shared/wrap.ts +197 -0
- package/source/packages/scramjet/packages/core/src/client/singletonbox.ts +52 -0
- package/source/packages/scramjet/packages/core/src/client/worker/importScripts.ts +13 -0
- package/source/packages/scramjet/packages/core/src/fetch/body.ts +93 -0
- package/source/packages/scramjet/packages/core/src/fetch/fetch.ts +323 -0
- package/source/packages/scramjet/packages/core/src/fetch/headers.ts +528 -0
- package/source/packages/scramjet/packages/core/src/fetch/index.ts +198 -0
- package/source/packages/scramjet/packages/core/src/fetch/parse.ts +149 -0
- package/source/packages/scramjet/packages/core/src/fetch/util.ts +81 -0
- package/source/packages/scramjet/packages/core/src/global.d.ts +32 -0
- package/source/packages/scramjet/packages/core/src/index.ts +78 -0
- package/source/packages/scramjet/packages/core/src/log.ts +117 -0
- package/source/packages/scramjet/packages/core/src/shared/cookie.ts +199 -0
- package/source/packages/scramjet/packages/core/src/shared/headers.ts +76 -0
- package/source/packages/scramjet/packages/core/src/shared/htmlRules.ts +154 -0
- package/source/packages/scramjet/packages/core/src/shared/index.ts +79 -0
- package/source/packages/scramjet/packages/core/src/shared/mime.ts +234 -0
- package/source/packages/scramjet/packages/core/src/shared/refresh.ts +164 -0
- package/source/packages/scramjet/packages/core/src/shared/rewriters/css.ts +67 -0
- package/source/packages/scramjet/packages/core/src/shared/rewriters/html.ts +603 -0
- package/source/packages/scramjet/packages/core/src/shared/rewriters/index.ts +6 -0
- package/source/packages/scramjet/packages/core/src/shared/rewriters/js.ts +158 -0
- package/source/packages/scramjet/packages/core/src/shared/rewriters/url.ts +248 -0
- package/source/packages/scramjet/packages/core/src/shared/rewriters/wasm.ts +58 -0
- package/source/packages/scramjet/packages/core/src/shared/rewriters/worker.ts +37 -0
- package/source/packages/scramjet/packages/core/src/shared/set-cookie-parser.ts +195 -0
- package/source/packages/scramjet/packages/core/src/shared/snapshot.ts +245 -0
- package/source/packages/scramjet/packages/core/src/shared/sniffEncoding.ts +1061 -0
- package/source/packages/scramjet/packages/core/src/shared/util.ts +35 -0
- package/source/packages/scramjet/packages/core/src/symbols.ts +9 -0
- package/source/packages/scramjet/packages/core/src/sync.ts +63 -0
- package/source/packages/scramjet/packages/core/src/types.ts +66 -0
- package/source/packages/scramjet/packages/core/src/typesEntry.ts +6 -0
- package/source/packages/scramjet/packages/core/tsconfig.json +21 -0
- package/source/packages/scramjet/packages/rpc/index.ts +100 -0
- package/source/packages/scramjet/packages/rpc/package.json +7 -0
- package/source/packages/scramjet/packages/utils/package.json +39 -0
- package/source/packages/scramjet/packages/utils/src/alwaysLastBubble.ts +172 -0
- package/source/packages/scramjet/packages/utils/src/catch-escaped-links.ts +34 -0
- package/source/packages/scramjet/packages/utils/src/event-handler-plugin.ts +86 -0
- package/source/packages/scramjet/packages/utils/src/global.d.ts +8 -0
- package/source/packages/scramjet/packages/utils/src/http-cache-plugin.ts +475 -0
- package/source/packages/scramjet/packages/utils/src/index.ts +26 -0
- package/source/packages/scramjet/packages/utils/src/link-handler-plugin.ts +75 -0
- package/source/packages/scramjet/packages/utils/src/typesEntry.ts +5 -0
- package/source/packages/scramjet/packages/utils/src/url-watcher.ts +37 -0
- package/source/packages/scramjet/packages/utils/src/version.ts +40 -0
- package/source/packages/scramjet/packages/utils/tsconfig.json +11 -0
- package/source/packages/scramjet/patches/htmlparser2@12.0.0.patch +124 -0
- package/source/packages/scramjet/rspack.config.ts +613 -0
- package/source/packages/scramjet/tsconfig.json +11 -0
- package/source/packages/tracker-protocol/package.json +31 -0
- package/source/packages/tracker-protocol/src/index.ts +745 -0
- package/source/packages/tracker-protocol/tsconfig.json +18 -0
- package/source/pnpm-lock.yaml +12018 -0
- package/source/pnpm-workspace.yaml +31 -0
- package/source/rspack.config.ts +103 -0
- package/source/scripts/update-adblock-assets.mjs +164 -0
- package/third_party/filter-lists/LICENSE-CC-BY-SA-3.0.txt +359 -0
- package/third_party/filter-lists/LICENSE-GPL-3.0.txt +674 -0
- package/third_party/filter-lists/LICENSE-MPL-2.0.txt +375 -0
- package/third_party/filter-lists/README.md +24 -0
- package/third_party/filter-lists/easylist.txt +83088 -0
- package/third_party/filter-lists/easyprivacy.txt +56361 -0
- package/third_party/filter-lists/manifest.json +56 -0
- package/third_party/filter-lists/ublock-filters.txt +10937 -0
- package/third_party/filter-lists/ublock-privacy.txt +3209 -0
- package/third_party/filter-lists/ublock-resources.json +1852 -0
- package/third_party/filter-lists/ublock-unbreak.txt +6026 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Array_from,
|
|
3
|
+
btoa,
|
|
4
|
+
TextEncoder_encode,
|
|
5
|
+
String_fromCharCode,
|
|
6
|
+
String_fromCodePoint,
|
|
7
|
+
} from "@/shared/snapshot";
|
|
8
|
+
|
|
9
|
+
function bytesToBase64Fallback(bytes: Uint8Array): string {
|
|
10
|
+
const binString = Array_from(bytes, (byte) =>
|
|
11
|
+
String_fromCodePoint(byte)
|
|
12
|
+
).join("");
|
|
13
|
+
|
|
14
|
+
return btoa(binString);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const bytesToBase64Native: ((this: Uint8Array) => string) | undefined = (
|
|
18
|
+
Uint8Array.prototype as any
|
|
19
|
+
).toBase64;
|
|
20
|
+
|
|
21
|
+
export const bytesToBase64: (bytes: Uint8Array) => string =
|
|
22
|
+
typeof bytesToBase64Native === "function"
|
|
23
|
+
? (bytes) => bytesToBase64Native.call(bytes)
|
|
24
|
+
: bytesToBase64Fallback;
|
|
25
|
+
|
|
26
|
+
export function base64Encode(text: string) {
|
|
27
|
+
return btoa(
|
|
28
|
+
TextEncoder_encode(text)
|
|
29
|
+
.reduce(
|
|
30
|
+
(data, byte) => (data.push(String_fromCharCode(byte)), data),
|
|
31
|
+
[] as any
|
|
32
|
+
)
|
|
33
|
+
.join("")
|
|
34
|
+
);
|
|
35
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/* eslint-disable scramjet-core/no-globals */
|
|
2
|
+
|
|
3
|
+
addEventListener(
|
|
4
|
+
"message",
|
|
5
|
+
({
|
|
6
|
+
data: {
|
|
7
|
+
sab,
|
|
8
|
+
args: [method, url, _, username, password],
|
|
9
|
+
body,
|
|
10
|
+
headers,
|
|
11
|
+
},
|
|
12
|
+
}) => {
|
|
13
|
+
const view = new DataView(sab);
|
|
14
|
+
const u8view = new Uint8Array(sab);
|
|
15
|
+
|
|
16
|
+
const xhr = new XMLHttpRequest();
|
|
17
|
+
xhr.responseType = "arraybuffer";
|
|
18
|
+
|
|
19
|
+
// force async since we need it to resolve to the sw
|
|
20
|
+
xhr.open(method, url, true, username, password);
|
|
21
|
+
|
|
22
|
+
if (headers)
|
|
23
|
+
for (const [k, v] of Object.entries(headers)) {
|
|
24
|
+
xhr.setRequestHeader(k, v as string);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
xhr.send(body);
|
|
28
|
+
|
|
29
|
+
xhr.onload = () => {
|
|
30
|
+
let cursor = 1; // first byte is the lock
|
|
31
|
+
|
|
32
|
+
view.setUint16(cursor, xhr.status);
|
|
33
|
+
cursor += 2;
|
|
34
|
+
|
|
35
|
+
// next write the header string
|
|
36
|
+
const headers = xhr.getAllResponseHeaders();
|
|
37
|
+
view.setUint32(cursor, headers.length);
|
|
38
|
+
cursor += 4;
|
|
39
|
+
|
|
40
|
+
if (sab.byteLength < cursor + headers.length)
|
|
41
|
+
sab.grow(cursor + headers.length);
|
|
42
|
+
u8view.set(new TextEncoder().encode(headers), cursor);
|
|
43
|
+
cursor += headers.length;
|
|
44
|
+
|
|
45
|
+
view.setUint32(cursor, xhr.response.byteLength);
|
|
46
|
+
cursor += 4;
|
|
47
|
+
|
|
48
|
+
if (sab.byteLength < cursor + xhr.response.byteLength)
|
|
49
|
+
sab.grow(cursor + xhr.response.byteLength);
|
|
50
|
+
u8view.set(new Uint8Array(xhr.response), cursor);
|
|
51
|
+
|
|
52
|
+
// release the lock, main thread will stop spinning now
|
|
53
|
+
view.setUint8(0, 1);
|
|
54
|
+
};
|
|
55
|
+
xhr.ontimeout =
|
|
56
|
+
xhr.onerror =
|
|
57
|
+
xhr.onabort =
|
|
58
|
+
() => {
|
|
59
|
+
console.error("xhr failed");
|
|
60
|
+
view.setUint8(0, 1);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
);
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version information for the current Scramjet build.
|
|
3
|
+
* Contains both the semantic version string and the git commit hash for build identification.
|
|
4
|
+
*/
|
|
5
|
+
export interface ScramjetVersionInfo {
|
|
6
|
+
/** The semantic version */
|
|
7
|
+
version: string;
|
|
8
|
+
/** The git commit hash that this build was created from */
|
|
9
|
+
build: string;
|
|
10
|
+
/** The date of the build */
|
|
11
|
+
date: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Scramjet Feature Flags, configured at build time
|
|
16
|
+
*/
|
|
17
|
+
export type ScramjetFlags = {
|
|
18
|
+
syncxhr: boolean;
|
|
19
|
+
disableComputedWrap: boolean;
|
|
20
|
+
rewriterLogs: boolean;
|
|
21
|
+
captureErrors: boolean;
|
|
22
|
+
cleanErrors: boolean;
|
|
23
|
+
scramitize: boolean;
|
|
24
|
+
sourcemaps: boolean;
|
|
25
|
+
destructureRewrites: boolean;
|
|
26
|
+
allowInvalidJs: boolean;
|
|
27
|
+
allowFailedIntercepts: boolean;
|
|
28
|
+
debugTrampolines: boolean;
|
|
29
|
+
debugSourceURL: boolean;
|
|
30
|
+
encapsulateWorkers: boolean;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export interface ScramjetConfig {
|
|
34
|
+
globals: {
|
|
35
|
+
wrapfn: string;
|
|
36
|
+
wrappropertybase: string;
|
|
37
|
+
wrappropertyfn: string;
|
|
38
|
+
cleanrestfn: string;
|
|
39
|
+
importfn: string;
|
|
40
|
+
rewritefn: string;
|
|
41
|
+
metafn: string;
|
|
42
|
+
wrappostmessagefn: string;
|
|
43
|
+
pushsourcemapfn: string;
|
|
44
|
+
trysetfn: string;
|
|
45
|
+
templocid: string;
|
|
46
|
+
tempunusedid: string;
|
|
47
|
+
};
|
|
48
|
+
flags: ScramjetFlags;
|
|
49
|
+
siteFlags: Record<string, Partial<ScramjetFlags>>;
|
|
50
|
+
maskedfiles: string[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The config for Scramjet initialization.
|
|
55
|
+
*/
|
|
56
|
+
export interface ScramjetInitConfig
|
|
57
|
+
extends Omit<ScramjetConfig, "codec" | "flags"> {
|
|
58
|
+
flags: Partial<ScramjetFlags>;
|
|
59
|
+
codec: {
|
|
60
|
+
encode: (url: string) => string;
|
|
61
|
+
decode: (url: string) => string;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
//eslint-disable-next-line
|
|
66
|
+
export type AnyFunction = Function;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "esnext",
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"rootDir": "./src",
|
|
6
|
+
"moduleResolution": "Bundler",
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
"declaration": true,
|
|
9
|
+
"declarationDir": "./dist/types",
|
|
10
|
+
"outDir": "./dist/types",
|
|
11
|
+
"emitDeclarationOnly": true,
|
|
12
|
+
"removeComments": false,
|
|
13
|
+
"paths": {
|
|
14
|
+
"@rewriters/*": ["./src/shared/rewriters/*"],
|
|
15
|
+
"@client/*": ["./src/client/*"],
|
|
16
|
+
"@/*": ["./src/*"]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"include": ["src"],
|
|
20
|
+
"exclude": ["node_modules"]
|
|
21
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export type RpcDescription = {
|
|
2
|
+
[method: string]: [args: any, returnType: any] | [args: any] | [];
|
|
3
|
+
};
|
|
4
|
+
|
|
5
|
+
export type MethodsDefinition<Description extends RpcDescription> = {
|
|
6
|
+
[Method in keyof Description]: (
|
|
7
|
+
...args: Description[Method] extends [infer A, ...any[]] ? [A] : []
|
|
8
|
+
) => Description[Method] extends [any, infer R]
|
|
9
|
+
? Promise<[R, Transferable[]]>
|
|
10
|
+
: Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export class RpcHelper<
|
|
14
|
+
Local extends RpcDescription,
|
|
15
|
+
Remote extends RpcDescription,
|
|
16
|
+
> {
|
|
17
|
+
counter: number = 0;
|
|
18
|
+
promiseCallbacks: Map<
|
|
19
|
+
number,
|
|
20
|
+
{ resolve: (value: any) => void; reject: (reason?: any) => void }
|
|
21
|
+
> = new Map();
|
|
22
|
+
constructor(
|
|
23
|
+
private methods: MethodsDefinition<Local>,
|
|
24
|
+
private id: string,
|
|
25
|
+
private sendRaw: (data: any, transfer: Transferable[]) => void
|
|
26
|
+
) {}
|
|
27
|
+
|
|
28
|
+
recieve(data: any) {
|
|
29
|
+
if (data === undefined || data === null || typeof data !== "object") return;
|
|
30
|
+
const dt = data[this.id];
|
|
31
|
+
if (dt === undefined || dt === null || typeof dt !== "object") return;
|
|
32
|
+
|
|
33
|
+
const type = dt.$type;
|
|
34
|
+
|
|
35
|
+
if (type === "response") {
|
|
36
|
+
const token = dt.$token;
|
|
37
|
+
const data = dt.$data;
|
|
38
|
+
const error = dt.$error;
|
|
39
|
+
const cb = this.promiseCallbacks.get(token);
|
|
40
|
+
if (!cb) return;
|
|
41
|
+
this.promiseCallbacks.delete(token);
|
|
42
|
+
if (error !== undefined) {
|
|
43
|
+
cb.reject(new Error(error));
|
|
44
|
+
} else {
|
|
45
|
+
cb.resolve(data);
|
|
46
|
+
}
|
|
47
|
+
} else if (type === "request") {
|
|
48
|
+
const method = dt.$method as keyof Local;
|
|
49
|
+
const args = dt.$args as Local[typeof method][0];
|
|
50
|
+
(this.methods[method] as any)(args)
|
|
51
|
+
.then((r: any) => {
|
|
52
|
+
this.sendRaw(
|
|
53
|
+
{
|
|
54
|
+
[this.id]: {
|
|
55
|
+
$type: "response",
|
|
56
|
+
$token: dt.$token,
|
|
57
|
+
$data: r?.[0],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
r?.[1]
|
|
61
|
+
);
|
|
62
|
+
})
|
|
63
|
+
.catch((err: any) => {
|
|
64
|
+
console.error(err);
|
|
65
|
+
this.sendRaw(
|
|
66
|
+
{
|
|
67
|
+
[this.id]: {
|
|
68
|
+
$type: "response",
|
|
69
|
+
$token: dt.$token,
|
|
70
|
+
$error: err?.toString() || "Unknown error",
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
[]
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
call<Method extends keyof Remote>(
|
|
80
|
+
method: Method,
|
|
81
|
+
args: Remote[Method][0],
|
|
82
|
+
transfer: Transferable[] = []
|
|
83
|
+
): Promise<Remote[Method][1]> {
|
|
84
|
+
const token = this.counter++;
|
|
85
|
+
return new Promise((resolve, reject) => {
|
|
86
|
+
this.promiseCallbacks.set(token, { resolve, reject });
|
|
87
|
+
this.sendRaw(
|
|
88
|
+
{
|
|
89
|
+
[this.id]: {
|
|
90
|
+
$type: "request",
|
|
91
|
+
$method: method,
|
|
92
|
+
$args: args,
|
|
93
|
+
$token: token,
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
transfer
|
|
97
|
+
);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mercuryworkshop/scramjet-utils",
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"description": "Utilities for Scramjet proxy integrations",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"packageManager": "pnpm@10.12.1",
|
|
7
|
+
"license": "AGPL-3.0-only",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/MercuryWorkshop/scramjet.git",
|
|
11
|
+
"directory": "packages/utils"
|
|
12
|
+
},
|
|
13
|
+
"types": "./dist/types/typesEntry.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/types/typesEntry.d.ts",
|
|
17
|
+
"import": "./dist/scramjet-utils.mjs",
|
|
18
|
+
"default": "./dist/scramjet-utils.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "cd ../.. && rspack build --mode production",
|
|
26
|
+
"prepack": "pnpm run build",
|
|
27
|
+
"prepublishOnly": "npx only-allow pnpm",
|
|
28
|
+
"pub": "pnpm publish --no-git-checks --access public"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"@mercuryworkshop/scramjet": "*",
|
|
32
|
+
"@mercuryworkshop/scramjet-controller": "*"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@mercuryworkshop/scramjet": "workspace:*",
|
|
36
|
+
"@mercuryworkshop/scramjet-controller": "workspace:*",
|
|
37
|
+
"@types/serviceworker": "^0.0.197"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import type { ScramjetClient } from "@mercuryworkshop/scramjet";
|
|
2
|
+
|
|
3
|
+
export function setupAlwaysLastBubble(
|
|
4
|
+
client: ScramjetClient,
|
|
5
|
+
whatToCapture: string[]
|
|
6
|
+
) {
|
|
7
|
+
// goal is to override the default behavior of clicking on an <a> link
|
|
8
|
+
// if the link is target=_blank it needs to open in a new browser.js tab instead of a native tab
|
|
9
|
+
// the browser does not provide a neat way of knowing when a link is clicked through
|
|
10
|
+
//
|
|
11
|
+
// so the only solution left is to addEventListener("click") on every single <a> element
|
|
12
|
+
// however, this presents an issue
|
|
13
|
+
// if the page has its *own* event listener, and it calls e.preventDefault(), we need to not open the tab, since we're essentially acting as the new default
|
|
14
|
+
// since events bubble down and can have non trivial control flows, this gets complicated fast
|
|
15
|
+
//
|
|
16
|
+
// the only solution is to register both the first and last event listeners, so that you control the entire call stack
|
|
17
|
+
// registering the first is easy, you just need to call it immediately after creation
|
|
18
|
+
// registering the *last* is extremely difficult
|
|
19
|
+
|
|
20
|
+
type EvtDesc = {
|
|
21
|
+
originalcb: ((e: Event) => void) | EventListenerObject;
|
|
22
|
+
injectafter?: (e: Event) => void;
|
|
23
|
+
type: string;
|
|
24
|
+
};
|
|
25
|
+
let currentlyExecutingDesc: EvtDesc | null = null;
|
|
26
|
+
const eventListeners: Map<EventTarget, EvtDesc[]> = new Map();
|
|
27
|
+
|
|
28
|
+
// start by recording every event registered so that we can rebuild the bubble path later
|
|
29
|
+
client.Proxy("EventTarget.prototype.addEventListener", {
|
|
30
|
+
apply(ctx) {
|
|
31
|
+
const eventName = ctx.args[0] as string;
|
|
32
|
+
const cb = ctx.args[1] as ((e: Event) => void) | EventListenerObject;
|
|
33
|
+
const options = ctx.args[2] as AddEventListenerOptions;
|
|
34
|
+
const target = ctx.this as EventTarget;
|
|
35
|
+
if (!whatToCapture.includes(eventName)) return;
|
|
36
|
+
// capture events don't go through the bubble process so we shouldn't include them
|
|
37
|
+
if (
|
|
38
|
+
(typeof options === "boolean" && options) ||
|
|
39
|
+
(typeof options === "object" && options.capture)
|
|
40
|
+
)
|
|
41
|
+
return;
|
|
42
|
+
|
|
43
|
+
ctx.args[1] = function (...args: any) {
|
|
44
|
+
// will always exist since we set it just below
|
|
45
|
+
const descs = eventListeners.get(target)!;
|
|
46
|
+
// find the one talking about us
|
|
47
|
+
const desc = descs.find((d) => d.originalcb === cb)!;
|
|
48
|
+
|
|
49
|
+
// have a flag for the event that's currently running so that we know where we are in the stack if preventDefault() or stopPropagation() is called
|
|
50
|
+
currentlyExecutingDesc = desc;
|
|
51
|
+
if (typeof cb === "function") {
|
|
52
|
+
Reflect.apply(cb, this, args);
|
|
53
|
+
} else if (typeof cb === "object" && cb !== null && cb.handleEvent) {
|
|
54
|
+
Reflect.apply(cb.handleEvent, cb, args);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (desc.injectafter) {
|
|
58
|
+
desc.injectafter(args[0]);
|
|
59
|
+
delete desc.injectafter;
|
|
60
|
+
}
|
|
61
|
+
currentlyExecutingDesc = null;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const desc: EvtDesc = {
|
|
65
|
+
originalcb: cb,
|
|
66
|
+
type: eventName,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
if (eventListeners.has(target)) {
|
|
70
|
+
eventListeners.get(target)!.push(desc);
|
|
71
|
+
} else {
|
|
72
|
+
eventListeners.set(target, [desc]);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
return function addAlwaysLastEventListener<T extends Event>(
|
|
78
|
+
target: EventTarget,
|
|
79
|
+
eventName: string,
|
|
80
|
+
listener: (e: T) => void
|
|
81
|
+
) {
|
|
82
|
+
// this event will always run before all other ones, since it was registered at injectHistoryEmulation
|
|
83
|
+
// * unless you registered the event before appending to the dom
|
|
84
|
+
// * unless there's something inside of the <a> that has a listener on it
|
|
85
|
+
// * unless there's a capture listener
|
|
86
|
+
// TODO fix those cases
|
|
87
|
+
|
|
88
|
+
const callListener = (e: T) => {
|
|
89
|
+
// this goes into our code, so restore the original methods
|
|
90
|
+
// TODO: we probably shouldnt do it like this
|
|
91
|
+
e.stopPropagation =
|
|
92
|
+
client.natives.store["Event.prototype.stopPropagation"];
|
|
93
|
+
e.stopImmediatePropagation =
|
|
94
|
+
client.natives.store["Event.prototype.stopImmediatePropagation"];
|
|
95
|
+
listener(e);
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
client.natives.call(
|
|
99
|
+
"EventTarget.prototype.addEventListener",
|
|
100
|
+
target,
|
|
101
|
+
eventName,
|
|
102
|
+
(e: T) => {
|
|
103
|
+
let lastlistener;
|
|
104
|
+
const path = e.composedPath();
|
|
105
|
+
|
|
106
|
+
// travel the path, from the <a> all the way to Window
|
|
107
|
+
for (const elm of path) {
|
|
108
|
+
let descriptors = eventListeners.get(elm);
|
|
109
|
+
if (descriptors) {
|
|
110
|
+
descriptors = descriptors.filter((d) => d.type === eventName);
|
|
111
|
+
// last descriptor was last added and will be called last
|
|
112
|
+
lastlistener = descriptors[descriptors.length - 1];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// TODO: if a listener is added to a lower level of the dom inside the listener of a higher level, our lastlistener will not be correct
|
|
117
|
+
if (!lastlistener) {
|
|
118
|
+
// there are no other event listeners! great
|
|
119
|
+
callListener(e);
|
|
120
|
+
} else {
|
|
121
|
+
// we know what the last listener is. run this to inject after it
|
|
122
|
+
lastlistener.injectafter = (e) => {
|
|
123
|
+
callListener(e);
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// except, if stopPropagation is called, it never gets to the lastlistener
|
|
128
|
+
client.RawProxy(e, "stopImmediatePropagation", {
|
|
129
|
+
apply() {
|
|
130
|
+
if (!currentlyExecutingDesc)
|
|
131
|
+
throw new Error(
|
|
132
|
+
"stopImmediatePropagation called but no desc found?"
|
|
133
|
+
);
|
|
134
|
+
// for stopImmediatePropagation this is the last one
|
|
135
|
+
currentlyExecutingDesc.injectafter = (e) => {
|
|
136
|
+
// in case preventDefault is called after stopImmediatePropagation(), wait for the event handler to be done
|
|
137
|
+
callListener(e as T);
|
|
138
|
+
};
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
client.RawProxy(e, "stopPropagation", {
|
|
142
|
+
apply(ctx) {
|
|
143
|
+
if (!currentlyExecutingDesc)
|
|
144
|
+
throw new Error("stopPropagation called but no desc found?");
|
|
145
|
+
// stopPropagation means there might still be more listeners on the same element
|
|
146
|
+
// find whatever the last one is on the this element and then inject after it too
|
|
147
|
+
|
|
148
|
+
const ev = ctx.this as Event;
|
|
149
|
+
if (!ev.target) throw new Error("no target");
|
|
150
|
+
const descs = eventListeners.get(ev.target);
|
|
151
|
+
if (!descs) throw new Error("no descs found in stopPropagation()");
|
|
152
|
+
const idx = descs.indexOf(currentlyExecutingDesc);
|
|
153
|
+
if (idx == -1)
|
|
154
|
+
throw new Error("couldn't find currentlyExecutingDesc");
|
|
155
|
+
const remaining = descs.slice(idx + 1, descs.length);
|
|
156
|
+
if (remaining.length > 0) {
|
|
157
|
+
const last = remaining[remaining.length - 1];
|
|
158
|
+
// finally we have the last in the chain after propagation is cut off
|
|
159
|
+
last.injectafter = (e) => {
|
|
160
|
+
callListener(e as T);
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
);
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export type AddAlwaysLastEventListener = ReturnType<
|
|
171
|
+
typeof setupAlwaysLastBubble
|
|
172
|
+
>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ScramjetHeaders } from "@mercuryworkshop/scramjet";
|
|
2
|
+
import { ManagedPlugin } from "@mercuryworkshop/scramjet-controller";
|
|
3
|
+
import type { Frame } from "@mercuryworkshop/scramjet-controller";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Intercepts top-level navigation requests (triggered by clicking "open in new tab" on a link, or window.open)
|
|
7
|
+
* Without this plugin, they would open without the proxy shell, which is usually undesired.
|
|
8
|
+
* give a callback telling it how to redirect back to the proxy shell.
|
|
9
|
+
*/
|
|
10
|
+
export class CatchEscapedLinksPlugin extends ManagedPlugin {
|
|
11
|
+
constructor(private toLocation: (url: URL) => string | URL) {
|
|
12
|
+
super("catch-escaped-links", []);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
install(frame: Frame): void {
|
|
16
|
+
this.tap(
|
|
17
|
+
frame.hooks.fetch.intercept,
|
|
18
|
+
(context, props) => {
|
|
19
|
+
if (context.parsed.destination !== "document") return;
|
|
20
|
+
|
|
21
|
+
const location = this.toLocation(context.parsed.url);
|
|
22
|
+
props.response = {
|
|
23
|
+
body: "",
|
|
24
|
+
status: 302,
|
|
25
|
+
statusText: "Found",
|
|
26
|
+
headers: ScramjetHeaders.fromRawHeaders([
|
|
27
|
+
["Location", String(location)],
|
|
28
|
+
]),
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
{ after: ["scramjet-http-cache"] }
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { ManagedPlugin } from "@mercuryworkshop/scramjet-controller";
|
|
2
|
+
import type { Frame } from "@mercuryworkshop/scramjet-controller";
|
|
3
|
+
import {
|
|
4
|
+
setupAlwaysLastBubble,
|
|
5
|
+
type AddAlwaysLastEventListener,
|
|
6
|
+
} from "./alwaysLastBubble";
|
|
7
|
+
|
|
8
|
+
export type { AddAlwaysLastEventListener } from "./alwaysLastBubble";
|
|
9
|
+
export { setupAlwaysLastBubble } from "./alwaysLastBubble";
|
|
10
|
+
|
|
11
|
+
export type EventHandlerPluginOptions = {
|
|
12
|
+
/** Bubble-phase event types to track. Defaults to click, auxclick, and contextmenu. */
|
|
13
|
+
events?: string[];
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Allows you to register an event listener on an element, such that it will only run after the page's own listeners (including after stopPropagation).
|
|
18
|
+
* This allows you to fake "native" browser behavior with ease
|
|
19
|
+
*/
|
|
20
|
+
export class EventHandlerPlugin extends ManagedPlugin {
|
|
21
|
+
private addAlwaysLastEventListeners: Map<Window, AddAlwaysLastEventListener> =
|
|
22
|
+
new Map();
|
|
23
|
+
private eventsToCapture: string[] = [];
|
|
24
|
+
|
|
25
|
+
constructor(private options: EventHandlerPluginOptions = {}) {
|
|
26
|
+
super("event-handler", []);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
install(frame: Frame): void {
|
|
30
|
+
super.install(frame);
|
|
31
|
+
|
|
32
|
+
this.tap(frame.hooks.init.post, (context) => {
|
|
33
|
+
this.addAlwaysLastEventListeners.set(
|
|
34
|
+
context.window,
|
|
35
|
+
setupAlwaysLastBubble(context.client, this.eventsToCapture)
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
addEventToCapture(eventName: string): void {
|
|
41
|
+
if (this.eventsToCapture.includes(eventName)) return;
|
|
42
|
+
this.eventsToCapture.push(eventName);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private getWindow(target: EventTarget): Window | null {
|
|
46
|
+
if (!target) return null;
|
|
47
|
+
// TODO: object safety
|
|
48
|
+
// @ts-expect-error
|
|
49
|
+
if ("ownerDocument" in target && target.ownerDocument.defaultView) {
|
|
50
|
+
// @ts-expect-error
|
|
51
|
+
return target.ownerDocument.defaultView;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (
|
|
55
|
+
"constructor" in target &&
|
|
56
|
+
target.constructor &&
|
|
57
|
+
"constructor" in target.constructor &&
|
|
58
|
+
target.constructor.constructor
|
|
59
|
+
) {
|
|
60
|
+
// @ts-expect-error hack hack hack sahur
|
|
61
|
+
return new target.constructor.constructor("return globalThis")();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
addEventListener<T extends Event>(
|
|
68
|
+
target: EventTarget,
|
|
69
|
+
eventName: string,
|
|
70
|
+
listener: (e: T) => void
|
|
71
|
+
): void {
|
|
72
|
+
const window = this.getWindow(target);
|
|
73
|
+
if (!window) {
|
|
74
|
+
console.warn("target's original realm could not be found", target);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const addAlwaysLastEventListener =
|
|
78
|
+
this.addAlwaysLastEventListeners.get(window);
|
|
79
|
+
if (!addAlwaysLastEventListener) {
|
|
80
|
+
throw new Error(
|
|
81
|
+
"somehow the realm of the target never had addAlwaysLastEventListener installed"
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
addAlwaysLastEventListener(target, eventName, listener);
|
|
85
|
+
}
|
|
86
|
+
}
|