sootsim 0.1.140 → 0.1.141

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 (153) hide show
  1. package/dist-cli/bin.js +3 -3
  2. package/dist-cli/chunks/{agent-N767ME6M.js → agent-BFN5TIRU.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-ELHIUFZZ.js → agent-wrapper-A4UNOJOD.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-OZ3OSNAJ.js → app-fonts-KEAMDLYZ.js} +2 -2
  5. package/dist-cli/chunks/{assert-GGFUQBNB.js → assert-BWBAKX5N.js} +2 -2
  6. package/dist-cli/chunks/auto-bootstrap-WJH44ZIE.js +2 -0
  7. package/dist-cli/chunks/beta-VFKZHKER.js +2 -0
  8. package/dist-cli/chunks/{camera-5PYEDLLB.js → camera-P5TTGC72.js} +2 -2
  9. package/dist-cli/chunks/{chunk-PBS47TD5.js → chunk-33EJL7CG.js} +2 -2
  10. package/dist-cli/chunks/{chunk-BLQBPN76.js → chunk-3LN2PP4L.js} +2 -2
  11. package/dist-cli/chunks/{chunk-MRQRJINW.js → chunk-4ISWLDJG.js} +1 -1
  12. package/dist-cli/chunks/{chunk-EMNVJOEL.js → chunk-53DRW635.js} +3 -3
  13. package/dist-cli/chunks/{chunk-7SMEXHWJ.js → chunk-7A7VFR2C.js} +1 -1
  14. package/dist-cli/chunks/{chunk-GL74P6NR.js → chunk-7SO2SJ4H.js} +1 -1
  15. package/dist-cli/chunks/{chunk-RAY2DLSK.js → chunk-A5W3HB44.js} +1 -1
  16. package/dist-cli/chunks/{chunk-SSZBFWV7.js → chunk-AJGTCVQX.js} +1 -1
  17. package/dist-cli/chunks/{chunk-R5F7XGAO.js → chunk-AMSIP5PD.js} +3 -3
  18. package/dist-cli/chunks/{chunk-ZGDJ5TFU.js → chunk-AQVB4G34.js} +2 -2
  19. package/dist-cli/chunks/{chunk-N2XPC4Z7.js → chunk-DM5KNA7Q.js} +2 -2
  20. package/dist-cli/chunks/{chunk-ZN4Z2W7F.js → chunk-EIZ6LJP2.js} +2 -2
  21. package/dist-cli/chunks/{chunk-5VTYMBUK.js → chunk-ETB6DHJM.js} +2 -2
  22. package/dist-cli/chunks/{chunk-WGDXZMKT.js → chunk-HDCTWR2Q.js} +2 -2
  23. package/dist-cli/chunks/chunk-I3JPJMJB.js +5 -0
  24. package/dist-cli/chunks/{chunk-QRRBQE6M.js → chunk-I6SWX7OI.js} +2 -2
  25. package/dist-cli/chunks/{chunk-BGXNYXBC.js → chunk-IILFDOSF.js} +1 -1
  26. package/dist-cli/chunks/{chunk-4FGNOWB6.js → chunk-IITPPGBS.js} +1 -1
  27. package/dist-cli/chunks/{chunk-QXOZB7WD.js → chunk-ITJLXD4X.js} +2 -2
  28. package/dist-cli/chunks/{chunk-BM7QWZRI.js → chunk-JJBNA2JO.js} +2 -2
  29. package/dist-cli/chunks/{chunk-AI65UVSN.js → chunk-JM5XCDBF.js} +2 -2
  30. package/dist-cli/chunks/{chunk-AOICEZCA.js → chunk-JQTHQOPS.js} +2 -2
  31. package/dist-cli/chunks/{chunk-X6AWKKL4.js → chunk-KMQWCYU7.js} +2 -2
  32. package/dist-cli/chunks/{chunk-XGYD25DJ.js → chunk-LHIPDN4B.js} +1 -1
  33. package/dist-cli/chunks/{chunk-6KUVOSFF.js → chunk-LHS4PEAA.js} +2 -2
  34. package/dist-cli/chunks/{chunk-ZVQOEMXS.js → chunk-M7S4VLEL.js} +54 -54
  35. package/dist-cli/chunks/{chunk-REIC7HRW.js → chunk-MENSR2TZ.js} +1 -1
  36. package/dist-cli/chunks/chunk-MHUNWWWS.js +412 -0
  37. package/dist-cli/chunks/chunk-MYKHUFW2.js +1 -0
  38. package/dist-cli/chunks/chunk-NOAONZTZ.js +119 -0
  39. package/dist-cli/chunks/{chunk-C3FURRBF.js → chunk-NQJD2WTM.js} +1 -1
  40. package/dist-cli/chunks/{chunk-QOZ2Q4FH.js → chunk-PVPWCA2K.js} +1 -1
  41. package/dist-cli/chunks/{chunk-GYZNLDBX.js → chunk-RBUJZXNR.js} +5 -5
  42. package/dist-cli/chunks/{chunk-AP2MOP44.js → chunk-RUXWU3UH.js} +1 -1
  43. package/dist-cli/chunks/{chunk-UHTE6FLK.js → chunk-SXHBK5IJ.js} +2 -2
  44. package/dist-cli/chunks/chunk-SYRS7NKN.js +1 -0
  45. package/dist-cli/chunks/chunk-TUZVZ5QS.js +1 -0
  46. package/dist-cli/chunks/{chunk-CQ3LV5VL.js → chunk-URPQTI2I.js} +2 -2
  47. package/dist-cli/chunks/{chunk-GI43DDEI.js → chunk-UYQDGXHQ.js} +1 -1
  48. package/dist-cli/chunks/{chunk-4FBFOWV3.js → chunk-WUQHVDJU.js} +2 -2
  49. package/dist-cli/chunks/{chunk-FYUDIUFX.js → chunk-XD7XHQUO.js} +2 -2
  50. package/dist-cli/chunks/{chunk-77TL74AM.js → chunk-XERRDQLM.js} +1 -1
  51. package/dist-cli/chunks/{chunk-O2SQNUDP.js → chunk-XQRCVSK3.js} +1 -1
  52. package/dist-cli/chunks/{chunk-HPTMLB7V.js → chunk-YOJ6BZCH.js} +1 -1
  53. package/dist-cli/chunks/chunk-ZBN3P5JE.js +2 -0
  54. package/dist-cli/chunks/cli-version-3G6HHMRW.js +2 -0
  55. package/dist-cli/chunks/{compat-U3772TUK.js → compat-3Z67EPSJ.js} +3 -3
  56. package/dist-cli/chunks/{config-6CZCIYKJ.js → config-SH3NTYZ2.js} +2 -2
  57. package/dist-cli/chunks/{control-NVA25O65.js → control-2XVEDKYZ.js} +2 -2
  58. package/dist-cli/chunks/{cpu-profile-WRLTZYO6.js → cpu-profile-FANLHU4S.js} +2 -2
  59. package/dist-cli/chunks/{daemon-QQPGLGS6.js → daemon-QGDVR4JT.js} +2 -2
  60. package/dist-cli/chunks/{debug-RKYLSDZV.js → debug-EIUEPLFN.js} +3 -3
  61. package/dist-cli/chunks/{detox-ZRUQQU22.js → detox-EV3KYFKR.js} +2 -2
  62. package/dist-cli/chunks/{device-HXTOLEWY.js → device-UC5DAVA6.js} +2 -2
  63. package/dist-cli/chunks/{diagnose-QN4E4WA6.js → diagnose-Q2M2AJBD.js} +2 -2
  64. package/dist-cli/chunks/drivers-VJIWLDTC.js +2 -0
  65. package/dist-cli/chunks/{electron-ZHRC4WQ5.js → electron-PXKF52Q6.js} +3 -3
  66. package/dist-cli/chunks/flow-RGMXGVLL.js +2 -0
  67. package/dist-cli/chunks/help-TBZZP4SA.js +2 -0
  68. package/dist-cli/chunks/{hints-HCHKMDUE.js → hints-HS7X2FIO.js} +2 -2
  69. package/dist-cli/chunks/{home-paths-3OHKRAE4.js → home-paths-KPMXMJQ7.js} +2 -2
  70. package/dist-cli/chunks/{inspect-QXUBDKJJ.js → inspect-ZUWEMCIG.js} +3 -3
  71. package/dist-cli/chunks/install-FPYDDDQ4.js +2 -0
  72. package/dist-cli/chunks/{install-desktop-QCX44BGL.js → install-desktop-H6ZTTVXC.js} +3 -3
  73. package/dist-cli/chunks/{keys-VEP2KPUF.js → keys-6OBZZLCJ.js} +2 -2
  74. package/dist-cli/chunks/{launch-K4BPQLTP.js → launch-7JASEDHP.js} +3 -3
  75. package/dist-cli/chunks/{login-UVC5XRKR.js → login-JWMB6JNS.js} +4 -4
  76. package/dist-cli/chunks/{logout-3VW34IBA.js → logout-LWVFUKF5.js} +2 -2
  77. package/dist-cli/chunks/maestro-WX22SLCR.js +94 -0
  78. package/dist-cli/chunks/optional-demo-registry-52MHQCYV.js +2 -0
  79. package/dist-cli/chunks/{preview-TZYJMLEJ.js → preview-SDMLCW3U.js} +2 -2
  80. package/dist-cli/chunks/{profile-HDJRF7YB.js → profile-MQVLCO7R.js} +2 -2
  81. package/dist-cli/chunks/{react-RLJR26M7.js → react-2JFP5W4W.js} +2 -2
  82. package/dist-cli/chunks/{record-2LDDHHUY.js → record-IJJ3SPXP.js} +2 -2
  83. package/dist-cli/chunks/runtime-JJMZ4AF3.js +2 -0
  84. package/dist-cli/chunks/{runtime-delivery-3F6O57E5.js → runtime-delivery-5M2P7LEI.js} +2 -2
  85. package/dist-cli/chunks/{screenshot-QAUSSEPK.js → screenshot-4QAGJCPZ.js} +2 -2
  86. package/dist-cli/chunks/{screenshot-mode-K6HEVK4K.js → screenshot-mode-PSAU7TH4.js} +2 -2
  87. package/dist-cli/chunks/{screenshots-TWMCGUBT.js → screenshots-73VI4UUL.js} +2 -2
  88. package/dist-cli/chunks/{server-ZPIZCBW5.js → server-BXD5WKQS.js} +3 -3
  89. package/dist-cli/chunks/setup-repo-F2P5RZ4R.js +2 -0
  90. package/dist-cli/chunks/{skills-NI3RH7CW.js → skills-IEJOURWM.js} +2 -2
  91. package/dist-cli/chunks/{start-G6CQL6HJ.js → start-CLBAJ4LJ.js} +4 -4
  92. package/dist-cli/chunks/store-7DIOVJNK.js +2 -0
  93. package/dist-cli/chunks/telemetry-3XHPQYOQ.js +2 -0
  94. package/dist-cli/chunks/{test-V47D6EPK.js → test-42YWJ5ZT.js} +3 -3
  95. package/dist-cli/chunks/{three-mode-G7N3LRHM.js → three-mode-5DU4IBF5.js} +2 -2
  96. package/dist-cli/chunks/{timeline-EBUOILTJ.js → timeline-WJYQRW5S.js} +2 -2
  97. package/dist-cli/chunks/{upgrade-OQJLTCQP.js → upgrade-F7ADMCLU.js} +2 -2
  98. package/dist-cli/chunks/upload-TJ2XKWDS.js +2 -0
  99. package/dist-cli/chunks/{version-3YJPPUE5.js → version-SLA5P34B.js} +2 -2
  100. package/dist-cli/chunks/{web-ZKUX5ICX.js → web-OGC6GSKM.js} +2 -2
  101. package/dist-cli/chunks/{what-happened-HOY3TA42.js → what-happened-VYXK3O2C.js} +2 -2
  102. package/dist-cli/chunks/{whoami-GOCSBVTG.js → whoami-QL2LTKOF.js} +2 -2
  103. package/dist-lib/agent-daemon-client.cjs +1 -1
  104. package/dist-lib/agent-events.cjs +1 -1
  105. package/dist-lib/agent-sessions.cjs +1 -1
  106. package/dist-lib/attached-projects.cjs +1 -1
  107. package/dist-lib/auth/shared-session.cjs +1 -1
  108. package/dist-lib/backend-origin.cjs +1 -1
  109. package/dist-lib/beta.cjs +1 -1
  110. package/dist-lib/beta.mjs +1 -1
  111. package/dist-lib/bridge-constants.cjs +1 -1
  112. package/dist-lib/cli-constants.cjs +1 -1
  113. package/dist-lib/config.cjs +5 -2
  114. package/dist-lib/detox/index.cjs +1 -1
  115. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  116. package/dist-lib/home-paths.cjs +1 -1
  117. package/dist-lib/host/bridge-host.cjs +2 -2
  118. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  119. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  120. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  121. package/dist-lib/host/websocket-proxy.cjs +1 -1
  122. package/dist-lib/index.cjs +1 -1
  123. package/dist-lib/metro.cjs +1 -1
  124. package/dist-lib/profiles.cjs +1 -1
  125. package/dist-lib/render-mode.cjs +1 -1
  126. package/dist-lib/scripts/dev-server-scanner.cjs +2 -2
  127. package/dist-lib/sdk.cjs +1 -1
  128. package/dist-lib/sdk.mjs +1 -1
  129. package/dist-lib/skills.cjs +351 -80
  130. package/dist-lib/vite.cjs +1 -1
  131. package/package.json +1 -1
  132. package/src/config.ts +13 -0
  133. package/dist-cli/chunks/auto-bootstrap-L5E6XMCK.js +0 -2
  134. package/dist-cli/chunks/beta-D74SDA2L.js +0 -2
  135. package/dist-cli/chunks/chunk-5EP5RRNS.js +0 -381
  136. package/dist-cli/chunks/chunk-BEA3AO36.js +0 -5
  137. package/dist-cli/chunks/chunk-EH6YDCSN.js +0 -119
  138. package/dist-cli/chunks/chunk-NQG4R5K2.js +0 -1
  139. package/dist-cli/chunks/chunk-Q5Z7P54I.js +0 -2
  140. package/dist-cli/chunks/chunk-S7I6ZCT2.js +0 -1
  141. package/dist-cli/chunks/chunk-WN3WZEE5.js +0 -1
  142. package/dist-cli/chunks/cli-version-EZRTEUXF.js +0 -2
  143. package/dist-cli/chunks/drivers-EVK22AX5.js +0 -2
  144. package/dist-cli/chunks/flow-ICCRVJVX.js +0 -2
  145. package/dist-cli/chunks/help-QMZ35MIQ.js +0 -2
  146. package/dist-cli/chunks/install-JSDZIE2T.js +0 -2
  147. package/dist-cli/chunks/maestro-HTFXXMLR.js +0 -80
  148. package/dist-cli/chunks/optional-demo-registry-5YYEAL46.js +0 -2
  149. package/dist-cli/chunks/runtime-QPYF2WQX.js +0 -2
  150. package/dist-cli/chunks/setup-repo-VHOZJEIV.js +0 -2
  151. package/dist-cli/chunks/store-F6MJUJYW.js +0 -2
  152. package/dist-cli/chunks/telemetry-DM2Y7OQJ.js +0 -2
  153. package/dist-cli/chunks/upload-W3YCA65H.js +0 -2
@@ -1,2 +1,2 @@
1
- /*! sootsim v0.1.140 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.141 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import{execFileSync as p,spawn as l}from"child_process";import{existsSync as s}from"fs";import{homedir as u}from"os";import{join as d}from"path";var g=["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","~/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Chromium.app/Contents/MacOS/Chromium","~/Applications/Chromium.app/Contents/MacOS/Chromium","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","~/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Brave Browser.app/Contents/MacOS/Brave Browser","~/Applications/Brave Browser.app/Contents/MacOS/Brave Browser","/Applications/Arc.app/Contents/MacOS/Arc","~/Applications/Arc.app/Contents/MacOS/Arc"],f=["/usr/bin/google-chrome","/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/microsoft-edge","/usr/bin/brave-browser","/snap/bin/chromium"],h=["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files\\Microsoft\\Edge\\Application\\msedge.exe","C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe","C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe","C:\\Program Files (x86)\\BraveSoftware\\Brave-Browser\\Application\\brave.exe"],C=["google-chrome","chromium","chromium-browser","microsoft-edge","brave-browser"],O=["chrome","msedge","brave"];function w(r){return r.startsWith("~/")?d(u(),r.slice(2)):r}function a(r){for(let n of r){let o=w(n);if(s(o))return o}return null}function U(r,n){try{let e=p(n==="win32"?"where":"which",[r],{encoding:"utf8",timeout:1500,stdio:["ignore","pipe","ignore"]}).trim();return e?e.split(/\r?\n/)[0]:null}catch{return null}}function M(r=process.platform){let n=process.env.CHROME_PATH||process.env.CHROMIUM_PATH;if(n&&s(n))return n;let o=a(r==="darwin"?g:r==="win32"?h:f);if(o)return o;let e=r==="win32"?O:C;for(let t of e){let i=U(t,r);if(i)return i}return null}function A(r,n={}){if(!r)throw new Error("openUrl requires a url");let o=n.platform??process.platform;return n.newWindow?c(r,{...n,platform:o,newWindow:!0}):o==="darwin"?{command:"open",args:n.background===!1?[r]:["-g",r],via:"system"}:o==="win32"?{command:"cmd",args:["/c","start","",r],via:"system"}:{command:"xdg-open",args:[r],via:"system"}}function c(r,n={}){if(!r)throw new Error("openUrl requires a url");let o=n.platform??process.platform,e="chromiumBinary"in n?n.chromiumBinary:M(o);if(!e)throw new Error("browser launch requires Chrome, Chromium, Edge, Brave, or Arc");let t=[];return n.newWindow!==!1&&t.push("--new-window"),t.push(r),{command:e,args:t,via:"chromium",target:e}}async function m(r,n,o){return new Promise((e,t)=>{let i=l(r,n,{detached:o,stdio:"ignore"});i.once("error",t),i.once("spawn",()=>{o&&i.unref(),e(i.pid)})})}async function x(r,n={}){let o=A(r,n),e=await m(o.command,o.args,n.detached??!0);return{...o,pid:e,attachUrl:r}}async function y(r,n={}){let o=c(r,n),e=await m(o.command,o.args,n.detached??!0);return{...o,pid:e,attachUrl:r}}async function E(r,n={}){await x(r,n)}export{M as a,x as b,y as c,E as d};
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.140 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{d as ue,e as de,f as pe}from"./chunk-QRRBQE6M.js";import{d as ce}from"./chunk-REIC7HRW.js";import{c as ae,e as le,g as P}from"./chunk-AOICEZCA.js";import{d as ie}from"./chunk-XGYD25DJ.js";import{a as se,b}from"./chunk-QXOZB7WD.js";import{a as oe}from"./chunk-N2XPC4Z7.js";import{createHash as He}from"crypto";import{readFileSync as K}from"fs";import{gzipSync as Ce}from"zlib";function fe(e){let t=(e||"").toLowerCase().split(";")[0].trim();return t?!(t.startsWith("image/")||t.startsWith("video/")||t.startsWith("audio/")||t==="font/woff2"||t==="application/font-woff2"||t==="application/zip"||t==="application/gzip"):!0}import{brotliCompressSync as Le,constants as Ee}from"node:zlib";var ke=9;function ge(e){return Le(e,{params:{[Ee.BROTLI_PARAM_QUALITY]:ke}})}function G(e,t){let r=new AbortController,o=setTimeout(()=>r.abort(new Error(`${t} timed out after ${e/1e3}s`)),e);return{signal:r.signal,cancel:()=>clearTimeout(o)}}async function Ae(e){let t=G(12e4,`PUT ${e.url}`),r;try{r=await fetch(e.url,{method:"PUT",headers:{"content-type":e.contentType},body:e.bytes,signal:t.signal})}finally{t.cancel()}if(!r.ok){let o=await r.text().catch(()=>"");throw new Error(`PUT ${e.url} failed ${r.status}: ${o.slice(0,200)}`)}}async function Fe(e,t=8,r){let o=0,i=0,a=e.length;await Promise.all(Array.from({length:Math.min(t,a)},async()=>{for(;o<a;){let c=e[o++];await Ae(c),i++,r?.(i,a)}}))}function ze(e,t,r,o){let i=[];i.push({url:e.bundle.putUrl,contentType:e.bundle.contentType,bytes:t});for(let a of e.files){let c=r.get(a.urlhash);c&&i.push({url:a.putUrl,contentType:a.contentType,bytes:c})}e.events&&o?.eventsBytes&&i.push({url:e.events.putUrl,contentType:e.events.contentType,bytes:o.eventsBytes}),e.flowVideo&&o?.videoBytes&&i.push({url:e.flowVideo.putUrl,contentType:e.flowVideo.contentType,bytes:o.videoBytes}),e.storage&&o?.storageBytes&&i.push({url:e.storage.putUrl,contentType:e.storage.contentType,bytes:o.storageBytes});for(let a of e.snapshots??[]){let c=o?.snapshotBytes?.get(a.id);c&&i.push({url:a.putUrl,contentType:a.contentType,bytes:c})}return i}function Me(e){return e.replace(/\/+$/,"")}var F=class extends Error{constructor(r,o,i,a=""){super(r);this.status=o;this.phase=i;this.responseText=a;this.name="PresignedUploadError"}};async function he(e){let t=Me(e.originBase),r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader),e.adminBypassToken&&(r["x-soot-admin-upload-bypass"]=e.adminBypassToken);let o=G(3e4,"init"),i;try{i=await fetch(`${t}/api/preview/upload/init`,{method:"POST",headers:r,body:JSON.stringify(e.initBody),signal:o.signal})}finally{o.cancel()}if(!i.ok){let p=await i.text().catch(()=>"");throw new F(`init failed: ${i.status} ${p.slice(0,200)}`,i.status,"init",p)}let a=await i.json(),c=ze(a,e.bundleBytes,e.filesByHash,e.extras);await Fe(c,e.concurrency??8,e.onPutProgress);let y=G(3e4,"finalize"),u;try{u=await fetch(`${t}/api/preview/upload/finalize`,{method:"POST",headers:r,body:JSON.stringify({token:a.token}),signal:y.signal})}finally{y.cancel()}if(!u.ok){let p=await u.text().catch(()=>"");throw new F(`finalize failed: ${u.status} ${p.slice(0,200)}`,u.status,"finalize",p)}let S=await u.json();return{init:a,finalize:S}}function Ne(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.message=="string"&&t.message?t.message:null}catch{return null}}var be=process.env.SOOTSIM_UPLOAD_ORIGIN||"https://sootbean.com",ve=process.env.SOOTSIM_PREVIEW_ORIGIN||"https://sootsim.com",J="http://localhost:3000",We=2e3;async function Ve(e){if(e)return e;if(process.env.SOOTSIM_UPLOAD_ORIGIN)return process.env.SOOTSIM_UPLOAD_ORIGIN;try{let t=await fetch(`${J}/api/preview/upload/init`,{method:"OPTIONS",signal:AbortSignal.timeout(We)});if(t.ok||t.status===204||t.status===405)return J}catch{}return be}function O(e){return e.replace(/\/$/,"")}function qe(e){try{let r=new URL(e).hostname.replace(/^\[|\]$/g,"").toLowerCase();return r==="localhost"||r.endsWith(".localhost")||r==="0.0.0.0"||r==="::1"||/^127(?:\.\d{1,3}){3}$/.test(r)}catch{return!1}}function De(e){try{let t=new URL(e).hostname.toLowerCase();return t==="sootbean.com"||t.endsWith(".sootbean.com")}catch{return!1}}function Ge(e,t){return t?O(t):process.env.SOOTSIM_PREVIEW_ORIGIN?O(process.env.SOOTSIM_PREVIEW_ORIGIN):qe(e)?O(e):De(e)?O(ve):O(e)}function Ke(){console.log(`
1
+ /*! sootsim v0.1.141 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{d as ue,e as de,f as pe}from"./chunk-I6SWX7OI.js";import{d as ce}from"./chunk-MENSR2TZ.js";import{c as ae,e as le,g as P}from"./chunk-JQTHQOPS.js";import{d as ie}from"./chunk-LHIPDN4B.js";import{a as se,b}from"./chunk-ITJLXD4X.js";import{a as oe}from"./chunk-DM5KNA7Q.js";import{createHash as He}from"crypto";import{readFileSync as K}from"fs";import{gzipSync as Ce}from"zlib";function fe(e){let t=(e||"").toLowerCase().split(";")[0].trim();return t?!(t.startsWith("image/")||t.startsWith("video/")||t.startsWith("audio/")||t==="font/woff2"||t==="application/font-woff2"||t==="application/zip"||t==="application/gzip"):!0}import{brotliCompressSync as Le,constants as Ee}from"node:zlib";var ke=9;function ge(e){return Le(e,{params:{[Ee.BROTLI_PARAM_QUALITY]:ke}})}function G(e,t){let r=new AbortController,o=setTimeout(()=>r.abort(new Error(`${t} timed out after ${e/1e3}s`)),e);return{signal:r.signal,cancel:()=>clearTimeout(o)}}async function Ae(e){let t=G(12e4,`PUT ${e.url}`),r;try{r=await fetch(e.url,{method:"PUT",headers:{"content-type":e.contentType},body:e.bytes,signal:t.signal})}finally{t.cancel()}if(!r.ok){let o=await r.text().catch(()=>"");throw new Error(`PUT ${e.url} failed ${r.status}: ${o.slice(0,200)}`)}}async function Fe(e,t=8,r){let o=0,i=0,a=e.length;await Promise.all(Array.from({length:Math.min(t,a)},async()=>{for(;o<a;){let c=e[o++];await Ae(c),i++,r?.(i,a)}}))}function ze(e,t,r,o){let i=[];i.push({url:e.bundle.putUrl,contentType:e.bundle.contentType,bytes:t});for(let a of e.files){let c=r.get(a.urlhash);c&&i.push({url:a.putUrl,contentType:a.contentType,bytes:c})}e.events&&o?.eventsBytes&&i.push({url:e.events.putUrl,contentType:e.events.contentType,bytes:o.eventsBytes}),e.flowVideo&&o?.videoBytes&&i.push({url:e.flowVideo.putUrl,contentType:e.flowVideo.contentType,bytes:o.videoBytes}),e.storage&&o?.storageBytes&&i.push({url:e.storage.putUrl,contentType:e.storage.contentType,bytes:o.storageBytes});for(let a of e.snapshots??[]){let c=o?.snapshotBytes?.get(a.id);c&&i.push({url:a.putUrl,contentType:a.contentType,bytes:c})}return i}function Me(e){return e.replace(/\/+$/,"")}var F=class extends Error{constructor(r,o,i,a=""){super(r);this.status=o;this.phase=i;this.responseText=a;this.name="PresignedUploadError"}};async function he(e){let t=Me(e.originBase),r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader),e.adminBypassToken&&(r["x-soot-admin-upload-bypass"]=e.adminBypassToken);let o=G(3e4,"init"),i;try{i=await fetch(`${t}/api/preview/upload/init`,{method:"POST",headers:r,body:JSON.stringify(e.initBody),signal:o.signal})}finally{o.cancel()}if(!i.ok){let p=await i.text().catch(()=>"");throw new F(`init failed: ${i.status} ${p.slice(0,200)}`,i.status,"init",p)}let a=await i.json(),c=ze(a,e.bundleBytes,e.filesByHash,e.extras);await Fe(c,e.concurrency??8,e.onPutProgress);let y=G(3e4,"finalize"),u;try{u=await fetch(`${t}/api/preview/upload/finalize`,{method:"POST",headers:r,body:JSON.stringify({token:a.token}),signal:y.signal})}finally{y.cancel()}if(!u.ok){let p=await u.text().catch(()=>"");throw new F(`finalize failed: ${u.status} ${p.slice(0,200)}`,u.status,"finalize",p)}let S=await u.json();return{init:a,finalize:S}}function Ne(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.message=="string"&&t.message?t.message:null}catch{return null}}var be=process.env.SOOTSIM_UPLOAD_ORIGIN||"https://sootbean.com",ve=process.env.SOOTSIM_PREVIEW_ORIGIN||"https://sootsim.com",J="http://localhost:3000",We=2e3;async function Ve(e){if(e)return e;if(process.env.SOOTSIM_UPLOAD_ORIGIN)return process.env.SOOTSIM_UPLOAD_ORIGIN;try{let t=await fetch(`${J}/api/preview/upload/init`,{method:"OPTIONS",signal:AbortSignal.timeout(We)});if(t.ok||t.status===204||t.status===405)return J}catch{}return be}function O(e){return e.replace(/\/$/,"")}function qe(e){try{let r=new URL(e).hostname.replace(/^\[|\]$/g,"").toLowerCase();return r==="localhost"||r.endsWith(".localhost")||r==="0.0.0.0"||r==="::1"||/^127(?:\.\d{1,3}){3}$/.test(r)}catch{return!1}}function De(e){try{let t=new URL(e).hostname.toLowerCase();return t==="sootbean.com"||t.endsWith(".sootbean.com")}catch{return!1}}function Ge(e,t){return t?O(t):process.env.SOOTSIM_PREVIEW_ORIGIN?O(process.env.SOOTSIM_PREVIEW_ORIGIN):qe(e)?O(e):De(e)?O(ve):O(e)}function Ke(){console.log(`
3
3
  sootsim upload \u2014 publish the current recorded bundle as a /preview/<id> link
4
4
 
5
5
  usage: