@stacksjs/ts-cloud 0.16.35 → 0.16.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/aws/index.js +1 -1
  2. package/dist/aws/s3.d.ts +9 -1
  3. package/dist/bin/{chunk-16kx70x7.js → chunk-0870bs4x.js} +3 -3
  4. package/dist/bin/{chunk-v3dck0e4.js → chunk-2ax1rm70.js} +1 -1
  5. package/dist/bin/{chunk-cm1dsffd.js → chunk-4f5hhqh9.js} +2 -2
  6. package/dist/bin/{chunk-qfkfhg84.js → chunk-7s3wtq40.js} +1 -1
  7. package/dist/bin/{chunk-th86qyty.js → chunk-8bb6kyhm.js} +1 -1
  8. package/dist/bin/{chunk-cn5tfp7t.js → chunk-8p2v1gat.js} +2 -2
  9. package/dist/bin/chunk-9pvkb6br.js +1 -0
  10. package/dist/bin/{chunk-a0cvd2ez.js → chunk-bpw8m7rw.js} +1 -1
  11. package/dist/bin/chunk-dzx0w4zb.js +1 -0
  12. package/dist/bin/{chunk-d5q09rxb.js → chunk-f76wtb7d.js} +27 -27
  13. package/dist/bin/{chunk-27mfrb34.js → chunk-h42xsxhm.js} +1 -1
  14. package/dist/bin/{chunk-3pbbc03q.js → chunk-h6n5v6rf.js} +1 -1
  15. package/dist/bin/{chunk-bqcqzc30.js → chunk-kcsjaam6.js} +1 -1
  16. package/dist/bin/{chunk-8pnm151y.js → chunk-w68hker6.js} +1 -1
  17. package/dist/bin/chunk-y4pfvx0x.js +1 -0
  18. package/dist/bin/cli.js +15 -15
  19. package/dist/bin/dashboard-server.js +1 -1
  20. package/dist/{chunk-c97wwdtk.js → chunk-2x636sgn.js} +1 -1
  21. package/dist/{chunk-abadztwc.js → chunk-78shfb0z.js} +3 -3
  22. package/dist/{chunk-f2xqeers.js → chunk-gyp7jcgw.js} +1 -1
  23. package/dist/{chunk-annmzhbb.js → chunk-k3mazfb2.js} +2 -2
  24. package/dist/{chunk-tsaffke7.js → chunk-mhv7dbr1.js} +1 -1
  25. package/dist/{chunk-jch6ks7a.js → chunk-ncsb3sdn.js} +30 -30
  26. package/dist/{chunk-906prq6g.js → chunk-q9rdxpmg.js} +2 -2
  27. package/dist/chunk-wxtr8sv8.js +1 -0
  28. package/dist/deploy/index.js +1 -1
  29. package/dist/drivers/index.js +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/ui/404.html +1 -1
  32. package/dist/ui/accept-invitation.html +1 -1
  33. package/dist/ui/access-denied.html +1 -1
  34. package/dist/ui/account/automation.html +6 -6
  35. package/dist/ui/account/security.html +2 -2
  36. package/dist/ui/applications/compose.html +5 -5
  37. package/dist/ui/applications/new.html +1 -1
  38. package/dist/ui/data/backups.html +6 -6
  39. package/dist/ui/data/services.html +6 -6
  40. package/dist/ui/data/volumes.html +6 -6
  41. package/dist/ui/index.html +5 -5
  42. package/dist/ui/infrastructure/topology.html +5 -5
  43. package/dist/ui/integrations.html +1 -1
  44. package/dist/ui/operations/alerts.html +5 -5
  45. package/dist/ui/operations/configuration.html +6 -6
  46. package/dist/ui/operations/jobs.html +6 -6
  47. package/dist/ui/operations/maintenance.html +6 -6
  48. package/dist/ui/operations/observability.html +5 -5
  49. package/dist/ui/operations/previews.html +6 -6
  50. package/dist/ui/operations/queue.html +6 -6
  51. package/dist/ui/operations/regions.html +6 -6
  52. package/dist/ui/operations/releases.html +5 -5
  53. package/dist/ui/operations/spend.html +5 -5
  54. package/dist/ui/operations/workloads.html +6 -6
  55. package/dist/ui/security.html +1 -1
  56. package/dist/ui/server/actions.html +6 -6
  57. package/dist/ui/server/activity.html +1 -1
  58. package/dist/ui/server/capacity.html +6 -6
  59. package/dist/ui/server/database.html +6 -6
  60. package/dist/ui/server/deployments.html +6 -6
  61. package/dist/ui/server/diagnostics.html +2 -2
  62. package/dist/ui/server/firewall.html +6 -6
  63. package/dist/ui/server/fleet.html +6 -6
  64. package/dist/ui/server/logs.html +6 -6
  65. package/dist/ui/server/metrics.html +6 -6
  66. package/dist/ui/server/security.html +1 -1
  67. package/dist/ui/server/services.html +2 -2
  68. package/dist/ui/server/sites.html +6 -6
  69. package/dist/ui/server/ssh-keys.html +6 -6
  70. package/dist/ui/server/team.html +6 -6
  71. package/dist/ui/server/terminal.html +2 -2
  72. package/dist/ui/serverless/alarms.html +5 -5
  73. package/dist/ui/serverless/assets.html +2 -2
  74. package/dist/ui/serverless/cost.html +2 -2
  75. package/dist/ui/serverless/data.html +6 -6
  76. package/dist/ui/serverless/deployments.html +2 -2
  77. package/dist/ui/serverless/firewall.html +2 -2
  78. package/dist/ui/serverless/functions.html +6 -6
  79. package/dist/ui/serverless/logs.html +6 -6
  80. package/dist/ui/serverless/metrics.html +2 -2
  81. package/dist/ui/serverless/queues.html +5 -5
  82. package/dist/ui/serverless/secrets.html +6 -6
  83. package/dist/ui/serverless/traces.html +6 -6
  84. package/dist/ui/serverless.html +5 -5
  85. package/package.json +3 -3
  86. package/dist/bin/chunk-dgxzk04r.js +0 -1
  87. package/dist/bin/chunk-s4x1pb7n.js +0 -1
  88. package/dist/bin/chunk-tcstvf11.js +0 -1
  89. package/dist/chunk-f4m9k2q6.js +0 -1
@@ -1,24 +1,24 @@
1
- import{kr,n}from"./chunk-7gvnrx46.js";import{he}from"./chunk-kcj92xx7.js";import*as l from"node:crypto";import{readFileSync as B}from"node:fs";import{readdir as L}from"node:fs/promises";import{join as z}from"node:path";function Nr(e){if(e){let r=D(e);if(!r)throw Error(`AWS profile '${e}' not found in ~/.aws/credentials`);return r}let t=process.env.AWS_ACCESS_KEY_ID,s=process.env.AWS_SECRET_ACCESS_KEY;if(t&&s)return{accessKeyId:t,secretAccessKey:s,sessionToken:process.env.AWS_SESSION_TOKEN};return D(process.env.AWS_PROFILE||"default")??{accessKeyId:"",secretAccessKey:""}}function D(e){let{existsSync:t,readFileSync:s}=he("node:fs"),{homedir:r}=he("node:os"),{join:i}=he("node:path"),a=process.env.AWS_SHARED_CREDENTIALS_FILE||i(r(),".aws","credentials");if(!t(a))return null;let c=s(a,"utf-8"),g=null,d,u,y;for(let h of c.split(`
2
- `)){let m=h.trim();if(!m||m.startsWith("#")||m.startsWith(";"))continue;let p=m.match(/^\[([^\]]+)\]$/);if(p){if(g===e&&d&&u)return{accessKeyId:d,secretAccessKey:u,sessionToken:y};g=p[1],d=void 0,u=void 0,y=void 0;continue}if(g===e){let[b,...S]=m.split("="),f=S.join("=").trim();switch(b.trim().toLowerCase()){case"aws_access_key_id":d=f;break;case"aws_secret_access_key":u=f;break;case"aws_session_token":y=f;break}}}if(g===e&&d&&u)return{accessKeyId:d,secretAccessKey:u,sessionToken:y};return null}function U(e){let{buffer:t,byteOffset:s,byteLength:r}=e;if(t instanceof ArrayBuffer)return t.slice(s,s+r);let i=new ArrayBuffer(r);return new Uint8Array(i).set(new Uint8Array(e)),i}function j(e,t){let s=e?.[t]??e;if(s===null||typeof s!=="object"||Array.isArray(s))return s;let r={...s};return delete r["@_xmlns"],r}class o{client;region;explicitProfile;endpoint;endpointProtocol="https";forcePathStyle;explicitCredentials;constructor(e="us-east-1",t,s){let r=typeof e==="string"?s:e,i=typeof e==="string"?e:e.region??"us-east-1",a=typeof e==="string"?t:e.profile,c=r?.endpoint?kr({region:i,path:"/",endpoint:r.endpoint}):void 0;this.region=i,this.explicitProfile=a,this.endpoint=c?.host,this.endpointProtocol=c?.protocol??"https",this.forcePathStyle=r?.forcePathStyle,this.explicitCredentials=r?.credentials,this.client=new n(r?.credentials,{profile:a,endpoint:r?.endpoint,forcePathStyle:r?.forcePathStyle})}getCredentials(){if(this.explicitCredentials?.accessKeyId&&this.explicitCredentials.secretAccessKey)return this.explicitCredentials;let e=Nr(this.explicitProfile);if(e.accessKeyId&&e.secretAccessKey)return e;throw Error("S3 credentials not found. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY (or pass explicit credentials/profile), or configure ~/.aws/credentials.")}s3BaseHost(){return this.endpoint||`s3.${this.region}.amazonaws.com`}s3VirtualHost(e){return this.forcePathStyle?this.s3BaseHost():`${e}.${this.s3BaseHost()}`}objectPath(e,t){return this.forcePathStyle?`/${e}/${t}`:`/${t}`}objectUrl(e,t){return`${this.endpointProtocol}://${this.s3VirtualHost(e)}${this.objectPath(e,t)}`}async listBuckets(){let e=await this.client.request({service:"s3",region:this.region,method:"GET",path:"/"}),t=[],r=(e?.ListAllMyBucketsResult??e)?.Buckets?.Bucket;if(r){let i=Array.isArray(r)?r:[r];for(let a of i)t.push({Name:a.Name,CreationDate:a.CreationDate})}return{Buckets:t}}async createBucket(e,t){let s={};if(t?.acl)s["x-amz-acl"]=t.acl;let r;if(this.region!=="us-east-1"&&!this.endpoint)r=`<?xml version="1.0" encoding="UTF-8"?>
1
+ import{kr,n}from"./chunk-7gvnrx46.js";import{he}from"./chunk-kcj92xx7.js";import*as d from"node:crypto";import{readFileSync as B}from"node:fs";import{readdir as L}from"node:fs/promises";import{join as z}from"node:path";function Nr(e){if(e){let r=D(e);if(!r)throw Error(`AWS profile '${e}' not found in ~/.aws/credentials`);return r}let t=process.env.AWS_ACCESS_KEY_ID,s=process.env.AWS_SECRET_ACCESS_KEY;if(t&&s)return{accessKeyId:t,secretAccessKey:s,sessionToken:process.env.AWS_SESSION_TOKEN};return D(process.env.AWS_PROFILE||"default")??{accessKeyId:"",secretAccessKey:""}}function D(e){let{existsSync:t,readFileSync:s}=he("node:fs"),{homedir:r}=he("node:os"),{join:i}=he("node:path"),a=process.env.AWS_SHARED_CREDENTIALS_FILE||i(r(),".aws","credentials");if(!t(a))return null;let c=s(a,"utf-8"),g=null,u,l,p;for(let h of c.split(`
2
+ `)){let y=h.trim();if(!y||y.startsWith("#")||y.startsWith(";"))continue;let m=y.match(/^\[([^\]]+)\]$/);if(m){if(g===e&&u&&l)return{accessKeyId:u,secretAccessKey:l,sessionToken:p};g=m[1],u=void 0,l=void 0,p=void 0;continue}if(g===e){let[b,...S]=y.split("="),f=S.join("=").trim();switch(b.trim().toLowerCase()){case"aws_access_key_id":u=f;break;case"aws_secret_access_key":l=f;break;case"aws_session_token":p=f;break}}}if(g===e&&u&&l)return{accessKeyId:u,secretAccessKey:l,sessionToken:p};return null}function U(e){let{buffer:t,byteOffset:s,byteLength:r}=e;if(t instanceof ArrayBuffer)return t.slice(s,s+r);let i=new ArrayBuffer(r);return new Uint8Array(i).set(new Uint8Array(e)),i}function j(e,t){let s=e?.[t]??e;if(s===null||typeof s!=="object"||Array.isArray(s))return s;let r={...s};return delete r["@_xmlns"],r}class o{client;region;explicitProfile;endpoint;endpointProtocol="https";forcePathStyle;explicitCredentials;constructor(e="us-east-1",t,s){let r=typeof e==="string"?s:e,i=typeof e==="string"?e:e.region??"us-east-1",a=typeof e==="string"?t:e.profile,c=r?.endpoint?kr({region:i,path:"/",endpoint:r.endpoint}):void 0;this.region=i,this.explicitProfile=a,this.endpoint=c?.host,this.endpointProtocol=c?.protocol??"https",this.forcePathStyle=r?.forcePathStyle,this.explicitCredentials=r?.credentials,this.client=new n(r?.credentials,{profile:a,endpoint:r?.endpoint,forcePathStyle:r?.forcePathStyle})}getCredentials(){if(this.explicitCredentials?.accessKeyId&&this.explicitCredentials.secretAccessKey)return this.explicitCredentials;let e=Nr(this.explicitProfile);if(e.accessKeyId&&e.secretAccessKey)return e;throw Error("S3 credentials not found. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY (or pass explicit credentials/profile), or configure ~/.aws/credentials.")}s3BaseHost(){return this.endpoint||`s3.${this.region}.amazonaws.com`}s3VirtualHost(e){return this.forcePathStyle?this.s3BaseHost():`${e}.${this.s3BaseHost()}`}objectPath(e,t){return this.forcePathStyle?`/${e}/${t}`:`/${t}`}objectUrl(e,t){return`${this.endpointProtocol}://${this.s3VirtualHost(e)}${this.objectPath(e,t)}`}async listBuckets(){let e=await this.client.request({service:"s3",region:this.region,method:"GET",path:"/"}),t=[],r=(e?.ListAllMyBucketsResult??e)?.Buckets?.Bucket;if(r){let i=Array.isArray(r)?r:[r];for(let a of i)t.push({Name:a.Name,CreationDate:a.CreationDate})}return{Buckets:t}}async createBucket(e,t){let s={};if(t?.acl)s["x-amz-acl"]=t.acl;let r;if(this.region!=="us-east-1"&&!this.endpoint)r=`<?xml version="1.0" encoding="UTF-8"?>
3
3
  <CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
4
4
  <LocationConstraint>${this.region}</LocationConstraint>
5
- </CreateBucketConfiguration>`,s["Content-Type"]="application/xml";await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,headers:s,body:r})}async deleteBucket(e){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${e}`})}async emptyAndDeleteBucket(e){let t=!0;while(t){let s=await this.listAllObjects({bucket:e});if(s.length===0){t=!1;break}let r=s.map((i)=>i.Key);for(let i=0;i<r.length;i+=1000){let a=r.slice(i,i+1000);await this.deleteObjects(e,a)}}await this.deleteBucket(e)}async listAllObjects(e){let t=[],s;do{let r={"list-type":"2","max-keys":"1000"};if(e.prefix)r.prefix=e.prefix;if(s)r["continuation-token"]=s;let i=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e.bucket}`,queryParams:r}),a=i?.ListBucketResult??i,c=a?.Contents;if(c){let d=Array.isArray(c)?c:[c];for(let u of d)t.push({Key:u.Key,LastModified:u.LastModified||"",Size:Number.parseInt(u.Size||"0"),ETag:u.ETag})}let g=a?.IsTruncated;s=g==="true"||g===!0?a?.NextContinuationToken:void 0}while(s);return t}async list(e){let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e.bucket}`}),s=[],i=(t?.ListBucketResult??t)?.Contents;if(i){let a=Array.isArray(i)?i:[i];for(let c of a){if(e.prefix&&!c.Key?.startsWith(e.prefix))continue;if(s.push({Key:c.Key||"",LastModified:c.LastModified||"",Size:Number.parseInt(c.Size||"0"),ETag:c.ETag}),e.maxKeys&&s.length>=e.maxKeys)break}}return s}async putObject(e){let t={};if(e.acl)t["x-amz-acl"]=e.acl;if(e.cacheControl)t["Cache-Control"]=e.cacheControl;if(e.contentType)t["Content-Type"]=e.contentType;if(e.metadata)for(let[i,a]of Object.entries(e.metadata))t[`x-amz-meta-${i}`]=a;let s=e.key.split("/").map((i)=>encodeURIComponent(i)).join("/"),r=e.body instanceof Uint8Array&&!Buffer.isBuffer(e.body)?Buffer.from(e.body):e.body;if(Buffer.isBuffer(r)||r instanceof Uint8Array){let i=Buffer.isBuffer(r)?r:Buffer.from(r),{accessKeyId:a,secretAccessKey:c,sessionToken:g}=this.getCredentials(),d=this.s3VirtualHost(e.bucket),u=this.objectPath(e.bucket,s),y=this.objectUrl(e.bucket,s),h=new Date,m=h.toISOString().replace(/[:-]|\.\d{3}/g,""),p=h.toISOString().slice(0,10).replace(/-/g,""),b=l.createHash("sha256").update(i).digest("hex"),S={host:d,"x-amz-date":m,"x-amz-content-sha256":b,...t};if(g)S["x-amz-security-token"]=g;let f=Object.keys(S).sort().map((P)=>`${P.toLowerCase()}:${S[P].trim()}
6
- `).join(""),k=Object.keys(S).sort().map((P)=>P.toLowerCase()).join(";"),T=["PUT",u,"",f,k,b].join(`
7
- `),w="AWS4-HMAC-SHA256",C=`${p}/${this.region}/s3/aws4_request`,q=[w,m,C,l.createHash("sha256").update(T).digest("hex")].join(`
8
- `),I=l.createHmac("sha256",`AWS4${c}`).update(p).digest(),K=l.createHmac("sha256",I).update(this.region).digest(),H=l.createHmac("sha256",K).update("s3").digest(),E=l.createHmac("sha256",H).update("aws4_request").digest(),v=l.createHmac("sha256",E).update(q).digest("hex"),A=`${w} Credential=${a}/${C}, SignedHeaders=${k}, Signature=${v}`,x=await fetch(y,{method:"PUT",headers:{...S,Authorization:A},body:U(i)});if(!x.ok){let P=await x.text();throw Error(`S3 PUT failed: ${x.status} ${P}`)}return}await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${s}`,bucket:e.bucket,headers:t,body:e.body})}async getObject(e,t){let s=t.split("/").map((i)=>encodeURIComponent(i)).join("/");return await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${s}`,bucket:e,rawResponse:!0})}async getObjectBytes(e,t){let{accessKeyId:s,secretAccessKey:r,sessionToken:i}=this.getCredentials(),a=this.s3VirtualHost(e),c=t.split("/").map((P)=>encodeURIComponent(P)).join("/"),g=this.objectPath(e,c),d=this.objectUrl(e,c),u=new Date,y=u.toISOString().replace(/[:-]|\.\d{3}/g,""),h=u.toISOString().slice(0,10).replace(/-/g,""),m=l.createHash("sha256").update("").digest("hex"),p={host:a,"x-amz-date":y,"x-amz-content-sha256":m};if(i)p["x-amz-security-token"]=i;let b=Object.keys(p).sort().map((P)=>`${P.toLowerCase()}:${p[P].trim()}
9
- `).join(""),S=Object.keys(p).sort().map((P)=>P.toLowerCase()).join(";"),f=["GET",g,"",b,S,m].join(`
10
- `),k="AWS4-HMAC-SHA256",T=`${h}/${this.region}/s3/aws4_request`,w=[k,y,T,l.createHash("sha256").update(f).digest("hex")].join(`
11
- `),C=l.createHmac("sha256",`AWS4${r}`).update(h).digest(),q=l.createHmac("sha256",C).update(this.region).digest(),I=l.createHmac("sha256",q).update("s3").digest(),K=l.createHmac("sha256",I).update("aws4_request").digest(),H=l.createHmac("sha256",K).update(w).digest("hex"),E=`${k} Credential=${s}/${T}, SignedHeaders=${S}, Signature=${H}`,v=await fetch(d,{method:"GET",headers:{...p,Authorization:E}});if(!v.ok){let P=await v.text();throw Error(`S3 GET failed: ${v.status} ${P}`)}let A=await v.arrayBuffer(),x=v.headers.get("content-length");return{body:new Uint8Array(A),contentType:v.headers.get("content-type")??void 0,contentLength:x?Number.parseInt(x,10):void 0}}async copyObject(e){let t=(r)=>r.split("/").map((i)=>encodeURIComponent(i)).join("/"),s={"x-amz-copy-source":`/${e.sourceBucket}/${t(e.sourceKey)}`};if(e.metadataDirective)s["x-amz-metadata-directive"]=e.metadataDirective;if(e.contentType)s["Content-Type"]=e.contentType;if(e.metadata)for(let[r,i]of Object.entries(e.metadata))s[`x-amz-meta-${r}`]=i;await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e.destinationBucket}/${t(e.destinationKey)}`,headers:s})}async deleteObject(e,t){let s=t.split("/").map((r)=>encodeURIComponent(r)).join("/");await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${s}`,bucket:e})}async deleteObjects(e,t){let s=`<?xml version="1.0" encoding="UTF-8"?>
5
+ </CreateBucketConfiguration>`,s["Content-Type"]="application/xml";await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,headers:s,body:r})}async deleteBucket(e){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${e}`})}async emptyAndDeleteBucket(e){let t=!0;while(t){let s=await this.listAllObjects({bucket:e});if(s.length===0){t=!1;break}let r=s.map((i)=>i.Key);for(let i=0;i<r.length;i+=1000){let a=r.slice(i,i+1000);await this.deleteObjects(e,a)}}await this.deleteBucket(e)}async listAllObjects(e){let t=[],s;do{let r={"list-type":"2","max-keys":"1000"};if(e.prefix)r.prefix=e.prefix;if(s)r["continuation-token"]=s;let i=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e.bucket}`,queryParams:r}),a=i?.ListBucketResult??i,c=a?.Contents;if(c){let u=Array.isArray(c)?c:[c];for(let l of u)t.push({Key:l.Key,LastModified:l.LastModified||"",Size:Number.parseInt(l.Size||"0"),ETag:l.ETag})}let g=a?.IsTruncated;s=g==="true"||g===!0?a?.NextContinuationToken:void 0}while(s);return t}async list(e){let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e.bucket}`}),s=[],i=(t?.ListBucketResult??t)?.Contents;if(i){let a=Array.isArray(i)?i:[i];for(let c of a){if(e.prefix&&!c.Key?.startsWith(e.prefix))continue;if(s.push({Key:c.Key||"",LastModified:c.LastModified||"",Size:Number.parseInt(c.Size||"0"),ETag:c.ETag}),e.maxKeys&&s.length>=e.maxKeys)break}}return s}async putObject(e){let t={};if(e.acl)t["x-amz-acl"]=e.acl;if(e.cacheControl)t["Cache-Control"]=e.cacheControl;if(e.contentType)t["Content-Type"]=e.contentType;if(e.metadata)for(let[i,a]of Object.entries(e.metadata))t[`x-amz-meta-${i}`]=a;let s=e.key.split("/").map((i)=>encodeURIComponent(i)).join("/"),r=e.body instanceof Uint8Array&&!Buffer.isBuffer(e.body)?Buffer.from(e.body):e.body;if(Buffer.isBuffer(r)||r instanceof Uint8Array){let i=Buffer.isBuffer(r)?r:Buffer.from(r),{accessKeyId:a,secretAccessKey:c,sessionToken:g}=this.getCredentials(),u=this.s3VirtualHost(e.bucket),l=this.objectPath(e.bucket,s),p=this.objectUrl(e.bucket,s),h=new Date,y=h.toISOString().replace(/[:-]|\.\d{3}/g,""),m=h.toISOString().slice(0,10).replace(/-/g,""),b=d.createHash("sha256").update(i).digest("hex"),S={host:u,"x-amz-date":y,"x-amz-content-sha256":b,...t};if(g)S["x-amz-security-token"]=g;let f=Object.keys(S).sort().map((P)=>`${P.toLowerCase()}:${S[P].trim()}
6
+ `).join(""),x=Object.keys(S).sort().map((P)=>P.toLowerCase()).join(";"),C=["PUT",l,"",f,x,b].join(`
7
+ `),w="AWS4-HMAC-SHA256",T=`${m}/${this.region}/s3/aws4_request`,q=[w,y,T,d.createHash("sha256").update(C).digest("hex")].join(`
8
+ `),I=d.createHmac("sha256",`AWS4${c}`).update(m).digest(),K=d.createHmac("sha256",I).update(this.region).digest(),H=d.createHmac("sha256",K).update("s3").digest(),E=d.createHmac("sha256",H).update("aws4_request").digest(),v=d.createHmac("sha256",E).update(q).digest("hex"),A=`${w} Credential=${a}/${T}, SignedHeaders=${x}, Signature=${v}`,k=await fetch(p,{method:"PUT",headers:{...S,Authorization:A},body:U(i)});if(!k.ok){let P=await k.text();throw Error(`S3 PUT failed: ${k.status} ${P}`)}return}await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${s}`,bucket:e.bucket,headers:t,body:e.body})}async getObject(e,t){let s=t.split("/").map((i)=>encodeURIComponent(i)).join("/");return await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${s}`,bucket:e,rawResponse:!0})}async getObjectBytes(e,t){let{accessKeyId:s,secretAccessKey:r,sessionToken:i}=this.getCredentials(),a=this.s3VirtualHost(e),c=t.split("/").map((P)=>encodeURIComponent(P)).join("/"),g=this.objectPath(e,c),u=this.objectUrl(e,c),l=new Date,p=l.toISOString().replace(/[:-]|\.\d{3}/g,""),h=l.toISOString().slice(0,10).replace(/-/g,""),y=d.createHash("sha256").update("").digest("hex"),m={host:a,"x-amz-date":p,"x-amz-content-sha256":y};if(i)m["x-amz-security-token"]=i;let b=Object.keys(m).sort().map((P)=>`${P.toLowerCase()}:${m[P].trim()}
9
+ `).join(""),S=Object.keys(m).sort().map((P)=>P.toLowerCase()).join(";"),f=["GET",g,"",b,S,y].join(`
10
+ `),x="AWS4-HMAC-SHA256",C=`${h}/${this.region}/s3/aws4_request`,w=[x,p,C,d.createHash("sha256").update(f).digest("hex")].join(`
11
+ `),T=d.createHmac("sha256",`AWS4${r}`).update(h).digest(),q=d.createHmac("sha256",T).update(this.region).digest(),I=d.createHmac("sha256",q).update("s3").digest(),K=d.createHmac("sha256",I).update("aws4_request").digest(),H=d.createHmac("sha256",K).update(w).digest("hex"),E=`${x} Credential=${s}/${C}, SignedHeaders=${S}, Signature=${H}`,v=await fetch(u,{method:"GET",headers:{...m,Authorization:E}});if(!v.ok){let P=await v.text();throw Error(`S3 GET failed: ${v.status} ${P}`)}let A=await v.arrayBuffer(),k=v.headers.get("content-length");return{body:new Uint8Array(A),contentType:v.headers.get("content-type")??void 0,contentLength:k?Number.parseInt(k,10):void 0}}async copyObject(e){let t=(r)=>r.split("/").map((i)=>encodeURIComponent(i)).join("/"),s={"x-amz-copy-source":`/${e.sourceBucket}/${t(e.sourceKey)}`};if(e.metadataDirective)s["x-amz-metadata-directive"]=e.metadataDirective;if(e.contentType)s["Content-Type"]=e.contentType;if(e.metadata)for(let[r,i]of Object.entries(e.metadata))s[`x-amz-meta-${r}`]=i;await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e.destinationBucket}/${t(e.destinationKey)}`,headers:s})}async deleteObject(e,t){let s=t.split("/").map((r)=>encodeURIComponent(r)).join("/");await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${s}`,bucket:e})}async deleteObjects(e,t){let s=`<?xml version="1.0" encoding="UTF-8"?>
12
12
  <Delete>
13
13
  ${t.map((i)=>`<Object><Key>${i}</Key></Object>`).join(`
14
14
  `)}
15
- </Delete>`,r=l.createHash("md5").update(s).digest("base64");await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${e}`,queryParams:{delete:""},body:s,headers:{"Content-Type":"application/xml","Content-MD5":r}})}async bucketExists(e){try{return await this.client.request({service:"s3",region:this.region,method:"HEAD",path:`/${e}`}),!0}catch{return!1}}async copy(e){let t=B(e.source);await this.putObject({bucket:e.bucket,key:e.key,body:t,acl:e.acl,cacheControl:e.cacheControl,contentType:e.contentType,metadata:e.metadata})}async sync(e){let t=await this.listFilesRecursive(e.source);for(let s of t){if(e.exclude&&e.exclude.some((a)=>s.includes(a)))continue;if(e.include&&!e.include.some((a)=>s.includes(a)))continue;let r=s.substring(e.source.length+1),i=e.prefix?`${e.prefix}/${r}`:r;if(!e.dryRun){let a=B(s);await this.putObject({bucket:e.bucket,key:i,body:a,acl:e.acl,cacheControl:e.cacheControl,contentType:e.contentType,metadata:e.metadata})}}}async delete(e,t){await this.deleteObject(e,t)}async deletePrefix(e,t){let r=(await this.list({bucket:e,prefix:t})).map((i)=>i.Key);if(r.length>0)await this.deleteObjects(e,r)}async getBucketSize(e,t){return(await this.list({bucket:e,prefix:t})).reduce((r,i)=>r+i.Size,0)}async listFilesRecursive(e){let t=[],s=await L(e,{withFileTypes:!0});for(let r of s){let i=z(e,r.name);if(r.isDirectory()){let a=await this.listFilesRecursive(i);t.push(...a)}else t.push(i)}return t}async putBucketPolicy(e,t){let{accessKeyId:s,secretAccessKey:r,sessionToken:i}=this.getCredentials(),a=this.s3BaseHost(),c=typeof t==="string"?t:JSON.stringify(t),g=new Date,d=g.toISOString().replace(/[:-]|\.\d{3}/g,""),u=g.toISOString().slice(0,10).replace(/-/g,""),y=l.createHash("sha256").update(c).digest("hex"),h="/"+e,m="policy=",p={host:a,"x-amz-date":d,"x-amz-content-sha256":y,"content-type":"application/json"};if(i)p["x-amz-security-token"]=i;let b=Object.keys(p).sort().map((x)=>`${x.toLowerCase()}:${p[x].trim()}
16
- `).join(""),S=Object.keys(p).sort().map((x)=>x.toLowerCase()).join(";"),f=["PUT",h,"policy=",b,S,y].join(`
17
- `),k="AWS4-HMAC-SHA256",T=`${u}/${this.region}/s3/aws4_request`,w=[k,d,T,l.createHash("sha256").update(f).digest("hex")].join(`
18
- `),C=l.createHmac("sha256","AWS4"+r).update(u).digest(),q=l.createHmac("sha256",C).update(this.region).digest(),I=l.createHmac("sha256",q).update("s3").digest(),K=l.createHmac("sha256",I).update("aws4_request").digest(),H=l.createHmac("sha256",K).update(w).digest("hex"),E=`${k} Credential=${s}/${T}, SignedHeaders=${S}, Signature=${H}`,v=`${this.endpointProtocol}://${a}${h}?policy=`,A=await fetch(v,{method:"PUT",headers:{...p,Authorization:E},body:c});if(!A.ok){let x=await A.text();throw Error(`Failed to put bucket policy: ${A.status} ${x}`)}}async getBucketPolicy(e){let{accessKeyId:t,secretAccessKey:s,sessionToken:r}=this.getCredentials(),i=this.s3BaseHost(),a=new Date,c=a.toISOString().replace(/[:-]|\.\d{3}/g,""),g=a.toISOString().slice(0,10).replace(/-/g,""),d=l.createHash("sha256").update("").digest("hex"),u="/"+e,y="policy=",h={host:i,"x-amz-date":c,"x-amz-content-sha256":d};if(r)h["x-amz-security-token"]=r;let m=Object.keys(h).sort().map((A)=>`${A.toLowerCase()}:${h[A].trim()}
19
- `).join(""),p=Object.keys(h).sort().map((A)=>A.toLowerCase()).join(";"),b=["GET",u,"policy=",m,p,d].join(`
20
- `),S="AWS4-HMAC-SHA256",f=`${g}/${this.region}/s3/aws4_request`,k=[S,c,f,l.createHash("sha256").update(b).digest("hex")].join(`
21
- `),T=l.createHmac("sha256","AWS4"+s).update(g).digest(),w=l.createHmac("sha256",T).update(this.region).digest(),C=l.createHmac("sha256",w).update("s3").digest(),q=l.createHmac("sha256",C).update("aws4_request").digest(),I=l.createHmac("sha256",q).update(k).digest("hex"),K=`${S} Credential=${t}/${f}, SignedHeaders=${p}, Signature=${I}`,H=`${this.endpointProtocol}://${i}${u}?policy=`,E=await fetch(H,{method:"GET",headers:{...h,Authorization:K}});if(E.status===404)return null;if(!E.ok){let A=await E.text();throw Error(`Failed to get bucket policy: ${E.status} ${A}`)}let v=await E.text();return JSON.parse(v)}async deleteBucketPolicy(e){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${e}`,queryParams:{policy:""}})}async headBucket(e){try{return{exists:!0,region:(await this.client.request({service:"s3",region:this.region,method:"HEAD",path:`/${e}`,returnHeaders:!0}))?.headers?.["x-amz-bucket-region"]}}catch(t){if(t.statusCode===404)return{exists:!1};throw t}}async headObject(e,t){try{let s=await this.client.request({service:"s3",region:this.region,method:"HEAD",path:`/${e}/${t}`,returnHeaders:!0});return{ContentLength:s?.headers?.["content-length"]?parseInt(s.headers["content-length"]):void 0,ContentType:s?.headers?.["content-type"],ETag:s?.headers?.etag,LastModified:s?.headers?.["last-modified"]}}catch(s){if(s.statusCode===404)return null;throw s}}async getObjectBuffer(e,t){let s=await this.getObject(e,t);return Buffer.from(s)}async getObjectJson(e,t){let s=await this.getObject(e,t);return JSON.parse(s)}async putObjectJson(e,t,s,r){await this.putObject({bucket:e,key:t,body:JSON.stringify(s),contentType:"application/json",...r})}async getBucketVersioning(e){let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e}`,queryParams:{versioning:""}});return{Status:(t?.VersioningConfiguration??t)?.Status}}async putBucketVersioning(e,t){let s=`<?xml version="1.0" encoding="UTF-8"?>
15
+ </Delete>`,r=d.createHash("md5").update(s).digest("base64");await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${e}`,queryParams:{delete:""},body:s,headers:{"Content-Type":"application/xml","Content-MD5":r}})}async bucketExists(e){try{return await this.client.request({service:"s3",region:this.region,method:"HEAD",path:`/${e}`}),!0}catch{return!1}}async copy(e){let t=B(e.source);await this.putObject({bucket:e.bucket,key:e.key,body:t,acl:e.acl,cacheControl:e.cacheControl,contentType:e.contentType,metadata:e.metadata})}async sync(e){let t=await this.listFilesRecursive(e.source);for(let s of t){if(e.exclude&&e.exclude.some((a)=>s.includes(a)))continue;if(e.include&&!e.include.some((a)=>s.includes(a)))continue;let r=s.substring(e.source.length+1),i=e.prefix?`${e.prefix}/${r}`:r;if(!e.dryRun){let a=B(s);await this.putObject({bucket:e.bucket,key:i,body:a,acl:e.acl,cacheControl:e.cacheControl,contentType:e.contentType,metadata:e.metadata})}}}async delete(e,t){await this.deleteObject(e,t)}async deletePrefix(e,t){let r=(await this.list({bucket:e,prefix:t})).map((i)=>i.Key);if(r.length>0)await this.deleteObjects(e,r)}async getBucketSize(e,t){return(await this.list({bucket:e,prefix:t})).reduce((r,i)=>r+i.Size,0)}async listFilesRecursive(e){let t=[],s=await L(e,{withFileTypes:!0});for(let r of s){let i=z(e,r.name);if(r.isDirectory()){let a=await this.listFilesRecursive(i);t.push(...a)}else t.push(i)}return t}async putBucketPolicy(e,t){let{accessKeyId:s,secretAccessKey:r,sessionToken:i}=this.getCredentials(),a=this.s3BaseHost(),c=typeof t==="string"?t:JSON.stringify(t),g=new Date,u=g.toISOString().replace(/[:-]|\.\d{3}/g,""),l=g.toISOString().slice(0,10).replace(/-/g,""),p=d.createHash("sha256").update(c).digest("hex"),h="/"+e,y="policy=",m={host:a,"x-amz-date":u,"x-amz-content-sha256":p,"content-type":"application/json"};if(i)m["x-amz-security-token"]=i;let b=Object.keys(m).sort().map((k)=>`${k.toLowerCase()}:${m[k].trim()}
16
+ `).join(""),S=Object.keys(m).sort().map((k)=>k.toLowerCase()).join(";"),f=["PUT",h,"policy=",b,S,p].join(`
17
+ `),x="AWS4-HMAC-SHA256",C=`${l}/${this.region}/s3/aws4_request`,w=[x,u,C,d.createHash("sha256").update(f).digest("hex")].join(`
18
+ `),T=d.createHmac("sha256","AWS4"+r).update(l).digest(),q=d.createHmac("sha256",T).update(this.region).digest(),I=d.createHmac("sha256",q).update("s3").digest(),K=d.createHmac("sha256",I).update("aws4_request").digest(),H=d.createHmac("sha256",K).update(w).digest("hex"),E=`${x} Credential=${s}/${C}, SignedHeaders=${S}, Signature=${H}`,v=`${this.endpointProtocol}://${a}${h}?policy=`,A=await fetch(v,{method:"PUT",headers:{...m,Authorization:E},body:c});if(!A.ok){let k=await A.text();throw Error(`Failed to put bucket policy: ${A.status} ${k}`)}}async getBucketPolicy(e){let{accessKeyId:t,secretAccessKey:s,sessionToken:r}=this.getCredentials(),i=this.s3BaseHost(),a=new Date,c=a.toISOString().replace(/[:-]|\.\d{3}/g,""),g=a.toISOString().slice(0,10).replace(/-/g,""),u=d.createHash("sha256").update("").digest("hex"),l="/"+e,p="policy=",h={host:i,"x-amz-date":c,"x-amz-content-sha256":u};if(r)h["x-amz-security-token"]=r;let y=Object.keys(h).sort().map((A)=>`${A.toLowerCase()}:${h[A].trim()}
19
+ `).join(""),m=Object.keys(h).sort().map((A)=>A.toLowerCase()).join(";"),b=["GET",l,"policy=",y,m,u].join(`
20
+ `),S="AWS4-HMAC-SHA256",f=`${g}/${this.region}/s3/aws4_request`,x=[S,c,f,d.createHash("sha256").update(b).digest("hex")].join(`
21
+ `),C=d.createHmac("sha256","AWS4"+s).update(g).digest(),w=d.createHmac("sha256",C).update(this.region).digest(),T=d.createHmac("sha256",w).update("s3").digest(),q=d.createHmac("sha256",T).update("aws4_request").digest(),I=d.createHmac("sha256",q).update(x).digest("hex"),K=`${S} Credential=${t}/${f}, SignedHeaders=${m}, Signature=${I}`,H=`${this.endpointProtocol}://${i}${l}?policy=`,E=await fetch(H,{method:"GET",headers:{...h,Authorization:K}});if(E.status===404)return null;if(!E.ok){let A=await E.text();throw Error(`Failed to get bucket policy: ${E.status} ${A}`)}let v=await E.text();return JSON.parse(v)}async deleteBucketPolicy(e){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${e}`,queryParams:{policy:""}})}async headBucket(e){try{return{exists:!0,region:(await this.client.request({service:"s3",region:this.region,method:"HEAD",path:`/${e}`,returnHeaders:!0}))?.headers?.["x-amz-bucket-region"]}}catch(t){if(t.statusCode===404)return{exists:!1};throw t}}async headObject(e,t){try{let s=await this.client.request({service:"s3",region:this.region,method:"HEAD",path:`/${e}/${t}`,returnHeaders:!0});return{ContentLength:s?.headers?.["content-length"]?parseInt(s.headers["content-length"]):void 0,ContentType:s?.headers?.["content-type"],ETag:s?.headers?.etag,LastModified:s?.headers?.["last-modified"]}}catch(s){if(s.statusCode===404)return null;throw s}}async getObjectBuffer(e,t){let s=await this.getObject(e,t);return Buffer.from(s)}async getObjectJson(e,t){let s=await this.getObject(e,t);return JSON.parse(s)}async putObjectJson(e,t,s,r){await this.putObject({bucket:e,key:t,body:JSON.stringify(s),contentType:"application/json",...r})}async getBucketVersioning(e){let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e}`,queryParams:{versioning:""}});return{Status:(t?.VersioningConfiguration??t)?.Status}}async putBucketVersioning(e,t){let s=`<?xml version="1.0" encoding="UTF-8"?>
22
22
  <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
23
23
  <Status>${t}</Status>
24
24
  </VersioningConfiguration>`;await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,queryParams:{versioning:""},headers:{"Content-Type":"application/xml"},body:s})}async getBucketLifecycleConfiguration(e){try{let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${e}`,queryParams:{lifecycle:""}});return j(t,"LifecycleConfiguration")}catch(t){if(t.statusCode===404)return null;throw t}}async putBucketLifecycleConfiguration(e,t){let r=`<?xml version="1.0" encoding="UTF-8"?>
@@ -57,18 +57,18 @@ import{kr,n}from"./chunk-7gvnrx46.js";import{he}from"./chunk-kcj92xx7.js";import
57
57
  <IgnorePublicAcls>${t.IgnorePublicAcls??!0}</IgnorePublicAcls>
58
58
  <BlockPublicPolicy>${t.BlockPublicPolicy??!0}</BlockPublicPolicy>
59
59
  <RestrictPublicBuckets>${t.RestrictPublicBuckets??!0}</RestrictPublicBuckets>
60
- </PublicAccessBlockConfiguration>`;await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,queryParams:{publicAccessBlock:""},headers:{"Content-Type":"application/xml"},body:s})}async deletePublicAccessBlock(e){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${e}`,queryParams:{publicAccessBlock:""}})}generatePresignedGetUrl(e,t,s=3600){let{accessKeyId:r,secretAccessKey:i}=this.getCredentials(),a=this.s3VirtualHost(e),c=new Date,g=c.toISOString().replace(/[:-]|\.\d{3}/g,""),d=c.toISOString().slice(0,10).replace(/-/g,""),u=`${d}/${this.region}/s3/aws4_request`,y=`${r}/${u}`,h=t.split("/").map((C)=>encodeURIComponent(C)).join("/"),m=new URLSearchParams({"X-Amz-Algorithm":"AWS4-HMAC-SHA256","X-Amz-Credential":y,"X-Amz-Date":g,"X-Amz-Expires":s.toString(),"X-Amz-SignedHeaders":"host"}),p=["GET",this.objectPath(e,h),m.toString(),`host:${a}
60
+ </PublicAccessBlockConfiguration>`;await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${e}`,queryParams:{publicAccessBlock:""},headers:{"Content-Type":"application/xml"},body:s})}async deletePublicAccessBlock(e){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${e}`,queryParams:{publicAccessBlock:""}})}generatePresignedGetUrl(e,t,s=3600){let{accessKeyId:r,secretAccessKey:i}=this.getCredentials(),a=this.s3VirtualHost(e),c=new Date,g=c.toISOString().replace(/[:-]|\.\d{3}/g,""),u=c.toISOString().slice(0,10).replace(/-/g,""),l=`${u}/${this.region}/s3/aws4_request`,p=`${r}/${l}`,h=t.split("/").map((T)=>encodeURIComponent(T)).join("/"),y=new URLSearchParams({"X-Amz-Algorithm":"AWS4-HMAC-SHA256","X-Amz-Credential":p,"X-Amz-Date":g,"X-Amz-Expires":s.toString(),"X-Amz-SignedHeaders":"host"}),m=["GET",this.objectPath(e,h),y.toString(),`host:${a}
61
61
  `,"host","UNSIGNED-PAYLOAD"].join(`
62
- `),b=["AWS4-HMAC-SHA256",g,u,l.createHash("sha256").update(p).digest("hex")].join(`
63
- `),S=l.createHmac("sha256",`AWS4${i}`).update(d).digest(),f=l.createHmac("sha256",S).update(this.region).digest(),k=l.createHmac("sha256",f).update("s3").digest(),T=l.createHmac("sha256",k).update("aws4_request").digest(),w=l.createHmac("sha256",T).update(b).digest("hex");return m.append("X-Amz-Signature",w),`${this.endpointProtocol}://${a}${this.objectPath(e,h)}?${m.toString()}`}generatePresignedPutUrl(e,t,s,r=3600){let{accessKeyId:i,secretAccessKey:a}=this.getCredentials(),c=this.s3VirtualHost(e),g=new Date,d=g.toISOString().replace(/[:-]|\.\d{3}/g,""),u=g.toISOString().slice(0,10).replace(/-/g,""),y=`${u}/${this.region}/s3/aws4_request`,h=`${i}/${y}`,m=t.split("/").map((q)=>encodeURIComponent(q)).join("/"),p=new URLSearchParams({"X-Amz-Algorithm":"AWS4-HMAC-SHA256","X-Amz-Credential":h,"X-Amz-Date":d,"X-Amz-Expires":r.toString(),"X-Amz-SignedHeaders":"content-type;host"}),b=["PUT",this.objectPath(e,m),p.toString(),`content-type:${s}
62
+ `),b=["AWS4-HMAC-SHA256",g,l,d.createHash("sha256").update(m).digest("hex")].join(`
63
+ `),S=d.createHmac("sha256",`AWS4${i}`).update(u).digest(),f=d.createHmac("sha256",S).update(this.region).digest(),x=d.createHmac("sha256",f).update("s3").digest(),C=d.createHmac("sha256",x).update("aws4_request").digest(),w=d.createHmac("sha256",C).update(b).digest("hex");return y.append("X-Amz-Signature",w),`${this.endpointProtocol}://${a}${this.objectPath(e,h)}?${y.toString()}`}generatePresignedPutUrl(e,t,s,r=3600){let{accessKeyId:i,secretAccessKey:a}=this.getCredentials(),c=this.s3VirtualHost(e),g=new Date,u=g.toISOString().replace(/[:-]|\.\d{3}/g,""),l=g.toISOString().slice(0,10).replace(/-/g,""),p=`${l}/${this.region}/s3/aws4_request`,h=`${i}/${p}`,y=t.split("/").map((q)=>encodeURIComponent(q)).join("/"),m=new URLSearchParams({"X-Amz-Algorithm":"AWS4-HMAC-SHA256","X-Amz-Credential":h,"X-Amz-Date":u,"X-Amz-Expires":r.toString(),"X-Amz-SignedHeaders":"content-type;host"}),b=["PUT",this.objectPath(e,y),m.toString(),`content-type:${s}
64
64
  host:${c}
65
65
  `,"content-type;host","UNSIGNED-PAYLOAD"].join(`
66
- `),S=["AWS4-HMAC-SHA256",d,y,l.createHash("sha256").update(b).digest("hex")].join(`
67
- `),f=l.createHmac("sha256",`AWS4${a}`).update(u).digest(),k=l.createHmac("sha256",f).update(this.region).digest(),T=l.createHmac("sha256",k).update("s3").digest(),w=l.createHmac("sha256",T).update("aws4_request").digest(),C=l.createHmac("sha256",w).update(S).digest("hex");return p.append("X-Amz-Signature",C),`${this.endpointProtocol}://${c}${this.objectPath(e,m)}?${p.toString()}`}async createMultipartUpload(e,t,s){let r={};if(s?.contentType)r["Content-Type"]=s.contentType;if(s?.metadata)for(let[g,d]of Object.entries(s.metadata))r[`x-amz-meta-${g}`]=d;let i=t.split("/").map((g)=>encodeURIComponent(g)).join("/"),a=await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${i}`,bucket:e,queryParams:{uploads:""},headers:r});return{UploadId:(a?.InitiateMultipartUploadResult??a)?.UploadId}}async uploadPart(e,t,s,r,i){let{accessKeyId:a,secretAccessKey:c,sessionToken:g}=this.getCredentials(),d=this.s3VirtualHost(e),u=t.split("/").map((O)=>encodeURIComponent(O)).join("/"),y=this.objectPath(e,u),h=`${this.objectUrl(e,u)}?partNumber=${r}&uploadId=${encodeURIComponent(s)}`,m=new Date,p=m.toISOString().replace(/[:-]|\.\d{3}/g,""),b=m.toISOString().slice(0,10).replace(/-/g,""),S=l.createHash("sha256").update(i).digest("hex"),f={host:d,"x-amz-date":p,"x-amz-content-sha256":S};if(g)f["x-amz-security-token"]=g;let k=Object.keys(f).sort().map((O)=>`${O.toLowerCase()}:${f[O].trim()}
68
- `).join(""),T=Object.keys(f).sort().map((O)=>O.toLowerCase()).join(";"),w=["PUT",y,`partNumber=${r}&uploadId=${encodeURIComponent(s)}`,k,T,S].join(`
69
- `),C="AWS4-HMAC-SHA256",q=`${b}/${this.region}/s3/aws4_request`,I=[C,p,q,l.createHash("sha256").update(w).digest("hex")].join(`
70
- `),K=l.createHmac("sha256",`AWS4${c}`).update(b).digest(),H=l.createHmac("sha256",K).update(this.region).digest(),E=l.createHmac("sha256",H).update("s3").digest(),v=l.createHmac("sha256",E).update("aws4_request").digest(),A=l.createHmac("sha256",v).update(I).digest("hex"),x=`${C} Credential=${a}/${q}, SignedHeaders=${T}, Signature=${A}`,P=await fetch(h,{method:"PUT",headers:{...f,Authorization:x},body:U(i)});if(!P.ok){let O=await P.text();throw Error(`Upload part failed: ${P.status} ${O}`)}return{ETag:P.headers.get("etag")||""}}async completeMultipartUpload(e,t,s,r){let i=t.split("/").map((g)=>encodeURIComponent(g)).join("/"),c=`<?xml version="1.0" encoding="UTF-8"?>
71
- <CompleteMultipartUpload>${r.sort((g,d)=>g.PartNumber-d.PartNumber).map((g)=>`<Part><PartNumber>${g.PartNumber}</PartNumber><ETag>${g.ETag}</ETag></Part>`).join("")}</CompleteMultipartUpload>`;await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${i}`,bucket:e,queryParams:{uploadId:s},headers:{"Content-Type":"application/xml"},body:c})}async abortMultipartUpload(e,t,s){let r=t.split("/").map((i)=>encodeURIComponent(i)).join("/");await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${r}`,bucket:e,queryParams:{uploadId:s}})}async listMultipartUploads(e){let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:"/",bucket:e,queryParams:{uploads:""}}),s=(t?.ListMultipartUploadsResult??t)?.Upload;if(!s)return[];return(Array.isArray(s)?s:[s]).map((i)=>({Key:i.Key,UploadId:i.UploadId,Initiated:i.Initiated}))}async restoreObject(e,t,s,r="Standard"){let i=`<?xml version="1.0" encoding="UTF-8"?>
66
+ `),S=["AWS4-HMAC-SHA256",u,p,d.createHash("sha256").update(b).digest("hex")].join(`
67
+ `),f=d.createHmac("sha256",`AWS4${a}`).update(l).digest(),x=d.createHmac("sha256",f).update(this.region).digest(),C=d.createHmac("sha256",x).update("s3").digest(),w=d.createHmac("sha256",C).update("aws4_request").digest(),T=d.createHmac("sha256",w).update(S).digest("hex");return m.append("X-Amz-Signature",T),`${this.endpointProtocol}://${c}${this.objectPath(e,y)}?${m.toString()}`}async createMultipartUpload(e,t,s){let r={};if(s?.contentType)r["Content-Type"]=s.contentType;if(s?.metadata)for(let[g,u]of Object.entries(s.metadata))r[`x-amz-meta-${g}`]=u;let i=t.split("/").map((g)=>encodeURIComponent(g)).join("/"),a=await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${i}`,bucket:e,queryParams:{uploads:""},headers:r});return{UploadId:(a?.InitiateMultipartUploadResult??a)?.UploadId}}async uploadPart(e,t,s,r,i){let{accessKeyId:a,secretAccessKey:c,sessionToken:g}=this.getCredentials(),u=this.s3VirtualHost(e),l=t.split("/").map((O)=>encodeURIComponent(O)).join("/"),p=this.objectPath(e,l),h=`${this.objectUrl(e,l)}?partNumber=${r}&uploadId=${encodeURIComponent(s)}`,y=new Date,m=y.toISOString().replace(/[:-]|\.\d{3}/g,""),b=y.toISOString().slice(0,10).replace(/-/g,""),S=d.createHash("sha256").update(i).digest("hex"),f={host:u,"x-amz-date":m,"x-amz-content-sha256":S};if(g)f["x-amz-security-token"]=g;let x=Object.keys(f).sort().map((O)=>`${O.toLowerCase()}:${f[O].trim()}
68
+ `).join(""),C=Object.keys(f).sort().map((O)=>O.toLowerCase()).join(";"),w=["PUT",p,`partNumber=${r}&uploadId=${encodeURIComponent(s)}`,x,C,S].join(`
69
+ `),T="AWS4-HMAC-SHA256",q=`${b}/${this.region}/s3/aws4_request`,I=[T,m,q,d.createHash("sha256").update(w).digest("hex")].join(`
70
+ `),K=d.createHmac("sha256",`AWS4${c}`).update(b).digest(),H=d.createHmac("sha256",K).update(this.region).digest(),E=d.createHmac("sha256",H).update("s3").digest(),v=d.createHmac("sha256",E).update("aws4_request").digest(),A=d.createHmac("sha256",v).update(I).digest("hex"),k=`${T} Credential=${a}/${q}, SignedHeaders=${C}, Signature=${A}`,P=await fetch(h,{method:"PUT",headers:{...f,Authorization:k},body:U(i)});if(!P.ok){let O=await P.text();throw Error(`Upload part failed: ${P.status} ${O}`)}return{ETag:P.headers.get("etag")||""}}async completeMultipartUpload(e,t,s,r){let i=t.split("/").map((g)=>encodeURIComponent(g)).join("/"),c=`<?xml version="1.0" encoding="UTF-8"?>
71
+ <CompleteMultipartUpload>${r.sort((g,u)=>g.PartNumber-u.PartNumber).map((g)=>`<Part><PartNumber>${g.PartNumber}</PartNumber><ETag>${g.ETag}</ETag></Part>`).join("")}</CompleteMultipartUpload>`;await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${i}`,bucket:e,queryParams:{uploadId:s},headers:{"Content-Type":"application/xml"},body:c})}async abortMultipartUpload(e,t,s){let r=t.split("/").map((i)=>encodeURIComponent(i)).join("/");await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${r}`,bucket:e,queryParams:{uploadId:s}})}async listMultipartUploads(e){let t=await this.client.request({service:"s3",region:this.region,method:"GET",path:"/",bucket:e,queryParams:{uploads:""}}),s=(t?.ListMultipartUploadsResult??t)?.Upload;if(!s)return[];return(Array.isArray(s)?s:[s]).map((i)=>({Key:i.Key,UploadId:i.UploadId,Initiated:i.Initiated}))}async restoreObject(e,t,s,r="Standard"){let i=`<?xml version="1.0" encoding="UTF-8"?>
72
72
  <RestoreRequest>
73
73
  <Days>${s}</Days>
74
74
  <GlacierJobParameters>
@@ -80,13 +80,13 @@ host:${c}
80
80
  <ExpressionType>SQL</ExpressionType>
81
81
  <InputSerialization>${a}</InputSerialization>
82
82
  <OutputSerialization>${c}</OutputSerialization>
83
- </SelectObjectContentRequest>`;return await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${e}/${t}`,queryParams:{select:"","select-type":"2"},headers:{"Content-Type":"application/xml"},body:g,rawResponse:!0})}async getSignedUrl(e){let{bucket:t,key:s,expiresIn:r=3600,operation:i="getObject"}=e,{accessKeyId:a,secretAccessKey:c,sessionToken:g}=this.getCredentials(),d=new Date,u=d.toISOString().replace(/[:-]|\.\d{3}/g,""),y=d.toISOString().slice(0,10).replace(/-/g,""),h=this.s3VirtualHost(t),m=i==="putObject"?"PUT":"GET",p="AWS4-HMAC-SHA256",b=`${y}/${this.region}/s3/aws4_request`,f={"X-Amz-Algorithm":"AWS4-HMAC-SHA256","X-Amz-Credential":`${a}/${b}`,"X-Amz-Date":u,"X-Amz-Expires":r.toString(),"X-Amz-SignedHeaders":"host"};if(g)f["X-Amz-Security-Token"]=g;let T=Object.keys(f).sort().map((R)=>`${encodeURIComponent(R)}=${encodeURIComponent(f[R])}`).join("&"),w=s.split("/").map((R)=>encodeURIComponent(R)).join("/"),C=this.objectPath(t,w),q=`host:${h}
84
- `,H=[m,C,T,q,"host","UNSIGNED-PAYLOAD"].join(`
85
- `),E=["AWS4-HMAC-SHA256",u,b,l.createHash("sha256").update(H).digest("hex")].join(`
86
- `),v=l.createHmac("sha256",`AWS4${c}`).update(y).digest(),A=l.createHmac("sha256",v).update(this.region).digest(),x=l.createHmac("sha256",A).update("s3").digest(),P=l.createHmac("sha256",x).update("aws4_request").digest(),O=l.createHmac("sha256",P).update(E).digest("hex");return`${this.endpointProtocol}://${h}${C}?${T}&X-Amz-Signature=${O}`}async listObjects(e){let{bucket:t,prefix:s,maxKeys:r=1000,continuationToken:i}=e,a={"list-type":"2","max-keys":r.toString()};if(s)a.prefix=s;if(i)a["continuation-token"]=i;let c=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${t}`,queryParams:a}),g=[],d=c?.ListBucketResult??c;if(d?.Contents){let u=Array.isArray(d.Contents)?d.Contents:[d.Contents];for(let y of u)g.push({Key:y.Key||"",LastModified:y.LastModified||"",Size:Number.parseInt(y.Size||"0"),ETag:y.ETag})}return{objects:g,nextContinuationToken:d?.NextContinuationToken}}async emptyBucket(e){let t=0,s=await this.listAllObjects({bucket:e});if(s.length>0)for(let r=0;r<s.length;r+=1000){let a=s.slice(r,r+1000).map((c)=>c.Key);await this.deleteObjects(e,a),t+=a.length}try{let r,i;do{let a=await this.listObjectVersions({bucket:e,keyMarker:r,versionIdMarker:i,maxKeys:1000}),c=[];if(a.versions)for(let g of a.versions)c.push({Key:g.Key,VersionId:g.VersionId});if(a.deleteMarkers)for(let g of a.deleteMarkers)c.push({Key:g.Key,VersionId:g.VersionId});if(c.length>0)await this.deleteObjectVersions(e,c),t+=c.length;r=a.nextKeyMarker,i=a.nextVersionIdMarker}while(r)}catch{}return{deletedCount:t}}async listObjectVersions(e){let{bucket:t,prefix:s,keyMarker:r,versionIdMarker:i,maxKeys:a=1000}=e,c={versions:"","max-keys":a.toString()};if(s)c.prefix=s;if(r)c["key-marker"]=r;if(i)c["version-id-marker"]=i;let g=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${t}`,queryParams:c}),d=[],u=[];if(g.Version){let y=Array.isArray(g.Version)?g.Version:[g.Version];for(let h of y)d.push({Key:h.Key,VersionId:h.VersionId,IsLatest:h.IsLatest==="true"})}if(g.DeleteMarker){let y=Array.isArray(g.DeleteMarker)?g.DeleteMarker:[g.DeleteMarker];for(let h of y)u.push({Key:h.Key,VersionId:h.VersionId,IsLatest:h.IsLatest==="true"})}return{versions:d,deleteMarkers:u,nextKeyMarker:g.NextKeyMarker,nextVersionIdMarker:g.NextVersionIdMarker}}async deleteObjectVersions(e,t){let s=`<?xml version="1.0" encoding="UTF-8"?>
83
+ </SelectObjectContentRequest>`;return await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${e}/${t}`,queryParams:{select:"","select-type":"2"},headers:{"Content-Type":"application/xml"},body:g,rawResponse:!0})}async getSignedUrl(e){let{bucket:t,key:s,expiresIn:r=3600,operation:i="getObject"}=e,{accessKeyId:a,secretAccessKey:c,sessionToken:g}=this.getCredentials(),u=new Date,l=u.toISOString().replace(/[:-]|\.\d{3}/g,""),p=u.toISOString().slice(0,10).replace(/-/g,""),h=this.s3VirtualHost(t),y=i==="putObject"?"PUT":"GET",m="AWS4-HMAC-SHA256",b=`${p}/${this.region}/s3/aws4_request`,f={"X-Amz-Algorithm":"AWS4-HMAC-SHA256","X-Amz-Credential":`${a}/${b}`,"X-Amz-Date":l,"X-Amz-Expires":r.toString(),"X-Amz-SignedHeaders":"host"};if(g)f["X-Amz-Security-Token"]=g;let C=Object.keys(f).sort().map((R)=>`${encodeURIComponent(R)}=${encodeURIComponent(f[R])}`).join("&"),w=s.split("/").map((R)=>encodeURIComponent(R)).join("/"),T=this.objectPath(t,w),q=`host:${h}
84
+ `,H=[y,T,C,q,"host","UNSIGNED-PAYLOAD"].join(`
85
+ `),E=["AWS4-HMAC-SHA256",l,b,d.createHash("sha256").update(H).digest("hex")].join(`
86
+ `),v=d.createHmac("sha256",`AWS4${c}`).update(p).digest(),A=d.createHmac("sha256",v).update(this.region).digest(),k=d.createHmac("sha256",A).update("s3").digest(),P=d.createHmac("sha256",k).update("aws4_request").digest(),O=d.createHmac("sha256",P).update(E).digest("hex");return`${this.endpointProtocol}://${h}${T}?${C}&X-Amz-Signature=${O}`}async listObjects(e){let{bucket:t,prefix:s,delimiter:r,maxKeys:i=1000,continuationToken:a}=e,c={"list-type":"2","max-keys":i.toString()};if(s)c.prefix=s;if(r)c.delimiter=r;if(a)c["continuation-token"]=a;let g=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${t}`,queryParams:c}),u=[],l=g?.ListBucketResult??g;if(l?.Contents){let h=Array.isArray(l.Contents)?l.Contents:[l.Contents];for(let y of h)u.push({Key:String(y.Key??""),LastModified:y.LastModified||"",Size:Number.parseInt(y.Size||"0"),ETag:y.ETag})}let p=[];if(l?.CommonPrefixes){let h=Array.isArray(l.CommonPrefixes)?l.CommonPrefixes:[l.CommonPrefixes];for(let y of h)if(y?.Prefix!==void 0&&y.Prefix!=="")p.push(String(y.Prefix))}return{objects:u,commonPrefixes:p,nextContinuationToken:l?.NextContinuationToken}}async emptyBucket(e){let t=0,s=await this.listAllObjects({bucket:e});if(s.length>0)for(let r=0;r<s.length;r+=1000){let a=s.slice(r,r+1000).map((c)=>c.Key);await this.deleteObjects(e,a),t+=a.length}try{let r,i;do{let a=await this.listObjectVersions({bucket:e,keyMarker:r,versionIdMarker:i,maxKeys:1000}),c=[];if(a.versions)for(let g of a.versions)c.push({Key:g.Key,VersionId:g.VersionId});if(a.deleteMarkers)for(let g of a.deleteMarkers)c.push({Key:g.Key,VersionId:g.VersionId});if(c.length>0)await this.deleteObjectVersions(e,c),t+=c.length;r=a.nextKeyMarker,i=a.nextVersionIdMarker}while(r)}catch{}return{deletedCount:t}}async listObjectVersions(e){let{bucket:t,prefix:s,keyMarker:r,versionIdMarker:i,maxKeys:a=1000}=e,c={versions:"","max-keys":a.toString()};if(s)c.prefix=s;if(r)c["key-marker"]=r;if(i)c["version-id-marker"]=i;let g=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${t}`,queryParams:c}),u=[],l=[];if(g.Version){let p=Array.isArray(g.Version)?g.Version:[g.Version];for(let h of p)u.push({Key:h.Key,VersionId:h.VersionId,IsLatest:h.IsLatest==="true"})}if(g.DeleteMarker){let p=Array.isArray(g.DeleteMarker)?g.DeleteMarker:[g.DeleteMarker];for(let h of p)l.push({Key:h.Key,VersionId:h.VersionId,IsLatest:h.IsLatest==="true"})}return{versions:u,deleteMarkers:l,nextKeyMarker:g.NextKeyMarker,nextVersionIdMarker:g.NextVersionIdMarker}}async deleteObjectVersions(e,t){let s=`<?xml version="1.0" encoding="UTF-8"?>
87
87
  <Delete>
88
88
  <Quiet>true</Quiet>
89
89
  ${t.map((i)=>`<Object><Key>${i.Key}</Key>${i.VersionId?`<VersionId>${i.VersionId}</VersionId>`:""}</Object>`).join(`
90
90
  `)}
91
- </Delete>`,r=l.createHash("md5").update(s).digest("base64");await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${e}`,queryParams:{delete:""},body:s,headers:{"Content-Type":"application/xml","Content-MD5":r}})}}
91
+ </Delete>`,r=d.createHash("md5").update(s).digest("base64");await this.client.request({service:"s3",region:this.region,method:"POST",path:`/${e}`,queryParams:{delete:""},body:s,headers:{"Content-Type":"application/xml","Content-MD5":r}})}}
92
92
  export{Nr,o};
@@ -1,4 +1,4 @@
1
- import{J,le,D,ue,hr}from"./chunk-my6yn5sd.js";import{o}from"./chunk-jch6ks7a.js";import{$e,S}from"./chunk-0kddm2mt.js";import{I}from"./chunk-yzns0k2b.js";import{h}from"./chunk-mxw5gkd8.js";function qa(t){let{bucketName:s,domain:c,aliases:e,certificateArn:g,defaultRootObject:i="index.html",errorDocument:r="404.html",passthroughUrls:a=!1,singlePageApp:d=!1,dynamicApp:m=!1,computeOriginDomain:w,computeOriginPort:O=3008,computeOriginId:F="app-compute",retainOnStackDelete:v=!1}=t,C=v?{DeletionPolicy:"Retain",UpdateReplacePolicy:"Retain"}:{},N=m&&!!w,B=N?["GET","HEAD","OPTIONS","PUT","POST","PATCH","DELETE"]:["GET","HEAD"],E=N?["GET","HEAD"]:["GET","HEAD"],R={},x={};R.S3Bucket={Type:"AWS::S3::Bucket",...C,Properties:{BucketName:s,PublicAccessBlockConfiguration:{BlockPublicAcls:!0,BlockPublicPolicy:!1,IgnorePublicAcls:!0,RestrictPublicBuckets:!1},WebsiteConfiguration:{IndexDocument:i,ErrorDocument:r}}},x.BucketName={Description:"S3 Bucket Name",Value:{Ref:"S3Bucket"}},x.BucketArn={Description:"S3 Bucket ARN",Value:{"Fn::GetAtt":["S3Bucket","Arn"]}},R.CloudFrontOAC={Type:"AWS::CloudFront::OriginAccessControl",...C,Properties:{OriginAccessControlConfig:{Name:`OAC-${s}`,Description:`OAC for ${s}`,OriginAccessControlOriginType:"s3",SigningBehavior:"always",SigningProtocol:"sigv4"}}};let y;if(a&&N)y="InstallRootRedirectFunction",R[y]={Type:"AWS::CloudFront::Function",Properties:{Name:{"Fn::Sub":"${AWS::StackName}-install-root-redirect"},AutoPublish:!0,FunctionConfig:{Comment:"Redirect curl pantry.dev | bash (GET /) to /install.sh on S3",Runtime:"cloudfront-js-2.0"},FunctionCode:`function handler(event) {
1
+ import{J,le,D,ue,hr}from"./chunk-my6yn5sd.js";import{o}from"./chunk-ncsb3sdn.js";import{$e,S}from"./chunk-0kddm2mt.js";import{I}from"./chunk-yzns0k2b.js";import{h}from"./chunk-mxw5gkd8.js";function qa(t){let{bucketName:s,domain:c,aliases:e,certificateArn:g,defaultRootObject:i="index.html",errorDocument:r="404.html",passthroughUrls:a=!1,singlePageApp:d=!1,dynamicApp:m=!1,computeOriginDomain:w,computeOriginPort:O=3008,computeOriginId:F="app-compute",retainOnStackDelete:v=!1}=t,C=v?{DeletionPolicy:"Retain",UpdateReplacePolicy:"Retain"}:{},N=m&&!!w,B=N?["GET","HEAD","OPTIONS","PUT","POST","PATCH","DELETE"]:["GET","HEAD"],E=N?["GET","HEAD"]:["GET","HEAD"],R={},x={};R.S3Bucket={Type:"AWS::S3::Bucket",...C,Properties:{BucketName:s,PublicAccessBlockConfiguration:{BlockPublicAcls:!0,BlockPublicPolicy:!1,IgnorePublicAcls:!0,RestrictPublicBuckets:!1},WebsiteConfiguration:{IndexDocument:i,ErrorDocument:r}}},x.BucketName={Description:"S3 Bucket Name",Value:{Ref:"S3Bucket"}},x.BucketArn={Description:"S3 Bucket ARN",Value:{"Fn::GetAtt":["S3Bucket","Arn"]}},R.CloudFrontOAC={Type:"AWS::CloudFront::OriginAccessControl",...C,Properties:{OriginAccessControlConfig:{Name:`OAC-${s}`,Description:`OAC for ${s}`,OriginAccessControlOriginType:"s3",SigningBehavior:"always",SigningProtocol:"sigv4"}}};let y;if(a&&N)y="InstallRootRedirectFunction",R[y]={Type:"AWS::CloudFront::Function",Properties:{Name:{"Fn::Sub":"${AWS::StackName}-install-root-redirect"},AutoPublish:!0,FunctionConfig:{Comment:"Redirect curl pantry.dev | bash (GET /) to /install.sh on S3",Runtime:"cloudfront-js-2.0"},FunctionCode:`function handler(event) {
2
2
  var request = event.request;
3
3
  if (request.uri === '/' || request.uri === '') {
4
4
  return {
@@ -42,7 +42,7 @@ import{J,le,D,ue,hr}from"./chunk-my6yn5sd.js";import{o}from"./chunk-jch6ks7a.js"
42
42
  │ │
43
43
  │ Verification typically takes 1-2 business days. │
44
44
  │ After verification, re-run: bunx bunpress deploy │
45
- └─────────────────────────────────────────────────────────────────────────────┘`),{success:!1,stackId:x,stackName:i,bucket:N,message:"CloudFront account verification required. Please contact AWS Support."}}return{success:!1,stackId:x,stackName:i,bucket:N,message:`Stack deployment failed: ${n.message}`}}let u=(await r.describeStacks({stackName:i})).Stacks[0]?.Outputs||[],k=(n)=>u.find((l)=>l.OutputKey===n)?.OutputValue,p=k("DistributionDomain");if(p&&d)console.log(`Creating DNS records via ${d.name}...`),await W(d,e,p);else if(p&&!d)console.log("Skipping DNS record creation (DNS verification was skipped)");return{success:!0,stackId:x,stackName:i,bucket:k("BucketName")||N,distributionId:k("DistributionId"),distributionDomain:p,domain:e,certificateArn:m,message:"Static site infrastructure deployed successfully with external DNS"}}async function W(t,s,c){if(!t){console.log("Skipping DNS record creation (DNS verification was skipped)");return}if(s.split(".").length===2)if(t instanceof J){console.log(`Creating Route53 alias record for apex domain ${s} -> ${c}`);let i=await t.createCloudFrontAlias({domain:s,name:s,cloudFrontDomainName:c});if(!i.success)console.warn(`Warning: Could not create Route53 alias record: ${i.message}`),console.warn("Please manually create an A-record alias in Route53:"),console.warn(` ${s} -> ${c}`);else console.log(`Created Route53 alias record: ${s} -> ${c}`);let r=`www.${s}`;console.log(`Creating Route53 alias record for ${r} -> ${c}`);let a=await t.createCloudFrontAlias({domain:s,name:r,cloudFrontDomainName:c});if(!a.success)console.warn(`Warning: Could not create www Route53 alias: ${a.message}`),console.warn("Please manually create an A-record alias in Route53:"),console.warn(` ${r} -> ${c}`);else console.log(`Created Route53 alias record: ${r} -> ${c}`)}else{try{let d=await t.listRecords(s,"A");if(d.success)for(let m of d.records){let w=m.name.replace(/\.$/,"");if(w===s||w==="")console.log(`Removing existing root A record (${m.content}) to make room for ALIAS...`),await t.deleteRecord(s,{name:s,type:"A",content:m.content})}}catch(d){console.log(`Note: Could not check for conflicting A records: ${d instanceof Error?d.message:d}`)}console.log(`Creating ALIAS record for apex domain ${s} -> ${c}`);let i=await t.upsertRecord(s,{name:s,type:"ALIAS",content:c,ttl:600});if(!i.success)console.warn(`Warning: Could not create ALIAS record: ${i.message}`),console.warn("Please manually create an ALIAS record in your DNS provider:"),console.warn(` ${s} -> ${c}`);else console.log(`Created ALIAS record: ${s} -> ${c}`);let r=`www.${s}`;console.log(`Creating CNAME record for ${r} -> ${c}`);let a=await t.upsertRecord(s,{name:r,type:"CNAME",content:c,ttl:600});if(!a.success)console.warn(`Warning: Could not create www DNS record: ${a.message}`),console.warn("Please manually create a CNAME record:"),console.warn(` ${r} -> ${c}`);else console.log(`Created CNAME record: ${r} -> ${c}`)}else{console.log(`Creating CNAME record for ${s} -> ${c}`);let i=await t.upsertRecord(s,{name:s,type:"CNAME",content:c,ttl:600});if(!i.success)console.warn(`Warning: Could not create DNS record: ${i.message}`),console.warn("Please manually create a CNAME record:"),console.warn(` ${s} -> ${c}`);else console.log(`Created CNAME record: ${s} -> ${c}`)}}async function Cn(t){let{sourceDir:s,cleanBucket:c=!1,onProgress:e,...g}=t;e?.("infrastructure","Deploying CloudFormation stack...");let i=await bn(g);if(!i.success)return i;if(c){e?.("clean","Cleaning old files from S3...");try{await new o(g.region||"us-east-1").emptyBucket(i.bucket)}catch(m){console.log(`Note: Could not clean bucket: ${m.message}`)}}e?.("upload","Uploading files to S3...");let{uploadStaticFiles:r}=await import("./chunk-f2xqeers.js"),a=await r({sourceDir:s,bucket:i.bucket,region:g.region||"us-east-1",cacheControl:g.cacheControl,onProgress:(m,w,O)=>{e?.("upload",`${m}/${w}: ${O}`)}});if(a.errors.length>0)return{...i,success:!1,message:`Upload errors: ${a.errors.join(", ")}`,filesUploaded:a.uploaded};if(i.distributionId&&a.uploaded>0){e?.("invalidate","Invalidating CloudFront cache...");let{invalidateCache:m}=await import("./chunk-f2xqeers.js");await m(i.distributionId)}e?.("complete","Deployment complete!");let d=a.skipped>0?`Deployed ${a.uploaded} files (${a.skipped} unchanged) with external DNS`:`Deployed ${a.uploaded} files successfully with external DNS`;return{...i,filesUploaded:a.uploaded,filesSkipped:a.skipped,message:d}}function ps(t){let{bucketName:s,domain:c,certificateArn:e,hostedZoneId:g,defaultRootObject:i="index.html",errorDocument:r="404.html"}=t,a={},d={};a.S3Bucket={Type:"AWS::S3::Bucket",Properties:{BucketName:s,PublicAccessBlockConfiguration:{BlockPublicAcls:!0,BlockPublicPolicy:!1,IgnorePublicAcls:!0,RestrictPublicBuckets:!1},WebsiteConfiguration:{IndexDocument:i,ErrorDocument:r}}},d.BucketName={Description:"S3 Bucket Name",Value:{Ref:"S3Bucket"}},d.BucketArn={Description:"S3 Bucket ARN",Value:{"Fn::GetAtt":["S3Bucket","Arn"]}},a.CloudFrontOAC={Type:"AWS::CloudFront::OriginAccessControl",Properties:{OriginAccessControlConfig:{Name:`OAC-${s}`,Description:`OAC for ${s}`,OriginAccessControlOriginType:"s3",SigningBehavior:"always",SigningProtocol:"sigv4"}}},a.UrlRewriteFunction={Type:"AWS::CloudFront::Function",Properties:{Name:{"Fn::Sub":"${AWS::StackName}-url-rewrite"},AutoPublish:!0,FunctionConfig:{Comment:"Append .html extension to URLs without extensions",Runtime:"cloudfront-js-2.0"},FunctionCode:`function handler(event) {
45
+ └─────────────────────────────────────────────────────────────────────────────┘`),{success:!1,stackId:x,stackName:i,bucket:N,message:"CloudFront account verification required. Please contact AWS Support."}}return{success:!1,stackId:x,stackName:i,bucket:N,message:`Stack deployment failed: ${n.message}`}}let u=(await r.describeStacks({stackName:i})).Stacks[0]?.Outputs||[],k=(n)=>u.find((l)=>l.OutputKey===n)?.OutputValue,p=k("DistributionDomain");if(p&&d)console.log(`Creating DNS records via ${d.name}...`),await W(d,e,p);else if(p&&!d)console.log("Skipping DNS record creation (DNS verification was skipped)");return{success:!0,stackId:x,stackName:i,bucket:k("BucketName")||N,distributionId:k("DistributionId"),distributionDomain:p,domain:e,certificateArn:m,message:"Static site infrastructure deployed successfully with external DNS"}}async function W(t,s,c){if(!t){console.log("Skipping DNS record creation (DNS verification was skipped)");return}if(s.split(".").length===2)if(t instanceof J){console.log(`Creating Route53 alias record for apex domain ${s} -> ${c}`);let i=await t.createCloudFrontAlias({domain:s,name:s,cloudFrontDomainName:c});if(!i.success)console.warn(`Warning: Could not create Route53 alias record: ${i.message}`),console.warn("Please manually create an A-record alias in Route53:"),console.warn(` ${s} -> ${c}`);else console.log(`Created Route53 alias record: ${s} -> ${c}`);let r=`www.${s}`;console.log(`Creating Route53 alias record for ${r} -> ${c}`);let a=await t.createCloudFrontAlias({domain:s,name:r,cloudFrontDomainName:c});if(!a.success)console.warn(`Warning: Could not create www Route53 alias: ${a.message}`),console.warn("Please manually create an A-record alias in Route53:"),console.warn(` ${r} -> ${c}`);else console.log(`Created Route53 alias record: ${r} -> ${c}`)}else{try{let d=await t.listRecords(s,"A");if(d.success)for(let m of d.records){let w=m.name.replace(/\.$/,"");if(w===s||w==="")console.log(`Removing existing root A record (${m.content}) to make room for ALIAS...`),await t.deleteRecord(s,{name:s,type:"A",content:m.content})}}catch(d){console.log(`Note: Could not check for conflicting A records: ${d instanceof Error?d.message:d}`)}console.log(`Creating ALIAS record for apex domain ${s} -> ${c}`);let i=await t.upsertRecord(s,{name:s,type:"ALIAS",content:c,ttl:600});if(!i.success)console.warn(`Warning: Could not create ALIAS record: ${i.message}`),console.warn("Please manually create an ALIAS record in your DNS provider:"),console.warn(` ${s} -> ${c}`);else console.log(`Created ALIAS record: ${s} -> ${c}`);let r=`www.${s}`;console.log(`Creating CNAME record for ${r} -> ${c}`);let a=await t.upsertRecord(s,{name:r,type:"CNAME",content:c,ttl:600});if(!a.success)console.warn(`Warning: Could not create www DNS record: ${a.message}`),console.warn("Please manually create a CNAME record:"),console.warn(` ${r} -> ${c}`);else console.log(`Created CNAME record: ${r} -> ${c}`)}else{console.log(`Creating CNAME record for ${s} -> ${c}`);let i=await t.upsertRecord(s,{name:s,type:"CNAME",content:c,ttl:600});if(!i.success)console.warn(`Warning: Could not create DNS record: ${i.message}`),console.warn("Please manually create a CNAME record:"),console.warn(` ${s} -> ${c}`);else console.log(`Created CNAME record: ${s} -> ${c}`)}}async function Cn(t){let{sourceDir:s,cleanBucket:c=!1,onProgress:e,...g}=t;e?.("infrastructure","Deploying CloudFormation stack...");let i=await bn(g);if(!i.success)return i;if(c){e?.("clean","Cleaning old files from S3...");try{await new o(g.region||"us-east-1").emptyBucket(i.bucket)}catch(m){console.log(`Note: Could not clean bucket: ${m.message}`)}}e?.("upload","Uploading files to S3...");let{uploadStaticFiles:r}=await import("./chunk-gyp7jcgw.js"),a=await r({sourceDir:s,bucket:i.bucket,region:g.region||"us-east-1",cacheControl:g.cacheControl,onProgress:(m,w,O)=>{e?.("upload",`${m}/${w}: ${O}`)}});if(a.errors.length>0)return{...i,success:!1,message:`Upload errors: ${a.errors.join(", ")}`,filesUploaded:a.uploaded};if(i.distributionId&&a.uploaded>0){e?.("invalidate","Invalidating CloudFront cache...");let{invalidateCache:m}=await import("./chunk-gyp7jcgw.js");await m(i.distributionId)}e?.("complete","Deployment complete!");let d=a.skipped>0?`Deployed ${a.uploaded} files (${a.skipped} unchanged) with external DNS`:`Deployed ${a.uploaded} files successfully with external DNS`;return{...i,filesUploaded:a.uploaded,filesSkipped:a.skipped,message:d}}function ps(t){let{bucketName:s,domain:c,certificateArn:e,hostedZoneId:g,defaultRootObject:i="index.html",errorDocument:r="404.html"}=t,a={},d={};a.S3Bucket={Type:"AWS::S3::Bucket",Properties:{BucketName:s,PublicAccessBlockConfiguration:{BlockPublicAcls:!0,BlockPublicPolicy:!1,IgnorePublicAcls:!0,RestrictPublicBuckets:!1},WebsiteConfiguration:{IndexDocument:i,ErrorDocument:r}}},d.BucketName={Description:"S3 Bucket Name",Value:{Ref:"S3Bucket"}},d.BucketArn={Description:"S3 Bucket ARN",Value:{"Fn::GetAtt":["S3Bucket","Arn"]}},a.CloudFrontOAC={Type:"AWS::CloudFront::OriginAccessControl",Properties:{OriginAccessControlConfig:{Name:`OAC-${s}`,Description:`OAC for ${s}`,OriginAccessControlOriginType:"s3",SigningBehavior:"always",SigningProtocol:"sigv4"}}},a.UrlRewriteFunction={Type:"AWS::CloudFront::Function",Properties:{Name:{"Fn::Sub":"${AWS::StackName}-url-rewrite"},AutoPublish:!0,FunctionConfig:{Comment:"Append .html extension to URLs without extensions",Runtime:"cloudfront-js-2.0"},FunctionCode:`function handler(event) {
46
46
  const request = event.request;
47
47
  var uri = request.uri;
48
48
 
@@ -0,0 +1 @@
1
+ import{kn,th}from"./chunk-mhv7dbr1.js";import"./chunk-yzns0k2b.js";import"./chunk-ncsb3sdn.js";import"./chunk-7gvnrx46.js";export{kn as EmailClient,th as email};
@@ -1 +1 @@
1
- import{mn,fn,wu,os,Ru,Du,Pu,Da,Nu,ku,_f,Bu,C,xu,as,Oe,Ou,_u,dS,Lu,$u,Mu,Fu,Uu,Lf,lS,uS,gS,$f,Mf,pS,mS,Ff,Uf,fS,cs,sr,Pa,hn,An,or,rt,Pt,ds,Qf,yn,Qu,Hu,Na,us,In,gs,Va}from"../chunk-abadztwc.js";import{qa,bn,Cn,ps,ms,fs,hs,ja,za}from"../chunk-906prq6g.js";import{Ka}from"../chunk-n4z75mk8.js";import"../chunk-c97wwdtk.js";import"../chunk-tsaffke7.js";import"../chunk-0kddm2mt.js";import"../chunk-hvwqct5q.js";import"../chunk-pdjap529.js";import"../chunk-my6yn5sd.js";import"../chunk-yzns0k2b.js";import{sg,uc,Ee,gc,Ln,og,pc,Lc,Gs,$c,Ut,gi,Vs}from"../chunk-annmzhbb.js";import"../chunk-ajn6xp8v.js";import"../chunk-mxw5gkd8.js";import"../chunk-jch6ks7a.js";import"../chunk-7gvnrx46.js";import{pt,qh,Vc,yi,Si,Ii,up}from"../chunk-nr6z3e1p.js";import{_,Br,xr,qc,zs,u,jh,gp,pp,jS,zS}from"../chunk-ctkzxq0d.js";import"../chunk-fszn9rnn.js";import"../chunk-9aaj9a0s.js";import"../chunk-3nqtbyfp.js";export{qh as DEFAULT_SITE_PORT_RANGE,pt as HOST_SITES_DIR,gc as IPV6_EXCLUDED_HOST_LABELS,Lc as MANAGEMENT_DASHBOARD_SITE,mn as addSiteToCloudConfig,up as allocateSitePorts,fS as buildAndPushContainerImage,Ka as buildAndPushServerlessImage,sr as buildFunctionEnv,Si as buildHostSitePortsScript,Vs as buildManagementDashboardArtifact,Pt as buildServerTopology,ds as buildServerlessTopology,Qf as buildTopology,Na as collectEgressMetrics,sg as collectServerDnsDomains,Uf as createContainerImageDependencies,$f as createExistingStaticFullStackDependencies,Lf as createStaticApiOriginDependencies,In as dashboardActions,Gs as dashboardCredentialsFile,Ou as dashboardPageRoutes,Fu as deleteFailoverReplicaBuckets,ja as deleteStaticSite,pS as deployExistingStaticFullStack,Pa as deployServerlessApp,zS as deployShipsFiles,Uu as deploySite,lS as deployStaticApiOrigin,ms as deployStaticSite,za as deployStaticSiteFull,bn as deployStaticSiteWithExternalDns,Cn as deployStaticSiteWithExternalDnsFull,Qu as egressReportMetrics,C as ensureDashboardActor,Lu as ensureFailoverReplicaBuckets,gi as ensureManagementDashboard,mS as estimateExistingStaticFullStackMonthlyCost,gS as estimateStaticApiOriginMonthlyCost,Hu as fetchEgressReport,Mf as generateExistingStaticFullStackTemplate,qa as generateExternalDnsStaticSiteTemplate,ps as generateStaticSiteTemplate,$u as grantFailoverReplicaAccess,jh as hasComputeConfigured,qc as hasProxyUpstream,Ff as hashContainerContext,Ln as hostAcceptsIpv6,cs as infraEnvFromOutputs,xu as initializeDashboardControlPlane,hs as invalidateCache,Br as isPhpSite,Da as isValidHostname,Ee as normalizePublicIpv6,yi as occupiedHostPorts,Ii as parseHostSiteFragments,Vc as parseUpstreamPort,og as reconcileAddressRecords,hn as redeployServerlessApp,fn as removeSiteFromCloudConfig,uc as removeStaleServerAddressRecords,Nu as renderAliasesValue,Pu as renderEnvValue,ku as renderRedirectsValue,_f as renderSiteSnippet,Ru as renderSslValue,Du as renderStringValue,gs as resolveDashboardAction,$c as resolveDashboardAuth,yn as resolveDashboardData,_u as resolveLegacyDashboardRoute,xr as resolveProxyUpstreams,zs as resolveSiteDeployTarget,u as resolveSiteKind,Ut as resolveUiSource,An as rollbackServerlessApp,dS as routesForDashboard,rt as runRemoteCommand,us as sanitizeCloudConfig,Mu as seedFailoverReplicas,Bu as setAttachToInCloudConfig,or as setMaintenance,os as setSitePropertyInCloudConfig,pp as shipsARelease,jS as shipsToBucket,_ as siteInstallBase,Va as startLocalDashboardServer,as as synchronizeDashboardUsers,Oe as trackDashboardOperation,wu as updateSiteInCloudConfig,fs as uploadStaticFiles,gp as validateDeploymentConfig,pc as verifyAddressRecord,uS as verifyStaticApiOrigin};
1
+ import{mn,fn,wu,os,Ru,Du,Pu,Da,Nu,ku,_f,Bu,C,xu,as,Oe,Ou,_u,dS,Lu,$u,Mu,Fu,Uu,Lf,lS,uS,gS,$f,Mf,pS,mS,Ff,Uf,fS,cs,sr,Pa,hn,An,or,rt,Pt,ds,Qf,yn,Qu,Hu,Na,us,In,gs,Va}from"../chunk-78shfb0z.js";import{qa,bn,Cn,ps,ms,fs,hs,ja,za}from"../chunk-q9rdxpmg.js";import{Ka}from"../chunk-n4z75mk8.js";import"../chunk-2x636sgn.js";import"../chunk-mhv7dbr1.js";import"../chunk-0kddm2mt.js";import"../chunk-hvwqct5q.js";import"../chunk-pdjap529.js";import"../chunk-my6yn5sd.js";import"../chunk-yzns0k2b.js";import{sg,uc,Ee,gc,Ln,og,pc,Lc,Gs,$c,Ut,gi,Vs}from"../chunk-k3mazfb2.js";import"../chunk-ajn6xp8v.js";import"../chunk-mxw5gkd8.js";import"../chunk-ncsb3sdn.js";import"../chunk-7gvnrx46.js";import{pt,qh,Vc,yi,Si,Ii,up}from"../chunk-nr6z3e1p.js";import{_,Br,xr,qc,zs,u,jh,gp,pp,jS,zS}from"../chunk-ctkzxq0d.js";import"../chunk-fszn9rnn.js";import"../chunk-9aaj9a0s.js";import"../chunk-3nqtbyfp.js";export{qh as DEFAULT_SITE_PORT_RANGE,pt as HOST_SITES_DIR,gc as IPV6_EXCLUDED_HOST_LABELS,Lc as MANAGEMENT_DASHBOARD_SITE,mn as addSiteToCloudConfig,up as allocateSitePorts,fS as buildAndPushContainerImage,Ka as buildAndPushServerlessImage,sr as buildFunctionEnv,Si as buildHostSitePortsScript,Vs as buildManagementDashboardArtifact,Pt as buildServerTopology,ds as buildServerlessTopology,Qf as buildTopology,Na as collectEgressMetrics,sg as collectServerDnsDomains,Uf as createContainerImageDependencies,$f as createExistingStaticFullStackDependencies,Lf as createStaticApiOriginDependencies,In as dashboardActions,Gs as dashboardCredentialsFile,Ou as dashboardPageRoutes,Fu as deleteFailoverReplicaBuckets,ja as deleteStaticSite,pS as deployExistingStaticFullStack,Pa as deployServerlessApp,zS as deployShipsFiles,Uu as deploySite,lS as deployStaticApiOrigin,ms as deployStaticSite,za as deployStaticSiteFull,bn as deployStaticSiteWithExternalDns,Cn as deployStaticSiteWithExternalDnsFull,Qu as egressReportMetrics,C as ensureDashboardActor,Lu as ensureFailoverReplicaBuckets,gi as ensureManagementDashboard,mS as estimateExistingStaticFullStackMonthlyCost,gS as estimateStaticApiOriginMonthlyCost,Hu as fetchEgressReport,Mf as generateExistingStaticFullStackTemplate,qa as generateExternalDnsStaticSiteTemplate,ps as generateStaticSiteTemplate,$u as grantFailoverReplicaAccess,jh as hasComputeConfigured,qc as hasProxyUpstream,Ff as hashContainerContext,Ln as hostAcceptsIpv6,cs as infraEnvFromOutputs,xu as initializeDashboardControlPlane,hs as invalidateCache,Br as isPhpSite,Da as isValidHostname,Ee as normalizePublicIpv6,yi as occupiedHostPorts,Ii as parseHostSiteFragments,Vc as parseUpstreamPort,og as reconcileAddressRecords,hn as redeployServerlessApp,fn as removeSiteFromCloudConfig,uc as removeStaleServerAddressRecords,Nu as renderAliasesValue,Pu as renderEnvValue,ku as renderRedirectsValue,_f as renderSiteSnippet,Ru as renderSslValue,Du as renderStringValue,gs as resolveDashboardAction,$c as resolveDashboardAuth,yn as resolveDashboardData,_u as resolveLegacyDashboardRoute,xr as resolveProxyUpstreams,zs as resolveSiteDeployTarget,u as resolveSiteKind,Ut as resolveUiSource,An as rollbackServerlessApp,dS as routesForDashboard,rt as runRemoteCommand,us as sanitizeCloudConfig,Mu as seedFailoverReplicas,Bu as setAttachToInCloudConfig,or as setMaintenance,os as setSitePropertyInCloudConfig,pp as shipsARelease,jS as shipsToBucket,_ as siteInstallBase,Va as startLocalDashboardServer,as as synchronizeDashboardUsers,Oe as trackDashboardOperation,wu as updateSiteInCloudConfig,fs as uploadStaticFiles,gp as validateDeploymentConfig,pc as verifyAddressRecord,uS as verifyStaticApiOrigin};
@@ -1 +1 @@
1
- import{$n,Lt,Ar,$t,Mn,Un,Qn,Hn,lg,mc,X,Ir,nh,Gn,fc,ve,Te,Ue,x,br,Vn,Cr,ge,hc,qn,Ac,jn,yc,Er,ih,sh,pg,mg,oh,ah,ch,vr,zn,fg,Fs,Kn,Wn,Jn,Xn,Yn,Sc,Ic,Tr,Cc,Qe,Y,Ec,ct,He,Ge,dt,we,Us,vc,hg,Ag,Tc,yg,lt,Zn,wc,Sg,Ig,Rc,wr,Re,Dc,bg,Cg,Qs,ei,ut,Eg,vg,Tg,wg,Rg,Dg,Pg,Ng,kg,ti,ri,ni,ii,si,oi,ai,Bg,xg,Rr,O,Hs,Og,_g,Lg,Pc,$g,Mg,dh,Nc,lh,uh,Fg,Ug,gh,ph,mh,kc,Qg,fh,hh,Ah,ci,di,li,ui,Bc,xc,Oc,_c,yh,qs,Mc,pi,Fc,Hg,Gg,Vg,Sh}from"../chunk-annmzhbb.js";import"../chunk-ajn6xp8v.js";import"../chunk-mxw5gkd8.js";import"../chunk-jch6ks7a.js";import"../chunk-7gvnrx46.js";import"../chunk-ctkzxq0d.js";import"../chunk-9aaj9a0s.js";import"../chunk-3nqtbyfp.js";export{_c as AwsBoxProvisioner,br as AwsDriver,Lg as BOOT_PARTITION_LABEL,Hs as CloudDriverFactory,mg as DEFAULT_HOST_CLEANUP_ESCALATED,ah as DEFAULT_HOST_CLEANUP_HIGH_WATER_PERCENT,oh as DEFAULT_HOST_CLEANUP_LOW_WATER_PERCENT,pg as DEFAULT_HOST_CLEANUP_RETENTION,ch as DEFAULT_HOST_CLEANUP_SCHEDULE,Un as DEFAULT_RPX_CERTS_DIR,_g as FIRST_BOOT_SCRIPT_PATH,Er as HOST_ARTIFACT_CACHE_DIR,ih as HOST_CLEANUP_SCRIPT_PATH,sh as HOST_CLEANUP_UNIT,Oc as HetznerBoxProvisioner,Tr as HetznerClient,we as HetznerDriver,Ec as LEGACY_DRIVER_STATE_DIR,Us as LocalBoxDriver,Gg as MANAGED_CACHE_POLICY_DISABLED,Hg as MANAGED_CACHE_POLICY_OPTIMIZED,Vg as MANAGED_ORIGIN_REQUEST_POLICY_ALL_VIEWER,Cg as RASPBERRY_PI_DEFAULT_SWAP_GB,yc as REMOTE_SCRIPT_RUNNER,Gn as RPX_DIR,fc as RPX_LAUNCHER_PATH,ve as RPX_SERVICE_NAME,Dc as SSH_BOOTSTRAP_MARKER_DIR,Re as SSH_BOOTSTRAP_VERSION,ut as SSH_DEFAULTS,ai as SSH_DEPLOY_STORAGE_PATH,hg as SSH_INSECURE_HOST_KEY_OPTS,Ag as SSH_KEEPALIVE_OPTS,ri as SSH_PREFLIGHT_SCRIPT,Bg as SSH_SKIP_BOOTSTRAP_ENV,Rr as SshDriver,wr as SystemSshTransport,Bc as UBUNTU_2404_AMI_PARAM,Ah as acquireResizeLock,gh as applyHetznerHostOptimization,Qs as assertArchSupported,xg as assertSshComputeConfig,Sc as buildAwsArtifactFetch,xc as buildBoxUserData,Sh as buildCloudFrontOriginConfig,Pc as buildCloudInitFirstBoot,Ug as buildHetznerHostOptimizationScript,Kn as buildHostCleanupDeployScript,fg as buildHostCleanupExecutable,Fs as buildHostCleanupInstallScript,zn as buildHostCleanupScript,Ic as buildLocalArtifactFetch,X as buildRpxConfig,Ue as buildRpxFragmentRefreshScript,Ir as buildRpxLbConfig,Te as buildRpxProvisionScript,yg as buildScpArgsFor,Jn as buildSiteDeployScript,Vn as buildSshArgs,Tc as buildSshArgsFor,ei as buildSshBootstrapScript,Xn as buildStaticSiteDeployScript,Og as cloudDrivers,ph as collectHetznerHostOptimizationReport,Nc as collectHetznerResizeManifest,yh as createBoxProvisioner,O as createCloudDriver,Mc as deployAllComputeSites,qs as deploySiteRelease,mc as deriveRouteId,$n as describeScriptSyntaxError,ct as driverStateDir,He as driverStatePath,di as ensureFirewall,li as ensureServer,ci as ensureSshKey,ii as evaluatePreflight,dh as executeHetznerServerResize,Ig as findKnownHostKey,oi as formatPreflightFindings,Lt as formatSshFailure,Hn as gatewayHostnames,x as generateUbuntuAppCloudInit,Qn as hasAutoWwwVariant,vc as isBoxMode,Mg as isHetznerCapacityError,Mn as isLocalDatabase,Sg as knownHostsLine,wc as knownHostsToken,lg as normalizeRoutePath,Qe as normalizeSshPublicKey,ni as parsePreflightFacts,$g as planHetznerServerResize,si as preflightFailed,lh as prepareHetznerResize,Ge as readDriverState,fh as readResizeCheckpoint,Yn as releaseTarballTmpPath,pi as reloadRpxGateway,jn as remoteScriptRunner,nh as renderRpxLauncher,Fc as renewRpxCertificates,kc as resizeCheckpointPath,Qg as resizeLockPath,Wn as resolveExecStart,Cc as resolveHetznerApiToken,Fg as resolveHetznerHostOptimizationPlan,vr as resolveHostCleanupConfig,Rg as resolveSshHostKeyPolicy,Eg as resolveSshHosts,kg as resolveSshLan,Tg as resolveSshPort,wg as resolveSshPrivateKeyPath,Pg as resolveSshProfile,Ng as resolveSshPublicIp,ti as resolveSshSettings,Dg as resolveSshSudo,vg as resolveSshUser,Zn as scanHostKey,hc as scpUpload,ui as serverPublicIpv4,bg as sshBootstrapMarkerPath,Cr as sshExec,ge as sshExecOrThrow,lt as sshHostKeyFingerprint,Rc as sshKnownHostsPath,$t as summarizeRemoteFailures,Ar as surfaceRemoteNotices,mh as verifyHetznerHostOptimization,uh as verifyHetznerResize,Ac as waitForCloudInit,qn as waitForSsh,Y as wrapCloudInitUserData,dt as writeDriverState,hh as writeResizeCheckpoint};
1
+ import{$n,Lt,Ar,$t,Mn,Un,Qn,Hn,lg,mc,X,Ir,nh,Gn,fc,ve,Te,Ue,x,br,Vn,Cr,ge,hc,qn,Ac,jn,yc,Er,ih,sh,pg,mg,oh,ah,ch,vr,zn,fg,Fs,Kn,Wn,Jn,Xn,Yn,Sc,Ic,Tr,Cc,Qe,Y,Ec,ct,He,Ge,dt,we,Us,vc,hg,Ag,Tc,yg,lt,Zn,wc,Sg,Ig,Rc,wr,Re,Dc,bg,Cg,Qs,ei,ut,Eg,vg,Tg,wg,Rg,Dg,Pg,Ng,kg,ti,ri,ni,ii,si,oi,ai,Bg,xg,Rr,O,Hs,Og,_g,Lg,Pc,$g,Mg,dh,Nc,lh,uh,Fg,Ug,gh,ph,mh,kc,Qg,fh,hh,Ah,ci,di,li,ui,Bc,xc,Oc,_c,yh,qs,Mc,pi,Fc,Hg,Gg,Vg,Sh}from"../chunk-k3mazfb2.js";import"../chunk-ajn6xp8v.js";import"../chunk-mxw5gkd8.js";import"../chunk-ncsb3sdn.js";import"../chunk-7gvnrx46.js";import"../chunk-ctkzxq0d.js";import"../chunk-9aaj9a0s.js";import"../chunk-3nqtbyfp.js";export{_c as AwsBoxProvisioner,br as AwsDriver,Lg as BOOT_PARTITION_LABEL,Hs as CloudDriverFactory,mg as DEFAULT_HOST_CLEANUP_ESCALATED,ah as DEFAULT_HOST_CLEANUP_HIGH_WATER_PERCENT,oh as DEFAULT_HOST_CLEANUP_LOW_WATER_PERCENT,pg as DEFAULT_HOST_CLEANUP_RETENTION,ch as DEFAULT_HOST_CLEANUP_SCHEDULE,Un as DEFAULT_RPX_CERTS_DIR,_g as FIRST_BOOT_SCRIPT_PATH,Er as HOST_ARTIFACT_CACHE_DIR,ih as HOST_CLEANUP_SCRIPT_PATH,sh as HOST_CLEANUP_UNIT,Oc as HetznerBoxProvisioner,Tr as HetznerClient,we as HetznerDriver,Ec as LEGACY_DRIVER_STATE_DIR,Us as LocalBoxDriver,Gg as MANAGED_CACHE_POLICY_DISABLED,Hg as MANAGED_CACHE_POLICY_OPTIMIZED,Vg as MANAGED_ORIGIN_REQUEST_POLICY_ALL_VIEWER,Cg as RASPBERRY_PI_DEFAULT_SWAP_GB,yc as REMOTE_SCRIPT_RUNNER,Gn as RPX_DIR,fc as RPX_LAUNCHER_PATH,ve as RPX_SERVICE_NAME,Dc as SSH_BOOTSTRAP_MARKER_DIR,Re as SSH_BOOTSTRAP_VERSION,ut as SSH_DEFAULTS,ai as SSH_DEPLOY_STORAGE_PATH,hg as SSH_INSECURE_HOST_KEY_OPTS,Ag as SSH_KEEPALIVE_OPTS,ri as SSH_PREFLIGHT_SCRIPT,Bg as SSH_SKIP_BOOTSTRAP_ENV,Rr as SshDriver,wr as SystemSshTransport,Bc as UBUNTU_2404_AMI_PARAM,Ah as acquireResizeLock,gh as applyHetznerHostOptimization,Qs as assertArchSupported,xg as assertSshComputeConfig,Sc as buildAwsArtifactFetch,xc as buildBoxUserData,Sh as buildCloudFrontOriginConfig,Pc as buildCloudInitFirstBoot,Ug as buildHetznerHostOptimizationScript,Kn as buildHostCleanupDeployScript,fg as buildHostCleanupExecutable,Fs as buildHostCleanupInstallScript,zn as buildHostCleanupScript,Ic as buildLocalArtifactFetch,X as buildRpxConfig,Ue as buildRpxFragmentRefreshScript,Ir as buildRpxLbConfig,Te as buildRpxProvisionScript,yg as buildScpArgsFor,Jn as buildSiteDeployScript,Vn as buildSshArgs,Tc as buildSshArgsFor,ei as buildSshBootstrapScript,Xn as buildStaticSiteDeployScript,Og as cloudDrivers,ph as collectHetznerHostOptimizationReport,Nc as collectHetznerResizeManifest,yh as createBoxProvisioner,O as createCloudDriver,Mc as deployAllComputeSites,qs as deploySiteRelease,mc as deriveRouteId,$n as describeScriptSyntaxError,ct as driverStateDir,He as driverStatePath,di as ensureFirewall,li as ensureServer,ci as ensureSshKey,ii as evaluatePreflight,dh as executeHetznerServerResize,Ig as findKnownHostKey,oi as formatPreflightFindings,Lt as formatSshFailure,Hn as gatewayHostnames,x as generateUbuntuAppCloudInit,Qn as hasAutoWwwVariant,vc as isBoxMode,Mg as isHetznerCapacityError,Mn as isLocalDatabase,Sg as knownHostsLine,wc as knownHostsToken,lg as normalizeRoutePath,Qe as normalizeSshPublicKey,ni as parsePreflightFacts,$g as planHetznerServerResize,si as preflightFailed,lh as prepareHetznerResize,Ge as readDriverState,fh as readResizeCheckpoint,Yn as releaseTarballTmpPath,pi as reloadRpxGateway,jn as remoteScriptRunner,nh as renderRpxLauncher,Fc as renewRpxCertificates,kc as resizeCheckpointPath,Qg as resizeLockPath,Wn as resolveExecStart,Cc as resolveHetznerApiToken,Fg as resolveHetznerHostOptimizationPlan,vr as resolveHostCleanupConfig,Rg as resolveSshHostKeyPolicy,Eg as resolveSshHosts,kg as resolveSshLan,Tg as resolveSshPort,wg as resolveSshPrivateKeyPath,Pg as resolveSshProfile,Ng as resolveSshPublicIp,ti as resolveSshSettings,Dg as resolveSshSudo,vg as resolveSshUser,Zn as scanHostKey,hc as scpUpload,ui as serverPublicIpv4,bg as sshBootstrapMarkerPath,Cr as sshExec,ge as sshExecOrThrow,lt as sshHostKeyFingerprint,Rc as sshKnownHostsPath,$t as summarizeRemoteFailures,Ar as surfaceRemoteNotices,mh as verifyHetznerHostOptimization,uh as verifyHetznerResize,Ac as waitForCloudInit,qn as waitForSsh,Y as wrapCloudInitUserData,dt as writeDriverState,hh as writeResizeCheckpoint};
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{YS,ZS,Nd,Mp,kd,Bd,zr,L,d,xd,Fp,U,Od,g,bA,_i,_d,Ld,me,$d,CA,r,t,eI,tI,p,rI,nI,iI,sI,oI,Kt,Md,Li,EA,aI,cI,Pe,ze,Fd,Up,Qp,dI,Hp,Gp,Vp,So,Ud,te,Kr,yt,Io,St,fe,vA,Qd,bo,qp,jp,zp,Kp,Hd,lI,Q,b,a,y,Ke,m,Wp,We,H,It,uI,Jp,G,Gd,Ne,Wt,Co,re,Vd,ne,TA,Eo,V,q,k,$i,T,Jt,bt,j,e,Wr,gI,Xp,qd,pI,mI,fI,hI,jd,yI,SI,II,bI,CI,EI,vI,TI,wI,RI,DI,PI,wA,RA,DA,PA,NA,kA,BA,Xt,Yp,Zp,Jr,Mi,NI,em,kI,BI,Xr,xI,OI,_I,LI,$I,MI,xA,OA,_A,LA,$A,Fi,FI,vo,MA,tm,M,FA,Je,To,Ct,UA,rm,QA,HA,GA,nm,F,UI,QI,HI,GI,VA,VI,z,qI,jI,zI,zd,Kd,qA,im,sm,KI,WI,JI,XI,YI,jA,Wd,ZI,eb,tb,rb,nb,zA,KA,ib,sb,ob,ab,cb,db,lb,WA,ub,om,Jd,gb,pb,mb,fb,am,cm,dm,hb,Xd,JA,XA,YA,ZA,Yd,ey,Ab,yb,Sb,Ib,bb,Cb,Eb,ty,ry,ny,iy,lm,vb,Tb,wb,Rb,Db,Pb,Nb,kb,Bb,sy,oy,ay,cy,xb,Ob,um,_b,gm,pm,mm,fm,Lb,$b,Mb,Fb,ke,Ui,Ub,Qb,Hb,Gb,Vb,qb,jb,zb,dy,Kb,Wb,hm,Am,Jb,Xb,ly,Yb,Zb,eC,tC,rC,nC,iC,sC,oC,aC,cC,dC,lC,uC,gC,pC,mC,fC,hC,AC,yC,Zd,uy,el,gy,tl,py,rl,my,nl,fy,Yt,hy,il,Ay,Qi,yy,sl,Sy,ol,Iy,ym,SC,Sm,IC,al,by,Zt,Cy,Im,bC,cl,Ey,bm,CC,Cm,EC,Em,vC,dl,vy,vm,TC,Tm,wC,wm,RC,Rm,DC,ll,Ty,ul,wy,Dm,PC,Pm,NC,Nm,kC,km,BC,Bm,xC,xm,OC,gl,Ry,Om,_C,_m,LC,Lm,$C,$m,MC,Mm,FC,Fm,UC,Um,Qm,Hm,Gm,Vm,QC,qm,HC,jm,GC,zm,VC,Xe,Km,Dy,wo,pl,Yr,Py,Hi,er,ml,fl,Ny,ky,hl,Wm,Al,Jm,qC,jC,Ro,Do,Po,yl,Zr,Sl,Il,Gi,No,ko,Xm,By,xy,Oy,zC,Ym,Zm,KC,_y,ef,Ly,$y,My,WC,tf,en,bl,rf,JC,Fy,Bo,xo,Cl,nf,XC,El,Uy,sf,YC,of,ZC,af,eE}from"./chunk-9aaj9a0s.js";import{vl,R,Tl,Oo,Qy,cf,Hy,Gy,Vy,qy,jy,zy,Ky,Wy}from"./chunk-3nqtbyfp.js";import{Uo,df,Bl,Zy,zi,xl,Qo,lf,uf,rn,Ho,Ol,Ye,_l,Ll,$l,Ki,nn,gf,Ze,Ml,Go,Vo,qo,Fl,Ul,Ql,Wi,jo,Hl,sn,Ji,zo,Et,pf,Gl,Vl,mf,ql,Ko,tr,jl,zl,Kl,Wl,et,ff,Jl,rr,Wo,Jo,Xo,Xi,Yi,on,Xl,Zi,Yo,Zo,an,Yl,cn,hf,Af,vt,dn,ea,yf,Zl,eu,ta,tu,ru,nu,eS,ie,iu,tS,rS,es,ts,nS,Ae,Sf,Tt,Be,xe,wt,su,ou,au,cu,If,bf,ra,Cf,Ef,na,du,lu,vf,se,Tf,uu,ye,ia,tt,Rt,Dt,ln,rs,gu,iS,sa,wf,Rf,Df,Pf,oa,aa,pu,un,ca,mu,ns,fu,da,la,ua,ga,pa,ma,fa,ha,hu,nr,Aa,Au,gn,yu,ya,Sa,Su,ir,Ia,ba,Nf,sS,is,oS,aS,cS,Ca,Ea,Iu,kf,va,pn,bu,ss,Cu,Eu,vu,Ta,Bf,wa,Tu,xf,Ra,Of,mn,fn,wu,os,Bu,Lu,$u,Mu,Fu,Uu,cs,sr,Pa,hn,An,or,rt,Hf,ka,Gf,Vf,Gu,Ba,ls,Vu,xa,Nt,_e,qu,Oa,_a,ju,La,$a,Ma,Fa,zu,Ku,Sn,Ua,Qa,Ha,Ga,Wu,us,In,gs,Va}from"./chunk-abadztwc.js";import{_,xr,qc,zs,u,gp,pp}from"./chunk-ctkzxq0d.js";import{pt,Vc,yi,Si,Ii,up}from"./chunk-nr6z3e1p.js";import{bh,Ch,Eh,jg,zg,Kg,vh,Wg,Jg,Th,wh,Xg,Rh,Dh,Hc,Yg,Ph,Nh,Zg,kh,Bh,xh,Oh,_h,Lh,$h,Ai,Gc,ep,tp,rp,np,ip,sp,op,ap,cp,dp,lp,Mh,Fh,Uh,Qh,Hh,Gh,Vh}from"./chunk-sekw1nyx.js";import{Ve,jc,pe,Qt,zc,P,Ht,mt,Kc,Ks,zh,mp,Wc,s,bi,Ws,Or,Jc,Xc,_r,Kh,Yc,KS,WS,Js,JS,XS,Zc,ed,Ci,Xs,ee,c,Ys,qe,Lr,Wh,Jh,td,Gt,Xh,Zs,Yh,Zh,eo,rd,$r,to,eA,nd,fp,Vt,Mr,tA,ro,rA,N,nA,id,hp,no,iA,sA,oA,sd,Ei,io,od,qt,ft,aA,Fr,cA,ad,Ap,yp,so,cd,dd,ht,Sp,vi,ld,oo,Ur,Ip,Ti,ud,gd,wi,bp,pd,md,fd,hd,ao,Cp,Ep,dA,vp,Ad,Ri,Tp,wp,co,Qr,lo,uo,go,yd,Rp,Sd,po,lA,jt,uA,Id,Hr,bd,gA,Cd,Dp,Di,Gr,mo,Pi,je,pA,Pp,Np,zt,Ed,vd,Td,Ni,ki,Bi,mA,fA,At,fo,hA,Vr,kp,ho,AA,Bp,xp,Op,yA,_p,Lp,SA,i,IA,xi,Ao,yo}from"./chunk-fszn9rnn.js";import{n}from"./chunk-7gvnrx46.js";import{be,ot,kn}from"./chunk-tsaffke7.js";import{o}from"./chunk-jch6ks7a.js";import{Se,Ss,Is,Yu,Wa,Ja,bs,Xa,nt,K,it,oe,E,Ie,vn,Ya,Le,Za,Tn,wn,Rn,kt,Bt,xt,Dn,cr,ec,dr,lr,st,Pn,rc,Ot,ur,Nn,ic,rg,ng,sc,gr}from"./chunk-c97wwdtk.js";import{at,de,Fe,ig,Bn,ac,cc,Es,Ce,_t,xn,vs,Ts,pr,mr,On,fr,ws,Rs,Ds,Ps,J,Ns,ks,Bs,xs,le,Os,_s,Ls,D,dc,_n,lc,ue,hr}from"./chunk-my6yn5sd.js";import{W}from"./chunk-pdjap529.js";import{sg,uc,Ee,gc,Ln,og,pc,ag,cg,rh,Mn,Ms,Un,Qn,Hn,X,Ue,x,br,Vn,Cr,ge,hc,qn,Ac,vr,zn,Fs,Kn,Wn,Jn,Xn,Tr,Cc,Qe,Y,He,Ge,dt,we,wr,Re,ei,ti,ri,ni,ii,si,oi,Rr,O,Hs,Og,Pc,ci,di,li,ui,Lc,Gs,$c,Ut,gi,Vs,qs,Mc,pi,Fc}from"./chunk-annmzhbb.js";import{wl,_o,Vi,qi,Lo,Rl,Dl,ji,$o,Mo,Nl,kl,Fo}from"./chunk-tez0qfv9.js";import{qa,bn,Cn,ps,ms,fs,hs,ja,za}from"./chunk-906prq6g.js";import{Ka}from"./chunk-n4z75mk8.js";import{oc,$e,S}from"./chunk-0kddm2mt.js";import{Me}from"./chunk-hvwqct5q.js";import{I}from"./chunk-yzns0k2b.js";import{Z,mi,js,Uc,fi,qg}from"./chunk-50m6sq01.js";import{Pr,De}from"./chunk-ajn6xp8v.js";import{h}from"./chunk-mxw5gkd8.js";import{wd,qr,Rd,Dd,Pd,Oi,$p,jr}from"./chunk-pfav9qnt.js";import{Jy,he}from"./chunk-kcj92xx7.js";import{createHmac as mc,createSign as xc,timingSafeEqual as Bc}from"node:crypto";function jn(l){let f=l instanceof Date?l.getTime():l;if(!Number.isFinite(f))throw TypeError("Media access timestamp must be finite");return Math.floor(f/1000)}function fc(l){return Buffer.from(l).toString("base64").replaceAll("+","-").replaceAll("=","_").replaceAll("/","~")}function _c(l){return Buffer.from(l).toString("base64url")}function yc(l,f=!1){if(!l||/[\r\n]/.test(l))throw TypeError("Media resource is invalid");let C=f?l.replaceAll("*","wildcard"):l,A=new URL(C);if(!["http:","https:"].includes(A.protocol))throw TypeError("Media resource must use HTTP or HTTPS");if(!f&&l.includes("*"))throw TypeError("Canned policies cannot contain wildcards")}function Sc(l,f){let C=xc("RSA-SHA1");return C.update(l),C.end(),fc(C.sign(f))}function bc(l){yc(l.resource,!0);let C={DateLessThan:{"AWS:EpochTime":jn(l.expiresAt)}};if(l.activeAt!==void 0)C.DateGreaterThan={"AWS:EpochTime":jn(l.activeAt)};if(l.ipAddress)C.IpAddress={"AWS:SourceIp":l.ipAddress};return JSON.stringify({Statement:[{Resource:l.resource,Condition:C}]})}function Yf(l,f,C){yc(l);let A=jn(f),w=l.includes("?")?"&":"?",ve=bc({resource:l,expiresAt:f}),ae=Sc(ve,C.privateKey);return`${l}${w}Expires=${A}&Signature=${encodeURIComponent(ae)}&Key-Pair-Id=${encodeURIComponent(C.keyPairId)}`}function Xf(l,f){let C=bc(l);return{"CloudFront-Key-Pair-Id":f.keyPairId,"CloudFront-Policy":fc(Buffer.from(C)),"CloudFront-Signature":Sc(C,f.privateKey)}}function Qf(l){if(!l.resource||/[\r\n]/.test(l.resource))throw TypeError("Media resource is invalid");let f=_c(Buffer.from(JSON.stringify({resource:l.resource,expiresAt:jn(l.expiresAt),...l.keyId?{keyId:l.keyId}:{},...l.audience?{audience:l.audience}:{}}))),C=mc("sha256",l.secret).update(f).digest("base64url");return`${f}.${C}`}function eg(l,f){let[C,A,w]=l.split(".");if(!C||!A||w)return null;let ve=mc("sha256",f.secret).update(C).digest(),ae;try{ae=Buffer.from(A,"base64url")}catch{return null}if(ve.length!==ae.length||!Bc(ve,ae))return null;try{let ce=JSON.parse(Buffer.from(C,"base64url").toString("utf8")),Te=jn(f.now??Date.now());if(!ce.resource||!Number.isSafeInteger(ce.expiresAt)||ce.expiresAt<=Te)return null;if(f.resource&&ce.resource!==f.resource)return null;if(f.audience&&ce.audience!==f.audience)return null;return ce}catch{return null}}function tg(l,f=!1){let C=new URL(l,"https://media.invalid").pathname.toLowerCase(),A=/\.(?:m3u8|mpd|vtt|json)$/.test(C),w=/\.(?:key|license)$/.test(C)||C.includes("/keys/")||C.includes("/licenses/");return{"Accept-Ranges":"bytes","Cache-Control":f&&(A||w)?"private, no-store":A?"public, max-age=5, s-maxage=30, stale-while-revalidate=30":"public, max-age=31536000, immutable","Cross-Origin-Resource-Policy":"cross-origin","X-Content-Type-Options":"nosniff"}}function lg(l){if(!/^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/.test(l.bucket))throw TypeError("Media bucket is invalid");if(!/^[a-z0-9-]+$/.test(l.region))throw TypeError("Media bucket region is invalid");let f=l.prefix?`/${l.prefix.replace(/^\/+|\/+$/g,"")}`:"",C=l.protected??!1,A="public, max-age=31536000, immutable",w=C?"private, no-store":"public, max-age=5, s-maxage=30, stale-while-revalidate=30";return{originDomain:`${l.bucket}.s3.${l.region}.amazonaws.com`,originPath:f,domain:l.domain,trustedKeyGroupIds:[...new Set(l.trustedKeyGroupIds??[])],behaviors:[{pathPattern:"*.m3u8",cacheControl:w,compress:!0,signed:C},{pathPattern:"*.mpd",cacheControl:w,compress:!0,signed:C},{pathPattern:"*.vtt",cacheControl:w,compress:!0,signed:C},{pathPattern:"*",cacheControl:A,compress:!1,signed:C}],responseHeaders:{"Access-Control-Allow-Headers":"Range, If-Range","Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Origin":"*","Access-Control-Expose-Headers":"Accept-Ranges, Content-Length, Content-Range, ETag","X-Content-Type-Options":"nosniff"}}}class Qc{builder;config;environment;mergedConfig;serverEipLogicalIds=new Map;storageFailoverReplicas=[];constructor(l){this.config=l.config,this.environment=l.environment,this.builder=new $d(`${this.config.project.name} - ${this.environment}`),this.mergedConfig=this.mergeEnvironmentConfig()}mergeEnvironmentConfig(){let f=this.config.environments[this.environment]?.infrastructure;if(!f)return this.config;return{...this.config,infrastructure:{...this.config.infrastructure,...f,compute:{...this.config.infrastructure?.compute,...f.compute},storage:{...this.config.infrastructure?.storage,...f.storage},functions:{...this.config.infrastructure?.functions,...f.functions},servers:{...this.config.infrastructure?.servers,...f.servers},databases:{...this.config.infrastructure?.databases,...f.databases},cdn:{...this.config.infrastructure?.cdn,...f.cdn},sftp:f.sftp??this.config.infrastructure?.sftp,queues:{...this.config.infrastructure?.queues,...f.queues},redirects:{...this.config.infrastructure?.redirects,...f.redirects},realtime:{...this.config.infrastructure?.realtime,...f.realtime},cache:{...this.config.infrastructure?.cache,...f.cache},fileSystem:{...this.config.infrastructure?.fileSystem,...f.fileSystem},email:{...this.config.infrastructure?.email,...f.email},search:{...this.config.infrastructure?.search,...f.search},ai:{...this.config.infrastructure?.ai,...f.ai}}}}shouldDeploy(l){if(l.environments&&!l.environments.includes(this.environment))return!1;if(l.requiresFeatures){let f=this.config.features||{};if(!l.requiresFeatures.every((A)=>f[A]===!0))return!1}if(l.regions){let f=this.config.environments[this.environment]?.region||this.config.project.region;if(!l.regions.includes(f))return!1}if(l.condition&&typeof l.condition==="function")return l.condition(this.config,this.environment);return!0}resolveApiOriginPort(){let l=this.mergedConfig.infrastructure?.api?.port??this.mergedConfig.ports?.api,f=Number(l||3008);return Number.isFinite(f)&&f>0?f:3008}defaultComputeCachePathPatterns(){return["/api/*","/auth/*","/publisher/api/*","/publisher/*","/publish","/publish/*","/analytics/*","/packages/*","/npm/*","/zig/*","/php/*","/commits/*","/health","/dashboard/*","/search","/login","/logout","/signup","/account","/account/*"]}shouldRouteStorageBucketToCompute(l,f){return l==="public"||f.routeCompute===!0}storageBucketName(l,f,C){return this.mergedConfig.infrastructure?.storage?.[C]?.bucket??`${l}-${f}-${C}`}fileSystemLogicalId(l,f,C){return t(r({slug:`${l}-${C}`,environment:f,resourceType:"efs"}))}resolveSftpStorage(l,f,C){let A=l.storage;if(A?.type==="efs"&&A.fileSystem){if(!this.mergedConfig.infrastructure?.fileSystem?.[A.fileSystem])throw Error(`sftp: storage.fileSystem "${A.fileSystem}" is not defined in infrastructure.fileSystem`);return{type:"efs",fileSystemId:{Ref:this.fileSystemLogicalId(f,C,A.fileSystem)},posixProfile:A.posixProfile}}if(A?.type==="s3"&&A.storageBucket){if(!this.mergedConfig.infrastructure?.storage?.[A.storageBucket])throw Error(`sftp: storage.storageBucket "${A.storageBucket}" is not defined in infrastructure.storage`);return{type:"s3",bucket:this.storageBucketName(f,C,A.storageBucket)}}return}resolveComputeCachePathPatterns(l){if(l&&l.length>0)return l;return this.defaultComputeCachePathPatterns()}createComputeCacheBehavior(l,f){return{PathPattern:l,TargetOriginId:f,ViewerProtocolPolicy:"redirect-to-https",AllowedMethods:["GET","HEAD","OPTIONS","PUT","POST","PATCH","DELETE"],CachedMethods:["GET","HEAD"],Compress:!0,CachePolicyId:"4135ea2d-6df8-44a3-9df3-4b5a84be39ad",OriginRequestPolicyId:"b689b0a8-53d0-40ab-baf2-68738e2966ac"}}appendComputeAppOrigin(l,f,C,A,w,ve){let ae=this.serverEipLogicalIds.get("app"),ce=this.serverEipLogicalIds.get("appInstance");if(!ae)return;let Te=`EC2-${A}-${w}-api`,ut=this.mergedConfig.infrastructure?.servers?.app?.region||this.mergedConfig.project?.region||"us-east-1",Oe=ut==="us-east-1"?".compute-1.amazonaws.com":`.${ut}.compute.amazonaws.com`,Mt={"Fn::Join":["",["ec2-",{"Fn::Join":["-",{"Fn::Split":[".",{Ref:ae}]}]},Oe]]},ar=this.resolveApiOriginPort();if(l.push({Id:Te,DomainName:Mt,CustomOriginConfig:{HTTPPort:ar,HTTPSPort:443,OriginProtocolPolicy:"http-only",OriginSSLProtocols:["TLSv1.2"]}}),C.push(ae),ce)C.push(ce);for(let Sr of ve)f.push(this.createComputeCacheBehavior(Sr,Te))}buildCaddyfile(l){let f=l.filter(([,w])=>typeof w.domain==="string"&&w.domain&&typeof w.port==="number");if(f.length===0)return;let C=new Map;for(let[,w]of f){let ve=C.get(w.domain)??[];ve.push({port:w.port,path:w.path}),C.set(w.domain,ve)}let A=[];for(let[w,ve]of C){let ce=[...ve].sort((Te,ut)=>{let Oe=!Te.path||Te.path==="/",Mt=!ut.path||ut.path==="/";if(Oe&&!Mt)return 1;if(!Oe&&Mt)return-1;return(ut.path?.length??0)-(Te.path?.length??0)}).map((Te)=>{let ut=!Te.path||Te.path==="/",Oe=`reverse_proxy localhost:${Te.port}`;return ut?` handle {
1
+ import{YS,ZS,Nd,Mp,kd,Bd,zr,L,d,xd,Fp,U,Od,g,bA,_i,_d,Ld,me,$d,CA,r,t,eI,tI,p,rI,nI,iI,sI,oI,Kt,Md,Li,EA,aI,cI,Pe,ze,Fd,Up,Qp,dI,Hp,Gp,Vp,So,Ud,te,Kr,yt,Io,St,fe,vA,Qd,bo,qp,jp,zp,Kp,Hd,lI,Q,b,a,y,Ke,m,Wp,We,H,It,uI,Jp,G,Gd,Ne,Wt,Co,re,Vd,ne,TA,Eo,V,q,k,$i,T,Jt,bt,j,e,Wr,gI,Xp,qd,pI,mI,fI,hI,jd,yI,SI,II,bI,CI,EI,vI,TI,wI,RI,DI,PI,wA,RA,DA,PA,NA,kA,BA,Xt,Yp,Zp,Jr,Mi,NI,em,kI,BI,Xr,xI,OI,_I,LI,$I,MI,xA,OA,_A,LA,$A,Fi,FI,vo,MA,tm,M,FA,Je,To,Ct,UA,rm,QA,HA,GA,nm,F,UI,QI,HI,GI,VA,VI,z,qI,jI,zI,zd,Kd,qA,im,sm,KI,WI,JI,XI,YI,jA,Wd,ZI,eb,tb,rb,nb,zA,KA,ib,sb,ob,ab,cb,db,lb,WA,ub,om,Jd,gb,pb,mb,fb,am,cm,dm,hb,Xd,JA,XA,YA,ZA,Yd,ey,Ab,yb,Sb,Ib,bb,Cb,Eb,ty,ry,ny,iy,lm,vb,Tb,wb,Rb,Db,Pb,Nb,kb,Bb,sy,oy,ay,cy,xb,Ob,um,_b,gm,pm,mm,fm,Lb,$b,Mb,Fb,ke,Ui,Ub,Qb,Hb,Gb,Vb,qb,jb,zb,dy,Kb,Wb,hm,Am,Jb,Xb,ly,Yb,Zb,eC,tC,rC,nC,iC,sC,oC,aC,cC,dC,lC,uC,gC,pC,mC,fC,hC,AC,yC,Zd,uy,el,gy,tl,py,rl,my,nl,fy,Yt,hy,il,Ay,Qi,yy,sl,Sy,ol,Iy,ym,SC,Sm,IC,al,by,Zt,Cy,Im,bC,cl,Ey,bm,CC,Cm,EC,Em,vC,dl,vy,vm,TC,Tm,wC,wm,RC,Rm,DC,ll,Ty,ul,wy,Dm,PC,Pm,NC,Nm,kC,km,BC,Bm,xC,xm,OC,gl,Ry,Om,_C,_m,LC,Lm,$C,$m,MC,Mm,FC,Fm,UC,Um,Qm,Hm,Gm,Vm,QC,qm,HC,jm,GC,zm,VC,Xe,Km,Dy,wo,pl,Yr,Py,Hi,er,ml,fl,Ny,ky,hl,Wm,Al,Jm,qC,jC,Ro,Do,Po,yl,Zr,Sl,Il,Gi,No,ko,Xm,By,xy,Oy,zC,Ym,Zm,KC,_y,ef,Ly,$y,My,WC,tf,en,bl,rf,JC,Fy,Bo,xo,Cl,nf,XC,El,Uy,sf,YC,of,ZC,af,eE}from"./chunk-9aaj9a0s.js";import{vl,R,Tl,Oo,Qy,cf,Hy,Gy,Vy,qy,jy,zy,Ky,Wy}from"./chunk-3nqtbyfp.js";import{Uo,df,Bl,Zy,zi,xl,Qo,lf,uf,rn,Ho,Ol,Ye,_l,Ll,$l,Ki,nn,gf,Ze,Ml,Go,Vo,qo,Fl,Ul,Ql,Wi,jo,Hl,sn,Ji,zo,Et,pf,Gl,Vl,mf,ql,Ko,tr,jl,zl,Kl,Wl,et,ff,Jl,rr,Wo,Jo,Xo,Xi,Yi,on,Xl,Zi,Yo,Zo,an,Yl,cn,hf,Af,vt,dn,ea,yf,Zl,eu,ta,tu,ru,nu,eS,ie,iu,tS,rS,es,ts,nS,Ae,Sf,Tt,Be,xe,wt,su,ou,au,cu,If,bf,ra,Cf,Ef,na,du,lu,vf,se,Tf,uu,ye,ia,tt,Rt,Dt,ln,rs,gu,iS,sa,wf,Rf,Df,Pf,oa,aa,pu,un,ca,mu,ns,fu,da,la,ua,ga,pa,ma,fa,ha,hu,nr,Aa,Au,gn,yu,ya,Sa,Su,ir,Ia,ba,Nf,sS,is,oS,aS,cS,Ca,Ea,Iu,kf,va,pn,bu,ss,Cu,Eu,vu,Ta,Bf,wa,Tu,xf,Ra,Of,mn,fn,wu,os,Bu,Lu,$u,Mu,Fu,Uu,cs,sr,Pa,hn,An,or,rt,Hf,ka,Gf,Vf,Gu,Ba,ls,Vu,xa,Nt,_e,qu,Oa,_a,ju,La,$a,Ma,Fa,zu,Ku,Sn,Ua,Qa,Ha,Ga,Wu,us,In,gs,Va}from"./chunk-78shfb0z.js";import{_,xr,qc,zs,u,gp,pp}from"./chunk-ctkzxq0d.js";import{pt,Vc,yi,Si,Ii,up}from"./chunk-nr6z3e1p.js";import{bh,Ch,Eh,jg,zg,Kg,vh,Wg,Jg,Th,wh,Xg,Rh,Dh,Hc,Yg,Ph,Nh,Zg,kh,Bh,xh,Oh,_h,Lh,$h,Ai,Gc,ep,tp,rp,np,ip,sp,op,ap,cp,dp,lp,Mh,Fh,Uh,Qh,Hh,Gh,Vh}from"./chunk-sekw1nyx.js";import{Ve,jc,pe,Qt,zc,P,Ht,mt,Kc,Ks,zh,mp,Wc,s,bi,Ws,Or,Jc,Xc,_r,Kh,Yc,KS,WS,Js,JS,XS,Zc,ed,Ci,Xs,ee,c,Ys,qe,Lr,Wh,Jh,td,Gt,Xh,Zs,Yh,Zh,eo,rd,$r,to,eA,nd,fp,Vt,Mr,tA,ro,rA,N,nA,id,hp,no,iA,sA,oA,sd,Ei,io,od,qt,ft,aA,Fr,cA,ad,Ap,yp,so,cd,dd,ht,Sp,vi,ld,oo,Ur,Ip,Ti,ud,gd,wi,bp,pd,md,fd,hd,ao,Cp,Ep,dA,vp,Ad,Ri,Tp,wp,co,Qr,lo,uo,go,yd,Rp,Sd,po,lA,jt,uA,Id,Hr,bd,gA,Cd,Dp,Di,Gr,mo,Pi,je,pA,Pp,Np,zt,Ed,vd,Td,Ni,ki,Bi,mA,fA,At,fo,hA,Vr,kp,ho,AA,Bp,xp,Op,yA,_p,Lp,SA,i,IA,xi,Ao,yo}from"./chunk-fszn9rnn.js";import{n}from"./chunk-7gvnrx46.js";import{be,ot,kn}from"./chunk-mhv7dbr1.js";import{o}from"./chunk-ncsb3sdn.js";import{Se,Ss,Is,Yu,Wa,Ja,bs,Xa,nt,K,it,oe,E,Ie,vn,Ya,Le,Za,Tn,wn,Rn,kt,Bt,xt,Dn,cr,ec,dr,lr,st,Pn,rc,Ot,ur,Nn,ic,rg,ng,sc,gr}from"./chunk-2x636sgn.js";import{at,de,Fe,ig,Bn,ac,cc,Es,Ce,_t,xn,vs,Ts,pr,mr,On,fr,ws,Rs,Ds,Ps,J,Ns,ks,Bs,xs,le,Os,_s,Ls,D,dc,_n,lc,ue,hr}from"./chunk-my6yn5sd.js";import{W}from"./chunk-pdjap529.js";import{sg,uc,Ee,gc,Ln,og,pc,ag,cg,rh,Mn,Ms,Un,Qn,Hn,X,Ue,x,br,Vn,Cr,ge,hc,qn,Ac,vr,zn,Fs,Kn,Wn,Jn,Xn,Tr,Cc,Qe,Y,He,Ge,dt,we,wr,Re,ei,ti,ri,ni,ii,si,oi,Rr,O,Hs,Og,Pc,ci,di,li,ui,Lc,Gs,$c,Ut,gi,Vs,qs,Mc,pi,Fc}from"./chunk-k3mazfb2.js";import{wl,_o,Vi,qi,Lo,Rl,Dl,ji,$o,Mo,Nl,kl,Fo}from"./chunk-tez0qfv9.js";import{qa,bn,Cn,ps,ms,fs,hs,ja,za}from"./chunk-q9rdxpmg.js";import{Ka}from"./chunk-n4z75mk8.js";import{oc,$e,S}from"./chunk-0kddm2mt.js";import{Me}from"./chunk-hvwqct5q.js";import{I}from"./chunk-yzns0k2b.js";import{Z,mi,js,Uc,fi,qg}from"./chunk-50m6sq01.js";import{Pr,De}from"./chunk-ajn6xp8v.js";import{h}from"./chunk-mxw5gkd8.js";import{wd,qr,Rd,Dd,Pd,Oi,$p,jr}from"./chunk-pfav9qnt.js";import{Jy,he}from"./chunk-kcj92xx7.js";import{createHmac as mc,createSign as xc,timingSafeEqual as Bc}from"node:crypto";function jn(l){let f=l instanceof Date?l.getTime():l;if(!Number.isFinite(f))throw TypeError("Media access timestamp must be finite");return Math.floor(f/1000)}function fc(l){return Buffer.from(l).toString("base64").replaceAll("+","-").replaceAll("=","_").replaceAll("/","~")}function _c(l){return Buffer.from(l).toString("base64url")}function yc(l,f=!1){if(!l||/[\r\n]/.test(l))throw TypeError("Media resource is invalid");let C=f?l.replaceAll("*","wildcard"):l,A=new URL(C);if(!["http:","https:"].includes(A.protocol))throw TypeError("Media resource must use HTTP or HTTPS");if(!f&&l.includes("*"))throw TypeError("Canned policies cannot contain wildcards")}function Sc(l,f){let C=xc("RSA-SHA1");return C.update(l),C.end(),fc(C.sign(f))}function bc(l){yc(l.resource,!0);let C={DateLessThan:{"AWS:EpochTime":jn(l.expiresAt)}};if(l.activeAt!==void 0)C.DateGreaterThan={"AWS:EpochTime":jn(l.activeAt)};if(l.ipAddress)C.IpAddress={"AWS:SourceIp":l.ipAddress};return JSON.stringify({Statement:[{Resource:l.resource,Condition:C}]})}function Yf(l,f,C){yc(l);let A=jn(f),w=l.includes("?")?"&":"?",ve=bc({resource:l,expiresAt:f}),ae=Sc(ve,C.privateKey);return`${l}${w}Expires=${A}&Signature=${encodeURIComponent(ae)}&Key-Pair-Id=${encodeURIComponent(C.keyPairId)}`}function Xf(l,f){let C=bc(l);return{"CloudFront-Key-Pair-Id":f.keyPairId,"CloudFront-Policy":fc(Buffer.from(C)),"CloudFront-Signature":Sc(C,f.privateKey)}}function Qf(l){if(!l.resource||/[\r\n]/.test(l.resource))throw TypeError("Media resource is invalid");let f=_c(Buffer.from(JSON.stringify({resource:l.resource,expiresAt:jn(l.expiresAt),...l.keyId?{keyId:l.keyId}:{},...l.audience?{audience:l.audience}:{}}))),C=mc("sha256",l.secret).update(f).digest("base64url");return`${f}.${C}`}function eg(l,f){let[C,A,w]=l.split(".");if(!C||!A||w)return null;let ve=mc("sha256",f.secret).update(C).digest(),ae;try{ae=Buffer.from(A,"base64url")}catch{return null}if(ve.length!==ae.length||!Bc(ve,ae))return null;try{let ce=JSON.parse(Buffer.from(C,"base64url").toString("utf8")),Te=jn(f.now??Date.now());if(!ce.resource||!Number.isSafeInteger(ce.expiresAt)||ce.expiresAt<=Te)return null;if(f.resource&&ce.resource!==f.resource)return null;if(f.audience&&ce.audience!==f.audience)return null;return ce}catch{return null}}function tg(l,f=!1){let C=new URL(l,"https://media.invalid").pathname.toLowerCase(),A=/\.(?:m3u8|mpd|vtt|json)$/.test(C),w=/\.(?:key|license)$/.test(C)||C.includes("/keys/")||C.includes("/licenses/");return{"Accept-Ranges":"bytes","Cache-Control":f&&(A||w)?"private, no-store":A?"public, max-age=5, s-maxage=30, stale-while-revalidate=30":"public, max-age=31536000, immutable","Cross-Origin-Resource-Policy":"cross-origin","X-Content-Type-Options":"nosniff"}}function lg(l){if(!/^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/.test(l.bucket))throw TypeError("Media bucket is invalid");if(!/^[a-z0-9-]+$/.test(l.region))throw TypeError("Media bucket region is invalid");let f=l.prefix?`/${l.prefix.replace(/^\/+|\/+$/g,"")}`:"",C=l.protected??!1,A="public, max-age=31536000, immutable",w=C?"private, no-store":"public, max-age=5, s-maxage=30, stale-while-revalidate=30";return{originDomain:`${l.bucket}.s3.${l.region}.amazonaws.com`,originPath:f,domain:l.domain,trustedKeyGroupIds:[...new Set(l.trustedKeyGroupIds??[])],behaviors:[{pathPattern:"*.m3u8",cacheControl:w,compress:!0,signed:C},{pathPattern:"*.mpd",cacheControl:w,compress:!0,signed:C},{pathPattern:"*.vtt",cacheControl:w,compress:!0,signed:C},{pathPattern:"*",cacheControl:A,compress:!1,signed:C}],responseHeaders:{"Access-Control-Allow-Headers":"Range, If-Range","Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Origin":"*","Access-Control-Expose-Headers":"Accept-Ranges, Content-Length, Content-Range, ETag","X-Content-Type-Options":"nosniff"}}}class Qc{builder;config;environment;mergedConfig;serverEipLogicalIds=new Map;storageFailoverReplicas=[];constructor(l){this.config=l.config,this.environment=l.environment,this.builder=new $d(`${this.config.project.name} - ${this.environment}`),this.mergedConfig=this.mergeEnvironmentConfig()}mergeEnvironmentConfig(){let f=this.config.environments[this.environment]?.infrastructure;if(!f)return this.config;return{...this.config,infrastructure:{...this.config.infrastructure,...f,compute:{...this.config.infrastructure?.compute,...f.compute},storage:{...this.config.infrastructure?.storage,...f.storage},functions:{...this.config.infrastructure?.functions,...f.functions},servers:{...this.config.infrastructure?.servers,...f.servers},databases:{...this.config.infrastructure?.databases,...f.databases},cdn:{...this.config.infrastructure?.cdn,...f.cdn},sftp:f.sftp??this.config.infrastructure?.sftp,queues:{...this.config.infrastructure?.queues,...f.queues},redirects:{...this.config.infrastructure?.redirects,...f.redirects},realtime:{...this.config.infrastructure?.realtime,...f.realtime},cache:{...this.config.infrastructure?.cache,...f.cache},fileSystem:{...this.config.infrastructure?.fileSystem,...f.fileSystem},email:{...this.config.infrastructure?.email,...f.email},search:{...this.config.infrastructure?.search,...f.search},ai:{...this.config.infrastructure?.ai,...f.ai}}}}shouldDeploy(l){if(l.environments&&!l.environments.includes(this.environment))return!1;if(l.requiresFeatures){let f=this.config.features||{};if(!l.requiresFeatures.every((A)=>f[A]===!0))return!1}if(l.regions){let f=this.config.environments[this.environment]?.region||this.config.project.region;if(!l.regions.includes(f))return!1}if(l.condition&&typeof l.condition==="function")return l.condition(this.config,this.environment);return!0}resolveApiOriginPort(){let l=this.mergedConfig.infrastructure?.api?.port??this.mergedConfig.ports?.api,f=Number(l||3008);return Number.isFinite(f)&&f>0?f:3008}defaultComputeCachePathPatterns(){return["/api/*","/auth/*","/publisher/api/*","/publisher/*","/publish","/publish/*","/analytics/*","/packages/*","/npm/*","/zig/*","/php/*","/commits/*","/health","/dashboard/*","/search","/login","/logout","/signup","/account","/account/*"]}shouldRouteStorageBucketToCompute(l,f){return l==="public"||f.routeCompute===!0}storageBucketName(l,f,C){return this.mergedConfig.infrastructure?.storage?.[C]?.bucket??`${l}-${f}-${C}`}fileSystemLogicalId(l,f,C){return t(r({slug:`${l}-${C}`,environment:f,resourceType:"efs"}))}resolveSftpStorage(l,f,C){let A=l.storage;if(A?.type==="efs"&&A.fileSystem){if(!this.mergedConfig.infrastructure?.fileSystem?.[A.fileSystem])throw Error(`sftp: storage.fileSystem "${A.fileSystem}" is not defined in infrastructure.fileSystem`);return{type:"efs",fileSystemId:{Ref:this.fileSystemLogicalId(f,C,A.fileSystem)},posixProfile:A.posixProfile}}if(A?.type==="s3"&&A.storageBucket){if(!this.mergedConfig.infrastructure?.storage?.[A.storageBucket])throw Error(`sftp: storage.storageBucket "${A.storageBucket}" is not defined in infrastructure.storage`);return{type:"s3",bucket:this.storageBucketName(f,C,A.storageBucket)}}return}resolveComputeCachePathPatterns(l){if(l&&l.length>0)return l;return this.defaultComputeCachePathPatterns()}createComputeCacheBehavior(l,f){return{PathPattern:l,TargetOriginId:f,ViewerProtocolPolicy:"redirect-to-https",AllowedMethods:["GET","HEAD","OPTIONS","PUT","POST","PATCH","DELETE"],CachedMethods:["GET","HEAD"],Compress:!0,CachePolicyId:"4135ea2d-6df8-44a3-9df3-4b5a84be39ad",OriginRequestPolicyId:"b689b0a8-53d0-40ab-baf2-68738e2966ac"}}appendComputeAppOrigin(l,f,C,A,w,ve){let ae=this.serverEipLogicalIds.get("app"),ce=this.serverEipLogicalIds.get("appInstance");if(!ae)return;let Te=`EC2-${A}-${w}-api`,ut=this.mergedConfig.infrastructure?.servers?.app?.region||this.mergedConfig.project?.region||"us-east-1",Oe=ut==="us-east-1"?".compute-1.amazonaws.com":`.${ut}.compute.amazonaws.com`,Mt={"Fn::Join":["",["ec2-",{"Fn::Join":["-",{"Fn::Split":[".",{Ref:ae}]}]},Oe]]},ar=this.resolveApiOriginPort();if(l.push({Id:Te,DomainName:Mt,CustomOriginConfig:{HTTPPort:ar,HTTPSPort:443,OriginProtocolPolicy:"http-only",OriginSSLProtocols:["TLSv1.2"]}}),C.push(ae),ce)C.push(ce);for(let Sr of ve)f.push(this.createComputeCacheBehavior(Sr,Te))}buildCaddyfile(l){let f=l.filter(([,w])=>typeof w.domain==="string"&&w.domain&&typeof w.port==="number");if(f.length===0)return;let C=new Map;for(let[,w]of f){let ve=C.get(w.domain)??[];ve.push({port:w.port,path:w.path}),C.set(w.domain,ve)}let A=[];for(let[w,ve]of C){let ce=[...ve].sort((Te,ut)=>{let Oe=!Te.path||Te.path==="/",Mt=!ut.path||ut.path==="/";if(Oe&&!Mt)return 1;if(!Oe&&Mt)return-1;return(ut.path?.length??0)-(Te.path?.length??0)}).map((Te)=>{let ut=!Te.path||Te.path==="/",Oe=`reverse_proxy localhost:${Te.port}`;return ut?` handle {
2
2
  ${Oe}
3
3
  }`:` handle ${Te.path} {
4
4
  ${Oe}
package/dist/ui/404.html CHANGED
@@ -2,7 +2,7 @@
2
2
  <html lang="en" data-theme="dark">
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
- <meta name="stx-build" content="muup89qjskdk0e">
5
+ <meta name="stx-build" content="muvws1xmd5nu14">
6
6
 
7
7
  <!-- stx SEO Tags -->
8
8
  <meta name="title" content="Page not found · ts-cloud">
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="muup7uw0cp3bsb"><meta name="title" content="stx Project"><meta name="description" content="A website built with stx templating engine"><meta property="og:title" content="stx Project"><meta property="og:description" content="A website built with stx templating engine"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="stx Project"><meta name="twitter:description" content="A website built with stx templating engine"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud - Accept invitation</title><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E"><link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_stx/style.448ab192.css"><style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.616c25f3.css"></head><body class="auth-page"><main class="auth-card" id="main-content"><a class="brand" href="/"><span class="dot"></span><span>ts-cloud</span></a><div><span class="context-label">Organization invitation</span><h1>Join your team</h1><p>Choose the dashboard username and password you will use after this invitation is accepted.</p></div><form id="accept-invitation-form" class="auth-form"><div class="field-block"><label for="invite-name">Name</label><input id="invite-name" name="name" autocomplete="name" placeholder="Chris Breuer"></div><div class="field-block"><label for="invite-username">Username</label><input id="invite-username" name="username" autocomplete="username" minlength="2" maxlength="32" required></div><div class="field-block"><label for="invite-password">Password</label><input id="invite-password" name="password" type="password" autocomplete="new-password" minlength="12" required><small>At least 12 characters.</small></div><button class="btn" type="submit">Accept invitation</button><div id="invitation-status" class="auth-status" role="status"></div></form><p class="note">If this link expired or was already used, ask an organization owner to resend the invitation.</p></main> <script data-stx-scoped data-stx-run="always">
1
+ <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="muvwrjwd8t4uge"><meta name="title" content="stx Project"><meta name="description" content="A website built with stx templating engine"><meta property="og:title" content="stx Project"><meta property="og:description" content="A website built with stx templating engine"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="stx Project"><meta name="twitter:description" content="A website built with stx templating engine"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud - Accept invitation</title><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E"><link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_stx/style.448ab192.css"><style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.616c25f3.css"></head><body class="auth-page"><main class="auth-card" id="main-content"><a class="brand" href="/"><span class="dot"></span><span>ts-cloud</span></a><div><span class="context-label">Organization invitation</span><h1>Join your team</h1><p>Choose the dashboard username and password you will use after this invitation is accepted.</p></div><form id="accept-invitation-form" class="auth-form"><div class="field-block"><label for="invite-name">Name</label><input id="invite-name" name="name" autocomplete="name" placeholder="Chris Breuer"></div><div class="field-block"><label for="invite-username">Username</label><input id="invite-username" name="username" autocomplete="username" minlength="2" maxlength="32" required></div><div class="field-block"><label for="invite-password">Password</label><input id="invite-password" name="password" type="password" autocomplete="new-password" minlength="12" required><small>At least 12 characters.</small></div><button class="btn" type="submit">Accept invitation</button><div id="invitation-status" class="auth-status" role="status"></div></form><p class="note">If this link expired or was already used, ask an organization owner to resend the invitation.</p></main> <script data-stx-scoped data-stx-run="always">
2
2
  ;(function() {
3
3
  'use strict';
4
4
  (() => {
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="muup7uw0cp3bsb"><meta name="title" content="Access unavailable · ts-cloud"><meta name="description" content="A website built with stx templating engine"><meta property="og:title" content="Access unavailable · ts-cloud"><meta property="og:description" content="A website built with stx templating engine"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Access unavailable · ts-cloud"><meta name="twitter:description" content="A website built with stx templating engine"> <script data-stx-runtime src="/_stx/runtime.dbee66d1.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Access unavailable · ts-cloud</title><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E"><link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_stx/style.448ab192.css"><style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.906ee17c.css"></head><body data-stx-auto><a data-stx-scope="stx_scope_nav_50" class="skip-link" href="#main-content">Skip to content</a><button class="nav-toggle-button" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false"><span></span><span></span><span></span></button><button class="nav-scrim" type="button" aria-label="Close navigation"></button><aside class="app-sidebar" id="primary-navigation" aria-label="Primary navigation"><a class="brand" href="/?env=production"><span class="dot"></span><span>ts-cloud</span></a><div class="sidebar-context"><span class="context-label">Project</span><strong>ts-cloud</strong></div><div class="environment-picker" aria-label="Environment"><span class="context-label">Environment</span><details><summary class="environment-current production"><span>PROD</span><strong>production</strong></summary></details></div><button class="command-trigger" type="button" aria-keyshortcuts="Meta+K Control+K"><span>Search resources</span><kbd>⌘ K</kbd></button><div class="nav-groups"><section class="nav-group"><h2>Overview</h2><a class="" href="/?env=production">Dashboard</a><a href="/server/activity?env=production">Activity</a></section><section class="nav-group"><h2>Applications</h2><a class="" href="/server/sites?env=production">Services</a><a class="" href="/server/deployments?env=production">Deployments</a><a class="" href="/server/logs?env=production">Logs</a><a class="" href="/integrations?env=production">Git integrations</a><a class="" href="/applications/new?env=production">Create application</a><a class="" href="/applications/compose?env=production">Compose applications</a></section><section class="nav-group"><h2>Operations</h2><a class="" href="/operations/queue?env=production">Deployment queue</a><a class="" href="/operations/previews?env=production">Preview environments</a><a class="" href="/operations/releases?env=production">Releases & promotion</a><a class="" href="/operations/regions?env=production">Regions & failover</a><a class="" href="/operations/maintenance?env=production">Maintenance & DR</a><a class="" href="/operations/workloads?env=production">Workloads</a><a class="" href="/operations/observability?env=production">Observability</a><a class="" href="/operations/alerts?env=production">Alerts & health</a><a class="" href="/operations/spend?env=production">Spend & budgets</a><a href="/server/metrics?env=production">Metrics</a><a href="/server/services?env=production">Runtime services</a><a class="" href="/operations/jobs?env=production">Workers & schedules</a><a class="" href="/operations/configuration?env=production">Environment &amp; secrets</a><a class="" href="/data/backups?env=production">Backups &amp; recovery</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/actions?env=production">Run operations</a></section><section class="nav-group"><h2>Infrastructure</h2><a class="" href="/infrastructure/topology?env=production">Infrastructure map</a><a class="" href="/data/services?env=production">Data services</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/firewall?env=production">Network & firewall</a><a href="/server/ssh-keys?env=production">SSH keys</a><a class="" href="/server/fleet?env=production">Fleet inventory</a><a class="" href="/server/capacity?env=production">Capacity & placement</a><a href="/security?env=production">Security posture</a><a href="/server/terminal?env=production">Terminal</a></section><section class="nav-group"><h2>Organization</h2><a class="" href="/server/team?env=production">People & access</a><a class="" href="/account/automation?env=production">API & automation</a></section><section class="nav-group"><h2>Account</h2><a class="" href="/account/security?env=production">Sign-in & security</a></section></div><form method="post" action="/api/logout" class="signout"><button type="submit">Sign out</button></form></aside><dialog class="command-palette" aria-labelledby="command-title"><div class="command-search"><span aria-hidden="true">⌕</span><input type="search" placeholder="Search services, domains, deployments…" aria-label="Search resources" autocomplete="off"><button type="button" class="command-close" aria-label="Close search">Esc</button></div><h2 id="command-title" class="sr-only">Search resources and navigation</h2><div class="command-status" role="status">Start typing to search this project.</div><section class="saved-views" aria-labelledby="saved-views-title"><div class="saved-views-heading"><h3 id="saved-views-title">Saved views</h3><form class="save-view-form"><label class="sr-only" for="save-view-name">Saved view name</label><input id="save-view-name" maxlength="64" placeholder="Name this view" autocomplete="off"><button type="submit">Save current filters</button></form></div><div class="saved-view-list"></div></section><form class="tag-result-form"><label for="tag-result-name">Tag selected resource</label><input id="tag-result-name" maxlength="32" placeholder="customer-facing" pattern="[A-Za-z0-9][A-Za-z0-9 -]{0,31}" autocomplete="off"><input class="tag-color" type="color" value="#5a8be0" aria-label="Tag color"><button type="submit">Add tag</button></form><div class="command-results" role="listbox" aria-label="Search results"></div><footer><span>↑ ↓ navigate</span><span>Enter open</span><span>Esc close</span></footer></dialog><div class="context-bar" aria-label="Current scope"><div class="context-path"><div class="context-breadcrumb"><span>ts-cloud</span><i>/</i><strong>production</strong></div><div class="context-filters" aria-label="Active filters"></div></div><span class="scope-safety production">Production scope</span></div> <script data-stx-scoped data-stx-run="always">
1
+ <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="muvwrjwd8t4uge"><meta name="title" content="Access unavailable · ts-cloud"><meta name="description" content="A website built with stx templating engine"><meta property="og:title" content="Access unavailable · ts-cloud"><meta property="og:description" content="A website built with stx templating engine"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Access unavailable · ts-cloud"><meta name="twitter:description" content="A website built with stx templating engine"> <script data-stx-runtime src="/_stx/runtime.dbee66d1.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Access unavailable · ts-cloud</title><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E"><link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_stx/style.448ab192.css"><style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.906ee17c.css"></head><body data-stx-auto><a data-stx-scope="stx_scope_nav_50" class="skip-link" href="#main-content">Skip to content</a><button class="nav-toggle-button" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false"><span></span><span></span><span></span></button><button class="nav-scrim" type="button" aria-label="Close navigation"></button><aside class="app-sidebar" id="primary-navigation" aria-label="Primary navigation"><a class="brand" href="/?env=production"><span class="dot"></span><span>ts-cloud</span></a><div class="sidebar-context"><span class="context-label">Project</span><strong>ts-cloud</strong></div><div class="environment-picker" aria-label="Environment"><span class="context-label">Environment</span><details><summary class="environment-current production"><span>PROD</span><strong>production</strong></summary></details></div><button class="command-trigger" type="button" aria-keyshortcuts="Meta+K Control+K"><span>Search resources</span><kbd>⌘ K</kbd></button><div class="nav-groups"><section class="nav-group"><h2>Overview</h2><a class="" href="/?env=production">Dashboard</a><a href="/server/activity?env=production">Activity</a></section><section class="nav-group"><h2>Applications</h2><a class="" href="/server/sites?env=production">Services</a><a class="" href="/server/deployments?env=production">Deployments</a><a class="" href="/server/logs?env=production">Logs</a><a class="" href="/integrations?env=production">Git integrations</a><a class="" href="/applications/new?env=production">Create application</a><a class="" href="/applications/compose?env=production">Compose applications</a></section><section class="nav-group"><h2>Operations</h2><a class="" href="/operations/queue?env=production">Deployment queue</a><a class="" href="/operations/previews?env=production">Preview environments</a><a class="" href="/operations/releases?env=production">Releases & promotion</a><a class="" href="/operations/regions?env=production">Regions & failover</a><a class="" href="/operations/maintenance?env=production">Maintenance & DR</a><a class="" href="/operations/workloads?env=production">Workloads</a><a class="" href="/operations/observability?env=production">Observability</a><a class="" href="/operations/alerts?env=production">Alerts & health</a><a class="" href="/operations/spend?env=production">Spend & budgets</a><a href="/server/metrics?env=production">Metrics</a><a href="/server/services?env=production">Runtime services</a><a class="" href="/operations/jobs?env=production">Workers & schedules</a><a class="" href="/operations/configuration?env=production">Environment &amp; secrets</a><a class="" href="/data/backups?env=production">Backups &amp; recovery</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/actions?env=production">Run operations</a></section><section class="nav-group"><h2>Infrastructure</h2><a class="" href="/infrastructure/topology?env=production">Infrastructure map</a><a class="" href="/data/services?env=production">Data services</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/firewall?env=production">Network & firewall</a><a href="/server/ssh-keys?env=production">SSH keys</a><a class="" href="/server/fleet?env=production">Fleet inventory</a><a class="" href="/server/capacity?env=production">Capacity & placement</a><a href="/security?env=production">Security posture</a><a href="/server/terminal?env=production">Terminal</a></section><section class="nav-group"><h2>Organization</h2><a class="" href="/server/team?env=production">People & access</a><a class="" href="/account/automation?env=production">API & automation</a></section><section class="nav-group"><h2>Account</h2><a class="" href="/account/security?env=production">Sign-in & security</a></section></div><form method="post" action="/api/logout" class="signout"><button type="submit">Sign out</button></form></aside><dialog class="command-palette" aria-labelledby="command-title"><div class="command-search"><span aria-hidden="true">⌕</span><input type="search" placeholder="Search services, domains, deployments…" aria-label="Search resources" autocomplete="off"><button type="button" class="command-close" aria-label="Close search">Esc</button></div><h2 id="command-title" class="sr-only">Search resources and navigation</h2><div class="command-status" role="status">Start typing to search this project.</div><section class="saved-views" aria-labelledby="saved-views-title"><div class="saved-views-heading"><h3 id="saved-views-title">Saved views</h3><form class="save-view-form"><label class="sr-only" for="save-view-name">Saved view name</label><input id="save-view-name" maxlength="64" placeholder="Name this view" autocomplete="off"><button type="submit">Save current filters</button></form></div><div class="saved-view-list"></div></section><form class="tag-result-form"><label for="tag-result-name">Tag selected resource</label><input id="tag-result-name" maxlength="32" placeholder="customer-facing" pattern="[A-Za-z0-9][A-Za-z0-9 -]{0,31}" autocomplete="off"><input class="tag-color" type="color" value="#5a8be0" aria-label="Tag color"><button type="submit">Add tag</button></form><div class="command-results" role="listbox" aria-label="Search results"></div><footer><span>↑ ↓ navigate</span><span>Enter open</span><span>Esc close</span></footer></dialog><div class="context-bar" aria-label="Current scope"><div class="context-path"><div class="context-breadcrumb"><span>ts-cloud</span><i>/</i><strong>production</strong></div><div class="context-filters" aria-label="Active filters"></div></div><span class="scope-safety production">Production scope</span></div> <script data-stx-scoped data-stx-run="always">
2
2
  (function() {
3
3
  var { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, refresh, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
4
4
  var __destroyHooks = [];