peachsim 0.1.527

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 (324) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +640 -0
  3. package/cli/app-config.ts +82 -0
  4. package/cli/app-fonts.ts +388 -0
  5. package/cli/app-project.ts +59 -0
  6. package/cli/app-splash.ts +171 -0
  7. package/cli/app-state-reset.ts +26 -0
  8. package/cli/auth.ts +184 -0
  9. package/cli/bin.ts +59 -0
  10. package/cli/bridge-diagnostics.ts +226 -0
  11. package/cli/bridge-flow-runner.ts +2806 -0
  12. package/cli/browser-backend.ts +44 -0
  13. package/cli/browser-evals.ts +96 -0
  14. package/cli/cli-update.ts +261 -0
  15. package/cli/cloud-client.ts +1530 -0
  16. package/cli/cloud-dispatch.ts +206 -0
  17. package/cli/cloud-session.ts +227 -0
  18. package/cli/command-contract.ts +221 -0
  19. package/cli/command-registry.ts +304 -0
  20. package/cli/commands/agent-wrapper.ts +1048 -0
  21. package/cli/commands/agent.ts +439 -0
  22. package/cli/commands/app-fonts.ts +99 -0
  23. package/cli/commands/assert.ts +542 -0
  24. package/cli/commands/auth.ts +71 -0
  25. package/cli/commands/box/bundle-plane.ts +71 -0
  26. package/cli/commands/box/checkout-plane.ts +256 -0
  27. package/cli/commands/box/plane-share.ts +208 -0
  28. package/cli/commands/box/rnx-command.ts +60 -0
  29. package/cli/commands/box/search-command.ts +157 -0
  30. package/cli/commands/box.ts +925 -0
  31. package/cli/commands/camera.ts +266 -0
  32. package/cli/commands/cleanup.ts +169 -0
  33. package/cli/commands/compat.ts +176 -0
  34. package/cli/commands/config.ts +34 -0
  35. package/cli/commands/control.ts +2154 -0
  36. package/cli/commands/cpu-profile.ts +941 -0
  37. package/cli/commands/daemon-mac-app.ts +165 -0
  38. package/cli/commands/daemon.ts +800 -0
  39. package/cli/commands/debug.ts +751 -0
  40. package/cli/commands/desktop.ts +39 -0
  41. package/cli/commands/detect.ts +201 -0
  42. package/cli/commands/detox.ts +481 -0
  43. package/cli/commands/device.ts +134 -0
  44. package/cli/commands/diagnose.ts +589 -0
  45. package/cli/commands/do-chain.ts +408 -0
  46. package/cli/commands/electron.ts +94 -0
  47. package/cli/commands/film.ts +379 -0
  48. package/cli/commands/flow.ts +1240 -0
  49. package/cli/commands/inspect/actions.ts +516 -0
  50. package/cli/commands/inspect/core.ts +2086 -0
  51. package/cli/commands/inspect/count.ts +17 -0
  52. package/cli/commands/inspect/describe.ts +119 -0
  53. package/cli/commands/inspect/env.ts +25 -0
  54. package/cli/commands/inspect/find.ts +169 -0
  55. package/cli/commands/inspect/get-layout.ts +53 -0
  56. package/cli/commands/inspect/keyboard.ts +54 -0
  57. package/cli/commands/inspect/list.ts +175 -0
  58. package/cli/commands/inspect/memory.ts +215 -0
  59. package/cli/commands/inspect/redaction.ts +39 -0
  60. package/cli/commands/inspect/resolve-target.ts +77 -0
  61. package/cli/commands/inspect/screens.ts +78 -0
  62. package/cli/commands/inspect/settle.ts +32 -0
  63. package/cli/commands/inspect/settling.ts +197 -0
  64. package/cli/commands/inspect/shared.ts +259 -0
  65. package/cli/commands/inspect/sleep.ts +15 -0
  66. package/cli/commands/inspect/tree.ts +23 -0
  67. package/cli/commands/inspect/url.ts +17 -0
  68. package/cli/commands/inspect/wait-event.ts +211 -0
  69. package/cli/commands/inspect/wait-idle.ts +25 -0
  70. package/cli/commands/inspect/wait-ready.ts +87 -0
  71. package/cli/commands/inspect/wait-selector.ts +59 -0
  72. package/cli/commands/inspect/wait.ts +32 -0
  73. package/cli/commands/inspect.ts +4738 -0
  74. package/cli/commands/install-cli.ts +275 -0
  75. package/cli/commands/install-desktop.ts +385 -0
  76. package/cli/commands/login.ts +357 -0
  77. package/cli/commands/logout.ts +24 -0
  78. package/cli/commands/maestro-generate.ts +375 -0
  79. package/cli/commands/maestro.ts +536 -0
  80. package/cli/commands/mode.ts +58 -0
  81. package/cli/commands/no-bridge-hint.ts +80 -0
  82. package/cli/commands/perf.ts +67 -0
  83. package/cli/commands/permissions.ts +203 -0
  84. package/cli/commands/platform.ts +410 -0
  85. package/cli/commands/preview.ts +103 -0
  86. package/cli/commands/profile.ts +106 -0
  87. package/cli/commands/react.ts +353 -0
  88. package/cli/commands/record.ts +1435 -0
  89. package/cli/commands/report-issue.ts +305 -0
  90. package/cli/commands/reset.ts +89 -0
  91. package/cli/commands/runtime.ts +348 -0
  92. package/cli/commands/screenshot-command.ts +106 -0
  93. package/cli/commands/screenshot-layers.ts +144 -0
  94. package/cli/commands/screenshot-mode.ts +38 -0
  95. package/cli/commands/screenshot.ts +492 -0
  96. package/cli/commands/screenshots-capture.ts +608 -0
  97. package/cli/commands/screenshots.ts +127 -0
  98. package/cli/commands/serve.ts +139 -0
  99. package/cli/commands/setup.ts +416 -0
  100. package/cli/commands/shell-boolean-mode.ts +82 -0
  101. package/cli/commands/skills.ts +468 -0
  102. package/cli/commands/slides.ts +357 -0
  103. package/cli/commands/state.ts +94 -0
  104. package/cli/commands/storage.ts +58 -0
  105. package/cli/commands/telemetry.ts +55 -0
  106. package/cli/commands/test.ts +535 -0
  107. package/cli/commands/three-mode.ts +771 -0
  108. package/cli/commands/timeline.ts +121 -0
  109. package/cli/commands/upgrade.ts +167 -0
  110. package/cli/commands/upload.ts +1203 -0
  111. package/cli/commands/version.ts +63 -0
  112. package/cli/commands/welcome.ts +17 -0
  113. package/cli/commands/what-happened.ts +328 -0
  114. package/cli/current-sim.ts +217 -0
  115. package/cli/desktop-companion.ts +315 -0
  116. package/cli/drivers/electron.ts +70 -0
  117. package/cli/drivers/index.ts +20 -0
  118. package/cli/drivers/playwright-provisioning.ts +184 -0
  119. package/cli/drivers/playwright-sim-host.ts +537 -0
  120. package/cli/drivers/playwright.ts +209 -0
  121. package/cli/drivers/registry.ts +65 -0
  122. package/cli/drivers/types.ts +102 -0
  123. package/cli/flow-export.ts +55 -0
  124. package/cli/flow-file.ts +142 -0
  125. package/cli/flow-live-status.ts +126 -0
  126. package/cli/flow-session.ts +140 -0
  127. package/cli/help-core.ts +143 -0
  128. package/cli/help.ts +44 -0
  129. package/cli/hidden-runtime-alias.ts +19 -0
  130. package/cli/hints.ts +214 -0
  131. package/cli/inspect-notice-state.ts +114 -0
  132. package/cli/internal-child.ts +176 -0
  133. package/cli/maestro-js.ts +323 -0
  134. package/cli/main.ts +704 -0
  135. package/cli/open-url.ts +8 -0
  136. package/cli/outbound-endpoints.ts +830 -0
  137. package/cli/parent-pid.ts +204 -0
  138. package/cli/parse-args.ts +189 -0
  139. package/cli/privacy.ts +53 -0
  140. package/cli/prompt.ts +56 -0
  141. package/cli/recording-access.ts +108 -0
  142. package/cli/registry.ts +2 -0
  143. package/cli/resolve-assets.ts +63 -0
  144. package/cli/rnx-in-process.ts +98 -0
  145. package/cli/run-registry.ts +226 -0
  146. package/cli/run-rnx-core.ts +148 -0
  147. package/cli/run-rnx.ts +137 -0
  148. package/cli/runtime-notes.ts +66 -0
  149. package/cli/runtime-summary.ts +25 -0
  150. package/cli/secure-file.ts +31 -0
  151. package/cli/self-invocation.ts +58 -0
  152. package/cli/send-to-box.ts +109 -0
  153. package/cli/setup-repository.ts +191 -0
  154. package/cli/shell-init.ts +98 -0
  155. package/cli/standalone.ts +4 -0
  156. package/cli/telemetry.ts +84 -0
  157. package/cli/ui.ts +68 -0
  158. package/cli/ws-bridge.ts +1020 -0
  159. package/detox/attempt-events.cjs +23 -0
  160. package/detox/colors.ts +54 -0
  161. package/detox/config-loader.ts +135 -0
  162. package/detox/element-types.ts +48 -0
  163. package/detox/expectations.ts +534 -0
  164. package/detox/gestures.ts +501 -0
  165. package/detox/index.ts +2694 -0
  166. package/detox/jest-preset.cjs +29 -0
  167. package/detox/jest-setup-after-env.cjs +22 -0
  168. package/detox/matchers.ts +30 -0
  169. package/detox/motion-change.cjs +109 -0
  170. package/detox/motion-change.d.cts +35 -0
  171. package/detox/navigation-lifecycle.ts +290 -0
  172. package/detox/navigation.ts +43 -0
  173. package/detox/proof-frame.cjs +114 -0
  174. package/detox/record-block-execution.cjs +78 -0
  175. package/detox/screenshots/animated-color-test-rest-norngh.png +0 -0
  176. package/detox/screenshots/color-test-after-drag-norngh.png +0 -0
  177. package/detox/screenshots/color-test-rest-norngh.png +0 -0
  178. package/detox/screenshots/theme-blue-toggle.png +0 -0
  179. package/detox/screenshots/theme-blue.png +0 -0
  180. package/detox/screenshots/theme-red-toggle.png +0 -0
  181. package/detox/screenshots/theme-red.png +0 -0
  182. package/dist-lib/agent-daemon-client.cjs +502 -0
  183. package/dist-lib/agent-events.cjs +48 -0
  184. package/dist-lib/agent-identity.cjs +53 -0
  185. package/dist-lib/agent-sessions.cjs +759 -0
  186. package/dist-lib/attached-projects.cjs +526 -0
  187. package/dist-lib/auth/shared-session.cjs +208 -0
  188. package/dist-lib/backend-origin.cjs +88 -0
  189. package/dist-lib/beta.cjs +41 -0
  190. package/dist-lib/beta.mjs +13 -0
  191. package/dist-lib/bridge-constants.cjs +161 -0
  192. package/dist-lib/bridge-contract-input.cjs +451 -0
  193. package/dist-lib/bridge-contract-input.mjs +414 -0
  194. package/dist-lib/bridge-contract.cjs +130 -0
  195. package/dist-lib/bridge-contract.mjs +94 -0
  196. package/dist-lib/capture-contract.cjs +220 -0
  197. package/dist-lib/capture-contract.mjs +190 -0
  198. package/dist-lib/cli-constants.cjs +32 -0
  199. package/dist-lib/cloud-contract.cjs +194 -0
  200. package/dist-lib/cloud-contract.mjs +145 -0
  201. package/dist-lib/cloud.cjs +670 -0
  202. package/dist-lib/cloud.mjs +639 -0
  203. package/dist-lib/config.cjs +96 -0
  204. package/dist-lib/detox/index.cjs +3789 -0
  205. package/dist-lib/detox/jest-preset.cjs +29 -0
  206. package/dist-lib/dev-bundle-resolution.cjs +290 -0
  207. package/dist-lib/home-paths.cjs +638 -0
  208. package/dist-lib/host/bridge-host.cjs +10903 -0
  209. package/dist-lib/host/fetch-proxy-handler.cjs +421 -0
  210. package/dist-lib/host/fetch-proxy-overrides.cjs +63 -0
  211. package/dist-lib/host/fetch-proxy-overrides.mjs +37 -0
  212. package/dist-lib/host/replacement-module-handler.cjs +469 -0
  213. package/dist-lib/host/websocket-proxy.cjs +298 -0
  214. package/dist-lib/index.cjs +4268 -0
  215. package/dist-lib/jump-to-source-babel.cjs +93 -0
  216. package/dist-lib/jump-to-source-native.cjs +112 -0
  217. package/dist-lib/menu.cjs +646 -0
  218. package/dist-lib/menu.mjs +604 -0
  219. package/dist-lib/metro-fingerprint-registry.cjs +186 -0
  220. package/dist-lib/metro-fingerprint-registry.mjs +156 -0
  221. package/dist-lib/metro-production-bundle.cjs +329 -0
  222. package/dist-lib/metro-production-bundle.mjs +295 -0
  223. package/dist-lib/metro.cjs +904 -0
  224. package/dist-lib/profiles.cjs +246 -0
  225. package/dist-lib/public-brand.cjs +39 -0
  226. package/dist-lib/react-native-host-modules.cjs +51 -0
  227. package/dist-lib/react-native-host-modules.mjs +25 -0
  228. package/dist-lib/render-mode.cjs +54 -0
  229. package/dist-lib/scripts/dev-server-scanner.cjs +1232 -0
  230. package/dist-lib/sdk.cjs +2433 -0
  231. package/dist-lib/sdk.mjs +2336 -0
  232. package/dist-lib/skills.cjs +39132 -0
  233. package/dist-lib/swift-submit.cjs +92 -0
  234. package/dist-lib/swift-submit.mjs +65 -0
  235. package/dist-lib/swift.cjs +1646 -0
  236. package/dist-lib/vite.cjs +1591 -0
  237. package/package.json +290 -0
  238. package/scripts/dev-server-scanner.ts +1291 -0
  239. package/scripts/optional-demo-registry.ts +113 -0
  240. package/skills/contrast/SKILL.md +165 -0
  241. package/skills/rnx-debug/SKILL.md +433 -0
  242. package/skills/rnx-perf/SKILL.md +399 -0
  243. package/skills/rnx-setup/SKILL.md +172 -0
  244. package/skills/rnx-test/SKILL.md +321 -0
  245. package/skills/rnx-visual/SKILL.md +126 -0
  246. package/src/agent-daemon-client.ts +410 -0
  247. package/src/agent-events.ts +71 -0
  248. package/src/agent-identity.ts +23 -0
  249. package/src/agent-prompt.ts +71 -0
  250. package/src/agent-sessions.ts +580 -0
  251. package/src/app-url.ts +39 -0
  252. package/src/attached-projects.ts +539 -0
  253. package/src/auth/shared-session.ts +235 -0
  254. package/src/backend-origin.ts +70 -0
  255. package/src/beta.ts +19 -0
  256. package/src/bridge-constants.ts +175 -0
  257. package/src/bridge-contract-input.ts +502 -0
  258. package/src/bridge-contract.ts +558 -0
  259. package/src/browser-cache.ts +16 -0
  260. package/src/capture-contract.ts +587 -0
  261. package/src/cli-constants.ts +1 -0
  262. package/src/cli-version.ts +40 -0
  263. package/src/cloud-contract.ts +274 -0
  264. package/src/cloud.ts +762 -0
  265. package/src/codex-client.ts +234 -0
  266. package/src/config.ts +132 -0
  267. package/src/connect.ts +101 -0
  268. package/src/dev-bundle-resolution.ts +346 -0
  269. package/src/dev-server-open.ts +198 -0
  270. package/src/disk-cleanup.ts +540 -0
  271. package/src/flow-timeout-scale.ts +15 -0
  272. package/src/home-paths.ts +806 -0
  273. package/src/host/agent-host.ts +666 -0
  274. package/src/host/bridge-host.ts +2788 -0
  275. package/src/host/fetch-proxy-handler.ts +449 -0
  276. package/src/host/fetch-proxy-overrides.ts +51 -0
  277. package/src/host/open-url.ts +89 -0
  278. package/src/host/plane-host.ts +203 -0
  279. package/src/host/replacement-module-handler.ts +158 -0
  280. package/src/host/websocket-proxy.ts +315 -0
  281. package/src/index.ts +71 -0
  282. package/src/jump-to-source-babel.ts +135 -0
  283. package/src/jump-to-source-native.ts +102 -0
  284. package/src/menu.ts +777 -0
  285. package/src/metro-fingerprint-registry.ts +302 -0
  286. package/src/metro-plugin.ts +341 -0
  287. package/src/metro-production-bundle.ts +471 -0
  288. package/src/native-dev-bundle-url.ts +118 -0
  289. package/src/native-seam-manifest.ts +341 -0
  290. package/src/playwright-host-log.ts +16 -0
  291. package/src/plist.ts +27 -0
  292. package/src/poll-until.ts +123 -0
  293. package/src/profiles.ts +179 -0
  294. package/src/public-brand.ts +9 -0
  295. package/src/react-native-host-modules.ts +26 -0
  296. package/src/render-mode.ts +27 -0
  297. package/src/rolldown-plugin-swift.ts +240 -0
  298. package/src/runtime-assets.ts +233 -0
  299. package/src/runtime-delivery.ts +54 -0
  300. package/src/screenshots/compose.ts +422 -0
  301. package/src/screenshots/frame-compose.ts +514 -0
  302. package/src/screenshots/orchestrate.ts +256 -0
  303. package/src/screenshots/org-deck.ts +91 -0
  304. package/src/screenshots/registry.ts +58 -0
  305. package/src/screenshots/schema.ts +364 -0
  306. package/src/sdk.ts +15 -0
  307. package/src/settings-bundle.ts +418 -0
  308. package/src/shell-bridge-identity.ts +15 -0
  309. package/src/sim-client.ts +697 -0
  310. package/src/skills/builtin/a11y-review.ts +132 -0
  311. package/src/skills/builtin/compat-check.ts +71 -0
  312. package/src/skills/builtin/maestro-test.ts +121 -0
  313. package/src/skills/builtin/perf-profile.ts +90 -0
  314. package/src/skills/builtin/screenshot-all.ts +52 -0
  315. package/src/skills/builtin/visual-diff.ts +100 -0
  316. package/src/skills/registry.ts +107 -0
  317. package/src/skills/types.ts +41 -0
  318. package/src/swift-submit.ts +185 -0
  319. package/src/swift.ts +7 -0
  320. package/src/team-machine-prompt.ts +73 -0
  321. package/src/vite-plugin-one.ts +264 -0
  322. package/src/vite-plugin-swift.ts +620 -0
  323. package/src/vite-plugin.ts +1946 -0
  324. package/src/worklets-babel.ts +250 -0
@@ -0,0 +1,421 @@
1
+ /*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
+ "use strict";
4
+ var __create = Object.create;
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
+ mod
29
+ ));
30
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
+
32
+ // src/host/fetch-proxy-handler.ts
33
+ var fetch_proxy_handler_exports = {};
34
+ __export(fetch_proxy_handler_exports, {
35
+ buildAppApiProxyHeaders: () => buildAppApiProxyHeaders,
36
+ buildFetchProxyHeaders: () => buildFetchProxyHeaders,
37
+ handleAppApiRequest: () => handleAppApiRequest,
38
+ handleBundleProxyRequest: () => handleBundleProxyRequest,
39
+ handleFetchProxyRequest: () => handleFetchProxyRequest,
40
+ isAppApiRequestUrl: () => isAppApiRequestUrl,
41
+ isBundleProxyRequestUrl: () => isBundleProxyRequestUrl,
42
+ isFetchProxyRequestUrl: () => isFetchProxyRequestUrl
43
+ });
44
+ module.exports = __toCommonJS(fetch_proxy_handler_exports);
45
+ var import_http = __toESM(require("http"), 1);
46
+ var import_https = __toESM(require("https"), 1);
47
+ var import_promises = require("stream/promises");
48
+
49
+ // src/backend-origin.ts
50
+ function normalizeHostname(hostname) {
51
+ return hostname.replace(/^\[|\]$/g, "").toLowerCase();
52
+ }
53
+ function isLoopbackHost(hostname) {
54
+ const normalized = normalizeHostname(hostname);
55
+ return normalized === "localhost" || normalized.endsWith(".localhost") || normalized === "0.0.0.0" || normalized === "::1" || /^127(?:\.\d{1,3}){3}$/.test(normalized);
56
+ }
57
+
58
+ // src/host/fetch-proxy-overrides.ts
59
+ var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
60
+ var HOST_HEADER_OVERRIDES = [
61
+ {
62
+ hostSuffix: "uniswap.org",
63
+ headers: {
64
+ origin: "https://app.uniswap.org",
65
+ referer: "https://app.uniswap.org/"
66
+ },
67
+ // uniswap's native gateway accepts the app origin, but forcing a desktop
68
+ // browser ua on native api posts returns a bogus 414/tcp-stack response.
69
+ suppressBrowserUserAgent: true
70
+ }
71
+ ];
72
+ function headerOverridesFor(hostname) {
73
+ const host = hostname.toLowerCase();
74
+ for (const override of HOST_HEADER_OVERRIDES) {
75
+ if (host === override.hostSuffix || host.endsWith(`.${override.hostSuffix}`)) {
76
+ return override;
77
+ }
78
+ }
79
+ return void 0;
80
+ }
81
+ function getFetchProxyTargetHeaders(targetUrl) {
82
+ const hostOverrides = headerOverridesFor(targetUrl.hostname);
83
+ return {
84
+ "accept-encoding": "identity",
85
+ ...hostOverrides?.suppressBrowserUserAgent ? {} : { "user-agent": FETCH_PROXY_BROWSER_USER_AGENT },
86
+ ...hostOverrides?.headers
87
+ };
88
+ }
89
+
90
+ // src/host/fetch-proxy-handler.ts
91
+ var STRIP_FETCH_PROXY_HEADERS = /* @__PURE__ */ new Set([
92
+ "host",
93
+ "origin",
94
+ "referer",
95
+ "user-agent",
96
+ "accept-encoding",
97
+ "cookie",
98
+ "connection",
99
+ "keep-alive",
100
+ "transfer-encoding",
101
+ "upgrade",
102
+ "content-length",
103
+ "sec-fetch-site",
104
+ "sec-fetch-mode",
105
+ "sec-fetch-dest",
106
+ "sec-ch-ua",
107
+ "sec-ch-ua-mobile",
108
+ "sec-ch-ua-platform"
109
+ ]);
110
+ var FETCH_PROXY_CORS_HEADERS = {
111
+ "access-control-allow-origin": "*",
112
+ "access-control-allow-methods": "GET,POST,PUT,DELETE,PATCH,OPTIONS",
113
+ "access-control-allow-headers": "*",
114
+ "access-control-expose-headers": "*",
115
+ "access-control-max-age": "3600"
116
+ };
117
+ var APP_API_HEADER_REWRITES = /* @__PURE__ */ new Set([
118
+ "host",
119
+ "origin",
120
+ "referer",
121
+ "sec-fetch-site",
122
+ "sec-fetch-mode",
123
+ "sec-fetch-dest"
124
+ ]);
125
+ function loopbackTlsOptions(targetUrl) {
126
+ if (targetUrl.protocol !== "https:") return {};
127
+ return isLoopbackHost(targetUrl.hostname) ? { rejectUnauthorized: false } : {};
128
+ }
129
+ function applyFetchProxyCors(res) {
130
+ for (const [key, value] of Object.entries(FETCH_PROXY_CORS_HEADERS)) {
131
+ res.setHeader(key, value);
132
+ }
133
+ }
134
+ function formatFetchProxyError(targetUrl, err) {
135
+ const details = [];
136
+ const error = err;
137
+ if (error?.code) details.push(error.code);
138
+ if (error?.message) details.push(error.message);
139
+ if (error?.cause?.code) details.push(error.cause.code);
140
+ if (error?.cause?.message) details.push(error.cause.message);
141
+ const uniqueDetails = [...new Set(details.filter(Boolean))];
142
+ const message = uniqueDetails.join(" | ") || String(err);
143
+ if (targetUrl.includes("stored-in-.env.local")) {
144
+ return `${message} | upstream url still contains placeholder env values`;
145
+ }
146
+ return message;
147
+ }
148
+ function buildFetchProxyHeaders(reqHeaders, targetUrl) {
149
+ const headers = {};
150
+ for (const [key, value] of Object.entries(reqHeaders)) {
151
+ if (!value) continue;
152
+ if (STRIP_FETCH_PROXY_HEADERS.has(key.toLowerCase())) continue;
153
+ headers[key] = Array.isArray(value) ? value.join(", ") : value;
154
+ }
155
+ Object.assign(
156
+ headers,
157
+ targetUrl ? getFetchProxyTargetHeaders(targetUrl) : { "user-agent": FETCH_PROXY_BROWSER_USER_AGENT }
158
+ );
159
+ return headers;
160
+ }
161
+ function buildAppApiProxyHeaders(reqHeaders, targetUrl) {
162
+ const headers = {};
163
+ for (const [key, value] of Object.entries(reqHeaders)) {
164
+ if (!value) continue;
165
+ if (APP_API_HEADER_REWRITES.has(key.toLowerCase())) continue;
166
+ headers[key] = value;
167
+ }
168
+ headers.host = targetUrl.host;
169
+ if (!Object.keys(headers).some((name) => name.toLowerCase() === "expo-origin")) {
170
+ headers.origin = targetUrl.origin;
171
+ headers.referer = `${targetUrl.origin}/`;
172
+ }
173
+ return headers;
174
+ }
175
+ function isFetchProxyRequestUrl(rawUrl) {
176
+ return rawUrl?.startsWith("/__fetch-proxy?") || rawUrl?.startsWith("/__proxy?") || false;
177
+ }
178
+ function isBundleProxyRequestUrl(rawUrl) {
179
+ return rawUrl?.startsWith("/__bundle-proxy?") ?? false;
180
+ }
181
+ function isAppApiRequestUrl(rawUrl) {
182
+ if (!rawUrl) return false;
183
+ if (rawUrl.startsWith("/__app-api?")) return true;
184
+ if (rawUrl.startsWith("/__app-api/")) return true;
185
+ return false;
186
+ }
187
+ async function handleFetchProxyRequest(req, res) {
188
+ if (req.method === "OPTIONS") {
189
+ applyFetchProxyCors(res);
190
+ res.writeHead(204);
191
+ res.end();
192
+ return;
193
+ }
194
+ const params = new URLSearchParams((req.url || "").split("?")[1] || "");
195
+ const targetUrl = params.get("url");
196
+ if (!targetUrl) {
197
+ applyFetchProxyCors(res);
198
+ res.writeHead(400, { "Content-Type": "text/plain" });
199
+ res.end("missing url param");
200
+ return;
201
+ }
202
+ let upstreamUrl;
203
+ try {
204
+ upstreamUrl = new URL(targetUrl);
205
+ } catch {
206
+ applyFetchProxyCors(res);
207
+ res.writeHead(400, { "Content-Type": "text/plain" });
208
+ res.end("invalid url param");
209
+ return;
210
+ }
211
+ let body;
212
+ if (req.method !== "GET" && req.method !== "HEAD") {
213
+ const chunks = [];
214
+ for await (const chunk of req) {
215
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
216
+ }
217
+ if (chunks.length > 0) {
218
+ body = Buffer.concat(chunks);
219
+ }
220
+ }
221
+ const originalMethod = req.method || "GET";
222
+ const proxy = async (targetUrl2, method, nextBody, redirects) => {
223
+ const transport = targetUrl2.protocol === "https:" ? import_https.default : import_http.default;
224
+ const targetHeaders = buildFetchProxyHeaders(req.headers, targetUrl2);
225
+ if (targetUrl2.origin !== upstreamUrl.origin) {
226
+ delete targetHeaders.authorization;
227
+ delete targetHeaders["proxy-authorization"];
228
+ }
229
+ if (method === "GET" || method === "HEAD") {
230
+ delete targetHeaders["content-length"];
231
+ delete targetHeaders["content-type"];
232
+ } else if (nextBody) {
233
+ targetHeaders["content-length"] = String(nextBody.byteLength);
234
+ }
235
+ const proxyRes = await new Promise((resolve, reject) => {
236
+ const proxyReq = transport.request(
237
+ {
238
+ hostname: normalizeHostname(targetUrl2.hostname),
239
+ port: targetUrl2.port || (targetUrl2.protocol === "https:" ? 443 : 80),
240
+ path: targetUrl2.pathname + targetUrl2.search,
241
+ method,
242
+ headers: targetHeaders,
243
+ ...loopbackTlsOptions(targetUrl2)
244
+ },
245
+ resolve
246
+ );
247
+ const abort = () => proxyReq.destroy(new Error("fetch proxy client disconnected"));
248
+ req.once("aborted", abort);
249
+ proxyReq.once("close", () => req.off("aborted", abort));
250
+ proxyReq.once("error", reject);
251
+ if (nextBody === void 0) proxyReq.end();
252
+ else proxyReq.end(nextBody);
253
+ });
254
+ const status = proxyRes.statusCode ?? 502;
255
+ const location = proxyRes.headers.location;
256
+ if (location && (status === 301 || status === 302 || status === 303 || status === 307 || status === 308)) {
257
+ if (redirects >= 10) {
258
+ proxyRes.destroy();
259
+ throw new Error("too many redirects");
260
+ }
261
+ const switchToGet = (status === 301 || status === 302) && method === "POST" || status === 303 && method !== "GET" && method !== "HEAD";
262
+ const redirectUrl = new URL(location, targetUrl2);
263
+ proxyRes.resume();
264
+ await (0, import_promises.finished)(proxyRes);
265
+ await proxy(
266
+ redirectUrl,
267
+ switchToGet ? "GET" : method,
268
+ switchToGet ? void 0 : nextBody,
269
+ redirects + 1
270
+ );
271
+ return;
272
+ }
273
+ for (const [key, value] of Object.entries(proxyRes.headers)) {
274
+ const lowerKey = key.toLowerCase();
275
+ if (value === void 0 || lowerKey === "set-cookie" || lowerKey === "connection" || lowerKey === "keep-alive" || lowerKey === "proxy-authenticate" || lowerKey === "proxy-authorization" || lowerKey === "te" || lowerKey === "trailer" || lowerKey === "transfer-encoding" || lowerKey === "upgrade" || lowerKey.startsWith("access-control-")) {
276
+ continue;
277
+ }
278
+ res.setHeader(key, value);
279
+ }
280
+ applyFetchProxyCors(res);
281
+ const setCookie = proxyRes.headers["set-cookie"] ?? [];
282
+ if (setCookie.length > 0) {
283
+ res.setHeader(
284
+ "x-sootsim-set-cookie",
285
+ (Array.isArray(setCookie) ? setCookie : [setCookie]).join(", ")
286
+ );
287
+ }
288
+ res.statusCode = status;
289
+ await (0, import_promises.pipeline)(proxyRes, res);
290
+ };
291
+ try {
292
+ await proxy(upstreamUrl, originalMethod, body, 0);
293
+ } catch (err) {
294
+ if (res.headersSent) {
295
+ res.destroy(err instanceof Error ? err : new Error(String(err)));
296
+ return;
297
+ }
298
+ const norm = normalizeHostname(upstreamUrl.hostname);
299
+ if (isLoopbackHost(norm) && err?.code === "ECONNREFUSED") {
300
+ const altHost = norm === "::1" ? "127.0.0.1" : norm === "127.0.0.1" ? "::1" : "127.0.0.1";
301
+ if (altHost !== norm) {
302
+ try {
303
+ const altUrl = new URL(upstreamUrl.href);
304
+ altUrl.hostname = altHost;
305
+ await proxy(altUrl, originalMethod, body, 0);
306
+ return;
307
+ } catch {
308
+ }
309
+ }
310
+ }
311
+ applyFetchProxyCors(res);
312
+ res.writeHead(502, { "Content-Type": "text/plain" });
313
+ res.end(`fetch proxy error: ${formatFetchProxyError(upstreamUrl.href, err)}`);
314
+ }
315
+ }
316
+ async function handleBundleProxyRequest(req, res) {
317
+ const params = new URLSearchParams((req.url || "").split("?")[1] || "");
318
+ const target = params.get("url");
319
+ if (!target) {
320
+ applyFetchProxyCors(res);
321
+ res.writeHead(400, { "Content-Type": "text/plain" });
322
+ res.end("bundle-proxy: missing url query param");
323
+ return;
324
+ }
325
+ let targetUrl;
326
+ try {
327
+ targetUrl = new URL(target);
328
+ } catch {
329
+ applyFetchProxyCors(res);
330
+ res.writeHead(400, { "Content-Type": "text/plain" });
331
+ res.end("bundle-proxy: invalid url");
332
+ return;
333
+ }
334
+ if (!isLoopbackHost(targetUrl.hostname)) {
335
+ applyFetchProxyCors(res);
336
+ res.writeHead(403, { "Content-Type": "text/plain" });
337
+ res.end("bundle-proxy: only loopback targets allowed");
338
+ return;
339
+ }
340
+ await handleFetchProxyRequest(req, res);
341
+ }
342
+ function handleAppApiRequest(req, res) {
343
+ const reqUrl = req.url || "";
344
+ let targetPath = "";
345
+ let targetOrigin = "";
346
+ if (reqUrl.startsWith("/__app-api?")) {
347
+ const parsed = new URL(reqUrl, "http://sootsim.local");
348
+ targetPath = parsed.searchParams.get("path") || "";
349
+ targetOrigin = parsed.searchParams.get("origin")?.trim() || "";
350
+ } else if (reqUrl.startsWith("/__app-api/")) {
351
+ targetPath = reqUrl.slice("/__app-api".length);
352
+ } else {
353
+ return false;
354
+ }
355
+ if (!targetOrigin) {
356
+ res.writeHead(400, { "Content-Type": "text/plain" });
357
+ res.end("app-api: missing origin query param");
358
+ return true;
359
+ }
360
+ if (req.method === "OPTIONS") {
361
+ res.writeHead(204, {
362
+ "Access-Control-Allow-Origin": req.headers.origin || "*",
363
+ "Access-Control-Allow-Methods": "GET,POST,PUT,PATCH,DELETE,OPTIONS",
364
+ "Access-Control-Allow-Headers": req.headers["access-control-request-headers"] || "*",
365
+ "Access-Control-Allow-Credentials": "true",
366
+ "Access-Control-Max-Age": "86400"
367
+ });
368
+ res.end();
369
+ return true;
370
+ }
371
+ let targetUrl;
372
+ try {
373
+ targetUrl = new URL(targetPath, targetOrigin);
374
+ } catch {
375
+ res.writeHead(400, { "Content-Type": "text/plain" });
376
+ res.end("app-api: invalid origin or path");
377
+ return true;
378
+ }
379
+ const transport = targetUrl.protocol === "https:" ? import_https.default : import_http.default;
380
+ const fwdHeaders = buildAppApiProxyHeaders(req.headers, targetUrl);
381
+ const proxyReq = transport.request(
382
+ {
383
+ hostname: normalizeHostname(targetUrl.hostname),
384
+ port: targetUrl.port || (targetUrl.protocol === "https:" ? 443 : 80),
385
+ path: targetUrl.pathname + targetUrl.search,
386
+ method: req.method,
387
+ headers: fwdHeaders,
388
+ ...loopbackTlsOptions(targetUrl)
389
+ },
390
+ (proxyRes) => {
391
+ const exposedHeaders = Object.keys(proxyRes.headers).filter((name) => {
392
+ const lower = name.toLowerCase();
393
+ return !lower.startsWith("access-control-") && lower !== "set-cookie";
394
+ }).join(", ");
395
+ res.writeHead(proxyRes.statusCode ?? 502, {
396
+ ...proxyRes.headers,
397
+ "access-control-allow-origin": req.headers.origin || "*",
398
+ "access-control-allow-credentials": "true",
399
+ "access-control-expose-headers": exposedHeaders
400
+ });
401
+ proxyRes.pipe(res);
402
+ }
403
+ );
404
+ proxyReq.on("error", (err) => {
405
+ res.statusCode = 502;
406
+ res.end(`app proxy error: ${err.message}`);
407
+ });
408
+ req.pipe(proxyReq);
409
+ return true;
410
+ }
411
+ // Annotate the CommonJS export names for ESM import in node:
412
+ 0 && (module.exports = {
413
+ buildAppApiProxyHeaders,
414
+ buildFetchProxyHeaders,
415
+ handleAppApiRequest,
416
+ handleBundleProxyRequest,
417
+ handleFetchProxyRequest,
418
+ isAppApiRequestUrl,
419
+ isBundleProxyRequestUrl,
420
+ isFetchProxyRequestUrl
421
+ });
@@ -0,0 +1,63 @@
1
+ /*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
+ "use strict";
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+
22
+ // src/host/fetch-proxy-overrides.ts
23
+ var fetch_proxy_overrides_exports = {};
24
+ __export(fetch_proxy_overrides_exports, {
25
+ FETCH_PROXY_BROWSER_USER_AGENT: () => FETCH_PROXY_BROWSER_USER_AGENT,
26
+ getFetchProxyTargetHeaders: () => getFetchProxyTargetHeaders
27
+ });
28
+ module.exports = __toCommonJS(fetch_proxy_overrides_exports);
29
+ var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
30
+ var HOST_HEADER_OVERRIDES = [
31
+ {
32
+ hostSuffix: "uniswap.org",
33
+ headers: {
34
+ origin: "https://app.uniswap.org",
35
+ referer: "https://app.uniswap.org/"
36
+ },
37
+ // uniswap's native gateway accepts the app origin, but forcing a desktop
38
+ // browser ua on native api posts returns a bogus 414/tcp-stack response.
39
+ suppressBrowserUserAgent: true
40
+ }
41
+ ];
42
+ function headerOverridesFor(hostname) {
43
+ const host = hostname.toLowerCase();
44
+ for (const override of HOST_HEADER_OVERRIDES) {
45
+ if (host === override.hostSuffix || host.endsWith(`.${override.hostSuffix}`)) {
46
+ return override;
47
+ }
48
+ }
49
+ return void 0;
50
+ }
51
+ function getFetchProxyTargetHeaders(targetUrl) {
52
+ const hostOverrides = headerOverridesFor(targetUrl.hostname);
53
+ return {
54
+ "accept-encoding": "identity",
55
+ ...hostOverrides?.suppressBrowserUserAgent ? {} : { "user-agent": FETCH_PROXY_BROWSER_USER_AGENT },
56
+ ...hostOverrides?.headers
57
+ };
58
+ }
59
+ // Annotate the CommonJS export names for ESM import in node:
60
+ 0 && (module.exports = {
61
+ FETCH_PROXY_BROWSER_USER_AGENT,
62
+ getFetchProxyTargetHeaders
63
+ });
@@ -0,0 +1,37 @@
1
+ /*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+
3
+ // src/host/fetch-proxy-overrides.ts
4
+ var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
5
+ var HOST_HEADER_OVERRIDES = [
6
+ {
7
+ hostSuffix: "uniswap.org",
8
+ headers: {
9
+ origin: "https://app.uniswap.org",
10
+ referer: "https://app.uniswap.org/"
11
+ },
12
+ // uniswap's native gateway accepts the app origin, but forcing a desktop
13
+ // browser ua on native api posts returns a bogus 414/tcp-stack response.
14
+ suppressBrowserUserAgent: true
15
+ }
16
+ ];
17
+ function headerOverridesFor(hostname) {
18
+ const host = hostname.toLowerCase();
19
+ for (const override of HOST_HEADER_OVERRIDES) {
20
+ if (host === override.hostSuffix || host.endsWith(`.${override.hostSuffix}`)) {
21
+ return override;
22
+ }
23
+ }
24
+ return void 0;
25
+ }
26
+ function getFetchProxyTargetHeaders(targetUrl) {
27
+ const hostOverrides = headerOverridesFor(targetUrl.hostname);
28
+ return {
29
+ "accept-encoding": "identity",
30
+ ...hostOverrides?.suppressBrowserUserAgent ? {} : { "user-agent": FETCH_PROXY_BROWSER_USER_AGENT },
31
+ ...hostOverrides?.headers
32
+ };
33
+ }
34
+ export {
35
+ FETCH_PROXY_BROWSER_USER_AGENT,
36
+ getFetchProxyTargetHeaders
37
+ };