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.
Files changed (481) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +123 -0
  3. package/SOURCE.md +29 -0
  4. package/THIRD_PARTY_NOTICES.md +24 -0
  5. package/dist/assets/filters-Bu_3nHVy.bin +0 -0
  6. package/dist/assets/index-BdRlQ7d_.css +1 -0
  7. package/dist/assets/index-DcvPYWS3.js +3621 -0
  8. package/dist/assets/inject-BnVzMVpl.js +40 -0
  9. package/dist/assets/scramjet-C9HLwI-y.wasm +0 -0
  10. package/dist/defaultfavicon.png +0 -0
  11. package/dist/icon.png +0 -0
  12. package/dist/roxxie-icon.svg +12 -0
  13. package/embed.js +70 -0
  14. package/examples/single-page.html +25 -0
  15. package/package.json +42 -0
  16. package/runtime/controller.sw.js +273 -0
  17. package/runtime/index.html +18 -0
  18. package/runtime/localcontrollersw.js +7 -0
  19. package/runtime/roxxie-network.json +13 -0
  20. package/runtime/sw.js +6 -0
  21. package/scripts/build.mjs +344 -0
  22. package/scripts/smoke.mjs +123 -0
  23. package/scripts/verify.mjs +122 -0
  24. package/source/external/dreamlandjs/LICENSE +21 -0
  25. package/source/external/dreamlandjs/README.md +22 -0
  26. package/source/external/dreamlandjs/dist/core.d.ts +167 -0
  27. package/source/external/dreamlandjs/dist/core.js +2 -0
  28. package/source/external/dreamlandjs/dist/core.js.map +1 -0
  29. package/source/external/dreamlandjs/dist/core.size.html +4950 -0
  30. package/source/external/dreamlandjs/dist/js-runtime.d.ts +3 -0
  31. package/source/external/dreamlandjs/dist/js-runtime.js +2 -0
  32. package/source/external/dreamlandjs/dist/js-runtime.js.map +1 -0
  33. package/source/external/dreamlandjs/dist/jsx-runtime.d.ts +1 -0
  34. package/source/external/dreamlandjs/dist/jsx-runtime.js +2 -0
  35. package/source/external/dreamlandjs/dist/jsx-runtime.js.map +1 -0
  36. package/source/external/dreamlandjs/dist/motion.d.ts +19 -0
  37. package/source/external/dreamlandjs/dist/motion.js +2 -0
  38. package/source/external/dreamlandjs/dist/motion.js.map +1 -0
  39. package/source/external/dreamlandjs/dist/router.d.ts +48 -0
  40. package/source/external/dreamlandjs/dist/router.js +2 -0
  41. package/source/external/dreamlandjs/dist/router.js.map +1 -0
  42. package/source/external/dreamlandjs/dist/ssr.client.d.ts +3 -0
  43. package/source/external/dreamlandjs/dist/ssr.client.js +2 -0
  44. package/source/external/dreamlandjs/dist/ssr.client.js.map +1 -0
  45. package/source/external/dreamlandjs/dist/ssr.client.size.html +4950 -0
  46. package/source/external/dreamlandjs/dist/ssr.hybrid.d.ts +7 -0
  47. package/source/external/dreamlandjs/dist/ssr.hybrid.js +2 -0
  48. package/source/external/dreamlandjs/dist/ssr.hybrid.js.map +1 -0
  49. package/source/external/dreamlandjs/dist/ssr.hybrid.size.html +4950 -0
  50. package/source/external/dreamlandjs/dist/ssr.server.d.ts +11 -0
  51. package/source/external/dreamlandjs/dist/ssr.server.js +2373 -0
  52. package/source/external/dreamlandjs/dist/ssr.server.js.map +1 -0
  53. package/source/external/dreamlandjs/dist/types/core/consts.d.ts +16 -0
  54. package/source/external/dreamlandjs/dist/types/core/css/index.d.ts +11 -0
  55. package/source/external/dreamlandjs/dist/types/core/css/selectorParser.d.ts +50 -0
  56. package/source/external/dreamlandjs/dist/types/core/delegate.d.ts +10 -0
  57. package/source/external/dreamlandjs/dist/types/core/index.d.ts +9 -0
  58. package/source/external/dreamlandjs/dist/types/core/jsx/child.d.ts +2 -0
  59. package/source/external/dreamlandjs/dist/types/core/jsx/definitions.d.ts +76 -0
  60. package/source/external/dreamlandjs/dist/types/core/jsx/dom.d.ts +28 -0
  61. package/source/external/dreamlandjs/dist/types/core/jsx/index.d.ts +14 -0
  62. package/source/external/dreamlandjs/dist/types/core/state/index.d.ts +1 -0
  63. package/source/external/dreamlandjs/dist/types/core/state/pointers.d.ts +37 -0
  64. package/source/external/dreamlandjs/dist/types/core/state/state.d.ts +13 -0
  65. package/source/external/dreamlandjs/dist/types/core/state/use.d.ts +11 -0
  66. package/source/external/dreamlandjs/dist/types/core/utils.d.ts +4 -0
  67. package/source/external/dreamlandjs/dist/types/js-runtime/index.d.ts +1 -0
  68. package/source/external/dreamlandjs/dist/types/jsx-runtime/index.d.ts +2 -0
  69. package/source/external/dreamlandjs/dist/types/motion/index.d.ts +15 -0
  70. package/source/external/dreamlandjs/dist/types/router/index.d.ts +45 -0
  71. package/source/external/dreamlandjs/dist/types/ssr/client/index.d.ts +1 -0
  72. package/source/external/dreamlandjs/dist/types/ssr/common/consts.d.ts +4 -0
  73. package/source/external/dreamlandjs/dist/types/ssr/common/serialize.d.ts +4 -0
  74. package/source/external/dreamlandjs/dist/types/ssr/common/types.d.ts +21 -0
  75. package/source/external/dreamlandjs/dist/types/ssr/hybrid/index.d.ts +4 -0
  76. package/source/external/dreamlandjs/dist/types/ssr/server/index.d.ts +7 -0
  77. package/source/external/dreamlandjs/dist/types/ssr/server/vdom.d.ts +71 -0
  78. package/source/external/dreamlandjs/dist/types/util/index.d.ts +1 -0
  79. package/source/external/dreamlandjs/dist/types/util/store.d.ts +26 -0
  80. package/source/external/dreamlandjs/dist/types/vite/css-minifier.d.ts +7 -0
  81. package/source/external/dreamlandjs/dist/types/vite/index.d.ts +11 -0
  82. package/source/external/dreamlandjs/dist/util.d.ts +29 -0
  83. package/source/external/dreamlandjs/dist/util.js +2 -0
  84. package/source/external/dreamlandjs/dist/util.js.map +1 -0
  85. package/source/external/dreamlandjs/dist/vite.d.ts +19 -0
  86. package/source/external/dreamlandjs/dist/vite.js +2 -0
  87. package/source/external/dreamlandjs/dist/vite.js.map +1 -0
  88. package/source/external/dreamlandjs/package.json +101 -0
  89. package/source/external/dreamlandjs/rollup.config.ts +302 -0
  90. package/source/external/dreamlandjs/rollup.plugins.ts +1134 -0
  91. package/source/external/dreamlandjs/src/core/consts.d.ts +16 -0
  92. package/source/external/dreamlandjs/src/core/consts.js +18 -0
  93. package/source/external/dreamlandjs/src/core/css/index.ts +111 -0
  94. package/source/external/dreamlandjs/src/core/css/selectorParser.ts +313 -0
  95. package/source/external/dreamlandjs/src/core/delegate.ts +28 -0
  96. package/source/external/dreamlandjs/src/core/index.ts +31 -0
  97. package/source/external/dreamlandjs/src/core/jsx/child.ts +91 -0
  98. package/source/external/dreamlandjs/src/core/jsx/definitions.ts +125 -0
  99. package/source/external/dreamlandjs/src/core/jsx/dom.ts +49 -0
  100. package/source/external/dreamlandjs/src/core/jsx/index.ts +289 -0
  101. package/source/external/dreamlandjs/src/core/state/index.ts +1 -0
  102. package/source/external/dreamlandjs/src/core/state/pointers.ts +310 -0
  103. package/source/external/dreamlandjs/src/core/state/state.ts +112 -0
  104. package/source/external/dreamlandjs/src/core/state/use.ts +82 -0
  105. package/source/external/dreamlandjs/src/core/utils.ts +48 -0
  106. package/source/external/dreamlandjs/src/js-runtime/index.ts +4 -0
  107. package/source/external/dreamlandjs/src/jsx-runtime/index.ts +3 -0
  108. package/source/external/dreamlandjs/src/motion/index.ts +156 -0
  109. package/source/external/dreamlandjs/src/router/index.tsx +394 -0
  110. package/source/external/dreamlandjs/src/router/tsconfig.json +9 -0
  111. package/source/external/dreamlandjs/src/ssr/client/index.ts +193 -0
  112. package/source/external/dreamlandjs/src/ssr/common/consts.ts +5 -0
  113. package/source/external/dreamlandjs/src/ssr/common/serialize.ts +115 -0
  114. package/source/external/dreamlandjs/src/ssr/common/types.ts +28 -0
  115. package/source/external/dreamlandjs/src/ssr/hybrid/index.ts +144 -0
  116. package/source/external/dreamlandjs/src/ssr/server/index.ts +157 -0
  117. package/source/external/dreamlandjs/src/ssr/server/tsconfig.json +7 -0
  118. package/source/external/dreamlandjs/src/ssr/server/vdom.ts +285 -0
  119. package/source/external/dreamlandjs/src/util/index.ts +10 -0
  120. package/source/external/dreamlandjs/src/util/store.ts +134 -0
  121. package/source/external/dreamlandjs/src/vite/css-minifier.ts +222 -0
  122. package/source/external/dreamlandjs/src/vite/index.ts +60 -0
  123. package/source/external/dreamlandjs/src/vite/tsconfig.json +7 -0
  124. package/source/external/dreamlandjs/tsconfig.json +15 -0
  125. package/source/package.json +48 -0
  126. package/source/packages/adrift-protocol/package.json +31 -0
  127. package/source/packages/adrift-protocol/src/index.ts +348 -0
  128. package/source/packages/adrift-protocol/tsconfig.json +18 -0
  129. package/source/packages/cdp/LICENSE +21 -0
  130. package/source/packages/cdp/README.md +47 -0
  131. package/source/packages/cdp/dist/chobitsu.js +2 -0
  132. package/source/packages/cdp/dist/chobitsu.js.map +1 -0
  133. package/source/packages/cdp/package.json +73 -0
  134. package/source/packages/cdp/script/build.js +15 -0
  135. package/source/packages/cdp/src/Chobitsu.ts +110 -0
  136. package/source/packages/cdp/src/domains/CSS.ts +378 -0
  137. package/source/packages/cdp/src/domains/CacheStorage.ts +8 -0
  138. package/source/packages/cdp/src/domains/DOM.ts +487 -0
  139. package/source/packages/cdp/src/domains/DOMDebugger.ts +109 -0
  140. package/source/packages/cdp/src/domains/DOMStorage.ts +122 -0
  141. package/source/packages/cdp/src/domains/Debugger.ts +25 -0
  142. package/source/packages/cdp/src/domains/IndexedDB.ts +207 -0
  143. package/source/packages/cdp/src/domains/Input.ts +177 -0
  144. package/source/packages/cdp/src/domains/Network.ts +251 -0
  145. package/source/packages/cdp/src/domains/Overlay.ts +230 -0
  146. package/source/packages/cdp/src/domains/Page.ts +296 -0
  147. package/source/packages/cdp/src/domains/Runtime.ts +273 -0
  148. package/source/packages/cdp/src/domains/Storage.ts +71 -0
  149. package/source/packages/cdp/src/index.d.ts +8 -0
  150. package/source/packages/cdp/src/index.ts +153 -0
  151. package/source/packages/cdp/src/lib/connector.ts +15 -0
  152. package/source/packages/cdp/src/lib/constants.ts +1 -0
  153. package/source/packages/cdp/src/lib/evaluate.ts +59 -0
  154. package/source/packages/cdp/src/lib/mutationObserver.ts +39 -0
  155. package/source/packages/cdp/src/lib/nodeManager.ts +142 -0
  156. package/source/packages/cdp/src/lib/objManager.ts +422 -0
  157. package/source/packages/cdp/src/lib/request.ts +313 -0
  158. package/source/packages/cdp/src/lib/resources.ts +59 -0
  159. package/source/packages/cdp/src/lib/scriptMananger.ts +62 -0
  160. package/source/packages/cdp/src/lib/stylesheet.ts +146 -0
  161. package/source/packages/cdp/src/lib/util.ts +105 -0
  162. package/source/packages/cdp/tsconfig.json +16 -0
  163. package/source/packages/cdp/webpack.config.js +48 -0
  164. package/source/packages/chrome/index.html +17 -0
  165. package/source/packages/chrome/package.json +41 -0
  166. package/source/packages/chrome/public/ROXXIE_NETWORK.md +22 -0
  167. package/source/packages/chrome/public/controller.sw.js +273 -0
  168. package/source/packages/chrome/public/defaultfavicon.png +0 -0
  169. package/source/packages/chrome/public/icon.png +0 -0
  170. package/source/packages/chrome/public/localcontrollersw.js +7 -0
  171. package/source/packages/chrome/public/roxxie-icon.svg +12 -0
  172. package/source/packages/chrome/public/roxxie-network.json +13 -0
  173. package/source/packages/chrome/public/sw.js +6 -0
  174. package/source/packages/chrome/src/App.tsx +269 -0
  175. package/source/packages/chrome/src/CDP.ts +285 -0
  176. package/source/packages/chrome/src/Tab/History.ts +186 -0
  177. package/source/packages/chrome/src/Tab/Tab.tsx +219 -0
  178. package/source/packages/chrome/src/Tab/screenshot.ts +66 -0
  179. package/source/packages/chrome/src/Tab/serialize.ts +221 -0
  180. package/source/packages/chrome/src/adblock/AdBlockPlugin.test.ts +159 -0
  181. package/source/packages/chrome/src/adblock/AdBlockPlugin.ts +232 -0
  182. package/source/packages/chrome/src/adblock/AdBlockService.test.ts +148 -0
  183. package/source/packages/chrome/src/adblock/AdBlockService.ts +166 -0
  184. package/source/packages/chrome/src/adblock/NOTICE.md +14 -0
  185. package/source/packages/chrome/src/adblock/assets/filters.bin +0 -0
  186. package/source/packages/chrome/src/adblock/index.ts +18 -0
  187. package/source/packages/chrome/src/assets/favicon.ts +4 -0
  188. package/source/packages/chrome/src/components/BookmarkPopup.tsx +101 -0
  189. package/source/packages/chrome/src/components/BookmarksStrip.tsx +150 -0
  190. package/source/packages/chrome/src/components/Button.tsx +99 -0
  191. package/source/packages/chrome/src/components/Checkbox.tsx +89 -0
  192. package/source/packages/chrome/src/components/DownloadsPopup.tsx +230 -0
  193. package/source/packages/chrome/src/components/Favicon.tsx +65 -0
  194. package/source/packages/chrome/src/components/Icon.tsx +29 -0
  195. package/source/packages/chrome/src/components/Input.tsx +82 -0
  196. package/source/packages/chrome/src/components/Menu.tsx +287 -0
  197. package/source/packages/chrome/src/components/Omnibar/BookmarkButton.tsx +73 -0
  198. package/source/packages/chrome/src/components/Omnibar/CircularProgress.tsx +83 -0
  199. package/source/packages/chrome/src/components/Omnibar/Omnibar.tsx +455 -0
  200. package/source/packages/chrome/src/components/Omnibar/OmnibarButton.tsx +48 -0
  201. package/source/packages/chrome/src/components/Omnibar/Omnibox.tsx +466 -0
  202. package/source/packages/chrome/src/components/Omnibar/SiteOptionsButton.tsx +52 -0
  203. package/source/packages/chrome/src/components/Omnibar/Suggestion.tsx +186 -0
  204. package/source/packages/chrome/src/components/Omnibar/UrlInput.tsx +198 -0
  205. package/source/packages/chrome/src/components/Omnibar/suggestions.ts +468 -0
  206. package/source/packages/chrome/src/components/Omnibar/utils.ts +11 -0
  207. package/source/packages/chrome/src/components/ReportBrokenSiteModal.tsx +279 -0
  208. package/source/packages/chrome/src/components/Shell.tsx +191 -0
  209. package/source/packages/chrome/src/components/SiteInformationPopup.tsx +96 -0
  210. package/source/packages/chrome/src/components/SmallIconButton.tsx +36 -0
  211. package/source/packages/chrome/src/components/StartScreen.tsx +386 -0
  212. package/source/packages/chrome/src/components/TabStrip/DragTab.tsx +546 -0
  213. package/source/packages/chrome/src/components/TabStrip/Sidebar.tsx +820 -0
  214. package/source/packages/chrome/src/components/TabStrip/TabHoverCard.tsx +87 -0
  215. package/source/packages/chrome/src/components/TabStrip/TabStrip.tsx +510 -0
  216. package/source/packages/chrome/src/components/TopSiteButton.tsx +234 -0
  217. package/source/packages/chrome/src/consts.ts +3 -0
  218. package/source/packages/chrome/src/icons.ts +70 -0
  219. package/source/packages/chrome/src/index.ts +168 -0
  220. package/source/packages/chrome/src/migrations/0-from-legacy.ts +6 -0
  221. package/source/packages/chrome/src/migrations/1-vertical-tab-settings.ts +15 -0
  222. package/source/packages/chrome/src/migrations/index.ts +42 -0
  223. package/source/packages/chrome/src/pages/AboutPage.tsx +37 -0
  224. package/source/packages/chrome/src/pages/DownloadsPage.tsx +133 -0
  225. package/source/packages/chrome/src/pages/HistoryPage.tsx +99 -0
  226. package/source/packages/chrome/src/pages/NewTabPage.tsx +264 -0
  227. package/source/packages/chrome/src/pages/PlaygroundPage.tsx +43 -0
  228. package/source/packages/chrome/src/pages/SettingsPage.tsx +1931 -0
  229. package/source/packages/chrome/src/proxy/Controller.ts +331 -0
  230. package/source/packages/chrome/src/proxy/ProxyFrame.ts +26 -0
  231. package/source/packages/chrome/src/proxy/cache.ts +487 -0
  232. package/source/packages/chrome/src/proxy/codec.ts +11 -0
  233. package/source/packages/chrome/src/proxy/contextitems.ts +180 -0
  234. package/source/packages/chrome/src/proxy/index.ts +5 -0
  235. package/source/packages/chrome/src/proxy/roxxie.ts +85 -0
  236. package/source/packages/chrome/src/proxy/scramjet.ts +642 -0
  237. package/source/packages/chrome/src/reset.css +124 -0
  238. package/source/packages/chrome/src/runtime-base.ts +16 -0
  239. package/source/packages/chrome/src/sentry.tsx +45 -0
  240. package/source/packages/chrome/src/services/DownloadsService.ts +136 -0
  241. package/source/packages/chrome/src/services/FaviconService.ts +161 -0
  242. package/source/packages/chrome/src/services/KVWrapper.ts +169 -0
  243. package/source/packages/chrome/src/services/ProfileService.ts +94 -0
  244. package/source/packages/chrome/src/services/Service.ts +10 -0
  245. package/source/packages/chrome/src/services/SettingsService.ts +108 -0
  246. package/source/packages/chrome/src/services/TabsService.ts +161 -0
  247. package/source/packages/chrome/src/startup.test.ts +129 -0
  248. package/source/packages/chrome/src/startup.ts +161 -0
  249. package/source/packages/chrome/src/style.css +229 -0
  250. package/source/packages/chrome/src/themes.ts +756 -0
  251. package/source/packages/chrome/src/util/StatefulClass.ts +31 -0
  252. package/source/packages/chrome/src/util/index.ts +74 -0
  253. package/source/packages/chrome/src/util/memoize.ts +13 -0
  254. package/source/packages/chrome/src/vite-env.d.ts +16 -0
  255. package/source/packages/chrome/tsconfig.json +30 -0
  256. package/source/packages/chrome/vite.config.ts +47 -0
  257. package/source/packages/inject/package.json +20 -0
  258. package/source/packages/inject/src/context.ts +194 -0
  259. package/source/packages/inject/src/emulators/alwaysLastBubble.ts +168 -0
  260. package/source/packages/inject/src/emulators/anchors.ts +55 -0
  261. package/source/packages/inject/src/emulators/contextmenu.ts +46 -0
  262. package/source/packages/inject/src/emulators/history.ts +51 -0
  263. package/source/packages/inject/src/emulators/titlewatcher.ts +42 -0
  264. package/source/packages/inject/src/emulators/windowopen.ts +134 -0
  265. package/source/packages/inject/src/errorpage/errorpage.css +234 -0
  266. package/source/packages/inject/src/errorpage/errorpage.html +29 -0
  267. package/source/packages/inject/src/errorpage/errorpage.ts +76 -0
  268. package/source/packages/inject/src/index.ts +62 -0
  269. package/source/packages/inject/src/transport.ts +97 -0
  270. package/source/packages/inject/src/types.d.ts +136 -0
  271. package/source/packages/roxxie-transport/package.json +36 -0
  272. package/source/packages/roxxie-transport/src/binary.ts +398 -0
  273. package/source/packages/roxxie-transport/src/config.ts +254 -0
  274. package/source/packages/roxxie-transport/src/connection.ts +767 -0
  275. package/source/packages/roxxie-transport/src/index.ts +5 -0
  276. package/source/packages/roxxie-transport/src/tracker.ts +651 -0
  277. package/source/packages/roxxie-transport/src/transport.ts +414 -0
  278. package/source/packages/roxxie-transport/tsconfig.json +18 -0
  279. package/source/packages/scramjet/packages/controller/package.json +37 -0
  280. package/source/packages/scramjet/packages/controller/src/index.ts +861 -0
  281. package/source/packages/scramjet/packages/controller/src/inject.ts +365 -0
  282. package/source/packages/scramjet/packages/controller/src/sw.ts +231 -0
  283. package/source/packages/scramjet/packages/controller/src/symbols.ts +1 -0
  284. package/source/packages/scramjet/packages/controller/src/types.d.ts +140 -0
  285. package/source/packages/scramjet/packages/controller/src/typesEntry.ts +6 -0
  286. package/source/packages/scramjet/packages/controller/src/version.ts +30 -0
  287. package/source/packages/scramjet/packages/controller/tsconfig.json +24 -0
  288. package/source/packages/scramjet/packages/core/dist/scramjet-external.mjs +57 -0
  289. package/source/packages/scramjet/packages/core/dist/scramjet.js +13599 -0
  290. package/source/packages/scramjet/packages/core/dist/scramjet.js.map +1 -0
  291. package/source/packages/scramjet/packages/core/dist/scramjet.mjs +13649 -0
  292. package/source/packages/scramjet/packages/core/dist/scramjet.mjs.map +1 -0
  293. package/source/packages/scramjet/packages/core/dist/scramjet.wasm +0 -0
  294. package/source/packages/scramjet/packages/core/dist/scramjet_bundled.js +13601 -0
  295. package/source/packages/scramjet/packages/core/dist/scramjet_bundled.js.map +1 -0
  296. package/source/packages/scramjet/packages/core/dist/scramjet_bundled.mjs +13651 -0
  297. package/source/packages/scramjet/packages/core/dist/scramjet_bundled.mjs.map +1 -0
  298. package/source/packages/scramjet/packages/core/dist/temp-types-build/index.js +23 -0
  299. package/source/packages/scramjet/packages/core/dist/temp-types-build/index.js.map +1 -0
  300. package/source/packages/scramjet/packages/core/dist/types/Tap.d.ts +39 -0
  301. package/source/packages/scramjet/packages/core/dist/types/client/client.d.ts +115 -0
  302. package/source/packages/scramjet/packages/core/dist/types/client/entry.d.ts +5 -0
  303. package/source/packages/scramjet/packages/core/dist/types/client/events.d.ts +10 -0
  304. package/source/packages/scramjet/packages/core/dist/types/client/helpers.d.ts +1 -0
  305. package/source/packages/scramjet/packages/core/dist/types/client/index.d.ts +7 -0
  306. package/source/packages/scramjet/packages/core/dist/types/client/location.d.ts +2 -0
  307. package/source/packages/scramjet/packages/core/dist/types/client/shared/eval.d.ts +3 -0
  308. package/source/packages/scramjet/packages/core/dist/types/client/shared/sourcemaps.d.ts +19 -0
  309. package/source/packages/scramjet/packages/core/dist/types/client/shared/wrap.d.ts +4 -0
  310. package/source/packages/scramjet/packages/core/dist/types/client/singletonbox.d.ts +18 -0
  311. package/source/packages/scramjet/packages/core/dist/types/fetch/body.d.ts +3 -0
  312. package/source/packages/scramjet/packages/core/dist/types/fetch/fetch.d.ts +7 -0
  313. package/source/packages/scramjet/packages/core/dist/types/fetch/headers.d.ts +19 -0
  314. package/source/packages/scramjet/packages/core/dist/types/fetch/index.d.ts +128 -0
  315. package/source/packages/scramjet/packages/core/dist/types/fetch/parse.d.ts +23 -0
  316. package/source/packages/scramjet/packages/core/dist/types/fetch/util.d.ts +7 -0
  317. package/source/packages/scramjet/packages/core/dist/types/index.d.ts +12 -0
  318. package/source/packages/scramjet/packages/core/dist/types/shared/cookie.d.ts +26 -0
  319. package/source/packages/scramjet/packages/core/dist/types/shared/headers.d.ts +13 -0
  320. package/source/packages/scramjet/packages/core/dist/types/shared/htmlRules.d.ts +6 -0
  321. package/source/packages/scramjet/packages/core/dist/types/shared/index.d.ts +50 -0
  322. package/source/packages/scramjet/packages/core/dist/types/shared/mime.d.ts +53 -0
  323. package/source/packages/scramjet/packages/core/dist/types/shared/refresh.d.ts +7 -0
  324. package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/css.d.ts +4 -0
  325. package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/html.d.ts +33 -0
  326. package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/index.d.ts +6 -0
  327. package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/js.d.ts +11 -0
  328. package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/url.d.ts +24 -0
  329. package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/wasm.d.ts +7 -0
  330. package/source/packages/scramjet/packages/core/dist/types/shared/rewriters/worker.d.ts +3 -0
  331. package/source/packages/scramjet/packages/core/dist/types/shared/set-cookie-parser.d.ts +20 -0
  332. package/source/packages/scramjet/packages/core/dist/types/shared/snapshot.d.ts +186 -0
  333. package/source/packages/scramjet/packages/core/dist/types/shared/sniffEncoding.d.ts +65 -0
  334. package/source/packages/scramjet/packages/core/dist/types/shared/util.d.ts +2 -0
  335. package/source/packages/scramjet/packages/core/dist/types/symbols.d.ts +6 -0
  336. package/source/packages/scramjet/packages/core/dist/types/types.d.ts +60 -0
  337. package/source/packages/scramjet/packages/core/dist/types/typesEntry.d.ts +5 -0
  338. package/source/packages/scramjet/packages/core/lib/index.cjs +7 -0
  339. package/source/packages/scramjet/packages/core/lib/index.d.ts +8 -0
  340. package/source/packages/scramjet/packages/core/package.json +69 -0
  341. package/source/packages/scramjet/packages/core/rewriter/Cargo.lock +1985 -0
  342. package/source/packages/scramjet/packages/core/rewriter/Cargo.toml +20 -0
  343. package/source/packages/scramjet/packages/core/rewriter/coverage-macro/Cargo.toml +15 -0
  344. package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/analyze.rs +1118 -0
  345. package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/ast_table.rs +927 -0
  346. package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/helper_index.rs +556 -0
  347. package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/lib.rs +455 -0
  348. package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/reachability.rs +85 -0
  349. package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/templates.rs +192 -0
  350. package/source/packages/scramjet/packages/core/rewriter/coverage-macro/src/witness.rs +597 -0
  351. package/source/packages/scramjet/packages/core/rewriter/js/Cargo.toml +18 -0
  352. package/source/packages/scramjet/packages/core/rewriter/js/src/cfg.rs +45 -0
  353. package/source/packages/scramjet/packages/core/rewriter/js/src/changes.rs +379 -0
  354. package/source/packages/scramjet/packages/core/rewriter/js/src/lib.rs +171 -0
  355. package/source/packages/scramjet/packages/core/rewriter/js/src/rewrite.rs +290 -0
  356. package/source/packages/scramjet/packages/core/rewriter/js/src/visitor.rs +967 -0
  357. package/source/packages/scramjet/packages/core/rewriter/native/Cargo.toml +22 -0
  358. package/source/packages/scramjet/packages/core/rewriter/native/src/main.rs +166 -0
  359. package/source/packages/scramjet/packages/core/rewriter/native/src/rewriter.rs +161 -0
  360. package/source/packages/scramjet/packages/core/rewriter/native/src/test_runner.rs +156 -0
  361. package/source/packages/scramjet/packages/core/rewriter/rust-toolchain.toml +5 -0
  362. package/source/packages/scramjet/packages/core/rewriter/rustfmt.toml +2 -0
  363. package/source/packages/scramjet/packages/core/rewriter/transform/Cargo.toml +16 -0
  364. package/source/packages/scramjet/packages/core/rewriter/transform/src/lib.rs +242 -0
  365. package/source/packages/scramjet/packages/core/rewriter/transform/src/transform.rs +123 -0
  366. package/source/packages/scramjet/packages/core/rewriter/wasm/Cargo.toml +22 -0
  367. package/source/packages/scramjet/packages/core/rewriter/wasm/build.sh +128 -0
  368. package/source/packages/scramjet/packages/core/rewriter/wasm/src/error.rs +56 -0
  369. package/source/packages/scramjet/packages/core/rewriter/wasm/src/jsr.rs +125 -0
  370. package/source/packages/scramjet/packages/core/rewriter/wasm/src/lib.rs +144 -0
  371. package/source/packages/scramjet/packages/core/src/Tap.ts +166 -0
  372. package/source/packages/scramjet/packages/core/src/client/client.ts +916 -0
  373. package/source/packages/scramjet/packages/core/src/client/dom/attr.ts +94 -0
  374. package/source/packages/scramjet/packages/core/src/client/dom/beacon.ts +11 -0
  375. package/source/packages/scramjet/packages/core/src/client/dom/cookie.ts +21 -0
  376. package/source/packages/scramjet/packages/core/src/client/dom/css.ts +106 -0
  377. package/source/packages/scramjet/packages/core/src/client/dom/document.ts +140 -0
  378. package/source/packages/scramjet/packages/core/src/client/dom/element.ts +783 -0
  379. package/source/packages/scramjet/packages/core/src/client/dom/fontface.ts +11 -0
  380. package/source/packages/scramjet/packages/core/src/client/dom/fragments.ts +32 -0
  381. package/source/packages/scramjet/packages/core/src/client/dom/history.ts +35 -0
  382. package/source/packages/scramjet/packages/core/src/client/dom/open.ts +59 -0
  383. package/source/packages/scramjet/packages/core/src/client/dom/origin.ts +13 -0
  384. package/source/packages/scramjet/packages/core/src/client/dom/performance.ts +50 -0
  385. package/source/packages/scramjet/packages/core/src/client/dom/protocol.ts +17 -0
  386. package/source/packages/scramjet/packages/core/src/client/dom/storage.ts +107 -0
  387. package/source/packages/scramjet/packages/core/src/client/entry.ts +12 -0
  388. package/source/packages/scramjet/packages/core/src/client/events.ts +10 -0
  389. package/source/packages/scramjet/packages/core/src/client/helpers.ts +7 -0
  390. package/source/packages/scramjet/packages/core/src/client/index.ts +7 -0
  391. package/source/packages/scramjet/packages/core/src/client/location.ts +139 -0
  392. package/source/packages/scramjet/packages/core/src/client/shared/antiantidebugger.ts +20 -0
  393. package/source/packages/scramjet/packages/core/src/client/shared/blob.ts +35 -0
  394. package/source/packages/scramjet/packages/core/src/client/shared/caches.ts +31 -0
  395. package/source/packages/scramjet/packages/core/src/client/shared/chrome.ts +90 -0
  396. package/source/packages/scramjet/packages/core/src/client/shared/err.ts +55 -0
  397. package/source/packages/scramjet/packages/core/src/client/shared/error.ts +42 -0
  398. package/source/packages/scramjet/packages/core/src/client/shared/eval.ts +40 -0
  399. package/source/packages/scramjet/packages/core/src/client/shared/event.ts +215 -0
  400. package/source/packages/scramjet/packages/core/src/client/shared/function.ts +59 -0
  401. package/source/packages/scramjet/packages/core/src/client/shared/import.ts +46 -0
  402. package/source/packages/scramjet/packages/core/src/client/shared/indexeddb.ts +18 -0
  403. package/source/packages/scramjet/packages/core/src/client/shared/opfs.ts +27 -0
  404. package/source/packages/scramjet/packages/core/src/client/shared/postmessage.ts +113 -0
  405. package/source/packages/scramjet/packages/core/src/client/shared/realm.ts +26 -0
  406. package/source/packages/scramjet/packages/core/src/client/shared/requests/eventsource.ts +17 -0
  407. package/source/packages/scramjet/packages/core/src/client/shared/requests/fetch.ts +67 -0
  408. package/source/packages/scramjet/packages/core/src/client/shared/requests/websocket.ts +389 -0
  409. package/source/packages/scramjet/packages/core/src/client/shared/requests/xmlhttprequest.ts +163 -0
  410. package/source/packages/scramjet/packages/core/src/client/shared/settimeout.ts +20 -0
  411. package/source/packages/scramjet/packages/core/src/client/shared/sourcemaps.ts +203 -0
  412. package/source/packages/scramjet/packages/core/src/client/shared/worker.ts +72 -0
  413. package/source/packages/scramjet/packages/core/src/client/shared/wrap.ts +197 -0
  414. package/source/packages/scramjet/packages/core/src/client/singletonbox.ts +52 -0
  415. package/source/packages/scramjet/packages/core/src/client/worker/importScripts.ts +13 -0
  416. package/source/packages/scramjet/packages/core/src/fetch/body.ts +93 -0
  417. package/source/packages/scramjet/packages/core/src/fetch/fetch.ts +323 -0
  418. package/source/packages/scramjet/packages/core/src/fetch/headers.ts +528 -0
  419. package/source/packages/scramjet/packages/core/src/fetch/index.ts +198 -0
  420. package/source/packages/scramjet/packages/core/src/fetch/parse.ts +149 -0
  421. package/source/packages/scramjet/packages/core/src/fetch/util.ts +81 -0
  422. package/source/packages/scramjet/packages/core/src/global.d.ts +32 -0
  423. package/source/packages/scramjet/packages/core/src/index.ts +78 -0
  424. package/source/packages/scramjet/packages/core/src/log.ts +117 -0
  425. package/source/packages/scramjet/packages/core/src/shared/cookie.ts +199 -0
  426. package/source/packages/scramjet/packages/core/src/shared/headers.ts +76 -0
  427. package/source/packages/scramjet/packages/core/src/shared/htmlRules.ts +154 -0
  428. package/source/packages/scramjet/packages/core/src/shared/index.ts +79 -0
  429. package/source/packages/scramjet/packages/core/src/shared/mime.ts +234 -0
  430. package/source/packages/scramjet/packages/core/src/shared/refresh.ts +164 -0
  431. package/source/packages/scramjet/packages/core/src/shared/rewriters/css.ts +67 -0
  432. package/source/packages/scramjet/packages/core/src/shared/rewriters/html.ts +603 -0
  433. package/source/packages/scramjet/packages/core/src/shared/rewriters/index.ts +6 -0
  434. package/source/packages/scramjet/packages/core/src/shared/rewriters/js.ts +158 -0
  435. package/source/packages/scramjet/packages/core/src/shared/rewriters/url.ts +248 -0
  436. package/source/packages/scramjet/packages/core/src/shared/rewriters/wasm.ts +58 -0
  437. package/source/packages/scramjet/packages/core/src/shared/rewriters/worker.ts +37 -0
  438. package/source/packages/scramjet/packages/core/src/shared/set-cookie-parser.ts +195 -0
  439. package/source/packages/scramjet/packages/core/src/shared/snapshot.ts +245 -0
  440. package/source/packages/scramjet/packages/core/src/shared/sniffEncoding.ts +1061 -0
  441. package/source/packages/scramjet/packages/core/src/shared/util.ts +35 -0
  442. package/source/packages/scramjet/packages/core/src/symbols.ts +9 -0
  443. package/source/packages/scramjet/packages/core/src/sync.ts +63 -0
  444. package/source/packages/scramjet/packages/core/src/types.ts +66 -0
  445. package/source/packages/scramjet/packages/core/src/typesEntry.ts +6 -0
  446. package/source/packages/scramjet/packages/core/tsconfig.json +21 -0
  447. package/source/packages/scramjet/packages/rpc/index.ts +100 -0
  448. package/source/packages/scramjet/packages/rpc/package.json +7 -0
  449. package/source/packages/scramjet/packages/utils/package.json +39 -0
  450. package/source/packages/scramjet/packages/utils/src/alwaysLastBubble.ts +172 -0
  451. package/source/packages/scramjet/packages/utils/src/catch-escaped-links.ts +34 -0
  452. package/source/packages/scramjet/packages/utils/src/event-handler-plugin.ts +86 -0
  453. package/source/packages/scramjet/packages/utils/src/global.d.ts +8 -0
  454. package/source/packages/scramjet/packages/utils/src/http-cache-plugin.ts +475 -0
  455. package/source/packages/scramjet/packages/utils/src/index.ts +26 -0
  456. package/source/packages/scramjet/packages/utils/src/link-handler-plugin.ts +75 -0
  457. package/source/packages/scramjet/packages/utils/src/typesEntry.ts +5 -0
  458. package/source/packages/scramjet/packages/utils/src/url-watcher.ts +37 -0
  459. package/source/packages/scramjet/packages/utils/src/version.ts +40 -0
  460. package/source/packages/scramjet/packages/utils/tsconfig.json +11 -0
  461. package/source/packages/scramjet/patches/htmlparser2@12.0.0.patch +124 -0
  462. package/source/packages/scramjet/rspack.config.ts +613 -0
  463. package/source/packages/scramjet/tsconfig.json +11 -0
  464. package/source/packages/tracker-protocol/package.json +31 -0
  465. package/source/packages/tracker-protocol/src/index.ts +745 -0
  466. package/source/packages/tracker-protocol/tsconfig.json +18 -0
  467. package/source/pnpm-lock.yaml +12018 -0
  468. package/source/pnpm-workspace.yaml +31 -0
  469. package/source/rspack.config.ts +103 -0
  470. package/source/scripts/update-adblock-assets.mjs +164 -0
  471. package/third_party/filter-lists/LICENSE-CC-BY-SA-3.0.txt +359 -0
  472. package/third_party/filter-lists/LICENSE-GPL-3.0.txt +674 -0
  473. package/third_party/filter-lists/LICENSE-MPL-2.0.txt +375 -0
  474. package/third_party/filter-lists/README.md +24 -0
  475. package/third_party/filter-lists/easylist.txt +83088 -0
  476. package/third_party/filter-lists/easyprivacy.txt +56361 -0
  477. package/third_party/filter-lists/manifest.json +56 -0
  478. package/third_party/filter-lists/ublock-filters.txt +10937 -0
  479. package/third_party/filter-lists/ublock-privacy.txt +3209 -0
  480. package/third_party/filter-lists/ublock-resources.json +1852 -0
  481. 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,9 @@
1
+ /**
2
+ * @fileoverview
3
+ * See `types.ts` for context on these symbols.
4
+ */
5
+
6
+ import { Symbol_for } from "@/shared/snapshot";
7
+
8
+ export const SCRAMJETCLIENTNAME = "scramjet client global";
9
+ export const SCRAMJETCLIENT = Symbol_for(SCRAMJETCLIENTNAME);
@@ -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,6 @@
1
+ import * as Types from "./index";
2
+ declare global {
3
+ const $scramjet: typeof Types;
4
+ }
5
+
6
+ export * from "./index";
@@ -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,7 @@
1
+ {
2
+ "name": "@mercuryworkshop/rpc",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "packageManager": "pnpm@10.12.1",
6
+ "license": "AGPL-3.0-only"
7
+ }
@@ -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
+ }
@@ -0,0 +1,8 @@
1
+ import type * as ScramjetController from "@mercuryworkshop/scramjet-controller";
2
+
3
+ declare global {
4
+ const $scramjet: typeof import("@mercuryworkshop/scramjet");
5
+ const $scramjetController: typeof ScramjetController;
6
+ }
7
+
8
+ export {};