sootsim 0.1.239 → 0.1.241

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 (146) hide show
  1. package/dist-cli/bin.js +4 -4
  2. package/dist-cli/chunks/{agent-5KVGVFXJ.js → agent-7Z3WG3YJ.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-YVXMSV3X.js → agent-wrapper-IMTGEJ7T.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-IXF6YPQZ.js → app-fonts-7E66PSAV.js} +2 -2
  5. package/dist-cli/chunks/{assert-FMNM5VTT.js → assert-IEBAQZC7.js} +2 -2
  6. package/dist-cli/chunks/{auth-LNSDYZU4.js → auth-FRMHPA2X.js} +2 -2
  7. package/dist-cli/chunks/beta-AMMCLKHD.js +2 -0
  8. package/dist-cli/chunks/{camera-INMAD3CG.js → camera-O67TQUAH.js} +2 -2
  9. package/dist-cli/chunks/{chunk-WXYRA447.js → chunk-2DY3JHFK.js} +1 -1
  10. package/dist-cli/chunks/{chunk-ZL2KSYJP.js → chunk-4JSCYLLH.js} +1 -1
  11. package/dist-cli/chunks/{chunk-HV2ZRFGP.js → chunk-4V6MFWDY.js} +1 -1
  12. package/dist-cli/chunks/{chunk-BWKVAEAJ.js → chunk-5COOJUTE.js} +1 -1
  13. package/dist-cli/chunks/{chunk-XWPQVHOL.js → chunk-5ZNYFTOB.js} +2 -2
  14. package/dist-cli/chunks/{chunk-QHJLYAOH.js → chunk-7I3PV2RE.js} +2 -2
  15. package/dist-cli/chunks/{chunk-JBUMYCFR.js → chunk-AROVTS3P.js} +2 -2
  16. package/dist-cli/chunks/{chunk-LWE27HF7.js → chunk-BIHEU677.js} +3 -3
  17. package/dist-cli/chunks/{chunk-UZRZGXQ4.js → chunk-CAOW2O5V.js} +2 -2
  18. package/dist-cli/chunks/{chunk-SOZIIFPY.js → chunk-CSZOZRKB.js} +3 -3
  19. package/dist-cli/chunks/{chunk-VIM3WDAA.js → chunk-DS2KFLBO.js} +1 -1
  20. package/dist-cli/chunks/chunk-ECRSTV5C.js +118 -0
  21. package/dist-cli/chunks/{chunk-NJQSCTFC.js → chunk-EY3ZQWUQ.js} +52 -52
  22. package/dist-cli/chunks/{chunk-544G2PCM.js → chunk-F5YD4BLA.js} +2 -2
  23. package/dist-cli/chunks/{chunk-X7JZ4KTU.js → chunk-FR7JCFAR.js} +1 -1
  24. package/dist-cli/chunks/{chunk-YIS2RXPE.js → chunk-GFZLDVLE.js} +1 -1
  25. package/dist-cli/chunks/{chunk-PVIUYYIS.js → chunk-GVTSKLLS.js} +2 -2
  26. package/dist-cli/chunks/{chunk-KCS6OYQV.js → chunk-H7G2QGUG.js} +2 -2
  27. package/dist-cli/chunks/{chunk-NDU5EJFW.js → chunk-H7SP6J3H.js} +2 -2
  28. package/dist-cli/chunks/{chunk-CJRALJVV.js → chunk-HNI6U6M5.js} +1 -1
  29. package/dist-cli/chunks/{chunk-P5JIE7R6.js → chunk-IF5VXL45.js} +2 -2
  30. package/dist-cli/chunks/{chunk-BKDHODNB.js → chunk-JMTQBHQY.js} +1 -1
  31. package/dist-cli/chunks/{chunk-CUDTQFGP.js → chunk-JX4N376W.js} +2 -2
  32. package/dist-cli/chunks/{chunk-FOTAUF7Q.js → chunk-KFI26HW5.js} +1 -1
  33. package/dist-cli/chunks/chunk-KLXLOMI6.js +1 -0
  34. package/dist-cli/chunks/{chunk-JPNTLGLA.js → chunk-KN3Q6VSC.js} +2 -2
  35. package/dist-cli/chunks/{chunk-JOSDTQZ3.js → chunk-LVUOVKJO.js} +2 -2
  36. package/dist-cli/chunks/{chunk-VBO7OQLR.js → chunk-MCAJBAWD.js} +2 -2
  37. package/dist-cli/chunks/{chunk-R5I2OBQM.js → chunk-MGLTIS7P.js} +2 -2
  38. package/dist-cli/chunks/{chunk-SLIYVKRX.js → chunk-PR6AOTP5.js} +1 -1
  39. package/dist-cli/chunks/{chunk-5VCOEPSJ.js → chunk-PVUUG5YW.js} +2 -2
  40. package/dist-cli/chunks/{chunk-EQYRXSBE.js → chunk-R3EZVIEM.js} +2 -2
  41. package/dist-cli/chunks/{chunk-HE5NBBLH.js → chunk-U7XJNNGI.js} +3 -3
  42. package/dist-cli/chunks/{chunk-ECPEYFHV.js → chunk-UF333CGY.js} +2 -2
  43. package/dist-cli/chunks/{chunk-QYVGMN3I.js → chunk-VVUANJFA.js} +72 -23
  44. package/dist-cli/chunks/{chunk-SBSL3DUQ.js → chunk-WFB3ICCN.js} +1 -1
  45. package/dist-cli/chunks/{chunk-6XF2EHL2.js → chunk-WIHKSZM4.js} +1 -1
  46. package/dist-cli/chunks/{chunk-MDOTB5DP.js → chunk-WPWLJFKF.js} +2 -2
  47. package/dist-cli/chunks/{chunk-GI2S43VF.js → chunk-YLWUYESW.js} +1 -1
  48. package/dist-cli/chunks/{chunk-D4YH5KNQ.js → chunk-YX7S6N42.js} +2 -2
  49. package/dist-cli/chunks/{chunk-44WCYVFQ.js → chunk-Z72IF5FC.js} +2 -2
  50. package/dist-cli/chunks/chunk-ZGSGMGE3.js +1 -0
  51. package/dist-cli/chunks/{chunk-SRMYUHBI.js → chunk-ZUZLQ4ZJ.js} +1 -1
  52. package/dist-cli/chunks/{chunk-DJIWF2SR.js → chunk-ZYJCVJFP.js} +1 -1
  53. package/dist-cli/chunks/cli-version-DIYZFJMN.js +2 -0
  54. package/dist-cli/chunks/{compat-VYOIJUW6.js → compat-ZRUVBIK7.js} +3 -3
  55. package/dist-cli/chunks/{config-ZJIIQF6K.js → config-VKQDFC5Z.js} +2 -2
  56. package/dist-cli/chunks/{control-KFAL3LD7.js → control-OYK2J4JW.js} +2 -2
  57. package/dist-cli/chunks/daemon-YQLY7PVM.js +2 -0
  58. package/dist-cli/chunks/{debug-RCY6BSLW.js → debug-3WEO7ZRW.js} +3 -3
  59. package/dist-cli/chunks/{desktop-FRZILY3U.js → desktop-DVOFHJKU.js} +3 -3
  60. package/dist-cli/chunks/{detox-W2HOZRDP.js → detox-GAGC276D.js} +2 -2
  61. package/dist-cli/chunks/{device-WRWT7SEE.js → device-256KFP2G.js} +2 -2
  62. package/dist-cli/chunks/{diagnose-3KSX2NJC.js → diagnose-GYKUU3N5.js} +2 -2
  63. package/dist-cli/chunks/drivers-FHWFHVQF.js +2 -0
  64. package/dist-cli/chunks/{film-QN7NUW6Z.js → film-WAV3WPQK.js} +3 -3
  65. package/dist-cli/chunks/flow-WKPPIDM6.js +2 -0
  66. package/dist-cli/chunks/help-P4A7NNSC.js +2 -0
  67. package/dist-cli/chunks/{hidden-runtime-alias-NIH62HCH.js → hidden-runtime-alias-DODMMNOJ.js} +2 -2
  68. package/dist-cli/chunks/{home-paths-3CPTCZDU.js → home-paths-QU5UX3MT.js} +2 -2
  69. package/dist-cli/chunks/inspect-NIHY67NU.js +2 -0
  70. package/dist-cli/chunks/install-desktop-NA53KD6G.js +2 -0
  71. package/dist-cli/chunks/{login-HQ3356B6.js → login-OURQ3DVM.js} +4 -4
  72. package/dist-cli/chunks/{logout-LVVXQS5S.js → logout-ZYVJAPBO.js} +2 -2
  73. package/dist-cli/chunks/{maestro-34Y7GOG5.js → maestro-H2NGXNF4.js} +3 -3
  74. package/dist-cli/chunks/{maestro-generate-XBIZ7Z6U.js → maestro-generate-DA2IZPK2.js} +3 -3
  75. package/dist-cli/chunks/{mode-VXZR6I46.js → mode-QTK3ERUW.js} +2 -2
  76. package/dist-cli/chunks/optional-demo-registry-ZLN23OYV.js +2 -0
  77. package/dist-cli/chunks/{perf-IBHKDDFN.js → perf-WZ4OPYXV.js} +2 -2
  78. package/dist-cli/chunks/{record-S5WYHPNR.js → record-ZQSUHQJU.js} +3 -3
  79. package/dist-cli/chunks/runtime-RM67M6H3.js +2 -0
  80. package/dist-cli/chunks/{screenshot-command-T65M2SYC.js → screenshot-command-UDJ6TEAM.js} +3 -3
  81. package/dist-cli/chunks/{screenshots-capture-75AHIYWA.js → screenshots-capture-4FK4NYXG.js} +2 -2
  82. package/dist-cli/chunks/serve-MCT4HKR7.js +41 -0
  83. package/dist-cli/chunks/{setup-TLQ2VM3F.js → setup-I2IELNJN.js} +3 -3
  84. package/dist-cli/chunks/{skills-LZZDB6V5.js → skills-PVXI7LM6.js} +2 -2
  85. package/dist-cli/chunks/{storage-G2IZ2WAD.js → storage-KZFCVRGD.js} +2 -2
  86. package/dist-cli/chunks/store-CEMC5MTK.js +2 -0
  87. package/dist-cli/chunks/telemetry-LFIQWPZD.js +2 -0
  88. package/dist-cli/chunks/{timeline-L4CFSXX3.js → timeline-YAULXFEC.js} +2 -2
  89. package/dist-cli/chunks/{upgrade-5USALUAU.js → upgrade-63TVREBM.js} +2 -2
  90. package/dist-cli/chunks/upload-APW46WK3.js +2 -0
  91. package/dist-cli/chunks/{version-RQZPUNJO.js → version-JWWEGZS7.js} +2 -2
  92. package/dist-cli/chunks/{web-YQ6XAB5F.js → web-XO724HJL.js} +2 -2
  93. package/dist-cli/chunks/{what-happened-JLAM7TBD.js → what-happened-DQ4MXAPJ.js} +2 -2
  94. package/dist-lib/agent-daemon-client.cjs +1 -1
  95. package/dist-lib/agent-events.cjs +1 -1
  96. package/dist-lib/agent-identity.cjs +1 -1
  97. package/dist-lib/agent-sessions.cjs +1 -1
  98. package/dist-lib/attached-projects.cjs +1 -1
  99. package/dist-lib/auth/shared-session.cjs +1 -1
  100. package/dist-lib/backend-origin.cjs +1 -1
  101. package/dist-lib/beta.cjs +1 -1
  102. package/dist-lib/beta.mjs +1 -1
  103. package/dist-lib/bridge-constants.cjs +1 -1
  104. package/dist-lib/cli-constants.cjs +1 -1
  105. package/dist-lib/config.cjs +1 -1
  106. package/dist-lib/detox/index.cjs +1 -1
  107. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  108. package/dist-lib/home-paths.cjs +1 -1
  109. package/dist-lib/host/bridge-host.cjs +77 -33
  110. package/dist-lib/host/fetch-proxy-handler.cjs +77 -33
  111. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  112. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  113. package/dist-lib/host/websocket-proxy.cjs +1 -1
  114. package/dist-lib/index.cjs +1 -1
  115. package/dist-lib/jump-to-source-babel.cjs +1 -1
  116. package/dist-lib/menu.cjs +1 -1
  117. package/dist-lib/menu.mjs +1 -1
  118. package/dist-lib/metro.cjs +1 -1
  119. package/dist-lib/profiles.cjs +1 -1
  120. package/dist-lib/render-mode.cjs +1 -1
  121. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  122. package/dist-lib/sdk.cjs +157 -5
  123. package/dist-lib/sdk.mjs +156 -5
  124. package/dist-lib/skills.cjs +221 -37
  125. package/dist-lib/vite.cjs +1 -1
  126. package/package.json +1 -1
  127. package/skills/contrast/SKILL.md +1 -1
  128. package/skills/sootsim-debug/SKILL.md +21 -12
  129. package/src/host/fetch-proxy-handler.ts +104 -52
  130. package/dist-cli/chunks/beta-BH6RPXQU.js +0 -2
  131. package/dist-cli/chunks/chunk-HJW6SASW.js +0 -118
  132. package/dist-cli/chunks/chunk-J7SEKMNI.js +0 -1
  133. package/dist-cli/chunks/chunk-NO6RQXYN.js +0 -1
  134. package/dist-cli/chunks/cli-version-7KCROGJR.js +0 -2
  135. package/dist-cli/chunks/daemon-TJXAVVUE.js +0 -2
  136. package/dist-cli/chunks/drivers-SJOWPOA3.js +0 -2
  137. package/dist-cli/chunks/flow-Q4XCAPIT.js +0 -2
  138. package/dist-cli/chunks/help-FRVJH7SB.js +0 -2
  139. package/dist-cli/chunks/inspect-5ZZN4UJN.js +0 -2
  140. package/dist-cli/chunks/install-desktop-MIY6DLN6.js +0 -2
  141. package/dist-cli/chunks/optional-demo-registry-5JSIUIMF.js +0 -2
  142. package/dist-cli/chunks/runtime-5K5JFYOZ.js +0 -2
  143. package/dist-cli/chunks/serve-OJVA6PNV.js +0 -41
  144. package/dist-cli/chunks/store-X6HDJ5SE.js +0 -2
  145. package/dist-cli/chunks/telemetry-AHMOJS6L.js +0 -2
  146. package/dist-cli/chunks/upload-OWMPT3Z7.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-QYVGMN3I.js";import{g as A,i as _}from"./chunk-544G2PCM.js";import"./chunk-HV2ZRFGP.js";import{c as k}from"./chunk-SLIYVKRX.js";import"./chunk-FOTAUF7Q.js";import"./chunk-BWKVAEAJ.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
1
+ /*! sootsim v0.1.241 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-VVUANJFA.js";import{g as A,i as _}from"./chunk-F5YD4BLA.js";import"./chunk-4V6MFWDY.js";import{c as k}from"./chunk-PR6AOTP5.js";import"./chunk-KFI26HW5.js";import"./chunk-5COOJUTE.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
3
3
  sootsim what-happened \u2014 show recent events from the semantic timeline
4
4
 
5
5
  usage:
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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;
@@ -2355,6 +2355,7 @@ function mapFrameworkToProjectFramework(fw) {
2355
2355
  // src/host/fetch-proxy-handler.ts
2356
2356
  var import_http2 = __toESM(require("http"), 1);
2357
2357
  var import_https = __toESM(require("https"), 1);
2358
+ var import_promises2 = require("stream/promises");
2358
2359
 
2359
2360
  // src/host/fetch-proxy-overrides.ts
2360
2361
  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";
@@ -2442,12 +2443,6 @@ function formatFetchProxyError(targetUrl, err) {
2442
2443
  }
2443
2444
  return message;
2444
2445
  }
2445
- function isTextProxyContentType(contentType) {
2446
- const value = Array.isArray(contentType) ? contentType[0] : contentType;
2447
- const normalized = value?.split(";", 1)[0]?.trim().toLowerCase();
2448
- if (!normalized) return false;
2449
- return normalized.startsWith("text/") || normalized === "application/json" || normalized.endsWith("+json") || normalized === "application/x-www-form-urlencoded" || normalized === "application/xml" || normalized.endsWith("+xml") || normalized === "application/javascript" || normalized === "application/graphql";
2450
- }
2451
2446
  function buildFetchProxyHeaders(reqHeaders, targetUrl) {
2452
2447
  const headers = {};
2453
2448
  for (const [key, value] of Object.entries(reqHeaders)) {
@@ -2506,7 +2501,6 @@ async function handleFetchProxyRequest(req, res) {
2506
2501
  res.end("invalid url param");
2507
2502
  return;
2508
2503
  }
2509
- const headers = buildFetchProxyHeaders(req.headers, upstreamUrl);
2510
2504
  let body;
2511
2505
  if (req.method !== "GET" && req.method !== "HEAD") {
2512
2506
  const chunks = [];
@@ -2514,39 +2508,89 @@ async function handleFetchProxyRequest(req, res) {
2514
2508
  chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
2515
2509
  }
2516
2510
  if (chunks.length > 0) {
2517
- const bytes = Buffer.concat(chunks);
2518
- body = isTextProxyContentType(req.headers["content-type"]) ? bytes.toString("utf8") : bytes;
2511
+ body = Buffer.concat(chunks);
2519
2512
  }
2520
2513
  }
2521
- let upstream;
2522
- try {
2523
- upstream = await fetch(upstreamUrl.href, {
2524
- method: req.method,
2525
- headers,
2526
- body,
2527
- redirect: "follow"
2514
+ const originalMethod = req.method || "GET";
2515
+ const proxy = async (targetUrl2, method, nextBody, redirects) => {
2516
+ const transport = targetUrl2.protocol === "https:" ? import_https.default : import_http2.default;
2517
+ const targetHeaders = buildFetchProxyHeaders(req.headers, targetUrl2);
2518
+ if (targetUrl2.origin !== upstreamUrl.origin) {
2519
+ delete targetHeaders.authorization;
2520
+ delete targetHeaders["proxy-authorization"];
2521
+ }
2522
+ if (method === "GET" || method === "HEAD") {
2523
+ delete targetHeaders["content-length"];
2524
+ delete targetHeaders["content-type"];
2525
+ } else if (nextBody) {
2526
+ targetHeaders["content-length"] = String(nextBody.byteLength);
2527
+ }
2528
+ const proxyRes = await new Promise((resolve, reject) => {
2529
+ const proxyReq = transport.request(
2530
+ {
2531
+ hostname: targetUrl2.hostname,
2532
+ port: targetUrl2.port || (targetUrl2.protocol === "https:" ? 443 : 80),
2533
+ path: targetUrl2.pathname + targetUrl2.search,
2534
+ method,
2535
+ headers: targetHeaders
2536
+ },
2537
+ resolve
2538
+ );
2539
+ const abort = () => proxyReq.destroy(new Error("fetch proxy client disconnected"));
2540
+ req.once("aborted", abort);
2541
+ proxyReq.once("close", () => req.off("aborted", abort));
2542
+ proxyReq.once("error", reject);
2543
+ if (nextBody === void 0) proxyReq.end();
2544
+ else proxyReq.end(nextBody);
2528
2545
  });
2546
+ const status = proxyRes.statusCode ?? 502;
2547
+ const location = proxyRes.headers.location;
2548
+ if (location && (status === 301 || status === 302 || status === 303 || status === 307 || status === 308)) {
2549
+ if (redirects >= 10) {
2550
+ proxyRes.destroy();
2551
+ throw new Error("too many redirects");
2552
+ }
2553
+ const switchToGet = (status === 301 || status === 302) && method === "POST" || status === 303 && method !== "GET" && method !== "HEAD";
2554
+ const redirectUrl = new URL(location, targetUrl2);
2555
+ proxyRes.resume();
2556
+ await (0, import_promises2.finished)(proxyRes);
2557
+ await proxy(
2558
+ redirectUrl,
2559
+ switchToGet ? "GET" : method,
2560
+ switchToGet ? void 0 : nextBody,
2561
+ redirects + 1
2562
+ );
2563
+ return;
2564
+ }
2565
+ for (const [key, value] of Object.entries(proxyRes.headers)) {
2566
+ const lowerKey = key.toLowerCase();
2567
+ 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-")) {
2568
+ continue;
2569
+ }
2570
+ res.setHeader(key, value);
2571
+ }
2572
+ applyFetchProxyCors(res);
2573
+ const setCookie = proxyRes.headers["set-cookie"] ?? [];
2574
+ if (setCookie.length > 0) {
2575
+ res.setHeader(
2576
+ "x-sootsim-set-cookie",
2577
+ (Array.isArray(setCookie) ? setCookie : [setCookie]).join(", ")
2578
+ );
2579
+ }
2580
+ res.statusCode = status;
2581
+ await (0, import_promises2.pipeline)(proxyRes, res);
2582
+ };
2583
+ try {
2584
+ await proxy(upstreamUrl, originalMethod, body, 0);
2529
2585
  } catch (err) {
2586
+ if (res.headersSent) {
2587
+ res.destroy(err instanceof Error ? err : new Error(String(err)));
2588
+ return;
2589
+ }
2530
2590
  applyFetchProxyCors(res);
2531
2591
  res.writeHead(502, { "Content-Type": "text/plain" });
2532
2592
  res.end(`fetch proxy error: ${formatFetchProxyError(upstreamUrl.href, err)}`);
2533
- return;
2534
2593
  }
2535
- upstream.headers.forEach((value, key) => {
2536
- const lowerKey = key.toLowerCase();
2537
- if (lowerKey === "content-encoding" || lowerKey === "transfer-encoding" || lowerKey === "content-length" || lowerKey === "set-cookie" || lowerKey.startsWith("access-control-")) {
2538
- return;
2539
- }
2540
- res.setHeader(key, value);
2541
- });
2542
- applyFetchProxyCors(res);
2543
- const setCookie = upstream.headers.getSetCookie?.() ?? [];
2544
- if (setCookie.length > 0) {
2545
- res.setHeader("x-sootsim-set-cookie", setCookie.join(", "));
2546
- }
2547
- res.statusCode = upstream.status;
2548
- const buf = Buffer.from(await upstream.arrayBuffer());
2549
- res.end(buf);
2550
2594
  }
2551
2595
  function handleAppApiRequest(req, res) {
2552
2596
  const reqUrl = req.url || "";
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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;
@@ -42,6 +42,7 @@ __export(fetch_proxy_handler_exports, {
42
42
  module.exports = __toCommonJS(fetch_proxy_handler_exports);
43
43
  var import_http = __toESM(require("http"), 1);
44
44
  var import_https = __toESM(require("https"), 1);
45
+ var import_promises = require("stream/promises");
45
46
 
46
47
  // src/host/fetch-proxy-overrides.ts
47
48
  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";
@@ -129,12 +130,6 @@ function formatFetchProxyError(targetUrl, err) {
129
130
  }
130
131
  return message;
131
132
  }
132
- function isTextProxyContentType(contentType) {
133
- const value = Array.isArray(contentType) ? contentType[0] : contentType;
134
- const normalized = value?.split(";", 1)[0]?.trim().toLowerCase();
135
- if (!normalized) return false;
136
- return normalized.startsWith("text/") || normalized === "application/json" || normalized.endsWith("+json") || normalized === "application/x-www-form-urlencoded" || normalized === "application/xml" || normalized.endsWith("+xml") || normalized === "application/javascript" || normalized === "application/graphql";
137
- }
138
133
  function buildFetchProxyHeaders(reqHeaders, targetUrl) {
139
134
  const headers = {};
140
135
  for (const [key, value] of Object.entries(reqHeaders)) {
@@ -193,7 +188,6 @@ async function handleFetchProxyRequest(req, res) {
193
188
  res.end("invalid url param");
194
189
  return;
195
190
  }
196
- const headers = buildFetchProxyHeaders(req.headers, upstreamUrl);
197
191
  let body;
198
192
  if (req.method !== "GET" && req.method !== "HEAD") {
199
193
  const chunks = [];
@@ -201,39 +195,89 @@ async function handleFetchProxyRequest(req, res) {
201
195
  chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
202
196
  }
203
197
  if (chunks.length > 0) {
204
- const bytes = Buffer.concat(chunks);
205
- body = isTextProxyContentType(req.headers["content-type"]) ? bytes.toString("utf8") : bytes;
198
+ body = Buffer.concat(chunks);
206
199
  }
207
200
  }
208
- let upstream;
209
- try {
210
- upstream = await fetch(upstreamUrl.href, {
211
- method: req.method,
212
- headers,
213
- body,
214
- redirect: "follow"
201
+ const originalMethod = req.method || "GET";
202
+ const proxy = async (targetUrl2, method, nextBody, redirects) => {
203
+ const transport = targetUrl2.protocol === "https:" ? import_https.default : import_http.default;
204
+ const targetHeaders = buildFetchProxyHeaders(req.headers, targetUrl2);
205
+ if (targetUrl2.origin !== upstreamUrl.origin) {
206
+ delete targetHeaders.authorization;
207
+ delete targetHeaders["proxy-authorization"];
208
+ }
209
+ if (method === "GET" || method === "HEAD") {
210
+ delete targetHeaders["content-length"];
211
+ delete targetHeaders["content-type"];
212
+ } else if (nextBody) {
213
+ targetHeaders["content-length"] = String(nextBody.byteLength);
214
+ }
215
+ const proxyRes = await new Promise((resolve, reject) => {
216
+ const proxyReq = transport.request(
217
+ {
218
+ hostname: targetUrl2.hostname,
219
+ port: targetUrl2.port || (targetUrl2.protocol === "https:" ? 443 : 80),
220
+ path: targetUrl2.pathname + targetUrl2.search,
221
+ method,
222
+ headers: targetHeaders
223
+ },
224
+ resolve
225
+ );
226
+ const abort = () => proxyReq.destroy(new Error("fetch proxy client disconnected"));
227
+ req.once("aborted", abort);
228
+ proxyReq.once("close", () => req.off("aborted", abort));
229
+ proxyReq.once("error", reject);
230
+ if (nextBody === void 0) proxyReq.end();
231
+ else proxyReq.end(nextBody);
215
232
  });
233
+ const status = proxyRes.statusCode ?? 502;
234
+ const location = proxyRes.headers.location;
235
+ if (location && (status === 301 || status === 302 || status === 303 || status === 307 || status === 308)) {
236
+ if (redirects >= 10) {
237
+ proxyRes.destroy();
238
+ throw new Error("too many redirects");
239
+ }
240
+ const switchToGet = (status === 301 || status === 302) && method === "POST" || status === 303 && method !== "GET" && method !== "HEAD";
241
+ const redirectUrl = new URL(location, targetUrl2);
242
+ proxyRes.resume();
243
+ await (0, import_promises.finished)(proxyRes);
244
+ await proxy(
245
+ redirectUrl,
246
+ switchToGet ? "GET" : method,
247
+ switchToGet ? void 0 : nextBody,
248
+ redirects + 1
249
+ );
250
+ return;
251
+ }
252
+ for (const [key, value] of Object.entries(proxyRes.headers)) {
253
+ const lowerKey = key.toLowerCase();
254
+ 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-")) {
255
+ continue;
256
+ }
257
+ res.setHeader(key, value);
258
+ }
259
+ applyFetchProxyCors(res);
260
+ const setCookie = proxyRes.headers["set-cookie"] ?? [];
261
+ if (setCookie.length > 0) {
262
+ res.setHeader(
263
+ "x-sootsim-set-cookie",
264
+ (Array.isArray(setCookie) ? setCookie : [setCookie]).join(", ")
265
+ );
266
+ }
267
+ res.statusCode = status;
268
+ await (0, import_promises.pipeline)(proxyRes, res);
269
+ };
270
+ try {
271
+ await proxy(upstreamUrl, originalMethod, body, 0);
216
272
  } catch (err) {
273
+ if (res.headersSent) {
274
+ res.destroy(err instanceof Error ? err : new Error(String(err)));
275
+ return;
276
+ }
217
277
  applyFetchProxyCors(res);
218
278
  res.writeHead(502, { "Content-Type": "text/plain" });
219
279
  res.end(`fetch proxy error: ${formatFetchProxyError(upstreamUrl.href, err)}`);
220
- return;
221
- }
222
- upstream.headers.forEach((value, key) => {
223
- const lowerKey = key.toLowerCase();
224
- if (lowerKey === "content-encoding" || lowerKey === "transfer-encoding" || lowerKey === "content-length" || lowerKey === "set-cookie" || lowerKey.startsWith("access-control-")) {
225
- return;
226
- }
227
- res.setHeader(key, value);
228
- });
229
- applyFetchProxyCors(res);
230
- const setCookie = upstream.headers.getSetCookie?.() ?? [];
231
- if (setCookie.length > 0) {
232
- res.setHeader("x-sootsim-set-cookie", setCookie.join(", "));
233
280
  }
234
- res.statusCode = upstream.status;
235
- const buf = Buffer.from(await upstream.arrayBuffer());
236
- res.end(buf);
237
281
  }
238
282
  function handleAppApiRequest(req, res) {
239
283
  const reqUrl = req.url || "";
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
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";
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/menu.ts
4
4
  var SOOTSIM_ENGINE_EVENT_NAME = "sootsim:engine-event";
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.239 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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;