@stacksjs/cloud 0.70.73 → 0.70.74
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/helpers.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +13 -13
package/dist/helpers.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare function deleteVpcs(): Promise<Result<string, Error>>;
|
|
|
13
13
|
export declare function deleteCdkRemnants(): Promise<Result<string, Error>>;
|
|
14
14
|
export declare function deleteSubnets(): Promise<Result<string, Error>>;
|
|
15
15
|
export declare function hasBeenDeployed(): Promise<Result<boolean, Error>>;
|
|
16
|
-
export declare function getJumpBoxInstanceProfileName(): Promise<Result<string
|
|
16
|
+
export declare function getJumpBoxInstanceProfileName(): Promise<Result<string, string>>;
|
|
17
17
|
export declare function addJumpBox(stackName?: string): Promise<Result<string, string>>;
|
|
18
18
|
export declare function getJumpBoxSecurityGroupName(): Promise<Result<string | undefined, string>>;
|
|
19
19
|
export declare function getSecurityGroupFromInstanceId(instanceId: string): Promise<string | undefined>;
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{config as I}from"@stacksjs/config";import{InfrastructureGenerator as f}from"@stacksjs/ts-cloud";class h{generator;cloudConfig;props;constructor(H,z){this.cloudConfig=H,this.props=z;let Q=(z.appEnv==="local"?"development":z.appEnv)||"production";this.generator=new f({config:this.cloudConfig,environment:Q})}generate(){return this.generator.generate().toJSON()}shouldDeployApi(){return I.cloud.api?.deploy??!1}}import{AWSClient as R,AWSCloudFormationClient as j,CloudWatchLogsClient as b,EC2Client as q,IAMClient as S,LambdaClient as N,Route53DomainsClient as g,S3Client as v,SSMClient as y}from"@stacksjs/ts-cloud";import{config as x}from"@stacksjs/config";import{err as $,handleError as w,ok as K}from"@stacksjs/error-handling";import{log as V}from"@stacksjs/logging";import{path as E}from"@stacksjs/path";import{slug as d}from"@stacksjs/strings";var k=x.app.env==="local"?"dev":x.app.env,T=`stacks-cloud-${k}`;async function D(H,z={}){let Q=new R,Z={Action:H,Version:"2016-11-15",...z};return await Q.request({service:"ec2",region:"us-east-1",method:"POST",path:"/",queryParams:Z})}async function l(H,z,Q){return await new R().request({service:"logs",region:H,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Logs_20140328.${z}`},body:JSON.stringify(Q)})}async function u(H,z,Q){return await new R().request({service:"elasticfilesystem",region:"us-east-1",method:z,path:Q})}async function m(H){let z=new q("us-east-1"),{SecurityGroups:Q}=await z.describeSecurityGroups({Filters:[{Name:"group-name",Values:[H]}]});if(!Q)return $(`Security group ${H} not found`);if(Q[0])return K(Q[0].GroupId);return $(`Security group ${H} not found`)}function Xz(H,z){let Q=new g,Z=z.contactType.toUpperCase()||"PERSON",X=(Y)=>Y.toString().includes("+")?Y.toString():`+${Y.toString()}`;try{return K(Q.registerDomain({DomainName:H,DurationInYears:z.years||1,AutoRenew:z.autoRenew||!0,AdminContact:{FirstName:z.adminFirstName,LastName:z.adminLastName,ContactType:Z,OrganizationName:z.adminOrganization,AddressLine1:z.adminAddressLine1,AddressLine2:z.adminAddressLine2,City:z.adminCity,State:z.adminState,CountryCode:z.adminCountry,ZipCode:z.adminZip.toString(),PhoneNumber:X(z.adminPhone),Email:z.adminEmail},RegistrantContact:{FirstName:z.registrantFirstName,LastName:z.registrantLastName,ContactType:Z,OrganizationName:z.registrantOrganization,AddressLine1:z.registrantAddressLine1,AddressLine2:z.registrantAddressLine2,City:z.registrantCity,State:z.registrantState,CountryCode:z.registrantCountry,ZipCode:z.registrantZip.toString(),PhoneNumber:X(z.registrantPhone),Email:z.registrantEmail},TechContact:{FirstName:z.techFirstName,LastName:z.techLastName,ContactType:Z,OrganizationName:z.techOrganization,AddressLine1:z.techAddressLine1,AddressLine2:z.techAddressLine2,City:z.techCity,State:z.techState,CountryCode:z.techCountry,ZipCode:z.techZip.toString(),PhoneNumber:X(z.techPhone),Email:z.techEmail},PrivacyProtectAdminContact:z.privacyAdmin||z.privacy||!0,PrivacyProtectRegistrantContact:z.privacyRegistrant||z.privacy||!0,PrivacyProtectTechContact:z.privacyTech||z.privacy||!0}))}catch(Y){return $(Y)}}async function B(H){if(!H)H=`${T}/JumpBox`;let Q=await new q("us-east-1").describeInstances({Filters:[{Name:"tag:Name",Values:[H]}]});if(Q.Reservations?.[0]?.Instances?.[0])return Q.Reservations[0].Instances[0].InstanceId;return}async function c(H,z){if(!z)z=T;if(!H)return $(`Instance ${H} not found`);return await new q("us-east-1").terminateInstances([H]),K(`Instance ${H} is being terminated`)}async function Yz(H){if(!H)H=T;let z=await B();if(!z)return $("Jump-box not found");return V.info(`Deleting jump-box ${z}...`),await c(z,H)}async function Zz(){let H=new S("us-east-1"),z=await H.listUsers(),Q=d(x.team.name),Z=z.Users?.filter((Y)=>{let _=Y.UserName?.toLowerCase();return _!=="stacks"&&_!==Q.toLowerCase()&&_?.includes(Q.toLowerCase())})||[];if(!Z||Z.length===0)return K(`No Stacks IAM users found for team ${Q}`);let X=Z.map(async(Y)=>{let _=Y.UserName||"";V.info(`Deleting IAM user: ${_}`);let U=await H.listAttachedUserPolicies({UserName:_});await Promise.all(U.AttachedPolicies?.map((L)=>{let A=L;return H.detachUserPolicy({UserName:_,PolicyArn:A.PolicyArn||""})})||[]);let J=await H.listAccessKeys({UserName:_});return await Promise.all(J.AccessKeyMetadata?.map((L)=>{let A=L;return H.deleteAccessKey({UserName:_,AccessKeyId:A.AccessKeyId||""})})||[]),H.deleteUser({UserName:_})});try{await Promise.all(X)}catch(Y){return console.error(Y),$(w("Error deleting Stacks IAM users"))}return K(`Stacks IAM users deleted for team ${Q}`)}async function _z(){try{let H=new v("us-east-1"),Q=(await H.listBuckets()).Buckets?.filter((X)=>X.Name?.includes("stacks"));if(!Q)return $("No stacks buckets found");let Z=Q.map(async(X)=>{let Y=X.Name||"";V.info(`Deleting bucket ${Y}...`);let W,_=!0;while(_){let U=await H.listObjects({bucket:Y,continuationToken:W});if(U.objects&&U.objects.length>0)V.info(`Deleting ${U.objects.length} objects from bucket ${Y}...`),await Promise.all(U.objects.map((J)=>{let L=J;return H.deleteObject(Y,L.Key||"")})).catch((J)=>{throw V.error(`Failed to delete objects from bucket ${Y}:`,J),J});_=!!U.nextContinuationToken,W=U.nextContinuationToken}V.info(`Finished deleting objects from bucket ${Y}`),V.info(`Deleting bucket ${Y} versions...`);try{let U,J,L=!0;while(L){let O=await H.listObjectVersions({bucket:Y,keyMarker:U,versionIdMarker:J});if(O.versions&&O.versions.length>0)await Promise.all(O.versions.map((F)=>{let M=F;return H.deleteObject(Y,M.Key||"")})).catch((F)=>w(F)),V.info(`Deleted ${O.versions.length} versions from bucket ${Y}`);if(O.deleteMarkers&&O.deleteMarkers.length>0)await Promise.all(O.deleteMarkers.map((F)=>{let M=F;return H.deleteObject(Y,M.Key||"")})).catch((F)=>w(F)),V.info(`Deleted ${O.deleteMarkers.length} delete markers from bucket ${Y}`);L=!!O.nextKeyMarker,U=O.nextKeyMarker,J=O.nextVersionIdMarker}V.info(`Finished deleting all versions from bucket ${Y}`);let A=await H.listMultipartUploads(Y);if(A&&A.length>0)V.info("Aborting bucket multipart uploads..."),await Promise.all(A.map((O)=>{let F=O;return H.abortMultipartUpload(Y,F.Key||"",F.UploadId||"")})).catch((O)=>w(O)),V.info(`Finished aborting multipart uploads from bucket ${Y}`);await H.deleteBucket(Y).catch((O)=>w(O)),V.info(`Bucket ${Y} deleted`)}catch(U){V.info(`Error listing bucket ${Y} versions`,U)}});return await Promise.all(Z).catch((X)=>{return console.error(X),$(w("Error deleting stacks buckets"))}),K("Stacks buckets deleted")}catch(H){return $(w("Error deleting stacks buckets",H))}}async function $z(){let H=new N("us-east-1"),Q=(await H.listFunctions()).Functions?.filter((X)=>{return X.FunctionName?.includes("stacks")})||[];if(!Q||Q.length===0)return K("No stacks functions found");let Z=Q.map((X)=>{let Y=X;return H.deleteFunction(Y.FunctionName||"")});try{await Promise.all(Z)}catch(X){let Y=X;if(Y.message.includes("it is a replicated function"))return V.info("Function is replicated, skipping..."),K("CloudFront is still deleting the some functions. Try again later.");return $(w("Error deleting stacks functions",Y))}return K("Stacks functions deleted")}async function Kz(){try{let H=await D("DescribeRegions"),Q=H.regionInfo?.item??H.Regions??H.regionSet??[],Z=[];if(Array.isArray(Q))for(let X of Q){let Y=X.regionName??X.RegionName;if(Y)Z.push(Y)}for(let X of Z){let W=await new b(X).describeLogGroups();if(W?.logGroups)for(let _ of W.logGroups){let U=x.app.name?.toLocaleLowerCase()||"stacks";if(_.logGroupName?.includes(U))await l(X,"DeleteLogGroup",{logGroupName:_.logGroupName})}}return K("Log groups deleted in all regions")}catch(H){return $(w("Error deleting log groups",H))}}async function Uz(){let H=new y("us-east-1"),z=await H.describeParameters();if(!z.Parameters)return K("No parameters found");let Q=x.app.name?.toLocaleLowerCase()||"stacks",Z=z.Parameters.filter((Y)=>{return Y.Name?.includes(Q)})||[];if(!Z||Z.length===0)return K("No stacks parameters found");let X=Z.map((Y)=>{let W=Y;return H.deleteParameter({Name:W.Name||""})});try{await Promise.all(X)}catch(Y){return $(w("Error deleting parameter store",Y))}return K("Parameter store deleted")}async function Oz(){let H=new q("us-east-1"),z=x.app.name?`${x.app.name.toLowerCase()}-`:"stacks-";try{let{Vpcs:Q}=await H.describeVpcs();if(!Q||Q.length===0)return K("No VPCs found");let Z=Q.filter((X)=>{return X.Tags?.some((_)=>_.Key==="Name"&&_.Value===z)});if(Z.length===0)return K(`No VPCs found matching the pattern: ${z}`);for(let X of Z)if(X.VpcId)await D("DeleteVpc",{VpcId:X.VpcId}),V.info(`Deleted VPC: ${X.VpcId} (${z})`);return K(`Deleted ${Z.length} VPCs matching the pattern: ${z}`)}catch(Q){return $(w(`Error deleting VPCs: ${Q}`))}}async function Vz(){try{return await Bun.$`rm -rf ${E.cloudPath("cdk.out/")} ${E.cloudPath("cdk.context.json")}`.text(),K("CDK remnants deleted")}catch(H){return $(w("Error deleting CDK remnants",H))}}async function Jz(){let H=new q("us-east-1"),z=x.app.name?`${x.app.name.toLowerCase()}-`:"stacks-";try{let{Subnets:Q}=await H.describeSubnets();if(!Q||Q.length===0)return K("No subnets found");let Z=Q.filter((X)=>{return X.Tags?.some((_)=>_.Key==="Name"&&_.Value?.startsWith(z))});if(Z.length===0)return K(`No subnets found matching the pattern: ${z}`);for(let X of Z)if(X.SubnetId){let _=(await D("DescribeNetworkInterfaces",{"Filter.1.Name":"subnet-id","Filter.1.Value.1":X.SubnetId})).networkInterfaceSet?.item??[];for(let U of Array.isArray(_)?_:[]){let J=U.networkInterfaceId;if(J){let L=U.attachment;if(L?.instanceId)await H.terminateInstances([L.instanceId]),V.info(`Terminated instance: ${L.instanceId}`),await new Promise((A)=>setTimeout(A,60000));if(L?.attachmentId)await D("DetachNetworkInterface",{AttachmentId:L.attachmentId,Force:"true"}),V.info(`Detached network interface: ${J}`),await new Promise((A)=>setTimeout(A,1e4));await D("DeleteNetworkInterface",{NetworkInterfaceId:J}),V.info(`Deleted network interface: ${J}`)}}await D("DeleteSubnet",{SubnetId:X.SubnetId}),V.info(`Deleted subnet: ${X.SubnetId} (${X.Tags?.find((U)=>U.Key==="Name")?.Value})`)}return K(`Deleted ${Z.length} subnets matching the pattern: ${z}`)}catch(Q){return $(w(`Error deleting subnets: ${Q}`))}}async function Lz(){let H=new v("us-east-1");try{let z=await H.listBuckets();return K(z.Buckets?.some((Q)=>Q.Name?.includes(x.app.name?.toLocaleLowerCase()||"stacks"))||!1)}catch(z){return console.error(z),$(w("Error checking if the app has been deployed"))}}async function p(){let Q=(await new S("us-east-1").listInstanceProfiles()).InstanceProfiles?.find((Z)=>{return Z.InstanceProfileName?.includes("JumpBox")});if(!Q)return $("Jump-box IAM instance profile not found");return K(Q?.InstanceProfileName)}async function Wz(H){if(!H)H=T;if(await B())return $("The jump-box you are trying to add already exists. Please remove it & wait until it finished terminating.");let z=new q("us-east-1"),Q=await i();if(Q.isErr)return $(Q.error);if(!Q.value)return $("Security group not found when adding jump-box");let Z=await m(Q.value);if(Z.isErr)return $(Z.error);let X=Z.value;if(!X)return $("Security group not found when adding jump-box");let W=(await u("DescribeFileSystems","GET","/2015-02-01/file-systems")).FileSystems??[],_=`stacks-${x.app.env}-efs`,U=W.find((C)=>C.Name===_),J=U?.FileSystemId;if(!U||!J)return $(`EFS file system ${_} not found`);let L=`
|
|
2
|
+
import{config as I}from"@stacksjs/config";import{InfrastructureGenerator as f}from"@stacksjs/ts-cloud";class h{generator;cloudConfig;props;constructor(H,z){this.cloudConfig=H,this.props=z;let Q=(z.appEnv==="local"?"development":z.appEnv)||"production";this.generator=new f({config:this.cloudConfig,environment:Q})}generate(){return this.generator.generate().toJSON()}shouldDeployApi(){return I.cloud.api?.deploy??!1}}import{AWSClient as R,AWSCloudFormationClient as j,CloudWatchLogsClient as b,EC2Client as q,IAMClient as S,LambdaClient as N,Route53DomainsClient as g,S3Client as v,SSMClient as y}from"@stacksjs/ts-cloud";import{config as x}from"@stacksjs/config";import{err as $,handleError as w,ok as K}from"@stacksjs/error-handling";import{log as V}from"@stacksjs/logging";import{path as E}from"@stacksjs/path";import{slug as d}from"@stacksjs/strings";var k=x.app.env==="local"?"dev":x.app.env,T=`stacks-cloud-${k}`;async function D(H,z={}){let Q=new R,Z={Action:H,Version:"2016-11-15",...z};return await Q.request({service:"ec2",region:"us-east-1",method:"POST",path:"/",queryParams:Z})}async function l(H,z,Q){return await new R().request({service:"logs",region:H,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Logs_20140328.${z}`},body:JSON.stringify(Q)})}async function u(H,z,Q){return await new R().request({service:"elasticfilesystem",region:"us-east-1",method:z,path:Q})}async function m(H){let z=new q("us-east-1"),{SecurityGroups:Q}=await z.describeSecurityGroups({Filters:[{Name:"group-name",Values:[H]}]});if(!Q)return $(`Security group ${H} not found`);if(Q[0])return K(Q[0].GroupId);return $(`Security group ${H} not found`)}function Xz(H,z){let Q=new g,Z=z.contactType.toUpperCase()||"PERSON",X=(Y)=>Y.toString().includes("+")?Y.toString():`+${Y.toString()}`;try{return K(Q.registerDomain({DomainName:H,DurationInYears:z.years||1,AutoRenew:z.autoRenew||!0,AdminContact:{FirstName:z.adminFirstName,LastName:z.adminLastName,ContactType:Z,OrganizationName:z.adminOrganization,AddressLine1:z.adminAddressLine1,AddressLine2:z.adminAddressLine2,City:z.adminCity,State:z.adminState,CountryCode:z.adminCountry,ZipCode:z.adminZip.toString(),PhoneNumber:X(z.adminPhone),Email:z.adminEmail},RegistrantContact:{FirstName:z.registrantFirstName,LastName:z.registrantLastName,ContactType:Z,OrganizationName:z.registrantOrganization,AddressLine1:z.registrantAddressLine1,AddressLine2:z.registrantAddressLine2,City:z.registrantCity,State:z.registrantState,CountryCode:z.registrantCountry,ZipCode:z.registrantZip.toString(),PhoneNumber:X(z.registrantPhone),Email:z.registrantEmail},TechContact:{FirstName:z.techFirstName,LastName:z.techLastName,ContactType:Z,OrganizationName:z.techOrganization,AddressLine1:z.techAddressLine1,AddressLine2:z.techAddressLine2,City:z.techCity,State:z.techState,CountryCode:z.techCountry,ZipCode:z.techZip.toString(),PhoneNumber:X(z.techPhone),Email:z.techEmail},PrivacyProtectAdminContact:z.privacyAdmin||z.privacy||!0,PrivacyProtectRegistrantContact:z.privacyRegistrant||z.privacy||!0,PrivacyProtectTechContact:z.privacyTech||z.privacy||!0}))}catch(Y){return $(Y)}}async function B(H){if(!H)H=`${T}/JumpBox`;let Q=await new q("us-east-1").describeInstances({Filters:[{Name:"tag:Name",Values:[H]}]});if(Q.Reservations?.[0]?.Instances?.[0])return Q.Reservations[0].Instances[0].InstanceId;return}async function c(H,z){if(!z)z=T;if(!H)return $(`Instance ${H} not found`);return await new q("us-east-1").terminateInstances([H]),K(`Instance ${H} is being terminated`)}async function Yz(H){if(!H)H=T;let z=await B();if(!z)return $("Jump-box not found");return V.info(`Deleting jump-box ${z}...`),await c(z,H)}async function Zz(){let H=new S("us-east-1"),z=await H.listUsers(),Q=d(x.team.name),Z=z.Users?.filter((Y)=>{let _=Y.UserName?.toLowerCase();return _!=="stacks"&&_!==Q.toLowerCase()&&_?.includes(Q.toLowerCase())})||[];if(!Z||Z.length===0)return K(`No Stacks IAM users found for team ${Q}`);let X=Z.map(async(Y)=>{let _=Y.UserName||"";V.info(`Deleting IAM user: ${_}`);let U=await H.listAttachedUserPolicies({UserName:_});await Promise.all(U.AttachedPolicies?.map((L)=>{let A=L;return H.detachUserPolicy({UserName:_,PolicyArn:A.PolicyArn||""})})||[]);let J=await H.listAccessKeys({UserName:_});return await Promise.all(J.AccessKeyMetadata?.map((L)=>{let A=L;return H.deleteAccessKey({UserName:_,AccessKeyId:A.AccessKeyId||""})})||[]),H.deleteUser({UserName:_})});try{await Promise.all(X)}catch(Y){return console.error(Y),$(w("Error deleting Stacks IAM users").message)}return K(`Stacks IAM users deleted for team ${Q}`)}async function _z(){try{let H=new v("us-east-1"),Q=(await H.listBuckets()).Buckets?.filter((X)=>X.Name?.includes("stacks"));if(!Q)return $("No stacks buckets found");let Z=Q.map(async(X)=>{let Y=X.Name||"";V.info(`Deleting bucket ${Y}...`);let W,_=!0;while(_){let U=await H.listObjects({bucket:Y,continuationToken:W});if(U.objects&&U.objects.length>0)V.info(`Deleting ${U.objects.length} objects from bucket ${Y}...`),await Promise.all(U.objects.map((J)=>{let L=J;return H.deleteObject(Y,L.Key||"")})).catch((J)=>{throw V.error(`Failed to delete objects from bucket ${Y}:`,J),J});_=!!U.nextContinuationToken,W=U.nextContinuationToken}V.info(`Finished deleting objects from bucket ${Y}`),V.info(`Deleting bucket ${Y} versions...`);try{let U,J,L=!0;while(L){let O=await H.listObjectVersions({bucket:Y,keyMarker:U,versionIdMarker:J});if(O.versions&&O.versions.length>0)await Promise.all(O.versions.map((F)=>{let M=F;return H.deleteObject(Y,M.Key||"")})).catch((F)=>w(F)),V.info(`Deleted ${O.versions.length} versions from bucket ${Y}`);if(O.deleteMarkers&&O.deleteMarkers.length>0)await Promise.all(O.deleteMarkers.map((F)=>{let M=F;return H.deleteObject(Y,M.Key||"")})).catch((F)=>w(F)),V.info(`Deleted ${O.deleteMarkers.length} delete markers from bucket ${Y}`);L=!!O.nextKeyMarker,U=O.nextKeyMarker,J=O.nextVersionIdMarker}V.info(`Finished deleting all versions from bucket ${Y}`);let A=await H.listMultipartUploads(Y);if(A&&A.length>0)V.info("Aborting bucket multipart uploads..."),await Promise.all(A.map((O)=>{let F=O;return H.abortMultipartUpload(Y,F.Key||"",F.UploadId||"")})).catch((O)=>w(O)),V.info(`Finished aborting multipart uploads from bucket ${Y}`);await H.deleteBucket(Y).catch((O)=>w(O)),V.info(`Bucket ${Y} deleted`)}catch(U){V.info(`Error listing bucket ${Y} versions`,U)}});return await Promise.all(Z).catch((X)=>{return console.error(X),$(w("Error deleting stacks buckets"))}),K("Stacks buckets deleted")}catch(H){return $(w("Error deleting stacks buckets",H))}}async function $z(){let H=new N("us-east-1"),Q=(await H.listFunctions()).Functions?.filter((X)=>{return X.FunctionName?.includes("stacks")})||[];if(!Q||Q.length===0)return K("No stacks functions found");let Z=Q.map((X)=>{let Y=X;return H.deleteFunction(Y.FunctionName||"")});try{await Promise.all(Z)}catch(X){let Y=X;if(Y.message.includes("it is a replicated function"))return V.info("Function is replicated, skipping..."),K("CloudFront is still deleting the some functions. Try again later.");return $(w("Error deleting stacks functions",Y).message)}return K("Stacks functions deleted")}async function Kz(){try{let H=await D("DescribeRegions"),Q=H.regionInfo?.item??H.Regions??H.regionSet??[],Z=[];if(Array.isArray(Q))for(let X of Q){let Y=X.regionName??X.RegionName;if(Y)Z.push(Y)}for(let X of Z){let W=await new b(X).describeLogGroups();if(W?.logGroups)for(let _ of W.logGroups){let U=x.app.name?.toLocaleLowerCase()||"stacks";if(_.logGroupName?.includes(U))await l(X,"DeleteLogGroup",{logGroupName:_.logGroupName})}}return K("Log groups deleted in all regions")}catch(H){return $(w("Error deleting log groups",H))}}async function Uz(){let H=new y("us-east-1"),z=await H.describeParameters();if(!z.Parameters)return K("No parameters found");let Q=x.app.name?.toLocaleLowerCase()||"stacks",Z=z.Parameters.filter((Y)=>{return Y.Name?.includes(Q)})||[];if(!Z||Z.length===0)return K("No stacks parameters found");let X=Z.map((Y)=>{let W=Y;return H.deleteParameter({Name:W.Name||""})});try{await Promise.all(X)}catch(Y){return $(w("Error deleting parameter store",Y).message)}return K("Parameter store deleted")}async function Oz(){let H=new q("us-east-1"),z=x.app.name?`${x.app.name.toLowerCase()}-`:"stacks-";try{let{Vpcs:Q}=await H.describeVpcs();if(!Q||Q.length===0)return K("No VPCs found");let Z=Q.filter((X)=>{return X.Tags?.some((_)=>_.Key==="Name"&&_.Value===z)});if(Z.length===0)return K(`No VPCs found matching the pattern: ${z}`);for(let X of Z)if(X.VpcId)await D("DeleteVpc",{VpcId:X.VpcId}),V.info(`Deleted VPC: ${X.VpcId} (${z})`);return K(`Deleted ${Z.length} VPCs matching the pattern: ${z}`)}catch(Q){return $(w(`Error deleting VPCs: ${Q}`))}}async function Vz(){try{return await Bun.$`rm -rf ${E.cloudPath("cdk.out/")} ${E.cloudPath("cdk.context.json")}`.text(),K("CDK remnants deleted")}catch(H){return $(w("Error deleting CDK remnants",H))}}async function Jz(){let H=new q("us-east-1"),z=x.app.name?`${x.app.name.toLowerCase()}-`:"stacks-";try{let{Subnets:Q}=await H.describeSubnets();if(!Q||Q.length===0)return K("No subnets found");let Z=Q.filter((X)=>{return X.Tags?.some((_)=>_.Key==="Name"&&_.Value?.startsWith(z))});if(Z.length===0)return K(`No subnets found matching the pattern: ${z}`);for(let X of Z)if(X.SubnetId){let _=(await D("DescribeNetworkInterfaces",{"Filter.1.Name":"subnet-id","Filter.1.Value.1":X.SubnetId})).networkInterfaceSet?.item??[];for(let U of Array.isArray(_)?_:[]){let J=U.networkInterfaceId;if(J){let L=U.attachment;if(L?.instanceId)await H.terminateInstances([L.instanceId]),V.info(`Terminated instance: ${L.instanceId}`),await new Promise((A)=>setTimeout(A,60000));if(L?.attachmentId)await D("DetachNetworkInterface",{AttachmentId:L.attachmentId,Force:"true"}),V.info(`Detached network interface: ${J}`),await new Promise((A)=>setTimeout(A,1e4));await D("DeleteNetworkInterface",{NetworkInterfaceId:J}),V.info(`Deleted network interface: ${J}`)}}await D("DeleteSubnet",{SubnetId:X.SubnetId}),V.info(`Deleted subnet: ${X.SubnetId} (${X.Tags?.find((U)=>U.Key==="Name")?.Value})`)}return K(`Deleted ${Z.length} subnets matching the pattern: ${z}`)}catch(Q){return $(w(`Error deleting subnets: ${Q}`))}}async function Lz(){let H=new v("us-east-1");try{let z=await H.listBuckets();return K(z.Buckets?.some((Q)=>Q.Name?.includes(x.app.name?.toLocaleLowerCase()||"stacks"))||!1)}catch(z){return console.error(z),$(w("Error checking if the app has been deployed"))}}async function p(){let Z=(await new S("us-east-1").listInstanceProfiles()).InstanceProfiles?.find((X)=>{return X.InstanceProfileName?.includes("JumpBox")})?.InstanceProfileName;if(!Z)return $("Jump-box IAM instance profile not found");return K(Z)}async function Wz(H){if(!H)H=T;if(await B())return $("The jump-box you are trying to add already exists. Please remove it & wait until it finished terminating.");let z=new q("us-east-1"),Q=await i();if(Q.isErr)return $(Q.error);if(!Q.value)return $("Security group not found when adding jump-box");let Z=await m(Q.value);if(Z.isErr)return $(Z.error);let X=Z.value;if(!X)return $("Security group not found when adding jump-box");let W=(await u("DescribeFileSystems","GET","/2015-02-01/file-systems")).FileSystems??[],_=`stacks-${x.app.env}-efs`,U=W.find((C)=>C.Name===_),J=U?.FileSystemId;if(!U||!J)return $(`EFS file system ${_} not found`);let L=`
|
|
3
3
|
#!/bin/bash
|
|
4
4
|
yum update -y
|
|
5
5
|
yum install -y amazon-efs-utils
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/cloud",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.70.
|
|
4
|
+
"version": "0.70.74",
|
|
5
5
|
"description": "The Stacks cloud/serverless integration & implementation.",
|
|
6
6
|
"author": "Chris Breuer",
|
|
7
7
|
"contributors": [
|
|
@@ -53,19 +53,19 @@
|
|
|
53
53
|
"prepublishOnly": "bun run build"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@stacksjs/ts-cloud": "^0.7.
|
|
56
|
+
"@stacksjs/ts-cloud": "^0.7.14"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@stacksjs/cli": "0.70.
|
|
60
|
-
"@stacksjs/config": "0.70.
|
|
61
|
-
"better-dx": "^0.2.
|
|
62
|
-
"@stacksjs/dns": "0.70.
|
|
63
|
-
"@stacksjs/env": "0.70.
|
|
64
|
-
"@stacksjs/logging": "0.70.
|
|
65
|
-
"@stacksjs/path": "0.70.
|
|
66
|
-
"@stacksjs/router": "0.70.
|
|
67
|
-
"@stacksjs/storage": "0.70.
|
|
68
|
-
"@stacksjs/utils": "0.70.
|
|
69
|
-
"@stacksjs/validation": "0.70.
|
|
59
|
+
"@stacksjs/cli": "0.70.74",
|
|
60
|
+
"@stacksjs/config": "0.70.74",
|
|
61
|
+
"better-dx": "^0.2.16",
|
|
62
|
+
"@stacksjs/dns": "0.70.74",
|
|
63
|
+
"@stacksjs/env": "0.70.74",
|
|
64
|
+
"@stacksjs/logging": "0.70.74",
|
|
65
|
+
"@stacksjs/path": "0.70.74",
|
|
66
|
+
"@stacksjs/router": "0.70.74",
|
|
67
|
+
"@stacksjs/storage": "0.70.74",
|
|
68
|
+
"@stacksjs/utils": "0.70.74",
|
|
69
|
+
"@stacksjs/validation": "0.70.74"
|
|
70
70
|
}
|
|
71
71
|
}
|