@stacksjs/ts-cloud 0.9.3 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aws/index.js +1 -269
- package/dist/bin/chunk-08c0pzkb.js +1 -0
- package/dist/bin/chunk-12210qvj.js +1 -0
- package/dist/bin/chunk-1v6bt68w.js +6 -0
- package/dist/bin/chunk-35ttwn26.js +70 -0
- package/dist/bin/chunk-3r3be05z.js +1 -0
- package/dist/bin/chunk-41yqpdv7.js +2 -0
- package/dist/bin/chunk-5rv31chh.js +1 -0
- package/dist/bin/chunk-6eat8ezk.js +2 -0
- package/dist/bin/chunk-6gktf2m2.js +1 -0
- package/dist/bin/chunk-6zjy949y.js +141 -0
- package/dist/bin/chunk-7wzdaqh6.js +2 -0
- package/dist/bin/chunk-80ar3aty.js +1 -0
- package/dist/bin/chunk-8rwhsp5b.js +2 -0
- package/dist/bin/chunk-936vp7dx.js +44 -0
- package/dist/bin/chunk-9px3rg4a.js +4 -0
- package/dist/bin/chunk-anm3ae6z.js +7364 -0
- package/dist/bin/{chunk-ynjvbphf.js → chunk-axvr7dwa.js} +6 -6
- package/dist/bin/chunk-b0hj9m5e.js +2 -0
- package/dist/bin/{chunk-mh0kdzqp.js → chunk-b2ymh8k0.js} +1 -1
- package/dist/bin/chunk-b35989e3.js +50 -0
- package/dist/bin/chunk-c2b6nk0q.js +37 -0
- package/dist/bin/chunk-ckxpgwxw.js +3 -0
- package/dist/bin/chunk-d6zzgvtn.js +92 -0
- package/dist/bin/chunk-da8zpf82.js +1 -0
- package/dist/bin/chunk-ddmjjstg.js +1 -0
- package/dist/bin/chunk-dhhz4zyj.js +1 -0
- package/dist/bin/chunk-dj9a67c3.js +9 -0
- package/dist/bin/chunk-ds1z880f.js +1 -0
- package/dist/bin/chunk-dvkj4k6h.js +111 -0
- package/dist/bin/chunk-eh40fpvj.js +1 -0
- package/dist/bin/chunk-ey9fagrr.js +6 -0
- package/dist/bin/chunk-ezftw2q4.js +1 -0
- package/dist/bin/chunk-g6a4n3rh.js +1 -0
- package/dist/bin/chunk-g90nqfgv.js +585 -0
- package/dist/bin/chunk-gs40j75w.js +1 -0
- package/dist/bin/chunk-jjjts1vt.js +1 -0
- package/dist/bin/{chunk-ry030a6b.js → chunk-jnsbzqzz.js} +30 -30
- package/dist/bin/chunk-jnx4jgw8.js +1 -0
- package/dist/bin/chunk-jt1tndm2.js +3 -0
- package/dist/bin/chunk-kybdb0ws.js +2 -0
- package/dist/bin/chunk-m3nqw76h.js +3 -0
- package/dist/bin/chunk-mn6j22zn.js +6 -0
- package/dist/bin/chunk-nb0yjkv5.js +2 -0
- package/dist/bin/chunk-pjpa4x52.js +2 -0
- package/dist/bin/chunk-pkgkfe6s.js +2 -0
- package/dist/bin/chunk-pnz5hk8n.js +60 -0
- package/dist/bin/chunk-q46zr2tv.js +1 -0
- package/dist/bin/chunk-qtdngvs8.js +1 -0
- package/dist/bin/chunk-sbejksrh.js +2 -0
- package/dist/bin/chunk-svyd4v6c.js +34 -0
- package/dist/bin/chunk-tna7ay8d.js +1 -0
- package/dist/bin/chunk-tp4c2mv1.js +1 -0
- package/dist/bin/chunk-w5d6tr2x.js +1 -0
- package/dist/bin/chunk-wewcjam5.js +1 -0
- package/dist/bin/chunk-xv4bscrm.js +1 -0
- package/dist/bin/chunk-y9eyc5pw.js +1 -0
- package/dist/bin/chunk-y9f8649w.js +512 -0
- package/dist/bin/cli.js +428 -418
- package/dist/bin/dashboard-server.js +1 -1
- package/dist/chunk-06jk7ba9.js +7355 -0
- package/dist/chunk-0e16qt6k.js +5 -0
- package/dist/chunk-13hxhzaz.js +34 -0
- package/dist/chunk-2p89vt3b.js +2 -0
- package/dist/chunk-77t2ctwn.js +2 -0
- package/dist/chunk-88z37ey4.js +114 -0
- package/dist/chunk-8c4715hz.js +2 -0
- package/dist/chunk-9a22225r.js +60 -0
- package/dist/chunk-as6by62d.js +1 -0
- package/dist/chunk-cd0zpxhf.js +44 -0
- package/dist/chunk-cp54a0qn.js +6 -0
- package/dist/chunk-d67xbk4v.js +141 -0
- package/dist/chunk-dckz9xve.js +2 -0
- package/dist/chunk-e1666vjv.js +2 -0
- package/dist/chunk-hhdx5k96.js +442 -0
- package/dist/chunk-kv2ztkp4.js +1617 -0
- package/dist/chunk-nrz6zypg.js +1 -0
- package/dist/chunk-q816js1y.js +1 -0
- package/dist/chunk-qh9ep11z.js +704 -0
- package/dist/chunk-rg720cqg.js +1 -0
- package/dist/chunk-snak8s7m.js +92 -0
- package/dist/chunk-vq737g82.js +1 -0
- package/dist/chunk-xd6w0c11.js +50 -0
- package/dist/chunk-xtwjt370.js +37 -0
- package/dist/chunk-y26yh5zp.js +1 -0
- package/dist/chunk-zmxffmmq.js +4 -0
- package/dist/deploy/attach-credentials.d.ts +4 -8
- package/dist/deploy/index.js +1 -168
- package/dist/dns/cloudflare.d.ts +27 -0
- package/dist/dns/godaddy.d.ts +18 -1
- package/dist/dns/index.d.ts +2 -0
- package/dist/dns/index.js +1 -41
- package/dist/dns/zone-migration.d.ts +92 -0
- package/dist/dns/zone-migration.test.d.ts +1 -0
- package/dist/drivers/hetzner/driver.d.ts +8 -1
- package/dist/drivers/index.js +1 -154
- package/dist/drivers/shared/compute-provision.d.ts +14 -2
- package/dist/drivers/shared/db-provision.d.ts +3 -2
- package/dist/drivers/shared/mail-provision.d.ts +116 -0
- package/dist/drivers/shared/mail-provision.test.d.ts +1 -0
- package/dist/drivers/shared/managed-services-probe.d.ts +47 -0
- package/dist/drivers/shared/managed-services-probe.test.d.ts +1 -0
- package/dist/drivers/shared/package-manager.d.ts +1 -0
- package/dist/drivers/shared/remote-failure.d.ts +21 -0
- package/dist/drivers/shared/remote-failure.test.d.ts +1 -0
- package/dist/drivers/shared/sqlite-shared-path.d.ts +50 -0
- package/dist/drivers/shared/sqlite-shared-path.test.d.ts +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +100 -6129
- package/dist/operations/plan.d.ts +136 -0
- package/dist/operations/plan.test.d.ts +1 -0
- package/dist/operations/server-rename.d.ts +84 -0
- package/dist/operations/server-rename.test.d.ts +1 -0
- package/dist/operations/site-move.d.ts +263 -0
- package/dist/operations/site-move.test.d.ts +1 -0
- package/dist/protection/index.js +1 -89
- package/dist/push/index.js +1 -509
- package/dist/spend/index.js +1 -173
- package/dist/ui/404.html +1 -1
- package/dist/ui/accept-invitation.html +1 -1
- package/dist/ui/access-denied.html +1 -1
- package/dist/ui/account/automation.html +5 -5
- package/dist/ui/account/security.html +2 -2
- package/dist/ui/applications/compose.html +6 -6
- package/dist/ui/applications/new.html +2 -2
- package/dist/ui/data/backups.html +80 -80
- package/dist/ui/data/services.html +78 -78
- package/dist/ui/data/volumes.html +50 -50
- package/dist/ui/index.html +50 -50
- package/dist/ui/infrastructure/topology.html +118 -118
- package/dist/ui/integrations.html +1 -1
- package/dist/ui/operations/alerts.html +47 -47
- package/dist/ui/operations/configuration.html +5 -5
- package/dist/ui/operations/jobs.html +76 -76
- package/dist/ui/operations/maintenance.html +6 -6
- package/dist/ui/operations/observability.html +82 -82
- package/dist/ui/operations/previews.html +5 -5
- package/dist/ui/operations/queue.html +6 -6
- package/dist/ui/operations/regions.html +6 -6
- package/dist/ui/operations/releases.html +6 -6
- package/dist/ui/operations/spend.html +54 -54
- package/dist/ui/operations/workloads.html +104 -104
- package/dist/ui/security.html +2 -2
- package/dist/ui/server/actions.html +56 -56
- package/dist/ui/server/activity.html +1 -1
- package/dist/ui/server/capacity.html +6 -6
- package/dist/ui/server/database.html +106 -106
- package/dist/ui/server/deployments.html +50 -50
- package/dist/ui/server/diagnostics.html +2 -2
- package/dist/ui/server/firewall.html +76 -76
- package/dist/ui/server/fleet.html +34 -34
- package/dist/ui/server/logs.html +24 -24
- package/dist/ui/server/metrics.html +112 -112
- package/dist/ui/server/security.html +1 -1
- package/dist/ui/server/services.html +27 -27
- package/dist/ui/server/sites.html +120 -120
- package/dist/ui/server/ssh-keys.html +51 -51
- package/dist/ui/server/team.html +144 -144
- package/dist/ui/server/terminal.html +15 -15
- package/dist/ui/serverless/alarms.html +52 -52
- package/dist/ui/serverless/assets.html +27 -27
- package/dist/ui/serverless/cost.html +2 -2
- package/dist/ui/serverless/data.html +36 -36
- package/dist/ui/serverless/deployments.html +27 -27
- package/dist/ui/serverless/firewall.html +1 -1
- package/dist/ui/serverless/functions.html +40 -40
- package/dist/ui/serverless/logs.html +24 -24
- package/dist/ui/serverless/metrics.html +2 -2
- package/dist/ui/serverless/queues.html +47 -47
- package/dist/ui/serverless/secrets.html +52 -52
- package/dist/ui/serverless/traces.html +6 -6
- package/dist/ui/serverless.html +54 -54
- package/dist/ui-src/src/charts.ts +17499 -12662
- package/dist/ui-src/src/topology.ts +2 -2
- package/package.json +3 -3
- package/dist/bin/chunk-09nwf2gy.js +0 -34
- package/dist/bin/chunk-14cwr6eh.js +0 -70
- package/dist/bin/chunk-271gk1n2.js +0 -6
- package/dist/bin/chunk-38pq971s.js +0 -2
- package/dist/bin/chunk-3gykfyq4.js +0 -37
- package/dist/bin/chunk-3r4fb59r.js +0 -3
- package/dist/bin/chunk-41x17hw1.js +0 -1
- package/dist/bin/chunk-4vrqm9h0.js +0 -2
- package/dist/bin/chunk-57y1zxbf.js +0 -3
- package/dist/bin/chunk-598yf4bs.js +0 -1
- package/dist/bin/chunk-8v7ddyvf.js +0 -1
- package/dist/bin/chunk-92mea34a.js +0 -1
- package/dist/bin/chunk-9pvsff8g.js +0 -1
- package/dist/bin/chunk-9v39615t.js +0 -1
- package/dist/bin/chunk-avm7tnwe.js +0 -1
- package/dist/bin/chunk-ax9mr6wm.js +0 -44
- package/dist/bin/chunk-axhnkn5g.js +0 -2
- package/dist/bin/chunk-b5gd39s8.js +0 -512
- package/dist/bin/chunk-b9qbp8j1.js +0 -1
- package/dist/bin/chunk-bz828v8q.js +0 -3
- package/dist/bin/chunk-c1vcdgvr.js +0 -1
- package/dist/bin/chunk-ctd2vg9w.js +0 -2
- package/dist/bin/chunk-dbgffky8.js +0 -1
- package/dist/bin/chunk-dwr30vbv.js +0 -1
- package/dist/bin/chunk-e3xrwh9z.js +0 -1
- package/dist/bin/chunk-fhc6ntvd.js +0 -2
- package/dist/bin/chunk-fpm59y25.js +0 -6
- package/dist/bin/chunk-fvbxvq6b.js +0 -1
- package/dist/bin/chunk-fy8j3y8p.js +0 -92
- package/dist/bin/chunk-fz21b57w.js +0 -1
- package/dist/bin/chunk-gavvf0pg.js +0 -141
- package/dist/bin/chunk-ggn7ax8p.js +0 -4
- package/dist/bin/chunk-gpe2prkm.js +0 -1
- package/dist/bin/chunk-gqf6jsmy.js +0 -1
- package/dist/bin/chunk-h5pa5men.js +0 -2
- package/dist/bin/chunk-hm08xdxf.js +0 -2
- package/dist/bin/chunk-hzgz13nf.js +0 -1
- package/dist/bin/chunk-hzqw8xm5.js +0 -111
- package/dist/bin/chunk-j703btc5.js +0 -50
- package/dist/bin/chunk-jpjamjey.js +0 -6935
- package/dist/bin/chunk-m2zwtapr.js +0 -1
- package/dist/bin/chunk-m669wtgr.js +0 -1
- package/dist/bin/chunk-mr0atd2s.js +0 -2
- package/dist/bin/chunk-ngcyftm2.js +0 -1
- package/dist/bin/chunk-p66ptpmr.js +0 -2
- package/dist/bin/chunk-p8q9bq9g.js +0 -1
- package/dist/bin/chunk-r3kv0vm9.js +0 -6
- package/dist/bin/chunk-r9hjwcj9.js +0 -6
- package/dist/bin/chunk-rtczra13.js +0 -1
- package/dist/bin/chunk-rytk89az.js +0 -60
- package/dist/bin/chunk-sgyffpgm.js +0 -581
- package/dist/bin/chunk-vek8a0w6.js +0 -1
- package/dist/bin/chunk-waayf9ay.js +0 -2
- package/dist/bin/chunk-yv9sth30.js +0 -1
- package/dist/chunk-01d86gt1.js +0 -1324
- package/dist/chunk-050r7ycy.js +0 -46516
- package/dist/chunk-1c8dbv57.js +0 -7278
- package/dist/chunk-29rse4p1.js +0 -12203
- package/dist/chunk-32e7ya18.js +0 -642
- package/dist/chunk-4cjrg98a.js +0 -597
- package/dist/chunk-50jpda9q.js +0 -371
- package/dist/chunk-6a1t7fnq.js +0 -12121
- package/dist/chunk-728jvrr0.js +0 -1701
- package/dist/chunk-7m60qnc8.js +0 -1762
- package/dist/chunk-aa2dkn7b.js +0 -205
- package/dist/chunk-d48vtdj4.js +0 -433
- package/dist/chunk-f55nkpvb.js +0 -8
- package/dist/chunk-fgk8cqew.js +0 -152
- package/dist/chunk-he9a874b.js +0 -769
- package/dist/chunk-k2yyatfw.js +0 -10
- package/dist/chunk-k4px0bnv.js +0 -23
- package/dist/chunk-nsgqsmrh.js +0 -1779
- package/dist/chunk-q0st3se8.js +0 -42033
- package/dist/chunk-qr803fye.js +0 -2122
- package/dist/chunk-rds0sy87.js +0 -1771
- package/dist/chunk-ttz2ra5j.js +0 -12
- package/dist/chunk-v0bahtg2.js +0 -4
- package/dist/chunk-va2yd85b.js +0 -200
- package/dist/chunk-x9s0cqfx.js +0 -13
- package/dist/chunk-zqtpg06c.js +0 -1752
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import{Og as A}from"./chunk-fpm59y25.js";class N{client;constructor(J,Q){this.client=Q??new A(void 0,{profile:J})}collectionItems(J,Q){let z=J?.Items??J?.[Q];if(!z)return[];if(Array.isArray(z))return z;let Y=z[Q]??z.Item;if(Y===void 0)return typeof z==="object"&&(z.Id||z.PathPattern)?[z]:[];return Array.isArray(Y)?Y:[Y]}validateExistingOriginInput(J,Q){if(!/^[A-Z0-9]{8,32}$/.test(J))throw Error("CloudFront distribution ID is invalid");if(!/^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/.test(Q.id))throw Error("CloudFront origin ID is invalid");if(!/^(?=.{1,253}$)(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?$/.test(Q.domainName))throw Error("CloudFront origin must be a hostname without a scheme or path");let z=Q.pathPattern.startsWith("/")?Q.pathPattern:`/${Q.pathPattern}`;if(z==="/"||z==="/*"||!/^\/[A-Za-z0-9_.*?~!$&'()+,;=:@%/-]{1,255}$/.test(z))throw Error("CloudFront path pattern must be a non-default absolute pattern");if(Q.originPath&&(!Q.originPath.startsWith("/")||Q.originPath.includes("..")))throw Error("CloudFront origin path must be absolute and traversal-free");if(Object.entries(Q.customHeaders??{}).some(([Y,_])=>!/^[A-Za-z0-9-]{1,64}$/.test(Y)||!_||_.length>1024))throw Error("CloudFront custom origin headers are invalid");return{...Q,pathPattern:z}}async upsertExistingDistributionOrigin(J,Q){let z=this.validateExistingOriginInput(J,Q),Y=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${J}/config`,returnHeaders:!0}),_=Y.headers?.etag||Y.headers?.ETag||Y.ETag||"",Z=Y.body?.DistributionConfig||Y.DistributionConfig||Y.body;if(!Z||Z.Enabled===void 0||!_)throw Error("Failed to read an ETag-protected CloudFront distribution config");let $=this.collectionItems(Z.Origins,"Origin"),j=this.collectionItems(Z.CacheBehaviors,"CacheBehavior"),L=$.find((H)=>String(H.Id)===z.id),q=j.find((H)=>String(H.PathPattern)===z.pathPattern);if(L&&String(L.DomainName)!==z.domainName&&!z.replaceExisting)throw Error(`Origin ${z.id} already targets ${L.DomainName}; pass replaceExisting only after reviewing the live config`);if(q&&String(q.TargetOriginId)!==z.id&&!z.replaceExisting)throw Error(`Path ${z.pathPattern} already targets ${q.TargetOriginId}; pass replaceExisting only after reviewing the live config`);let W={Id:z.id,DomainName:z.domainName,OriginPath:z.originPath??"",CustomHeaders:{Quantity:Object.keys(z.customHeaders??{}).length,...Object.keys(z.customHeaders??{}).length?{Items:{OriginCustomHeader:Object.entries(z.customHeaders).map(([H,K])=>({HeaderName:H,HeaderValue:K}))}}:{}},CustomOriginConfig:{HTTPPort:80,HTTPSPort:443,OriginProtocolPolicy:z.protocolPolicy??"https-only",OriginSslProtocols:{Quantity:1,Items:{SslProtocol:["TLSv1.2"]}},OriginReadTimeout:30,OriginKeepaliveTimeout:5},ConnectionAttempts:3,ConnectionTimeout:10,...z.originAccessControlId?{OriginAccessControlId:z.originAccessControlId}:{}},F=["GET","HEAD","OPTIONS","PUT","POST","PATCH","DELETE"],D={PathPattern:z.pathPattern,TargetOriginId:z.id,ViewerProtocolPolicy:"redirect-to-https",Compress:!0,CachePolicyId:"4135ea2d-6df8-44a3-9df3-4b5a84be39ad",OriginRequestPolicyId:"b689b0a8-53d0-40ab-baf2-68738e2966ac",AllowedMethods:{Quantity:F.length,Items:{Method:F},CachedMethods:{Quantity:2,Items:{Method:["GET","HEAD"]}}},SmoothStreaming:!1,FieldLevelEncryptionId:"",TrustedSigners:{Enabled:!1,Quantity:0},TrustedKeyGroups:{Enabled:!1,Quantity:0},LambdaFunctionAssociations:{Quantity:0},FunctionAssociations:{Quantity:0}},G=L?$.map((H)=>String(H.Id)===z.id?W:H):[...$,W],S=q?j.map((H)=>String(H.PathPattern)===z.pathPattern?D:H):[...j,D],U=JSON.stringify($)!==JSON.stringify(G)||JSON.stringify(j)!==JSON.stringify(S);if(!U||z.dryRun)return{distributionId:J,originId:z.id,domainName:z.domainName,pathPattern:z.pathPattern,changed:U,applied:!1,etag:_};Z.Origins={Quantity:G.length,Items:{Origin:G}},Z.CacheBehaviors={Quantity:S.length,...S.length?{Items:{CacheBehavior:S}}:{}};let M=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${J}/config`,body:this.buildDistributionConfigXml(Z),headers:{"Content-Type":"application/xml","If-Match":_}});return{distributionId:J,originId:z.id,domainName:z.domainName,pathPattern:z.pathPattern,changed:!0,applied:!0,etag:M.ETag||M.headers?.etag||""}}async removeExistingDistributionOrigin(J,Q){let z=this.validateExistingOriginInput(J,Q),Y=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${J}/config`,returnHeaders:!0}),_=Y.headers?.etag||Y.headers?.ETag||Y.ETag||"",Z=Y.body?.DistributionConfig||Y.DistributionConfig||Y.body;if(!Z||Z.Enabled===void 0||!_)throw Error("Failed to read an ETag-protected CloudFront distribution config");let $=this.collectionItems(Z.Origins,"Origin"),j=this.collectionItems(Z.CacheBehaviors,"CacheBehavior"),L=$.find((S)=>String(S.Id)===z.id),q=j.find((S)=>String(S.PathPattern)===z.pathPattern);if(L&&String(L.DomainName)!==z.domainName)throw Error(`Origin ${z.id} no longer targets ${z.domainName}; refusing ambiguous removal`);if(q&&String(q.TargetOriginId)!==z.id)throw Error(`Path ${z.pathPattern} no longer targets ${z.id}; refusing ambiguous removal`);if(!q)return{distributionId:J,originId:z.id,domainName:z.domainName,pathPattern:z.pathPattern,changed:!1,applied:!1,originRemoved:!1,etag:_};let W=j.filter((S)=>String(S.PathPattern)!==z.pathPattern),F=String(Z.DefaultCacheBehavior?.TargetOriginId)===z.id||W.some((S)=>String(S.TargetOriginId)===z.id),D=F?$:$.filter((S)=>String(S.Id)!==z.id);if(z.dryRun)return{distributionId:J,originId:z.id,domainName:z.domainName,pathPattern:z.pathPattern,changed:!0,applied:!1,originRemoved:!F&&!!L,etag:_};Z.Origins={Quantity:D.length,Items:{Origin:D}},Z.CacheBehaviors={Quantity:W.length,...W.length?{Items:{CacheBehavior:W}}:{}};let G=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${J}/config`,body:this.buildDistributionConfigXml(Z),headers:{"Content-Type":"application/xml","If-Match":_}});return{distributionId:J,originId:z.id,domainName:z.domainName,pathPattern:z.pathPattern,changed:!0,applied:!0,originRemoved:!F&&!!L,etag:G.ETag||G.headers?.etag||""}}async createInvalidation(J){let Q=J.callerReference||Date.now().toString(),z=`<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<InvalidationBatch>
|
|
3
|
-
<Paths>
|
|
4
|
-
<Quantity>${J.paths.length}</Quantity>
|
|
5
|
-
<Items>
|
|
6
|
-
${J.paths.map((_)=>`<Path>${_}</Path>`).join(`
|
|
7
|
-
`)}
|
|
8
|
-
</Items>
|
|
9
|
-
</Paths>
|
|
10
|
-
<CallerReference>${Q}</CallerReference>
|
|
11
|
-
</InvalidationBatch>`,Y=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:`/2020-05-31/distribution/${J.distributionId}/invalidation`,body:z,headers:{"Content-Type":"application/xml"}});return{Id:Y.Id||Y.Invalidation?.Id,Status:Y.Status||Y.Invalidation?.Status||"InProgress",CreateTime:Y.CreateTime||Y.Invalidation?.CreateTime||new Date().toISOString()}}async getInvalidation(J,Q){let z=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${J}/invalidation/${Q}`});return{Id:z.Id||z.Invalidation?.Id,Status:z.Status||z.Invalidation?.Status,CreateTime:z.CreateTime||z.Invalidation?.CreateTime}}async listInvalidations(J){let Q=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${J}/invalidation`}),z=[];if(Q.InvalidationSummary){let Y=Array.isArray(Q.InvalidationSummary)?Q.InvalidationSummary:[Q.InvalidationSummary];z.push(...Y.map((_)=>({Id:_.Id,Status:_.Status,CreateTime:_.CreateTime})))}return z}async waitForInvalidation(J,Q){let Y=0;while(Y<60){if((await this.getInvalidation(J,Q)).Status==="Completed")return;await new Promise((Z)=>setTimeout(Z,5000)),Y++}throw Error(`Timeout waiting for invalidation ${Q} to complete`)}async listDistributions(){let J=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/distribution"}),Q=[],Y=(J.DistributionList||J).Items,_=[];if(Array.isArray(Y))_=Y;else if(Y?.DistributionSummary)_=Array.isArray(Y.DistributionSummary)?Y.DistributionSummary:[Y.DistributionSummary];return Q.push(..._.map((Z)=>({Id:Z.Id,ARN:Z.ARN,Status:Z.Status,DomainName:Z.DomainName,Aliases:Z.Aliases||void 0,Enabled:Z.Enabled==="true"||Z.Enabled===!0}))),Q}async getDistribution(J){let Q=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${J}`}),z=Q.Distribution||Q;return{Id:z.Id,ARN:z.ARN,Status:z.Status,DomainName:z.DomainName,Aliases:z.DistributionConfig?.Aliases?.Items||z.Aliases?.Items||[],Enabled:z.DistributionConfig?.Enabled==="true"||z.DistributionConfig?.Enabled===!0}}async getDistributionConfig(J){let Q=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${J}/config`});return{ETag:Q.ETag||"",DistributionConfig:Q.DistributionConfig||Q}}async invalidateAll(J){return this.createInvalidation({distributionId:J,paths:["/*"]})}async invalidatePaths(J,Q){let z=Q.map((Y)=>Y.startsWith("/")?Y:`/${Y}`);return this.createInvalidation({distributionId:J,paths:z})}async invalidatePattern(J,Q){let z=Q.startsWith("/")?Q:`/${Q}`;return this.createInvalidation({distributionId:J,paths:[z]})}async invalidateAfterDeployment(J){let{distributionId:Q,changedPaths:z,invalidateAll:Y=!1,wait:_=!1}=J,Z;if(Y||!z||z.length===0)Z=await this.invalidateAll(Q);else Z=await this.invalidatePaths(Q,z);if(_)await this.waitForInvalidation(Q,Z.Id);return{invalidationId:Z.Id,status:Z.Status}}async findDistributionByDomain(J){return(await this.listDistributions()).find((Y)=>{if(Y.DomainName===J)return!0;if(Y.Aliases?.Items&&Y.Aliases.Items.includes(J))return!0;return!1})||null}async batchInvalidate(J,Q=["/*"]){return await Promise.all(J.map(async(Y)=>{let _=await this.createInvalidation({distributionId:Y,paths:Q});return{distributionId:Y,invalidationId:_.Id,status:_.Status}}))}async updateCustomErrorResponses(J){let{distributionId:Q,customErrorResponses:z}=J,Y=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${Q}/config`,returnHeaders:!0}),_=Y.headers?.etag||Y.headers?.ETag||"",Z=Y.body?.DistributionConfig||(Y.body?.Enabled!==void 0?Y.body:void 0)||Y.DistributionConfig;if(!Z||Z.Enabled===void 0)throw Error("Failed to get current distribution config");if(z.length===0)Z.CustomErrorResponses={Quantity:0};else Z.CustomErrorResponses={Quantity:z.length,Items:{CustomErrorResponse:z.map((q)=>({ErrorCode:q.errorCode,...q.responsePagePath&&{ResponsePagePath:q.responsePagePath},...q.responseCode&&{ResponseCode:q.responseCode},...q.errorCachingMinTTL!==void 0&&{ErrorCachingMinTTL:q.errorCachingMinTTL}}))}};let $=this.buildDistributionConfigXml(Z),j=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${Q}/config`,body:$,headers:{"Content-Type":"application/xml","If-Match":_}}),L=j.Distribution||j;return{Distribution:{Id:L.Id,ARN:L.ARN,Status:L.Status,DomainName:L.DomainName,Aliases:L.DistributionConfig?.Aliases?.Items||[],Enabled:L.DistributionConfig?.Enabled==="true"||L.DistributionConfig?.Enabled===!0},ETag:j.ETag||""}}async removeCustomErrorResponses(J){return this.updateCustomErrorResponses({distributionId:J,customErrorResponses:[]})}async updateDistribution(J){let{distributionId:Q,aliases:z,certificateArn:Y,comment:_}=J,Z=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${Q}/config`,returnHeaders:!0}),$=Z.headers?.etag||Z.headers?.ETag||"",j=Z.body?.DistributionConfig||(Z.body?.Enabled!==void 0?Z.body:void 0)||Z.DistributionConfig;if(!j||j.Enabled===void 0)throw Error("Failed to get current distribution config");if(z&&z.length>0)j.Aliases={Quantity:z.length,Items:{Item:z}};if(Y)j.ViewerCertificate={ACMCertificateArn:Y,SSLSupportMethod:"sni-only",MinimumProtocolVersion:"TLSv1.2_2021",CertificateSource:"acm"};if(_)j.Comment=_;let L=this.buildDistributionConfigXml(j),q=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${Q}/config`,body:L,headers:{"Content-Type":"application/xml","If-Match":$}}),W=q.Distribution||q;return{Distribution:{Id:W.Id,ARN:W.ARN,Status:W.Status,DomainName:W.DomainName,Aliases:z?{Quantity:z.length,Items:z}:{Quantity:0,Items:[]},Enabled:W.DistributionConfig?.Enabled==="true"||W.DistributionConfig?.Enabled===!0},ETag:q.ETag||""}}buildDistributionConfigXml(J){let Q=(Z)=>{return Z.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},z={Items:"",Methods:"Method",Headers:"Name",Cookies:"Name",QueryStringCacheKeys:"Name",TrustedKeyGroups:"KeyGroup",TrustedSigners:"AwsAccountNumber",LambdaFunctionAssociations:"LambdaFunctionAssociation",FunctionAssociations:"FunctionAssociation",CacheBehaviors:"CacheBehavior",CustomErrorResponses:"CustomErrorResponse",GeoRestriction:"Location"},Y={Origins:"Origin",Aliases:"CNAME",AllowedMethods:"Method",CachedMethods:"Method",CustomErrorResponses:"CustomErrorResponse",CacheBehaviors:"CacheBehavior"},_=(Z,$,j="",L="")=>{if($===null||$===void 0)return"";if(Z.startsWith("@_")||Z==="?xml")return"";if(typeof $==="boolean")return`${j}<${Z}>${$}</${Z}>
|
|
12
|
-
`;if(typeof $==="number"||typeof $==="string")return`${j}<${Z}>${Q(String($))}</${Z}>
|
|
13
|
-
`;if(Array.isArray($)){let q=z[Z]||Z.replace(/s$/,"");return $.map((W)=>_(q,W,j,Z)).join("")}if(typeof $==="object"){if(Z==="Items"){let W=Y[L]||"",F=Object.keys($).filter((D)=>!D.startsWith("@_"));if(F.length===1&&!Array.isArray($[F[0]])){let D=F[0],G=$[D];if(typeof G==="string")return`${j}<Items>
|
|
14
|
-
${j} <${D}>${Q(G)}</${D}>
|
|
15
|
-
${j}</Items>
|
|
16
|
-
`;else if(typeof G==="object"&&!Array.isArray(G))return`${j}<Items>
|
|
17
|
-
${_(D,G,j+" ",Z)}${j}</Items>
|
|
18
|
-
`}if(F.length===1&&Array.isArray($[F[0]])){let D=F[0],G=$[D],S="";for(let U of G)if(typeof U==="string")S+=`${j} <${D}>${Q(U)}</${D}>
|
|
19
|
-
`;else S+=_(D,U,j+" ",Z);return`${j}<Items>
|
|
20
|
-
${S}${j}</Items>
|
|
21
|
-
`}if(Array.isArray($)){let D="",G=W||"Item";for(let S of $)if(typeof S==="string")D+=`${j} <${G}>${Q(S)}</${G}>
|
|
22
|
-
`;else D+=_(G,S,j+" ",Z);return`${j}<Items>
|
|
23
|
-
${D}${j}</Items>
|
|
24
|
-
`}}let q="";for(let[W,F]of Object.entries($))if(!W.startsWith("@_"))q+=_(W,F,j+" ",Z);if(q==="")return`${j}<${Z}/>
|
|
25
|
-
`;return`${j}<${Z}>
|
|
26
|
-
${q}${j}</${Z}>
|
|
27
|
-
`}return""};return`<?xml version="1.0" encoding="UTF-8"?>
|
|
28
|
-
<DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
|
|
29
|
-
${Object.entries(J).filter(([Z])=>!Z.startsWith("@_")).map(([Z,$])=>_(Z,$," ","DistributionConfig")).join("")}</DistributionConfig>`}async ensureDynamicHttpMethods(J){let Q=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${J}/config`,returnHeaders:!0}),z=Q.headers?.etag||Q.headers?.ETag||"",Y=Q.body?.DistributionConfig||Q.DistributionConfig||Q.body;if(!Y)throw Error("Failed to get current distribution config");let _=!1,Z=["GET","HEAD","OPTIONS","PUT","POST","PATCH","DELETE"],$=(q)=>{if(!q)return[];let W=q.Items;if(!W)return[];if(Array.isArray(W))return W.map(String);if(typeof W==="object"&&W.Method){let F=W.Method;return Array.isArray(F)?F.map(String):[String(F)]}if(W.Item)return Array.isArray(W.Item)?W.Item.map(String):[String(W.Item)];return[]},j=Y.DefaultCacheBehavior;if(j){if(!$(j.AllowedMethods).includes("POST"))j.AllowedMethods={Quantity:Z.length,Items:{Method:Z},CachedMethods:{Quantity:2,Items:{Method:["GET","HEAD"]}}},_=!0}if(!_)return!1;let L=this.buildDistributionConfigXml(Y);return await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${J}/config`,body:L,headers:{"Content-Type":"application/xml","If-Match":z}}),!0}async addAliases(J,Q,z){return this.updateDistribution({distributionId:J,aliases:Q,certificateArn:z})}async createFunction(J){let{name:Q,code:z,comment:Y="",runtime:_="cloudfront-js-2.0"}=J,Z=`<?xml version="1.0" encoding="UTF-8"?>
|
|
30
|
-
<CreateFunctionRequest xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
|
|
31
|
-
<Name>${Q}</Name>
|
|
32
|
-
<FunctionConfig>
|
|
33
|
-
<Comment>${Y}</Comment>
|
|
34
|
-
<Runtime>${_}</Runtime>
|
|
35
|
-
</FunctionConfig>
|
|
36
|
-
<FunctionCode>${Buffer.from(z).toString("base64")}</FunctionCode>
|
|
37
|
-
</CreateFunctionRequest>`,$=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/function",body:Z,headers:{"Content-Type":"application/xml"}}),j=$.FunctionSummary||$;return{FunctionARN:j.FunctionMetadata?.FunctionARN||j.FunctionARN,Name:j.Name||Q,Stage:j.FunctionMetadata?.Stage||"DEVELOPMENT",ETag:$.ETag||""}}async listFunctions(){let J=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/function"}),Q=[],z=J.FunctionList?.Items?.FunctionSummary;if(z){let Y=Array.isArray(z)?z:[z];for(let _ of Y)Q.push({Name:_.Name,FunctionARN:_.FunctionMetadata?.FunctionARN,Stage:_.FunctionMetadata?.Stage,CreatedTime:_.FunctionMetadata?.CreatedTime,LastModifiedTime:_.FunctionMetadata?.LastModifiedTime})}return Q}async getFunction(J,Q="LIVE"){try{let z=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/function/${J}`,queryParams:{Stage:Q},returnHeaders:!0}),Y=z.body?.FunctionSummary||z.FunctionSummary||z.body||z;return{FunctionARN:Y.FunctionMetadata?.FunctionARN,Name:Y.Name||J,Stage:Y.FunctionMetadata?.Stage||Q,ETag:z.headers?.etag||z.ETag||"",FunctionCode:Y.FunctionCode}}catch(z){if(z.message?.includes("404")||z.message?.includes("NoSuchFunctionExists"))return null;throw z}}async publishFunction(J,Q){let z,Y;if(typeof J==="object")z=J.Name,Y=J.IfMatch;else z=J,Y=Q;if(!Y){let $=await this.getFunction(z,"DEVELOPMENT");if(!$)throw Error(`Function ${z} not found`);Y=$.ETag}let _=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:`/2020-05-31/function/${z}/publish`,headers:{"If-Match":Y}}),Z=_.FunctionSummary||_;return{FunctionARN:Z.FunctionMetadata?.FunctionARN,Stage:Z.FunctionMetadata?.Stage||"LIVE",FunctionSummary:Z}}async describeFunction(J){let{Name:Q,Stage:z="DEVELOPMENT"}=J,Y=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/function/${Q}/describe`,queryParams:{Stage:z},returnHeaders:!0});return{ETag:Y.headers?.etag||Y.ETag||"",FunctionSummary:Y.body?.FunctionSummary||Y.FunctionSummary||Y.body||Y}}async updateFunction(J){let{Name:Q,FunctionCode:z,FunctionConfig:Y,IfMatch:_}=J,Z=`<?xml version="1.0" encoding="UTF-8"?>
|
|
38
|
-
<UpdateFunctionRequest xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
|
|
39
|
-
<FunctionConfig>
|
|
40
|
-
<Comment>${Y.Comment}</Comment>
|
|
41
|
-
<Runtime>${Y.Runtime}</Runtime>
|
|
42
|
-
</FunctionConfig>
|
|
43
|
-
<FunctionCode>${Buffer.from(z).toString("base64")}</FunctionCode>
|
|
44
|
-
</UpdateFunctionRequest>`,$=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/function/${Q}`,body:Z,headers:{"Content-Type":"application/xml","If-Match":_},returnHeaders:!0});return{ETag:$.headers?.etag||$.ETag||"",FunctionSummary:$.body?.FunctionSummary||$.FunctionSummary||$.body||$}}async deleteFunction(J,Q){let z=Q;if(!z){let Y=await this.getFunction(J,"DEVELOPMENT");if(!Y)return;z=Y.ETag}await this.client.request({service:"cloudfront",region:"us-east-1",method:"DELETE",path:`/2020-05-31/function/${J}`,headers:{"If-Match":z}})}async createIndexRewriteFunction(J){return this.createFunction({name:J,code:`function handler(event) {
|
|
45
|
-
const request = event.request;
|
|
46
|
-
var uri = request.uri;
|
|
47
|
-
|
|
48
|
-
// Check if the request is for a directory (ends with /)
|
|
49
|
-
if (uri.endsWith('/')) {
|
|
50
|
-
request.uri += 'index.html';
|
|
51
|
-
}
|
|
52
|
-
// Check if the request doesn't have a file extension
|
|
53
|
-
else if (!uri.includes('.')) {
|
|
54
|
-
// Add trailing slash to redirect to directory
|
|
55
|
-
request.uri += '/index.html';
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return request;
|
|
59
|
-
}`,comment:"Rewrite directory requests to index.html for S3 static sites",runtime:"cloudfront-js-2.0"})}async listOriginAccessControls(){let J=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/origin-access-control"}),Q=[];if(J.OriginAccessControlList?.Items?.OriginAccessControlSummary){let z=Array.isArray(J.OriginAccessControlList.Items.OriginAccessControlSummary)?J.OriginAccessControlList.Items.OriginAccessControlSummary:[J.OriginAccessControlList.Items.OriginAccessControlSummary];Q.push(...z.map((Y)=>({Id:Y.Id,Name:Y.Name,Description:Y.Description,SigningProtocol:Y.SigningProtocol,SigningBehavior:Y.SigningBehavior,OriginAccessControlOriginType:Y.OriginAccessControlOriginType})))}return Q}async createOriginAccessControl(J){let{name:Q,description:z=`OAC for ${Q}`,signingProtocol:Y="sigv4",signingBehavior:_="always",originType:Z="s3"}=J,$=`<?xml version="1.0" encoding="UTF-8"?>
|
|
60
|
-
<OriginAccessControlConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
|
|
61
|
-
<Name>${Q}</Name>
|
|
62
|
-
<Description>${z}</Description>
|
|
63
|
-
<SigningProtocol>${Y}</SigningProtocol>
|
|
64
|
-
<SigningBehavior>${_}</SigningBehavior>
|
|
65
|
-
<OriginAccessControlOriginType>${Z}</OriginAccessControlOriginType>
|
|
66
|
-
</OriginAccessControlConfig>`,j=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/origin-access-control",body:$,headers:{"Content-Type":"application/xml"},returnHeaders:!0}),L=j.body?.OriginAccessControl||j.OriginAccessControl||j.body||j;return{Id:L.Id,Name:L.OriginAccessControlConfig?.Name||Q,Description:L.OriginAccessControlConfig?.Description||z,SigningProtocol:L.OriginAccessControlConfig?.SigningProtocol||Y,SigningBehavior:L.OriginAccessControlConfig?.SigningBehavior||_,OriginAccessControlOriginType:L.OriginAccessControlConfig?.OriginAccessControlOriginType||Z,ETag:j.headers?.etag||j.ETag||""}}async findOrCreateOriginAccessControl(J,Q="s3"){let Y=(await this.listOriginAccessControls()).find((Z)=>Z.Name===J&&Z.OriginAccessControlOriginType===Q);if(Y)return{Id:Y.Id,Name:Y.Name,isNew:!1};let _=await this.createOriginAccessControl({name:J,originType:Q});return{Id:_.Id,Name:_.Name,isNew:!0}}async createDistributionForS3(J){let{bucketName:Q,bucketRegion:z,originAccessControlId:Y,aliases:_=[],certificateArn:Z,defaultRootObject:$="index.html",comment:j=`Distribution for ${Q}`,priceClass:L="PriceClass_100",enabled:q=!0,trustedKeyGroupIds:W=[],mediaDelivery:F=!1}=J,D=`S3-${Q}`,G=`${Q}.s3.${z}.amazonaws.com`,S=`${Date.now()}-${Math.random().toString(36).slice(2)}`,U=W.length>0?`<TrustedKeyGroups>
|
|
67
|
-
<Enabled>true</Enabled>
|
|
68
|
-
<Quantity>${W.length}</Quantity>
|
|
69
|
-
<Items>${W.map((w)=>`<KeyGroup>${w}</KeyGroup>`).join("")}</Items>
|
|
70
|
-
</TrustedKeyGroups>`:"<TrustedKeyGroups><Enabled>false</Enabled><Quantity>0</Quantity></TrustedKeyGroups>",M="<Aliases><Quantity>0</Quantity></Aliases>";if(_.length>0)M=`<Aliases>
|
|
71
|
-
<Quantity>${_.length}</Quantity>
|
|
72
|
-
<Items>
|
|
73
|
-
${_.map((w)=>`<CNAME>${w}</CNAME>`).join(`
|
|
74
|
-
`)}
|
|
75
|
-
</Items>
|
|
76
|
-
</Aliases>`;let H=`<ViewerCertificate>
|
|
77
|
-
<CloudFrontDefaultCertificate>true</CloudFrontDefaultCertificate>
|
|
78
|
-
</ViewerCertificate>`;if(Z&&_.length>0)H=`<ViewerCertificate>
|
|
79
|
-
<ACMCertificateArn>${Z}</ACMCertificateArn>
|
|
80
|
-
<SSLSupportMethod>sni-only</SSLSupportMethod>
|
|
81
|
-
<MinimumProtocolVersion>TLSv1.2_2021</MinimumProtocolVersion>
|
|
82
|
-
<CertificateSource>acm</CertificateSource>
|
|
83
|
-
</ViewerCertificate>`;let K=`<?xml version="1.0" encoding="UTF-8"?>
|
|
84
|
-
<DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
|
|
85
|
-
<CallerReference>${S}</CallerReference>
|
|
86
|
-
<Comment>${j}</Comment>
|
|
87
|
-
<DefaultRootObject>${$}</DefaultRootObject>
|
|
88
|
-
<Origins>
|
|
89
|
-
<Quantity>1</Quantity>
|
|
90
|
-
<Items>
|
|
91
|
-
<Origin>
|
|
92
|
-
<Id>${D}</Id>
|
|
93
|
-
<DomainName>${G}</DomainName>
|
|
94
|
-
<OriginPath></OriginPath>
|
|
95
|
-
<S3OriginConfig>
|
|
96
|
-
<OriginAccessIdentity></OriginAccessIdentity>
|
|
97
|
-
</S3OriginConfig>
|
|
98
|
-
<OriginAccessControlId>${Y}</OriginAccessControlId>
|
|
99
|
-
</Origin>
|
|
100
|
-
</Items>
|
|
101
|
-
</Origins>
|
|
102
|
-
<DefaultCacheBehavior>
|
|
103
|
-
<TargetOriginId>${D}</TargetOriginId>
|
|
104
|
-
<ViewerProtocolPolicy>redirect-to-https</ViewerProtocolPolicy>
|
|
105
|
-
<AllowedMethods>
|
|
106
|
-
<Quantity>2</Quantity>
|
|
107
|
-
<Items>
|
|
108
|
-
<Method>GET</Method>
|
|
109
|
-
<Method>HEAD</Method>
|
|
110
|
-
</Items>
|
|
111
|
-
<CachedMethods>
|
|
112
|
-
<Quantity>2</Quantity>
|
|
113
|
-
<Items>
|
|
114
|
-
<Method>GET</Method>
|
|
115
|
-
<Method>HEAD</Method>
|
|
116
|
-
</Items>
|
|
117
|
-
</CachedMethods>
|
|
118
|
-
</AllowedMethods>
|
|
119
|
-
<Compress>true</Compress>
|
|
120
|
-
<CachePolicyId>658327ea-f89d-4fab-a63d-7e88639e58f6</CachePolicyId>
|
|
121
|
-
${U}
|
|
122
|
-
</DefaultCacheBehavior>
|
|
123
|
-
${M}
|
|
124
|
-
${H}
|
|
125
|
-
<PriceClass>${L}</PriceClass>
|
|
126
|
-
<Enabled>${q}</Enabled>
|
|
127
|
-
<HttpVersion>http2and3</HttpVersion>
|
|
128
|
-
<IsIPV6Enabled>true</IsIPV6Enabled>
|
|
129
|
-
${F?"<CustomErrorResponses><Quantity>0</Quantity></CustomErrorResponses>":`<CustomErrorResponses>
|
|
130
|
-
<Quantity>1</Quantity>
|
|
131
|
-
<Items>
|
|
132
|
-
<CustomErrorResponse>
|
|
133
|
-
<ErrorCode>403</ErrorCode>
|
|
134
|
-
<ResponsePagePath>/index.html</ResponsePagePath>
|
|
135
|
-
<ResponseCode>200</ResponseCode>
|
|
136
|
-
<ErrorCachingMinTTL>300</ErrorCachingMinTTL>
|
|
137
|
-
</CustomErrorResponse>
|
|
138
|
-
</Items>
|
|
139
|
-
</CustomErrorResponses>`}
|
|
140
|
-
</DistributionConfig>`,V=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/distribution",body:K,headers:{"Content-Type":"application/xml"},returnHeaders:!0}),P=V.body?.Distribution||V.Distribution||V.body||V;return{Id:P.Id,ARN:P.ARN,DomainName:P.DomainName,Status:P.Status,ETag:V.headers?.etag||V.ETag||""}}async createMediaDistributionForS3(J){return this.createDistributionForS3({...J,defaultRootObject:"",mediaDelivery:!0,comment:J.comment??`Media distribution for ${J.bucketName}`})}async listPublicKeys(){let J=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/public-key"});return this.collectionItems(J.PublicKeyList??J,"PublicKeySummary").map((z)=>({Id:String(z.Id),Name:String(z.Name),Comment:z.Comment?String(z.Comment):void 0}))}async createPublicKey(J){if(!/^[A-Za-z0-9_-]{1,128}$/.test(J.name))throw TypeError("CloudFront public key name is invalid");if(!J.encodedKey.includes("BEGIN PUBLIC KEY"))throw TypeError("CloudFront public key must be PEM encoded");let Q=(_)=>_.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">"),z=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/public-key",headers:{"Content-Type":"application/xml"},body:`<PublicKeyConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/"><CallerReference>${Q(J.callerReference??`${Date.now()}-${J.name}`)}</CallerReference><Name>${Q(J.name)}</Name><EncodedKey>${Q(J.encodedKey)}</EncodedKey><Comment>${Q(J.comment??"")}</Comment></PublicKeyConfig>`}),Y=z.PublicKey??z;return{Id:String(Y.Id),Name:String(Y.PublicKeyConfig?.Name??J.name),EncodedKey:String(Y.PublicKeyConfig?.EncodedKey??J.encodedKey),Comment:String(Y.PublicKeyConfig?.Comment??J.comment??"")}}async listKeyGroups(){let J=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/key-group"});return this.collectionItems(J.KeyGroupList??J,"KeyGroupSummary").map((z)=>({Id:String(z.KeyGroup?.Id??z.Id),Name:String(z.KeyGroup?.KeyGroupConfig?.Name??z.KeyGroupConfig?.Name??z.Name),Items:this.collectionItems(z.KeyGroup?.KeyGroupConfig?.Items??z.KeyGroupConfig?.Items??z.Items,"Item").map(String),Comment:z.KeyGroup?.KeyGroupConfig?.Comment??z.KeyGroupConfig?.Comment??z.Comment}))}async createKeyGroup(J){if(!/^[A-Za-z0-9_-]{1,128}$/.test(J.name))throw TypeError("CloudFront key group name is invalid");let Q=[...new Set(J.publicKeyIds)];if(Q.length===0)throw TypeError("CloudFront key group requires at least one public key");let z=($)=>$.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">"),Y=Q.map(($)=>`<Item>${z($)}</Item>`).join(""),_=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/key-group",headers:{"Content-Type":"application/xml"},body:`<KeyGroupConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/"><Name>${z(J.name)}</Name><Items>${Y}</Items><Comment>${z(J.comment??"")}</Comment></KeyGroupConfig>`}),Z=_.KeyGroup??_;return{Id:String(Z.Id),Name:String(Z.KeyGroupConfig?.Name??J.name),Items:Q,Comment:String(Z.KeyGroupConfig?.Comment??J.comment??"")}}static getS3BucketPolicyForCloudFront(J,Q){return{Version:"2012-10-17",Statement:[{Sid:"AllowCloudFrontServicePrincipal",Effect:"Allow",Principal:{Service:"cloudfront.amazonaws.com"},Action:"s3:GetObject",Resource:`arn:aws:s3:::${J}/*`,Condition:{StringEquals:{"AWS:SourceArn":Q}}}]}}async waitForDistributionDeployed(J,Q=60){for(let z=0;z<Q;z++){if((await this.getDistribution(J)).Status==="Deployed")return!0;await new Promise((_)=>setTimeout(_,30000))}return!1}async disableDistribution(J){let Q=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${J}/config`,returnHeaders:!0}),z=Q.headers?.etag||Q.headers?.ETag||"",Y=Q.body?.DistributionConfig||(Q.body?.Enabled!==void 0?Q.body:void 0)||Q.DistributionConfig;if(!Y||Y.Enabled===void 0)throw Error("Failed to get current distribution config");Y.Enabled=!1;let _=this.buildDistributionConfigXml(Y),Z=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${J}/config`,body:_,headers:{"Content-Type":"application/xml","If-Match":z},returnHeaders:!0});return{ETag:Z.headers?.etag||Z.headers?.ETag||Z.ETag||""}}async deleteDistribution(J,Q){let z=Q||"";if(!z){let Y=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${J}`,returnHeaders:!0});z=Y.headers?.etag||Y.headers?.ETag||""}await this.client.request({service:"cloudfront",region:"us-east-1",method:"DELETE",path:`/2020-05-31/distribution/${J}`,headers:{"If-Match":z}})}async waitForDistributionDisabled(J,Q=60){for(let z=0;z<Q;z++){let Y=await this.getDistribution(J);if(Y.Status==="Deployed"&&!Y.Enabled)return!0;await new Promise((_)=>setTimeout(_,30000))}return!1}async removeAlias(J,Q){let z=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${J}/config`,returnHeaders:!0}),Y=z.headers?.etag||z.headers?.ETag||"",_=z.body?.DistributionConfig||(z.body?.Enabled!==void 0?z.body:void 0)||z.DistributionConfig;if(!_||_.Enabled===void 0)throw Error("Failed to get current distribution config");let Z=[];if(_.Aliases?.Items){if(Array.isArray(_.Aliases.Items))Z=_.Aliases.Items;else if(typeof _.Aliases.Items==="object"){let q=_.Aliases.Items.CNAME;if(typeof q==="string")Z=[q];else if(Array.isArray(q))Z=q}}if(Z.length===0)throw Error("Distribution has no aliases to remove");let $=Z.filter((q)=>q!==Q);if($.length===Z.length)throw Error(`Alias ${Q} not found in distribution`);if(_.Aliases.Quantity=$.length,_.Aliases.Items=$.length>0?$:void 0,$.length===0)_.ViewerCertificate={CloudFrontDefaultCertificate:!0,MinimumProtocolVersion:"TLSv1.2_2021"};let j=this.buildDistributionConfigXml(_),L=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${J}/config`,body:j,headers:{"Content-Type":"application/xml","If-Match":Y},returnHeaders:!0});return{ETag:L.headers?.etag||L.headers?.ETag||L.ETag||""}}}
|
|
141
|
-
export{N as nd};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Og as O}from"./chunk-fpm59y25.js";class Q{client;region;constructor(q="us-east-1"){this.region=q,this.client=new O}async describeInstances(q){let z={Action:"DescribeInstances",Version:"2016-11-15"};if(q?.InstanceIds)q.InstanceIds.forEach((G,J)=>{z[`InstanceId.${J+1}`]=G});if(q?.Filters)q.Filters.forEach((G,J)=>{z[`Filter.${J+1}.Name`]=G.Name,G.Values.forEach((K,L)=>{z[`Filter.${J+1}.Value.${L+1}`]=K})});if(q?.MaxResults)z.MaxResults=String(q.MaxResults);if(q?.NextToken)z.NextToken=q.NextToken;let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()}),B=H.DescribeInstancesResponse||H;return{Reservations:this.parseReservations(B.reservationSet?.item),NextToken:B.nextToken}}async getInstance(q){return(await this.describeInstances({InstanceIds:[q]})).Reservations?.[0]?.Instances?.[0]}async getConsoleOutput(q,z){let H={Action:"GetConsoleOutput",Version:"2016-11-15",InstanceId:q};if(z)H.Latest="true";let B=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(H).toString()}),G=B.GetConsoleOutputResponse||B;return{InstanceId:G.instanceId,Output:G.output,Timestamp:G.timestamp}}async getConsoleOutputDecoded(q,z){let H=await this.getConsoleOutput(q,z?.latest);if(!H.Output)return"No console output available yet";let B=Buffer.from(H.Output,"base64").toString("utf-8");if(z?.tailLines)return B.split(`
|
|
2
|
-
`).slice(-z.tailLines).join(`
|
|
3
|
-
`);return B}async describeInstanceStatus(q){let z={Action:"DescribeInstanceStatus",Version:"2016-11-15"};if(q?.InstanceIds)q.InstanceIds.forEach((B,G)=>{z[`InstanceId.${G+1}`]=B});if(q?.IncludeAllInstances)z.IncludeAllInstances="true";if(q?.Filters)q.Filters.forEach((B,G)=>{z[`Filter.${G+1}.Name`]=B.Name,B.Values.forEach((J,K)=>{z[`Filter.${G+1}.Value.${K+1}`]=J})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{InstanceStatuses:this.parseArray(H.instanceStatusSet?.item).map((B)=>({InstanceId:B.instanceId,InstanceState:B.instanceState?{Code:Number.parseInt(B.instanceState.code),Name:B.instanceState.name}:void 0,InstanceStatus:B.instanceStatus?{Status:B.instanceStatus.status,Details:this.parseArray(B.instanceStatus.details?.item).map((G)=>({Name:G.name,Status:G.status}))}:void 0,SystemStatus:B.systemStatus?{Status:B.systemStatus.status,Details:this.parseArray(B.systemStatus.details?.item).map((G)=>({Name:G.name,Status:G.status}))}:void 0}))}}async startInstances(q){let z={Action:"StartInstances",Version:"2016-11-15"};q.forEach((B,G)=>{z[`InstanceId.${G+1}`]=B});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{StartingInstances:this.parseArray(H.instancesSet?.item).map((B)=>({InstanceId:B.instanceId,CurrentState:B.currentState?{Name:B.currentState.name}:void 0,PreviousState:B.previousState?{Name:B.previousState.name}:void 0}))}}async stopInstances(q,z){let H={Action:"StopInstances",Version:"2016-11-15"};if(q.forEach((G,J)=>{H[`InstanceId.${J+1}`]=G}),z)H.Force="true";let B=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(H).toString()});return{StoppingInstances:this.parseArray(B.instancesSet?.item).map((G)=>({InstanceId:G.instanceId,CurrentState:G.currentState?{Name:G.currentState.name}:void 0,PreviousState:G.previousState?{Name:G.previousState.name}:void 0}))}}async rebootInstances(q){let z={Action:"RebootInstances",Version:"2016-11-15"};q.forEach((H,B)=>{z[`InstanceId.${B+1}`]=H}),await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()})}async terminateInstances(q){let z={Action:"TerminateInstances",Version:"2016-11-15"};q.forEach((B,G)=>{z[`InstanceId.${G+1}`]=B});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{TerminatingInstances:this.parseArray(H.instancesSet?.item).map((B)=>({InstanceId:B.instanceId,CurrentState:B.currentState?{Name:B.currentState.name}:void 0,PreviousState:B.previousState?{Name:B.previousState.name}:void 0}))}}async createImage(q){let z={Action:"CreateImage",Version:"2016-11-15",InstanceId:q.InstanceId,Name:q.Name};if(q.Description)z.Description=q.Description;if(q.NoReboot!==void 0)z.NoReboot=String(q.NoReboot);if(q.TagSpecifications)q.TagSpecifications.forEach((G,J)=>{z[`TagSpecification.${J+1}.ResourceType`]=G.ResourceType,G.Tags.forEach((K,L)=>{z[`TagSpecification.${J+1}.Tag.${L+1}.Key`]=K.Key,z[`TagSpecification.${J+1}.Tag.${L+1}.Value`]=K.Value})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{ImageId:(H.CreateImageResponse||H).imageId}}async deregisterImage(q){await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({Action:"DeregisterImage",Version:"2016-11-15",ImageId:q}).toString()})}async describeVpcs(q){let z={Action:"DescribeVpcs",Version:"2016-11-15"};if(q?.VpcIds)q.VpcIds.forEach((B,G)=>{z[`VpcId.${G+1}`]=B});if(q?.Filters)q.Filters.forEach((B,G)=>{z[`Filter.${G+1}.Name`]=B.Name,B.Values.forEach((J,K)=>{z[`Filter.${G+1}.Value.${K+1}`]=J})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{Vpcs:this.parseArray(H.vpcSet?.item).map((B)=>({VpcId:B.vpcId,CidrBlock:B.cidrBlock,State:B.state,DhcpOptionsId:B.dhcpOptionsId,InstanceTenancy:B.instanceTenancy,IsDefault:B.isDefault==="true",Tags:this.parseTags(B.tagSet?.item)}))}}async describeSubnets(q){let z={Action:"DescribeSubnets",Version:"2016-11-15"};if(q?.SubnetIds)q.SubnetIds.forEach((B,G)=>{z[`SubnetId.${G+1}`]=B});if(q?.Filters)q.Filters.forEach((B,G)=>{z[`Filter.${G+1}.Name`]=B.Name,B.Values.forEach((J,K)=>{z[`Filter.${G+1}.Value.${K+1}`]=J})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{Subnets:this.parseArray(H.subnetSet?.item).map((B)=>({SubnetId:B.subnetId,VpcId:B.vpcId,CidrBlock:B.cidrBlock,AvailabilityZone:B.availabilityZone,AvailableIpAddressCount:Number.parseInt(B.availableIpAddressCount),State:B.state,MapPublicIpOnLaunch:B.mapPublicIpOnLaunch==="true",Tags:this.parseTags(B.tagSet?.item)}))}}async describeSecurityGroups(q){let z={Action:"DescribeSecurityGroups",Version:"2016-11-15"};if(q?.GroupIds)q.GroupIds.forEach((B,G)=>{z[`GroupId.${G+1}`]=B});if(q?.GroupNames)q.GroupNames.forEach((B,G)=>{z[`GroupName.${G+1}`]=B});if(q?.Filters)q.Filters.forEach((B,G)=>{z[`Filter.${G+1}.Name`]=B.Name,B.Values.forEach((J,K)=>{z[`Filter.${G+1}.Value.${K+1}`]=J})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{SecurityGroups:this.parseArray(H.securityGroupInfo?.item).map((B)=>({GroupId:B.groupId,GroupName:B.groupName,Description:B.groupDescription,VpcId:B.vpcId,IpPermissions:this.parseIpPermissions(B.ipPermissions?.item),IpPermissionsEgress:this.parseIpPermissions(B.ipPermissionsEgress?.item),Tags:this.parseTags(B.tagSet?.item)}))}}async describeInternetGateways(q){let z={Action:"DescribeInternetGateways",Version:"2016-11-15"};if(q?.InternetGatewayIds)q.InternetGatewayIds.forEach((B,G)=>{z[`InternetGatewayId.${G+1}`]=B});if(q?.Filters)q.Filters.forEach((B,G)=>{z[`Filter.${G+1}.Name`]=B.Name,B.Values.forEach((J,K)=>{z[`Filter.${G+1}.Value.${K+1}`]=J})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{InternetGateways:this.parseArray(H.internetGatewaySet?.item).map((B)=>({InternetGatewayId:B.internetGatewayId,Attachments:this.parseArray(B.attachmentSet?.item).map((G)=>({VpcId:G.vpcId,State:G.state})),Tags:this.parseTags(B.tagSet?.item)}))}}async describeAddresses(q){let z={Action:"DescribeAddresses",Version:"2016-11-15"};if(q?.AllocationIds)q.AllocationIds.forEach((B,G)=>{z[`AllocationId.${G+1}`]=B});if(q?.PublicIps)q.PublicIps.forEach((B,G)=>{z[`PublicIp.${G+1}`]=B});if(q?.Filters)q.Filters.forEach((B,G)=>{z[`Filter.${G+1}.Name`]=B.Name,B.Values.forEach((J,K)=>{z[`Filter.${G+1}.Value.${K+1}`]=J})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{Addresses:this.parseArray(H.addressesSet?.item).map((B)=>({PublicIp:B.publicIp,AllocationId:B.allocationId,AssociationId:B.associationId,InstanceId:B.instanceId,NetworkInterfaceId:B.networkInterfaceId,PrivateIpAddress:B.privateIpAddress,Domain:B.domain,Tags:this.parseTags(B.tagSet?.item)}))}}async allocateAddress(q){let z={Action:"AllocateAddress",Version:"2016-11-15"};if(q?.Domain)z.Domain=q.Domain;if(q?.TagSpecifications)q.TagSpecifications.forEach((B,G)=>{z[`TagSpecification.${G+1}.ResourceType`]=B.ResourceType,B.Tags.forEach((J,K)=>{z[`TagSpecification.${G+1}.Tag.${K+1}.Key`]=J.Key,z[`TagSpecification.${G+1}.Tag.${K+1}.Value`]=J.Value})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{AllocationId:H.allocationId,PublicIp:H.publicIp,Domain:H.domain}}async associateAddress(q){let z={Action:"AssociateAddress",Version:"2016-11-15"};if(q.AllocationId)z.AllocationId=q.AllocationId;if(q.PublicIp)z.PublicIp=q.PublicIp;if(q.InstanceId)z.InstanceId=q.InstanceId;if(q.NetworkInterfaceId)z.NetworkInterfaceId=q.NetworkInterfaceId;if(q.PrivateIpAddress)z.PrivateIpAddress=q.PrivateIpAddress;if(q.AllowReassociation)z.AllowReassociation="true";return{AssociationId:(await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()})).associationId}}async createTags(q){let z={Action:"CreateTags",Version:"2016-11-15"};q.Resources.forEach((H,B)=>{z[`ResourceId.${B+1}`]=H}),q.Tags.forEach((H,B)=>{z[`Tag.${B+1}.Key`]=H.Key,z[`Tag.${B+1}.Value`]=H.Value}),await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()})}async waitForInstanceState(q,z,H){let B=H?.maxWaitMs||300000,G=H?.pollIntervalMs||5000,J=Date.now();while(Date.now()-J<B){let K;try{K=await this.getInstance(q)}catch{K=void 0}if(K?.State?.Name===z)return K;await new Promise((L)=>setTimeout(L,G))}return}async createVpc(q){let z={Action:"CreateVpc",Version:"2016-11-15",CidrBlock:q.CidrBlock};if(q.InstanceTenancy)z.InstanceTenancy=q.InstanceTenancy;if(q.TagSpecifications)q.TagSpecifications.forEach((J,K)=>{z[`TagSpecification.${K+1}.ResourceType`]=J.ResourceType,J.Tags.forEach((L,M)=>{z[`TagSpecification.${K+1}.Tag.${M+1}.Key`]=L.Key,z[`TagSpecification.${K+1}.Tag.${M+1}.Value`]=L.Value})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()}),G=(H.CreateVpcResponse||H).vpc;return{Vpc:G?{VpcId:G.vpcId,CidrBlock:G.cidrBlock,State:G.state,DhcpOptionsId:G.dhcpOptionsId,InstanceTenancy:G.instanceTenancy,IsDefault:G.isDefault==="true",Tags:this.parseTags(G.tagSet?.item)}:void 0}}async createSubnet(q){let z={Action:"CreateSubnet",Version:"2016-11-15",VpcId:q.VpcId,CidrBlock:q.CidrBlock};if(q.AvailabilityZone)z.AvailabilityZone=q.AvailabilityZone;if(q.TagSpecifications)q.TagSpecifications.forEach((J,K)=>{z[`TagSpecification.${K+1}.ResourceType`]=J.ResourceType,J.Tags.forEach((L,M)=>{z[`TagSpecification.${K+1}.Tag.${M+1}.Key`]=L.Key,z[`TagSpecification.${K+1}.Tag.${M+1}.Value`]=L.Value})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()}),G=(H.CreateSubnetResponse||H).subnet;return{Subnet:G?{SubnetId:G.subnetId,VpcId:G.vpcId,CidrBlock:G.cidrBlock,AvailabilityZone:G.availabilityZone,AvailableIpAddressCount:G.availableIpAddressCount?Number.parseInt(G.availableIpAddressCount):void 0,State:G.state,MapPublicIpOnLaunch:G.mapPublicIpOnLaunch==="true",Tags:this.parseTags(G.tagSet?.item)}:void 0}}async modifySubnetAttribute(q){let z={Action:"ModifySubnetAttribute",Version:"2016-11-15",SubnetId:q.SubnetId};if(q.MapPublicIpOnLaunch!==void 0)z["MapPublicIpOnLaunch.Value"]=String(q.MapPublicIpOnLaunch.Value);await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()})}async createSecurityGroup(q){let z={Action:"CreateSecurityGroup",Version:"2016-11-15",GroupName:q.GroupName,GroupDescription:q.Description};if(q.VpcId)z.VpcId=q.VpcId;if(q.TagSpecifications)q.TagSpecifications.forEach((G,J)=>{z[`TagSpecification.${J+1}.ResourceType`]=G.ResourceType,G.Tags.forEach((K,L)=>{z[`TagSpecification.${J+1}.Tag.${L+1}.Key`]=K.Key,z[`TagSpecification.${J+1}.Tag.${L+1}.Value`]=K.Value})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()});return{GroupId:(H.CreateSecurityGroupResponse||H).groupId}}async authorizeSecurityGroupIngress(q){let z={Action:"AuthorizeSecurityGroupIngress",Version:"2016-11-15",GroupId:q.GroupId};this.encodeIpPermissions(z,q.IpPermissions),await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()})}async authorizeSecurityGroupEgress(q){let z={Action:"AuthorizeSecurityGroupEgress",Version:"2016-11-15",GroupId:q.GroupId};this.encodeIpPermissions(z,q.IpPermissions),await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()})}async describeRouteTables(q){let z={Action:"DescribeRouteTables",Version:"2016-11-15"};if(q?.RouteTableIds)q.RouteTableIds.forEach((G,J)=>{z[`RouteTableId.${J+1}`]=G});if(q?.Filters)q.Filters.forEach((G,J)=>{z[`Filter.${J+1}.Name`]=G.Name,G.Values.forEach((K,L)=>{z[`Filter.${J+1}.Value.${L+1}`]=K})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()}),B=H.DescribeRouteTablesResponse||H;return{RouteTables:this.parseArray(B.routeTableSet?.item).map((G)=>({RouteTableId:G.routeTableId,VpcId:G.vpcId,Routes:this.parseArray(G.routeSet?.item).map((J)=>({DestinationCidrBlock:J.destinationCidrBlock,GatewayId:J.gatewayId,NatGatewayId:J.natGatewayId,State:J.state})),Associations:this.parseArray(G.associationSet?.item).map((J)=>({RouteTableAssociationId:J.routeTableAssociationId,SubnetId:J.subnetId,Main:J.main==="true"||J.main===!0})),Tags:this.parseTags(G.tagSet?.item)}))}}async deleteVpc(q){let z={Action:"DeleteVpc",Version:"2016-11-15",VpcId:q};await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()})}async deleteSubnet(q){let z={Action:"DeleteSubnet",Version:"2016-11-15",SubnetId:q};await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()})}async deleteSecurityGroup(q){await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({Action:"DeleteSecurityGroup",Version:"2016-11-15",GroupId:q}).toString()})}async describeNetworkInterfaces(q){let z={Action:"DescribeNetworkInterfaces",Version:"2016-11-15"};if(q?.NetworkInterfaceIds)q.NetworkInterfaceIds.forEach((G,J)=>{z[`NetworkInterfaceId.${J+1}`]=G});if(q?.Filters)q.Filters.forEach((G,J)=>{z[`Filter.${J+1}.Name`]=G.Name,G.Values.forEach((K,L)=>{z[`Filter.${J+1}.Value.${L+1}`]=K})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()}),B=H.DescribeNetworkInterfacesResponse||H;return{NetworkInterfaces:this.parseArray(B.networkInterfaceSet?.item).map((G)=>({NetworkInterfaceId:G.networkInterfaceId,SubnetId:G.subnetId,VpcId:G.vpcId,Status:G.status,Attachment:G.attachment?{AttachmentId:G.attachment.attachmentId,InstanceId:G.attachment.instanceId,Status:G.attachment.status}:void 0}))}}async detachNetworkInterface(q,z){let H={Action:"DetachNetworkInterface",Version:"2016-11-15",AttachmentId:q};if(z)H.Force="true";await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(H).toString()})}async deleteNetworkInterface(q){let z={Action:"DeleteNetworkInterface",Version:"2016-11-15",NetworkInterfaceId:q};await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()})}async describeRegions(){let q={Action:"DescribeRegions",Version:"2016-11-15"},z=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(q).toString()}),H=z.DescribeRegionsResponse||z;return{Regions:this.parseArray(H.regionInfo?.item).map((B)=>({RegionName:B.regionName,Endpoint:B.regionEndpoint}))}}async runInstances(q){let z={Action:"RunInstances",Version:"2016-11-15",ImageId:q.ImageId,InstanceType:q.InstanceType,MinCount:String(q.MinCount),MaxCount:String(q.MaxCount)};if(q.SecurityGroupIds)q.SecurityGroupIds.forEach((G,J)=>{z[`SecurityGroupId.${J+1}`]=G});if(q.SubnetId)z.SubnetId=q.SubnetId;if(q.UserData)z.UserData=q.UserData;if(q.IamInstanceProfile){if(q.IamInstanceProfile.Name)z["IamInstanceProfile.Name"]=q.IamInstanceProfile.Name;if(q.IamInstanceProfile.Arn)z["IamInstanceProfile.Arn"]=q.IamInstanceProfile.Arn}if(q.TagSpecifications)q.TagSpecifications.forEach((G,J)=>{z[`TagSpecification.${J+1}.ResourceType`]=G.ResourceType,G.Tags.forEach((K,L)=>{z[`TagSpecification.${J+1}.Tag.${L+1}.Key`]=K.Key,z[`TagSpecification.${J+1}.Tag.${L+1}.Value`]=K.Value})});let H=await this.client.request({service:"ec2",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(z).toString()}),B=H.RunInstancesResponse||H;return{Instances:this.parseInstances(B.instancesSet?.item||B.instancesSet)}}encodeIpPermissions(q,z){z.forEach((H,B)=>{let G=`IpPermissions.${B+1}`;if(H.IpProtocol!==void 0)q[`${G}.IpProtocol`]=H.IpProtocol;if(H.FromPort!==void 0)q[`${G}.FromPort`]=String(H.FromPort);if(H.ToPort!==void 0)q[`${G}.ToPort`]=String(H.ToPort);if(H.IpRanges)H.IpRanges.forEach((J,K)=>{if(J.CidrIp)q[`${G}.IpRanges.${K+1}.CidrIp`]=J.CidrIp;if(J.Description)q[`${G}.IpRanges.${K+1}.Description`]=J.Description});if(H.Ipv6Ranges)H.Ipv6Ranges.forEach((J,K)=>{if(J.CidrIpv6)q[`${G}.Ipv6Ranges.${K+1}.CidrIpv6`]=J.CidrIpv6;if(J.Description)q[`${G}.Ipv6Ranges.${K+1}.Description`]=J.Description});if(H.UserIdGroupPairs)H.UserIdGroupPairs.forEach((J,K)=>{if(J.GroupId)q[`${G}.Groups.${K+1}.GroupId`]=J.GroupId;if(J.UserId)q[`${G}.Groups.${K+1}.UserId`]=J.UserId;if(J.Description)q[`${G}.Groups.${K+1}.Description`]=J.Description})})}parseArray(q){if(!q)return[];return Array.isArray(q)?q:[q]}parseFirstIpv6Address(q){for(let z of this.parseArray(q))for(let H of this.parseArray(z?.ipv6AddressesSet?.item))if(H?.ipv6Address)return H.ipv6Address;return}parseTags(q){return this.parseArray(q).map((z)=>({Key:z.key,Value:z.value}))}parseReservations(q){return this.parseArray(q).map((z)=>({ReservationId:z.reservationId,Instances:this.parseInstances(z.instancesSet?.item||z.instancesSet)}))}parseInstances(q){return this.parseArray(q).map((z)=>({InstanceId:z.instanceId,ImageId:z.imageId,InstanceType:z.instanceType,State:z.instanceState?{Code:Number.parseInt(z.instanceState.code),Name:z.instanceState.name}:void 0,PrivateIpAddress:z.privateIpAddress,PublicIpAddress:z.ipAddress,Ipv6Address:this.parseFirstIpv6Address(z.networkInterfaceSet?.item),SubnetId:z.subnetId,VpcId:z.vpcId,SecurityGroups:this.parseArray(z.groupSet?.item).map((H)=>({GroupId:H.groupId,GroupName:H.groupName})),Tags:this.parseTags(z.tagSet?.item),LaunchTime:z.launchTime,Placement:z.placement?{AvailabilityZone:z.placement.availabilityZone,Tenancy:z.placement.tenancy}:void 0,Architecture:z.architecture,RootDeviceType:z.rootDeviceType,RootDeviceName:z.rootDeviceName,BlockDeviceMappings:this.parseArray(z.blockDeviceMapping?.item).map((H)=>({DeviceName:H.deviceName,Ebs:H.ebs?{VolumeId:H.ebs.volumeId,Status:H.ebs.status,AttachTime:H.ebs.attachTime,DeleteOnTermination:H.ebs.deleteOnTermination==="true"}:void 0})),IamInstanceProfile:z.iamInstanceProfile?{Arn:z.iamInstanceProfile.arn,Id:z.iamInstanceProfile.id}:void 0}))}parseIpPermissions(q){return this.parseArray(q).map((z)=>({IpProtocol:z.ipProtocol,FromPort:z.fromPort?Number.parseInt(z.fromPort):void 0,ToPort:z.toPort?Number.parseInt(z.toPort):void 0,IpRanges:this.parseArray(z.ipRanges?.item).map((H)=>({CidrIp:H.cidrIp,Description:H.description})),Ipv6Ranges:this.parseArray(z.ipv6Ranges?.item).map((H)=>({CidrIpv6:H.cidrIpv6,Description:H.description})),UserIdGroupPairs:this.parseArray(z.groups?.item).map((H)=>({GroupId:H.groupId,UserId:H.userId,Description:H.description}))}))}}
|
|
4
|
-
export{Q as Xe};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{cd as a}from"./chunk-hm08xdxf.js";import"./chunk-fpm59y25.js";import"./chunk-mh0kdzqp.js";export{a as STSClient};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ag as a,bg as b,cg as c,dg as d,eg as e,fg as f,gg as g,hg as h,ig as i}from"./chunk-ynjvbphf.js";import"./chunk-ry030a6b.js";import"./chunk-jpjamjey.js";import"./chunk-mh0kdzqp.js";export{i as synchronizeConfiguredConfiguration,c as serializeDotenv,b as parseDotenv,d as LocalEncryptedConfigurationBackend,g as ExternalConfigurationBackend,a as ConfigurationStore,h as ConfigurationService,f as AwsSsmConfigurationBackend,e as AwsSecretsManagerConfigurationBackend};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Og as _}from"./chunk-fpm59y25.js";class ${client;region;constructor(j="us-east-1",q){this.region=j,this.client=new _(void 0,{profile:q})}async createStack(j){let q={Action:"CreateStack",StackName:j.stackName,Version:"2010-05-15"};if(j.templateBody)q.TemplateBody=j.templateBody;else if(j.templateUrl)q.TemplateURL=j.templateUrl;else throw Error("Either templateBody or templateUrl must be provided");if(j.parameters)j.parameters.forEach((z,H)=>{q[`Parameters.member.${H+1}.ParameterKey`]=z.ParameterKey,q[`Parameters.member.${H+1}.ParameterValue`]=z.ParameterValue});if(j.capabilities)j.capabilities.forEach((z,H)=>{q[`Capabilities.member.${H+1}`]=z});if(j.roleArn)q.RoleARN=j.roleArn;if(j.tags)j.tags.forEach((z,H)=>{q[`Tags.member.${H+1}.Key`]=z.Key,q[`Tags.member.${H+1}.Value`]=z.Value});if(j.timeoutInMinutes)q.TimeoutInMinutes=j.timeoutInMinutes;if(j.onFailure)q.OnFailure=j.onFailure;let G=await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(q).toString()});return{StackId:G.StackId||G.CreateStackResult?.StackId}}async updateStack(j){let q={Action:"UpdateStack",StackName:j.stackName,Version:"2010-05-15"};if(j.templateBody)q.TemplateBody=j.templateBody;else if(j.templateUrl)q.TemplateURL=j.templateUrl;if(j.parameters)j.parameters.forEach((z,H)=>{if(q[`Parameters.member.${H+1}.ParameterKey`]=z.ParameterKey,z.UsePreviousValue)q[`Parameters.member.${H+1}.UsePreviousValue`]="true";else q[`Parameters.member.${H+1}.ParameterValue`]=z.ParameterValue});if(j.capabilities)j.capabilities.forEach((z,H)=>{q[`Capabilities.member.${H+1}`]=z});if(j.roleArn)q.RoleARN=j.roleArn;if(j.tags)j.tags.forEach((z,H)=>{q[`Tags.member.${H+1}.Key`]=z.Key,q[`Tags.member.${H+1}.Value`]=z.Value});let G=await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(q).toString()});return{StackId:G.StackId||G.UpdateStackResult?.StackId}}async deleteStack(j,q,G){let z={Action:"DeleteStack",StackName:j,Version:"2010-05-15"};if(q)z.RoleARN=q;if(G&&G.length>0)G.forEach((H,Q)=>{z[`RetainResources.member.${Q+1}`]=H});await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(z).toString()})}async describeStacks(j={}){let q={Action:"DescribeStacks",Version:"2010-05-15"};if(j.stackName)q.StackName=j.stackName;let G=await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(q).toString()});return{Stacks:this.parseStacksResponse(G)}}async describeStackEvents(j){let q={Action:"DescribeStackEvents",StackName:j,Version:"2010-05-15"},G=await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(q).toString()});return{StackEvents:this.parseStackEvents(G)}}async listStackResources(j){let q={Action:"ListStackResources",StackName:j,Version:"2010-05-15"},z=(await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(q).toString()}))?.ListStackResourcesResult?.StackResourceSummaries?.member,H=[];if(z)H=Array.isArray(z)?z:[z];return{StackResourceSummaries:H}}async waitForStack(j,q){let G={"stack-create-complete":["CREATE_COMPLETE"],"stack-update-complete":["UPDATE_COMPLETE"],"stack-delete-complete":["DELETE_COMPLETE"]},z=["CREATE_FAILED","ROLLBACK_FAILED","ROLLBACK_COMPLETE","UPDATE_ROLLBACK_FAILED","UPDATE_ROLLBACK_COMPLETE"],H=G[q],Q=360,J=0;while(J<360)try{let I=await this.describeStacks({stackName:j});if(I.Stacks.length===0){if(q==="stack-delete-complete")return;if(J%10===0)console.log(`[waitForStack] Attempt ${J}: Stack not visible yet`);await new Promise((O)=>setTimeout(O,2000)),J++;continue}let L=I.Stacks[0];if(J%10===0)console.log(`[waitForStack] Attempt ${J}: Status = ${L.StackStatus}${L.StackStatusReason?` (${L.StackStatusReason})`:""}`);if(H.includes(L.StackStatus))return;if((q==="stack-create-complete"||q==="stack-update-complete")&&(L.StackStatus==="DELETE_IN_PROGRESS"||L.StackStatus==="DELETE_COMPLETE")){console.log("[waitForStack] Stack is being deleted (creation/update failed)");let O="";try{let U=await this.describeStackEvents(j);console.log("[waitForStack] Stack events (most recent first):");for(let X of U.StackEvents.slice(0,15))if(X.ResourceStatus.includes("FAILED")||X.ResourceStatusReason){if(console.log(` ${X.LogicalResourceId}: ${X.ResourceStatus} - ${X.ResourceStatusReason||"No reason provided"}`),X.ResourceStatus.includes("FAILED")&&X.ResourceStatusReason&&!O)O=X.ResourceStatusReason}}catch{}let V=O||L.StackStatusReason||"Check CloudFormation console for details.";throw Error(`Stack creation/update failed - stack is being deleted. Reason: ${V}`)}if(L.StackStatus==="DELETE_FAILED"&&q==="stack-delete-complete"){let O=Error("Stack deletion failed - may have resources that need to be retained");throw O.code="DELETE_FAILED",O.stackStatus=L.StackStatus,O.statusReason=L.StackStatusReason,O}if(z.includes(L.StackStatus))throw Error(`Stack reached failure status: ${L.StackStatus}`);await new Promise((O)=>setTimeout(O,5000)),J++}catch(I){if(q==="stack-delete-complete"&&I.message?.includes("does not exist"))return;if(q==="stack-create-complete"&&I.message?.includes("does not exist")){if(J%10===0)console.log(`[waitForStack] Attempt ${J}: Stack does not exist (error), retrying...`);await new Promise((L)=>setTimeout(L,2000)),J++;continue}throw console.log(`[waitForStack] Unexpected error: ${I.message}`),I}throw console.log(`[waitForStack] Timeout after ${J} attempts`),Error(`Timeout waiting for stack to reach ${q}`)}async validateTemplate(j){let q={Action:"ValidateTemplate",TemplateBody:j,Version:"2010-05-15"};return await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(q).toString()})}async listStacks(j){let q={Action:"ListStacks",Version:"2010-05-15"};if(j)j.forEach((I,L)=>{q[`StackStatusFilter.member.${L+1}`]=I});let G=await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(q).toString()}),z=G.ListStacksResponse||G,H=z.ListStacksResult||z,Q=H.StackSummaries?.member||H.StackSummaries||[];return{StackSummaries:(Array.isArray(Q)?Q:Q?[Q]:[]).map((I)=>({StackId:I.StackId||"",StackName:I.StackName||"",TemplateDescription:I.TemplateDescription,CreationTime:I.CreationTime||"",LastUpdatedTime:I.LastUpdatedTime,DeletionTime:I.DeletionTime,StackStatus:I.StackStatus||""}))}}async createChangeSet(j){let q={Action:"CreateChangeSet",StackName:j.stackName,ChangeSetName:j.changeSetName,Version:"2010-05-15"};if(j.templateBody)q.TemplateBody=j.templateBody;else if(j.templateUrl)q.TemplateURL=j.templateUrl;if(j.parameters)j.parameters.forEach((z,H)=>{q[`Parameters.member.${H+1}.ParameterKey`]=z.ParameterKey,q[`Parameters.member.${H+1}.ParameterValue`]=z.ParameterValue});if(j.capabilities)j.capabilities.forEach((z,H)=>{q[`Capabilities.member.${H+1}`]=z});if(j.changeSetType)q.ChangeSetType=j.changeSetType;let G=await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(q).toString()});return{Id:G.Id,StackId:G.StackId}}async describeChangeSet(j,q){let G={Action:"DescribeChangeSet",StackName:j,ChangeSetName:q,Version:"2010-05-15"};return await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(G).toString()})}async executeChangeSet(j,q){let G={Action:"ExecuteChangeSet",StackName:j,ChangeSetName:q,Version:"2010-05-15"};await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(G).toString()})}async deleteChangeSet(j,q){let G={Action:"DeleteChangeSet",StackName:j,ChangeSetName:q,Version:"2010-05-15"};await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(G).toString()})}async getStackOutputs(j){let q=await this.describeStacks({stackName:j});if(!q.Stacks||q.Stacks.length===0)throw Error(`Stack ${j} not found`);let G=q.Stacks[0],z={};if(G.Outputs)for(let H of G.Outputs)z[H.OutputKey]=H.OutputValue;return z}async getTemplate(j){let q={Action:"GetTemplate",StackName:j,Version:"2010-05-15"},G=await this.client.request({service:"cloudformation",region:this.region,method:"POST",path:"/",body:new URLSearchParams(q).toString()});return{TemplateBody:G?.GetTemplateResult?.TemplateBody||G?.TemplateBody||""}}parseStacksResponse(j){let q=[],G=j?.DescribeStacksResult?.Stacks?.member||j?.Stacks?.member||j?.Stacks||j;if(G&&!Array.isArray(G))G=[G];if(Array.isArray(G)){for(let z of G)if(z.StackId||z.StackName){let H;if(z.Outputs?.member)H=(Array.isArray(z.Outputs.member)?z.Outputs.member:[z.Outputs.member]).map((J)=>({OutputKey:J.OutputKey,OutputValue:J.OutputValue,Description:J.Description,ExportName:J.ExportName}));q.push({StackId:z.StackId,StackName:z.StackName,StackStatus:z.StackStatus,CreationTime:z.CreationTime,LastUpdatedTime:z.LastUpdatedTime,StackStatusReason:z.StackStatusReason,Outputs:H})}}else if(j.StackId)q.push({StackId:j.StackId,StackName:j.StackName,StackStatus:j.StackStatus,CreationTime:j.CreationTime,LastUpdatedTime:j.LastUpdatedTime});return q}parseStackEvents(j){let q=[],G=j?.DescribeStackEventsResult?.StackEvents?.member||j?.StackEvents?.member||j?.StackEvents||[];if(G&&!Array.isArray(G))G=[G];for(let z of G)if(z.LogicalResourceId)q.push({Timestamp:z.Timestamp,ResourceType:z.ResourceType,LogicalResourceId:z.LogicalResourceId,ResourceStatus:z.ResourceStatus,ResourceStatusReason:z.ResourceStatusReason});return q}async waitForStackWithProgress(j,q,G){let z={"stack-create-complete":["CREATE_COMPLETE"],"stack-update-complete":["UPDATE_COMPLETE"],"stack-delete-complete":["DELETE_COMPLETE"]},H=["CREATE_FAILED","ROLLBACK_FAILED","ROLLBACK_COMPLETE","UPDATE_ROLLBACK_FAILED","UPDATE_ROLLBACK_COMPLETE"],Q=z[q],J=360,I=0,L=new Set;while(I<360)try{if(G)try{let X=[...(await this.describeStackEvents(j)).StackEvents||[]].reverse();for(let Y of X){let Z=`${Y.LogicalResourceId}-${Y.ResourceStatus}-${Y.Timestamp}`;if(!L.has(Z))L.add(Z),G({resourceId:Y.LogicalResourceId,resourceType:Y.ResourceType,status:Y.ResourceStatus,reason:Y.ResourceStatusReason,timestamp:Y.Timestamp})}}catch{}let O=await this.describeStacks({stackName:j});if(O.Stacks.length===0){if(q==="stack-delete-complete")return;await new Promise((U)=>setTimeout(U,2000)),I++;continue}let V=O.Stacks[0];if(Q.includes(V.StackStatus))return;if(V.StackStatus==="DELETE_FAILED"&&q==="stack-delete-complete"){let U=Error("Stack deletion failed - may have resources that need to be retained");throw U.code="DELETE_FAILED",U.stackStatus=V.StackStatus,U.statusReason=V.StackStatusReason,U}if(H.includes(V.StackStatus))throw Error(`Stack reached failure status: ${V.StackStatus}`);await new Promise((U)=>setTimeout(U,3000)),I++}catch(O){if(q==="stack-delete-complete"&&O.message?.includes("does not exist"))return;if(q==="stack-create-complete"&&O.message?.includes("does not exist")){await new Promise((V)=>setTimeout(V,2000)),I++;continue}throw O}throw Error(`Timeout waiting for stack to reach ${q}`)}async waitForStackComplete(j,q=120,G=5000){let z=["CREATE_COMPLETE","UPDATE_COMPLETE","DELETE_COMPLETE"],H=["CREATE_FAILED","UPDATE_FAILED","DELETE_FAILED","ROLLBACK_COMPLETE","ROLLBACK_FAILED","UPDATE_ROLLBACK_COMPLETE","UPDATE_ROLLBACK_FAILED"];for(let Q=0;Q<q;Q++)try{let J=await this.describeStacks({stackName:j});if(J.Stacks.length===0)return{success:!0,status:"DELETE_COMPLETE"};let I=J.Stacks[0],L=I.StackStatus;if(z.includes(L))return{success:!0,status:L};if(H.includes(L))return{success:!1,status:L,reason:I.StackStatusReason};await new Promise((O)=>setTimeout(O,G))}catch(J){if(J.message?.includes("does not exist"))return{success:!0,status:"DELETE_COMPLETE"};throw J}return{success:!1,status:"TIMEOUT",reason:"Timeout waiting for stack operation"}}}
|
|
2
|
-
export{$ as Uf};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Og as v}from"./chunk-fpm59y25.js";class B{client;region;constructor(k="us-east-1",q){this.region=k,this.client=new v(void 0,{profile:q})}async getCallerIdentity(){let k=await this.client.request({service:"sts",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"Action=GetCallerIdentity&Version=2011-06-15"});if(typeof k==="string"){let w=k.match(/<Account>(\d+)<\/Account>/),x=k.match(/<UserId>([^<]+)<\/UserId>/),z=k.match(/<Arn>([^<]+)<\/Arn>/);return{Account:w?.[1],UserId:x?.[1],Arn:z?.[1]}}let q=k?.GetCallerIdentityResponse?.GetCallerIdentityResult||k?.GetCallerIdentityResult;if(q)return{Account:String(q.Account),UserId:q.UserId,Arn:q.Arn};if(k?.Account)return{Account:String(k.Account),UserId:k.UserId,Arn:k.Arn};return{Account:void 0,UserId:void 0,Arn:void 0}}}
|
|
2
|
-
export{B as cd};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Qe as L}from"./chunk-ax9mr6wm.js";var _="\x00";function X(R,E){if(R==="*"||R==="**")return!0;let D=R.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"\x01").replace(/\*/g,"[^/]*").replace(/\u0001/g,".*");return new RegExp(`^${D}$`).test(E)}function A(R,E){if(R.startsWith("*.")){let D=R.slice(1);return E.endsWith(D)&&E.length>D.length}return R===E}function W(R,E){if(R.enabled===!1)return!1;if(R.methods?.length&&!R.methods.some((D)=>D.toUpperCase()===E.method.toUpperCase()))return!1;if(R.path&&!X(R.path,E.path))return!1;if(R.host&&!A(R.host,E.host??""))return!1;return!0}function Z(R,E){let D=R.key??{source:"ip"},F=D.fallbackToIp!==!1,H;if(D.source==="ip")H=E.ip;else if(D.source==="global")H="global";else if(D.source==="host")H=E.host??"";else if(D.source==="path")H=E.path;else if(D.source==="header")H=D.name?E.headers?.[D.name.toLowerCase()]:void 0;else if(D.source==="cookie")H=D.name?E.cookies?.[D.name]:void 0;if(!H&&D.source!=="global")H=F?E.ip:"__missing__";return`${R.id}\x00${H}`}class C{clock;maxTrackedKeys;buckets=new Map;windows=new Map;rules;constructor(R,E=()=>Date.now(),D=1e5){this.clock=E;this.maxTrackedKeys=D;this.rules=[...R].sort((F,H)=>(F.priority??0)-(H.priority??0))}check(R){let E=this.clock(),D=this.rules.filter((j)=>W(j,R)),F;for(let j of D){let z=this.test(j,R,E);if(z.allowed)continue;if(!F||$(z.action)>$(F.action))F=z}if(F)return F;let H={action:"allow",allowed:!0};for(let j of D){let z=this.consume(j,R,E);if(z.remaining!=null&&(H.remaining??1/0)>z.remaining)H=z}return H}test(R,E,D){let F=Z(R,E);if((R.algorithm??"token_bucket")==="token_bucket"){let j=R.burst??R.limit,z=this.buckets.get(F),B=z?Math.min(j,z.tokens+this.refill(R,D-z.updatedAt)):j;if(B>=1)return{action:"allow",allowed:!0};return this.blocked(R,F,0,this.msPerToken(R)*(1-B),D)}let H=(this.windows.get(F)?.hits??[]).filter((j)=>j>D-R.windowMs);if(H.length<R.limit)return{action:"allow",allowed:!0};return this.blocked(R,F,0,H[0]+R.windowMs-D,D)}peek(R){let E=this.clock();for(let D of this.rules){if(!W(D,R))continue;let F=this.test(D,R,E);if(!F.allowed)return F}return{action:"allow",allowed:!0}}msPerToken(R){return R.windowMs/Math.max(1,R.limit)}refill(R,E){return Math.max(0,E)/this.msPerToken(R)}blocked(R,E,D,F,H){let j=R.action??"deny";return{action:j,allowed:j==="allow"||j==="log",ruleId:R.id,limit:R.limit,remaining:D,retryAfterMs:Math.max(0,Math.ceil(F)),resetAt:H+Math.max(0,F),key:E}}consume(R,E,D){let F=Z(R,E);if((R.algorithm??"token_bucket")==="token_bucket"){let J=R.burst??R.limit,V=this.buckets.get(F)??{tokens:J,updatedAt:D},Q=Math.min(J,V.tokens+this.refill(R,D-V.updatedAt));if(Q<1)return this.buckets.set(F,{tokens:Q,updatedAt:D}),this.blocked(R,F,0,this.msPerToken(R)*(1-Q),D);return this.evictIfNeeded(this.buckets),this.buckets.set(F,{tokens:Q-1,updatedAt:D}),{action:"allow",allowed:!0,ruleId:R.id,limit:J,remaining:Math.floor(Q-1),resetAt:D+this.msPerToken(R)*(J-(Q-1)),key:F}}let j=this.windows.get(F)??{hits:[]},z=D-R.windowMs,B=j.hits.filter((J)=>J>z);if(B.length>=R.limit)return this.windows.set(F,{hits:B}),this.blocked(R,F,0,B[0]+R.windowMs-D,D);return B.push(D),this.evictIfNeeded(this.windows),this.windows.set(F,{hits:B}),{action:"allow",allowed:!0,ruleId:R.id,limit:R.limit,remaining:R.limit-B.length,resetAt:B[0]+R.windowMs,key:F}}evictIfNeeded(R){if(R.size<this.maxTrackedKeys)return;let E=R.size-this.maxTrackedKeys+1,D=0;for(let F of R.keys())if(R.delete(F),++D>=E)break}sweep(){let R=this.clock(),E=0;for(let[D,F]of this.windows){let H=D.split("\x00")[0],j=this.rules.find((z)=>z.id===H);if(!j){this.windows.delete(D),E++;continue}if(F.hits.every((z)=>z<=R-j.windowMs))this.windows.delete(D),E++}for(let[D,F]of this.buckets){let H=D.split("\x00")[0],j=this.rules.find((z)=>z.id===H);if(!j||R-F.updatedAt>j.windowMs*2)this.buckets.delete(D),E++}return E}get trackedKeys(){return this.buckets.size+this.windows.size}}function $(R){return{allow:0,log:1,throttle:2,challenge:3,deny:4}[R]}function O(R){let E={};if(R.limit!=null)E["ratelimit-limit"]=String(R.limit);if(R.remaining!=null)E["ratelimit-remaining"]=String(R.remaining);if(R.resetAt!=null)E["ratelimit-reset"]=String(Math.max(0,Math.ceil((R.resetAt-Date.now())/1000)));if(!R.allowed&&R.retryAfterMs!=null)E["retry-after"]=String(Math.max(1,Math.ceil(R.retryAfterMs/1000)));return E}function T(){return[{id:"global-ip",limit:600,windowMs:60000,burst:100,key:{source:"ip"},action:"deny",priority:100},{id:"api-ip",limit:120,windowMs:60000,burst:30,path:"/api/**",key:{source:"ip"},action:"deny",priority:50},{id:"auth-ip",limit:10,windowMs:60000,algorithm:"sliding_window",path:"/auth/**",methods:["POST"],key:{source:"ip"},action:"challenge",priority:10}]}var G="protection.controls",U=24,N=4,P={ipRules:{allow:[],block:[]}};function Y(R,E){if(!R?.enabled)return;return new Date(R.expiresAt).getTime()>E.getTime()?R:void 0}function I(R,E){let D=Number.isFinite(R)?Number(R):E;return Math.min(U,Math.max(0.25,D))}var K=500;class S{controlPlane;options;constructor(R,E={}){this.controlPlane=R;this.options=E}now(){return this.options.now?.()??new Date}read(){let R=this.controlPlane.getSetting(G);if(!R||typeof R!=="object"||Array.isArray(R))return{...P,ipRules:{allow:[],block:[]}};let E=R;return{attackMode:E.attackMode,mitigationPause:E.mitigationPause,ipRules:{allow:Array.isArray(E.ipRules?.allow)?E.ipRules.allow:[],block:Array.isArray(E.ipRules?.block)?E.ipRules.block:[]},updatedAt:E.updatedAt}}write(R){let E={...R,updatedAt:this.now().toISOString()};return this.controlPlane.setSetting(G,E),E}raw(){return this.read()}current(){let R=this.now(),E=this.read();return{attackMode:Y(E.attackMode,R),mitigationPause:Y(E.mitigationPause,R),ipRules:E.ipRules}}enableAttackMode(R){let E=this.now(),D={enabled:!0,startedAt:E.toISOString(),expiresAt:new Date(E.getTime()+I(R.hours,N)*3600000).toISOString(),reason:R.reason.trim()||"Attack mode enabled by an operator.",actorId:R.actorId};return this.write({...this.read(),attackMode:D}),D}disableAttackMode(){let R=this.read();if(!R.attackMode?.enabled)return!1;return this.write({...R,attackMode:{...R.attackMode,enabled:!1}}),!0}pauseMitigations(R){let E=R.reason.trim();if(!E)throw Error("Pausing mitigations requires a reason: you are liable for the traffic it admits.");let D=this.now(),F={enabled:!0,startedAt:D.toISOString(),expiresAt:new Date(D.getTime()+I(R.hours,U)*3600000).toISOString(),reason:E,actorId:R.actorId};return this.write({...this.read(),mitigationPause:F}),F}resumeMitigations(){let R=this.read();if(!R.mitigationPause?.enabled)return!1;return this.write({...R,mitigationPause:{...R.mitigationPause,enabled:!1}}),!0}addIpRule(R,E){let D=E.trim();if(!L(D))throw Error(`Not a valid IP or CIDR: ${E}`);let F=this.read(),H={...F.ipRules,[R]:[...new Set([...F.ipRules[R],D])]};if(H[R].length>K)throw Error(`At most ${K} ${R} rules are supported.`);let j=R==="allow"?"block":"allow";return H[j]=H[j].filter((z)=>z!==D),this.write({...F,ipRules:H}),H}removeIpRule(R,E){let D=this.read(),F={...D.ipRules,[R]:D.ipRules[R].filter((H)=>H!==E.trim())};return this.write({...D,ipRules:F}),F}}function b(R){if(R.mitigationPause)return{attackMode:!!R.attackMode,mitigationPaused:!0,summary:`Automatic mitigation is paused until ${R.mitigationPause.expiresAt}. All traffic is being served and billed.`,expiresAt:R.mitigationPause.expiresAt};if(R.attackMode)return{attackMode:!0,mitigationPaused:!1,summary:`Attack mode is on until ${R.attackMode.expiresAt}. Every visitor is being challenged.`,expiresAt:R.attackMode.expiresAt};return{attackMode:!1,mitigationPaused:!1,summary:"Protection is in its normal posture."}}function m(R,E){if(E.mitigationPause)return R.map((D)=>({...D,enabled:!1}));if(!E.attackMode)return[...R];return R.map((D)=>({...D,action:D.action==="deny"?"deny":"challenge",burst:Math.max(1,Math.min(D.burst??D.limit,5))}))}function x(R,E){let D=[...new Set([...R.allowlist??[],...E.ipRules.allow])],F=[...new Set([...R.blocklist??[],...E.ipRules.block])];if(E.mitigationPause)return{...R,allowlist:D,blocklist:F,monitorOnly:!0};if(!E.attackMode)return{...R,allowlist:D,blocklist:F};let H=R.thresholds??{};return{...R,allowlist:D,blocklist:F,thresholds:{...H,newConnectionsPerSecond:Math.max(1,Math.floor((H.newConnectionsPerSecond??50)/5)),concurrentPerSource:Math.max(1,Math.floor((H.concurrentPerSource??100)/5))}}}function f(R,E){let D=R?.infrastructure?.compute;if(!D||D.ddos===!1)return R;let F=typeof D.ddos==="object"&&D.ddos!==null?D.ddos:{};return{...R,infrastructure:{...R.infrastructure,compute:{...D,ddos:x(F,E)}}}}export{_ as a,X as b,W as c,Z as d,C as e,O as f,T as g,G as h,U as i,N as j,S as k,b as l,m,x as n,f as o};
|