@stacksjs/ts-cloud 0.16.93 → 0.16.94
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aws/index.js +1 -1
- package/dist/bin/{chunk-eb591jvz.js → chunk-1g2bnvz2.js} +1 -1
- package/dist/bin/{chunk-v72zwetk.js → chunk-d892pf66.js} +38 -38
- package/dist/bin/{chunk-00arzt4m.js → chunk-x9pqayv4.js} +1 -1
- package/dist/bin/cli.js +4 -4
- package/dist/bin/dashboard-server.js +1 -1
- package/dist/{chunk-zwayp7fz.js → chunk-1kagq9vp.js} +2 -2
- package/dist/{chunk-72p2tdpe.js → chunk-316cbffs.js} +105 -105
- package/dist/{chunk-sjfc9my3.js → chunk-3t5a5gr2.js} +5 -5
- package/dist/{chunk-1087xz1v.js → chunk-4afz3x6w.js} +14 -14
- package/dist/{chunk-fne338jr.js → chunk-4bysqvjh.js} +7 -7
- package/dist/{chunk-zjkxhvn0.js → chunk-71p77ycz.js} +93 -93
- package/dist/{chunk-hcbrgyfz.js → chunk-7y1pknej.js} +2 -2
- package/dist/{chunk-q7yf28cc.js → chunk-7zjf2493.js} +1 -1
- package/dist/chunk-92tv9xar.js +1 -0
- package/dist/{chunk-a77mhcs7.js → chunk-93xknw91.js} +3 -3
- package/dist/{chunk-cjm5j58y.js → chunk-bxn4n4qa.js} +146 -146
- package/dist/{chunk-xs9m0v31.js → chunk-bxq80y73.js} +4 -4
- package/dist/{chunk-1psh3mhm.js → chunk-byt4re1c.js} +1 -1
- package/dist/chunk-bzdfx427.js +138 -0
- package/dist/{chunk-by7hejhg.js → chunk-cjqw4ns4.js} +2 -2
- package/dist/chunk-cq34675f.js +1 -0
- package/dist/chunk-jntyd5zv.js +2 -0
- package/dist/{chunk-zy3kr4s2.js → chunk-kken64a9.js} +3 -3
- package/dist/chunk-m580e9rp.js +1 -0
- package/dist/{chunk-fe6m7wb0.js → chunk-n6tgqd7d.js} +19 -19
- package/dist/{chunk-tpvmpmxj.js → chunk-p1agrrnq.js} +2 -2
- package/dist/chunk-q1a389m2.js +1 -0
- package/dist/{chunk-qra9k26f.js → chunk-r2gtxb7n.js} +1 -1
- package/dist/{chunk-h6kptkce.js → chunk-sp0ne2ax.js} +2 -2
- package/dist/{chunk-c6kb5c5v.js → chunk-stqg97mh.js} +4 -4
- package/dist/{chunk-kcem6dzk.js → chunk-tes38y8x.js} +2 -2
- package/dist/{chunk-7d9ek8rc.js → chunk-vaczx33v.js} +4 -4
- package/dist/chunk-vpce5x9x.js +1 -0
- package/dist/chunk-w2gsveze.js +1 -0
- package/dist/{chunk-4m5gpp6w.js → chunk-wggeew90.js} +5 -5
- package/dist/{chunk-jz6dacx1.js → chunk-wnevarf9.js} +2 -2
- package/dist/{chunk-sxqe8e9c.js → chunk-x1k1sbgf.js} +7 -7
- package/dist/{chunk-byr76jcy.js → chunk-xa2ahxxa.js} +19 -19
- package/dist/{chunk-9f18pebj.js → chunk-z1087cap.js} +5 -5
- package/dist/chunk-z5dqpsek.js +1 -0
- package/dist/{chunk-x7cnfn7y.js → chunk-zpkf2jt2.js} +2 -2
- package/dist/deploy/index.js +1 -1
- package/dist/dns/index.js +1 -1
- package/dist/drivers/index.d.ts +2 -2
- package/dist/drivers/index.js +1 -1
- package/dist/drivers/shared/rpx-gateway.d.ts +14 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +37 -37
- package/dist/mail/index.js +2 -2
- package/dist/operations/index.js +1 -1
- package/dist/protection/index.js +1 -1
- package/dist/spend/index.js +1 -1
- package/dist/ui/404.html +1 -1
- package/dist/ui/accept-invitation.html +1 -1
- package/dist/ui/access-denied.html +1 -1
- package/dist/ui/account/automation.html +6 -6
- package/dist/ui/account/security.html +2 -2
- package/dist/ui/applications/compose.html +6 -6
- package/dist/ui/applications/new.html +2 -2
- package/dist/ui/data/backups.html +6 -6
- package/dist/ui/data/services.html +6 -6
- package/dist/ui/data/volumes.html +6 -6
- package/dist/ui/index.html +6 -6
- package/dist/ui/infrastructure/topology.html +5 -5
- package/dist/ui/integrations.html +2 -2
- package/dist/ui/operations/alerts.html +6 -6
- package/dist/ui/operations/configuration.html +6 -6
- package/dist/ui/operations/jobs.html +5 -5
- package/dist/ui/operations/maintenance.html +6 -6
- package/dist/ui/operations/observability.html +6 -6
- package/dist/ui/operations/previews.html +6 -6
- package/dist/ui/operations/queue.html +6 -6
- package/dist/ui/operations/regions.html +6 -6
- package/dist/ui/operations/releases.html +5 -5
- package/dist/ui/operations/spend.html +6 -6
- package/dist/ui/operations/workloads.html +6 -6
- package/dist/ui/security.html +2 -2
- package/dist/ui/server/actions.html +5 -5
- package/dist/ui/server/activity.html +1 -1
- package/dist/ui/server/capacity.html +5 -5
- package/dist/ui/server/database.html +6 -6
- package/dist/ui/server/deployments.html +5 -5
- package/dist/ui/server/diagnostics.html +2 -2
- package/dist/ui/server/firewall.html +6 -6
- package/dist/ui/server/fleet.html +6 -6
- package/dist/ui/server/logs.html +6 -6
- package/dist/ui/server/metrics.html +5 -5
- package/dist/ui/server/security.html +2 -2
- package/dist/ui/server/services.html +2 -2
- package/dist/ui/server/sites.html +6 -6
- package/dist/ui/server/ssh-keys.html +6 -6
- package/dist/ui/server/team.html +6 -6
- package/dist/ui/server/terminal.html +2 -2
- package/dist/ui/serverless/alarms.html +6 -6
- package/dist/ui/serverless/assets.html +2 -2
- package/dist/ui/serverless/cost.html +2 -2
- package/dist/ui/serverless/data.html +6 -6
- package/dist/ui/serverless/deployments.html +2 -2
- package/dist/ui/serverless/firewall.html +1 -1
- package/dist/ui/serverless/functions.html +6 -6
- package/dist/ui/serverless/logs.html +6 -6
- package/dist/ui/serverless/metrics.html +2 -2
- package/dist/ui/serverless/queues.html +6 -6
- package/dist/ui/serverless/secrets.html +6 -6
- package/dist/ui/serverless/traces.html +6 -6
- package/dist/ui/serverless.html +6 -6
- package/package.json +3 -3
- package/dist/chunk-0v77443p.js +0 -1
- package/dist/chunk-4khjjgd3.js +0 -1
- package/dist/chunk-872fdms3.js +0 -1
- package/dist/chunk-bazah9w0.js +0 -1
- package/dist/chunk-dmv3vryr.js +0 -138
- package/dist/chunk-qs7814ya.js +0 -1
- package/dist/chunk-sd5a61c6.js +0 -1
- package/dist/chunk-t1wq0ckc.js +0 -2
- package/dist/chunk-zft558kj.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var q;try{q=await import("node:crypto")}catch{}var v=new Map,Q=100,ee={appstream2:"appstream",cloudhsmv2:"cloudhsm",email:"ses",marketplace:"aws-marketplace",mobile:"AWSMobileHubService",pinpoint:"mobiletargeting",queue:"sqs","git-codecommit":"codecommit","mturk-requester-sandbox":"mturk-requester","personalize-runtime":"personalize"};function
|
|
1
|
+
var q;try{q=await import("node:crypto")}catch{}var v=new Map,Q=100,ee={appstream2:"appstream",cloudhsmv2:"cloudhsm",email:"ses",marketplace:"aws-marketplace",mobile:"AWSMobileHubService",pinpoint:"mobiletargeting",queue:"sqs","git-codecommit":"codecommit","mturk-requester-sandbox":"mturk-requester","personalize-runtime":"personalize"};function iu(e){let n=typeof e==="string"?new URL(e):e,{hostname:t,pathname:s}=n;if(t.endsWith(".on.aws")){let a=t.match(/^[^.]+\.lambda-url\.([^.]+)\.on\.aws$/);if(a)return{service:"lambda",region:a[1]};return{service:"",region:""}}if(t.endsWith(".r2.cloudflarestorage.com"))return{service:"s3",region:"auto"};if(t.endsWith(".backblazeb2.com")){let a=t.match(/^(?:[^.]+\.)?s3\.([^.]+)\.backblazeb2\.com$/);if(a)return{service:"s3",region:a[1]};return{service:"",region:""}}let c=t.replace("dualstack.","").match(/([^.]+)\.(?:([^.]+)\.)?amazonaws\.com(?:\.cn)?$/);if(!c)return{service:"",region:""};let r=c[1],i=c[2]||"";if(i==="us-gov")i="us-gov-west-1";else if(i==="s3"||i==="s3-accelerate")i="us-east-1",r="s3";else if(r==="iot")if(t.startsWith("iot."))r="execute-api";else if(t.startsWith("data.jobs.iot."))r="iot-jobs-data";else r=s==="/mqtt"?"iotdevicegateway":"iotdata";else if(r==="autoscaling");else if(!i&&r.startsWith("s3-"))i=r.slice(3).replace(/^fips-|^external-1/,""),r="s3";else if(r.endsWith("-fips"))r=r.slice(0,-5);else if(i&&/-\d$/.test(r)&&!/-\d$/.test(i))[r,i]=[i,r];return r=ee[r]||r,{service:r,region:i||"us-east-1"}}function N(e){let{method:n,url:t,body:s="",accessKeyId:c,secretAccessKey:r,sessionToken:i,signQuery:a=!1,expiresIn:h=86400,datetime:m}=e,d=new URL(t),f=d.hostname,p=iu(d),u=e.service||p.service,g=e.region||p.region;if(!u)throw Error("Could not detect service from URL. Please provide service explicitly.");if(!g)throw Error("Could not detect region from URL. Please provide region explicitly.");let o=m||new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),y=o.substring(0,8),S=[y,g,u,"aws4_request"].join("/"),b="AWS4-HMAC-SHA256";if(a)return te({urlObj:d,method:n,body:s,accessKeyId:c,secretAccessKey:r,sessionToken:i,service:u,region:g,timestamp:o,date:y,credentialScope:S,algorithm:b,expiresIn:h,cache:e.cache});let A=d.pathname||"/",x=I(d.searchParams),l={host:f,"x-amz-date":o,...e.headers};if(i)l["x-amz-security-token"]=i;let R=Object.keys(l).some((D)=>D.toLowerCase()==="content-type");if(s&&!R)l["content-type"]="application/x-amz-json-1.0";if(u==="s3"&&!l["x-amz-content-sha256"])l["x-amz-content-sha256"]=E(s);let P=_(l),w=G(l),U=l["x-amz-content-sha256"]||E(s),O=[n,j(A),x,P,w,U].join(`
|
|
2
2
|
`),M=E(O),K=[b,o,S,M].join(`
|
|
3
|
-
`),W=e.cache??v,L=J(r,y,g,u,K,W),X=[`${b} Credential=${c}/${S}`,`SignedHeaders=${w}`,`Signature=${L}`].join(", ");return l.authorization=X,{url:t,method:n,headers:l,body:s||void 0}}async function
|
|
3
|
+
`),W=e.cache??v,L=J(r,y,g,u,K,W),X=[`${b} Credential=${c}/${S}`,`SignedHeaders=${w}`,`Signature=${L}`].join(", ");return l.authorization=X,{url:t,method:n,headers:l,body:s||void 0}}async function su(e){let{method:n,url:t,body:s="",accessKeyId:c,secretAccessKey:r,sessionToken:i,signQuery:a=!1,expiresIn:h=86400,datetime:m}=e,d=new URL(t),f=d.hostname,p=iu(d),u=e.service||p.service,g=e.region||p.region;if(!u)throw Error("Could not detect service from URL. Please provide service explicitly.");if(!g)throw Error("Could not detect region from URL. Please provide region explicitly.");let o=m||new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),y=o.substring(0,8),S=[y,g,u,"aws4_request"].join("/"),b="AWS4-HMAC-SHA256";if(a)return ne({urlObj:d,method:n,body:s,accessKeyId:c,secretAccessKey:r,sessionToken:i,service:u,region:g,timestamp:o,date:y,credentialScope:S,algorithm:b,expiresIn:h,cache:e.cache});let A=d.pathname||"/",x=I(d.searchParams),l={host:f,"x-amz-date":o,...e.headers};if(i)l["x-amz-security-token"]=i;let R=Object.keys(l).some((F)=>F.toLowerCase()==="content-type");if(s&&!R)l["content-type"]="application/x-amz-json-1.0";let P=await k(s);if(u==="s3"&&!l["x-amz-content-sha256"])l["x-amz-content-sha256"]=P;let w=_(l),U=G(l),O=l["x-amz-content-sha256"]||P,M=[n,j(A),x,w,U,O].join(`
|
|
4
4
|
`),K=await k(M),W=[b,o,S,K].join(`
|
|
5
5
|
`),L=e.cache??v,X=await V(r,y,g,u,W,L),D=[`${b} Credential=${c}/${S}`,`SignedHeaders=${U}`,`Signature=${X}`].join(", ");return l.authorization=D,{url:t,method:n,headers:l,body:s||void 0}}function te(e){let{urlObj:n,method:t,body:s,accessKeyId:c,secretAccessKey:r,sessionToken:i,service:a,region:h,timestamp:m,date:d,credentialScope:f,algorithm:p,expiresIn:u,cache:g}=e,o=new URL(n.toString());o.searchParams.set("X-Amz-Algorithm",p),o.searchParams.set("X-Amz-Credential",`${c}/${f}`),o.searchParams.set("X-Amz-Date",m),o.searchParams.set("X-Amz-Expires",String(u));let y=a==="s3"?"UNSIGNED-PAYLOAD":E(s);if(a==="s3")o.searchParams.set("X-Amz-Content-Sha256",y);let S="host";if(o.searchParams.set("X-Amz-SignedHeaders",S),i)o.searchParams.set("X-Amz-Security-Token",i);let b=j(o.pathname||"/"),A=`host:${o.hostname}
|
|
6
6
|
`,x=I(o.searchParams),l=[t,b,x,A,S,y].join(`
|
|
@@ -8,7 +8,7 @@ var q;try{q=await import("node:crypto")}catch{}var v=new Map,Q=100,ee={appstream
|
|
|
8
8
|
`),w=J(r,d,h,a,R,g??v);return o.searchParams.set("X-Amz-Signature",w),{url:o.toString(),method:t,headers:{},body:s||void 0}}async function ne(e){let{urlObj:n,method:t,body:s,accessKeyId:c,secretAccessKey:r,sessionToken:i,service:a,region:h,timestamp:m,date:d,credentialScope:f,algorithm:p,expiresIn:u,cache:g}=e,o=new URL(n.toString());o.searchParams.set("X-Amz-Algorithm",p),o.searchParams.set("X-Amz-Credential",`${c}/${f}`),o.searchParams.set("X-Amz-Date",m),o.searchParams.set("X-Amz-Expires",String(u));let y=a==="s3"?"UNSIGNED-PAYLOAD":await k(s);if(a==="s3")o.searchParams.set("X-Amz-Content-Sha256",y);let S="host";if(o.searchParams.set("X-Amz-SignedHeaders",S),i)o.searchParams.set("X-Amz-Security-Token",i);let b=j(o.pathname||"/"),A=`host:${o.hostname}
|
|
9
9
|
`,x=I(o.searchParams),l=[t,b,x,A,S,y].join(`
|
|
10
10
|
`),R=[p,m,f,await k(l)].join(`
|
|
11
|
-
`),w=await V(r,d,h,a,R,g??v);return o.searchParams.set("X-Amz-Signature",w),{url:o.toString(),method:t,headers:{},body:s||void 0}}function
|
|
11
|
+
`),w=await V(r,d,h,a,R,g??v);return o.searchParams.set("X-Amz-Signature",w),{url:o.toString(),method:t,headers:{},body:s||void 0}}function pa(e){let{url:n,method:t="GET",expiresIn:s=3600,...c}=e,r=Math.min(s,604800);return N({...c,url:n,method:t,signQuery:!0,expiresIn:r}).url}async function FS(e){let{url:n,method:t="GET",expiresIn:s=3600,...c}=e,r=Math.min(s,604800);return(await su({...c,url:n,method:t,signQuery:!0,expiresIn:r})).url}function _(e){return Object.keys(e).sort().map((n)=>`${n.toLowerCase()}:${e[n].trim().replace(/\s+/g," ")}`).join(`
|
|
12
12
|
`)+`
|
|
13
|
-
`}function G(e){return Object.keys(e).sort().map((n)=>n.toLowerCase()).join(";")}function I(e){let n=[];return e.forEach((t,s)=>{n.push([B(s),B(t)])}),n.sort((t,s)=>{if(t[0]<s[0])return-1;if(t[0]>s[0])return 1;if(t[1]<s[1])return-1;if(t[1]>s[1])return 1;return 0}),n.map(([t,s])=>`${t}=${s}`).join("&")}function j(e){return e.split("/").map((n)=>B(n)).join("/")}function B(e){return encodeURIComponent(e).replace(/[!'()*]/g,(n)=>`%${n.charCodeAt(0).toString(16).toUpperCase()}`)}function E(e){if(!q)throw Error("Synchronous hash not available in browser. Use signRequestAsync() instead.");return q.createHash("sha256").update(e,"utf8").digest("hex")}function C(e,n){if(!q)throw Error("Synchronous hmac not available in browser. Use signRequestAsync() instead.");return q.createHmac("sha256",e).update(n,"utf8").digest()}async function k(e){let t=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",t);return Y(new Uint8Array(s))}async function z(e,n){let t=new TextEncoder,s=typeof e==="string"?t.encode(e):e,c=t.encode(n),r=await crypto.subtle.importKey("raw",s.buffer,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),i=await crypto.subtle.sign("HMAC",r,c.buffer);return new Uint8Array(i)}function Y(e){return Array.from(e).map((n)=>n.toString(16).padStart(2,"0")).join("")}function J(e,n,t,s,c,r){let i=`${e}:${n}:${t}:${s}`,a=r.get(i);if(!a){let h=C(`AWS4${e}`,n),m=C(h,t),d=C(m,s);if(a=C(d,"aws4_request"),r.size>=Q){let f=r.keys().next().value;if(f)r.delete(f)}r.set(i,a)}return C(a,c).toString("hex")}async function V(e,n,t,s,c,r){let i=`${e}:${n}:${t}:${s}`,a=r.get(i);if(!a){let m=await z(`AWS4${e}`,n),d=await z(m,t),f=await z(d,s);if(a=await z(f,"aws4_request"),r.size>=Q){let p=r.keys().next().value;if(p)r.delete(p)}r.set(i,a)}let h=await z(a,c);return Y(h)}function Z(e,n){return n.includes(e)}function T(e,n,t){let s=n*Math.pow(2,e),c=Math.random()*0.3*s;return Math.min(s+c,t)}function H(e){return new Promise((n)=>setTimeout(n,e))}async function
|
|
14
|
-
export{
|
|
13
|
+
`}function G(e){return Object.keys(e).sort().map((n)=>n.toLowerCase()).join(";")}function I(e){let n=[];return e.forEach((t,s)=>{n.push([B(s),B(t)])}),n.sort((t,s)=>{if(t[0]<s[0])return-1;if(t[0]>s[0])return 1;if(t[1]<s[1])return-1;if(t[1]>s[1])return 1;return 0}),n.map(([t,s])=>`${t}=${s}`).join("&")}function j(e){return e.split("/").map((n)=>B(n)).join("/")}function B(e){return encodeURIComponent(e).replace(/[!'()*]/g,(n)=>`%${n.charCodeAt(0).toString(16).toUpperCase()}`)}function E(e){if(!q)throw Error("Synchronous hash not available in browser. Use signRequestAsync() instead.");return q.createHash("sha256").update(e,"utf8").digest("hex")}function C(e,n){if(!q)throw Error("Synchronous hmac not available in browser. Use signRequestAsync() instead.");return q.createHmac("sha256",e).update(n,"utf8").digest()}async function k(e){let t=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",t);return Y(new Uint8Array(s))}async function z(e,n){let t=new TextEncoder,s=typeof e==="string"?t.encode(e):e,c=t.encode(n),r=await crypto.subtle.importKey("raw",s.buffer,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),i=await crypto.subtle.sign("HMAC",r,c.buffer);return new Uint8Array(i)}function Y(e){return Array.from(e).map((n)=>n.toString(16).padStart(2,"0")).join("")}function J(e,n,t,s,c,r){let i=`${e}:${n}:${t}:${s}`,a=r.get(i);if(!a){let h=C(`AWS4${e}`,n),m=C(h,t),d=C(m,s);if(a=C(d,"aws4_request"),r.size>=Q){let f=r.keys().next().value;if(f)r.delete(f)}r.set(i,a)}return C(a,c).toString("hex")}async function V(e,n,t,s,c,r){let i=`${e}:${n}:${t}:${s}`,a=r.get(i);if(!a){let m=await z(`AWS4${e}`,n),d=await z(m,t),f=await z(d,s);if(a=await z(f,"aws4_request"),r.size>=Q){let p=r.keys().next().value;if(p)r.delete(p)}r.set(i,a)}let h=await z(a,c);return Y(h)}function Z(e,n){return n.includes(e)}function T(e,n,t){let s=n*Math.pow(2,e),c=Math.random()*0.3*s;return Math.min(s+c,t)}function H(e){return new Promise((n)=>setTimeout(n,e))}async function th(e,n){let{maxRetries:t=3,initialDelayMs:s=100,maxDelayMs:c=5000,retryableStatusCodes:r=[429,500,502,503,504],timeoutMs:i=30000}=n??{},a,h;for(let m=0;m<=t;m++){let d=N(e),f={method:d.method,headers:d.headers};if(d.body)f.body=d.body;let p=new AbortController,u=setTimeout(()=>p.abort(),i);f.signal=p.signal;try{let g=await fetch(d.url,f);if(clearTimeout(u),h=g,g.ok)return g;if(m<t&&Z(g.status,r)){let y=T(m,s,c);await H(y);continue}let o=await g.text();throw Error(`AWS API request failed (${g.status}): ${o}`)}catch(g){if(clearTimeout(u),a=g,g instanceof Error&&g.name==="AbortError")a=Error(`Request timed out after ${i}ms`);if(m<t&&!(g instanceof Error&&g.message.includes("AWS API request failed"))){let o=T(m,s,c);await H(o);continue}throw a}}throw a??Error("Request failed after retries")}async function US(e){return th(e,{maxRetries:0})}async function QS(e,n){let{maxRetries:t=3,initialDelayMs:s=100,maxDelayMs:c=5000,retryableStatusCodes:r=[429,500,502,503,504],timeoutMs:i=30000}=n??{},a;for(let h=0;h<=t;h++){let m=await su(e),d={method:m.method,headers:m.headers};if(m.body)d.body=m.body;let f=new AbortController,p=setTimeout(()=>f.abort(),i);d.signal=f.signal;try{let u=await fetch(m.url,d);if(clearTimeout(p),u.ok)return u;if(h<t&&Z(u.status,r)){let o=T(h,s,c);await H(o);continue}let g=await u.text();throw Error(`AWS API request failed (${u.status}): ${g}`)}catch(u){if(clearTimeout(p),a=u,u instanceof Error&&u.name==="AbortError")a=Error(`Request timed out after ${i}ms`);if(h<t&&!(u instanceof Error&&u.message.includes("AWS API request failed"))){let g=T(h,s,c);await H(g);continue}throw a}}throw a??Error("Request failed after retries")}async function HS(e){let n=await e.text(),t={},s=/<(\w+)>([^<]+)<\/\1>/g,c;while((c=s.exec(n))!==null){let[,r,i]=c;t[r]=i}return t}async function GS(e){return await e.json()}function VS(){v.clear()}function qS(){return v.size}function jS(){return q!==void 0}function zS(){return typeof crypto<"u"&&typeof crypto.subtle<"u"}
|
|
14
|
+
export{iu,N,su,pa,FS,th,US,QS,HS,GS,VS,qS,jS,zS};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n}from"./chunk-
|
|
1
|
+
import{n}from"./chunk-vaczx33v.js";import{S}from"./chunk-jntyd5zv.js";function T(e){let i=Array.isArray(e?.Items)?e.Items:S(e?.Items?.CNAME);return{Quantity:i.length,Items:i.map(String)}}function Fc(e){return S(e?.Origins?.Items?.Origin)}function qe(e){for(let i of Fc(e)){let t=String(i.DomainName??"").match(/^(.+?)\.s3[.-]/)?.[1];if(t)return t}return}class b{client;constructor(e,i){this.client=i??new n(void 0,{profile:e})}collectionItems(e,i){let t=e?.Items??e?.[i];if(!t)return[];if(Array.isArray(t))return t;let r=t[i]??t.Item;if(r===void 0)return typeof t==="object"&&(t.Id||t.PathPattern)?[t]:[];return Array.isArray(r)?r:[r]}validateExistingOriginInput(e,i){if(!/^[A-Z0-9]{8,32}$/.test(e))throw Error("CloudFront distribution ID is invalid");if(!/^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/.test(i.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(i.domainName))throw Error("CloudFront origin must be a hostname without a scheme or path");let t=i.pathPattern.startsWith("/")?i.pathPattern:`/${i.pathPattern}`;if(t==="/"||t==="/*"||!/^\/[A-Za-z0-9_.*?~!$&'()+,;=:@%/-]{1,255}$/.test(t))throw Error("CloudFront path pattern must be a non-default absolute pattern");if(i.originPath&&(!i.originPath.startsWith("/")||i.originPath.includes("..")))throw Error("CloudFront origin path must be absolute and traversal-free");if(Object.entries(i.customHeaders??{}).some(([r,s])=>!/^[A-Za-z0-9-]{1,64}$/.test(r)||!s||s.length>1024))throw Error("CloudFront custom origin headers are invalid");return{...i,pathPattern:t}}async upsertExistingDistributionOrigin(e,i){let t=this.validateExistingOriginInput(e,i),r=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}/config`,returnHeaders:!0}),s=r.headers?.etag||r.headers?.ETag||r.ETag||"",o=r.body?.DistributionConfig||r.DistributionConfig||r.body;if(!o||o.Enabled===void 0||!s)throw Error("Failed to read an ETag-protected CloudFront distribution config");let a=this.collectionItems(o.Origins,"Origin"),c=this.collectionItems(o.CacheBehaviors,"CacheBehavior"),u=a.find((f)=>String(f.Id)===t.id),d=c.find((f)=>String(f.PathPattern)===t.pathPattern);if(u&&String(u.DomainName)!==t.domainName&&!t.replaceExisting)throw Error(`Origin ${t.id} already targets ${u.DomainName}; pass replaceExisting only after reviewing the live config`);if(d&&String(d.TargetOriginId)!==t.id&&!t.replaceExisting)throw Error(`Path ${t.pathPattern} already targets ${d.TargetOriginId}; pass replaceExisting only after reviewing the live config`);let g={Id:t.id,DomainName:t.domainName,OriginPath:t.originPath??"",CustomHeaders:{Quantity:Object.keys(t.customHeaders??{}).length,...Object.keys(t.customHeaders??{}).length?{Items:{OriginCustomHeader:Object.entries(t.customHeaders).map(([f,P])=>({HeaderName:f,HeaderValue:P}))}}:{}},CustomOriginConfig:{HTTPPort:80,HTTPSPort:443,OriginProtocolPolicy:t.protocolPolicy??"https-only",OriginSslProtocols:{Quantity:1,Items:{SslProtocol:["TLSv1.2"]}},OriginReadTimeout:30,OriginKeepaliveTimeout:5},ConnectionAttempts:3,ConnectionTimeout:10,...t.originAccessControlId?{OriginAccessControlId:t.originAccessControlId}:{}},h=["GET","HEAD","OPTIONS","PUT","POST","PATCH","DELETE"],l={PathPattern:t.pathPattern,TargetOriginId:t.id,ViewerProtocolPolicy:"redirect-to-https",Compress:!0,CachePolicyId:"4135ea2d-6df8-44a3-9df3-4b5a84be39ad",OriginRequestPolicyId:"b689b0a8-53d0-40ab-baf2-68738e2966ac",AllowedMethods:{Quantity:h.length,Items:{Method:h},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}},y=u?a.map((f)=>String(f.Id)===t.id?g:f):[...a,g],m=d?c.map((f)=>String(f.PathPattern)===t.pathPattern?l:f):[...c,l],I=JSON.stringify(a)!==JSON.stringify(y)||JSON.stringify(c)!==JSON.stringify(m);if(!I||t.dryRun)return{distributionId:e,originId:t.id,domainName:t.domainName,pathPattern:t.pathPattern,changed:I,applied:!1,etag:s};o.Origins={Quantity:y.length,Items:{Origin:y}},o.CacheBehaviors={Quantity:m.length,...m.length?{Items:{CacheBehavior:m}}:{}};let p=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${e}/config`,body:this.buildDistributionConfigXml(o),headers:{"Content-Type":"application/xml","If-Match":s},returnHeaders:!0});return{distributionId:e,originId:t.id,domainName:t.domainName,pathPattern:t.pathPattern,changed:!0,applied:!0,etag:p.headers?.etag||p.headers?.ETag||""}}async removeExistingDistributionOrigin(e,i){let t=this.validateExistingOriginInput(e,i),r=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}/config`,returnHeaders:!0}),s=r.headers?.etag||r.headers?.ETag||r.ETag||"",o=r.body?.DistributionConfig||r.DistributionConfig||r.body;if(!o||o.Enabled===void 0||!s)throw Error("Failed to read an ETag-protected CloudFront distribution config");let a=this.collectionItems(o.Origins,"Origin"),c=this.collectionItems(o.CacheBehaviors,"CacheBehavior"),u=a.find((m)=>String(m.Id)===t.id),d=c.find((m)=>String(m.PathPattern)===t.pathPattern);if(u&&String(u.DomainName)!==t.domainName)throw Error(`Origin ${t.id} no longer targets ${t.domainName}; refusing ambiguous removal`);if(d&&String(d.TargetOriginId)!==t.id)throw Error(`Path ${t.pathPattern} no longer targets ${t.id}; refusing ambiguous removal`);if(!d)return{distributionId:e,originId:t.id,domainName:t.domainName,pathPattern:t.pathPattern,changed:!1,applied:!1,originRemoved:!1,etag:s};let g=c.filter((m)=>String(m.PathPattern)!==t.pathPattern),h=String(o.DefaultCacheBehavior?.TargetOriginId)===t.id||g.some((m)=>String(m.TargetOriginId)===t.id),l=h?a:a.filter((m)=>String(m.Id)!==t.id);if(t.dryRun)return{distributionId:e,originId:t.id,domainName:t.domainName,pathPattern:t.pathPattern,changed:!0,applied:!1,originRemoved:!h&&!!u,etag:s};o.Origins={Quantity:l.length,Items:{Origin:l}},o.CacheBehaviors={Quantity:g.length,...g.length?{Items:{CacheBehavior:g}}:{}};let y=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${e}/config`,body:this.buildDistributionConfigXml(o),headers:{"Content-Type":"application/xml","If-Match":s},returnHeaders:!0});return{distributionId:e,originId:t.id,domainName:t.domainName,pathPattern:t.pathPattern,changed:!0,applied:!0,originRemoved:!h&&!!u,etag:y.headers?.etag||y.headers?.ETag||""}}async createInvalidation(e){let i=e.callerReference||Date.now().toString(),t=`<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<InvalidationBatch>
|
|
3
3
|
<Paths>
|
|
4
4
|
<Quantity>${e.paths.length}</Quantity>
|
|
@@ -8,9 +8,9 @@ import{n}from"./chunk-7d9ek8rc.js";import{y}from"./chunk-t1wq0ckc.js";function P
|
|
|
8
8
|
</Items>
|
|
9
9
|
</Paths>
|
|
10
10
|
<CallerReference>${i}</CallerReference>
|
|
11
|
-
</InvalidationBatch>`,r=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:`/2020-05-31/distribution/${e.distributionId}/invalidation`,body:t,headers:{"Content-Type":"application/xml"}});return{Id:r.Id||r.Invalidation?.Id,Status:r.Status||r.Invalidation?.Status||"InProgress",CreateTime:r.CreateTime||r.Invalidation?.CreateTime||new Date().toISOString()}}async getInvalidation(e,i){let t=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}/invalidation/${i}`});return{Id:t.Id||t.Invalidation?.Id,Status:t.Status||t.Invalidation?.Status,CreateTime:t.CreateTime||t.Invalidation?.CreateTime}}async listInvalidations(e){let i=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}/invalidation`}),t=[];if(i.InvalidationSummary){let r=Array.isArray(i.InvalidationSummary)?i.InvalidationSummary:[i.InvalidationSummary];t.push(...r.map((s)=>({Id:s.Id,Status:s.Status,CreateTime:s.CreateTime})))}return t}async waitForInvalidation(e,i){let r=0;while(r<60){if((await this.getInvalidation(e,i)).Status==="Completed")return;await new Promise((o)=>setTimeout(o,5000)),r++}throw Error(`Timeout waiting for invalidation ${i} to complete`)}async listDistributions(){let e=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/distribution"}),i=[],r=(e.DistributionList||e).Items,s=[];if(Array.isArray(r))s=r;else if(r?.DistributionSummary)s=Array.isArray(r.DistributionSummary)?r.DistributionSummary:[r.DistributionSummary];return i.push(...s.map((o)=>({Id:o.Id,ARN:o.ARN,Status:o.Status,DomainName:o.DomainName,Aliases:o.Aliases?
|
|
12
|
-
`;if(Array.isArray(c)){if(a==="Items"){let g=t[d];if(!g)throw s(`${d}.Items`,"no known entry name for this list");return o("Items",{[g]:c},u,d)}if(t[a]&&!r.has(a))return o(a,{Quantity:c.length,...c.length?{Items:c}:{}},u,d);throw s(`${d}.${a}`,t[a]?"pass the list as an object, it needs fields an array cannot carry":"an array is not a CloudFront list here")}if(typeof c==="object"){let g=Object.keys(c).filter((l)=>!l.startsWith("@_"));if(a==="Items"&&g.length===1){let[l]=g,
|
|
13
|
-
${
|
|
11
|
+
</InvalidationBatch>`,r=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:`/2020-05-31/distribution/${e.distributionId}/invalidation`,body:t,headers:{"Content-Type":"application/xml"}});return{Id:r.Id||r.Invalidation?.Id,Status:r.Status||r.Invalidation?.Status||"InProgress",CreateTime:r.CreateTime||r.Invalidation?.CreateTime||new Date().toISOString()}}async getInvalidation(e,i){let t=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}/invalidation/${i}`});return{Id:t.Id||t.Invalidation?.Id,Status:t.Status||t.Invalidation?.Status,CreateTime:t.CreateTime||t.Invalidation?.CreateTime}}async listInvalidations(e){let i=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}/invalidation`}),t=[];if(i.InvalidationSummary){let r=Array.isArray(i.InvalidationSummary)?i.InvalidationSummary:[i.InvalidationSummary];t.push(...r.map((s)=>({Id:s.Id,Status:s.Status,CreateTime:s.CreateTime})))}return t}async waitForInvalidation(e,i){let r=0;while(r<60){if((await this.getInvalidation(e,i)).Status==="Completed")return;await new Promise((o)=>setTimeout(o,5000)),r++}throw Error(`Timeout waiting for invalidation ${i} to complete`)}async listDistributions(){let e=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/distribution"}),i=[],r=(e.DistributionList||e).Items,s=[];if(Array.isArray(r))s=r;else if(r?.DistributionSummary)s=Array.isArray(r.DistributionSummary)?r.DistributionSummary:[r.DistributionSummary];return i.push(...s.map((o)=>({Id:o.Id,ARN:o.ARN,Status:o.Status,DomainName:o.DomainName,Aliases:o.Aliases?T(o.Aliases):void 0,Enabled:o.Enabled==="true"||o.Enabled===!0}))),i}async getDistribution(e){let i=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}`}),t=i.Distribution||i;return{Id:t.Id,ARN:t.ARN,Status:t.Status,DomainName:t.DomainName,Aliases:T(t.DistributionConfig?.Aliases??t.Aliases),Enabled:t.DistributionConfig?.Enabled==="true"||t.DistributionConfig?.Enabled===!0}}async getDistributionConfig(e){let i=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}/config`,returnHeaders:!0}),t={...i.body?.DistributionConfig??i.body??{}};return delete t["@_xmlns"],{ETag:i.headers?.etag||i.headers?.ETag||"",DistributionConfig:t}}async invalidateAll(e){return this.createInvalidation({distributionId:e,paths:["/*"]})}async invalidatePaths(e,i){let t=i.map((r)=>r.startsWith("/")?r:`/${r}`);return this.createInvalidation({distributionId:e,paths:t})}async invalidatePattern(e,i){let t=i.startsWith("/")?i:`/${i}`;return this.createInvalidation({distributionId:e,paths:[t]})}async invalidateAfterDeployment(e){let{distributionId:i,changedPaths:t,invalidateAll:r=!1,wait:s=!1}=e,o;if(r||!t||t.length===0)o=await this.invalidateAll(i);else o=await this.invalidatePaths(i,t);if(s)await this.waitForInvalidation(i,o.Id);return{invalidationId:o.Id,status:o.Status}}async findDistributionByDomain(e){return(await this.listDistributions()).find((r)=>{if(r.DomainName===e)return!0;if(r.Aliases?.Items&&r.Aliases.Items.includes(e))return!0;return!1})||null}async batchInvalidate(e,i=["/*"]){return await Promise.all(e.map(async(r)=>{let s=await this.createInvalidation({distributionId:r,paths:i});return{distributionId:r,invalidationId:s.Id,status:s.Status}}))}async updateCustomErrorResponses(e){let{distributionId:i,customErrorResponses:t}=e,r=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${i}/config`,returnHeaders:!0}),s=r.headers?.etag||r.headers?.ETag||"",o=r.body?.DistributionConfig||(r.body?.Enabled!==void 0?r.body:void 0)||r.DistributionConfig;if(!o||o.Enabled===void 0)throw Error("Failed to get current distribution config");if(t.length===0)o.CustomErrorResponses={Quantity:0};else o.CustomErrorResponses={Quantity:t.length,Items:{CustomErrorResponse:t.map((d)=>({ErrorCode:d.errorCode,...d.responsePagePath&&{ResponsePagePath:d.responsePagePath},...d.responseCode&&{ResponseCode:d.responseCode},...d.errorCachingMinTTL!==void 0&&{ErrorCachingMinTTL:d.errorCachingMinTTL}}))}};let a=this.buildDistributionConfigXml(o),c=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${i}/config`,body:a,headers:{"Content-Type":"application/xml","If-Match":s},returnHeaders:!0}),u=c.body?.Distribution??c.body??{};return{Distribution:{Id:u.Id,ARN:u.ARN,Status:u.Status,DomainName:u.DomainName,Aliases:T(u.DistributionConfig?.Aliases),Enabled:u.DistributionConfig?.Enabled==="true"||u.DistributionConfig?.Enabled===!0},ETag:c.headers?.etag||c.headers?.ETag||""}}async removeCustomErrorResponses(e){return this.updateCustomErrorResponses({distributionId:e,customErrorResponses:[]})}async updateDistribution(e){let{distributionId:i,aliases:t,certificateArn:r,comment:s}=e,o=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${i}/config`,returnHeaders:!0}),a=o.headers?.etag||o.headers?.ETag||"",c=o.body?.DistributionConfig||(o.body?.Enabled!==void 0?o.body:void 0)||o.DistributionConfig;if(!c||c.Enabled===void 0)throw Error("Failed to get current distribution config");if(t&&t.length>0)c.Aliases={Quantity:t.length,Items:{CNAME:t}};if(r)c.ViewerCertificate={ACMCertificateArn:r,SSLSupportMethod:"sni-only",MinimumProtocolVersion:"TLSv1.2_2021",CertificateSource:"acm"};if(s)c.Comment=s;let u=this.buildDistributionConfigXml(c),d=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${i}/config`,body:u,headers:{"Content-Type":"application/xml","If-Match":a},returnHeaders:!0}),g=d.body?.Distribution??d.body??{};return{Distribution:{Id:g.Id,ARN:g.ARN,Status:g.Status,DomainName:g.DomainName,Aliases:t?{Quantity:t.length,Items:t}:{Quantity:0,Items:[]},Enabled:g.DistributionConfig?.Enabled==="true"||g.DistributionConfig?.Enabled===!0},ETag:d.headers?.etag||d.headers?.ETag||""}}buildDistributionConfigXml(e){let i=(a)=>a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"),t={Aliases:"CNAME",Origins:"Origin",OriginGroups:"OriginGroup",Members:"OriginGroupMember",StatusCodes:"StatusCode",CustomHeaders:"OriginCustomHeader",OriginSslProtocols:"SslProtocol",CacheBehaviors:"CacheBehavior",CustomErrorResponses:"CustomErrorResponse",AllowedMethods:"Method",CachedMethods:"Method",FunctionAssociations:"FunctionAssociation",LambdaFunctionAssociations:"LambdaFunctionAssociation",Headers:"Name",WhitelistedNames:"Name",QueryStringCacheKeys:"Name",TrustedSigners:"AwsAccountNumber",TrustedKeyGroups:"KeyGroup",GeoRestriction:"Location"},r=new Set(["TrustedSigners","TrustedKeyGroups","GeoRestriction"]),s=(a,c)=>Error(`Cannot build CloudFront XML for ${a}: ${c}`),o=(a,c,u="",d="")=>{if(c===null||c===void 0)return"";if(a.startsWith("@_")||a==="?xml")return"";if(typeof c==="boolean"||typeof c==="number"||typeof c==="string")return`${u}<${a}>${i(String(c))}</${a}>
|
|
12
|
+
`;if(Array.isArray(c)){if(a==="Items"){let g=t[d];if(!g)throw s(`${d}.Items`,"no known entry name for this list");return o("Items",{[g]:c},u,d)}if(t[a]&&!r.has(a))return o(a,{Quantity:c.length,...c.length?{Items:c}:{}},u,d);throw s(`${d}.${a}`,t[a]?"pass the list as an object, it needs fields an array cannot carry":"an array is not a CloudFront list here")}if(typeof c==="object"){let g=Object.keys(c).filter((l)=>!l.startsWith("@_"));if(a==="Items"&&g.length===1){let[l]=g,y=(Array.isArray(c[l])?c[l]:[c[l]]).map((m)=>o(l,m,`${u} `,a)).join("");return`${u}<Items>
|
|
13
|
+
${y}${u}</Items>
|
|
14
14
|
`}let h=g.map((l)=>o(l,c[l],`${u} `,a)).join("");return h?`${u}<${a}>
|
|
15
15
|
${h}${u}</${a}>
|
|
16
16
|
`:`${u}<${a}/>
|
|
@@ -53,14 +53,14 @@ ${Object.entries(e).filter(([a])=>!a.startsWith("@_")).map(([a,c])=>o(a,c," ","
|
|
|
53
53
|
<SigningProtocol>${r}</SigningProtocol>
|
|
54
54
|
<SigningBehavior>${s}</SigningBehavior>
|
|
55
55
|
<OriginAccessControlOriginType>${o}</OriginAccessControlOriginType>
|
|
56
|
-
</OriginAccessControlConfig>`,c=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/origin-access-control",body:a,headers:{"Content-Type":"application/xml"},returnHeaders:!0}),u=c.body?.OriginAccessControl||c.OriginAccessControl||c.body||c;return{Id:u.Id,Name:u.OriginAccessControlConfig?.Name||i,Description:u.OriginAccessControlConfig?.Description||t,SigningProtocol:u.OriginAccessControlConfig?.SigningProtocol||r,SigningBehavior:u.OriginAccessControlConfig?.SigningBehavior||s,OriginAccessControlOriginType:u.OriginAccessControlConfig?.OriginAccessControlOriginType||o,ETag:c.headers?.etag||c.ETag||""}}async findOrCreateOriginAccessControl(e,i="s3"){let r=(await this.listOriginAccessControls()).find((o)=>o.Name===e&&o.OriginAccessControlOriginType===i);if(r)return{Id:r.Id,Name:r.Name,isNew:!1};let s=await this.createOriginAccessControl({name:e,originType:i});return{Id:s.Id,Name:s.Name,isNew:!0}}async createDistributionForS3(e){let{bucketName:i,bucketRegion:t,originAccessControlId:r,aliases:s=[],certificateArn:o,defaultRootObject:a="index.html",comment:c=`Distribution for ${i}`,priceClass:u="PriceClass_100",enabled:d=!0,trustedKeyGroupIds:g=[],mediaDelivery:h=!1}=e,l=`S3-${i}`,
|
|
56
|
+
</OriginAccessControlConfig>`,c=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/origin-access-control",body:a,headers:{"Content-Type":"application/xml"},returnHeaders:!0}),u=c.body?.OriginAccessControl||c.OriginAccessControl||c.body||c;return{Id:u.Id,Name:u.OriginAccessControlConfig?.Name||i,Description:u.OriginAccessControlConfig?.Description||t,SigningProtocol:u.OriginAccessControlConfig?.SigningProtocol||r,SigningBehavior:u.OriginAccessControlConfig?.SigningBehavior||s,OriginAccessControlOriginType:u.OriginAccessControlConfig?.OriginAccessControlOriginType||o,ETag:c.headers?.etag||c.ETag||""}}async findOrCreateOriginAccessControl(e,i="s3"){let r=(await this.listOriginAccessControls()).find((o)=>o.Name===e&&o.OriginAccessControlOriginType===i);if(r)return{Id:r.Id,Name:r.Name,isNew:!1};let s=await this.createOriginAccessControl({name:e,originType:i});return{Id:s.Id,Name:s.Name,isNew:!0}}async createDistributionForS3(e){let{bucketName:i,bucketRegion:t,originAccessControlId:r,aliases:s=[],certificateArn:o,defaultRootObject:a="index.html",comment:c=`Distribution for ${i}`,priceClass:u="PriceClass_100",enabled:d=!0,trustedKeyGroupIds:g=[],mediaDelivery:h=!1}=e,l=`S3-${i}`,y=`${i}.s3.${t}.amazonaws.com`,m=`${Date.now()}-${Math.random().toString(36).slice(2)}`,I=g.length>0?`<TrustedKeyGroups>
|
|
57
57
|
<Enabled>true</Enabled>
|
|
58
58
|
<Quantity>${g.length}</Quantity>
|
|
59
|
-
<Items>${g.map((
|
|
60
|
-
</TrustedKeyGroups>`:"<TrustedKeyGroups><Enabled>false</Enabled><Quantity>0</Quantity></TrustedKeyGroups>",
|
|
59
|
+
<Items>${g.map((A)=>`<KeyGroup>${A}</KeyGroup>`).join("")}</Items>
|
|
60
|
+
</TrustedKeyGroups>`:"<TrustedKeyGroups><Enabled>false</Enabled><Quantity>0</Quantity></TrustedKeyGroups>",p="<Aliases><Quantity>0</Quantity></Aliases>";if(s.length>0)p=`<Aliases>
|
|
61
61
|
<Quantity>${s.length}</Quantity>
|
|
62
62
|
<Items>
|
|
63
|
-
${s.map((
|
|
63
|
+
${s.map((A)=>`<CNAME>${A}</CNAME>`).join(`
|
|
64
64
|
`)}
|
|
65
65
|
</Items>
|
|
66
66
|
</Aliases>`;let f=`<ViewerCertificate>
|
|
@@ -70,7 +70,7 @@ ${Object.entries(e).filter(([a])=>!a.startsWith("@_")).map(([a,c])=>o(a,c," ","
|
|
|
70
70
|
<SSLSupportMethod>sni-only</SSLSupportMethod>
|
|
71
71
|
<MinimumProtocolVersion>TLSv1.2_2021</MinimumProtocolVersion>
|
|
72
72
|
<CertificateSource>acm</CertificateSource>
|
|
73
|
-
</ViewerCertificate>`;let
|
|
73
|
+
</ViewerCertificate>`;let P=`<?xml version="1.0" encoding="UTF-8"?>
|
|
74
74
|
<DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
|
|
75
75
|
<CallerReference>${m}</CallerReference>
|
|
76
76
|
<Comment>${c}</Comment>
|
|
@@ -80,7 +80,7 @@ ${Object.entries(e).filter(([a])=>!a.startsWith("@_")).map(([a,c])=>o(a,c," ","
|
|
|
80
80
|
<Items>
|
|
81
81
|
<Origin>
|
|
82
82
|
<Id>${l}</Id>
|
|
83
|
-
<DomainName>${
|
|
83
|
+
<DomainName>${y}</DomainName>
|
|
84
84
|
<OriginPath></OriginPath>
|
|
85
85
|
<S3OriginConfig>
|
|
86
86
|
<OriginAccessIdentity></OriginAccessIdentity>
|
|
@@ -108,9 +108,9 @@ ${Object.entries(e).filter(([a])=>!a.startsWith("@_")).map(([a,c])=>o(a,c," ","
|
|
|
108
108
|
</AllowedMethods>
|
|
109
109
|
<Compress>true</Compress>
|
|
110
110
|
<CachePolicyId>658327ea-f89d-4fab-a63d-7e88639e58f6</CachePolicyId>
|
|
111
|
-
${
|
|
111
|
+
${I}
|
|
112
112
|
</DefaultCacheBehavior>
|
|
113
|
-
${
|
|
113
|
+
${p}
|
|
114
114
|
${f}
|
|
115
115
|
<PriceClass>${u}</PriceClass>
|
|
116
116
|
<Enabled>${d}</Enabled>
|
|
@@ -127,5 +127,5 @@ ${Object.entries(e).filter(([a])=>!a.startsWith("@_")).map(([a,c])=>o(a,c," ","
|
|
|
127
127
|
</CustomErrorResponse>
|
|
128
128
|
</Items>
|
|
129
129
|
</CustomErrorResponses>`}
|
|
130
|
-
</DistributionConfig>`,
|
|
131
|
-
export{
|
|
130
|
+
</DistributionConfig>`,C=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/distribution",body:P,headers:{"Content-Type":"application/xml"},returnHeaders:!0}),E=C.body?.Distribution||C.Distribution||C.body||C;return{Id:E.Id,ARN:E.ARN,DomainName:E.DomainName,Status:E.Status,ETag:C.headers?.etag||C.ETag||""}}async createMediaDistributionForS3(e){return this.createDistributionForS3({...e,defaultRootObject:"",mediaDelivery:!0,comment:e.comment??`Media distribution for ${e.bucketName}`})}async listPublicKeys(){let e=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/public-key"});return this.collectionItems(e.PublicKeyList??e,"PublicKeySummary").map((t)=>({Id:String(t.Id),Name:String(t.Name),Comment:t.Comment?String(t.Comment):void 0}))}async createPublicKey(e){if(!/^[A-Za-z0-9_-]{1,128}$/.test(e.name))throw TypeError("CloudFront public key name is invalid");if(!e.encodedKey.includes("BEGIN PUBLIC KEY"))throw TypeError("CloudFront public key must be PEM encoded");let i=(s)=>s.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">"),t=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>${i(e.callerReference??`${Date.now()}-${e.name}`)}</CallerReference><Name>${i(e.name)}</Name><EncodedKey>${i(e.encodedKey)}</EncodedKey><Comment>${i(e.comment??"")}</Comment></PublicKeyConfig>`}),r=t.PublicKey??t;return{Id:String(r.Id),Name:String(r.PublicKeyConfig?.Name??e.name),EncodedKey:String(r.PublicKeyConfig?.EncodedKey??e.encodedKey),Comment:String(r.PublicKeyConfig?.Comment??e.comment??"")}}async listKeyGroups(){let e=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/key-group"});return this.collectionItems(e.KeyGroupList??e,"KeyGroupSummary").map((t)=>({Id:String(t.KeyGroup?.Id??t.Id),Name:String(t.KeyGroup?.KeyGroupConfig?.Name??t.KeyGroupConfig?.Name??t.Name),Items:this.collectionItems(t.KeyGroup?.KeyGroupConfig?.Items??t.KeyGroupConfig?.Items??t.Items,"Item").map(String),Comment:t.KeyGroup?.KeyGroupConfig?.Comment??t.KeyGroupConfig?.Comment??t.Comment}))}async createKeyGroup(e){if(!/^[A-Za-z0-9_-]{1,128}$/.test(e.name))throw TypeError("CloudFront key group name is invalid");let i=[...new Set(e.publicKeyIds)];if(i.length===0)throw TypeError("CloudFront key group requires at least one public key");let t=(a)=>a.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">"),r=i.map((a)=>`<Item>${t(a)}</Item>`).join(""),s=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>${t(e.name)}</Name><Items>${r}</Items><Comment>${t(e.comment??"")}</Comment></KeyGroupConfig>`}),o=s.KeyGroup??s;return{Id:String(o.Id),Name:String(o.KeyGroupConfig?.Name??e.name),Items:i,Comment:String(o.KeyGroupConfig?.Comment??e.comment??"")}}static getS3BucketPolicyForCloudFront(e,i){return{Version:"2012-10-17",Statement:[{Sid:"AllowCloudFrontServicePrincipal",Effect:"Allow",Principal:{Service:"cloudfront.amazonaws.com"},Action:"s3:GetObject",Resource:`arn:aws:s3:::${e}/*`,Condition:{StringEquals:{"AWS:SourceArn":i}}}]}}async waitForDistributionDeployed(e,i=60){for(let t=0;t<i;t++){if((await this.getDistribution(e)).Status==="Deployed")return!0;await new Promise((s)=>setTimeout(s,30000))}return!1}async disableDistribution(e){let i=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}/config`,returnHeaders:!0}),t=i.headers?.etag||i.headers?.ETag||"",r=i.body?.DistributionConfig||(i.body?.Enabled!==void 0?i.body:void 0)||i.DistributionConfig;if(!r||r.Enabled===void 0)throw Error("Failed to get current distribution config");r.Enabled=!1;let s=this.buildDistributionConfigXml(r),o=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${e}/config`,body:s,headers:{"Content-Type":"application/xml","If-Match":t},returnHeaders:!0});return{ETag:o.headers?.etag||o.headers?.ETag||o.ETag||""}}async deleteDistribution(e,i){let t=i||"";if(!t){let r=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}`,returnHeaders:!0});t=r.headers?.etag||r.headers?.ETag||""}await this.client.request({service:"cloudfront",region:"us-east-1",method:"DELETE",path:`/2020-05-31/distribution/${e}`,headers:{"If-Match":t}})}async waitForDistributionDisabled(e,i=60){for(let t=0;t<i;t++){let r=await this.getDistribution(e);if(r.Status==="Deployed"&&!r.Enabled)return!0;await new Promise((s)=>setTimeout(s,30000))}return!1}async removeAlias(e,i){let t=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${e}/config`,returnHeaders:!0}),r=t.headers?.etag||t.headers?.ETag||"",s=t.body?.DistributionConfig||(t.body?.Enabled!==void 0?t.body:void 0)||t.DistributionConfig;if(!s||s.Enabled===void 0)throw Error("Failed to get current distribution config");let o=T(s.Aliases).Items;if(o.length===0)throw Error("Distribution has no aliases to remove");let a=o.filter((d)=>d!==i);if(a.length===o.length)throw Error(`Alias ${i} not found in distribution`);if(s.Aliases.Quantity=a.length,s.Aliases.Items=a.length>0?{CNAME:a}:void 0,a.length===0)s.ViewerCertificate={CloudFrontDefaultCertificate:!0,MinimumProtocolVersion:"TLSv1.2_2021"};let c=this.buildDistributionConfigXml(s),u=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${e}/config`,body:c,headers:{"Content-Type":"application/xml","If-Match":r},returnHeaders:!0});return{ETag:u.headers?.etag||u.headers?.ETag||u.ETag||""}}}
|
|
131
|
+
export{Fc,qe,b};
|