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,916 @@
1
+ import {
2
+ BareCompatibleClient,
3
+ ProxyTransport,
4
+ RawHeaders,
5
+ } from "@mercuryworkshop/proxy-transports";
6
+ import { SCRAMJETCLIENT } from "@/symbols";
7
+ import { getOwnPropertyDescriptorHandler } from "@client/helpers";
8
+ import { createLocationProxy } from "@client/location";
9
+ import { createWrapFn } from "@client/shared/wrap";
10
+ import { LifecycleHooks } from "@client/events";
11
+ import {
12
+ rewriteUrl,
13
+ RewriteUrlOptions,
14
+ unrewriteUrl,
15
+ type URLMeta,
16
+ } from "@rewriters/url";
17
+ import {
18
+ flagEnabled,
19
+ HtmlRewriterHooks,
20
+ ScramjetContext,
21
+ ScramjetHeaders,
22
+ } from "@/shared";
23
+ import { iswindow } from "./entry";
24
+ import { SingletonBox } from "./singletonbox";
25
+ import { ScramjetConfig } from "@/types";
26
+ import { Tap } from "@/Tap";
27
+ import {
28
+ type CookieSyncEntry,
29
+ type CookieSyncOptions,
30
+ TrackedHistoryState,
31
+ } from "@/fetch";
32
+ import { AnyFunction } from "@/types";
33
+ import {
34
+ _URL,
35
+ Error,
36
+ String,
37
+ Reflect_get,
38
+ Array_isArray,
39
+ Reflect_has,
40
+ Reflect_apply,
41
+ Reflect_construct,
42
+ Object_getOwnPropertyDescriptor,
43
+ Object_defineProperty,
44
+ Object_defineProperties,
45
+ _Map,
46
+ } from "@/shared/snapshot";
47
+
48
+ // https://github.com/Microsoft/TypeScript/issues/27024#issuecomment-421529650
49
+ type IfEquals<T, U, Y = unknown, N = never> =
50
+ (<G>() => G extends T ? 1 : 2) extends <G>() => G extends U ? 1 : 2 ? Y : N;
51
+ // thank you psm (https://github.com/psmpm) <3
52
+ type Traverse<
53
+ O extends Record<any, any>,
54
+ P extends string,
55
+ > = P extends `${infer K}.${infer R}` ? Traverse<O[K], R> : O[P];
56
+ type GlobalTraverse<P extends string> = Traverse<
57
+ GlobalThis & Record<string, any>,
58
+ P
59
+ >;
60
+ type ProxyApplyThis<T extends string> =
61
+ unknown extends ThisParameterType<Extract<GlobalTraverse<T>, AnyFunction>>
62
+ ? T extends `${infer ClassName}.prototype.${string}`
63
+ ? GlobalTraverse<ClassName> extends { prototype: infer Proto }
64
+ ? Proto
65
+ : unknown
66
+ : unknown
67
+ : ThisParameterType<Extract<GlobalTraverse<T>, AnyFunction>>;
68
+
69
+ export type ScramjetClientInit = {
70
+ context: ScramjetContext;
71
+ transport: ProxyTransport;
72
+ sendSetCookie: (
73
+ cookies: CookieSyncEntry[],
74
+ options?: CookieSyncOptions
75
+ ) => Promise<void>;
76
+ shouldBlockMessageEvent?: (ev: MessageEvent) => boolean;
77
+ hookSubcontext: (self: Self, frame?: HTMLIFrameElement) => ScramjetClient;
78
+ initHeaders: RawHeaders;
79
+ history: TrackedHistoryState[];
80
+ };
81
+ type NativeStore = {
82
+ store: Record<string, any>;
83
+ construct: <T extends string>(
84
+ target: T,
85
+ ...args: ConstructorParameters<GlobalTraverse<T>>
86
+ ) => InstanceType<GlobalTraverse<T>>;
87
+ call: <T extends string>(
88
+ target: T,
89
+ that: ProxyApplyThis<T>,
90
+ ...args: Parameters<GlobalTraverse<T>>
91
+ ) => ReturnType<GlobalTraverse<T>>;
92
+ };
93
+ type DescriptorStore = {
94
+ store: Record<string, PropertyDescriptor>;
95
+ get: <T extends string>(target: T, that: any) => GlobalTraverse<T>;
96
+ set: <T extends string>(
97
+ target: T,
98
+ that: any,
99
+ value: GlobalTraverse<T>
100
+ ) => void;
101
+ };
102
+
103
+ export type ProxyCtx<
104
+ T extends string = string,
105
+ U extends "construct" | "apply" = "apply",
106
+ > = {
107
+ fn: GlobalTraverse<T>;
108
+ this: IfEquals<U, "construct", null, ProxyApplyThis<T>>;
109
+ args: IfEquals<
110
+ U,
111
+ "construct",
112
+ ConstructorParameters<GlobalTraverse<T>>,
113
+ Parameters<GlobalTraverse<T>>
114
+ >;
115
+ newTarget: IfEquals<U, "construct", GlobalTraverse<T>, null>;
116
+ return: (
117
+ r: IfEquals<
118
+ U,
119
+ "construct",
120
+ InstanceType<GlobalTraverse<T>>,
121
+ ReturnType<GlobalTraverse<T>>
122
+ >
123
+ ) => void;
124
+ call: () => IfEquals<
125
+ U,
126
+ "construct",
127
+ InstanceType<GlobalTraverse<T>>,
128
+ ReturnType<GlobalTraverse<T>>
129
+ >;
130
+ };
131
+ export type Proxy<T extends string = string> = {
132
+ construct?(ctx: ProxyCtx<T, "construct">): any;
133
+ apply?(ctx: ProxyCtx<T, "apply">): any;
134
+ };
135
+
136
+ export type TrapCtx<T extends string> = {
137
+ this: any;
138
+ get: () => GlobalTraverse<T>;
139
+ set: (v: GlobalTraverse<T>) => void;
140
+ };
141
+ export type Trap<T extends string> = {
142
+ writable?: boolean;
143
+ value?: any;
144
+ enumerable?: boolean;
145
+ configurable?: boolean;
146
+ get?: (ctx: TrapCtx<T>) => GlobalTraverse<T>;
147
+ set?: (ctx: TrapCtx<T>, v: GlobalTraverse<T>) => void;
148
+ };
149
+
150
+ export type ScramjetModule = {
151
+ enabled: (client: ScramjetClient) => boolean | undefined;
152
+ disabled: (client: ScramjetClient, self: GlobalThis) => void | undefined;
153
+ order: number | undefined;
154
+ default: (client: ScramjetClient, self: GlobalThis) => void;
155
+ };
156
+
157
+ function findBox(global: Window, seen: Window[]): SingletonBox | null {
158
+ if (seen.includes(global)) return null;
159
+ seen.push(global);
160
+
161
+ try {
162
+ if ((SCRAMJETCLIENT in global) as any) {
163
+ return global[SCRAMJETCLIENT].box;
164
+ }
165
+ } catch {}
166
+
167
+ try {
168
+ const b = findBox(global.parent, seen);
169
+ if (b) return b;
170
+ } catch {}
171
+
172
+ try {
173
+ const b = findBox(global.top, seen);
174
+ if (b) return b;
175
+ } catch {}
176
+
177
+ try {
178
+ if (global.opener) {
179
+ const b = findBox(global.opener, seen);
180
+ if (b) return b;
181
+ }
182
+ } catch {}
183
+
184
+ for (let i = 0; i < global.length; i++) {
185
+ try {
186
+ const b = findBox(global[i], seen);
187
+ if (b) return b;
188
+ } catch {}
189
+ }
190
+
191
+ return null;
192
+ }
193
+
194
+ export class ScramjetClient {
195
+ locationProxy: any;
196
+ serviceWorker: ServiceWorkerContainer;
197
+ bare: BareCompatibleClient;
198
+
199
+ natives: NativeStore;
200
+ descriptors: DescriptorStore;
201
+ wrapfn: (i: any, ...args: any) => any;
202
+
203
+ eventcallbacks: Map<
204
+ any,
205
+ [
206
+ {
207
+ event: string;
208
+ originalCallback: AnyFunction;
209
+ proxiedCallback: AnyFunction;
210
+ },
211
+ ]
212
+ > = new _Map();
213
+
214
+ meta: URLMeta;
215
+
216
+ box: SingletonBox;
217
+
218
+ context: ScramjetContext;
219
+
220
+ initHeaders: ScramjetHeaders;
221
+
222
+ history: TrackedHistoryState[];
223
+
224
+ private flagCache = new _Map<keyof ScramjetConfig["flags"], boolean>();
225
+
226
+ hooks = {
227
+ rewriter: {
228
+ html: Tap.create<HtmlRewriterHooks>(),
229
+ },
230
+ lifecycle: Tap.create<LifecycleHooks>(),
231
+ };
232
+
233
+ constructor(
234
+ public global: GlobalThis,
235
+ public init: ScramjetClientInit
236
+ ) {
237
+ if (SCRAMJETCLIENT in global) {
238
+ dbg.error(
239
+ "attempted to initialize a scramjet client, but one is already loaded - this is very bad"
240
+ );
241
+ throw new Error();
242
+ }
243
+
244
+ if (iswindow) {
245
+ const b = findBox(global as unknown as Window, []);
246
+ if (b) {
247
+ this.box = b;
248
+ }
249
+ }
250
+
251
+ if (!this.box) {
252
+ this.box = new SingletonBox(this);
253
+ }
254
+
255
+ this.box.registerClient(this, global as Self);
256
+
257
+ this.context = init.context;
258
+ if (init.initHeaders)
259
+ this.initHeaders = ScramjetHeaders.fromRawHeaders(init.initHeaders);
260
+ this.history = init.history;
261
+ this.context.hooks = {
262
+ rewriter: this.hooks.rewriter,
263
+ };
264
+
265
+ this.bare = new BareCompatibleClient(init.transport);
266
+
267
+ this.serviceWorker = this.global.navigator.serviceWorker;
268
+
269
+ if (iswindow) {
270
+ global.document[SCRAMJETCLIENT] = this;
271
+ }
272
+
273
+ this.wrapfn = createWrapFn(this, global);
274
+ this.natives = {
275
+ store: new Proxy(
276
+ {},
277
+ {
278
+ get: (target, prop: string) => {
279
+ if (prop in target) {
280
+ return target[prop];
281
+ }
282
+
283
+ const split = prop.split(".");
284
+ const realProp = split.pop();
285
+ const realTarget = split.reduce((a, b) => a?.[b], this.global);
286
+
287
+ if (!realTarget) return;
288
+
289
+ const original = Reflect_get(realTarget, realProp);
290
+ target[prop] = original;
291
+
292
+ return target[prop];
293
+ },
294
+ }
295
+ ),
296
+ construct(target, ...args) {
297
+ const original = this.store[target];
298
+ if (!original) return null;
299
+
300
+ return new original(...args);
301
+ },
302
+ call(target, that, ...args) {
303
+ const original = this.store[target];
304
+ if (!original) return null;
305
+
306
+ return original.call(that, ...args);
307
+ },
308
+ };
309
+ this.descriptors = {
310
+ store: new Proxy(
311
+ {},
312
+ {
313
+ get: (target, prop: string) => {
314
+ if (prop in target) {
315
+ return target[prop];
316
+ }
317
+
318
+ const split = prop.split(".");
319
+ const realProp = split.pop();
320
+ const realTarget = split.reduce((a, b) => a?.[b], this.global);
321
+
322
+ if (!realTarget) return;
323
+
324
+ const original = client.natives.call(
325
+ "Object.getOwnPropertyDescriptor",
326
+ null,
327
+ realTarget,
328
+ realProp
329
+ );
330
+ target[prop] = original;
331
+
332
+ return target[prop];
333
+ },
334
+ }
335
+ ),
336
+ get(target, that) {
337
+ const original = this.store[target];
338
+ if (!original) return null;
339
+
340
+ return original.get!.call(that);
341
+ },
342
+ set(target, that, value) {
343
+ const original = this.store[target];
344
+ if (!original) return null;
345
+
346
+ original.set!.call(that, value);
347
+ },
348
+ };
349
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
350
+ const client = this;
351
+ this.meta = {
352
+ get origin() {
353
+ return client.url;
354
+ },
355
+ get base() {
356
+ if (iswindow) {
357
+ const base = client.natives.call(
358
+ "Document.prototype.querySelector",
359
+ client.global.document,
360
+ "base"
361
+ );
362
+ if (base) {
363
+ let url = base.getAttribute("href");
364
+ if (!url) return client.url;
365
+ const frag = url.indexOf("#");
366
+ url = url.substring(0, frag === -1 ? undefined : frag);
367
+ if (!url) return client.url;
368
+
369
+ return new _URL(url, client.url.origin);
370
+ }
371
+ }
372
+
373
+ return client.url;
374
+ },
375
+ // TODO: very bad assumptions made here, window.parent never throws
376
+ get topFrameName() {
377
+ if (!iswindow)
378
+ throw new Error("topFrameName was called from a worker?");
379
+
380
+ let currentWin = client.global;
381
+
382
+ try {
383
+ if (currentWin.parent.window == currentWin.window) {
384
+ // we're top level & we don't have a frame name
385
+ return null;
386
+ }
387
+ } catch {
388
+ // accessing parent was blocked by CORS, we're in a frame but the parent is cross origin
389
+ }
390
+
391
+ try {
392
+ // find the topmost frame that's controlled by scramjet, stopping before the real top frame
393
+ while (currentWin.parent.window !== currentWin.window) {
394
+ if (!currentWin.parent.window[SCRAMJETCLIENT]) break;
395
+ currentWin = currentWin.parent.window;
396
+ }
397
+ } catch {
398
+ // doesn't matter if it throws here just means we found the topmost one
399
+ }
400
+
401
+ const curclient = currentWin[SCRAMJETCLIENT];
402
+ const frame = curclient.descriptors.get(
403
+ "window.frameElement",
404
+ currentWin
405
+ );
406
+ if (!frame) {
407
+ // we're inside an iframe, but the top frame is scramjet-controlled and top level, so we can't get a top frame name
408
+ // or we're cross-origin and frameElement doesn't exist. that's a TODO because this won't work
409
+ return null;
410
+ }
411
+ if (!frame.name) {
412
+ // the top frame is scramjet-controlled, but it has no name. this is user error
413
+ dbg.error(
414
+ "YOU NEED TO USE `new ScramjetFrame()`! DIRECT IFRAMES WILL NOT WORK"
415
+ );
416
+
417
+ return null;
418
+ }
419
+
420
+ return frame.name;
421
+ },
422
+ get parentFrameName() {
423
+ if (!iswindow)
424
+ throw new Error("parentFrameName was called from a worker?");
425
+
426
+ try {
427
+ try {
428
+ if (client.global.parent.window == client.global.window) {
429
+ // we're top level & we don't have a frame name
430
+ return null;
431
+ }
432
+ } catch {
433
+ // accessing parent was blocked by CORS, we're in a frame but the parent is cross origin
434
+ return null;
435
+ }
436
+
437
+ const parentWin = client.global.parent.window;
438
+ if (parentWin[SCRAMJETCLIENT]) {
439
+ // we're inside an iframe, and the parent is scramjet-controlled
440
+ const parentClient = parentWin[SCRAMJETCLIENT];
441
+ const frame = parentClient.descriptors.get(
442
+ "window.frameElement",
443
+ parentWin
444
+ );
445
+
446
+ if (!frame) {
447
+ // parent is scramjet controlled and top-level. there is no parent frame name
448
+ return null;
449
+ }
450
+
451
+ if (!frame.name) {
452
+ // the parent frame is scramjet-controlled, but it has no name. this is user error
453
+ dbg.error(
454
+ "YOU NEED TO USE `new ScramjetFrame()`! DIRECT IFRAMES WILL NOT WORK"
455
+ );
456
+
457
+ return null;
458
+ }
459
+
460
+ return frame.name;
461
+ } else {
462
+ // we're inside an iframe, and the parent is not scramjet-controlled
463
+ // return our own frame name
464
+ const frame = client.descriptors.get(
465
+ "window.frameElement",
466
+ client.global
467
+ );
468
+ if (!frame.name) {
469
+ // the parent frame is not scramjet-controlled, so we can't get a parent frame name
470
+ dbg.error(
471
+ "YOU NEED TO USE `new ScramjetFrame()`! DIRECT IFRAMES WILL NOT WORK"
472
+ );
473
+
474
+ return null;
475
+ }
476
+
477
+ return frame.name;
478
+ }
479
+ } catch {
480
+ return null;
481
+ }
482
+ },
483
+ get referrerPolicy(): string | undefined {
484
+ if (client.initHeaders && client.initHeaders.has("referrer-policy")) {
485
+ return client.initHeaders.get("referrer-policy");
486
+ }
487
+ if (!iswindow) return "";
488
+
489
+ // TODO: need to nullify the actual meta tag so it still sends unsafe-url
490
+ const meta = [
491
+ ...client.natives.call(
492
+ "Document.prototype.querySelectorAll",
493
+ client.global.document,
494
+ "meta[name='referrer']"
495
+ ),
496
+ ...client.natives.call(
497
+ "Document.prototype.querySelectorAll",
498
+ client.global.document,
499
+ "meta[name='referrer-policy']"
500
+ ),
501
+ ...client.natives.call(
502
+ "Document.prototype.querySelectorAll",
503
+ client.global.document,
504
+ "meta[http-equiv='referrer-policy']"
505
+ ),
506
+ ];
507
+ const last = meta[meta.length - 1];
508
+ if (last) {
509
+ return last.getAttribute("content");
510
+ }
511
+
512
+ return "";
513
+ },
514
+ };
515
+ this.locationProxy = createLocationProxy(this, global);
516
+
517
+ global[SCRAMJETCLIENT] = this;
518
+ }
519
+
520
+ /** Apply document injection init when a client was already installed (e.g. early contentWindow). */
521
+ syncDocumentInit(init: {
522
+ initHeaders: RawHeaders;
523
+ history: TrackedHistoryState[];
524
+ cookies?: string;
525
+ }) {
526
+ this.initHeaders = ScramjetHeaders.fromRawHeaders(init.initHeaders);
527
+ this.history = init.history;
528
+ if (init.cookies !== undefined) {
529
+ this.context.cookieJar.load(init.cookies);
530
+ }
531
+ }
532
+
533
+ hook() {
534
+ const context = import.meta.webpackContext(".", {
535
+ recursive: true,
536
+ });
537
+
538
+ const modules: ScramjetModule[] = [];
539
+
540
+ for (const key of context.keys()) {
541
+ const module = context(key) as ScramjetModule;
542
+ if (!key.endsWith(".ts")) continue;
543
+ if (
544
+ (key.startsWith("./dom/") && "window" in this.global) ||
545
+ (key.startsWith("./worker/") && "WorkerGlobalScope" in this.global) ||
546
+ key.startsWith("./shared/")
547
+ ) {
548
+ modules.push(module);
549
+ }
550
+ }
551
+
552
+ modules.sort((a, b) => {
553
+ const aorder = a.order || 0;
554
+ const border = b.order || 0;
555
+
556
+ return aorder - border;
557
+ });
558
+
559
+ for (const module of modules) {
560
+ if (!module.enabled || module.enabled(this))
561
+ module.default(this, this.global);
562
+ else if (module.disabled) module.disabled(this, this.global);
563
+ }
564
+ }
565
+
566
+ get url(): _URL {
567
+ return new _URL(this.unrewriteUrl(this.global.location.href));
568
+ }
569
+
570
+ set url(url: _URL | string) {
571
+ url = String(url);
572
+
573
+ Tap.dispatch(
574
+ this.hooks.lifecycle.navigate,
575
+ {
576
+ type: "location",
577
+ },
578
+ {
579
+ url,
580
+ }
581
+ );
582
+
583
+ this.global.location.href = this.rewriteUrl(url, {
584
+ navigateType: "location",
585
+ });
586
+ }
587
+
588
+ // below are the utilities for proxying and trapping dom APIs
589
+ // you don't have to understand this it just makes the rest easier
590
+ // i'll document it eventually
591
+ Proxy<T extends string>(name: T, handler: Proxy<T>): void;
592
+ Proxy<const T extends readonly string[]>(
593
+ name: T,
594
+ handler: Proxy<T[number]>
595
+ ): void;
596
+ Proxy(name: string | string[], handler: Proxy<any>): void {
597
+ if (Array_isArray(name)) {
598
+ for (const n of name) {
599
+ this.Proxy(n, handler);
600
+ }
601
+
602
+ return;
603
+ }
604
+
605
+ const split = name.split(".");
606
+ const prop = split.pop();
607
+ const target = split.reduce((a, b) => a?.[b], this.global);
608
+ if (!target) return;
609
+ if (!prop) return;
610
+
611
+ if (!(name in this.natives.store)) {
612
+ const original = Reflect_get(target, prop);
613
+ this.natives.store[name] = original;
614
+ }
615
+
616
+ this.RawProxy(target, prop, handler, name);
617
+ }
618
+ RawProxy(target: any, prop: string, handler: Proxy<any>, debugname?: string) {
619
+ if (!target) return;
620
+ if (!prop) return;
621
+ if (!Reflect_has(target, prop)) return;
622
+
623
+ const value = Reflect_get(target, prop);
624
+ const originalDescriptor = Object_getOwnPropertyDescriptor(target, prop);
625
+ delete target[prop];
626
+
627
+ const h: ProxyHandler<any> = {};
628
+
629
+ let applyFn: typeof Reflect_apply;
630
+ let constructFn: typeof Reflect_construct;
631
+ if (this.flagEnabled("debugTrampolines")) {
632
+ let fnName: string;
633
+ if (debugname) {
634
+ fnName = debugname;
635
+ } else if (typeof value === "function" && value.name) {
636
+ fnName = `Function ${value.name} -> ${prop}`;
637
+ } else if (typeof value === "object" && value.constructor) {
638
+ fnName = `Object ${value.constructor.name} -> ${prop}`;
639
+ } else {
640
+ fnName = `${typeof value} -> ${prop}`;
641
+ }
642
+ let windowName = this.descriptors.get("window.name", this.global);
643
+ if (!windowName) windowName = "<unnamed window>";
644
+ let location = this.url.href;
645
+
646
+ // sanitize newlines just in case somehow
647
+ location = location.replace(/\n/g, "\\n").replace(/\r/g, "\\r");
648
+ windowName = windowName.replace(/\n/g, "\\n").replace(/\r/g, "\\r");
649
+ fnName = fnName.replace(/\n/g, "\\n").replace(/\r/g, "\\r");
650
+ const sourceURL = debugname ? `${debugname}.sj` : "rawproxy.sj";
651
+
652
+ const { construct, apply } = this.natives.call(
653
+ "Function",
654
+ null,
655
+ `"use strict";
656
+
657
+ // SCRAMJET FUNCTION INTERCEPT
658
+ // target: ${fnName}
659
+ // frame: ${windowName}
660
+ // location: ${location}
661
+
662
+ function apply(fn, that, args) {
663
+ return Reflect.apply(fn, that, args);
664
+ }
665
+
666
+ function construct(fn, args, newTarget) {
667
+ return Reflect.construct(fn, args, newTarget);
668
+ }
669
+
670
+ return { apply, construct };
671
+
672
+ //# sourceURL=${sourceURL}`
673
+ )();
674
+
675
+ applyFn = apply;
676
+ constructFn = construct;
677
+ } else {
678
+ applyFn = Reflect_apply;
679
+ constructFn = Reflect_construct;
680
+ }
681
+
682
+ if (handler.construct) {
683
+ h.construct = function (
684
+ constructor: any,
685
+ args: any[],
686
+ newTarget: AnyFunction
687
+ ) {
688
+ let returnValue: any = undefined;
689
+ let earlyreturn = false;
690
+
691
+ const ctx: ProxyCtx<any, "construct"> = {
692
+ fn: constructor,
693
+ this: null,
694
+ args,
695
+ newTarget: newTarget,
696
+ return: (r: any) => {
697
+ earlyreturn = true;
698
+ returnValue = r;
699
+ },
700
+ call: () => {
701
+ earlyreturn = true;
702
+ returnValue = constructFn(ctx.fn, ctx.args, ctx.newTarget);
703
+
704
+ return returnValue;
705
+ },
706
+ };
707
+
708
+ handler.construct(ctx);
709
+
710
+ if (earlyreturn) {
711
+ return returnValue;
712
+ }
713
+
714
+ return constructFn(ctx.fn, ctx.args, ctx.newTarget);
715
+ };
716
+ }
717
+
718
+ if (handler.apply) {
719
+ h.apply = (fn: any, that: any, args: any[]) => {
720
+ let returnValue: any = undefined;
721
+ let earlyreturn = false;
722
+
723
+ const ctx: ProxyCtx<any, "apply"> = {
724
+ fn,
725
+ this: that,
726
+ args,
727
+ newTarget: null,
728
+ return: (r: any) => {
729
+ earlyreturn = true;
730
+ returnValue = r;
731
+ },
732
+ call: () => {
733
+ earlyreturn = true;
734
+ returnValue = applyFn(ctx.fn, ctx.this, ctx.args);
735
+
736
+ return returnValue;
737
+ },
738
+ };
739
+ if (
740
+ !this.flagEnabled("debugTrampolines") &&
741
+ this.flagEnabled("allowFailedIntercepts")
742
+ ) {
743
+ // fast path, no error detection
744
+ handler.apply(ctx);
745
+
746
+ if (earlyreturn) {
747
+ return returnValue;
748
+ }
749
+ return applyFn(ctx.fn, ctx.this, ctx.args);
750
+ }
751
+
752
+ const pst = Error.prepareStackTrace;
753
+
754
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
755
+ const client = this;
756
+ Error.prepareStackTrace = function (err, s) {
757
+ if (
758
+ s[0].getFileName() &&
759
+ !s[0].getFileName().startsWith(client.context.prefix.href)
760
+ ) {
761
+ return { stack: err.stack };
762
+ }
763
+ };
764
+
765
+ try {
766
+ handler.apply(ctx);
767
+ } catch (err) {
768
+ if (this.box.instanceof(err, "Error")) {
769
+ if (this.box.instanceof(err.stack, "Object")) {
770
+ //i'm not going to explain this
771
+ err.stack = err.stack.stack;
772
+ // eslint-disable-next-line scramjet-core/no-globals
773
+ console.error("ERROR FROM SCRAMJET INTERNALS", err);
774
+ if (!this.flagEnabled("allowFailedIntercepts")) {
775
+ Error.prepareStackTrace = pst;
776
+ throw err;
777
+ }
778
+ } else {
779
+ Error.prepareStackTrace = pst;
780
+ throw err;
781
+ }
782
+ } else {
783
+ Error.prepareStackTrace = pst;
784
+ throw err;
785
+ }
786
+ }
787
+
788
+ Error.prepareStackTrace = pst;
789
+
790
+ if (earlyreturn) {
791
+ return returnValue;
792
+ }
793
+
794
+ return applyFn(ctx.fn, ctx.this, ctx.args);
795
+ };
796
+ }
797
+
798
+ const proxy = new Proxy(value, h);
799
+ this.box.unproxy.set(proxy, value);
800
+ h.getOwnPropertyDescriptor = getOwnPropertyDescriptorHandler;
801
+ // Preserve original property descriptor (enumerable, configurable, etc.)
802
+ Object_defineProperty(target, prop, {
803
+ value: proxy,
804
+ writable: originalDescriptor?.writable ?? true,
805
+ enumerable: originalDescriptor?.enumerable ?? false,
806
+ configurable: originalDescriptor?.configurable ?? true,
807
+ });
808
+ }
809
+ Trap<T extends string>(name: T, handler: Trap<T>): void;
810
+ Trap<const T extends readonly string[]>(
811
+ name: T,
812
+ handler: Trap<T[number]>
813
+ ): void;
814
+ Trap(name: string | string[], descriptor: Trap<any>): void {
815
+ if (Array_isArray(name)) {
816
+ for (const n of name) {
817
+ this.Trap(n, descriptor);
818
+ }
819
+
820
+ return;
821
+ }
822
+
823
+ const split = name.split(".");
824
+ const prop = split.pop();
825
+ const target = split.reduce((a, b) => a?.[b], this.global);
826
+ if (!target) return;
827
+ if (!prop) return;
828
+
829
+ const original = this.natives.call(
830
+ "Object.getOwnPropertyDescriptor",
831
+ null,
832
+ target,
833
+ prop
834
+ );
835
+ this.descriptors.store[name] = original;
836
+
837
+ this.RawTrap(target, prop, descriptor);
838
+ }
839
+ RawTrap(target: any, prop: string, descriptor: Trap<any>) {
840
+ if (!target) return;
841
+ if (!prop) return;
842
+ if (!Reflect_has(target, prop)) return;
843
+
844
+ const oldDescriptor = this.natives.call(
845
+ "Object.getOwnPropertyDescriptor",
846
+ null,
847
+ target,
848
+ prop
849
+ );
850
+
851
+ const ctx: TrapCtx<any> = {
852
+ this: null,
853
+ get: function () {
854
+ return oldDescriptor && oldDescriptor.get.call(this.this);
855
+ },
856
+ set: function (v: any) {
857
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
858
+ oldDescriptor && oldDescriptor.set.call(this.this, v);
859
+ },
860
+ };
861
+
862
+ delete target[prop];
863
+
864
+ const desc: PropertyDescriptor = {};
865
+
866
+ if (descriptor.get) {
867
+ desc.get = function () {
868
+ ctx.this = this;
869
+
870
+ return descriptor.get(ctx);
871
+ };
872
+ } else if (oldDescriptor?.get) {
873
+ desc.get = oldDescriptor.get;
874
+ }
875
+
876
+ if (descriptor.set) {
877
+ desc.set = function (v: any) {
878
+ ctx.this = this;
879
+
880
+ descriptor.set(ctx, v);
881
+ };
882
+ } else if (oldDescriptor?.set) {
883
+ desc.set = oldDescriptor.set;
884
+ }
885
+
886
+ if (descriptor.enumerable) desc.enumerable = descriptor.enumerable;
887
+ else if (oldDescriptor?.enumerable)
888
+ desc.enumerable = oldDescriptor.enumerable;
889
+ if (descriptor.configurable) desc.configurable = descriptor.configurable;
890
+ else if (oldDescriptor?.configurable)
891
+ desc.configurable = oldDescriptor.configurable;
892
+
893
+ Object_defineProperty(target, prop, desc);
894
+ }
895
+
896
+ rewriteUrl(url: string | URL, options?: RewriteUrlOptions): string {
897
+ return rewriteUrl(url, this.context, this.meta, options);
898
+ }
899
+
900
+ unrewriteUrl(url: string | URL): string {
901
+ return unrewriteUrl(url, this.context);
902
+ }
903
+
904
+ flagEnabled(flag: keyof ScramjetConfig["flags"]): boolean {
905
+ const cached = this.flagCache.get(flag);
906
+ if (cached !== undefined) return cached;
907
+
908
+ const result = flagEnabled(flag, this.context, this.url);
909
+ this.flagCache.set(flag, result);
910
+ return result;
911
+ }
912
+
913
+ get config(): ScramjetConfig {
914
+ return this.context.config;
915
+ }
916
+ }