sootsim 0.1.57 → 0.1.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-cli/bin.js +3 -3
- package/dist-cli/chunks/{agent-NPPYTJGQ.js → agent-GD3Q5RPA.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-HGFLL2SN.js → agent-wrapper-LBIAKQGM.js} +2 -2
- package/dist-cli/chunks/{assert-YQVUXART.js → assert-LZUX5QVA.js} +2 -2
- package/dist-cli/chunks/auto-bootstrap-RGEU3N4Y.js +2 -0
- package/dist-cli/chunks/beta-7YMPFJF7.js +2 -0
- package/dist-cli/chunks/{chunk-6TCB2Q4M.js → chunk-24VAZEFY.js} +2 -2
- package/dist-cli/chunks/{chunk-G5C63TCD.js → chunk-4ENZNH7P.js} +2 -2
- package/dist-cli/chunks/{chunk-LAHQ2FEO.js → chunk-4L72FYCQ.js} +1 -1
- package/dist-cli/chunks/{chunk-LKN5ZD7R.js → chunk-4VNKLERI.js} +2 -2
- package/dist-cli/chunks/{chunk-IUNCVIGJ.js → chunk-5DO55JWB.js} +22 -22
- package/dist-cli/chunks/{chunk-JTEXFSXZ.js → chunk-5RLJWEFW.js} +1 -1
- package/dist-cli/chunks/{chunk-5UGWXEKB.js → chunk-5S62LOV4.js} +2 -2
- package/dist-cli/chunks/{chunk-R5LXB5S4.js → chunk-A3ATSCOF.js} +2 -2
- package/dist-cli/chunks/{chunk-YDARYKX2.js → chunk-AMEUPM6D.js} +1 -1
- package/dist-cli/chunks/{chunk-NIWIP5DP.js → chunk-BL3IZLNB.js} +2 -2
- package/dist-cli/chunks/{chunk-X7TK37NG.js → chunk-D26QPCEP.js} +2 -2
- package/dist-cli/chunks/{chunk-ZR5BC6VJ.js → chunk-D6O2NXGB.js} +2 -2
- package/dist-cli/chunks/chunk-DFXUPNYD.js +119 -0
- package/dist-cli/chunks/{chunk-YG56VEHZ.js → chunk-F2DSLYX4.js} +1 -1
- package/dist-cli/chunks/{chunk-M7CZODKE.js → chunk-G3A23B5Q.js} +1 -1
- package/dist-cli/chunks/chunk-GL3JT3P7.js +1 -0
- package/dist-cli/chunks/{chunk-XWXPKTF2.js → chunk-HMPHDE5A.js} +1 -1
- package/dist-cli/chunks/{chunk-UYA3TUXI.js → chunk-IY3JNNU7.js} +2 -2
- package/dist-cli/chunks/{chunk-CH2EJFOY.js → chunk-KYP5XLIR.js} +2 -2
- package/dist-cli/chunks/chunk-L5PBH3V6.js +1 -0
- package/dist-cli/chunks/{chunk-4V3332SD.js → chunk-LLOURJ3N.js} +3 -3
- package/dist-cli/chunks/chunk-N7OHTYFK.js +2 -0
- package/dist-cli/chunks/{chunk-4VABMOJO.js → chunk-NGEPSXEE.js} +1 -1
- package/dist-cli/chunks/chunk-O2W7EB7L.js +11 -0
- package/dist-cli/chunks/{chunk-CQVVHX4D.js → chunk-O4I44BRL.js} +1 -1
- package/dist-cli/chunks/{chunk-4JMDLWL4.js → chunk-PS57ERTY.js} +2 -2
- package/dist-cli/chunks/{chunk-VXXUZASJ.js → chunk-PSPZTTCO.js} +2 -2
- package/dist-cli/chunks/{chunk-S5J72XOK.js → chunk-QNH7IX5F.js} +2 -2
- package/dist-cli/chunks/{chunk-M4ZH4OIE.js → chunk-TYRPY3SN.js} +1 -1
- package/dist-cli/chunks/chunk-UPW76NDZ.js +2 -0
- package/dist-cli/chunks/{chunk-GBVUYE2G.js → chunk-V4SMVFRV.js} +1 -1
- package/dist-cli/chunks/{chunk-PNPC7W2J.js → chunk-V6NAG62D.js} +1 -1
- package/dist-cli/chunks/chunk-WMTMNKH2.js +5 -0
- package/dist-cli/chunks/{chunk-3CK32EYC.js → chunk-WQOEMVXN.js} +1 -1
- package/dist-cli/chunks/{chunk-BV7CKWAT.js → chunk-WQXLD5YU.js} +2 -2
- package/dist-cli/chunks/{chunk-OTAD7RDA.js → chunk-XDIT5SEC.js} +2 -2
- package/dist-cli/chunks/{chunk-7ZKQDFIO.js → chunk-XM4D43UP.js} +2 -2
- package/dist-cli/chunks/{chunk-OZCCQDNO.js → chunk-XRMTMRS5.js} +1 -1
- package/dist-cli/chunks/{chunk-SLDVUFO7.js → chunk-Y65GFG22.js} +3 -3
- package/dist-cli/chunks/{chunk-KDGASCBH.js → chunk-YT54ZKTQ.js} +2 -2
- package/dist-cli/chunks/chunk-ZEB4DGC6.js +1 -0
- package/dist-cli/chunks/{chunk-QYFYKTLA.js → chunk-ZLMNBI7T.js} +2 -2
- package/dist-cli/chunks/{chunk-IE22T725.js → chunk-ZX66GIXV.js} +2 -2
- package/dist-cli/chunks/cli-version-CL32HHD6.js +2 -0
- package/dist-cli/chunks/{compat-GGWXFSDX.js → compat-77WWLIGJ.js} +3 -3
- package/dist-cli/chunks/{config-INZ3CE26.js → config-WGPGLVTW.js} +2 -2
- package/dist-cli/chunks/control-KZYO5BDN.js +2 -0
- package/dist-cli/chunks/{cpu-profile-LNRJPUD5.js → cpu-profile-XMBVCI7K.js} +2 -2
- package/dist-cli/chunks/{daemon-3VIZBQY3.js → daemon-FFHD2I32.js} +2 -2
- package/dist-cli/chunks/{debug-K6QL7KYQ.js → debug-FMXTU6TB.js} +3 -3
- package/dist-cli/chunks/demo-app-registry-RSAPXLUE.js +2 -0
- package/dist-cli/chunks/{detox-YTAIPFJF.js → detox-QGFGC5RT.js} +2 -2
- package/dist-cli/chunks/{device-CK65C5X7.js → device-OL7VGMK7.js} +2 -2
- package/dist-cli/chunks/{diagnose-7C6AI3GH.js → diagnose-6CSSFWBQ.js} +2 -2
- package/dist-cli/chunks/drivers-7PFWCFVQ.js +2 -0
- package/dist-cli/chunks/{electron-KM4B6VDZ.js → electron-MHXT6NTC.js} +3 -3
- package/dist-cli/chunks/flow-HMBOPMQV.js +2 -0
- package/dist-cli/chunks/{hints-3VJUMXQP.js → hints-W5DK2COL.js} +2 -2
- package/dist-cli/chunks/{home-paths-ME2IXNVP.js → home-paths-RWCQ7AU2.js} +2 -2
- package/dist-cli/chunks/{inspect-UZOX4LSH.js → inspect-5XMF34Y7.js} +3 -3
- package/dist-cli/chunks/install-3MNX7DSK.js +2 -0
- package/dist-cli/chunks/{install-desktop-C4V5KZDJ.js → install-desktop-YVHWBC3T.js} +3 -3
- package/dist-cli/chunks/{keys-UT3KWBZT.js → keys-6HAEB4IC.js} +2 -2
- package/dist-cli/chunks/{launch-6I6O6JXS.js → launch-OHCK4MRM.js} +3 -3
- package/dist-cli/chunks/{login-JDESDPHM.js → login-VBHIW5ZN.js} +4 -4
- package/dist-cli/chunks/{logout-575N5O5U.js → logout-LHFYJFHT.js} +2 -2
- package/dist-cli/chunks/{maestro-ROOBQSNV.js → maestro-56F3HFUH.js} +2 -2
- package/dist-cli/chunks/{preview-HG2CMGQN.js → preview-ATGWKYQI.js} +2 -2
- package/dist-cli/chunks/{profile-I6LG4B5V.js → profile-UII6DPNJ.js} +2 -2
- package/dist-cli/chunks/{react-P5PD7U5N.js → react-4F2HFSY7.js} +2 -2
- package/dist-cli/chunks/{record-JYYV3HCE.js → record-YHRJJJRY.js} +2 -2
- package/dist-cli/chunks/runtime-HOPZF7H6.js +2 -0
- package/dist-cli/chunks/{runtime-delivery-GPLRM7XV.js → runtime-delivery-CUCNWWQP.js} +2 -2
- package/dist-cli/chunks/{screenshot-LPZAW47Y.js → screenshot-GKJ4ICW4.js} +2 -2
- package/dist-cli/chunks/{screenshot-mode-T3Y4GCJ7.js → screenshot-mode-OCP4HA3H.js} +2 -2
- package/dist-cli/chunks/{screenshots-2OS6IUGR.js → screenshots-RTRJF63K.js} +2 -2
- package/dist-cli/chunks/{server-OIA2CFJT.js → server-SY6BQAVD.js} +14 -14
- package/dist-cli/chunks/setup-repo-Z7WKSSP5.js +2 -0
- package/dist-cli/chunks/{skills-CHO7ZM3B.js → skills-KX3LI7Y6.js} +2 -2
- package/dist-cli/chunks/{start-J2KTUJ7X.js → start-5IOHCWG6.js} +4 -4
- package/dist-cli/chunks/store-WYV5UMFH.js +2 -0
- package/dist-cli/chunks/telemetry-XABHSL5O.js +2 -0
- package/dist-cli/chunks/{test-GBMTAVTE.js → test-2QTF7GWW.js} +3 -3
- package/dist-cli/chunks/{three-mode-4YSGPVCQ.js → three-mode-EQSSYVHT.js} +2 -2
- package/dist-cli/chunks/{timeline-K3VJQZPK.js → timeline-GZZYRE2U.js} +2 -2
- package/dist-cli/chunks/{upgrade-QGDSW6BS.js → upgrade-KVJ2HKRH.js} +2 -2
- package/dist-cli/chunks/upload-4VWBZXY4.js +2 -0
- package/dist-cli/chunks/web-2C5AJBCN.js +2 -0
- package/dist-cli/chunks/{what-happened-CKT743CC.js → what-happened-YECRPXV5.js} +2 -2
- package/dist-cli/chunks/{whoami-IQR7JHXG.js → whoami-WCPVDNPA.js} +2 -2
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +38 -5
- package/dist-lib/host/fetch-proxy-handler.cjs +38 -5
- package/dist-lib/host/fetch-proxy-overrides.cjs +59 -0
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/vite-base.cjs +44 -6
- package/dist-lib/vite.cjs +1 -1
- package/package.json +2 -1
- package/dist-cli/chunks/auto-bootstrap-66WKUSFO.js +0 -2
- package/dist-cli/chunks/beta-OOQIHH7M.js +0 -2
- package/dist-cli/chunks/chunk-6N7UI27S.js +0 -11
- package/dist-cli/chunks/chunk-6XN3BLTW.js +0 -1
- package/dist-cli/chunks/chunk-CU7PKBB2.js +0 -2
- package/dist-cli/chunks/chunk-ERTESYYX.js +0 -1
- package/dist-cli/chunks/chunk-GFA6ML6B.js +0 -5
- package/dist-cli/chunks/chunk-GPYMDARN.js +0 -2
- package/dist-cli/chunks/chunk-I6SSZCZN.js +0 -117
- package/dist-cli/chunks/chunk-O3VFZJ2R.js +0 -1
- package/dist-cli/chunks/chunk-TL3533Q6.js +0 -2
- package/dist-cli/chunks/cli-version-J2PCS6AU.js +0 -2
- package/dist-cli/chunks/control-UKVK76QN.js +0 -2
- package/dist-cli/chunks/demo-app-registry-H5TBKOQ6.js +0 -2
- package/dist-cli/chunks/drivers-R2Z4BW5R.js +0 -2
- package/dist-cli/chunks/flow-ODCQTIYH.js +0 -2
- package/dist-cli/chunks/install-KTTJWYUW.js +0 -2
- package/dist-cli/chunks/runtime-4YFLZ5OB.js +0 -2
- package/dist-cli/chunks/setup-repo-QFKXN4PA.js +0 -2
- package/dist-cli/chunks/store-BJFYF6GX.js +0 -2
- package/dist-cli/chunks/telemetry-7I3DB4GJ.js +0 -2
- package/dist-cli/chunks/upload-Z3ZD5WUL.js +0 -2
- package/dist-cli/chunks/web-OASYPGA5.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{J as F,w as S,x as k,y as g}from"./chunk-
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{J as F,w as S,x as k,y as g}from"./chunk-NGEPSXEE.js";import{c as b,e as y}from"./chunk-KYP5XLIR.js";import{b as w}from"./chunk-4L72FYCQ.js";import"./chunk-N7OHTYFK.js";import"./chunk-V6NAG62D.js";import"./chunk-AMEUPM6D.js";function M(t){let e=[];for(let n=0;n<t.length;n++)if(t[n]==="--since"&&n+1<t.length){e.push(n,n+1);let s=t[n+1].trim(),a=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(a){let l=Number(a[1]),u=a[2]??"ms",r=u==="s"?l*1e3:u==="m"?l*6e4:l;return{since:Date.now()-r,consumed:e}}let o=Number(s);if(Number.isFinite(o)&&o>1e12)return{since:o,consumed:e}}return{consumed:e}}function E(t){let e=[];for(let n=0;n<t.length;n++)if(t[n]==="--kinds"&&n+1<t.length)return e.push(n,n+1),{kinds:t[n+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:e};return{consumed:e}}function C(t){let e=[];for(let n=0;n<t.length;n++)if(t[n]==="--limit"&&n+1<t.length){e.push(n,n+1);let s=Number(t[n+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:e}}return{consumed:e}}function _(t,e){if(e===null)return new Date(t).toLocaleTimeString();let n=(t-e)/1e3;return`${n>=0?"+":""}${n.toFixed(2)}s`}function j(t,e){switch(t){case"app-launch":return e.phase==="launch"?`launch ${e.appName??e.toAppId??""}`:`dismiss ${e.appName??e.fromAppId??""} \u2192 ${e.toAppId??""}`;case"toast":return`"${e.text??""}"${e.durationMs?` (${e.durationMs}ms)`:""}`;case"keyboard":return`${e.phase??"?"}${e.heightPx?` h=${e.heightPx}`:""}${e.mode?` ${e.mode}`:""}`;case"screen":return`${e.phase??"?"} ${e.name??e.activeName??""}`;case"route":return`${e.phase??"?"} ${e.path??e.pathname??""}`;case"alert":case"actionsheet":case"picker":return`${e.phase??"?"} ${e.title??e.message??""}`;case"notification":return`${e.title??""}${e.body?` \u2014 ${e.body}`:""}`;case"fetch":return`${e.method??"GET"} ${e.url??""}${e.status?` -> ${e.status}`:""}`;case"console":return`${e.level??"log"}: ${(e.message??"").toString().slice(0,120)}`;case"shell":return`${e.event??e.type??e.phase??""}`;case"scroll":return`${e.phase??"?"} ${e.target??""}`;case"gesture":return`${e.phase??"?"} ${e.type??""}`;case"text-input":return`${e.phase??"?"}${e.value!==void 0?` "${String(e.value).slice(0,40)}"`:""}`;case"react-commit":{let n=e.slowest;return`${e.fiberCount??"?"} fibers ${e.durationMs??"?"}ms${n?.displayName?` \xB7 ${n.displayName} ${n.durationMs??"?"}ms`:""}`}case"reanimated":case"animation":return`${e.kind??""} ${e.target??""}${e.durationMs?` ${e.durationMs}ms`:""}`}}function N(t,e){let n=_(t.t,e).padStart(8),s=t.context.padEnd(6),a=`[${t.kind}]`.padEnd(15),o="",l=t.data;return l&&typeof l=="object"&&(o=j(t.kind,l)),` ${n} ${s} ${a} ${o}`}function T(t){let e=[],n={label:"initial state",events:[],startedAt:t[0]?.t??null};e.push(n);for(let s of t)if(n.events.push(s),s.kind==="screen"||s.kind==="route"){let a=s.data,o=a?.phase;if(!o||o==="enter"||o==="appear"||o==="active"){let l=a?.name||a?.activeName||a?.path||a?.pathname||s.kind;e.length===1&&n.events.length===1?n.label=`${s.kind}: ${l}`:(n={label:`${s.kind}: ${l}`,events:[],startedAt:s.t},e.push(n))}}return e}async function O(t,e){let n=b(t,{port:e.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow"],stripValueFlags:["--since","--kinds","--limit"]});(t.includes("--help")||t.includes("-h"))&&(console.log(`
|
|
3
3
|
sootsim what-happened \u2014 show recent events from the semantic timeline
|
|
4
4
|
|
|
5
5
|
usage:
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{d as i}from"./chunk-
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{d as i}from"./chunk-24VAZEFY.js";import{d as n}from"./chunk-4ENZNH7P.js";import"./chunk-V6NAG62D.js";import"./chunk-AMEUPM6D.js";async function u(){let o=i();if(o||(console.log(" not signed in"),console.log(" set SOOTSIM_API_KEY=sk_sootsim_\u2026 or run `sootsim login`"),process.exit(1)),o.kind==="api-key"){let r=`${o.secret.slice(0,14)}\u2026`,t=o.source==="env"?"SOOTSIM_API_KEY env var":"saved key (~/.config/sootsim/credentials.json)";console.log(` api key ${r}`),console.log(` source: ${t}`);return}if(o.kind==="github"){console.log(` github token (${o.source})`),console.log(` repo: ${o.repoId}`);return}let e=await n(),s=e?.user;console.log(` ${s?.email||s?.name||s?.id||"signed in"}`),console.log(` origin: ${e?.origin??o.origin}`),e?.updatedAt&&console.log(` updated: ${e.updatedAt}`)}export{u as runWhoami};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -2840,12 +2840,42 @@ function mapFrameworkToProjectFramework(fw) {
|
|
|
2840
2840
|
// src/host/fetch-proxy-handler.ts
|
|
2841
2841
|
var import_http2 = __toESM(require("http"), 1);
|
|
2842
2842
|
var import_https = __toESM(require("https"), 1);
|
|
2843
|
-
|
|
2843
|
+
|
|
2844
|
+
// src/host/fetch-proxy-overrides.ts
|
|
2845
|
+
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";
|
|
2846
|
+
var HOST_HEADER_OVERRIDES = [
|
|
2847
|
+
{
|
|
2848
|
+
hostSuffix: "uniswap.org",
|
|
2849
|
+
headers: {
|
|
2850
|
+
origin: "https://app.uniswap.org",
|
|
2851
|
+
referer: "https://app.uniswap.org/"
|
|
2852
|
+
}
|
|
2853
|
+
}
|
|
2854
|
+
];
|
|
2855
|
+
function headerOverridesFor(hostname) {
|
|
2856
|
+
const host = hostname.toLowerCase();
|
|
2857
|
+
for (const override of HOST_HEADER_OVERRIDES) {
|
|
2858
|
+
if (host === override.hostSuffix || host.endsWith(`.${override.hostSuffix}`)) {
|
|
2859
|
+
return override.headers;
|
|
2860
|
+
}
|
|
2861
|
+
}
|
|
2862
|
+
return {};
|
|
2863
|
+
}
|
|
2864
|
+
function getFetchProxyTargetHeaders(targetUrl) {
|
|
2865
|
+
return {
|
|
2866
|
+
"accept-encoding": "identity",
|
|
2867
|
+
"user-agent": FETCH_PROXY_BROWSER_USER_AGENT,
|
|
2868
|
+
...headerOverridesFor(targetUrl.hostname)
|
|
2869
|
+
};
|
|
2870
|
+
}
|
|
2871
|
+
|
|
2872
|
+
// src/host/fetch-proxy-handler.ts
|
|
2844
2873
|
var STRIP_FETCH_PROXY_HEADERS = /* @__PURE__ */ new Set([
|
|
2845
2874
|
"host",
|
|
2846
2875
|
"origin",
|
|
2847
2876
|
"referer",
|
|
2848
2877
|
"user-agent",
|
|
2878
|
+
"accept-encoding",
|
|
2849
2879
|
"cookie",
|
|
2850
2880
|
"connection",
|
|
2851
2881
|
"keep-alive",
|
|
@@ -2885,14 +2915,17 @@ function formatFetchProxyError(targetUrl, err) {
|
|
|
2885
2915
|
}
|
|
2886
2916
|
return message;
|
|
2887
2917
|
}
|
|
2888
|
-
function buildFetchProxyHeaders(reqHeaders) {
|
|
2918
|
+
function buildFetchProxyHeaders(reqHeaders, targetUrl) {
|
|
2889
2919
|
const headers = {};
|
|
2890
2920
|
for (const [key, value] of Object.entries(reqHeaders)) {
|
|
2891
2921
|
if (!value) continue;
|
|
2892
2922
|
if (STRIP_FETCH_PROXY_HEADERS.has(key.toLowerCase())) continue;
|
|
2893
2923
|
headers[key] = Array.isArray(value) ? value.join(", ") : value;
|
|
2894
2924
|
}
|
|
2895
|
-
|
|
2925
|
+
Object.assign(
|
|
2926
|
+
headers,
|
|
2927
|
+
targetUrl ? getFetchProxyTargetHeaders(targetUrl) : { "user-agent": FETCH_PROXY_BROWSER_USER_AGENT }
|
|
2928
|
+
);
|
|
2896
2929
|
return headers;
|
|
2897
2930
|
}
|
|
2898
2931
|
function isFetchProxyRequestUrl(rawUrl) {
|
|
@@ -2928,7 +2961,7 @@ async function handleFetchProxyRequest(req, res) {
|
|
|
2928
2961
|
res.end("invalid url param");
|
|
2929
2962
|
return;
|
|
2930
2963
|
}
|
|
2931
|
-
const headers = buildFetchProxyHeaders(req.headers);
|
|
2964
|
+
const headers = buildFetchProxyHeaders(req.headers, upstreamUrl);
|
|
2932
2965
|
let body;
|
|
2933
2966
|
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
2934
2967
|
const chunks = [];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -41,12 +41,42 @@ __export(fetch_proxy_handler_exports, {
|
|
|
41
41
|
module.exports = __toCommonJS(fetch_proxy_handler_exports);
|
|
42
42
|
var import_http = __toESM(require("http"), 1);
|
|
43
43
|
var import_https = __toESM(require("https"), 1);
|
|
44
|
-
|
|
44
|
+
|
|
45
|
+
// src/host/fetch-proxy-overrides.ts
|
|
46
|
+
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";
|
|
47
|
+
var HOST_HEADER_OVERRIDES = [
|
|
48
|
+
{
|
|
49
|
+
hostSuffix: "uniswap.org",
|
|
50
|
+
headers: {
|
|
51
|
+
origin: "https://app.uniswap.org",
|
|
52
|
+
referer: "https://app.uniswap.org/"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
function headerOverridesFor(hostname) {
|
|
57
|
+
const host = hostname.toLowerCase();
|
|
58
|
+
for (const override of HOST_HEADER_OVERRIDES) {
|
|
59
|
+
if (host === override.hostSuffix || host.endsWith(`.${override.hostSuffix}`)) {
|
|
60
|
+
return override.headers;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return {};
|
|
64
|
+
}
|
|
65
|
+
function getFetchProxyTargetHeaders(targetUrl) {
|
|
66
|
+
return {
|
|
67
|
+
"accept-encoding": "identity",
|
|
68
|
+
"user-agent": FETCH_PROXY_BROWSER_USER_AGENT,
|
|
69
|
+
...headerOverridesFor(targetUrl.hostname)
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// src/host/fetch-proxy-handler.ts
|
|
45
74
|
var STRIP_FETCH_PROXY_HEADERS = /* @__PURE__ */ new Set([
|
|
46
75
|
"host",
|
|
47
76
|
"origin",
|
|
48
77
|
"referer",
|
|
49
78
|
"user-agent",
|
|
79
|
+
"accept-encoding",
|
|
50
80
|
"cookie",
|
|
51
81
|
"connection",
|
|
52
82
|
"keep-alive",
|
|
@@ -86,14 +116,17 @@ function formatFetchProxyError(targetUrl, err) {
|
|
|
86
116
|
}
|
|
87
117
|
return message;
|
|
88
118
|
}
|
|
89
|
-
function buildFetchProxyHeaders(reqHeaders) {
|
|
119
|
+
function buildFetchProxyHeaders(reqHeaders, targetUrl) {
|
|
90
120
|
const headers = {};
|
|
91
121
|
for (const [key, value] of Object.entries(reqHeaders)) {
|
|
92
122
|
if (!value) continue;
|
|
93
123
|
if (STRIP_FETCH_PROXY_HEADERS.has(key.toLowerCase())) continue;
|
|
94
124
|
headers[key] = Array.isArray(value) ? value.join(", ") : value;
|
|
95
125
|
}
|
|
96
|
-
|
|
126
|
+
Object.assign(
|
|
127
|
+
headers,
|
|
128
|
+
targetUrl ? getFetchProxyTargetHeaders(targetUrl) : { "user-agent": FETCH_PROXY_BROWSER_USER_AGENT }
|
|
129
|
+
);
|
|
97
130
|
return headers;
|
|
98
131
|
}
|
|
99
132
|
function isFetchProxyRequestUrl(rawUrl) {
|
|
@@ -129,7 +162,7 @@ async function handleFetchProxyRequest(req, res) {
|
|
|
129
162
|
res.end("invalid url param");
|
|
130
163
|
return;
|
|
131
164
|
}
|
|
132
|
-
const headers = buildFetchProxyHeaders(req.headers);
|
|
165
|
+
const headers = buildFetchProxyHeaders(req.headers, upstreamUrl);
|
|
133
166
|
let body;
|
|
134
167
|
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
135
168
|
const chunks = [];
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*! sootsim v0.1.59 | (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
|
+
}
|
|
38
|
+
];
|
|
39
|
+
function headerOverridesFor(hostname) {
|
|
40
|
+
const host = hostname.toLowerCase();
|
|
41
|
+
for (const override of HOST_HEADER_OVERRIDES) {
|
|
42
|
+
if (host === override.hostSuffix || host.endsWith(`.${override.hostSuffix}`)) {
|
|
43
|
+
return override.headers;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
function getFetchProxyTargetHeaders(targetUrl) {
|
|
49
|
+
return {
|
|
50
|
+
"accept-encoding": "identity",
|
|
51
|
+
"user-agent": FETCH_PROXY_BROWSER_USER_AGENT,
|
|
52
|
+
...headerOverridesFor(targetUrl.hostname)
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
56
|
+
0 && (module.exports = {
|
|
57
|
+
FETCH_PROXY_BROWSER_USER_AGENT,
|
|
58
|
+
getFetchProxyTargetHeaders
|
|
59
|
+
});
|
package/dist-lib/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/vite-base.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -2909,6 +2909,40 @@ var init_agent_host = __esm({
|
|
|
2909
2909
|
}
|
|
2910
2910
|
});
|
|
2911
2911
|
|
|
2912
|
+
// src/host/fetch-proxy-overrides.ts
|
|
2913
|
+
function headerOverridesFor(hostname) {
|
|
2914
|
+
const host = hostname.toLowerCase();
|
|
2915
|
+
for (const override of HOST_HEADER_OVERRIDES) {
|
|
2916
|
+
if (host === override.hostSuffix || host.endsWith(`.${override.hostSuffix}`)) {
|
|
2917
|
+
return override.headers;
|
|
2918
|
+
}
|
|
2919
|
+
}
|
|
2920
|
+
return {};
|
|
2921
|
+
}
|
|
2922
|
+
function getFetchProxyTargetHeaders(targetUrl) {
|
|
2923
|
+
return {
|
|
2924
|
+
"accept-encoding": "identity",
|
|
2925
|
+
"user-agent": FETCH_PROXY_BROWSER_USER_AGENT,
|
|
2926
|
+
...headerOverridesFor(targetUrl.hostname)
|
|
2927
|
+
};
|
|
2928
|
+
}
|
|
2929
|
+
var FETCH_PROXY_BROWSER_USER_AGENT, HOST_HEADER_OVERRIDES;
|
|
2930
|
+
var init_fetch_proxy_overrides = __esm({
|
|
2931
|
+
"src/host/fetch-proxy-overrides.ts"() {
|
|
2932
|
+
"use strict";
|
|
2933
|
+
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";
|
|
2934
|
+
HOST_HEADER_OVERRIDES = [
|
|
2935
|
+
{
|
|
2936
|
+
hostSuffix: "uniswap.org",
|
|
2937
|
+
headers: {
|
|
2938
|
+
origin: "https://app.uniswap.org",
|
|
2939
|
+
referer: "https://app.uniswap.org/"
|
|
2940
|
+
}
|
|
2941
|
+
}
|
|
2942
|
+
];
|
|
2943
|
+
}
|
|
2944
|
+
});
|
|
2945
|
+
|
|
2912
2946
|
// src/host/fetch-proxy-handler.ts
|
|
2913
2947
|
function applyFetchProxyCors(res) {
|
|
2914
2948
|
for (const [key, value] of Object.entries(FETCH_PROXY_CORS_HEADERS)) {
|
|
@@ -2929,14 +2963,17 @@ function formatFetchProxyError(targetUrl, err) {
|
|
|
2929
2963
|
}
|
|
2930
2964
|
return message;
|
|
2931
2965
|
}
|
|
2932
|
-
function buildFetchProxyHeaders(reqHeaders) {
|
|
2966
|
+
function buildFetchProxyHeaders(reqHeaders, targetUrl) {
|
|
2933
2967
|
const headers = {};
|
|
2934
2968
|
for (const [key, value] of Object.entries(reqHeaders)) {
|
|
2935
2969
|
if (!value) continue;
|
|
2936
2970
|
if (STRIP_FETCH_PROXY_HEADERS.has(key.toLowerCase())) continue;
|
|
2937
2971
|
headers[key] = Array.isArray(value) ? value.join(", ") : value;
|
|
2938
2972
|
}
|
|
2939
|
-
|
|
2973
|
+
Object.assign(
|
|
2974
|
+
headers,
|
|
2975
|
+
targetUrl ? getFetchProxyTargetHeaders(targetUrl) : { "user-agent": FETCH_PROXY_BROWSER_USER_AGENT }
|
|
2976
|
+
);
|
|
2940
2977
|
return headers;
|
|
2941
2978
|
}
|
|
2942
2979
|
function isFetchProxyRequestUrl(rawUrl) {
|
|
@@ -2972,7 +3009,7 @@ async function handleFetchProxyRequest(req, res) {
|
|
|
2972
3009
|
res.end("invalid url param");
|
|
2973
3010
|
return;
|
|
2974
3011
|
}
|
|
2975
|
-
const headers = buildFetchProxyHeaders(req.headers);
|
|
3012
|
+
const headers = buildFetchProxyHeaders(req.headers, upstreamUrl);
|
|
2976
3013
|
let body;
|
|
2977
3014
|
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
2978
3015
|
const chunks = [];
|
|
@@ -3081,18 +3118,19 @@ function handleAppApiRequest(req, res) {
|
|
|
3081
3118
|
req.pipe(proxyReq);
|
|
3082
3119
|
return true;
|
|
3083
3120
|
}
|
|
3084
|
-
var import_http2, import_https,
|
|
3121
|
+
var import_http2, import_https, STRIP_FETCH_PROXY_HEADERS, FETCH_PROXY_CORS_HEADERS;
|
|
3085
3122
|
var init_fetch_proxy_handler = __esm({
|
|
3086
3123
|
"src/host/fetch-proxy-handler.ts"() {
|
|
3087
3124
|
"use strict";
|
|
3088
3125
|
import_http2 = __toESM(require("http"), 1);
|
|
3089
3126
|
import_https = __toESM(require("https"), 1);
|
|
3090
|
-
|
|
3127
|
+
init_fetch_proxy_overrides();
|
|
3091
3128
|
STRIP_FETCH_PROXY_HEADERS = /* @__PURE__ */ new Set([
|
|
3092
3129
|
"host",
|
|
3093
3130
|
"origin",
|
|
3094
3131
|
"referer",
|
|
3095
3132
|
"user-agent",
|
|
3133
|
+
"accept-encoding",
|
|
3096
3134
|
"cookie",
|
|
3097
3135
|
"connection",
|
|
3098
3136
|
"keep-alive",
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.59 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sootsim",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.59",
|
|
4
4
|
"description": "sootsim CLI + vite/metro plugins + skills registry. bridge client for driving the proprietary sootsim-engine over WebSocket.",
|
|
5
5
|
"author": "Tamagui LLC",
|
|
6
6
|
"license": "MIT",
|
|
@@ -85,6 +85,7 @@
|
|
|
85
85
|
"default": "./dist-lib/host/bridge-host.cjs"
|
|
86
86
|
},
|
|
87
87
|
"./host/fetch-proxy-handler": "./src/host/fetch-proxy-handler.ts",
|
|
88
|
+
"./host/fetch-proxy-overrides": "./src/host/fetch-proxy-overrides.ts",
|
|
88
89
|
"./scripts/dev-server-scanner": "./scripts/dev-server-scanner.ts",
|
|
89
90
|
"./scripts/demo-app-registry": "./scripts/demo-app-registry.ts",
|
|
90
91
|
"./detox": "./detox/index.ts",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.57 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a,b,c,d}from"./chunk-SLDVUFO7.js";import"./chunk-CH2EJFOY.js";import"./chunk-LAHQ2FEO.js";import"./chunk-GPYMDARN.js";import"./chunk-PNPC7W2J.js";import"./chunk-YDARYKX2.js";export{c as ensureDaemonRunning,a as ensureRuntimeInstalled,d as ensureSootsimReady,b as resolveBootstrapPort};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.57 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a as D,b as j,c as se}from"./chunk-TL3533Q6.js";import{b as L}from"./chunk-CQVVHX4D.js";import{g as W}from"./chunk-S5J72XOK.js";import{a as I,b as q}from"./chunk-JTEXFSXZ.js";import{c as ie}from"./chunk-ZR5BC6VJ.js";import{d as ne}from"./chunk-M7CZODKE.js";import{a as ee}from"./chunk-CU7PKBB2.js";import{b as re,c as x,d as b,e as C}from"./chunk-CH2EJFOY.js";import{c as k,d as g,e as E}from"./chunk-LAHQ2FEO.js";import{E as oe,F as te}from"./chunk-PNPC7W2J.js";import xe from"node:fs";import Ce from"node:os";import K from"node:path";function he(o){return o.replace(/^\[|\]$/g,"").toLowerCase()}function G(o){let t=he(o);return t==="localhost"||t.endsWith(".localhost")||t==="0.0.0.0"||t==="::1"||/^127(?:\.\d{1,3}){3}$/.test(t)}function ae(o){return new Error(`could not resolve a native bundle for ${o}. pass an explicit bundle URL or open Connect and choose the app there.`)}function we(o,t){return o?.includes("/one/metro-entry.bundle")?"one":typeof t=="string"&&t?"expo":"unknown"}function le(o,t,e){return`${o}//${t}:${e}`}function ye(o){if(typeof window>"u")return!1;try{let t=new URL(o);return G(t.hostname)&&G(window.location.hostname)&&t.origin!==window.location.origin}catch{return!1}}async function ce(o,t){let e={...t,cache:t?.cache??"no-store"};return ye(o)?fetch(`/__fetch-proxy?url=${encodeURIComponent(o)}`,e):fetch(o,e)}function be(o){return o==="https:"?443:80}function Se(o){let t=o.pathname||"/";return(t==="/"||t==="")&&!o.search&&!o.hash}async function me(o,t){let e=o.replace(/\/+$/,"");try{let n=await ce(`${e}/`,{headers:{"expo-platform":"ios"}});if(n.ok){let r=await n.json(),a=r?.extra?.expoClient||r?.extra||{},i=typeof r?.launchAsset?.url=="string"?r.launchAsset.url:void 0;if(i||a.name)return{bundleUrl:se(i||`${e}${j}`),port:t,framework:we(i,a.sdkVersion),projectName:a.name}}}catch{}try{let n=await ce(`${e}/status`);if(n.ok&&(await n.text()).includes("packager-status:running"))return{bundleUrl:`${e}${j}`,port:t,framework:"metro"}}catch{}return null}async function $e(o){return me(le("http:","localhost",o),o)}async function Q(o){let t=o.trim();if(/^\d+$/.test(t)){let s=parseInt(t,10),l=await $e(s);if(l)return l;throw ae(`localhost:${s}`)}let e=t.startsWith("http")?t:`http://${t}`,n;try{n=new URL(e)}catch{throw new Error(`could not parse "${o}". pass a dev-server port, a dev-server base URL, or a full bundle URL.`)}let r=n.protocol||"http:",a=n.port?parseInt(n.port,10):be(r),i=le(r,n.hostname,a);if(Se(n)){let s=await me(i,a);if(s)return s;throw ae(i)}return{bundleUrl:n.toString(),port:a,framework:"unknown"}}function qe(){console.error(" no sootsim desktop companion found."),console.error(""),console.error(" install the desktop app:"),console.error(" sootsim install-desktop"),console.error(""),console.error(" or wire sootsim into your own project so your dev server hosts the bridge:"),console.error(" sootsim setup-repo"),console.error("")}function de(o){let t=I();if(console.log(` note: no sootsim bridge detected on port ${o}`),t){console.log(" launch the installed companion with:"),console.log(" sootsim electron");return}console.log(""),console.log(" to get a bridge running, either:"),console.log(" sootsim install-desktop # download the electron app"),console.log(" sootsim setup-repo # wire sootsim into your own project")}function ve(o){console.error(""),console.error(` no sim is connected to the sootsim bridge on port ${o}.`),console.error(""),console.error(" start your app dev server, then open it in sootsim:"),console.error(" npx expo start --localhost --port 8081"),console.error(" sootsim open 8081"),console.error(""),console.error(" then inspect the live app:"),console.error(" sootsim describe")}async function We(o,t,e){let n=[];try{n=await o.listSims()}catch{}if(console.error(""),n.length===0){ve(t);return}console.error(` no sim with id "${e}" is connected to the bridge on port ${t}.`),console.error(""),console.error(" connected sims:");for(let r of n){let a=[r.isPrimary?"primary":null,r.readyState].filter(Boolean).join(", ");console.error(` ${r.id} (${a})`)}console.error(""),console.error(" pass a valid --sim id, or run `sootsim list` to see all sessions.")}var Pe={rn:"/rn",connectrn:"/rn","connect-rn":"/rn",clock:"/app/clock","native-ui":"/app/native-ui",tamagui:"/app/tamagui",settings:"/app/settings",photos:"/app/photos",camera:"/app/camera"};function P(o){return new Promise(t=>setTimeout(t,o))}function V(o){return o.trim()}function J(o){try{let t=new URL(o),e=t.pathname.replace(/\/+$/,"")||"/";return t.searchParams.has("open")||t.searchParams.has("port")||t.searchParams.has("bundle")||t.searchParams.has("demo")||t.pathname.includes("/sootsim/index.html")||e==="/sootsim"||t.pathname==="/__soot"||t.pathname==="/__soot/"||e==="/rn"||/^\/rn\/[^/]+$/i.test(e)||/^\/app\/[^/]+$/i.test(e)||e==="/__soot/rn"||/^\/__soot\/rn\/[^/]+$/i.test(e)||/^\/__soot\/app\/[^/]+$/i.test(e)}catch{return!1}}async function co(o){let t=V(o);return(await Q(t)).bundleUrl}function X(o){let t=o.replace(/\/+$/,"")||"/";return t==="/__soot"||t.startsWith("/__soot/")?"/__soot":""}function ke(o,t){let e=V(o),n=new URL(t),r=X(n.pathname);return n.pathname=`${r}/rn`,n.searchParams.delete("bundle"),n.searchParams.delete("demo"),n.searchParams.delete("app"),n.searchParams.delete("open"),n.searchParams.delete("port"),/^\d+$/.test(e)?n.pathname=`${r}/rn/${e}`:(n.pathname=`${r}/rn`,n.searchParams.set("open",e)),n.toString()}function Ie(o){let t=V(o);return/^\d+$/.test(t)||/^https?:\/\//i.test(t)?!0:/^(localhost|127\.0\.0\.1|\[::1\]|[^/]+\.localhost):\d+(?:\/.*)?$/i.test(t)}async function Me(o,t){let e=await Q(o),n=new URL(t),r=X(n.pathname);return n.pathname=`${r}/rn`,n.searchParams.delete("open"),n.searchParams.delete("port"),n.searchParams.delete("demo"),n.searchParams.delete("app"),n.searchParams.set("bundle",e.bundleUrl),n.toString()}function Te(o){return o.startsWith("~/")?K.join(Ce.homedir(),o.slice(2)):K.isAbsolute(o)?o:K.resolve(process.cwd(),o)}function Ue(o){let t={};for(let e=0;e<o.length;e++){if(o[e]!=="--replace")continue;let n=o[e+1];n||(console.error(" sootsim open: --replace expects <module>=<file>"),process.exit(1));let r=n.indexOf("=");(r<=0||r===n.length-1)&&(console.error(" sootsim open: --replace expects <module>=<file>"),process.exit(1));let a=n.slice(0,r).trim(),i=Te(n.slice(r+1).trim());xe.existsSync(i)||(console.error(` sootsim open: replacement file not found: ${i}`),process.exit(1)),t[a]={file:i},e++}return Object.keys(t).length>0?{modules:t}:void 0}function pe(){let o=oe();return te(o)&&o.runtimePort>0?`http://localhost:${o.runtimePort}/`:ee}async function N(o,t=pe()){if(!o)return new URL(t).toString();if(J(o))return new URL(o).toString();let e=Pe[o.toLowerCase()];if(e){let n=new URL(t),r=X(n.pathname);return n.pathname=`${r}${e}`,n.toString()}return Ie(o)?Me(o,t):ke(o,t)}function ue(o,t){let e=o?.url||o?.origin||t;try{let n=new URL(e);return n.searchParams.delete("bundle"),n.searchParams.delete("demo"),n.searchParams.delete("app"),n.searchParams.delete("open"),n.searchParams.delete("port"),n.searchParams.delete("inspectOpen"),n.toString()}catch{return t}}async function Be(o,t,e){let n=new URL(await N(o,t));return n.searchParams.set("inspectOpen",e),n.toString()}async function Oe(o,t,e,n={}){let r=n.attempts??30,a=n.intervalMs??500,i=n.minNodeCount??10;for(let s=0;s<r;s++){let l=b(o,{commandTimeoutMs:t,simId:e,simIdSource:"flag"});try{let c=await l.send({type:"evaluate",code:"(async () => (await window.__sootsimTest?.getNodeCount()) || 0)()"});if(typeof c=="number"&&c>i)return{bridge:l,count:c}}catch{}l.close(),await P(a)}return null}function _e(o){if(!o)return null;try{let t=new URL(o);if(t.searchParams.has("bundle")){let e=t.searchParams.get("bundle")||"";try{let n=new URL(e),r=n.pathname.length>36?`...${n.pathname.slice(-36)}`:n.pathname;return`bundle ${n.host}${r}`}catch{return"bundle"}}return t.searchParams.has("port")?`connect :${t.searchParams.get("port")||""}`:t.searchParams.has("open")?`connect ${t.searchParams.get("open")||""}`:t.searchParams.has("demo")?`demo ${t.searchParams.get("demo")||"default"}`:t.pathname.includes("/sootsim/index.html")||t.pathname==="/sootsim/"||t.pathname==="/sootsim"?"embedded sootsim":null}catch{return null}}function Re(o,t){if(o.length===0){console.log(" no sims connected");return}console.log(` connected sims (${o.length}):
|
|
3
|
-
`);for(let e of o){let n=e.lockedBy&&e.lockExpiresAt?`locked by ${e.lockedBy} (${Math.max(0,Math.round((e.lockExpiresAt-Date.now())/1e3))}s)`:"",r=[e.isPrimary?"primary":"",e.id===t?"selected":"",e.readyState,e.attachedCliCount&&e.attachedCliCount>0?"in use":"",e.userFocused?"focused":"",n].filter(Boolean);console.log(` ${e.id}${r.length?` [${r.join(", ")}]`:""}`);let a=_e(e.url);if(a&&console.log(` loaded: ${a}`),e.url?console.log(` url: ${e.url}`):e.origin&&console.log(` origin: ${e.origin}`),e.title&&console.log(` title: ${e.title}`),console.log(` connected: ${new Date(e.connectedAt).toISOString()}`),e.lastActiveAt&&e.lastActiveAt>0){let i=Math.round((Date.now()-e.lastActiveAt)/1e3),s=i<60?`${i}s ago`:i<3600?`${Math.round(i/60)}m ago`:`${Math.round(i/3600)}h ago`;console.log(` last active: ${s}`)}}}async function A(o,t,e,n={}){let r=n.attempts??30,a=n.intervalMs??500;for(let i=0;i<r;i++){let s=b(o,{commandTimeoutMs:t});try{let c=(await s.listSims()).find(e);if(c)return c}catch{}finally{s.close()}await P(a)}return null}async function Ee(o,t,e,n={}){let r=n.attempts??20,a=n.intervalMs??250;for(let i=0;i<r;i++){let s=b(o,{commandTimeoutMs:t});try{let c=(await s.listSims()).find(f=>f.id===e);if(!c||c.readyState!=="open")return!0}catch{return!0}finally{s.close()}await P(a)}return!1}function U(o,t){if(t){let r=t.trim(),a=o.find(i=>i.id===r);if(!a)throw new Error(`no sim connected with id ${r}`);return a}let e=o.find(r=>r.isPrimary&&r.readyState==="open");if(e)return e;let n=o.find(r=>r.readyState==="open");if(n)return n;throw new Error("no sim connected")}function M(o,t,e){console.log(` ${e==="current sim"?"loaded":"opened"}: ${o} [${e}]`),console.log(` current sim: ${t.id}`),console.log(JSON.stringify({simId:t.id,url:t.url},null,2))}async function T(o,t,e){if(e.includes("--no-describe"))return;let n=process.env.SOOTSIM_QUIET_TARGET_NOTICE;process.env.SOOTSIM_QUIET_TARGET_NOTICE="1";try{await Le(o,t,{stableMs:150,maxMs:400});let r=b(o,{commandTimeoutMs:3e3,simId:t,cliLabel:"open --describe",simIdSource:"flag"});try{let i=`(async () => {
|
|
4
|
-
const t = window.__sootsimTest
|
|
5
|
-
const ms = window.SootSim?.bridges?.mainShell
|
|
6
|
-
if (!t) return null
|
|
7
|
-
let shell = null
|
|
8
|
-
try { shell = ms?.getState ? await ms.getState() : null } catch {}
|
|
9
|
-
const tree = await t.dumpTree(12, ${JSON.stringify({describe:!0,verbose:!1,filter:""})})
|
|
10
|
-
return { tree, shell }
|
|
11
|
-
})()`,s=await r.send({type:"evaluate",code:i});if(!s?.tree)return;if(console.log(""),s.shell?.state){let l=[`state=${s.shell.state}`,s.shell.activeApp?`app=${s.shell.activeApp}`:null].filter(Boolean);console.log(` shell: ${l.join(" ")}`)}console.log(s.tree)}finally{r.close()}}catch{}finally{n===void 0?delete process.env.SOOTSIM_QUIET_TARGET_NOTICE:process.env.SOOTSIM_QUIET_TARGET_NOTICE=n}}async function Le(o,t,e){let n=Date.now()+e.maxMs,r="(async () => (await window.__sootsimTest?.getNodeCount?.()) || 0)()",a=b(o,{commandTimeoutMs:2e3,simId:t,simIdSource:"flag"});try{let i=-1,s=0;for(;Date.now()<n;){let l=-1;try{let c=await a.send({type:"evaluate",code:r});typeof c=="number"&&(l=c)}catch{}if(l>=0&&l===i){if(Date.now()-s>=e.stableMs)return}else i=l,s=Date.now();await P(50)}}finally{a.close()}}async function lo(o,t={}){let e=x(o,{port:t.port,commandTimeoutMs:t.timeoutMs}),n=C(e);try{let r=await n.listSims();Re(r,e.simId)}finally{n.close()}}async function mo(o,t={}){let e=x(o,{port:t.port,commandTimeoutMs:t.timeoutMs,stripBooleanFlags:["--new","--headless","--ephemeral"],stripValueFlags:["--base-url","--replace","--driver","--profile"]}),n=o.find((m,d)=>o[d-1]==="--profile"),r=o.includes("--ephemeral");n&&r&&(console.error(" sootsim open: --profile cannot be combined with --ephemeral"),process.exit(1));let a=n?ie(n).id:void 0,i=!!a||r,s=o.includes("--new")||i,l=Ue(o);s&&e.simIdSource==="flag"&&(console.error(" sootsim open: --new, --profile, and --ephemeral cannot be combined with --sim"),process.exit(1));let c=e.positional[0]||"",f=o.find((m,d)=>o[d-1]==="--driver")||"",h=o.includes("--headless"),S=o.find((m,d)=>o[d-1]==="--base-url")||pe(),B=o.includes("--base-url"),$=k();if(!f&&!s&&(e.simIdSource==="flag"||e.simIdSource==="saved"&&!!$)){let m=C(e),d=e.simId?` --sim ${e.simId}`:"",u=!1;try{let p=null;try{let y=await m.listSims();if(e.simIdSource==="saved"?(p=y.find(v=>v.id===$&&v.readyState==="open")??null,p||E()):p=U(y,e.simId),!p)if(e.simIdSource==="saved")u=!0;else throw new Error("no sim connected");if(!u&&p){let v=B||J(c)?S:ue(p,S),R=await N(c,D(v,l));m.send({type:"evaluate",simId:p.id,code:`window.location.href = ${JSON.stringify(R)}`}).catch(()=>{})}}catch(y){console.error(` open failed: ${y instanceof Error?y.message:String(y)}`),await L(m,{errorsCommand:`sootsim get errors 5${d}`,warningsCommand:`sootsim get warnings 5${d}`,requestsCommand:`sootsim get requests 5${d}`}),process.exit(1)}if(!u&&p){await P(1500);let y=await Oe(e.wsPort,e.commandTimeoutMs,p.id);y||(console.error(" timed out waiting for current sim to load target"),process.exit(1)),y.bridge.close(),g(p.id);let v=B||J(c)?S:ue(p,S),R=await N(c,D(v,l));M(R,{...p,url:R},"current sim"),await T(e.wsPort,p.id,o);return}}finally{m.close()}}let Y=D(S,l),ge=await N(c,Y),Z=`cli-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,w=await Be(c,Y,Z),F={newWindow:!0},O=m=>m.url?.includes(`inspectOpen=${Z}`)??!1;if(f){let m=W(f);m||(console.error(` unknown driver "${f}" \u2014 run \`sootsim list --drivers\``),process.exit(1));let d=await m.launch({url:w,headless:h,newWindow:F.newWindow,profileId:a,ephemeralProfile:r});d.launched||(console.error(` ${m.name} driver: ${d.message}`),process.exit(1));let u=await A(e.wsPort,e.commandTimeoutMs,O,{attempts:60,intervalMs:500});u||(console.error(" timed out waiting for opened sim to connect"),process.exit(1)),g(u.id),M(w,u,`${m.name} driver`),await T(e.wsPort,u.id,o);return}if(i){let m=I();m||(console.error(" profiles require electron or playwright; install the desktop companion or use `--driver playwright`"),process.exit(1));try{(await q(w,m,{profileId:a,ephemeralProfile:r})).launched||(console.error(" desktop companion failed to start"),process.exit(1))}catch(u){console.error(` desktop companion failed: ${u instanceof Error?u.message:String(u)}`),process.exit(1)}let d=await A(e.wsPort,e.commandTimeoutMs,O,{attempts:40,intervalMs:500});d||(console.error(" timed out waiting for profiled sim to connect"),process.exit(1)),g(d.id),M(w,d,"desktop companion"),await T(e.wsPort,d.id,o);return}let H=!1,z=!1;try{let m=b(e.wsPort,{commandTimeoutMs:2e3});try{await m.listSims(),H=!0}finally{m.close()}}catch{}if(H)try{let m=b(e.wsPort,{commandTimeoutMs:3e3});try{await m.openUrl(w,F),z=!0}finally{m.close()}}catch{}if(!z){let m=I();if(m)try{if((await q(w,m)).launched){let u=await A(e.wsPort,e.commandTimeoutMs,O,{attempts:20,intervalMs:500});if(u){g(u.id),M(w,u,"desktop companion"),await T(e.wsPort,u.id,o);return}}}catch{}try{await ne(w,F)}catch(d){console.error(` open failed: ${d instanceof Error?d.message:String(d)}`),W("playwright")?.availability().available?console.error(" no system browser found \u2014 retry with `sootsim open \u2026 --driver playwright` for a headless sim."):console.error(" run `sootsim list --drivers` to see available drivers."),process.exit(1)}if(!H){console.log(` opened: ${ge}`),de(e.wsPort);return}}let _=await A(e.wsPort,e.commandTimeoutMs,O,{attempts:30,intervalMs:500});_||(console.error(" timed out waiting for opened sim to connect"),process.exit(1)),g(_.id),M(w,_,z?"bridge":"direct shell open"),await T(e.wsPort,_.id,o)}async function fe(o,t={}){let e=x(o,{port:t.port,commandTimeoutMs:t.timeoutMs,stripBooleanFlags:["--force"]}),n=o.includes("--force"),r=C(e),a=e.simId?` --sim ${e.simId}`:"";try{try{let i=await r.listSims(),s=U(i,e.positional[0]||e.simId);if(s.lockedBy&&s.lockExpiresAt&&s.lockExpiresAt>Date.now()){let l=Math.max(0,Math.round((s.lockExpiresAt-Date.now())/1e3));s.lockedByKind==="user-active"&&(console.error(` refused: ${s.id} is locked by the active user (${l}s) \u2014 that's a live human tab`),console.error(" run `sootsim open --new` for a fresh investigation sim"),process.exit(1)),n||(console.error(` refused: ${s.id} is leased by ${s.lockedBy} (${l}s)`),console.error(` \`sootsim use ${s.id} --force\` to take it, or \`sootsim open --new\` for a fresh sim`),process.exit(1))}await r.focusSim(s.id),g(s.id),console.log(` using: ${s.id}`)}catch(i){console.error(` use failed: ${i instanceof Error?i.message:String(i)}`),await L(r,{errorsCommand:`sootsim get errors 5${a}`,warningsCommand:`sootsim get warnings 5${a}`,requestsCommand:`sootsim get requests 5${a}`}),process.exit(1)}}finally{r.close()}}async function uo(o,t={}){await fe(o,t)}async function po(o,t={}){await fe(o,t)}async function fo(o,t={}){let e=x(o,{port:t.port,commandTimeoutMs:t.timeoutMs,stripBooleanFlags:["--force"]}),n=o.includes("--force"),r=C(e);try{try{let a=await r.listSims(),i=U(a,e.positional[0]||e.simId),s=n&&i.lockedBy&&i.lockedByKind!=="user-active"?i.lockedBy:null,l=await r.claim(i.id,{force:n});g(i.id);let c=Math.max(0,Math.round((l.lockExpiresAt-Date.now())/1e3)),f=l.bootedCount>0?` (booted ${l.bootedCount})`:"";console.log(` claimed: ${l.simId} [${c}s]${f}`),s&&console.log(` took over from: ${s}`)}catch(a){if(a instanceof re){let i=Math.max(0,Math.round(a.lock.expiresInMs/1e3));console.error(` claim failed: locked by ${a.lock.by} for ${i}s more`),console.error(" use --force to take it, or `sootsim open --new` for a fresh sim"),process.exit(1)}console.error(` claim failed: ${a instanceof Error?a.message:String(a)}`),process.exit(1)}}finally{r.close()}}async function De(o,t,e,n){if(n.length===0)return{closed:[],remaining:[]};await Promise.all(n.map(a=>o.closeSim(a).catch(()=>{})));let r=new Set(n);for(let a=0;a<40;a++){let i=[];try{let s=b(t,{commandTimeoutMs:e});try{i=(await s.listSims()).filter(c=>r.has(c.id)&&c.readyState==="open").map(c=>c.id)}finally{s.close()}}catch{i=[]}if(i.length===0)return{closed:[...r],remaining:[]};if(a===39)return{closed:[...r].filter(s=>!i.includes(s)),remaining:i};await P(250)}return{closed:[...r],remaining:[]}}async function go(o,t={}){let e=x(o,{port:t.port,commandTimeoutMs:t.timeoutMs,stripBooleanFlags:["--all","--others"]}),n=C(e),r=e.simId?` --sim ${e.simId}`:"",a=o.includes("--all"),i=o.includes("--others");if(a||i){try{let s=await n.listSims(),l=s.filter($=>$.readyState==="open"),c=null;if(i)try{c=U(s,e.positional[0]||e.simId||k()||void 0).id}catch{c=null}let f=l.map($=>$.id).filter($=>$!==c);if(f.length===0){console.log(c?` nothing to close \u2014 only the kept sim ${c} is connected`:" nothing to close \u2014 no sims connected");return}let h=await De(n,e.wsPort,e.commandTimeoutMs,f),S=k();S&&h.closed.includes(S)&&(c?g(c):E());let B=` closed ${h.closed.length} sim(s)${c?` (kept ${c})`:""}`;console.log(B),h.remaining.length>0&&(console.error(` close failed: still connected: ${h.remaining.join(", ")}`),process.exit(1))}catch(s){console.error(` close failed: ${s instanceof Error?s.message:String(s)}`),process.exit(1)}finally{n.close()}return}try{try{let s=await n.listSims(),l=U(s,e.positional[0]||e.simId),c=s.find(h=>h.id!==l.id&&h.readyState==="open");await n.closeSim(l.id),await Ee(e.wsPort,e.commandTimeoutMs,l.id)||(console.error(` close failed: ${l.id} is still connected`),process.exit(1)),k()===l.id&&(c?g(c.id):E()),console.log(` closed: ${l.id}`)}catch(s){console.error(` close failed: ${s instanceof Error?s.message:String(s)}`),await L(n,{errorsCommand:`sootsim get errors 5${r}`,warningsCommand:`sootsim get warnings 5${r}`,requestsCommand:`sootsim get requests 5${r}`}),process.exit(1)}}finally{n.close()}}export{qe as a,ve as b,We as c,co as d,pe as e,N as f,Be as g,_e as h,Re as i,A as j,lo as k,mo as l,uo as m,po as n,fo as o,go as p};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.57 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.57 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.57 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a as y,c as C}from"./chunk-TL3533Q6.js";import{a as x}from"./chunk-IE22T725.js";import{exec as U}from"child_process";import _ from"http";import D from"net";import{promisify as T}from"util";var P=T(U),E=250,A=1500,M=120;function R(e,r=M){return new Promise(s=>{let t=new D.Socket,o=!1,i=a=>{o||(o=!0,t.destroy(),s(a))};t.setTimeout(r),t.once("connect",()=>i(!0)),t.once("timeout",()=>i(!1)),t.once("error",()=>i(!1)),t.connect(e,"localhost")})}function h(e,r,s="GET",t=E,o={}){return new Promise(i=>{let a=_.request({hostname:"localhost",port:e,path:r,method:s,timeout:t,headers:o},n=>{let c="";n.on("data",l=>c+=l.toString());let u=(()=>{let l=n.headers["content-type"];if(typeof l=="string")return l;if(Array.isArray(l))return l[0]})();n.on("end",()=>i({statusCode:n.statusCode||0,body:c,contentType:u}))});a.on("error",()=>i(null)),a.setTimeout(t,()=>{a.destroy(),i(null)}),a.end()})}var N=[8081,8082,8083,8084,8085,8086,3e3,3001,19e3].map(e=>({port:e,pid:0}));function v(e,r){return!(e<=0||e>=2e4||r.has(e)||e>=5170&&e<=5200)}async function L(e=[]){let r=new Set(e);try{let{stdout:s}=await P("lsof -iTCP -sTCP:LISTEN -P -n 2>/dev/null | grep -E '^(node|bun)'",{encoding:"utf8",timeout:2e3});if(s.trim()){let t=new Map;for(let o of s.trim().split(`
|
|
3
|
-
`)){let i=o.trim().split(/\s+/);if(i.length<9)continue;let a=Number(i[1]),c=i[8].match(/:(\d+)$/);if(!c)continue;let u=Number(c[1]);v(u,r)&&(t.has(u)||t.set(u,a))}if(t.size>0)return[...t.entries()].map(([o,i])=>({port:o,pid:i}))}}catch{}try{let{stdout:s}=await P(`ss -tlnp 2>/dev/null | grep -E '"(node|bun)"'`,{encoding:"utf8",timeout:2e3});if(s.trim()){let t=new Map;for(let o of s.trim().split(`
|
|
4
|
-
`)){let i=o.match(/:(\d+)\s/),a=o.match(/pid=(\d+)/);if(!i)continue;let n=Number(i[1]),c=a?Number(a[1]):0;v(n,r)&&(t.has(n)||t.set(n,c))}if(t.size>0)return[...t.entries()].map(([o,i])=>({port:o,pid:i}))}}catch{}return N.filter(s=>v(s.port,r))}var S=new Map;async function $(e){if(e<=0)return null;let r=S.get(e);if(r)return r;try{let{stdout:s}=await P(`lsof -p ${e} -a -d cwd -Fn 2>/dev/null`,{encoding:"utf8",timeout:1500});for(let t of s.split(`
|
|
5
|
-
`))if(t.startsWith("n")&&t.length>1){let o=t.slice(1).trim();if(o)return S.set(e,o),o}}catch{}return null}function I(e,r){return{port:e,framework:r,bundleUrl:m(e,`http://localhost:${e}/index.bundle?platform=ios&dev=true&hot=true&minify=false`),hmrUrl:`ws://localhost:${e}/hot`,lastSeen:Date.now()}}function m(e,r){let s=x.find(o=>o.preferredPort===e),t=s?.runtimeConfig?y(r,s.runtimeConfig):r;return C(t)}function O(e){return e.includes("/node_modules/one/metro-entry.bundle")}function j(e){try{let r=JSON.parse(e);return r&&typeof r=="object"?r:null}catch{return null}}function w(e,r,s){if(!r)return e;try{let t=JSON.parse(r.body),o=t?.extra?.expoClient||t?.extra||{};o.name&&(e.projectName=o.name),o.ios?.bundleIdentifier&&(e.bundleId=o.ios.bundleIdentifier),e.framework==="metro"&&o.sdkVersion&&(e.framework="expo");let i=t?.launchAsset?.url;i&&!e.patched&&!O(e.bundleUrl)&&(e.bundleUrl=m(e.port,i));let a=o.iconUrl||o.ios?.iconUrl||o.icon||o.ios?.icon;if(a)if(e.iconPath=a,s)if(a.startsWith("http"))e.iconUrl=s(a);else{let n=a.replace(/^\.\//,"");e.iconUrl=s(`http://localhost:${e.port}/assets/${n}`)}else e.iconUrl=a.startsWith("http")?a:`http://localhost:${e.port}/assets/${a.replace(/^\.\//,"")}`}catch{}return e}var d=new Set,f=new Set,b=new Set;async function H(e,r){if(!await R(e))return null;let s="/node_modules/one/metro-entry.bundle?platform=ios&dev=true",[t,o,i,a,n]=await Promise.all([d.has(e)?Promise.resolve(null):h(e,"/__soot/"),h(e,"/status"),h(e,s,"HEAD"),b.has(e)?Promise.resolve(null):h(e,"/","GET",A,{"expo-platform":"ios"}),f.has(e)?Promise.resolve(null):h(e,"/_expo/status")]);n&&n.statusCode===200?f.delete(e):f.has(e)||f.add(e);let c=a?j(a.body):null,u=typeof c?.launchAsset?.url=="string"?c.launchAsset.url:null,l=c?.extra?.expoClient||c?.extra||{};if(c&&(u||typeof l.name=="string")){d.add(e);let p=u||`http://localhost:${e}/index.bundle?platform=ios&dev=true&hot=true&minify=false`,k=p.includes("/one/metro-entry.bundle")?"one":"expo";return w({port:e,framework:k,bundleUrl:m(e,p),hmrUrl:`ws://localhost:${e}/hot`,lastSeen:Date.now()},a,r)}return i&&i.statusCode>0&&i.statusCode<400&&/application\/javascript/i.test(i.contentType||"")?(d.add(e),b.add(e),w({port:e,framework:"one",bundleUrl:m(e,`http://localhost:${e}${s}&minify=false`),hmrUrl:`ws://localhost:${e}/hot`,lastSeen:Date.now()},a,r)):o&&o.body.includes("packager-status:running")?(d.add(e),w(I(e,n&&n.statusCode===200?"expo":"metro"),a,r)):t&&t.statusCode===200&&t.body.includes("sootsim-patched")?(d.delete(e),w({port:e,framework:"one",bundleUrl:m(e,`http://localhost:${e}/__soot/bundle.js`),hmrUrl:`ws://localhost:${e}/hot`,lastSeen:Date.now(),patched:!0},a,r)):(d.add(e),null)}function B(e){let r=e.projectName?.trim().toLowerCase();return!!(r==="soot"||r==="sootsim"||e.bundleId?.trim().toLowerCase()?.startsWith("dev.soot"))}var g=new Map,G=3e4,W=1500;function F(e){return!e||e.framework==="metro"||e.framework==="unknown"}function z(e){return e?m(e.port,e.bundleUrl)===e.bundleUrl:!0}function q(e,r,s=Date.now()){if(r===0||e.pid!==r||!z(e.result))return!1;let t=s-e.cachedAt;return!(e.result===null&&t>=G||F(e.result)&&t>=W)}async function ee(e={}){let r=await L(e.excludePorts),s=new Set(r.map(n=>n.port));for(let n of[...g.keys()])s.has(n)||g.delete(n);for(let n of[...d])s.has(n)||d.delete(n);for(let n of[...f])s.has(n)||f.delete(n);for(let n of[...b])s.has(n)||b.delete(n);let t=[],o=[];for(let{port:n,pid:c}of r){let u=g.get(n);if(u&&q(u,c)){u.result&&t.push(u.result);continue}u&&u.pid!==c&&(d.delete(n),f.delete(n),b.delete(n)),o.push({port:n,pid:c})}o.length>0&&(await Promise.all(o.map(c=>H(c.port,e.buildIconProxyUrl)))).forEach((c,u)=>{let{port:l,pid:p}=o[u];p!==0&&g.set(l,{pid:p,result:c,cachedAt:Date.now()}),c&&t.push(c)});let i=new Map;for(let{port:n,pid:c}of r)c>0&&i.set(n,c);await Promise.all(t.map(async n=>{let c=i.get(n.port);if(!c)return;n.pid=c;let u=await $(c);u&&(n.cwd=u)}));let a=new Set(i.values());for(let n of[...S.keys()])a.has(n)||S.delete(n);return t.filter(n=>!B(n))}export{ee as a};
|