@stacksjs/ts-cloud 0.16.35 → 0.16.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aws/index.js +1 -1
- package/dist/aws/s3.d.ts +9 -1
- package/dist/bin/{chunk-c8439azc.js → chunk-017cjgwt.js} +2 -2
- package/dist/bin/{chunk-bqcqzc30.js → chunk-0ffqbgbs.js} +3 -3
- package/dist/bin/{chunk-cm1dsffd.js → chunk-1fjhc7w7.js} +4 -4
- package/dist/bin/{chunk-v3dck0e4.js → chunk-2bkxxset.js} +2 -2
- package/dist/bin/chunk-2gygs4xw.js +1 -0
- package/dist/bin/chunk-3gc8y0ta.js +1 -0
- package/dist/bin/{chunk-twmeg17s.js → chunk-4zxwtvvf.js} +1 -1
- package/dist/bin/{chunk-cnwncp50.js → chunk-5keq8y15.js} +4 -4
- package/dist/bin/{chunk-cn5tfp7t.js → chunk-6dm7x6g2.js} +12 -12
- package/dist/bin/{chunk-71jh460j.js → chunk-6r35j09y.js} +2 -2
- package/dist/bin/{chunk-vkdw6sxn.js → chunk-6sdffc79.js} +1 -1
- package/dist/bin/{chunk-exc2mqcc.js → chunk-71z22p71.js} +7 -7
- package/dist/bin/{chunk-9n3wmdd6.js → chunk-7xj986z7.js} +2 -2
- package/dist/bin/{chunk-bfzdbe4g.js → chunk-8gay06gq.js} +6 -6
- package/dist/bin/chunk-cdzas02w.js +1 -0
- package/dist/bin/{chunk-16kx70x7.js → chunk-dvyd4bxh.js} +12 -12
- package/dist/bin/chunk-dzx0w4zb.js +1 -0
- package/dist/bin/chunk-excjyrfx.js +1 -0
- package/dist/bin/{chunk-d5q09rxb.js → chunk-f76wtb7d.js} +27 -27
- package/dist/bin/chunk-fawjv4dc.js +1 -0
- package/dist/bin/{chunk-v3prk467.js → chunk-fxyr2wkt.js} +3 -3
- package/dist/bin/{chunk-r8e263ne.js → chunk-gd94501z.js} +5 -5
- package/dist/bin/chunk-gewxhd5z.js +1 -0
- package/dist/bin/chunk-gjadvs6y.js +1 -0
- package/dist/bin/{chunk-qbagghsb.js → chunk-hsek7hvh.js} +93 -116
- package/dist/bin/{chunk-svrgx20b.js → chunk-kj4gm2hk.js} +3 -3
- package/dist/bin/chunk-n84pv5ns.js +1 -0
- package/dist/bin/{chunk-5yv95sqs.js → chunk-na2j5twe.js} +1 -1
- package/dist/bin/{chunk-27mfrb34.js → chunk-nhz2az7v.js} +2 -2
- package/dist/bin/chunk-r263q1aa.js +1 -0
- package/dist/bin/chunk-rbjj0bcn.js +1 -0
- package/dist/bin/chunk-sp78dh4p.js +1 -0
- package/dist/bin/chunk-t844fst8.js +1 -0
- package/dist/bin/chunk-tkz95bkg.js +1 -0
- package/dist/bin/{chunk-a0cvd2ez.js → chunk-vg9et0kb.js} +3 -3
- package/dist/bin/{chunk-ar6bxdv4.js → chunk-w663zt0w.js} +3 -3
- package/dist/bin/chunk-xpzkwgb4.js +1 -0
- package/dist/bin/chunk-zswkrc34.js +1 -0
- package/dist/bin/cli.js +29 -29
- package/dist/bin/dashboard-server.js +1 -1
- package/dist/{chunk-tsaffke7.js → chunk-0fhz75e0.js} +3 -3
- package/dist/{chunk-tez0qfv9.js → chunk-1kfagk30.js} +1 -1
- package/dist/chunk-1mrqpf8e.js +1 -0
- package/dist/chunk-2bbm2q0s.js +1 -0
- package/dist/{chunk-kcj92xx7.js → chunk-2bvmp0br.js} +2 -2
- package/dist/{chunk-n4z75mk8.js → chunk-3bsf7585.js} +1 -1
- package/dist/chunk-46jnzd0d.js +1 -0
- package/dist/{chunk-7gvnrx46.js → chunk-5np6w0g7.js} +2 -2
- package/dist/{chunk-pdjap529.js → chunk-78r4k21k.js} +1 -1
- package/dist/{chunk-0kddm2mt.js → chunk-98xzqtnw.js} +1 -1
- package/dist/{chunk-annmzhbb.js → chunk-a74kqzne.js} +12 -12
- package/dist/{chunk-hvwqct5q.js → chunk-aqxp4s43.js} +1 -1
- package/dist/{chunk-ajn6xp8v.js → chunk-azt6sm0r.js} +1 -1
- package/dist/{chunk-906prq6g.js → chunk-fsdd2cj8.js} +2 -2
- package/dist/chunk-j5v7fgxz.js +1 -0
- package/dist/chunk-jfqm2c9q.js +1 -0
- package/dist/{chunk-mxw5gkd8.js → chunk-k92sywmh.js} +1 -1
- package/dist/{chunk-c97wwdtk.js → chunk-mbs6pr03.js} +6 -6
- package/dist/{chunk-fszn9rnn.js → chunk-mce0cpgf.js} +10 -10
- package/dist/{chunk-yzns0k2b.js → chunk-n0vz557v.js} +1 -1
- package/dist/{chunk-3nqtbyfp.js → chunk-n3p8vr8s.js} +3 -3
- package/dist/{chunk-p0ksat08.js → chunk-pjhag27y.js} +1 -1
- package/dist/chunk-ppr0bkgd.js +1 -0
- package/dist/{chunk-nr6z3e1p.js → chunk-rkjnr9fp.js} +3 -3
- package/dist/{chunk-jch6ks7a.js → chunk-svzmsd7g.js} +30 -30
- package/dist/{chunk-ctkzxq0d.js → chunk-t0azf37g.js} +2 -2
- package/dist/{chunk-9aaj9a0s.js → chunk-vmhfc7nk.js} +91 -114
- package/dist/{chunk-abadztwc.js → chunk-x7pnt65y.js} +55 -55
- package/dist/{chunk-my6yn5sd.js → chunk-ybdxrf42.js} +1 -1
- package/dist/{chunk-sekw1nyx.js → chunk-zg589zg1.js} +10 -10
- package/dist/deploy/index.js +1 -1
- package/dist/dns/index.js +1 -1
- package/dist/drivers/index.js +1 -1
- package/dist/generators/infrastructure.d.ts +7 -0
- package/dist/index.js +17 -17
- package/dist/operations/index.js +1 -1
- package/dist/protection/index.js +1 -1
- package/dist/spend/index.js +1 -1
- package/dist/ui/404.html +1 -1
- package/dist/ui/accept-invitation.html +1 -1
- package/dist/ui/access-denied.html +1 -1
- package/dist/ui/account/automation.html +6 -6
- package/dist/ui/account/security.html +2 -2
- package/dist/ui/applications/compose.html +6 -6
- package/dist/ui/applications/new.html +2 -2
- package/dist/ui/data/backups.html +6 -6
- package/dist/ui/data/services.html +6 -6
- package/dist/ui/data/volumes.html +6 -6
- package/dist/ui/index.html +5 -5
- package/dist/ui/infrastructure/topology.html +5 -5
- package/dist/ui/integrations.html +2 -2
- package/dist/ui/operations/alerts.html +6 -6
- package/dist/ui/operations/configuration.html +6 -6
- package/dist/ui/operations/jobs.html +6 -6
- package/dist/ui/operations/maintenance.html +6 -6
- package/dist/ui/operations/observability.html +6 -6
- package/dist/ui/operations/previews.html +6 -6
- package/dist/ui/operations/queue.html +5 -5
- package/dist/ui/operations/regions.html +6 -6
- package/dist/ui/operations/releases.html +5 -5
- package/dist/ui/operations/spend.html +6 -6
- package/dist/ui/operations/workloads.html +6 -6
- package/dist/ui/security.html +1 -1
- package/dist/ui/server/actions.html +6 -6
- package/dist/ui/server/activity.html +1 -1
- package/dist/ui/server/capacity.html +6 -6
- package/dist/ui/server/database.html +6 -6
- package/dist/ui/server/deployments.html +6 -6
- package/dist/ui/server/diagnostics.html +1 -1
- package/dist/ui/server/firewall.html +5 -5
- package/dist/ui/server/fleet.html +5 -5
- package/dist/ui/server/logs.html +5 -5
- package/dist/ui/server/metrics.html +6 -6
- package/dist/ui/server/security.html +1 -1
- package/dist/ui/server/services.html +2 -2
- package/dist/ui/server/sites.html +6 -6
- package/dist/ui/server/ssh-keys.html +6 -6
- package/dist/ui/server/team.html +6 -6
- package/dist/ui/server/terminal.html +2 -2
- package/dist/ui/serverless/alarms.html +6 -6
- package/dist/ui/serverless/assets.html +2 -2
- package/dist/ui/serverless/cost.html +2 -2
- package/dist/ui/serverless/data.html +6 -6
- package/dist/ui/serverless/deployments.html +2 -2
- package/dist/ui/serverless/firewall.html +2 -2
- package/dist/ui/serverless/functions.html +6 -6
- package/dist/ui/serverless/logs.html +6 -6
- package/dist/ui/serverless/metrics.html +2 -2
- package/dist/ui/serverless/queues.html +6 -6
- package/dist/ui/serverless/secrets.html +6 -6
- package/dist/ui/serverless/traces.html +6 -6
- package/dist/ui/serverless.html +6 -6
- package/package.json +3 -3
- package/dist/bin/chunk-3gg55dkc.js +0 -1
- package/dist/bin/chunk-3pbbc03q.js +0 -1
- package/dist/bin/chunk-691k55nw.js +0 -1
- package/dist/bin/chunk-7n84q4np.js +0 -1
- package/dist/bin/chunk-8pnm151y.js +0 -1
- package/dist/bin/chunk-dgxzk04r.js +0 -1
- package/dist/bin/chunk-e9mkg5dn.js +0 -1
- package/dist/bin/chunk-h5darb19.js +0 -1
- package/dist/bin/chunk-hfswzdzj.js +0 -1
- package/dist/bin/chunk-qfkfhg84.js +0 -1
- package/dist/bin/chunk-s4x1pb7n.js +0 -1
- package/dist/bin/chunk-tcstvf11.js +0 -1
- package/dist/bin/chunk-th86qyty.js +0 -1
- package/dist/bin/chunk-x8wvsf1k.js +0 -1
- package/dist/bin/chunk-y1qk3df2.js +0 -1
- package/dist/bin/chunk-zjw9sdr5.js +0 -1
- package/dist/chunk-0my5jwq8.js +0 -1
- package/dist/chunk-f2xqeers.js +0 -1
- package/dist/chunk-f4m9k2q6.js +0 -1
- package/dist/chunk-fxk29btr.js +0 -1
- package/dist/chunk-fz62nas4.js +0 -1
- package/dist/chunk-yhjagaff.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n}from"./chunk-
|
|
1
|
+
import{n}from"./chunk-5np6w0g7.js";class I{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async createHostedZone(e){let t=e.CallerReference||`${Date.now()}-${Math.random().toString(36).slice(2)}`,o=`<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/">
|
|
3
3
|
<Name>${e.Name}</Name>
|
|
4
4
|
<CallerReference>${t}</CallerReference>`;if(e.HostedZoneConfig){if(o+=`
|
|
@@ -8,7 +8,7 @@ var v;try{v=await import("node:crypto")}catch{}var C=new Map,_=100,ee={appstream
|
|
|
8
8
|
`),w=J(r,d,h,a,P,g??C);return o.searchParams.set("X-Amz-Signature",w),{url:o.toString(),method:t,headers:{},body:s||void 0}}async function ne(e){let{urlObj:n,method:t,body:s,accessKeyId:c,secretAccessKey:r,sessionToken:i,service:a,region:h,timestamp:m,date:d,credentialScope:f,algorithm:p,expiresIn:u,cache:g}=e,o=new URL(n.toString());o.searchParams.set("X-Amz-Algorithm",p),o.searchParams.set("X-Amz-Credential",`${c}/${f}`),o.searchParams.set("X-Amz-Date",m),o.searchParams.set("X-Amz-Expires",String(u));let y=a==="s3"?"UNSIGNED-PAYLOAD":await T(s);if(a==="s3")o.searchParams.set("X-Amz-Content-Sha256",y);let S="host";if(o.searchParams.set("X-Amz-SignedHeaders",S),i)o.searchParams.set("X-Amz-Security-Token",i);let b=O(o.pathname||"/"),A=`host:${o.hostname}
|
|
9
9
|
`,x=j(o.searchParams),l=[t,b,x,A,S,y].join(`
|
|
10
10
|
`),P=[p,m,f,await T(l)].join(`
|
|
11
|
-
`),w=await V(r,d,h,a,P,g??C);return o.searchParams.set("X-Amz-Signature",w),{url:o.toString(),method:t,headers:{},body:s||void 0}}function Oo(e){let{url:n,method:t="GET",expiresIn:s=3600,...c}=e,r=Math.min(s,604800);return R({...c,url:n,method:t,signQuery:!0,expiresIn:r}).url}async function
|
|
11
|
+
`),w=await V(r,d,h,a,P,g??C);return o.searchParams.set("X-Amz-Signature",w),{url:o.toString(),method:t,headers:{},body:s||void 0}}function Oo(e){let{url:n,method:t="GET",expiresIn:s=3600,...c}=e,r=Math.min(s,604800);return R({...c,url:n,method:t,signQuery:!0,expiresIn:r}).url}async function Vy(e){let{url:n,method:t="GET",expiresIn:s=3600,...c}=e,r=Math.min(s,604800);return(await Tl({...c,url:n,method:t,signQuery:!0,expiresIn:r})).url}function N(e){return Object.keys(e).sort().map((n)=>`${n.toLowerCase()}:${e[n].trim().replace(/\s+/g," ")}`).join(`
|
|
12
12
|
`)+`
|
|
13
|
-
`}function G(e){return Object.keys(e).sort().map((n)=>n.toLowerCase()).join(";")}function j(e){let n=[];return e.forEach((t,s)=>{n.push([Q(s),Q(t)])}),n.sort((t,s)=>{if(t[0]<s[0])return-1;if(t[0]>s[0])return 1;if(t[1]<s[1])return-1;if(t[1]>s[1])return 1;return 0}),n.map(([t,s])=>`${t}=${s}`).join("&")}function O(e){return e.split("/").map((n)=>Q(n)).join("/")}function Q(e){return encodeURIComponent(e).replace(/[!'()*]/g,(n)=>`%${n.charCodeAt(0).toString(16).toUpperCase()}`)}function U(e){if(!v)throw Error("Synchronous hash not available in browser. Use signRequestAsync() instead.");return v.createHash("sha256").update(e,"utf8").digest("hex")}function z(e,n){if(!v)throw Error("Synchronous hmac not available in browser. Use signRequestAsync() instead.");return v.createHmac("sha256",e).update(n,"utf8").digest()}async function T(e){let t=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",t);return Y(new Uint8Array(s))}async function E(e,n){let t=new TextEncoder,s=typeof e==="string"?t.encode(e):e,c=t.encode(n),r=await crypto.subtle.importKey("raw",s.buffer,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),i=await crypto.subtle.sign("HMAC",r,c.buffer);return new Uint8Array(i)}function Y(e){return Array.from(e).map((n)=>n.toString(16).padStart(2,"0")).join("")}function J(e,n,t,s,c,r){let i=`${e}:${n}:${t}:${s}`,a=r.get(i);if(!a){let h=z(`AWS4${e}`,n),m=z(h,t),d=z(m,s);if(a=z(d,"aws4_request"),r.size>=_){let f=r.keys().next().value;if(f)r.delete(f)}r.set(i,a)}return z(a,c).toString("hex")}async function V(e,n,t,s,c,r){let i=`${e}:${n}:${t}:${s}`,a=r.get(i);if(!a){let m=await E(`AWS4${e}`,n),d=await E(m,t),f=await E(d,s);if(a=await E(f,"aws4_request"),r.size>=_){let p=r.keys().next().value;if(p)r.delete(p)}r.set(i,a)}let h=await E(a,c);return Y(h)}function Z(e,n){return n.includes(e)}function H(e,n,t){let s=n*Math.pow(2,e),c=Math.random()*0.3*s;return Math.min(s+c,t)}function I(e){return new Promise((n)=>setTimeout(n,e))}async function
|
|
14
|
-
export{vl,R,Tl,Oo,
|
|
13
|
+
`}function G(e){return Object.keys(e).sort().map((n)=>n.toLowerCase()).join(";")}function j(e){let n=[];return e.forEach((t,s)=>{n.push([Q(s),Q(t)])}),n.sort((t,s)=>{if(t[0]<s[0])return-1;if(t[0]>s[0])return 1;if(t[1]<s[1])return-1;if(t[1]>s[1])return 1;return 0}),n.map(([t,s])=>`${t}=${s}`).join("&")}function O(e){return e.split("/").map((n)=>Q(n)).join("/")}function Q(e){return encodeURIComponent(e).replace(/[!'()*]/g,(n)=>`%${n.charCodeAt(0).toString(16).toUpperCase()}`)}function U(e){if(!v)throw Error("Synchronous hash not available in browser. Use signRequestAsync() instead.");return v.createHash("sha256").update(e,"utf8").digest("hex")}function z(e,n){if(!v)throw Error("Synchronous hmac not available in browser. Use signRequestAsync() instead.");return v.createHmac("sha256",e).update(n,"utf8").digest()}async function T(e){let t=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",t);return Y(new Uint8Array(s))}async function E(e,n){let t=new TextEncoder,s=typeof e==="string"?t.encode(e):e,c=t.encode(n),r=await crypto.subtle.importKey("raw",s.buffer,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),i=await crypto.subtle.sign("HMAC",r,c.buffer);return new Uint8Array(i)}function Y(e){return Array.from(e).map((n)=>n.toString(16).padStart(2,"0")).join("")}function J(e,n,t,s,c,r){let i=`${e}:${n}:${t}:${s}`,a=r.get(i);if(!a){let h=z(`AWS4${e}`,n),m=z(h,t),d=z(m,s);if(a=z(d,"aws4_request"),r.size>=_){let f=r.keys().next().value;if(f)r.delete(f)}r.set(i,a)}return z(a,c).toString("hex")}async function V(e,n,t,s,c,r){let i=`${e}:${n}:${t}:${s}`,a=r.get(i);if(!a){let m=await E(`AWS4${e}`,n),d=await E(m,t),f=await E(d,s);if(a=await E(f,"aws4_request"),r.size>=_){let p=r.keys().next().value;if(p)r.delete(p)}r.set(i,a)}let h=await E(a,c);return Y(h)}function Z(e,n){return n.includes(e)}function H(e,n,t){let s=n*Math.pow(2,e),c=Math.random()*0.3*s;return Math.min(s+c,t)}function I(e){return new Promise((n)=>setTimeout(n,e))}async function df(e,n){let{maxRetries:t=3,initialDelayMs:s=100,maxDelayMs:c=5000,retryableStatusCodes:r=[429,500,502,503,504],timeoutMs:i=30000}=n??{},a,h;for(let m=0;m<=t;m++){let d=R(e),f={method:d.method,headers:d.headers};if(d.body)f.body=d.body;let p=new AbortController,u=setTimeout(()=>p.abort(),i);f.signal=p.signal;try{let g=await fetch(d.url,f);if(clearTimeout(u),h=g,g.ok)return g;if(m<t&&Z(g.status,r)){let y=H(m,s,c);await I(y);continue}let o=await g.text();throw Error(`AWS API request failed (${g.status}): ${o}`)}catch(g){if(clearTimeout(u),a=g,g instanceof Error&&g.name==="AbortError")a=Error(`Request timed out after ${i}ms`);if(m<t&&!(g instanceof Error&&g.message.includes("AWS API request failed"))){let o=H(m,s,c);await I(o);continue}throw a}}throw a??Error("Request failed after retries")}async function qy(e){return df(e,{maxRetries:0})}async function jy(e,n){let{maxRetries:t=3,initialDelayMs:s=100,maxDelayMs:c=5000,retryableStatusCodes:r=[429,500,502,503,504],timeoutMs:i=30000}=n??{},a;for(let h=0;h<=t;h++){let m=await Tl(e),d={method:m.method,headers:m.headers};if(m.body)d.body=m.body;let f=new AbortController,p=setTimeout(()=>f.abort(),i);d.signal=f.signal;try{let u=await fetch(m.url,d);if(clearTimeout(p),u.ok)return u;if(h<t&&Z(u.status,r)){let o=H(h,s,c);await I(o);continue}let g=await u.text();throw Error(`AWS API request failed (${u.status}): ${g}`)}catch(u){if(clearTimeout(p),a=u,u instanceof Error&&u.name==="AbortError")a=Error(`Request timed out after ${i}ms`);if(h<t&&!(u instanceof Error&&u.message.includes("AWS API request failed"))){let g=H(h,s,c);await I(g);continue}throw a}}throw a??Error("Request failed after retries")}async function zy(e){let n=await e.text(),t={},s=/<(\w+)>([^<]+)<\/\1>/g,c;while((c=s.exec(n))!==null){let[,r,i]=c;t[r]=i}return t}async function Ky(e){return await e.json()}function Wy(){C.clear()}function Jy(){return C.size}function Xy(){return v!==void 0}function Yy(){return typeof crypto<"u"&&typeof crypto.subtle<"u"}
|
|
14
|
+
export{vl,R,Tl,Oo,Vy,df,qy,jy,zy,Ky,Wy,Jy,Xy,Yy};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ps,ms,fs,hs,ja,za}from"./chunk-fsdd2cj8.js";import"./chunk-98xzqtnw.js";import"./chunk-ybdxrf42.js";import"./chunk-n0vz557v.js";import"./chunk-k92sywmh.js";import"./chunk-svzmsd7g.js";import"./chunk-5np6w0g7.js";export{ja as deleteStaticSite,ms as deployStaticSite,za as deployStaticSiteFull,ps as generateStaticSiteTemplate,hs as invalidateCache,fs as uploadStaticFiles};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{u}from"./chunk-
|
|
1
|
+
import{u}from"./chunk-t0azf37g.js";var pt="/etc/rpx/sites.d",jh={start:3000,end:3999};function g(t){return t.slug?.trim()||"app"}function Vc(t){let r=t.lastIndexOf(":");if(r<0||r===t.length-1)return;let e=t.slice(r+1).trim();if(!/^\d+$/.test(e))return;let n=Number(e);return n>=1&&n<=65535?n:void 0}function yi(t,r={}){let e=r.ignoreSlug?.trim(),n=new Map;for(let o of t){let c=g(o);if(e&&c===e)continue;for(let a of o.proxies??[]){let f=typeof a.from==="string"?[a.from]:a.from??[];for(let i of f){let d=Vc(i);if(d!==void 0&&!n.has(d))n.set(d,c)}}}return n}function Si(t=pt){return[`for __tsc_fragment in ${t}/*.json; do`,' [ -f "$__tsc_fragment" ] || continue',` base64 < "$__tsc_fragment" | tr -d '\\n'`," printf '\\n'","done"].join(`
|
|
2
2
|
`)}function Ii(t){let r=[];for(let e of t.split(`
|
|
3
|
-
`)){let n=e.trim();if(!n)continue;try{let o=JSON.parse(Buffer.from(n,"base64").toString("utf8"));if(o&&typeof o==="object"&&!Array.isArray(o))r.push(o)}catch{continue}}return r}function up(t,r,e=
|
|
4
|
-
export{pt,
|
|
3
|
+
`)){let n=e.trim();if(!n)continue;try{let o=JSON.parse(Buffer.from(n,"base64").toString("utf8"));if(o&&typeof o==="object"&&!Array.isArray(o))r.push(o)}catch{continue}}return r}function up(t,r,e=jh){let n=[],o=[],c=new Set(r.keys());for(let[a,f]of Object.entries(t.sites??{})){if(!f||u(f)!=="server-app")continue;let i=typeof f.port==="number"?f.port:void 0,d=Math.max(i??e.start,e.start),p;for(let s=d;s<=e.end;s++)if(!c.has(s)){p=s;break}if(p===void 0){let s=i!==void 0?r.get(i):void 0;o.push(`No free port for site '${a}' in ${e.start}-${e.end}${i!==void 0?` (wanted ${i}${s?`, held by '${s}'`:""})`:""}. Widen the range or free a port on the box.`);continue}c.add(p),n.push({site:a,port:p,declared:i,moved:i!==void 0&&p!==i})}return{allocations:n,errors:o}}
|
|
4
|
+
export{pt,jh,Vc,yi,Si,Ii,up};
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import{kr,n}from"./chunk-
|
|
2
|
-
`)){let
|
|
1
|
+
import{kr,n}from"./chunk-5np6w0g7.js";import{he}from"./chunk-2bvmp0br.js";import*as d 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 Nr(e){if(e){let r=D(e);if(!r)throw Error(`AWS profile '${e}' not found in ~/.aws/credentials`);return r}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}=he("node:fs"),{homedir:r}=he("node:os"),{join:i}=he("node:path"),a=process.env.AWS_SHARED_CREDENTIALS_FILE||i(r(),".aws","credentials");if(!t(a))return null;let c=s(a,"utf-8"),g=null,u,l,p;for(let h of c.split(`
|
|
2
|
+
`)){let y=h.trim();if(!y||y.startsWith("#")||y.startsWith(";"))continue;let m=y.match(/^\[([^\]]+)\]$/);if(m){if(g===e&&u&&l)return{accessKeyId:u,secretAccessKey:l,sessionToken:p};g=m[1],u=void 0,l=void 0,p=void 0;continue}if(g===e){let[b,...S]=y.split("="),f=S.join("=").trim();switch(b.trim().toLowerCase()){case"aws_access_key_id":u=f;break;case"aws_secret_access_key":l=f;break;case"aws_session_token":p=f;break}}}if(g===e&&u&&l)return{accessKeyId:u,secretAccessKey:l,sessionToken:p};return null}function U(e){let{buffer:t,byteOffset:s,byteLength:r}=e;if(t instanceof ArrayBuffer)return t.slice(s,s+r);let i=new ArrayBuffer(r);return new Uint8Array(i).set(new Uint8Array(e)),i}function j(e,t){let s=e?.[t]??e;if(s===null||typeof s!=="object"||Array.isArray(s))return s;let r={...s};return delete r["@_xmlns"],r}class o{client;region;explicitProfile;endpoint;endpointProtocol="https";forcePathStyle;explicitCredentials;constructor(e="us-east-1",t,s){let r=typeof e==="string"?s:e,i=typeof e==="string"?e:e.region??"us-east-1",a=typeof e==="string"?t:e.profile,c=r?.endpoint?kr({region:i,path:"/",endpoint:r.endpoint}):void 0;this.region=i,this.explicitProfile=a,this.endpoint=c?.host,this.endpointProtocol=c?.protocol??"https",this.forcePathStyle=r?.forcePathStyle,this.explicitCredentials=r?.credentials,this.client=new n(r?.credentials,{profile:a,endpoint:r?.endpoint,forcePathStyle:r?.forcePathStyle})}getCredentials(){if(this.explicitCredentials?.accessKeyId&&this.explicitCredentials.secretAccessKey)return this.explicitCredentials;let e=Nr(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=[],r=(e?.ListAllMyBucketsResult??e)?.Buckets?.Bucket;if(r){let i=Array.isArray(r)?r:[r];for(let a of i)t.push({Name:a.Name,CreationDate:a.CreationDate})}return{Buckets:t}}async createBucket(e,t){let s={};if(t?.acl)s["x-amz-acl"]=t.acl;let r;if(this.region!=="us-east-1"&&!this.endpoint)r=`<?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
|
-
</CreateBucketConfiguration>`,s["Content-Type"]="application/xml";await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,headers:s,body:r})}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 r=s.map((i)=>i.Key);for(let i=0;i<r.length;i+=1000){let a=r.slice(i,i+1000);await this.deleteObjects(e,a)}}await this.deleteBucket(e)}async listAllObjects(e){let t=[],s;do{let r={"list-type":"2","max-keys":"1000"};if(e.prefix)r.prefix=e.prefix;if(s)r["continuation-token"]=s;let i=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e.bucket}`,queryParams:r}),a=i?.ListBucketResult??i,c=a?.Contents;if(c){let
|
|
6
|
-
`).join(""),
|
|
7
|
-
`),w="AWS4-HMAC-SHA256",
|
|
8
|
-
`),I=
|
|
9
|
-
`).join(""),S=Object.keys(
|
|
10
|
-
`),
|
|
11
|
-
`),
|
|
5
|
+
</CreateBucketConfiguration>`,s["Content-Type"]="application/xml";await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,headers:s,body:r})}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 r=s.map((i)=>i.Key);for(let i=0;i<r.length;i+=1000){let a=r.slice(i,i+1000);await this.deleteObjects(e,a)}}await this.deleteBucket(e)}async listAllObjects(e){let t=[],s;do{let r={"list-type":"2","max-keys":"1000"};if(e.prefix)r.prefix=e.prefix;if(s)r["continuation-token"]=s;let i=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e.bucket}`,queryParams:r}),a=i?.ListBucketResult??i,c=a?.Contents;if(c){let u=Array.isArray(c)?c:[c];for(let l of u)t.push({Key:l.Key,LastModified:l.LastModified||"",Size:Number.parseInt(l.Size||"0"),ETag:l.ETag})}let g=a?.IsTruncated;s=g==="true"||g===!0?a?.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=[],i=(t?.ListBucketResult??t)?.Contents;if(i){let a=Array.isArray(i)?i:[i];for(let c of a){if(e.prefix&&!c.Key?.startsWith(e.prefix))continue;if(s.push({Key:c.Key||"",LastModified:c.LastModified||"",Size:Number.parseInt(c.Size||"0"),ETag:c.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[i,a]of Object.entries(e.metadata))t[`x-amz-meta-${i}`]=a;let s=e.key.split("/").map((i)=>encodeURIComponent(i)).join("/"),r=e.body instanceof Uint8Array&&!Buffer.isBuffer(e.body)?Buffer.from(e.body):e.body;if(Buffer.isBuffer(r)||r instanceof Uint8Array){let i=Buffer.isBuffer(r)?r:Buffer.from(r),{accessKeyId:a,secretAccessKey:c,sessionToken:g}=this.getCredentials(),u=this.s3VirtualHost(e.bucket),l=this.objectPath(e.bucket,s),p=this.objectUrl(e.bucket,s),h=new Date,y=h.toISOString().replace(/[:-]|\.\d{3}/g,""),m=h.toISOString().slice(0,10).replace(/-/g,""),b=d.createHash("sha256").update(i).digest("hex"),S={host:u,"x-amz-date":y,"x-amz-content-sha256":b,...t};if(g)S["x-amz-security-token"]=g;let f=Object.keys(S).sort().map((P)=>`${P.toLowerCase()}:${S[P].trim()}
|
|
6
|
+
`).join(""),x=Object.keys(S).sort().map((P)=>P.toLowerCase()).join(";"),C=["PUT",l,"",f,x,b].join(`
|
|
7
|
+
`),w="AWS4-HMAC-SHA256",T=`${m}/${this.region}/s3/aws4_request`,q=[w,y,T,d.createHash("sha256").update(C).digest("hex")].join(`
|
|
8
|
+
`),I=d.createHmac("sha256",`AWS4${c}`).update(m).digest(),K=d.createHmac("sha256",I).update(this.region).digest(),H=d.createHmac("sha256",K).update("s3").digest(),E=d.createHmac("sha256",H).update("aws4_request").digest(),v=d.createHmac("sha256",E).update(q).digest("hex"),A=`${w} Credential=${a}/${T}, SignedHeaders=${x}, Signature=${v}`,k=await fetch(p,{method:"PUT",headers:{...S,Authorization:A},body:U(i)});if(!k.ok){let P=await k.text();throw Error(`S3 PUT failed: ${k.status} ${P}`)}return}await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${s}`,bucket:e.bucket,headers:t,body:e.body})}async getObject(e,t){let s=t.split("/").map((i)=>encodeURIComponent(i)).join("/");return await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${s}`,bucket:e,rawResponse:!0})}async getObjectBytes(e,t){let{accessKeyId:s,secretAccessKey:r,sessionToken:i}=this.getCredentials(),a=this.s3VirtualHost(e),c=t.split("/").map((P)=>encodeURIComponent(P)).join("/"),g=this.objectPath(e,c),u=this.objectUrl(e,c),l=new Date,p=l.toISOString().replace(/[:-]|\.\d{3}/g,""),h=l.toISOString().slice(0,10).replace(/-/g,""),y=d.createHash("sha256").update("").digest("hex"),m={host:a,"x-amz-date":p,"x-amz-content-sha256":y};if(i)m["x-amz-security-token"]=i;let b=Object.keys(m).sort().map((P)=>`${P.toLowerCase()}:${m[P].trim()}
|
|
9
|
+
`).join(""),S=Object.keys(m).sort().map((P)=>P.toLowerCase()).join(";"),f=["GET",g,"",b,S,y].join(`
|
|
10
|
+
`),x="AWS4-HMAC-SHA256",C=`${h}/${this.region}/s3/aws4_request`,w=[x,p,C,d.createHash("sha256").update(f).digest("hex")].join(`
|
|
11
|
+
`),T=d.createHmac("sha256",`AWS4${r}`).update(h).digest(),q=d.createHmac("sha256",T).update(this.region).digest(),I=d.createHmac("sha256",q).update("s3").digest(),K=d.createHmac("sha256",I).update("aws4_request").digest(),H=d.createHmac("sha256",K).update(w).digest("hex"),E=`${x} Credential=${s}/${C}, SignedHeaders=${S}, Signature=${H}`,v=await fetch(u,{method:"GET",headers:{...m,Authorization:E}});if(!v.ok){let P=await v.text();throw Error(`S3 GET failed: ${v.status} ${P}`)}let A=await v.arrayBuffer(),k=v.headers.get("content-length");return{body:new Uint8Array(A),contentType:v.headers.get("content-type")??void 0,contentLength:k?Number.parseInt(k,10):void 0}}async copyObject(e){let t=(r)=>r.split("/").map((i)=>encodeURIComponent(i)).join("/"),s={"x-amz-copy-source":`/${e.sourceBucket}/${t(e.sourceKey)}`};if(e.metadataDirective)s["x-amz-metadata-directive"]=e.metadataDirective;if(e.contentType)s["Content-Type"]=e.contentType;if(e.metadata)for(let[r,i]of Object.entries(e.metadata))s[`x-amz-meta-${r}`]=i;await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e.destinationBucket}/${t(e.destinationKey)}`,headers:s})}async deleteObject(e,t){let s=t.split("/").map((r)=>encodeURIComponent(r)).join("/");await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${s}`,bucket:e})}async deleteObjects(e,t){let s=`<?xml version="1.0" encoding="UTF-8"?>
|
|
12
12
|
<Delete>
|
|
13
13
|
${t.map((i)=>`<Object><Key>${i}</Key></Object>`).join(`
|
|
14
14
|
`)}
|
|
15
|
-
</Delete>`,r=
|
|
16
|
-
`).join(""),S=Object.keys(
|
|
17
|
-
`),
|
|
18
|
-
`),
|
|
19
|
-
`).join(""),
|
|
20
|
-
`),S="AWS4-HMAC-SHA256",f=`${g}/${this.region}/s3/aws4_request`,
|
|
21
|
-
`),
|
|
15
|
+
</Delete>`,r=d.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":r}})}async bucketExists(e){try{return await this.client.request({service:"s3",region:this.region,method:"HEAD",path:`/${e}`}),!0}catch{return!1}}async copy(e){let t=B(e.source);await this.putObject({bucket:e.bucket,key:e.key,body:t,acl:e.acl,cacheControl:e.cacheControl,contentType:e.contentType,metadata:e.metadata})}async sync(e){let t=await this.listFilesRecursive(e.source);for(let s of t){if(e.exclude&&e.exclude.some((a)=>s.includes(a)))continue;if(e.include&&!e.include.some((a)=>s.includes(a)))continue;let r=s.substring(e.source.length+1),i=e.prefix?`${e.prefix}/${r}`:r;if(!e.dryRun){let a=B(s);await this.putObject({bucket:e.bucket,key:i,body:a,acl:e.acl,cacheControl:e.cacheControl,contentType:e.contentType,metadata:e.metadata})}}}async delete(e,t){await this.deleteObject(e,t)}async deletePrefix(e,t){let r=(await this.list({bucket:e,prefix:t})).map((i)=>i.Key);if(r.length>0)await this.deleteObjects(e,r)}async getBucketSize(e,t){return(await this.list({bucket:e,prefix:t})).reduce((r,i)=>r+i.Size,0)}async listFilesRecursive(e){let t=[],s=await L(e,{withFileTypes:!0});for(let r of s){let i=z(e,r.name);if(r.isDirectory()){let a=await this.listFilesRecursive(i);t.push(...a)}else t.push(i)}return t}async putBucketPolicy(e,t){let{accessKeyId:s,secretAccessKey:r,sessionToken:i}=this.getCredentials(),a=this.s3BaseHost(),c=typeof t==="string"?t:JSON.stringify(t),g=new Date,u=g.toISOString().replace(/[:-]|\.\d{3}/g,""),l=g.toISOString().slice(0,10).replace(/-/g,""),p=d.createHash("sha256").update(c).digest("hex"),h="/"+e,y="policy=",m={host:a,"x-amz-date":u,"x-amz-content-sha256":p,"content-type":"application/json"};if(i)m["x-amz-security-token"]=i;let b=Object.keys(m).sort().map((k)=>`${k.toLowerCase()}:${m[k].trim()}
|
|
16
|
+
`).join(""),S=Object.keys(m).sort().map((k)=>k.toLowerCase()).join(";"),f=["PUT",h,"policy=",b,S,p].join(`
|
|
17
|
+
`),x="AWS4-HMAC-SHA256",C=`${l}/${this.region}/s3/aws4_request`,w=[x,u,C,d.createHash("sha256").update(f).digest("hex")].join(`
|
|
18
|
+
`),T=d.createHmac("sha256","AWS4"+r).update(l).digest(),q=d.createHmac("sha256",T).update(this.region).digest(),I=d.createHmac("sha256",q).update("s3").digest(),K=d.createHmac("sha256",I).update("aws4_request").digest(),H=d.createHmac("sha256",K).update(w).digest("hex"),E=`${x} Credential=${s}/${C}, SignedHeaders=${S}, Signature=${H}`,v=`${this.endpointProtocol}://${a}${h}?policy=`,A=await fetch(v,{method:"PUT",headers:{...m,Authorization:E},body:c});if(!A.ok){let k=await A.text();throw Error(`Failed to put bucket policy: ${A.status} ${k}`)}}async getBucketPolicy(e){let{accessKeyId:t,secretAccessKey:s,sessionToken:r}=this.getCredentials(),i=this.s3BaseHost(),a=new Date,c=a.toISOString().replace(/[:-]|\.\d{3}/g,""),g=a.toISOString().slice(0,10).replace(/-/g,""),u=d.createHash("sha256").update("").digest("hex"),l="/"+e,p="policy=",h={host:i,"x-amz-date":c,"x-amz-content-sha256":u};if(r)h["x-amz-security-token"]=r;let y=Object.keys(h).sort().map((A)=>`${A.toLowerCase()}:${h[A].trim()}
|
|
19
|
+
`).join(""),m=Object.keys(h).sort().map((A)=>A.toLowerCase()).join(";"),b=["GET",l,"policy=",y,m,u].join(`
|
|
20
|
+
`),S="AWS4-HMAC-SHA256",f=`${g}/${this.region}/s3/aws4_request`,x=[S,c,f,d.createHash("sha256").update(b).digest("hex")].join(`
|
|
21
|
+
`),C=d.createHmac("sha256","AWS4"+s).update(g).digest(),w=d.createHmac("sha256",C).update(this.region).digest(),T=d.createHmac("sha256",w).update("s3").digest(),q=d.createHmac("sha256",T).update("aws4_request").digest(),I=d.createHmac("sha256",q).update(x).digest("hex"),K=`${S} Credential=${t}/${f}, SignedHeaders=${m}, Signature=${I}`,H=`${this.endpointProtocol}://${i}${l}?policy=`,E=await fetch(H,{method:"GET",headers:{...h,Authorization:K}});if(E.status===404)return null;if(!E.ok){let A=await E.text();throw Error(`Failed to get bucket policy: ${E.status} ${A}`)}let v=await E.text();return JSON.parse(v)}async deleteBucketPolicy(e){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${e}`,queryParams:{policy:""}})}async headBucket(e){try{return{exists:!0,region:(await this.client.request({service:"s3",region:this.region,method:"HEAD",path:`/${e}`,returnHeaders:!0}))?.headers?.["x-amz-bucket-region"]}}catch(t){if(t.statusCode===404)return{exists:!1};throw t}}async headObject(e,t){try{let s=await this.client.request({service:"s3",region:this.region,method:"HEAD",path:`/${e}/${t}`,returnHeaders:!0});return{ContentLength:s?.headers?.["content-length"]?parseInt(s.headers["content-length"]):void 0,ContentType:s?.headers?.["content-type"],ETag:s?.headers?.etag,LastModified:s?.headers?.["last-modified"]}}catch(s){if(s.statusCode===404)return null;throw s}}async getObjectBuffer(e,t){let s=await this.getObject(e,t);return Buffer.from(s)}async getObjectJson(e,t){let s=await this.getObject(e,t);return JSON.parse(s)}async putObjectJson(e,t,s,r){await this.putObject({bucket:e,key:t,body:JSON.stringify(s),contentType:"application/json",...r})}async getBucketVersioning(e){let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e}`,queryParams:{versioning:""}});return{Status:(t?.VersioningConfiguration??t)?.Status}}async putBucketVersioning(e,t){let s=`<?xml version="1.0" encoding="UTF-8"?>
|
|
22
22
|
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
|
|
23
23
|
<Status>${t}</Status>
|
|
24
24
|
</VersioningConfiguration>`;await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,queryParams:{versioning:""},headers:{"Content-Type":"application/xml"},body:s})}async getBucketLifecycleConfiguration(e){try{let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e}`,queryParams:{lifecycle:""}});return j(t,"LifecycleConfiguration")}catch(t){if(t.statusCode===404)return null;throw t}}async putBucketLifecycleConfiguration(e,t){let r=`<?xml version="1.0" encoding="UTF-8"?>
|
|
@@ -57,18 +57,18 @@ import{kr,n}from"./chunk-7gvnrx46.js";import{he}from"./chunk-kcj92xx7.js";import
|
|
|
57
57
|
<IgnorePublicAcls>${t.IgnorePublicAcls??!0}</IgnorePublicAcls>
|
|
58
58
|
<BlockPublicPolicy>${t.BlockPublicPolicy??!0}</BlockPublicPolicy>
|
|
59
59
|
<RestrictPublicBuckets>${t.RestrictPublicBuckets??!0}</RestrictPublicBuckets>
|
|
60
|
-
</PublicAccessBlockConfiguration>`;await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,queryParams:{publicAccessBlock:""},headers:{"Content-Type":"application/xml"},body:s})}async deletePublicAccessBlock(e){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${e}`,queryParams:{publicAccessBlock:""}})}generatePresignedGetUrl(e,t,s=3600){let{accessKeyId:r,secretAccessKey:i}=this.getCredentials(),a=this.s3VirtualHost(e),c=new Date,g=c.toISOString().replace(/[:-]|\.\d{3}/g,""),
|
|
60
|
+
</PublicAccessBlockConfiguration>`;await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,queryParams:{publicAccessBlock:""},headers:{"Content-Type":"application/xml"},body:s})}async deletePublicAccessBlock(e){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${e}`,queryParams:{publicAccessBlock:""}})}generatePresignedGetUrl(e,t,s=3600){let{accessKeyId:r,secretAccessKey:i}=this.getCredentials(),a=this.s3VirtualHost(e),c=new Date,g=c.toISOString().replace(/[:-]|\.\d{3}/g,""),u=c.toISOString().slice(0,10).replace(/-/g,""),l=`${u}/${this.region}/s3/aws4_request`,p=`${r}/${l}`,h=t.split("/").map((T)=>encodeURIComponent(T)).join("/"),y=new URLSearchParams({"X-Amz-Algorithm":"AWS4-HMAC-SHA256","X-Amz-Credential":p,"X-Amz-Date":g,"X-Amz-Expires":s.toString(),"X-Amz-SignedHeaders":"host"}),m=["GET",this.objectPath(e,h),y.toString(),`host:${a}
|
|
61
61
|
`,"host","UNSIGNED-PAYLOAD"].join(`
|
|
62
|
-
`),b=["AWS4-HMAC-SHA256",g,
|
|
63
|
-
`),S=
|
|
62
|
+
`),b=["AWS4-HMAC-SHA256",g,l,d.createHash("sha256").update(m).digest("hex")].join(`
|
|
63
|
+
`),S=d.createHmac("sha256",`AWS4${i}`).update(u).digest(),f=d.createHmac("sha256",S).update(this.region).digest(),x=d.createHmac("sha256",f).update("s3").digest(),C=d.createHmac("sha256",x).update("aws4_request").digest(),w=d.createHmac("sha256",C).update(b).digest("hex");return y.append("X-Amz-Signature",w),`${this.endpointProtocol}://${a}${this.objectPath(e,h)}?${y.toString()}`}generatePresignedPutUrl(e,t,s,r=3600){let{accessKeyId:i,secretAccessKey:a}=this.getCredentials(),c=this.s3VirtualHost(e),g=new Date,u=g.toISOString().replace(/[:-]|\.\d{3}/g,""),l=g.toISOString().slice(0,10).replace(/-/g,""),p=`${l}/${this.region}/s3/aws4_request`,h=`${i}/${p}`,y=t.split("/").map((q)=>encodeURIComponent(q)).join("/"),m=new URLSearchParams({"X-Amz-Algorithm":"AWS4-HMAC-SHA256","X-Amz-Credential":h,"X-Amz-Date":u,"X-Amz-Expires":r.toString(),"X-Amz-SignedHeaders":"content-type;host"}),b=["PUT",this.objectPath(e,y),m.toString(),`content-type:${s}
|
|
64
64
|
host:${c}
|
|
65
65
|
`,"content-type;host","UNSIGNED-PAYLOAD"].join(`
|
|
66
|
-
`),S=["AWS4-HMAC-SHA256",
|
|
67
|
-
`),f=
|
|
68
|
-
`).join(""),
|
|
69
|
-
`),
|
|
70
|
-
`),K=
|
|
71
|
-
<CompleteMultipartUpload>${r.sort((g,
|
|
66
|
+
`),S=["AWS4-HMAC-SHA256",u,p,d.createHash("sha256").update(b).digest("hex")].join(`
|
|
67
|
+
`),f=d.createHmac("sha256",`AWS4${a}`).update(l).digest(),x=d.createHmac("sha256",f).update(this.region).digest(),C=d.createHmac("sha256",x).update("s3").digest(),w=d.createHmac("sha256",C).update("aws4_request").digest(),T=d.createHmac("sha256",w).update(S).digest("hex");return m.append("X-Amz-Signature",T),`${this.endpointProtocol}://${c}${this.objectPath(e,y)}?${m.toString()}`}async createMultipartUpload(e,t,s){let r={};if(s?.contentType)r["Content-Type"]=s.contentType;if(s?.metadata)for(let[g,u]of Object.entries(s.metadata))r[`x-amz-meta-${g}`]=u;let i=t.split("/").map((g)=>encodeURIComponent(g)).join("/"),a=await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${i}`,bucket:e,queryParams:{uploads:""},headers:r});return{UploadId:(a?.InitiateMultipartUploadResult??a)?.UploadId}}async uploadPart(e,t,s,r,i){let{accessKeyId:a,secretAccessKey:c,sessionToken:g}=this.getCredentials(),u=this.s3VirtualHost(e),l=t.split("/").map((O)=>encodeURIComponent(O)).join("/"),p=this.objectPath(e,l),h=`${this.objectUrl(e,l)}?partNumber=${r}&uploadId=${encodeURIComponent(s)}`,y=new Date,m=y.toISOString().replace(/[:-]|\.\d{3}/g,""),b=y.toISOString().slice(0,10).replace(/-/g,""),S=d.createHash("sha256").update(i).digest("hex"),f={host:u,"x-amz-date":m,"x-amz-content-sha256":S};if(g)f["x-amz-security-token"]=g;let x=Object.keys(f).sort().map((O)=>`${O.toLowerCase()}:${f[O].trim()}
|
|
68
|
+
`).join(""),C=Object.keys(f).sort().map((O)=>O.toLowerCase()).join(";"),w=["PUT",p,`partNumber=${r}&uploadId=${encodeURIComponent(s)}`,x,C,S].join(`
|
|
69
|
+
`),T="AWS4-HMAC-SHA256",q=`${b}/${this.region}/s3/aws4_request`,I=[T,m,q,d.createHash("sha256").update(w).digest("hex")].join(`
|
|
70
|
+
`),K=d.createHmac("sha256",`AWS4${c}`).update(b).digest(),H=d.createHmac("sha256",K).update(this.region).digest(),E=d.createHmac("sha256",H).update("s3").digest(),v=d.createHmac("sha256",E).update("aws4_request").digest(),A=d.createHmac("sha256",v).update(I).digest("hex"),k=`${T} Credential=${a}/${q}, SignedHeaders=${C}, Signature=${A}`,P=await fetch(h,{method:"PUT",headers:{...f,Authorization:k},body:U(i)});if(!P.ok){let O=await P.text();throw Error(`Upload part failed: ${P.status} ${O}`)}return{ETag:P.headers.get("etag")||""}}async completeMultipartUpload(e,t,s,r){let i=t.split("/").map((g)=>encodeURIComponent(g)).join("/"),c=`<?xml version="1.0" encoding="UTF-8"?>
|
|
71
|
+
<CompleteMultipartUpload>${r.sort((g,u)=>g.PartNumber-u.PartNumber).map((g)=>`<Part><PartNumber>${g.PartNumber}</PartNumber><ETag>${g.ETag}</ETag></Part>`).join("")}</CompleteMultipartUpload>`;await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${i}`,bucket:e,queryParams:{uploadId:s},headers:{"Content-Type":"application/xml"},body:c})}async abortMultipartUpload(e,t,s){let r=t.split("/").map((i)=>encodeURIComponent(i)).join("/");await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${r}`,bucket:e,queryParams:{uploadId:s}})}async listMultipartUploads(e){let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:"/",bucket:e,queryParams:{uploads:""}}),s=(t?.ListMultipartUploadsResult??t)?.Upload;if(!s)return[];return(Array.isArray(s)?s:[s]).map((i)=>({Key:i.Key,UploadId:i.UploadId,Initiated:i.Initiated}))}async restoreObject(e,t,s,r="Standard"){let i=`<?xml version="1.0" encoding="UTF-8"?>
|
|
72
72
|
<RestoreRequest>
|
|
73
73
|
<Days>${s}</Days>
|
|
74
74
|
<GlacierJobParameters>
|
|
@@ -80,13 +80,13 @@ host:${c}
|
|
|
80
80
|
<ExpressionType>SQL</ExpressionType>
|
|
81
81
|
<InputSerialization>${a}</InputSerialization>
|
|
82
82
|
<OutputSerialization>${c}</OutputSerialization>
|
|
83
|
-
</SelectObjectContentRequest>`;return await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${e}/${t}`,queryParams:{select:"","select-type":"2"},headers:{"Content-Type":"application/xml"},body:g,rawResponse:!0})}async getSignedUrl(e){let{bucket:t,key:s,expiresIn:r=3600,operation:i="getObject"}=e,{accessKeyId:a,secretAccessKey:c,sessionToken:g}=this.getCredentials(),
|
|
84
|
-
`,H=[
|
|
85
|
-
`),E=["AWS4-HMAC-SHA256",
|
|
86
|
-
`),v=
|
|
83
|
+
</SelectObjectContentRequest>`;return await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${e}/${t}`,queryParams:{select:"","select-type":"2"},headers:{"Content-Type":"application/xml"},body:g,rawResponse:!0})}async getSignedUrl(e){let{bucket:t,key:s,expiresIn:r=3600,operation:i="getObject"}=e,{accessKeyId:a,secretAccessKey:c,sessionToken:g}=this.getCredentials(),u=new Date,l=u.toISOString().replace(/[:-]|\.\d{3}/g,""),p=u.toISOString().slice(0,10).replace(/-/g,""),h=this.s3VirtualHost(t),y=i==="putObject"?"PUT":"GET",m="AWS4-HMAC-SHA256",b=`${p}/${this.region}/s3/aws4_request`,f={"X-Amz-Algorithm":"AWS4-HMAC-SHA256","X-Amz-Credential":`${a}/${b}`,"X-Amz-Date":l,"X-Amz-Expires":r.toString(),"X-Amz-SignedHeaders":"host"};if(g)f["X-Amz-Security-Token"]=g;let C=Object.keys(f).sort().map((R)=>`${encodeURIComponent(R)}=${encodeURIComponent(f[R])}`).join("&"),w=s.split("/").map((R)=>encodeURIComponent(R)).join("/"),T=this.objectPath(t,w),q=`host:${h}
|
|
84
|
+
`,H=[y,T,C,q,"host","UNSIGNED-PAYLOAD"].join(`
|
|
85
|
+
`),E=["AWS4-HMAC-SHA256",l,b,d.createHash("sha256").update(H).digest("hex")].join(`
|
|
86
|
+
`),v=d.createHmac("sha256",`AWS4${c}`).update(p).digest(),A=d.createHmac("sha256",v).update(this.region).digest(),k=d.createHmac("sha256",A).update("s3").digest(),P=d.createHmac("sha256",k).update("aws4_request").digest(),O=d.createHmac("sha256",P).update(E).digest("hex");return`${this.endpointProtocol}://${h}${T}?${C}&X-Amz-Signature=${O}`}async listObjects(e){let{bucket:t,prefix:s,delimiter:r,maxKeys:i=1000,continuationToken:a}=e,c={"list-type":"2","max-keys":i.toString()};if(s)c.prefix=s;if(r)c.delimiter=r;if(a)c["continuation-token"]=a;let g=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${t}`,queryParams:c}),u=[],l=g?.ListBucketResult??g;if(l?.Contents){let h=Array.isArray(l.Contents)?l.Contents:[l.Contents];for(let y of h)u.push({Key:String(y.Key??""),LastModified:y.LastModified||"",Size:Number.parseInt(y.Size||"0"),ETag:y.ETag})}let p=[];if(l?.CommonPrefixes){let h=Array.isArray(l.CommonPrefixes)?l.CommonPrefixes:[l.CommonPrefixes];for(let y of h)if(y?.Prefix!==void 0&&y.Prefix!=="")p.push(String(y.Prefix))}return{objects:u,commonPrefixes:p,nextContinuationToken:l?.NextContinuationToken}}async emptyBucket(e){let t=0,s=await this.listAllObjects({bucket:e});if(s.length>0)for(let r=0;r<s.length;r+=1000){let a=s.slice(r,r+1000).map((c)=>c.Key);await this.deleteObjects(e,a),t+=a.length}try{let r,i;do{let a=await this.listObjectVersions({bucket:e,keyMarker:r,versionIdMarker:i,maxKeys:1000}),c=[];if(a.versions)for(let g of a.versions)c.push({Key:g.Key,VersionId:g.VersionId});if(a.deleteMarkers)for(let g of a.deleteMarkers)c.push({Key:g.Key,VersionId:g.VersionId});if(c.length>0)await this.deleteObjectVersions(e,c),t+=c.length;r=a.nextKeyMarker,i=a.nextVersionIdMarker}while(r)}catch{}return{deletedCount:t}}async listObjectVersions(e){let{bucket:t,prefix:s,keyMarker:r,versionIdMarker:i,maxKeys:a=1000}=e,c={versions:"","max-keys":a.toString()};if(s)c.prefix=s;if(r)c["key-marker"]=r;if(i)c["version-id-marker"]=i;let g=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${t}`,queryParams:c}),u=[],l=[];if(g.Version){let p=Array.isArray(g.Version)?g.Version:[g.Version];for(let h of p)u.push({Key:h.Key,VersionId:h.VersionId,IsLatest:h.IsLatest==="true"})}if(g.DeleteMarker){let p=Array.isArray(g.DeleteMarker)?g.DeleteMarker:[g.DeleteMarker];for(let h of p)l.push({Key:h.Key,VersionId:h.VersionId,IsLatest:h.IsLatest==="true"})}return{versions:u,deleteMarkers:l,nextKeyMarker:g.NextKeyMarker,nextVersionIdMarker:g.NextVersionIdMarker}}async deleteObjectVersions(e,t){let s=`<?xml version="1.0" encoding="UTF-8"?>
|
|
87
87
|
<Delete>
|
|
88
88
|
<Quiet>true</Quiet>
|
|
89
89
|
${t.map((i)=>`<Object><Key>${i.Key}</Key>${i.VersionId?`<VersionId>${i.VersionId}</VersionId>`:""}</Object>`).join(`
|
|
90
90
|
`)}
|
|
91
|
-
</Delete>`,r=
|
|
91
|
+
</Delete>`,r=d.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":r}})}}
|
|
92
92
|
export{Nr,o};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{U,Od}from"./chunk-
|
|
2
|
-
export{_,Br,xr,qc,zs,u,
|
|
1
|
+
import{U,Od}from"./chunk-vmhfc7nk.js";function _(t,s){return`/var/www/${t}-${s}`}var y=new Set(["laravel","php","statamic","wordpress"]);function Br(t){return t.type!=null&&y.has(t.type)}function xr(t){let s=t.proxyTo;if(s==null)return[];return(Array.isArray(s)?s:[s]).map((n)=>String(n).trim()).filter((n)=>n.length>0)}function qc(t){return xr(t).length>0}function zs(t){if(t.deploy)return t.deploy;if(Br(t))return"server";if(t.start)return"server";return"bucket"}function u(t){if(t.redirect)return"redirect";if(qc(t))return"proxy";if(Br(t))return"server-php";if(zs(t)==="bucket")return"bucket";return t.start?"server-app":"server-static"}function zh(t){return t.infrastructure?.compute!=null||Boolean(t.cloud?.attachTo?.trim())}function gp(t,s={}){let r=[],n=[],c=t.sites||{},p=zh(t),f=Od(t);if(f)r.push(f);let d=new Map;for(let[o,e]of Object.entries(c)){if(!e)continue;let h=zs(e),l=u(e);if(l==="redirect"){if(!e.domain)r.push(`Site '${o}' is a redirect site but has no \`domain\` to redirect from.`);if(!(typeof e.redirect==="string"?e.redirect:e.redirect?.to))r.push(`Site '${o}' is a redirect site but has no redirect target (\`redirect\` / \`redirect.to\`).`);if(!p)r.push(`Site '${o}' is a redirect site but no \`infrastructure.compute\` is configured to host the gateway that serves the redirect.`);let a=[];if(e.start)a.push("start");if(e.root)a.push("root");if(e.proxyTo)a.push("proxyTo");if(a.length>0)n.push(`Site '${o}' is a redirect site but also sets ${a.join(", ")}. These are ignored.`);continue}if(l==="proxy"){if(!e.domain)r.push(`Site '${o}' is a proxy site but has no \`domain\` to route from.`);if(!p)r.push(`Site '${o}' is a proxy site but no \`infrastructure.compute\` is configured to host the gateway that forwards it.`);let i=[];if(e.start)i.push("start");if(e.root)i.push("root");if(typeof e.port==="number")i.push("port");if(e.build)i.push("build");if(e.preStart&&e.preStart.length>0)i.push("preStart");if(i.length>0)n.push(`Site '${o}' sets \`proxyTo\`, so ts-cloud ships and supervises nothing for it. ${i.join(", ")} ${i.length===1?"is":"are"} ignored — remove ${i.length===1?"it":"them"}, or drop \`proxyTo\` to let ts-cloud own the service.`);continue}if(h==="server"&&!e.start&&!e.root){r.push(`Site '${o}' sets deploy:'server' but declares neither \`start\` (dynamic app) nor \`root\` (static site to serve). Add one.`);continue}if(l==="server-php"){if(!p)r.push(`Site '${o}' is a PHP site (type:'${e.type}') but no \`infrastructure.compute\` is configured. Add a server (infrastructure.compute) with PHP provisioning.`);if(!e.repository?.url)r.push(`Site '${o}' is a PHP site (type:'${e.type}') but has no \`repository.url\` to clone. PHP sites deploy via git.`)}else if(l==="server-app"){if(!p)r.push(`Site '${o}' deploys to a server (deploy:'server'${e.deploy?"":" inferred from `start`"}) but no \`infrastructure.compute\` is configured. Set deploy:'bucket' or add a server (infrastructure.compute).`);if(typeof e.port==="number"){let i=s.occupiedPorts?.get(e.port);if(i)r.push(`Site '${o}' wants port ${e.port}, which project '${i}' already serves on this box. Attached projects share one port namespace. Give '${o}' a free port, or let the attach allocate one.`);let a=d.get(e.port);if(a)r.push(`Sites '${a}' and '${o}' both use port ${e.port}. Server apps sharing a box must use distinct ports.`);else d.set(e.port,o)}}else if(l==="server-static"){if(!e.root)r.push(`Site '${o}' is a server static site (deploy:'server', no \`start\`) but has no \`root\` directory to serve.`);if(!p)r.push(`Site '${o}' deploys to a server (deploy:'server') but no \`infrastructure.compute\` is configured. Set deploy:'bucket' or add a server (infrastructure.compute).`)}else{if(!e.root)r.push(`Site '${o}' deploys to a bucket but has no \`root\` directory to upload.`);let i=[];if(e.start)i.push("start");if(typeof e.port==="number")i.push("port");if(e.preStart&&e.preStart.length>0)i.push("preStart");if(i.length>0)n.push(`Site '${o}' deploys to a bucket but sets server-only field(s): ${i.join(", ")}. These are ignored. Set deploy:'server' to use them.`)}}return{errors:r,warnings:n}}function pp(t){let s=u(t);return s!=="bucket"&&s!=="redirect"&&s!=="proxy"}function WS(t){return u(t)==="bucket"}function JS(t,s){if(U(t)==="serverless")return!0;let r=Object.entries(t.sites??{}).filter(([,c])=>c!=null),n=s?r.filter(([c])=>c===s):r;if(n.length===0)return!0;return!n.every(([,c])=>{let p=u(c);return p==="redirect"||p==="proxy"})}
|
|
2
|
+
export{_,Br,xr,qc,zs,u,zh,gp,pp,WS,JS};
|