@stacksjs/ts-cloud 0.16.34 → 0.16.35

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 (193) hide show
  1. package/dist/aws/index.js +1 -1
  2. package/dist/bin/{chunk-qay67r71.js → chunk-16kx70x7.js} +112 -112
  3. package/dist/bin/chunk-1k9sw5y7.js +1 -0
  4. package/dist/bin/{chunk-47q37egd.js → chunk-27mfrb34.js} +3 -3
  5. package/dist/bin/chunk-2cx4k97r.js +1 -0
  6. package/dist/bin/{chunk-wef81maa.js → chunk-2qdktx9h.js} +2 -2
  7. package/dist/bin/chunk-2rcwhdx9.js +1 -0
  8. package/dist/bin/chunk-3gg55dkc.js +1 -0
  9. package/dist/bin/chunk-3pbbc03q.js +1 -0
  10. package/dist/bin/{chunk-a3vraghd.js → chunk-4mt7rspg.js} +2 -2
  11. package/dist/bin/{chunk-s38txg38.js → chunk-5yv95sqs.js} +2 -2
  12. package/dist/bin/chunk-683zr91n.js +1 -0
  13. package/dist/bin/chunk-691k55nw.js +1 -0
  14. package/dist/bin/{chunk-7x727gt5.js → chunk-71jh460j.js} +7 -7
  15. package/dist/bin/chunk-7n84q4np.js +1 -0
  16. package/dist/bin/{chunk-s6qnx8a8.js → chunk-7rwc5bvv.js} +6 -6
  17. package/dist/bin/chunk-8pnm151y.js +1 -0
  18. package/dist/bin/{chunk-szpqbbyr.js → chunk-9n3wmdd6.js} +5 -5
  19. package/dist/bin/{chunk-66g6jdgy.js → chunk-a0cvd2ez.js} +3 -3
  20. package/dist/bin/{chunk-8za3y7q3.js → chunk-ar6bxdv4.js} +3 -3
  21. package/dist/bin/{chunk-5tfxp3d9.js → chunk-bfzdbe4g.js} +7 -7
  22. package/dist/bin/{chunk-8ba9t3hv.js → chunk-bqcqzc30.js} +3 -3
  23. package/dist/bin/{chunk-v0va4547.js → chunk-c8439azc.js} +2 -2
  24. package/dist/bin/{chunk-3kyny1x7.js → chunk-cm1dsffd.js} +6 -6
  25. package/dist/bin/{chunk-wq4hkbgj.js → chunk-cn5tfp7t.js} +69 -69
  26. package/dist/bin/{chunk-hs5a6dhm.js → chunk-cnwncp50.js} +5 -5
  27. package/dist/bin/{chunk-59f6mqkj.js → chunk-d5q09rxb.js} +3 -3
  28. package/dist/bin/chunk-dd567z84.js +1 -0
  29. package/dist/bin/chunk-dgxzk04r.js +1 -0
  30. package/dist/bin/chunk-e7h2j23x.js +1 -0
  31. package/dist/bin/chunk-e9mkg5dn.js +1 -0
  32. package/dist/bin/{chunk-dgad3hwh.js → chunk-exc2mqcc.js} +16 -16
  33. package/dist/bin/{chunk-4c4s5yph.js → chunk-gbpmgae9.js} +2 -2
  34. package/dist/bin/chunk-h5darb19.js +1 -0
  35. package/dist/bin/{chunk-hpzbvc4a.js → chunk-haqap7d1.js} +2 -2
  36. package/dist/bin/chunk-hc4s84v1.js +1 -0
  37. package/dist/bin/chunk-hfswzdzj.js +1 -0
  38. package/dist/bin/{chunk-rkd3x7fw.js → chunk-j01jx36v.js} +2 -2
  39. package/dist/bin/chunk-p5k5z7gm.js +1 -0
  40. package/dist/bin/{chunk-sfb9q18c.js → chunk-qbagghsb.js} +283 -295
  41. package/dist/bin/chunk-qfkfhg84.js +1 -0
  42. package/dist/bin/chunk-qxg95ndf.js +2 -0
  43. package/dist/bin/{chunk-a1zagtx1.js → chunk-r3gxhy1k.js} +6 -6
  44. package/dist/bin/{chunk-7kjy2hng.js → chunk-r8e263ne.js} +5 -5
  45. package/dist/bin/chunk-s4x1pb7n.js +1 -0
  46. package/dist/bin/{chunk-70w9nss5.js → chunk-s7f24j6k.js} +1 -1
  47. package/dist/bin/chunk-svrgx20b.js +14 -0
  48. package/dist/bin/chunk-tcstvf11.js +1 -0
  49. package/dist/bin/chunk-th86qyty.js +1 -0
  50. package/dist/bin/chunk-tj589nbw.js +1 -0
  51. package/dist/bin/chunk-tv0rtc0s.js +2 -0
  52. package/dist/bin/{chunk-7k52s3qm.js → chunk-twmeg17s.js} +6 -6
  53. package/dist/bin/{chunk-nnxkw5pn.js → chunk-v3dck0e4.js} +2 -2
  54. package/dist/bin/{chunk-mzzrnkk5.js → chunk-v3prk467.js} +5 -5
  55. package/dist/bin/{chunk-4vbnagyd.js → chunk-v4gpkkzh.js} +1 -1
  56. package/dist/bin/{chunk-49y286vw.js → chunk-vkdw6sxn.js} +1 -1
  57. package/dist/bin/chunk-x8wvsf1k.js +1 -0
  58. package/dist/bin/chunk-y1qk3df2.js +1 -0
  59. package/dist/bin/{chunk-hbrb314y.js → chunk-y2qz4vw1.js} +1 -1
  60. package/dist/bin/{chunk-wc5swv1a.js → chunk-ymfnqae6.js} +2 -2
  61. package/dist/bin/{chunk-0wtnhxdt.js → chunk-yt95wsqg.js} +1 -1
  62. package/dist/bin/chunk-zjw9sdr5.js +1 -0
  63. package/dist/bin/{chunk-mb2fh91q.js → chunk-zmp0mksb.js} +2 -2
  64. package/dist/bin/cli.js +347 -347
  65. package/dist/bin/dashboard-server.js +1 -1
  66. package/dist/{chunk-pkpmz35j.js → chunk-0kddm2mt.js} +7 -7
  67. package/dist/chunk-0my5jwq8.js +1 -0
  68. package/dist/chunk-3nqtbyfp.js +14 -0
  69. package/dist/{chunk-v9t4751b.js → chunk-50m6sq01.js} +5 -5
  70. package/dist/{chunk-g3f3ccdw.js → chunk-7gvnrx46.js} +4 -4
  71. package/dist/{chunk-444h366b.js → chunk-906prq6g.js} +6 -6
  72. package/dist/{chunk-0pe1dfy0.js → chunk-9aaj9a0s.js} +520 -533
  73. package/dist/{chunk-pqm7fz1d.js → chunk-abadztwc.js} +165 -165
  74. package/dist/{chunk-jp57js5y.js → chunk-ajn6xp8v.js} +3 -3
  75. package/dist/{chunk-29dcfx1g.js → chunk-annmzhbb.js} +81 -81
  76. package/dist/{chunk-qad1mjmc.js → chunk-c97wwdtk.js} +9 -9
  77. package/dist/{chunk-6n72pe9x.js → chunk-ctkzxq0d.js} +2 -2
  78. package/dist/chunk-f2xqeers.js +1 -0
  79. package/dist/chunk-f4m9k2q6.js +1 -0
  80. package/dist/{chunk-9r32w840.js → chunk-fszn9rnn.js} +43 -43
  81. package/dist/chunk-fxk29btr.js +1 -0
  82. package/dist/chunk-fz62nas4.js +1 -0
  83. package/dist/{chunk-wctam3r1.js → chunk-hvwqct5q.js} +2 -2
  84. package/dist/{chunk-45116tdd.js → chunk-jch6ks7a.js} +3 -3
  85. package/dist/chunk-kcj92xx7.js +2 -0
  86. package/dist/chunk-kzjvasjs.js +2 -0
  87. package/dist/{chunk-v1wqxgra.js → chunk-mxw5gkd8.js} +2 -2
  88. package/dist/{chunk-n4gkyye3.js → chunk-my6yn5sd.js} +2 -2
  89. package/dist/{chunk-y3dj8xwk.js → chunk-n4z75mk8.js} +4 -4
  90. package/dist/{chunk-nmm287ym.js → chunk-nr6z3e1p.js} +4 -4
  91. package/dist/{chunk-s958jt49.js → chunk-p0ksat08.js} +1 -1
  92. package/dist/{chunk-m1jp1abp.js → chunk-pdjap529.js} +2 -2
  93. package/dist/{chunk-e08h4q50.js → chunk-pfav9qnt.js} +7 -7
  94. package/dist/{chunk-y3h0ybmn.js → chunk-sekw1nyx.js} +19 -19
  95. package/dist/{chunk-tzvtq055.js → chunk-tez0qfv9.js} +1 -1
  96. package/dist/{chunk-k3azr9e3.js → chunk-tsaffke7.js} +3 -3
  97. package/dist/chunk-yhjagaff.js +1 -0
  98. package/dist/{chunk-c6nw88s3.js → chunk-yzns0k2b.js} +2 -2
  99. package/dist/deploy/index.js +1 -1
  100. package/dist/dns/index.js +1 -1
  101. package/dist/drivers/index.js +1 -1
  102. package/dist/index.js +87 -87
  103. package/dist/operations/index.js +1 -1
  104. package/dist/protection/index.js +1 -1
  105. package/dist/spend/index.js +1 -1
  106. package/dist/ui/404.html +1 -1
  107. package/dist/ui/accept-invitation.html +1 -1
  108. package/dist/ui/access-denied.html +1 -1
  109. package/dist/ui/account/automation.html +6 -6
  110. package/dist/ui/account/security.html +2 -2
  111. package/dist/ui/applications/compose.html +5 -5
  112. package/dist/ui/applications/new.html +2 -2
  113. package/dist/ui/data/backups.html +5 -5
  114. package/dist/ui/data/services.html +6 -6
  115. package/dist/ui/data/volumes.html +6 -6
  116. package/dist/ui/index.html +5 -5
  117. package/dist/ui/infrastructure/topology.html +6 -6
  118. package/dist/ui/integrations.html +2 -2
  119. package/dist/ui/operations/alerts.html +6 -6
  120. package/dist/ui/operations/configuration.html +5 -5
  121. package/dist/ui/operations/jobs.html +6 -6
  122. package/dist/ui/operations/maintenance.html +6 -6
  123. package/dist/ui/operations/observability.html +5 -5
  124. package/dist/ui/operations/previews.html +6 -6
  125. package/dist/ui/operations/queue.html +5 -5
  126. package/dist/ui/operations/regions.html +6 -6
  127. package/dist/ui/operations/releases.html +5 -5
  128. package/dist/ui/operations/spend.html +5 -5
  129. package/dist/ui/operations/workloads.html +6 -6
  130. package/dist/ui/security.html +2 -2
  131. package/dist/ui/server/actions.html +6 -6
  132. package/dist/ui/server/activity.html +1 -1
  133. package/dist/ui/server/capacity.html +6 -6
  134. package/dist/ui/server/database.html +6 -6
  135. package/dist/ui/server/deployments.html +6 -6
  136. package/dist/ui/server/diagnostics.html +2 -2
  137. package/dist/ui/server/firewall.html +6 -6
  138. package/dist/ui/server/fleet.html +6 -6
  139. package/dist/ui/server/logs.html +6 -6
  140. package/dist/ui/server/metrics.html +6 -6
  141. package/dist/ui/server/security.html +1 -1
  142. package/dist/ui/server/services.html +2 -2
  143. package/dist/ui/server/sites.html +6 -6
  144. package/dist/ui/server/ssh-keys.html +6 -6
  145. package/dist/ui/server/team.html +6 -6
  146. package/dist/ui/server/terminal.html +2 -2
  147. package/dist/ui/serverless/alarms.html +6 -6
  148. package/dist/ui/serverless/assets.html +2 -2
  149. package/dist/ui/serverless/cost.html +2 -2
  150. package/dist/ui/serverless/data.html +6 -6
  151. package/dist/ui/serverless/deployments.html +2 -2
  152. package/dist/ui/serverless/firewall.html +2 -2
  153. package/dist/ui/serverless/functions.html +6 -6
  154. package/dist/ui/serverless/logs.html +6 -6
  155. package/dist/ui/serverless/metrics.html +2 -2
  156. package/dist/ui/serverless/queues.html +6 -6
  157. package/dist/ui/serverless/secrets.html +6 -6
  158. package/dist/ui/serverless/traces.html +6 -6
  159. package/dist/ui/serverless.html +6 -6
  160. package/package.json +3 -3
  161. package/dist/bin/chunk-1ye6ky7s.js +0 -1
  162. package/dist/bin/chunk-2njcbs0c.js +0 -1
  163. package/dist/bin/chunk-35ct309x.js +0 -1
  164. package/dist/bin/chunk-3ybxaehy.js +0 -1
  165. package/dist/bin/chunk-5p9jnpg2.js +0 -1
  166. package/dist/bin/chunk-9aram0sm.js +0 -1
  167. package/dist/bin/chunk-9jmt42fx.js +0 -1
  168. package/dist/bin/chunk-axwpxssn.js +0 -1
  169. package/dist/bin/chunk-cqc4pc2h.js +0 -1
  170. package/dist/bin/chunk-cxde3tbf.js +0 -1
  171. package/dist/bin/chunk-d0xz1vh3.js +0 -1
  172. package/dist/bin/chunk-d2wm1zy3.js +0 -1
  173. package/dist/bin/chunk-hnwdjkrt.js +0 -1
  174. package/dist/bin/chunk-hrvfz72e.js +0 -1
  175. package/dist/bin/chunk-j4d7h8rh.js +0 -1
  176. package/dist/bin/chunk-jsncf48k.js +0 -2
  177. package/dist/bin/chunk-k178k5re.js +0 -1
  178. package/dist/bin/chunk-k5h2a7a8.js +0 -1
  179. package/dist/bin/chunk-nw8wmbmq.js +0 -2
  180. package/dist/bin/chunk-prz0w9pq.js +0 -1
  181. package/dist/bin/chunk-rhjjdhhq.js +0 -1
  182. package/dist/bin/chunk-rv7epkg1.js +0 -1
  183. package/dist/bin/chunk-tftcv9rt.js +0 -1
  184. package/dist/bin/chunk-yd2155bj.js +0 -1
  185. package/dist/bin/chunk-yqefsck4.js +0 -1
  186. package/dist/bin/chunk-yzyt35ys.js +0 -1
  187. package/dist/chunk-4nfjkggt.js +0 -1
  188. package/dist/chunk-7r2qc39k.js +0 -2
  189. package/dist/chunk-8nafnyax.js +0 -1
  190. package/dist/chunk-e3831mvy.js +0 -1
  191. package/dist/chunk-rqe0sfqw.js +0 -2
  192. package/dist/chunk-xask9f1n.js +0 -1
  193. package/dist/chunk-xrr334m5.js +0 -1
@@ -1,6 +1,6 @@
1
- import{et,A,qt,Nr,Ci}from"./chunk-sfb9q18c.js";import{execSync as D}from"node:child_process";import{randomBytes as R}from"node:crypto";import{chmodSync as j,copyFileSync as x,existsSync as u,mkdirSync as w,readFileSync as U,statSync as N,writeFileSync as m}from"node:fs";import{tmpdir as E}from"node:os";import{basename as P,dirname as v,isAbsolute as O,join as a,resolve as B}from"node:path";import{fileURLToPath as C}from"node:url";function h(e){if(!e||typeof e!=="object")return e;return Object.fromEntries(Object.keys(e).map((r)=>[r,""]))}function M(e){let r=JSON.parse(JSON.stringify(e??{}));if(r.hetzner)delete r.hetzner.apiToken;delete r.aws,delete r.stateDir;for(let t of Object.values(r.sites??{})){if(t?.env)t.env=h(t.env);if(t?.environment)t.environment=h(t.environment)}for(let t of Object.values(r.environments??{}))if(t?.variables)t.variables=h(t.variables);for(let t of Object.values(r.infrastructure?.databases??{}))if(t?.password)t.password="";if(r.infrastructure?.appDatabase?.password)r.infrastructure.appDatabase.password="";if(r.infrastructure?.compute?.database?.password)r.infrastructure.compute.database.password="";if(r.infrastructure?.compute?.managedServices?.vitess?.password)r.infrastructure.compute.managedServices.vitess.password="";return r}function y(e){let r=M(e);return["// Generated by ts-cloud for the management dashboard — do not edit.","//","// This is the project's resolved cloud config, inlined so it needs no","// imports on the box. Credentials are deliberately absent.",`export default ${JSON.stringify(r,null,2)}`,""].join(`
2
- `)}var Id="dashboard";function cc(){return et("dashboard-credentials.json")}function F(){return R(24).toString("base64url")}function Rd(e,r,t){let s=process.env.TS_CLOUD_UI_PASSWORD?.trim();if(s)return{password:s,source:"env"};if(b(process.env.TS_CLOUD_UI_PUBLIC))return{password:void 0,source:"public"};let n=cc(),i=A(e,"dashboard-credentials.json");try{if(u(i)){let o=JSON.parse(U(i,"utf8"));if(o?.password)return{password:o.password,source:"generated"}}}catch{}let d=F();try{w(v(i),{recursive:!0}),m(i,`${JSON.stringify({username:r,password:d,generatedAt:new Date().toISOString()},null,2)}
1
+ import{Ue,A,Wt,_r,xi}from"./chunk-qbagghsb.js";import{execSync as D}from"node:child_process";import{randomBytes as R}from"node:crypto";import{chmodSync as j,copyFileSync as x,existsSync as u,mkdirSync as w,readFileSync as U,statSync as N,writeFileSync as m}from"node:fs";import{tmpdir as E}from"node:os";import{basename as P,dirname as v,isAbsolute as O,join as a,resolve as B}from"node:path";import{fileURLToPath as C}from"node:url";function h(e){if(!e||typeof e!=="object")return e;return Object.fromEntries(Object.keys(e).map((r)=>[r,""]))}function M(e){let r=JSON.parse(JSON.stringify(e??{}));if(r.hetzner)delete r.hetzner.apiToken;delete r.aws,delete r.stateDir;for(let t of Object.values(r.sites??{})){if(t?.env)t.env=h(t.env);if(t?.environment)t.environment=h(t.environment)}for(let t of Object.values(r.environments??{}))if(t?.variables)t.variables=h(t.variables);for(let t of Object.values(r.infrastructure?.databases??{}))if(t?.password)t.password="";if(r.infrastructure?.appDatabase?.password)r.infrastructure.appDatabase.password="";if(r.infrastructure?.compute?.database?.password)r.infrastructure.compute.database.password="";if(r.infrastructure?.compute?.managedServices?.vitess?.password)r.infrastructure.compute.managedServices.vitess.password="";return r}function y(e){let r=M(e);return["// Generated by ts-cloud for the management dashboard — do not edit.","//","// This is the project's resolved cloud config, inlined so it needs no","// imports on the box. Credentials are deliberately absent.",`export default ${JSON.stringify(r,null,2)}`,""].join(`
2
+ `)}var jd="dashboard";function Mc(){return Ue("dashboard-credentials.json")}function F(){return R(24).toString("base64url")}function Vd(e,r,t){let s=process.env.TS_CLOUD_UI_PASSWORD?.trim();if(s)return{password:s,source:"env"};if(b(process.env.TS_CLOUD_UI_PUBLIC))return{password:void 0,source:"public"};let n=Mc(),i=A(e,"dashboard-credentials.json");try{if(u(i)){let o=JSON.parse(U(i,"utf8"));if(o?.password)return{password:o.password,source:"generated"}}}catch{}let d=F();try{w(v(i),{recursive:!0}),m(i,`${JSON.stringify({username:r,password:d,generatedAt:new Date().toISOString()},null,2)}
3
3
  `),j(i,384),t.info(`Management dashboard: generated a password for '${r}' and saved it to ${n} (read it there — it is not printed). Set TS_CLOUD_UI_PASSWORD to pin your own, or TS_CLOUD_UI_PUBLIC=1 to serve without auth.`)}catch(o){t.warn(`Management dashboard: could not persist the generated password (${o?.message??o}). Using it for this deploy only — pass: ${d}
4
- This password is now in your deploy log. Set TS_CLOUD_UI_PASSWORD to a value of your own and redeploy once ${n} is writable.`)}return{password:d,source:"generated"}}var I={info:()=>{},warn:()=>{}};function b(e){return e!=null&&e!==""&&e!=="0"&&e.toLowerCase()!=="false"}function J(){return et("dashboard-release")}function L(){let e=v(C(import.meta.url));for(let r of[a(e,"..","..","package.json"),a(e,"..","package.json")])try{let t=JSON.parse(U(r,"utf8"));if(t.name==="@stacksjs/ts-cloud"&&t.version)return`^${t.version}`}catch{}return"latest"}function z(){return process.env.TS_CLOUD_UI_VERSION?.trim()||L()}function V(e,r,t){if(!e?.project?.slug)return t.warn("Management dashboard: the cloud config has no project slug — skipping the live dashboard."),null;let s=A(r,"dashboard-release");try{w(s,{recursive:!0}),m(a(s,"cloud.config.ts"),y(e));let n=z();if(n.startsWith("file:")){let d=n.slice(5),o=O(d)?d:B(r,d);if(!u(o)||!N(o).isFile())n=L(),t.warn(`Management dashboard: TS_CLOUD_UI_VERSION points to a missing package file (${o}); using the deploying ts-cloud version ${n} instead.`);else{let c=P(o),l=a(s,c);if(o!==l)x(o,l);n=`file:./${c}`}}let i={name:"ts-cloud-dashboard",private:!0,type:"module",dependencies:{"@stacksjs/ts-cloud":n}};return m(a(s,"package.json"),`${JSON.stringify(i,null,2)}
5
- `),J()}catch(n){return t.warn(`Management dashboard: could not stage the live release (${n?.message??n}) — skipping.`),null}}function co(e){if(u(a(e,"packages","ui","pages"))||u(a(e,"packages","ui","package.json")))return{uiRoot:"packages/ui/dist",build:"cd packages/ui && bun install && bun run build"};let r=v(C(import.meta.url)),t=[a(r,"ui"),a(r,"..","ui"),a(r,"..","..","ui"),a(r,"..","dist","ui")];for(let s of t)if(u(a(s,"index.html"))||u(a(s,"serverless.html")))return{uiRoot:s,build:!1};return null}function lo(e,r={}){let t=r.logger??I,s=r.cwd??process.cwd();if(b(process.env.TS_CLOUD_UI_DISABLE))return t.info("Management dashboard: skipped (TS_CLOUD_UI_DISABLE set)."),e;if(e.cloud?.attachTo)return t.info(`Management dashboard: ${e.project.slug} is attached to ${e.cloud.attachTo}; the server owner's dashboard monitors every attached project.`),e;if(qt(e))return e;let n=e.environments&&Object.keys(e.environments)[0],i=process.env.TS_CLOUD_UI_DOMAIN?.trim()||void 0,d=Number(process.env.TS_CLOUD_UI_PORT)||void 0,o={...e.sites??{}};if(!b(process.env.TS_CLOUD_UI_STATIC)){let g=V(e,s,t);if(!g)return e;let p=Ci(e,n??"production",{uiRoot:g,build:!1,domain:i,port:d,live:!0});if(p.length===0)return t.info("Management dashboard: no domain resolved (set TS_CLOUD_UI_DOMAIN or configure a site domain) — skipping."),e;for(let{name:k,site:_}of p)o[k]=_,t.info(`Management dashboard → https://${_.domain} (sign in with your ts-cloud account; the first deploy prints an admin password once)`);return e.sites=o,e}let c=co(s);if(!c)return t.info("Management dashboard: UI not found (no local ui/ or packaged dist/ui) — skipping auto-deploy."),e;let l=process.env.TS_CLOUD_UI_USERNAME?.trim()||"admin",f=Rd(s,l,t),S=Ci(e,n??"production",{uiRoot:c.uiRoot,build:c.build,domain:i,username:l,password:f.password,realm:process.env.TS_CLOUD_UI_REALM?.trim()||void 0,live:!1,port:d});if(S.length===0)return t.info("Management dashboard: no domain resolved (set TS_CLOUD_UI_DOMAIN or configure a site domain) — skipping."),e;let T=f.source==="public"?"NO AUTH — TS_CLOUD_UI_PUBLIC is set (dashboard is publicly reachable)":f.source==="env"?"htpasswd-protected (TS_CLOUD_UI_PASSWORD)":`htpasswd-protected (auto-generated — see ${cc()})`;t.warn("Management dashboard: static mode — one shared password, and no per-site collaborators. Unset TS_CLOUD_UI_STATIC for the live dashboard.");for(let{name:g,site:p}of S)o[g]=p,t.info(`Management dashboard → https://${p.domain} (${T})`);return e.sites=o,e}function uo(e){return Object.keys(e.sites??{}).filter(Nr)}function Es(e,r){if(!e?.root)return null;let t=r.cwd??process.cwd(),s=r.logger??I;try{if(typeof e.build==="string"&&e.build.trim())s.info(`Management dashboard: building UI (${e.build})`),D(e.build,{cwd:t,stdio:"inherit"});let n=O(e.root)?e.root:a(t,e.root);if(!u(n))return s.warn(`Management dashboard: build output not found at ${n} — skipping dashboard artifact.`),null;let i=a(E(),`${r.slug}-${r.siteName??Id}-${r.sha}.tar.gz`);return D(`tar czf "${i}" -C "${n}" .`,{stdio:"inherit"}),i}catch(n){return s.warn(`Management dashboard: failed to build artifact — ${n?.message??n}. Skipping dashboard deploy.`),null}}
6
- export{Id,cc,Rd,co,lo,uo,Es};
4
+ This password is now in your deploy log. Set TS_CLOUD_UI_PASSWORD to a value of your own and redeploy once ${n} is writable.`)}return{password:d,source:"generated"}}var I={info:()=>{},warn:()=>{}};function b(e){return e!=null&&e!==""&&e!=="0"&&e.toLowerCase()!=="false"}function J(){return Ue("dashboard-release")}function L(){let e=v(C(import.meta.url));for(let r of[a(e,"..","..","package.json"),a(e,"..","package.json")])try{let t=JSON.parse(U(r,"utf8"));if(t.name==="@stacksjs/ts-cloud"&&t.version)return`^${t.version}`}catch{}return"latest"}function z(){return process.env.TS_CLOUD_UI_VERSION?.trim()||L()}function V(e,r,t){if(!e?.project?.slug)return t.warn("Management dashboard: the cloud config has no project slug — skipping the live dashboard."),null;let s=A(r,"dashboard-release");try{w(s,{recursive:!0}),m(a(s,"cloud.config.ts"),y(e));let n=z();if(n.startsWith("file:")){let d=n.slice(5),o=O(d)?d:B(r,d);if(!u(o)||!N(o).isFile())n=L(),t.warn(`Management dashboard: TS_CLOUD_UI_VERSION points to a missing package file (${o}); using the deploying ts-cloud version ${n} instead.`);else{let c=P(o),l=a(s,c);if(o!==l)x(o,l);n=`file:./${c}`}}let i={name:"ts-cloud-dashboard",private:!0,type:"module",dependencies:{"@stacksjs/ts-cloud":n}};return m(a(s,"package.json"),`${JSON.stringify(i,null,2)}
5
+ `),J()}catch(n){return t.warn(`Management dashboard: could not stage the live release (${n?.message??n}) — skipping.`),null}}function Ss(e){if(u(a(e,"packages","ui","pages"))||u(a(e,"packages","ui","package.json")))return{uiRoot:"packages/ui/dist",build:"cd packages/ui && bun install && bun run build"};let r=v(C(import.meta.url)),t=[a(r,"ui"),a(r,"..","ui"),a(r,"..","..","ui"),a(r,"..","dist","ui")];for(let s of t)if(u(a(s,"index.html"))||u(a(s,"serverless.html")))return{uiRoot:s,build:!1};return null}function vs(e,r={}){let t=r.logger??I,s=r.cwd??process.cwd();if(b(process.env.TS_CLOUD_UI_DISABLE))return t.info("Management dashboard: skipped (TS_CLOUD_UI_DISABLE set)."),e;if(e.cloud?.attachTo)return t.info(`Management dashboard: ${e.project.slug} is attached to ${e.cloud.attachTo}; the server owner's dashboard monitors every attached project.`),e;if(Wt(e))return e;let n=e.environments&&Object.keys(e.environments)[0],i=process.env.TS_CLOUD_UI_DOMAIN?.trim()||void 0,d=Number(process.env.TS_CLOUD_UI_PORT)||void 0,o={...e.sites??{}};if(!b(process.env.TS_CLOUD_UI_STATIC)){let g=V(e,s,t);if(!g)return e;let p=xi(e,n??"production",{uiRoot:g,build:!1,domain:i,port:d,live:!0});if(p.length===0)return t.info("Management dashboard: no domain resolved (set TS_CLOUD_UI_DOMAIN or configure a site domain) — skipping."),e;for(let{name:k,site:_}of p)o[k]=_,t.info(`Management dashboard → https://${_.domain} (sign in with your ts-cloud account; the first deploy prints an admin password once)`);return e.sites=o,e}let c=Ss(s);if(!c)return t.info("Management dashboard: UI not found (no local ui/ or packaged dist/ui) — skipping auto-deploy."),e;let l=process.env.TS_CLOUD_UI_USERNAME?.trim()||"admin",f=Vd(s,l,t),S=xi(e,n??"production",{uiRoot:c.uiRoot,build:c.build,domain:i,username:l,password:f.password,realm:process.env.TS_CLOUD_UI_REALM?.trim()||void 0,live:!1,port:d});if(S.length===0)return t.info("Management dashboard: no domain resolved (set TS_CLOUD_UI_DOMAIN or configure a site domain) — skipping."),e;let T=f.source==="public"?"NO AUTH — TS_CLOUD_UI_PUBLIC is set (dashboard is publicly reachable)":f.source==="env"?"htpasswd-protected (TS_CLOUD_UI_PASSWORD)":`htpasswd-protected (auto-generated — see ${Mc()})`;t.warn("Management dashboard: static mode — one shared password, and no per-site collaborators. Unset TS_CLOUD_UI_STATIC for the live dashboard.");for(let{name:g,site:p}of S)o[g]=p,t.info(`Management dashboard → https://${p.domain} (${T})`);return e.sites=o,e}function Cs(e){return Object.keys(e.sites??{}).filter(_r)}function Po(e,r){if(!e?.root)return null;let t=r.cwd??process.cwd(),s=r.logger??I;try{if(typeof e.build==="string"&&e.build.trim())s.info(`Management dashboard: building UI (${e.build})`),D(e.build,{cwd:t,stdio:"inherit"});let n=O(e.root)?e.root:a(t,e.root);if(!u(n))return s.warn(`Management dashboard: build output not found at ${n} — skipping dashboard artifact.`),null;let i=a(E(),`${r.slug}-${r.siteName??jd}-${r.sha}.tar.gz`);return D(`tar czf "${i}" -C "${n}" .`,{stdio:"inherit"}),i}catch(n){return s.warn(`Management dashboard: failed to build artifact — ${n?.message??n}. Skipping dashboard deploy.`),null}}
6
+ export{jd,Mc,Vd,Ss,vs,Cs,Po};
@@ -1,5 +1,5 @@
1
- import{fi,u}from"./chunk-s6qnx8a8.js";import{gi}from"./chunk-nw8wmbmq.js";import*as c from"node:crypto";import{readFileSync as B}from"node:fs";import{readdir as L}from"node:fs/promises";import{join as z}from"node:path";function vt(e){if(e){let i=D(e);if(!i)throw Error(`AWS profile '${e}' not found in ~/.aws/credentials`);return i}let t=process.env.AWS_ACCESS_KEY_ID,s=process.env.AWS_SECRET_ACCESS_KEY;if(t&&s)return{accessKeyId:t,secretAccessKey:s,sessionToken:process.env.AWS_SESSION_TOKEN};return D(process.env.AWS_PROFILE||"default")??{accessKeyId:"",secretAccessKey:""}}function D(e){let{existsSync:t,readFileSync:s}=gi("node:fs"),{homedir:i}=gi("node:os"),{join:n}=gi("node:path"),r=process.env.AWS_SHARED_CREDENTIALS_FILE||n(i(),".aws","credentials");if(!t(r))return null;let o=s(r,"utf-8"),a=null,l,d,y;for(let h of o.split(`
2
- `)){let m=h.trim();if(!m||m.startsWith("#")||m.startsWith(";"))continue;let p=m.match(/^\[([^\]]+)\]$/);if(p){if(a===e&&l&&d)return{accessKeyId:l,secretAccessKey:d,sessionToken:y};a=p[1],l=void 0,d=void 0,y=void 0;continue}if(a===e){let[b,...S]=m.split("="),f=S.join("=").trim();switch(b.trim().toLowerCase()){case"aws_access_key_id":l=f;break;case"aws_secret_access_key":d=f;break;case"aws_session_token":y=f;break}}}if(a===e&&l&&d)return{accessKeyId:l,secretAccessKey:d,sessionToken:y};return null}function U(e){let{buffer:t,byteOffset:s,byteLength:i}=e;if(t instanceof ArrayBuffer)return t.slice(s,s+i);let n=new ArrayBuffer(i);return new Uint8Array(n).set(new Uint8Array(e)),n}function j(e,t){let s=e?.[t]??e;if(s===null||typeof s!=="object"||Array.isArray(s))return s;let i={...s};return delete i["@_xmlns"],i}class g{client;region;explicitProfile;endpoint;endpointProtocol="https";forcePathStyle;explicitCredentials;constructor(e="us-east-1",t,s){let i=typeof e==="string"?s:e,n=typeof e==="string"?e:e.region??"us-east-1",r=typeof e==="string"?t:e.profile,o=i?.endpoint?fi({region:n,path:"/",endpoint:i.endpoint}):void 0;this.region=n,this.explicitProfile=r,this.endpoint=o?.host,this.endpointProtocol=o?.protocol??"https",this.forcePathStyle=i?.forcePathStyle,this.explicitCredentials=i?.credentials,this.client=new u(i?.credentials,{profile:r,endpoint:i?.endpoint,forcePathStyle:i?.forcePathStyle})}getCredentials(){if(this.explicitCredentials?.accessKeyId&&this.explicitCredentials.secretAccessKey)return this.explicitCredentials;let e=vt(this.explicitProfile);if(e.accessKeyId&&e.secretAccessKey)return e;throw Error("S3 credentials not found. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY (or pass explicit credentials/profile), or configure ~/.aws/credentials.")}s3BaseHost(){return this.endpoint||`s3.${this.region}.amazonaws.com`}s3VirtualHost(e){return this.forcePathStyle?this.s3BaseHost():`${e}.${this.s3BaseHost()}`}objectPath(e,t){return this.forcePathStyle?`/${e}/${t}`:`/${t}`}objectUrl(e,t){return`${this.endpointProtocol}://${this.s3VirtualHost(e)}${this.objectPath(e,t)}`}async listBuckets(){let e=await this.client.request({service:"s3",region:this.region,method:"GET",path:"/"}),t=[],i=(e?.ListAllMyBucketsResult??e)?.Buckets?.Bucket;if(i){let n=Array.isArray(i)?i:[i];for(let r of n)t.push({Name:r.Name,CreationDate:r.CreationDate})}return{Buckets:t}}async createBucket(e,t){let s={};if(t?.acl)s["x-amz-acl"]=t.acl;let i;if(this.region!=="us-east-1"&&!this.endpoint)i=`<?xml version="1.0" encoding="UTF-8"?>
1
+ import{Ai,u}from"./chunk-7rwc5bvv.js";import{Lr}from"./chunk-qxg95ndf.js";import*as c from"node:crypto";import{readFileSync as B}from"node:fs";import{readdir as L}from"node:fs/promises";import{join as z}from"node:path";function Ct(e){if(e){let i=D(e);if(!i)throw Error(`AWS profile '${e}' not found in ~/.aws/credentials`);return i}let t=process.env.AWS_ACCESS_KEY_ID,s=process.env.AWS_SECRET_ACCESS_KEY;if(t&&s)return{accessKeyId:t,secretAccessKey:s,sessionToken:process.env.AWS_SESSION_TOKEN};return D(process.env.AWS_PROFILE||"default")??{accessKeyId:"",secretAccessKey:""}}function D(e){let{existsSync:t,readFileSync:s}=Lr("node:fs"),{homedir:i}=Lr("node:os"),{join:n}=Lr("node:path"),r=process.env.AWS_SHARED_CREDENTIALS_FILE||n(i(),".aws","credentials");if(!t(r))return null;let o=s(r,"utf-8"),a=null,l,d,y;for(let h of o.split(`
2
+ `)){let m=h.trim();if(!m||m.startsWith("#")||m.startsWith(";"))continue;let p=m.match(/^\[([^\]]+)\]$/);if(p){if(a===e&&l&&d)return{accessKeyId:l,secretAccessKey:d,sessionToken:y};a=p[1],l=void 0,d=void 0,y=void 0;continue}if(a===e){let[b,...S]=m.split("="),f=S.join("=").trim();switch(b.trim().toLowerCase()){case"aws_access_key_id":l=f;break;case"aws_secret_access_key":d=f;break;case"aws_session_token":y=f;break}}}if(a===e&&l&&d)return{accessKeyId:l,secretAccessKey:d,sessionToken:y};return null}function U(e){let{buffer:t,byteOffset:s,byteLength:i}=e;if(t instanceof ArrayBuffer)return t.slice(s,s+i);let n=new ArrayBuffer(i);return new Uint8Array(n).set(new Uint8Array(e)),n}function j(e,t){let s=e?.[t]??e;if(s===null||typeof s!=="object"||Array.isArray(s))return s;let i={...s};return delete i["@_xmlns"],i}class g{client;region;explicitProfile;endpoint;endpointProtocol="https";forcePathStyle;explicitCredentials;constructor(e="us-east-1",t,s){let i=typeof e==="string"?s:e,n=typeof e==="string"?e:e.region??"us-east-1",r=typeof e==="string"?t:e.profile,o=i?.endpoint?Ai({region:n,path:"/",endpoint:i.endpoint}):void 0;this.region=n,this.explicitProfile=r,this.endpoint=o?.host,this.endpointProtocol=o?.protocol??"https",this.forcePathStyle=i?.forcePathStyle,this.explicitCredentials=i?.credentials,this.client=new u(i?.credentials,{profile:r,endpoint:i?.endpoint,forcePathStyle:i?.forcePathStyle})}getCredentials(){if(this.explicitCredentials?.accessKeyId&&this.explicitCredentials.secretAccessKey)return this.explicitCredentials;let e=Ct(this.explicitProfile);if(e.accessKeyId&&e.secretAccessKey)return e;throw Error("S3 credentials not found. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY (or pass explicit credentials/profile), or configure ~/.aws/credentials.")}s3BaseHost(){return this.endpoint||`s3.${this.region}.amazonaws.com`}s3VirtualHost(e){return this.forcePathStyle?this.s3BaseHost():`${e}.${this.s3BaseHost()}`}objectPath(e,t){return this.forcePathStyle?`/${e}/${t}`:`/${t}`}objectUrl(e,t){return`${this.endpointProtocol}://${this.s3VirtualHost(e)}${this.objectPath(e,t)}`}async listBuckets(){let e=await this.client.request({service:"s3",region:this.region,method:"GET",path:"/"}),t=[],i=(e?.ListAllMyBucketsResult??e)?.Buckets?.Bucket;if(i){let n=Array.isArray(i)?i:[i];for(let r of n)t.push({Name:r.Name,CreationDate:r.CreationDate})}return{Buckets:t}}async createBucket(e,t){let s={};if(t?.acl)s["x-amz-acl"]=t.acl;let i;if(this.region!=="us-east-1"&&!this.endpoint)i=`<?xml version="1.0" encoding="UTF-8"?>
3
3
  <CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
4
4
  <LocationConstraint>${this.region}</LocationConstraint>
5
5
  </CreateBucketConfiguration>`,s["Content-Type"]="application/xml";await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,headers:s,body:i})}async deleteBucket(e){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${e}`})}async emptyAndDeleteBucket(e){let t=!0;while(t){let s=await this.listAllObjects({bucket:e});if(s.length===0){t=!1;break}let i=s.map((n)=>n.Key);for(let n=0;n<i.length;n+=1000){let r=i.slice(n,n+1000);await this.deleteObjects(e,r)}}await this.deleteBucket(e)}async listAllObjects(e){let t=[],s;do{let i={"list-type":"2","max-keys":"1000"};if(e.prefix)i.prefix=e.prefix;if(s)i["continuation-token"]=s;let n=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e.bucket}`,queryParams:i}),r=n?.ListBucketResult??n,o=r?.Contents;if(o){let l=Array.isArray(o)?o:[o];for(let d of l)t.push({Key:d.Key,LastModified:d.LastModified||"",Size:Number.parseInt(d.Size||"0"),ETag:d.ETag})}let a=r?.IsTruncated;s=a==="true"||a===!0?r?.NextContinuationToken:void 0}while(s);return t}async list(e){let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e.bucket}`}),s=[],n=(t?.ListBucketResult??t)?.Contents;if(n){let r=Array.isArray(n)?n:[n];for(let o of r){if(e.prefix&&!o.Key?.startsWith(e.prefix))continue;if(s.push({Key:o.Key||"",LastModified:o.LastModified||"",Size:Number.parseInt(o.Size||"0"),ETag:o.ETag}),e.maxKeys&&s.length>=e.maxKeys)break}}return s}async putObject(e){let t={};if(e.acl)t["x-amz-acl"]=e.acl;if(e.cacheControl)t["Cache-Control"]=e.cacheControl;if(e.contentType)t["Content-Type"]=e.contentType;if(e.metadata)for(let[n,r]of Object.entries(e.metadata))t[`x-amz-meta-${n}`]=r;let s=e.key.split("/").map((n)=>encodeURIComponent(n)).join("/"),i=e.body instanceof Uint8Array&&!Buffer.isBuffer(e.body)?Buffer.from(e.body):e.body;if(Buffer.isBuffer(i)||i instanceof Uint8Array){let n=Buffer.isBuffer(i)?i:Buffer.from(i),{accessKeyId:r,secretAccessKey:o,sessionToken:a}=this.getCredentials(),l=this.s3VirtualHost(e.bucket),d=this.objectPath(e.bucket,s),y=this.objectUrl(e.bucket,s),h=new Date,m=h.toISOString().replace(/[:-]|\.\d{3}/g,""),p=h.toISOString().slice(0,10).replace(/-/g,""),b=c.createHash("sha256").update(n).digest("hex"),S={host:l,"x-amz-date":m,"x-amz-content-sha256":b,...t};if(a)S["x-amz-security-token"]=a;let f=Object.keys(S).sort().map((P)=>`${P.toLowerCase()}:${S[P].trim()}
@@ -89,4 +89,4 @@ host:${o}
89
89
  ${t.map((n)=>`<Object><Key>${n.Key}</Key>${n.VersionId?`<VersionId>${n.VersionId}</VersionId>`:""}</Object>`).join(`
90
90
  `)}
91
91
  </Delete>`,i=c.createHash("md5").update(s).digest("base64");await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${e}`,queryParams:{delete:""},body:s,headers:{"Content-Type":"application/xml","Content-MD5":i}})}}
92
- export{vt,g};
92
+ export{Ct,g};
@@ -0,0 +1 @@
1
+ import{V}from"./chunk-s7f24j6k.js";import"./chunk-7rwc5bvv.js";export{V as SQSClient};
@@ -0,0 +1 @@
1
+ import{ni}from"./chunk-27mfrb34.js";import"./chunk-s7f24j6k.js";import"./chunk-bqcqzc30.js";import"./chunk-j01jx36v.js";import"./chunk-r3gxhy1k.js";import"./chunk-v4gpkkzh.js";import"./chunk-d5q09rxb.js";import"./chunk-7rwc5bvv.js";import"./chunk-qbagghsb.js";import"./chunk-svrgx20b.js";export{ni as resolveDashboardData};
@@ -0,0 +1 @@
1
+ import{lt}from"./chunk-haqap7d1.js";import"./chunk-7rwc5bvv.js";export{lt as STSClient};
@@ -0,0 +1 @@
1
+ import{wp,fd,tc,rc,hd,Ap,Rp,Qt,En,Yt,Ui,Ip,wn,Ks}from"./chunk-vkdw6sxn.js";import{We,oo,uc,ci,ao,$p}from"./chunk-9n3wmdd6.js";import{Ld,ds,Md,Ud,Fd,Cr,Xp,us}from"./chunk-bfzdbe4g.js";import{Ga,qa,Wa,rd,Mi,nd,id,Hs,Ka,Ja}from"./chunk-qbagghsb.js";import"./chunk-svrgx20b.js";export{qa as CHAIN_HEADER,En as DEFAULT_ATTACK_MODE_HOURS,Ld as DEFAULT_DDOS_THRESHOLDS,Mi as DEFAULT_RECURSION_LIMITS,Ga as DEPTH_HEADER,Qt as MAX_CONTROL_HOURS,Yt as ProtectionControlStore,wp as RATE_LIMIT_KEY_SEPARATOR,hd as RateLimiter,Hs as RecursionGuard,Wa as TRACE_HEADER,wn as applyControlsToDdos,Ip as applyControlsToRateLimits,us as applyMitigationFactor,Rp as defaultRateLimitRules,Ui as describePosture,We as escapeSecLang,rd as functionFingerprint,fd as globMatches,uc as globToRegex,id as inspectInvocation,oo as isSafePattern,ds as isValidCidr,Ks as mergeControlsIntoConfig,nd as parseChain,Xp as planMitigation,Ka as propagationHeaders,Ap as rateLimitHeaders,rc as rateLimitKey,Ja as recursionBlockedResponse,Cr as renderDdosInstallScript,Fd as renderNftablesRuleset,Ud as renderSysctlFile,ci as renderWafConfig,ao as renderWafInstallScript,tc as ruleMatches,Md as sysctlHardening,$p as wafEventTelemetry};