@stacksjs/actions 0.70.45 → 0.70.54
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/LICENSE.md +21 -0
- package/dist/action.d.ts +104 -17
- package/dist/blog.d.ts +12 -0
- package/dist/build/frontend-static.d.ts +16 -0
- package/dist/chunk-17srgdca.js +5 -0
- package/dist/{chunk-jd1yzkq5.js → chunk-23thftnv.js} +1 -1
- package/dist/{chunk-jbvvb45k.js → chunk-4qzb8g3z.js} +1 -1
- package/dist/{chunk-s03z9zn3.js → chunk-5dfz9en9.js} +2 -2
- package/dist/{chunk-3beht8ja.js → chunk-5hwp0frq.js} +1 -1
- package/dist/{chunk-cqedfbaf.js → chunk-5pwpk005.js} +2 -2
- package/dist/{chunk-yh15ydty.js → chunk-63swek9d.js} +2 -2
- package/dist/chunk-67am4dae.js +688 -0
- package/dist/{chunk-gt77jmb5.js → chunk-8gbewxns.js} +1 -1
- package/dist/chunk-8r76qydb.js +240 -0
- package/dist/{chunk-zbhjh5sz.js → chunk-9x17v4x2.js} +2 -2
- package/dist/chunk-aazd6qpv.js +3 -0
- package/dist/{chunk-n2fd1d0m.js → chunk-ag4fy7cx.js} +1 -1
- package/dist/{chunk-2qchdrf9.js → chunk-badehrwa.js} +1 -1
- package/dist/chunk-dbz9dp2h.js +3 -0
- package/dist/{chunk-v0wnrnaa.js → chunk-e8505qz8.js} +2 -2
- package/dist/chunk-jv7ry09n.js +3 -0
- package/dist/{chunk-w418anbq.js → chunk-jve1p4dz.js} +2 -2
- package/dist/chunk-mcwfmqzb.js +283 -0
- package/dist/chunk-n24m8prb.js +3 -0
- package/dist/{chunk-d5yxdz7e.js → chunk-nm9h5rye.js} +2 -2
- package/dist/{chunk-h0hfqr1p.js → chunk-ny1racy0.js} +2 -2
- package/dist/{chunk-2gh7kgpc.js → chunk-p601xr03.js} +1 -1
- package/dist/{chunk-yvva7qsg.js → chunk-pqnzp7x8.js} +2 -2
- package/dist/chunk-qg9crz2r.js +93 -0
- package/dist/chunk-rj1cbghx.js +17 -0
- package/dist/chunk-rzhs51h1.js +3 -0
- package/dist/{chunk-tzx3h4r8.js → chunk-sp5cjdhd.js} +213 -76
- package/dist/chunk-tqax3gbq.js +16 -0
- package/dist/{chunk-c8qt2xst.js → chunk-vsj8ns4p.js} +1 -1
- package/dist/{chunk-zaw01rqz.js → chunk-x8nrbsk1.js} +2 -2
- package/dist/dev/dashboard-utils.d.ts +19 -1
- package/dist/dev/migrate-watcher.d.ts +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/make.d.ts +19 -0
- package/dist/queue/dlq-purge.d.ts +1 -0
- package/dist/queue/dlq-retry.d.ts +1 -0
- package/dist/queue/dlq.d.ts +1 -0
- package/dist/queue/list.d.ts +1 -0
- package/dist/queue/pause.d.ts +1 -0
- package/dist/queue/quarantine.d.ts +1 -0
- package/dist/queue/resume.d.ts +1 -0
- package/dist/queue/unquarantine.d.ts +1 -0
- package/dist/src/action.js +1 -1
- package/dist/src/actions.js +1 -1
- package/dist/src/add.js +1 -1
- package/dist/src/ai/request-model-access.js +1 -1
- package/dist/src/auth/setup.js +82 -24
- package/dist/src/blog.js +102 -0
- package/dist/src/build/core.js +1 -1
- package/dist/src/build/frontend-static.js +9 -0
- package/dist/src/build/views.js +1 -1
- package/dist/src/build.js +1 -1
- package/dist/src/commit.js +1 -1
- package/dist/src/database/seed.js +1 -1
- package/dist/src/deploy/index.js +38 -45
- package/dist/src/dev/api.js +4 -4
- package/dist/src/dev/dashboard-globals.js +1 -1
- package/dist/src/dev/dashboard-utils.js +1 -1
- package/dist/src/dev/dashboard.js +6 -6
- package/dist/src/dev/docs.js +1 -1
- package/dist/src/dev/index.js +1 -1
- package/dist/src/dev/migrate-watcher.js +2 -0
- package/dist/src/dev/views.js +1 -1
- package/dist/src/discover-packages.js +1 -1
- package/dist/src/examples.js +1 -1
- package/dist/src/generate/component-meta.js +1 -1
- package/dist/src/generate/env-files.js +1 -1
- package/dist/src/generate/ide-helpers.js +1 -1
- package/dist/src/generate/index.js +1 -1
- package/dist/src/generate/lib-entries.js +1 -1
- package/dist/src/generate/vscode-custom-data.js +1 -1
- package/dist/src/helpers/component-meta.js +1 -1
- package/dist/src/helpers/index.js +1 -1
- package/dist/src/helpers/lib-entries.js +1 -1
- package/dist/src/helpers/package-json.js +1 -1
- package/dist/src/helpers/utils.js +1 -1
- package/dist/src/helpers/vscode-custom-data.js +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/key-generate.js +1 -1
- package/dist/src/make-command.js +1 -1
- package/dist/src/make-job.js +1 -1
- package/dist/src/make-policy.js +1 -1
- package/dist/src/make-resource.js +1 -1
- package/dist/src/make.js +1 -1
- package/dist/src/migrate/fresh.js +1 -1
- package/dist/src/orm/base.js +1 -1
- package/dist/src/queue/dlq-purge.js +2 -0
- package/dist/src/queue/dlq-retry.js +2 -0
- package/dist/src/queue/dlq.js +5 -0
- package/dist/src/queue/failed.js +4 -4
- package/dist/src/queue/list.js +5 -0
- package/dist/src/queue/pause.js +2 -0
- package/dist/src/queue/quarantine.js +3 -0
- package/dist/src/queue/resume.js +2 -0
- package/dist/src/queue/unquarantine.js +2 -0
- package/dist/src/release.js +1 -1
- package/dist/src/run-action.js +1 -1
- package/dist/src/scaffold-crud.js +1 -1
- package/dist/src/serve/api.js +1 -1
- package/dist/src/setup/index.js +1 -1
- package/dist/src/setup/ssl.js +1 -1
- package/dist/src/stacks.js +1 -1
- package/dist/src/templates.js +1 -1
- package/dist/src/types.js +1 -1
- package/dist/src/upgrade/dependencies.js +1 -1
- package/dist/src/upgrade/framework-utils.js +1 -1
- package/dist/src/upgrade/framework.js +5 -5
- package/dist/src/upgrade/index.js +1 -1
- package/dist/src/upgrade.js +1 -1
- package/dist/upgrade/framework-utils.d.ts +48 -0
- package/package.json +18 -18
- package/dist/chunk-2kaj93p5.js +0 -3
- package/dist/chunk-3086k7zk.js +0 -184
- package/dist/chunk-4fz2qb8b.js +0 -17
- package/dist/chunk-4p0rjazd.js +0 -101
- package/dist/chunk-77pta9ww.js +0 -93
- package/dist/chunk-d4srk6ma.js +0 -3
- package/dist/chunk-h5rff0v9.js +0 -658
- package/dist/chunk-kr2k0h74.js +0 -16
- package/dist/chunk-kzhgexj4.js +0 -3
- package/dist/chunk-sxp97zys.js +0 -3
- package/dist/chunk-vek18p55.js +0 -5
package/dist/chunk-77pta9ww.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{ib as L}from"./chunk-jbvvb45k.js";import C from"process";import{log as D}from"@stacksjs/cli";async function S(){try{return(await import("./chunk-vek18p55.js")).tsCloud||null}catch{return null}}async function N(){let G=await S();return{name:G?.project?.name||"stacks",region:G?.project?.region||"us-east-1"}}async function b(G){try{let{AWSClient:Q}=await import("@stacksjs/ts-cloud"),J=new Q,_=new URLSearchParams({Action:"GetCallerIdentity",Version:"2011-06-15"}),K=await J.request({service:"sts",region:G,method:"POST",path:"/",body:_.toString()}),j=String(K).match(/<Account>(\d+)<\/Account>/);if(j&&j[1])return j[1];return C.env.AWS_ACCOUNT_ID||""}catch(Q){return C.env.AWS_ACCOUNT_ID||""}}async function f(G){let{environment:Q}=G,J=await S();if(!J)throw Error("Cloud configuration not found. Ensure config/cloud.ts exports tsCloud.");let{InfrastructureGenerator:_}=await import("@stacksjs/ts-cloud"),j=new _({config:J,environment:Q}).generate().getBuilder().build();return JSON.stringify(j)}function v(G){let Q={green:"\x1B[32m",yellow:"\x1B[33m",red:"\x1B[31m",cyan:"\x1B[36m",gray:"\x1B[90m",reset:"\x1B[0m"};if(G.includes("COMPLETE")&&!G.includes("ROLLBACK"))return`${Q.green}${G}${Q.reset}`;if(G.includes("IN_PROGRESS"))return`${Q.yellow}${G}${Q.reset}`;if(G.includes("FAILED")||G.includes("ROLLBACK"))return`${Q.red}${G}${Q.reset}`;if(G.includes("DELETE"))return`${Q.gray}${G}${Q.reset}`;return G}async function p(G){let{region:Q,domain:J,sslDomains:_,hostedZoneId:K,albDnsName:j,stackName:Y}=G;console.log(""),console.log("Setting up SSL certificate...");try{let{Route53Client:$,ACMClient:w,AWSClient:F}=await import("@stacksjs/ts-cloud"),M=new $(Q),V=new w(Q),W=new F;console.log(` Requesting SSL certificate for ${J}...`);let P=await V.requestCertificate({DomainName:_[0]??J,SubjectAlternativeNames:_.length>1?_.slice(1):void 0,ValidationMethod:"DNS"});console.log(` Certificate ARN: ${P.CertificateArn}`),await new Promise((R)=>setTimeout(R,5000));let U=await V.describeCertificate({CertificateArn:P.CertificateArn});console.log(" Adding DNS validation records...");for(let R of U.DomainValidationOptions||[])if(R.ResourceRecord)await M.changeResourceRecordSets({HostedZoneId:K,ChangeBatch:{Changes:[{Action:"UPSERT",ResourceRecordSet:{Name:R.ResourceRecord.Name,Type:"CNAME",TTL:300,ResourceRecords:[{Value:R.ResourceRecord.Value}]}}]}});console.log("\u2713 Validation records added"),console.log(" Waiting for certificate validation (this may take 1-5 minutes)...");for(let R=0;R<30;R++){let Z=await V.describeCertificate({CertificateArn:P.CertificateArn});if(Z.Status==="ISSUED"){console.log("\u2713 Certificate issued!");let{AWSCloudFormationClient:A}=await import("@stacksjs/ts-cloud"),B=await new A(Q).listStackResources(Y),I=B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="ApplicationLoadBalancer")?.PhysicalResourceId,X=B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="ECSTargetGroup")?.PhysicalResourceId||B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="WebTargetGroup")?.PhysicalResourceId;if(I&&X){console.log(" Creating HTTPS listener...");let O=new URLSearchParams({Action:"CreateListener",LoadBalancerArn:I,Protocol:"HTTPS",Port:"443","Certificates.member.1.CertificateArn":P.CertificateArn,"DefaultActions.member.1.Type":"forward","DefaultActions.member.1.TargetGroupArn":X,Version:"2015-12-01"});await W.request({service:"elasticloadbalancing",region:Q,method:"POST",path:"/",body:O.toString()}),console.log("\u2713 HTTPS listener created!"),console.log(" Configuring HTTP to HTTPS redirect...");let h=new URLSearchParams({Action:"DescribeListeners",LoadBalancerArn:I,Version:"2015-12-01"}),H=await W.request({service:"elasticloadbalancing",region:Q,method:"POST",path:"/",body:h.toString()}),x=H?.DescribeListenersResponse?.DescribeListenersResult?.Listeners?.member||H?.DescribeListenersResult?.Listeners?.member,T=(Array.isArray(x)?x:x?[x]:[]).find((y)=>y.Port==="80"||y.Port===80);if(T){let y=new URLSearchParams({Action:"ModifyListener",ListenerArn:T.ListenerArn,"DefaultActions.member.1.Type":"redirect","DefaultActions.member.1.RedirectConfig.Protocol":"HTTPS","DefaultActions.member.1.RedirectConfig.Port":"443","DefaultActions.member.1.RedirectConfig.StatusCode":"HTTP_301",Version:"2015-12-01"});await W.request({service:"elasticloadbalancing",region:Q,method:"POST",path:"/",body:y.toString()}),console.log("\u2713 HTTP to HTTPS redirect configured!")}}let z=B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="CloudFrontDistribution")?.PhysicalResourceId;if(z){console.log(" Updating CloudFront distribution with SSL certificate...");let O=await W.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${z}/config`}),h=O._headers?.etag||O._headers?.ETag,H=O.DistributionConfig;if(H&&h){H.Aliases={Quantity:_.length,Items:_},H.ViewerCertificate={ACMCertificateArn:P.CertificateArn,SSLSupportMethod:"sni-only",MinimumProtocolVersion:"TLSv1.2_2021",CloudFrontDefaultCertificate:!1};let x=`<?xml version="1.0" encoding="UTF-8"?>
|
|
3
|
-
<DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
|
|
4
|
-
<CallerReference>${H.CallerReference}</CallerReference>
|
|
5
|
-
<Aliases>
|
|
6
|
-
<Quantity>${_.length}</Quantity>
|
|
7
|
-
<Items>
|
|
8
|
-
${_.map((q)=>` <CNAME>${q}</CNAME>`).join(`
|
|
9
|
-
`)}
|
|
10
|
-
</Items>
|
|
11
|
-
</Aliases>
|
|
12
|
-
<DefaultRootObject>${H.DefaultRootObject||"index.html"}</DefaultRootObject>
|
|
13
|
-
<Origins>
|
|
14
|
-
<Quantity>${H.Origins?.Quantity||0}</Quantity>
|
|
15
|
-
<Items>
|
|
16
|
-
${(H.Origins?.Items||[]).map((q)=>` <Origin>
|
|
17
|
-
<Id>${q.Id}</Id>
|
|
18
|
-
<DomainName>${q.DomainName}</DomainName>
|
|
19
|
-
${q.OriginPath?`<OriginPath>${q.OriginPath}</OriginPath>`:"<OriginPath></OriginPath>"}
|
|
20
|
-
${q.S3OriginConfig?`<S3OriginConfig><OriginAccessIdentity>${q.S3OriginConfig.OriginAccessIdentity||""}</OriginAccessIdentity></S3OriginConfig>`:""}
|
|
21
|
-
${q.CustomOriginConfig?`<CustomOriginConfig>
|
|
22
|
-
<HTTPPort>${q.CustomOriginConfig.HTTPPort}</HTTPPort>
|
|
23
|
-
<HTTPSPort>${q.CustomOriginConfig.HTTPSPort}</HTTPSPort>
|
|
24
|
-
<OriginProtocolPolicy>${q.CustomOriginConfig.OriginProtocolPolicy}</OriginProtocolPolicy>
|
|
25
|
-
<OriginSslProtocols><Quantity>${q.CustomOriginConfig.OriginSslProtocols?.Quantity||1}</Quantity><Items>${(q.CustomOriginConfig.OriginSslProtocols?.Items||["TLSv1.2"]).map((T)=>`<SslProtocol>${T}</SslProtocol>`).join("")}</Items></OriginSslProtocols>
|
|
26
|
-
</CustomOriginConfig>`:""}
|
|
27
|
-
${q.OriginAccessControlId?`<OriginAccessControlId>${q.OriginAccessControlId}</OriginAccessControlId>`:""}
|
|
28
|
-
<ConnectionAttempts>${q.ConnectionAttempts||3}</ConnectionAttempts>
|
|
29
|
-
<ConnectionTimeout>${q.ConnectionTimeout||10}</ConnectionTimeout>
|
|
30
|
-
</Origin>`).join(`
|
|
31
|
-
`)}
|
|
32
|
-
</Items>
|
|
33
|
-
</Origins>
|
|
34
|
-
<DefaultCacheBehavior>
|
|
35
|
-
<TargetOriginId>${H.DefaultCacheBehavior?.TargetOriginId}</TargetOriginId>
|
|
36
|
-
<ViewerProtocolPolicy>${H.DefaultCacheBehavior?.ViewerProtocolPolicy||"redirect-to-https"}</ViewerProtocolPolicy>
|
|
37
|
-
<AllowedMethods>
|
|
38
|
-
<Quantity>${H.DefaultCacheBehavior?.AllowedMethods?.Quantity||3}</Quantity>
|
|
39
|
-
<Items>${(H.DefaultCacheBehavior?.AllowedMethods?.Items||["GET","HEAD","OPTIONS"]).map((q)=>`<Method>${q}</Method>`).join("")}</Items>
|
|
40
|
-
<CachedMethods>
|
|
41
|
-
<Quantity>${H.DefaultCacheBehavior?.AllowedMethods?.CachedMethods?.Quantity||2}</Quantity>
|
|
42
|
-
<Items>${(H.DefaultCacheBehavior?.AllowedMethods?.CachedMethods?.Items||["GET","HEAD"]).map((q)=>`<Method>${q}</Method>`).join("")}</Items>
|
|
43
|
-
</CachedMethods>
|
|
44
|
-
</AllowedMethods>
|
|
45
|
-
<Compress>${H.DefaultCacheBehavior?.Compress!==!1}</Compress>
|
|
46
|
-
<CachePolicyId>${H.DefaultCacheBehavior?.CachePolicyId||"658327ea-f89d-4fab-a63d-7e88639e58f6"}</CachePolicyId>
|
|
47
|
-
${H.DefaultCacheBehavior?.OriginRequestPolicyId?`<OriginRequestPolicyId>${H.DefaultCacheBehavior.OriginRequestPolicyId}</OriginRequestPolicyId>`:""}
|
|
48
|
-
</DefaultCacheBehavior>
|
|
49
|
-
<CacheBehaviors>
|
|
50
|
-
<Quantity>${H.CacheBehaviors?.Quantity||0}</Quantity>
|
|
51
|
-
${H.CacheBehaviors?.Quantity>0?`<Items>
|
|
52
|
-
${(H.CacheBehaviors?.Items||[]).map((q)=>` <CacheBehavior>
|
|
53
|
-
<PathPattern>${q.PathPattern}</PathPattern>
|
|
54
|
-
<TargetOriginId>${q.TargetOriginId}</TargetOriginId>
|
|
55
|
-
<ViewerProtocolPolicy>${q.ViewerProtocolPolicy}</ViewerProtocolPolicy>
|
|
56
|
-
<AllowedMethods>
|
|
57
|
-
<Quantity>${q.AllowedMethods?.Quantity||3}</Quantity>
|
|
58
|
-
<Items>${(q.AllowedMethods?.Items||["GET","HEAD","OPTIONS"]).map((T)=>`<Method>${T}</Method>`).join("")}</Items>
|
|
59
|
-
<CachedMethods>
|
|
60
|
-
<Quantity>${q.AllowedMethods?.CachedMethods?.Quantity||2}</Quantity>
|
|
61
|
-
<Items>${(q.AllowedMethods?.CachedMethods?.Items||["GET","HEAD"]).map((T)=>`<Method>${T}</Method>`).join("")}</Items>
|
|
62
|
-
</CachedMethods>
|
|
63
|
-
</AllowedMethods>
|
|
64
|
-
<Compress>${q.Compress!==!1}</Compress>
|
|
65
|
-
<CachePolicyId>${q.CachePolicyId}</CachePolicyId>
|
|
66
|
-
${q.OriginRequestPolicyId?`<OriginRequestPolicyId>${q.OriginRequestPolicyId}</OriginRequestPolicyId>`:""}
|
|
67
|
-
</CacheBehavior>`).join(`
|
|
68
|
-
`)}
|
|
69
|
-
</Items>`:""}
|
|
70
|
-
</CacheBehaviors>
|
|
71
|
-
<CustomErrorResponses>
|
|
72
|
-
<Quantity>${H.CustomErrorResponses?.Quantity||0}</Quantity>
|
|
73
|
-
${H.CustomErrorResponses?.Quantity>0?`<Items>
|
|
74
|
-
${(H.CustomErrorResponses?.Items||[]).map((q)=>` <CustomErrorResponse>
|
|
75
|
-
<ErrorCode>${q.ErrorCode}</ErrorCode>
|
|
76
|
-
<ResponsePagePath>${q.ResponsePagePath}</ResponsePagePath>
|
|
77
|
-
<ResponseCode>${q.ResponseCode}</ResponseCode>
|
|
78
|
-
<ErrorCachingMinTTL>${q.ErrorCachingMinTTL}</ErrorCachingMinTTL>
|
|
79
|
-
</CustomErrorResponse>`).join(`
|
|
80
|
-
`)}
|
|
81
|
-
</Items>`:""}
|
|
82
|
-
</CustomErrorResponses>
|
|
83
|
-
<Comment>${H.Comment||""}</Comment>
|
|
84
|
-
<PriceClass>${H.PriceClass||"PriceClass_100"}</PriceClass>
|
|
85
|
-
<Enabled>${H.Enabled!==!1}</Enabled>
|
|
86
|
-
<ViewerCertificate>
|
|
87
|
-
<ACMCertificateArn>${P.CertificateArn}</ACMCertificateArn>
|
|
88
|
-
<SSLSupportMethod>sni-only</SSLSupportMethod>
|
|
89
|
-
<MinimumProtocolVersion>TLSv1.2_2021</MinimumProtocolVersion>
|
|
90
|
-
</ViewerCertificate>
|
|
91
|
-
<HttpVersion>${H.HttpVersion||"http2and3"}</HttpVersion>
|
|
92
|
-
<IsIPV6Enabled>${H.IsIPV6Enabled!==!1}</IsIPV6Enabled>
|
|
93
|
-
</DistributionConfig>`;await W.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${z}/config`,headers:{"Content-Type":"application/xml","If-Match":h},body:x}),console.log("\u2713 CloudFront distribution updated with SSL certificate!")}}console.log(""),console.log(`\u2713 SSL setup complete! https://${J} should be accessible shortly.`),console.log("");return}if(Z.Status==="FAILED"){console.log("\u2717 Certificate validation failed!");return}await new Promise((A)=>setTimeout(A,1e4))}console.log("\u26A0 Certificate validation timed out. Please check AWS Console.")}catch($){console.log(`\u2717 DNS/SSL setup failed: ${$.message}`),console.log(" You can manually set up DNS and SSL using ./buddy cloud:ssl")}}async function g(G){let{environment:Q,region:J,waitForCompletion:_=!0,verbose:K=!1}=G,Y=(await N()).name,$=`${Y}-cloud`;if(K)console.log(`Deploying ${$} to ${J}...`);try{let{AWSCloudFormationClient:w}=await import("@stacksjs/ts-cloud"),F=new w(J),M=await S(),V=M?.infrastructure?.compute?.mode||M?.mode||"server";if(K)console.log(`Generating CloudFormation template (${V} mode)...`);let W=await f({environment:Q,projectName:Y}),P=51200,U;if(Buffer.byteLength(W,"utf-8")>P){if(K)console.log(`Template exceeds inline limit (${Buffer.byteLength(W,"utf-8")} bytes), uploading to S3...`);let{S3Client:X,AWSClient:z}=await import("@stacksjs/ts-cloud"),O=new X(J),h=new z,H=`${Y}-cf-templates-${J}`;try{await h.request({service:"s3",region:J,method:"HEAD",path:`/${H}`,bucket:H})}catch{let q=J==="us-east-1"?"":`<CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><LocationConstraint>${J}</LocationConstraint></CreateBucketConfiguration>`;await h.request({service:"s3",region:J,method:"PUT",path:`/${H}`,bucket:H,body:q||void 0})}let x=`${$}/template-${Date.now()}.json`;if(await O.putObject({bucket:H,key:x,body:W,contentType:"application/json"}),U=`https://${H}.s3.${J}.amazonaws.com/${x}`,K)console.log(`Template uploaded to: ${U}`)}let R=U?{templateUrl:U}:{templateBody:W},Z=!1,A=!1;try{let X=(await F.describeStacks({stackName:$})).Stacks?.[0];if(X&&X.StackStatus){if(K)console.log(`Current status: ${v(X.StackStatus)}`);if(Z=!0,A=!0,X.StackStatus.endsWith("_IN_PROGRESS")){console.log(`Stack is busy (${X.StackStatus}). Waiting for current operation to finish...`);let z=X.StackStatus.startsWith("DELETE")?"stack-delete-complete":X.StackStatus.startsWith("CREATE")?"stack-create-complete":"stack-update-complete";try{await F.waitForStack($,z)}catch{}try{let O=(await F.describeStacks({stackName:$})).Stacks?.[0];if(!O||!O.StackStatus)Z=!1,A=!1;else{if(K)console.log(`Stack settled to: ${v(O.StackStatus)}`);X.StackStatus=O.StackStatus}}catch{Z=!1,A=!1}}if(X.StackStatus==="UPDATE_ROLLBACK_COMPLETE")console.log("Stack rolled back from a previous update. Re-deploying...");else if(X.StackStatus==="DELETE_COMPLETE")Z=!1,A=!1;else if(X.StackStatus==="ROLLBACK_COMPLETE"||X.StackStatus==="ROLLBACK_FAILED"||X.StackStatus==="CREATE_FAILED"){console.log(`Stack is in ${X.StackStatus} state. Deleting before recreating...`),await F.deleteStack($),await F.waitForStack($,"stack-delete-complete"),console.log("Cleaning up retained resources...");try{let{S3Client:z}=await import("@stacksjs/ts-cloud"),O=new z(J),h=await b(J),H=`${Y}-${Q}-assets-${h}`,x=`${Y}-${Q}-frontend-${h}`;if(K)console.log(` Checking bucket: ${H}`);try{await O.emptyAndDeleteBucket(H),console.log(`\u2713 Deleted retained bucket: ${H}`)}catch(q){if(!q.message?.includes("NoSuchBucket")&&!q.message?.includes("does not exist"))console.log(`\u26A0 Could not delete assets bucket: ${q.message}`);else if(K)console.log(" No retained assets bucket to clean up")}if(K)console.log(` Checking bucket: ${x}`);try{await O.emptyAndDeleteBucket(x),console.log(`\u2713 Deleted retained bucket: ${x}`)}catch(q){if(!q.message?.includes("NoSuchBucket")&&!q.message?.includes("does not exist"))console.log(`\u26A0 Could not delete frontend bucket: ${q.message}`);else if(K)console.log(" No retained frontend bucket to clean up")}}catch(z){console.log(`\u26A0 Cleanup error: ${z.message}`)}Z=!1,A=!1}}}catch{Z=!1}if(Z){console.log("Updating stack..."),console.log("");try{let X=U?{templateURL:U}:{templateBody:W};if(await F.updateStack({stackName:$,...X,capabilities:["CAPABILITY_IAM","CAPABILITY_NAMED_IAM"],tags:[{Key:"Environment",Value:Q},{Key:"Project",Value:Y},{Key:"ManagedBy",Value:"stacks"}]}),_)console.log(` ${"Resource".padEnd(35)} ${"Type".padEnd(30)} Status`),console.log(" "+"\u2500".repeat(85)),await F.waitForStack($,"stack-update-complete"),console.log("")}catch(X){if(X.message?.includes("No updates are to be performed"))console.log("\u2713 Stack is up to date (no changes)");else throw X}}else{console.log("Checking for retained resources...");try{let{S3Client:O}=await import("@stacksjs/ts-cloud"),h=new O(J),H=await b(J),x=`${Y}-${Q}-assets-${H}`,q=`${Y}-${Q}-frontend-${H}`;if(K)console.log(` Checking bucket: ${x}`);try{await h.emptyAndDeleteBucket(x),console.log(`\u2713 Cleaned up existing bucket: ${x}`)}catch(T){if(!T.message?.includes("NoSuchBucket")&&!T.message?.includes("does not exist"))console.log(`\u26A0 Could not delete assets bucket: ${T.message}`);else if(K)console.log(" No existing assets bucket to clean up")}if(K)console.log(` Checking bucket: ${q}`);try{await h.emptyAndDeleteBucket(q),console.log(`\u2713 Cleaned up existing bucket: ${q}`)}catch(T){if(!T.message?.includes("NoSuchBucket")&&!T.message?.includes("does not exist"))console.log(`\u26A0 Could not delete frontend bucket: ${T.message}`);else if(K)console.log(" No existing frontend bucket to clean up")}}catch(O){console.log(`\u26A0 Pre-deployment cleanup error: ${O.message}`)}console.log("Creating stack..."),console.log("");let X=U?{templateURL:U}:{templateBody:W},z=await F.createStack({stackName:$,...X,capabilities:["CAPABILITY_IAM","CAPABILITY_NAMED_IAM"],tags:[{Key:"Environment",Value:Q},{Key:"Project",Value:Y},{Key:"ManagedBy",Value:"stacks"}],onFailure:"ROLLBACK",timeoutInMinutes:30});if(K)console.log(`Stack ID: ${z}`);if(_)console.log(` ${"Resource".padEnd(35)} ${"Type".padEnd(30)} Status`),console.log(" "+"\u2500".repeat(85)),await F.waitForStack($,"stack-create-complete"),console.log("")}let E=M?.infrastructure?.dns?.domain||"stacksjs.com",B=M?.infrastructure?.ssl||{enabled:!0,domains:[]},I=B.domains||[E,`www.${E}`];try{let X=(await F.describeStacks({stackName:$})).Stacks?.[0];if(X&&X.StackStatus){let z={};for(let O of X.Outputs||[])if(O.OutputKey&&O.OutputValue)z[O.OutputKey]=O.OutputValue;if(console.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),console.log(""),console.log(" \u2713 Infrastructure deployed successfully"),console.log(""),console.log(` Stack: ${$}`),console.log(` Status: ${X.StackStatus}`),console.log(` Domain: https://${E}`),z.LoadBalancerDNS)console.log(` Load Balancer: ${z.LoadBalancerDNS}`);if(z.WebServerPublicIP)console.log(` Server IP: ${z.WebServerPublicIP}`);if(z.AssetsBucketName&&K)console.log(` Assets: ${z.AssetsBucketName}`);if(console.log(""),console.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),console.log(""),B.enabled&&M?.infrastructure?.dns?.hostedZoneId&&z.LoadBalancerDNS)await p({region:J,domain:E,sslDomains:I,hostedZoneId:M.infrastructure.dns.hostedZoneId,albDnsName:z.LoadBalancerDNS,stackName:$});else if(!B.certificateArn&&K)console.log(" Next steps:"),console.log(" 1. DNS records need to be updated to point to the ALB"),console.log(" 2. SSL certificate needs to be requested and attached"),console.log(` Run: ./buddy cloud:ssl to set up SSL for ${E}`),console.log("")}}catch{}}catch(w){throw console.error(`Stack deployment failed: ${w.message}`),w}}async function m(G){let{environment:Q,region:J,buildDir:_}=G,j=(await N()).name;D.info(`Deploying frontend from ${_} to ${Q} in ${J}...`);try{let{S3Client:Y,AWSCloudFormationClient:$}=await import("@stacksjs/ts-cloud"),w=new Y(J),F=new $(J),M=`${j}-cloud`,W=(await F.describeStacks({stackName:M})).Stacks?.[0]?.Outputs?.find((P)=>P.OutputKey==="AssetsBucketName")?.OutputValue;if(!W)throw Error("Assets bucket not found in stack outputs");D.info(`Syncing ${_} to s3://${W}/...`),await w.sync({source:_,bucket:W,delete:!0,cacheControl:"max-age=31536000"}),D.success("Frontend deployment completed!")}catch(Y){throw D.error(`Frontend deployment failed: ${Y.message}`),Y}}async function l(G){let{environment:Q,region:J}=G,j=`${(await N()).name}-cloud`,{AWSCloudFormationClient:Y}=await import("@stacksjs/ts-cloud"),$=new Y(J);try{let w=(await $.describeStacks({stackName:j})).Stacks?.[0];if(!w||!w.StackStatus)return{status:"NOT_FOUND",outputs:{}};let F={};for(let M of w.Outputs||[])if(M.OutputKey&&M.OutputValue)F[M.OutputKey]=M.OutputValue;return{status:w.StackStatus,outputs:F}}catch{return{status:"NOT_FOUND",outputs:{}}}}async function u(G){let{environment:Q,region:J,verbose:_}=G,K=await N(),Y=`${K.name}-cloud`;console.log(`Undeploying ${Y} from ${J}...`),console.log("");try{let{AWSCloudFormationClient:$,AWSClient:w}=await import("@stacksjs/ts-cloud"),F=new $(J),M=!1;try{let V=(await F.describeStacks({stackName:Y})).Stacks?.[0];if(V&&V.StackStatus){if(console.log(`Current status: ${v(V.StackStatus)}`),M=!0,V.StackStatus.endsWith("_IN_PROGRESS")){console.log(`Waiting for current operation (${V.StackStatus}) to finish...`);let W=V.StackStatus.startsWith("DELETE")?"stack-delete-complete":V.StackStatus.startsWith("CREATE")?"stack-create-complete":"stack-update-complete";try{await F.waitForStack(Y,W)}catch{}try{let P=(await F.describeStacks({stackName:Y})).Stacks?.[0];if(!P||!P.StackStatus||P.StackStatus==="DELETE_COMPLETE"){console.log("Stack was already deleted during the in-progress operation.");return}}catch{console.log("Stack was already deleted during the in-progress operation.");return}}if(V.StackStatus==="DELETE_COMPLETE")M=!1}}catch{M=!1}if(!M){console.log(`Stack ${Y} does not exist. Nothing to undeploy.`);return}if(_)console.log("Checking for resources to clean up before deletion...");try{let V=new w,{AWSCloudFormationClient:W}=await import("@stacksjs/ts-cloud"),Z=((await new W(J).listStackResources(Y)).StackResourceSummaries||[]).find((A)=>A.LogicalResourceId==="ApplicationLoadBalancer");if(Z?.PhysicalResourceId){let E={Action:"DescribeListeners",LoadBalancerArn:Z.PhysicalResourceId,Version:"2015-12-01"},B=await V.request({service:"elasticloadbalancing",region:J,method:"POST",path:"/",body:new URLSearchParams(E).toString()}),I=B?.DescribeListenersResult?.Listeners?.member||B?.DescribeListenersResponse?.DescribeListenersResult?.Listeners?.member,X=Array.isArray(I)?I:I?[I]:[],z=0;for(let O of X)if(O.Protocol==="HTTPS"){if(_)console.log(` Removing HTTPS listener on port ${O.Port}...`);let h={Action:"DeleteListener",ListenerArn:O.ListenerArn,Version:"2015-12-01"};await V.request({service:"elasticloadbalancing",region:J,method:"POST",path:"/",body:new URLSearchParams(h).toString()}),z++}if(z>0&&_)console.log(`\u2713 Cleaned up ${z} HTTPS listener(s)`),await new Promise((O)=>setTimeout(O,2000))}}catch(V){if(_)console.log(`Warning: ${V.message}`)}console.log("Deleting stack..."),console.log(""),await F.deleteStack(Y),console.log(` ${"Resource".padEnd(35)} ${"Type".padEnd(30)} Status`),console.log(" "+"\u2500".repeat(85)),await F.waitForStack(Y,"stack-delete-complete");try{let{S3Client:V}=await import("@stacksjs/ts-cloud"),W=new V(J),P=await b(J),U=`${K.name}-${Q}-assets-${P}`,R=`${K.name}-${Q}-frontend-${P}`;console.log("Cleaning up retained buckets...");try{await W.emptyAndDeleteBucket(U),console.log("\u2713 Assets bucket deleted successfully")}catch(Z){if(!Z.message?.includes("NoSuchBucket")&&!Z.message?.includes("does not exist"))console.log(`\u26A0 Could not delete assets bucket: ${Z.message}`);else console.log("\u2713 No retained assets bucket to clean up")}try{await W.emptyAndDeleteBucket(R),console.log("\u2713 Frontend bucket deleted successfully")}catch(Z){if(!Z.message?.includes("NoSuchBucket")&&!Z.message?.includes("does not exist"))console.log(`\u26A0 Could not delete frontend bucket: ${Z.message}`);else console.log("\u2713 No retained frontend bucket to clean up")}}catch(V){console.log(`\u26A0 Cleanup error: ${V.message}`)}console.log(""),console.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),console.log(""),console.log(" \u2713 Infrastructure removed successfully"),console.log(""),console.log(` Stack: ${Y}`),console.log(` Environment: ${Q}`),console.log(` Region: ${J}`),console.log(""),console.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),console.log("")}catch($){let w=String($.message||$);if(w.includes("does not exist")){console.log(""),console.log("\u2713 Stack already deleted or does not exist.");return}if($.code==="DELETE_FAILED"||w.includes("DELETE_FAILED")){console.log(""),console.log("Some resources could not be deleted automatically"),console.log("Identifying resources to retain...");let{AWSCloudFormationClient:F}=await import("@stacksjs/ts-cloud"),M=new F(J);try{let P=((await M.listStackResources(Y)).StackResourceSummaries||[]).filter((U)=>U.ResourceStatus==="DELETE_FAILED").map((U)=>U.LogicalResourceId);if(P.length>0){console.log(`Retaining ${P.length} resource(s):`),P.forEach((Z)=>console.log(` - ${Z}`)),console.log(""),console.log("Retrying deletion with retained resources..."),await M.deleteStack(Y,void 0,P);let{AWSCloudFormationClient:U}=await import("@stacksjs/ts-cloud");await new U(J).waitForStack(Y,"stack-delete-complete"),console.log(""),console.log("\u2713 Stack removed (with retained resources)"),console.log(""),console.log("Note: Some resources were retained and may need manual cleanup."),console.log("Run `./buddy cloud:cleanup` to clean up remaining resources.");return}}catch(V){if(String(V.message||V).includes("does not exist")){console.log(""),console.log("\u2713 Stack deleted successfully!");return}throw V}}throw console.error(`Stack deletion failed: ${$.message}`),$}}export{u as undeployStack,l as getDeploymentStatus,g as deployStack,m as deployFrontend};
|
package/dist/chunk-d4srk6ma.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
class K{name;description;rate;tries;backoff;enabled;path;method;validations;requestFile;handle;model;constructor({name:w,description:y,validations:z,handle:A,rate:B,tries:C,backoff:D,enabled:G,path:H,method:I,requestFile:J,model:j}){if(this.name=w,this.description=y,this.validations=z,this.rate=B,this.tries=C,this.backoff=D,this.enabled=G,this.path=H,this.method=I,this.handle=A,this.requestFile=J,j&&typeof j==="object"&&"name"in j)this.model=j.name;else if(typeof j==="string")this.model=j}}
|
|
3
|
-
export{K as Xa};
|