@stacksjs/ts-cloud 0.16.43 → 0.16.45

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 (159) hide show
  1. package/dist/aws/bedrock.d.ts +73 -0
  2. package/dist/aws/index.js +1 -1
  3. package/dist/bin/{chunk-gn03w47w.js → chunk-01w4zbex.js} +1 -1
  4. package/dist/bin/{chunk-nmqjmx30.js → chunk-12x968en.js} +1 -1
  5. package/dist/bin/chunk-1xxmyx0r.js +1 -0
  6. package/dist/bin/{chunk-kdsgbvep.js → chunk-23m8kbwh.js} +1 -1
  7. package/dist/bin/{chunk-bj7ashn6.js → chunk-2gqhzn2r.js} +1 -1
  8. package/dist/bin/chunk-45qr2bd3.js +1 -0
  9. package/dist/bin/chunk-4nn00brw.js +1 -0
  10. package/dist/bin/{chunk-t80pxn04.js → chunk-50r8znqt.js} +6 -6
  11. package/dist/bin/chunk-5f1n5d80.js +1 -0
  12. package/dist/bin/{chunk-s64d5nw2.js → chunk-5mm6qn6m.js} +1 -1
  13. package/dist/bin/chunk-5xr76cms.js +1 -0
  14. package/dist/bin/{chunk-q40k9jvk.js → chunk-65yvjecx.js} +2 -2
  15. package/dist/bin/{chunk-5amvqed8.js → chunk-6y6g726g.js} +3 -3
  16. package/dist/bin/{chunk-f64jvh96.js → chunk-7qbxq0be.js} +2 -2
  17. package/dist/bin/{chunk-8z4wgqkh.js → chunk-cz2wq0tf.js} +1 -1
  18. package/dist/bin/chunk-d0tmmzy5.js +1 -0
  19. package/dist/bin/{chunk-erf79tm2.js → chunk-dawvjb7v.js} +21 -21
  20. package/dist/bin/{chunk-7p2va3nj.js → chunk-de69nra4.js} +1 -1
  21. package/dist/bin/{chunk-tf8qxy9k.js → chunk-dj03v81n.js} +20 -20
  22. package/dist/bin/chunk-fqghdpvr.js +1 -0
  23. package/dist/bin/{chunk-35x7z78g.js → chunk-frzpqsbj.js} +1 -1
  24. package/dist/bin/chunk-gkdr09xx.js +1 -0
  25. package/dist/bin/{chunk-xxe9ga9r.js → chunk-gyvkravq.js} +3 -3
  26. package/dist/bin/{chunk-jaexpxs8.js → chunk-her9ny96.js} +1 -1
  27. package/dist/bin/{chunk-3hkppc7h.js → chunk-kqxk1pds.js} +1 -1
  28. package/dist/bin/{chunk-hfnpjy9y.js → chunk-n2c6y0k1.js} +1 -1
  29. package/dist/bin/{chunk-3v2pd05g.js → chunk-nhqz2j90.js} +1 -1
  30. package/dist/bin/chunk-pg65zy8y.js +1 -0
  31. package/dist/bin/chunk-pr1dg1km.js +1 -0
  32. package/dist/bin/{chunk-dkf2kcsc.js → chunk-psvqpztv.js} +3 -3
  33. package/dist/bin/{chunk-ce1qnjs2.js → chunk-pzj1ac7x.js} +1 -1
  34. package/dist/bin/{chunk-gngsb689.js → chunk-q4dywv80.js} +2 -2
  35. package/dist/bin/{chunk-pf9dbm3b.js → chunk-q8b77zgw.js} +1 -1
  36. package/dist/bin/{chunk-qj6tr7bw.js → chunk-qq1f07te.js} +3 -3
  37. package/dist/bin/chunk-r1kg6yxp.js +1 -0
  38. package/dist/bin/{chunk-mgwmt2et.js → chunk-rdkr74y2.js} +2 -2
  39. package/dist/bin/{chunk-jh1vmant.js → chunk-rgcrsd5m.js} +1 -1
  40. package/dist/bin/chunk-t1mmfpn1.js +1 -0
  41. package/dist/bin/chunk-thph4z3k.js +1 -0
  42. package/dist/bin/chunk-txykq6f1.js +1 -0
  43. package/dist/bin/{chunk-2r9tj1ac.js → chunk-v09tfezh.js} +5 -5
  44. package/dist/bin/{chunk-dryvqne2.js → chunk-v7t6f8aw.js} +2 -2
  45. package/dist/bin/{chunk-knzje4ka.js → chunk-vjg2fymw.js} +1 -1
  46. package/dist/bin/chunk-vt3hjh9q.js +1 -0
  47. package/dist/bin/{chunk-sg8hcdev.js → chunk-w29z877b.js} +1 -1
  48. package/dist/bin/{chunk-7593hjcq.js → chunk-xdk0gmxt.js} +1 -1
  49. package/dist/bin/{chunk-fkzp9sg5.js → chunk-xe527q1k.js} +1 -1
  50. package/dist/bin/{chunk-9eqpnanr.js → chunk-xx9mrcfs.js} +1 -1
  51. package/dist/bin/{chunk-vjfwnj9z.js → chunk-ym9h629y.js} +4 -4
  52. package/dist/bin/{chunk-cqc4e8md.js → chunk-yp3a0j9n.js} +1 -1
  53. package/dist/bin/{chunk-kzpzkdpd.js → chunk-z8k9mcn5.js} +1 -1
  54. package/dist/bin/chunk-z8scg2vy.js +1 -0
  55. package/dist/bin/{chunk-pnj95hwr.js → chunk-znd507q9.js} +1 -1
  56. package/dist/bin/cli.js +98 -98
  57. package/dist/bin/dashboard-server.js +1 -1
  58. package/dist/{chunk-hc140wnm.js → chunk-1w9v8g26.js} +1 -1
  59. package/dist/{chunk-qeshf0mh.js → chunk-294kdscm.js} +51 -51
  60. package/dist/{chunk-vps4v353.js → chunk-8jsf214f.js} +6 -6
  61. package/dist/{chunk-qztdtcc8.js → chunk-96vc5w8w.js} +3 -3
  62. package/dist/{chunk-bj4kvqwz.js → chunk-c5jyzyqw.js} +13 -13
  63. package/dist/{chunk-qbbap3bt.js → chunk-d02jxsxv.js} +1 -1
  64. package/dist/{chunk-2vrv31sk.js → chunk-e4pxs9g6.js} +3 -3
  65. package/dist/{chunk-vd2jqt9w.js → chunk-g8zgpxgz.js} +1 -1
  66. package/dist/{chunk-j6fsxq8q.js → chunk-gp9tkznp.js} +2 -2
  67. package/dist/{chunk-xejwnb6f.js → chunk-hm6pwhne.js} +2 -2
  68. package/dist/{chunk-rqraq71y.js → chunk-j5x0qn7z.js} +5 -5
  69. package/dist/chunk-mqwdq7w1.js +1 -0
  70. package/dist/chunk-qjghqymj.js +1 -0
  71. package/dist/{chunk-e3evn28t.js → chunk-v3w791ze.js} +15 -15
  72. package/dist/{chunk-13pfck91.js → chunk-vkrgf3sv.js} +1 -1
  73. package/dist/{chunk-nqb7yefs.js → chunk-vv5fmmhr.js} +16 -16
  74. package/dist/{chunk-my61jkg1.js → chunk-x2pxtfk0.js} +2 -2
  75. package/dist/deploy/index.js +1 -1
  76. package/dist/dns/index.js +1 -1
  77. package/dist/drivers/factory.d.ts +3 -3
  78. package/dist/drivers/index.js +1 -1
  79. package/dist/fly/client.d.ts +153 -0
  80. package/dist/fly/deploy.d.ts +72 -0
  81. package/dist/fly/index.d.ts +2 -0
  82. package/dist/index.d.ts +1 -0
  83. package/dist/index.js +26 -26
  84. package/dist/operations/index.js +1 -1
  85. package/dist/protection/index.js +1 -1
  86. package/dist/spend/index.js +1 -1
  87. package/dist/ui/404.html +1 -1
  88. package/dist/ui/accept-invitation.html +1 -1
  89. package/dist/ui/access-denied.html +1 -1
  90. package/dist/ui/account/automation.html +5 -5
  91. package/dist/ui/account/security.html +2 -2
  92. package/dist/ui/applications/compose.html +6 -6
  93. package/dist/ui/applications/new.html +2 -2
  94. package/dist/ui/data/backups.html +6 -6
  95. package/dist/ui/data/services.html +6 -6
  96. package/dist/ui/data/volumes.html +6 -6
  97. package/dist/ui/index.html +5 -5
  98. package/dist/ui/infrastructure/topology.html +6 -6
  99. package/dist/ui/integrations.html +1 -1
  100. package/dist/ui/operations/alerts.html +6 -6
  101. package/dist/ui/operations/configuration.html +5 -5
  102. package/dist/ui/operations/jobs.html +6 -6
  103. package/dist/ui/operations/maintenance.html +5 -5
  104. package/dist/ui/operations/observability.html +6 -6
  105. package/dist/ui/operations/previews.html +6 -6
  106. package/dist/ui/operations/queue.html +5 -5
  107. package/dist/ui/operations/regions.html +5 -5
  108. package/dist/ui/operations/releases.html +6 -6
  109. package/dist/ui/operations/spend.html +6 -6
  110. package/dist/ui/operations/workloads.html +6 -6
  111. package/dist/ui/security.html +1 -1
  112. package/dist/ui/server/actions.html +6 -6
  113. package/dist/ui/server/activity.html +2 -2
  114. package/dist/ui/server/capacity.html +6 -6
  115. package/dist/ui/server/database.html +5 -5
  116. package/dist/ui/server/deployments.html +5 -5
  117. package/dist/ui/server/diagnostics.html +2 -2
  118. package/dist/ui/server/firewall.html +6 -6
  119. package/dist/ui/server/fleet.html +6 -6
  120. package/dist/ui/server/logs.html +5 -5
  121. package/dist/ui/server/metrics.html +5 -5
  122. package/dist/ui/server/security.html +1 -1
  123. package/dist/ui/server/services.html +1 -1
  124. package/dist/ui/server/sites.html +6 -6
  125. package/dist/ui/server/ssh-keys.html +6 -6
  126. package/dist/ui/server/team.html +6 -6
  127. package/dist/ui/server/terminal.html +2 -2
  128. package/dist/ui/serverless/alarms.html +6 -6
  129. package/dist/ui/serverless/assets.html +2 -2
  130. package/dist/ui/serverless/cost.html +2 -2
  131. package/dist/ui/serverless/data.html +6 -6
  132. package/dist/ui/serverless/deployments.html +2 -2
  133. package/dist/ui/serverless/firewall.html +1 -1
  134. package/dist/ui/serverless/functions.html +6 -6
  135. package/dist/ui/serverless/logs.html +6 -6
  136. package/dist/ui/serverless/metrics.html +1 -1
  137. package/dist/ui/serverless/queues.html +5 -5
  138. package/dist/ui/serverless/secrets.html +6 -6
  139. package/dist/ui/serverless/traces.html +6 -6
  140. package/dist/ui/serverless.html +5 -5
  141. package/package.json +3 -3
  142. package/dist/bin/chunk-26rf5dy2.js +0 -1
  143. package/dist/bin/chunk-5khcwxhn.js +0 -1
  144. package/dist/bin/chunk-5nc1g18b.js +0 -1
  145. package/dist/bin/chunk-71ep1g7k.js +0 -1
  146. package/dist/bin/chunk-7fh7b8r1.js +0 -1
  147. package/dist/bin/chunk-7nsjehvx.js +0 -1
  148. package/dist/bin/chunk-bb08ms5q.js +0 -1
  149. package/dist/bin/chunk-g3a9a8bx.js +0 -1
  150. package/dist/bin/chunk-jv9qp13h.js +0 -1
  151. package/dist/bin/chunk-k9ate69x.js +0 -1
  152. package/dist/bin/chunk-mh3rgn0e.js +0 -1
  153. package/dist/bin/chunk-nfb3ew1v.js +0 -1
  154. package/dist/bin/chunk-qgqgdkg0.js +0 -1
  155. package/dist/bin/chunk-s77kny9g.js +0 -1
  156. package/dist/bin/chunk-vn05n5z6.js +0 -1
  157. package/dist/bin/chunk-yxpzm8ce.js +0 -1
  158. package/dist/chunk-mzg1tnxk.js +0 -1
  159. package/dist/chunk-pahyn8p3.js +0 -1
@@ -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 Lo(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 Yy(e){let{url:n,method:t="GET",expiresIn:s=3600,...c}=e,r=Math.min(s,604800);return(await Pl({...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(`
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 Mo(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 Yy(e){let{url:n,method:t="GET",expiresIn:s=3600,...c}=e,r=Math.min(s,604800);return(await Pl({...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
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 hf(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 Zy(e){return hf(e,{maxRetries:0})}async function eS(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 Pl(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 tS(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 rS(e){return await e.json()}function nS(){C.clear()}function iS(){return C.size}function sS(){return v!==void 0}function oS(){return typeof crypto<"u"&&typeof crypto.subtle<"u"}
14
- export{Dl,R,Pl,Lo,Yy,hf,Zy,eS,tS,rS,nS,iS,sS,oS};
14
+ export{Dl,R,Pl,Mo,Yy,hf,Zy,eS,tS,rS,nS,iS,sS,oS};
@@ -1 +1 @@
1
- import{An,yn,Nu,ds,ku,Bu,xu,Na,Ou,_u,Gf,Lu,C,$u,ls,xe,Mu,Fu,IS,Uu,Qu,Hu,Gu,Vu,Vf,bS,CS,ES,qf,jf,vS,TS,zf,Kf,wS,us,cr,ka,Sn,In,dr,rt,Pt,gs,Wf,bn,qu,ju,Ba,ms,En,fs,ja}from"../chunk-qeshf0mh.js";import{za,vn,Tn,hs,As,ys,Ss,Ka,Wa}from"../chunk-rqraq71y.js";import{Ja}from"../chunk-qztdtcc8.js";import"../chunk-vps4v353.js";import"../chunk-w78e5n94.js";import"../chunk-3s8dtcz8.js";import"../chunk-varjr6np.js";import"../chunk-ct72f70x.js";import"../chunk-j6fsxq8q.js";import"../chunk-97gre81w.js";import{lg,fc,Ce,hc,Un,ug,Ac,Uc,qs,Qc,Gt,fi,js}from"../chunk-nqb7yefs.js";import"../chunk-fwcf0n8f.js";import"../chunk-9e4afej1.js";import"../chunk-bwtxb2hf.js";import"../chunk-cgcthvq9.js";import{pt,eA,Kc,bi,Ci,Ei,yp}from"../chunk-hc140wnm.js";import{_,_r,Lr,Wc,Ws,u,tA,Sp,Ip,nI,iI}from"../chunk-xejwnb6f.js";import"../chunk-e3evn28t.js";import"../chunk-bj4kvqwz.js";import"../chunk-my61jkg1.js";export{eA as DEFAULT_SITE_PORT_RANGE,pt as HOST_SITES_DIR,hc as IPV6_EXCLUDED_HOST_LABELS,Uc as MANAGEMENT_DASHBOARD_SITE,An as addSiteToCloudConfig,yp as allocateSitePorts,wS as buildAndPushContainerImage,Ja as buildAndPushServerlessImage,cr as buildFunctionEnv,Ci as buildHostSitePortsScript,js as buildManagementDashboardArtifact,Pt as buildServerTopology,gs as buildServerlessTopology,Wf as buildTopology,Ba as collectEgressMetrics,lg as collectServerDnsDomains,Kf as createContainerImageDependencies,qf as createExistingStaticFullStackDependencies,Vf as createStaticApiOriginDependencies,En as dashboardActions,qs as dashboardCredentialsFile,Mu as dashboardPageRoutes,Gu as deleteFailoverReplicaBuckets,Ka as deleteStaticSite,vS as deployExistingStaticFullStack,ka as deployServerlessApp,iI as deployShipsFiles,Vu as deploySite,bS as deployStaticApiOrigin,As as deployStaticSite,Wa as deployStaticSiteFull,vn as deployStaticSiteWithExternalDns,Tn as deployStaticSiteWithExternalDnsFull,qu as egressReportMetrics,C as ensureDashboardActor,Uu as ensureFailoverReplicaBuckets,fi as ensureManagementDashboard,TS as estimateExistingStaticFullStackMonthlyCost,ES as estimateStaticApiOriginMonthlyCost,ju as fetchEgressReport,jf as generateExistingStaticFullStackTemplate,za as generateExternalDnsStaticSiteTemplate,hs as generateStaticSiteTemplate,Qu as grantFailoverReplicaAccess,tA as hasComputeConfigured,Wc as hasProxyUpstream,zf as hashContainerContext,Un as hostAcceptsIpv6,us as infraEnvFromOutputs,$u as initializeDashboardControlPlane,Ss as invalidateCache,_r as isPhpSite,Na as isValidHostname,Ce as normalizePublicIpv6,bi as occupiedHostPorts,Ei as parseHostSiteFragments,Kc as parseUpstreamPort,ug as reconcileAddressRecords,Sn as redeployServerlessApp,yn as removeSiteFromCloudConfig,fc as removeStaleServerAddressRecords,Ou as renderAliasesValue,xu as renderEnvValue,_u as renderRedirectsValue,Gf as renderSiteSnippet,ku as renderSslValue,Bu as renderStringValue,fs as resolveDashboardAction,Qc as resolveDashboardAuth,bn as resolveDashboardData,Fu as resolveLegacyDashboardRoute,Lr as resolveProxyUpstreams,Ws as resolveSiteDeployTarget,u as resolveSiteKind,Gt as resolveUiSource,In as rollbackServerlessApp,IS as routesForDashboard,rt as runRemoteCommand,ms as sanitizeCloudConfig,Hu as seedFailoverReplicas,Lu as setAttachToInCloudConfig,dr as setMaintenance,ds as setSitePropertyInCloudConfig,Ip as shipsARelease,nI as shipsToBucket,_ as siteInstallBase,ja as startLocalDashboardServer,ls as synchronizeDashboardUsers,xe as trackDashboardOperation,Nu as updateSiteInCloudConfig,ys as uploadStaticFiles,Sp as validateDeploymentConfig,Ac as verifyAddressRecord,CS as verifyStaticApiOrigin};
1
+ import{An,yn,Nu,ds,ku,Bu,xu,Ba,Ou,_u,Gf,Lu,C,$u,ls,xe,Mu,Fu,IS,Uu,Qu,Hu,Gu,Vu,Vf,bS,CS,ES,qf,jf,vS,TS,zf,Kf,wS,us,cr,xa,Sn,In,dr,rt,Pt,gs,Wf,bn,qu,ju,Oa,ms,En,fs,Ka}from"../chunk-294kdscm.js";import{Wa,vn,Tn,hs,As,ys,Ss,Ja,Xa}from"../chunk-j5x0qn7z.js";import{Ya}from"../chunk-96vc5w8w.js";import"../chunk-8jsf214f.js";import"../chunk-w78e5n94.js";import"../chunk-3s8dtcz8.js";import"../chunk-varjr6np.js";import"../chunk-ct72f70x.js";import"../chunk-gp9tkznp.js";import"../chunk-97gre81w.js";import{lg,fc,Ce,hc,Un,ug,Ac,Uc,zs,Qc,Gt,fi,Ks}from"../chunk-vv5fmmhr.js";import"../chunk-fwcf0n8f.js";import"../chunk-9e4afej1.js";import"../chunk-bwtxb2hf.js";import"../chunk-cgcthvq9.js";import{pt,eA,Kc,bi,Ci,Ei,yp}from"../chunk-1w9v8g26.js";import{_,_r,Lr,Wc,Xs,u,tA,Sp,Ip,nI,iI}from"../chunk-hm6pwhne.js";import"../chunk-v3w791ze.js";import"../chunk-c5jyzyqw.js";import"../chunk-x2pxtfk0.js";export{eA as DEFAULT_SITE_PORT_RANGE,pt as HOST_SITES_DIR,hc as IPV6_EXCLUDED_HOST_LABELS,Uc as MANAGEMENT_DASHBOARD_SITE,An as addSiteToCloudConfig,yp as allocateSitePorts,wS as buildAndPushContainerImage,Ya as buildAndPushServerlessImage,cr as buildFunctionEnv,Ci as buildHostSitePortsScript,Ks as buildManagementDashboardArtifact,Pt as buildServerTopology,gs as buildServerlessTopology,Wf as buildTopology,Oa as collectEgressMetrics,lg as collectServerDnsDomains,Kf as createContainerImageDependencies,qf as createExistingStaticFullStackDependencies,Vf as createStaticApiOriginDependencies,En as dashboardActions,zs as dashboardCredentialsFile,Mu as dashboardPageRoutes,Gu as deleteFailoverReplicaBuckets,Ja as deleteStaticSite,vS as deployExistingStaticFullStack,xa as deployServerlessApp,iI as deployShipsFiles,Vu as deploySite,bS as deployStaticApiOrigin,As as deployStaticSite,Xa as deployStaticSiteFull,vn as deployStaticSiteWithExternalDns,Tn as deployStaticSiteWithExternalDnsFull,qu as egressReportMetrics,C as ensureDashboardActor,Uu as ensureFailoverReplicaBuckets,fi as ensureManagementDashboard,TS as estimateExistingStaticFullStackMonthlyCost,ES as estimateStaticApiOriginMonthlyCost,ju as fetchEgressReport,jf as generateExistingStaticFullStackTemplate,Wa as generateExternalDnsStaticSiteTemplate,hs as generateStaticSiteTemplate,Qu as grantFailoverReplicaAccess,tA as hasComputeConfigured,Wc as hasProxyUpstream,zf as hashContainerContext,Un as hostAcceptsIpv6,us as infraEnvFromOutputs,$u as initializeDashboardControlPlane,Ss as invalidateCache,_r as isPhpSite,Ba as isValidHostname,Ce as normalizePublicIpv6,bi as occupiedHostPorts,Ei as parseHostSiteFragments,Kc as parseUpstreamPort,ug as reconcileAddressRecords,Sn as redeployServerlessApp,yn as removeSiteFromCloudConfig,fc as removeStaleServerAddressRecords,Ou as renderAliasesValue,xu as renderEnvValue,_u as renderRedirectsValue,Gf as renderSiteSnippet,ku as renderSslValue,Bu as renderStringValue,fs as resolveDashboardAction,Qc as resolveDashboardAuth,bn as resolveDashboardData,Fu as resolveLegacyDashboardRoute,Lr as resolveProxyUpstreams,Xs as resolveSiteDeployTarget,u as resolveSiteKind,Gt as resolveUiSource,In as rollbackServerlessApp,IS as routesForDashboard,rt as runRemoteCommand,ms as sanitizeCloudConfig,Hu as seedFailoverReplicas,Lu as setAttachToInCloudConfig,dr as setMaintenance,ds as setSitePropertyInCloudConfig,Ip as shipsARelease,nI as shipsToBucket,_ as siteInstallBase,Ka as startLocalDashboardServer,ls as synchronizeDashboardUsers,xe as trackDashboardOperation,Nu as updateSiteInCloudConfig,ys as uploadStaticFiles,Sp as validateDeploymentConfig,Ac as verifyAddressRecord,CS as verifyStaticApiOrigin};
package/dist/dns/index.js CHANGED
@@ -1 +1 @@
1
- import{at,le,Me,M,Mt,Ln,ws,Rs,hr,Ar,$n,yr,Ds,Ps,Ns,ks,X,Bs,xs,Os,_s,ue,Ls,$s,Ms,D,pc,Mn,mc}from"../chunk-j6fsxq8q.js";import"../chunk-97gre81w.js";import"../chunk-cgcthvq9.js";export{M as CloudflareProvider,Mn as DnsProviderFactory,Me as GoDaddyProvider,at as PROXIABLE_RECORD_TYPES,le as PorkbunProvider,X as Route53Provider,ue as UnifiedDnsValidator,Ns as applyDeclaredZoneSettings,Os as applyZoneMigration,D as createDnsProvider,$s as createGoDaddyValidator,Ls as createPorkbunValidator,Ms as createRoute53Validator,yr as delegateZone,Ds as delegateZoneFromConfig,Ps as describeDelegation,ks as describeZoneSettings,pc as detectDnsProvider,mc as dnsProviders,Bs as exportRoute53Zone,hr as isNameserverRegistrar,Ar as isZoneHost,xs as planZoneMigration,Mt as policyTag,Ln as qualifyName,Rs as reconcileDeclaredRecords,ws as resolveDeclaredRecords,$n as sameNameservers,_s as verifyZoneParity};
1
+ import{at,le,Me,M,Mt,Ln,Ds,Ps,hr,Ar,$n,yr,Ns,ks,Bs,xs,X,Os,_s,Ls,$s,ue,Ms,Fs,Us,D,pc,Mn,mc}from"../chunk-gp9tkznp.js";import"../chunk-97gre81w.js";import"../chunk-cgcthvq9.js";export{M as CloudflareProvider,Mn as DnsProviderFactory,Me as GoDaddyProvider,at as PROXIABLE_RECORD_TYPES,le as PorkbunProvider,X as Route53Provider,ue as UnifiedDnsValidator,Bs as applyDeclaredZoneSettings,Ls as applyZoneMigration,D as createDnsProvider,Fs as createGoDaddyValidator,Ms as createPorkbunValidator,Us as createRoute53Validator,yr as delegateZone,Ns as delegateZoneFromConfig,ks as describeDelegation,xs as describeZoneSettings,pc as detectDnsProvider,mc as dnsProviders,Os as exportRoute53Zone,hr as isNameserverRegistrar,Ar as isZoneHost,_s as planZoneMigration,Mt as policyTag,Ln as qualifyName,Ps as reconcileDeclaredRecords,Ds as resolveDeclaredRecords,$n as sameNameservers,$s as verifyZoneParity};
@@ -1,7 +1,7 @@
1
- import type { CloudConfig, CloudDriver, CloudProviderName } from '@ts-cloud/core';
1
+ import type { CloudConfig, CloudDriver, DeployProviderName } from '@ts-cloud/core';
2
2
  export interface CreateCloudDriverOptions {
3
3
  config: CloudConfig;
4
- provider?: CloudProviderName;
4
+ provider?: DeployProviderName;
5
5
  }
6
6
  /**
7
7
  * Create a cloud infrastructure driver from configuration.
@@ -16,6 +16,6 @@ export declare function createCloudDriver(options: CreateCloudDriverOptions): Cl
16
16
  */
17
17
  export declare class CloudDriverFactory {
18
18
  private drivers;
19
- getDriver(config: CloudConfig, provider?: CloudProviderName): CloudDriver;
19
+ getDriver(config: CloudConfig, provider?: DeployProviderName): CloudDriver;
20
20
  }
21
21
  export declare const cloudDrivers: CloudDriverFactory;
@@ -1 +1 @@
1
- import{Qn,Ft,Ir,Ut,Hn,Gn,Vn,qn,fg,yc,Y,Er,gh,jn,Sc,Ee,ve,Fe,x,vr,zn,Tr,pe,Ic,Kn,bc,Wn,Cc,wr,ph,mh,yg,Sg,fh,hh,Ah,Rr,Jn,Ig,Qs,Xn,Yn,Zn,ei,ti,Ec,vc,Dr,wc,Ue,Z,Rc,ct,Qe,He,dt,Te,Hs,Dc,bg,Cg,Pc,Eg,lt,ri,Nc,vg,Tg,kc,Pr,we,Bc,wg,Rg,Gs,ni,ut,Dg,Pg,Ng,kg,Bg,xg,Og,_g,Lg,ii,si,oi,ai,ci,di,li,$g,Mg,Nr,O,Vs,Fg,Ug,Qg,xc,Hg,Gg,yh,Oc,Sh,Ih,Vg,qg,bh,Ch,Eh,_c,jg,vh,Th,wh,ui,gi,pi,mi,Lc,$c,Mc,Fc,Rh,zs,Hc,hi,Gc,zg,Kg,Wg,Dh}from"../chunk-nqb7yefs.js";import"../chunk-fwcf0n8f.js";import"../chunk-9e4afej1.js";import"../chunk-bwtxb2hf.js";import"../chunk-cgcthvq9.js";import"../chunk-xejwnb6f.js";import"../chunk-bj4kvqwz.js";import"../chunk-my61jkg1.js";export{Fc as AwsBoxProvisioner,vr as AwsDriver,Qg as BOOT_PARTITION_LABEL,Vs as CloudDriverFactory,Sg as DEFAULT_HOST_CLEANUP_ESCALATED,hh as DEFAULT_HOST_CLEANUP_HIGH_WATER_PERCENT,fh as DEFAULT_HOST_CLEANUP_LOW_WATER_PERCENT,yg as DEFAULT_HOST_CLEANUP_RETENTION,Ah as DEFAULT_HOST_CLEANUP_SCHEDULE,Gn as DEFAULT_RPX_CERTS_DIR,Ug as FIRST_BOOT_SCRIPT_PATH,wr as HOST_ARTIFACT_CACHE_DIR,ph as HOST_CLEANUP_SCRIPT_PATH,mh as HOST_CLEANUP_UNIT,Mc as HetznerBoxProvisioner,Dr as HetznerClient,Te as HetznerDriver,Rc as LEGACY_DRIVER_STATE_DIR,Hs as LocalBoxDriver,Kg as MANAGED_CACHE_POLICY_DISABLED,zg as MANAGED_CACHE_POLICY_OPTIMIZED,Wg as MANAGED_ORIGIN_REQUEST_POLICY_ALL_VIEWER,Rg as RASPBERRY_PI_DEFAULT_SWAP_GB,Cc as REMOTE_SCRIPT_RUNNER,jn as RPX_DIR,Sc as RPX_LAUNCHER_PATH,Ee as RPX_SERVICE_NAME,Bc as SSH_BOOTSTRAP_MARKER_DIR,we as SSH_BOOTSTRAP_VERSION,ut as SSH_DEFAULTS,li as SSH_DEPLOY_STORAGE_PATH,bg as SSH_INSECURE_HOST_KEY_OPTS,Cg as SSH_KEEPALIVE_OPTS,si as SSH_PREFLIGHT_SCRIPT,$g as SSH_SKIP_BOOTSTRAP_ENV,Nr as SshDriver,Pr as SystemSshTransport,Lc as UBUNTU_2404_AMI_PARAM,wh as acquireResizeLock,bh as applyHetznerHostOptimization,Gs as assertArchSupported,Mg as assertSshComputeConfig,Ec as buildAwsArtifactFetch,$c as buildBoxUserData,Dh as buildCloudFrontOriginConfig,xc as buildCloudInitFirstBoot,qg as buildHetznerHostOptimizationScript,Xn as buildHostCleanupDeployScript,Ig as buildHostCleanupExecutable,Qs as buildHostCleanupInstallScript,Jn as buildHostCleanupScript,vc as buildLocalArtifactFetch,Y as buildRpxConfig,Fe as buildRpxFragmentRefreshScript,Er as buildRpxLbConfig,ve as buildRpxProvisionScript,Eg as buildScpArgsFor,Zn as buildSiteDeployScript,zn as buildSshArgs,Pc as buildSshArgsFor,ni as buildSshBootstrapScript,ei as buildStaticSiteDeployScript,Fg as cloudDrivers,Ch as collectHetznerHostOptimizationReport,Oc as collectHetznerResizeManifest,Rh as createBoxProvisioner,O as createCloudDriver,Hc as deployAllComputeSites,zs as deploySiteRelease,yc as deriveRouteId,Qn as describeScriptSyntaxError,ct as driverStateDir,Qe as driverStatePath,gi as ensureFirewall,pi as ensureServer,ui as ensureSshKey,ai as evaluatePreflight,yh as executeHetznerServerResize,Tg as findKnownHostKey,di as formatPreflightFindings,Ft as formatSshFailure,qn as gatewayHostnames,x as generateUbuntuAppCloudInit,Vn as hasAutoWwwVariant,Dc as isBoxMode,Gg as isHetznerCapacityError,Hn as isLocalDatabase,vg as knownHostsLine,Nc as knownHostsToken,fg as normalizeRoutePath,Ue as normalizeSshPublicKey,oi as parsePreflightFacts,Hg as planHetznerServerResize,ci as preflightFailed,Sh as prepareHetznerResize,He as readDriverState,vh as readResizeCheckpoint,ti as releaseTarballTmpPath,hi as reloadRpxGateway,Wn as remoteScriptRunner,gh as renderRpxLauncher,Gc as renewRpxCertificates,_c as resizeCheckpointPath,jg as resizeLockPath,Yn as resolveExecStart,wc as resolveHetznerApiToken,Vg as resolveHetznerHostOptimizationPlan,Rr as resolveHostCleanupConfig,Bg as resolveSshHostKeyPolicy,Dg as resolveSshHosts,Lg as resolveSshLan,Ng as resolveSshPort,kg as resolveSshPrivateKeyPath,Og as resolveSshProfile,_g as resolveSshPublicIp,ii as resolveSshSettings,xg as resolveSshSudo,Pg as resolveSshUser,ri as scanHostKey,Ic as scpUpload,mi as serverPublicIpv4,wg as sshBootstrapMarkerPath,Tr as sshExec,pe as sshExecOrThrow,lt as sshHostKeyFingerprint,kc as sshKnownHostsPath,Ut as summarizeRemoteFailures,Ir as surfaceRemoteNotices,Eh as verifyHetznerHostOptimization,Ih as verifyHetznerResize,bc as waitForCloudInit,Kn as waitForSsh,Z as wrapCloudInitUserData,dt as writeDriverState,Th as writeResizeCheckpoint};
1
+ import{Qn,Ft,Ir,Ut,Hn,Gn,Vn,qn,fg,yc,Y,Er,gh,jn,Sc,Ee,ve,Fe,x,vr,zn,Tr,pe,Ic,Kn,bc,Wn,Cc,wr,ph,mh,yg,Sg,fh,hh,Ah,Rr,Jn,Ig,Gs,Xn,Yn,Zn,ei,ti,Ec,vc,Dr,wc,Ue,Z,Rc,ct,Qe,He,dt,Te,Vs,Dc,bg,Cg,Pc,Eg,lt,ri,Nc,vg,Tg,kc,Pr,we,Bc,wg,Rg,qs,ni,ut,Dg,Pg,Ng,kg,Bg,xg,Og,_g,Lg,ii,si,oi,ai,ci,di,li,$g,Mg,Nr,O,js,Fg,Ug,Qg,xc,Hg,Gg,yh,Oc,Sh,Ih,Vg,qg,bh,Ch,Eh,_c,jg,vh,Th,wh,ui,gi,pi,mi,Lc,$c,Mc,Fc,Rh,Ws,Hc,hi,Gc,zg,Kg,Wg,Dh}from"../chunk-vv5fmmhr.js";import"../chunk-fwcf0n8f.js";import"../chunk-9e4afej1.js";import"../chunk-bwtxb2hf.js";import"../chunk-cgcthvq9.js";import"../chunk-hm6pwhne.js";import"../chunk-c5jyzyqw.js";import"../chunk-x2pxtfk0.js";export{Fc as AwsBoxProvisioner,vr as AwsDriver,Qg as BOOT_PARTITION_LABEL,js as CloudDriverFactory,Sg as DEFAULT_HOST_CLEANUP_ESCALATED,hh as DEFAULT_HOST_CLEANUP_HIGH_WATER_PERCENT,fh as DEFAULT_HOST_CLEANUP_LOW_WATER_PERCENT,yg as DEFAULT_HOST_CLEANUP_RETENTION,Ah as DEFAULT_HOST_CLEANUP_SCHEDULE,Gn as DEFAULT_RPX_CERTS_DIR,Ug as FIRST_BOOT_SCRIPT_PATH,wr as HOST_ARTIFACT_CACHE_DIR,ph as HOST_CLEANUP_SCRIPT_PATH,mh as HOST_CLEANUP_UNIT,Mc as HetznerBoxProvisioner,Dr as HetznerClient,Te as HetznerDriver,Rc as LEGACY_DRIVER_STATE_DIR,Vs as LocalBoxDriver,Kg as MANAGED_CACHE_POLICY_DISABLED,zg as MANAGED_CACHE_POLICY_OPTIMIZED,Wg as MANAGED_ORIGIN_REQUEST_POLICY_ALL_VIEWER,Rg as RASPBERRY_PI_DEFAULT_SWAP_GB,Cc as REMOTE_SCRIPT_RUNNER,jn as RPX_DIR,Sc as RPX_LAUNCHER_PATH,Ee as RPX_SERVICE_NAME,Bc as SSH_BOOTSTRAP_MARKER_DIR,we as SSH_BOOTSTRAP_VERSION,ut as SSH_DEFAULTS,li as SSH_DEPLOY_STORAGE_PATH,bg as SSH_INSECURE_HOST_KEY_OPTS,Cg as SSH_KEEPALIVE_OPTS,si as SSH_PREFLIGHT_SCRIPT,$g as SSH_SKIP_BOOTSTRAP_ENV,Nr as SshDriver,Pr as SystemSshTransport,Lc as UBUNTU_2404_AMI_PARAM,wh as acquireResizeLock,bh as applyHetznerHostOptimization,qs as assertArchSupported,Mg as assertSshComputeConfig,Ec as buildAwsArtifactFetch,$c as buildBoxUserData,Dh as buildCloudFrontOriginConfig,xc as buildCloudInitFirstBoot,qg as buildHetznerHostOptimizationScript,Xn as buildHostCleanupDeployScript,Ig as buildHostCleanupExecutable,Gs as buildHostCleanupInstallScript,Jn as buildHostCleanupScript,vc as buildLocalArtifactFetch,Y as buildRpxConfig,Fe as buildRpxFragmentRefreshScript,Er as buildRpxLbConfig,ve as buildRpxProvisionScript,Eg as buildScpArgsFor,Zn as buildSiteDeployScript,zn as buildSshArgs,Pc as buildSshArgsFor,ni as buildSshBootstrapScript,ei as buildStaticSiteDeployScript,Fg as cloudDrivers,Ch as collectHetznerHostOptimizationReport,Oc as collectHetznerResizeManifest,Rh as createBoxProvisioner,O as createCloudDriver,Hc as deployAllComputeSites,Ws as deploySiteRelease,yc as deriveRouteId,Qn as describeScriptSyntaxError,ct as driverStateDir,Qe as driverStatePath,gi as ensureFirewall,pi as ensureServer,ui as ensureSshKey,ai as evaluatePreflight,yh as executeHetznerServerResize,Tg as findKnownHostKey,di as formatPreflightFindings,Ft as formatSshFailure,qn as gatewayHostnames,x as generateUbuntuAppCloudInit,Vn as hasAutoWwwVariant,Dc as isBoxMode,Gg as isHetznerCapacityError,Hn as isLocalDatabase,vg as knownHostsLine,Nc as knownHostsToken,fg as normalizeRoutePath,Ue as normalizeSshPublicKey,oi as parsePreflightFacts,Hg as planHetznerServerResize,ci as preflightFailed,Sh as prepareHetznerResize,He as readDriverState,vh as readResizeCheckpoint,ti as releaseTarballTmpPath,hi as reloadRpxGateway,Wn as remoteScriptRunner,gh as renderRpxLauncher,Gc as renewRpxCertificates,_c as resizeCheckpointPath,jg as resizeLockPath,Yn as resolveExecStart,wc as resolveHetznerApiToken,Vg as resolveHetznerHostOptimizationPlan,Rr as resolveHostCleanupConfig,Bg as resolveSshHostKeyPolicy,Dg as resolveSshHosts,Lg as resolveSshLan,Ng as resolveSshPort,kg as resolveSshPrivateKeyPath,Og as resolveSshProfile,_g as resolveSshPublicIp,ii as resolveSshSettings,xg as resolveSshSudo,Pg as resolveSshUser,ri as scanHostKey,Ic as scpUpload,mi as serverPublicIpv4,wg as sshBootstrapMarkerPath,Tr as sshExec,pe as sshExecOrThrow,lt as sshHostKeyFingerprint,kc as sshKnownHostsPath,Ut as summarizeRemoteFailures,Ir as surfaceRemoteNotices,Eh as verifyHetznerHostOptimization,Ih as verifyHetznerResize,bc as waitForCloudInit,Kn as waitForSsh,Z as wrapCloudInitUserData,dt as writeDriverState,Th as writeResizeCheckpoint};
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Fly.io API client, on the Machines REST API: apps, Machines, leases,
3
+ * volumes, secrets, IP assignments and certificates. Paths and payloads follow
4
+ * Fly's API reference and its own Go client (superfly/fly-go `flaps`), which
5
+ * flyctl itself uses - IP allocation and certificates moved there from the
6
+ * GraphQL API.
7
+ *
8
+ * @see https://docs.fly.io/machines/api/
9
+ */
10
+ export declare const FLY_MACHINES_API = "https://api.machines.dev/v1";
11
+ export declare class FlyApiError extends Error {
12
+ readonly status: number;
13
+ readonly path: string;
14
+ constructor(message: string, status: number, path: string);
15
+ }
16
+ export interface FlyApp {
17
+ id?: string;
18
+ name: string;
19
+ organization?: {
20
+ slug?: string;
21
+ };
22
+ status?: string;
23
+ }
24
+ export interface FlyService {
25
+ protocol: 'tcp' | 'udp';
26
+ internal_port: number;
27
+ ports: Array<{
28
+ port: number;
29
+ handlers: string[];
30
+ force_https?: boolean;
31
+ }>;
32
+ autostop?: 'off' | 'stop' | 'suspend';
33
+ autostart?: boolean;
34
+ min_machines_running?: number;
35
+ checks?: Array<{
36
+ type: 'http' | 'tcp';
37
+ interval?: string;
38
+ timeout?: string;
39
+ grace_period?: string;
40
+ method?: string;
41
+ path?: string;
42
+ }>;
43
+ }
44
+ export interface FlyMachineConfig {
45
+ image: string;
46
+ env?: Record<string, string>;
47
+ guest?: {
48
+ cpu_kind: 'shared' | 'performance';
49
+ cpus: number;
50
+ memory_mb: number;
51
+ };
52
+ services?: FlyService[];
53
+ mounts?: Array<{
54
+ volume: string;
55
+ path: string;
56
+ }>;
57
+ restart?: {
58
+ policy: 'no' | 'always' | 'on-failure';
59
+ max_retries?: number;
60
+ };
61
+ metadata?: Record<string, string>;
62
+ }
63
+ export interface FlyMachine {
64
+ id: string;
65
+ name?: string;
66
+ state: string;
67
+ region: string;
68
+ instance_id?: string;
69
+ config: FlyMachineConfig;
70
+ }
71
+ export interface FlyVolume {
72
+ id: string;
73
+ name: string;
74
+ region: string;
75
+ size_gb: number;
76
+ attached_machine_id?: string | null;
77
+ state?: string;
78
+ }
79
+ export type FlyIpType = 'v4' | 'v6' | 'shared_v4' | 'private_v6';
80
+ export interface FlyIpAssignment {
81
+ ip: string;
82
+ region?: string;
83
+ shared?: boolean;
84
+ egress?: boolean;
85
+ }
86
+ /** The kind of a listed address, read as fly-go reads it. */
87
+ export declare function flyIpType(assignment: FlyIpAssignment): FlyIpType;
88
+ export interface FlyCertificate {
89
+ hostname: string;
90
+ configured?: boolean;
91
+ status?: string;
92
+ /** The records the hostname needs for the certificate to be issued. */
93
+ dns_requirements?: {
94
+ a?: string[];
95
+ aaaa?: string[];
96
+ cname?: string;
97
+ acme_challenge?: {
98
+ name: string;
99
+ target: string;
100
+ };
101
+ };
102
+ }
103
+ export interface FlyClientOptions {
104
+ /** `FLY_API_TOKEN`: a deploy or org token. */
105
+ token: string;
106
+ fetch?: typeof fetch;
107
+ }
108
+ export declare class FlyClient {
109
+ private readonly token;
110
+ private readonly fetch;
111
+ constructor(options: FlyClientOptions);
112
+ private rest;
113
+ /** The app, or null when there is none by that name. */
114
+ getApp(name: string): Promise<FlyApp | null>;
115
+ createApp(name: string, org: string): Promise<FlyApp>;
116
+ listMachines(app: string): Promise<FlyMachine[]>;
117
+ createMachine(app: string, input: {
118
+ region: string;
119
+ config: FlyMachineConfig;
120
+ name?: string;
121
+ min_secrets_version?: number;
122
+ }): Promise<FlyMachine>;
123
+ /** Update a Machine's config. `nonce` is the lease the update is made under. */
124
+ updateMachine(app: string, id: string, input: {
125
+ config: FlyMachineConfig;
126
+ min_secrets_version?: number;
127
+ }, nonce: string): Promise<FlyMachine>;
128
+ /** Take a Machine's lease, so no other deploy updates it meanwhile. Returns the nonce. */
129
+ acquireLease(app: string, id: string, ttlSeconds?: number): Promise<string>;
130
+ releaseLease(app: string, id: string, nonce: string): Promise<void>;
131
+ /** Wait for a Machine to reach a state, up to `timeoutSeconds` (Fly allows up to 60 per call). */
132
+ waitForState(app: string, id: string, state: 'started' | 'stopped', options?: {
133
+ instanceId?: string;
134
+ timeoutSeconds?: number;
135
+ }): Promise<void>;
136
+ listVolumes(app: string): Promise<FlyVolume[]>;
137
+ createVolume(app: string, input: {
138
+ name: string;
139
+ region: string;
140
+ size_gb: number;
141
+ }): Promise<FlyVolume>;
142
+ /**
143
+ * Set secrets, leaving the app's others alone. Returns the secrets version,
144
+ * which a Machine created or updated after it must be given as
145
+ * `min_secrets_version` to be sure of seeing them.
146
+ */
147
+ setSecrets(app: string, values: Record<string, string>): Promise<number>;
148
+ listIpAssignments(app: string): Promise<FlyIpAssignment[]>;
149
+ /** Assign an address. A shared IPv4 is the organization's, shared with its other apps. */
150
+ assignIp(app: string, type: 'v6' | 'shared_v4' | 'v4'): Promise<FlyIpAssignment>;
151
+ /** Request a Let's Encrypt certificate for a custom hostname, or report the one requested before. */
152
+ requestCertificate(app: string, hostname: string): Promise<FlyCertificate>;
153
+ }
@@ -0,0 +1,72 @@
1
+ import type { CloudConfig } from '@ts-cloud/core';
2
+ import type { FlyCertificate, FlyClient, FlyIpAssignment, FlyMachineConfig } from './client';
3
+ /**
4
+ * Deploy an app to Fly.io Machines (stacksjs/stacks#1044).
5
+ *
6
+ * A Fly app runs a container image on Machines: there is no box to provision
7
+ * and nothing to reach over SSH. A deploy converges the app on the config:
8
+ *
9
+ * 1. the app exists in the organization
10
+ * 2. the app's secrets are set, and their version noted, so every Machine
11
+ * started or updated after this sees them
12
+ * 3. it has a dedicated IPv6 and a shared IPv4, so `<app>.fly.dev` answers
13
+ * 4. each configured region runs `count` Machines on the new image: an
14
+ * existing one is updated in place under its lease and waited on before
15
+ * the next, so a rollout that fails stops with the rest still serving; a
16
+ * missing one is created, with its own volume when one is configured
17
+ * 5. each custom hostname has a certificate requested
18
+ *
19
+ * It never destroys anything. Machines beyond the configured count, or in a
20
+ * region no longer configured, are reported, not removed: a Machine can hold
21
+ * the only copy of a volume's data.
22
+ */
23
+ export interface FlyDeployOptions {
24
+ app: string;
25
+ org: string;
26
+ /** The image to run, already pushed: `registry.fly.io/<app>:<tag>`. */
27
+ image: string;
28
+ regions: string[];
29
+ count: number;
30
+ internalPort: number;
31
+ healthPath: string;
32
+ vm: {
33
+ cpuKind: 'shared' | 'performance';
34
+ cpus: number;
35
+ memoryMb: number;
36
+ };
37
+ volume?: {
38
+ name: string;
39
+ sizeGb: number;
40
+ path: string;
41
+ };
42
+ autoStop: boolean;
43
+ /** Plain environment, visible in the Machine config. */
44
+ env: Record<string, string>;
45
+ /** Set as Fly secrets: encrypted at rest and never in the Machine config. */
46
+ secrets: Record<string, string>;
47
+ hostnames: string[];
48
+ /** The release this deploy is of (a commit sha), recorded on each Machine. */
49
+ release: string;
50
+ }
51
+ export interface FlyDeployResult {
52
+ app: string;
53
+ url: string;
54
+ createdApp: boolean;
55
+ created: string[];
56
+ updated: string[];
57
+ /** Machines the config no longer accounts for, left running. */
58
+ untouched: string[];
59
+ ips: FlyIpAssignment[];
60
+ certificates: FlyCertificate[];
61
+ }
62
+ /** The deploy options a `cloud.provider: 'fly'` config describes, defaults filled in. */
63
+ export declare function flyDeployOptions(config: CloudConfig, input: {
64
+ environment: string;
65
+ image: string;
66
+ release: string;
67
+ env?: Record<string, string>;
68
+ secrets?: Record<string, string>;
69
+ }): FlyDeployOptions;
70
+ /** The Machine config a deploy runs, before any volume is attached. */
71
+ export declare function flyMachineConfig(options: FlyDeployOptions): FlyMachineConfig;
72
+ export declare function deployToFly(client: FlyClient, options: FlyDeployOptions, log?: (line: string) => void): Promise<FlyDeployResult>;
@@ -0,0 +1,2 @@
1
+ export * from './client';
2
+ export * from './deploy';
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './api';
6
6
  export * from './control-plane';
7
7
  export * from './security';
8
8
  export * from './preview';
9
+ export * from './fly';
9
10
  export * from './compose';
10
11
  export * from './release';
11
12
  export * from './runtime';