@stacksjs/ts-cloud 0.7.98 → 0.7.99

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 (54) hide show
  1. package/dist/bin/cli.js +43 -43
  2. package/dist/bin/dashboard-server.js +1 -1
  3. package/dist/{chunk-1x4xrdkt.js → chunk-p8hfn83b.js} +1 -1
  4. package/dist/{chunk-89kbfd6c.js → chunk-xrsextff.js} +1 -1
  5. package/dist/deploy/index.js +2 -2
  6. package/dist/drivers/index.js +1 -1
  7. package/dist/drivers/shared/package-manager.d.ts +2 -2
  8. package/dist/index.js +2 -2
  9. package/dist/ui/access-denied.html +2 -2
  10. package/dist/ui/account/automation.html +4 -4
  11. package/dist/ui/applications/compose.html +4 -4
  12. package/dist/ui/applications/new.html +2 -2
  13. package/dist/ui/data/backups.html +4 -4
  14. package/dist/ui/data/services.html +4 -4
  15. package/dist/ui/data/volumes.html +4 -4
  16. package/dist/ui/index.html +4 -4
  17. package/dist/ui/operations/alerts.html +4 -4
  18. package/dist/ui/operations/configuration.html +4 -4
  19. package/dist/ui/operations/jobs.html +4 -4
  20. package/dist/ui/operations/maintenance.html +4 -4
  21. package/dist/ui/operations/observability.html +4 -4
  22. package/dist/ui/operations/previews.html +3 -3
  23. package/dist/ui/operations/queue.html +4 -4
  24. package/dist/ui/operations/regions.html +4 -4
  25. package/dist/ui/operations/releases.html +4 -4
  26. package/dist/ui/operations/workloads.html +3 -3
  27. package/dist/ui/security.html +2 -2
  28. package/dist/ui/server/actions.html +3 -3
  29. package/dist/ui/server/activity.html +2 -2
  30. package/dist/ui/server/capacity.html +4 -4
  31. package/dist/ui/server/database.html +4 -4
  32. package/dist/ui/server/deployments.html +3 -3
  33. package/dist/ui/server/firewall.html +4 -4
  34. package/dist/ui/server/fleet.html +4 -4
  35. package/dist/ui/server/logs.html +4 -4
  36. package/dist/ui/server/metrics.html +4 -4
  37. package/dist/ui/server/security.html +2 -2
  38. package/dist/ui/server/services.html +2 -2
  39. package/dist/ui/server/sites.html +3 -3
  40. package/dist/ui/server/ssh-keys.html +4 -4
  41. package/dist/ui/server/team.html +4 -4
  42. package/dist/ui/server/terminal.html +2 -2
  43. package/dist/ui/serverless/alarms.html +4 -4
  44. package/dist/ui/serverless/assets.html +2 -2
  45. package/dist/ui/serverless/cost.html +2 -2
  46. package/dist/ui/serverless/data.html +4 -4
  47. package/dist/ui/serverless/functions.html +4 -4
  48. package/dist/ui/serverless/logs.html +4 -4
  49. package/dist/ui/serverless/metrics.html +2 -2
  50. package/dist/ui/serverless/queues.html +4 -4
  51. package/dist/ui/serverless/secrets.html +4 -4
  52. package/dist/ui/serverless/traces.html +3 -3
  53. package/dist/ui/serverless.html +4 -4
  54. package/package.json +3 -3
@@ -5760,7 +5760,7 @@ ${Object.entries(t).filter(([n])=>!n.startsWith("@_")).map(([n,c])=>E(n,c," ","
5760
5760
  </CustomErrorResponse>
5761
5761
  </Items>
5762
5762
  </CustomErrorResponses>`}
5763
- </DistributionConfig>`,a=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/distribution",body:P,headers:{"Content-Type":"application/xml"},returnHeaders:!0}),j=a.body?.Distribution||a.Distribution||a.body||a;return{Id:j.Id,ARN:j.ARN,DomainName:j.DomainName,Status:j.Status,ETag:a.headers?.etag||a.ETag||""}}async createMediaDistributionForS3(t){return this.createDistributionForS3({...t,defaultRootObject:"",mediaDelivery:!0,comment:t.comment??`Media distribution for ${t.bucketName}`})}async listPublicKeys(){let t=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/public-key"});return this.collectionItems(t.PublicKeyList??t,"PublicKeySummary").map((r)=>({Id:String(r.Id),Name:String(r.Name),Comment:r.Comment?String(r.Comment):void 0}))}async createPublicKey(t){if(!/^[A-Za-z0-9_-]{1,128}$/.test(t.name))throw TypeError("CloudFront public key name is invalid");if(!t.encodedKey.includes("BEGIN PUBLIC KEY"))throw TypeError("CloudFront public key must be PEM encoded");let e=(E)=>E.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;"),r=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/public-key",headers:{"Content-Type":"application/xml"},body:`<PublicKeyConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/"><CallerReference>${e(t.callerReference??`${Date.now()}-${t.name}`)}</CallerReference><Name>${e(t.name)}</Name><EncodedKey>${e(t.encodedKey)}</EncodedKey><Comment>${e(t.comment??"")}</Comment></PublicKeyConfig>`}),d=r.PublicKey??r;return{Id:String(d.Id),Name:String(d.PublicKeyConfig?.Name??t.name),EncodedKey:String(d.PublicKeyConfig?.EncodedKey??t.encodedKey),Comment:String(d.PublicKeyConfig?.Comment??t.comment??"")}}async listKeyGroups(){let t=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/key-group"});return this.collectionItems(t.KeyGroupList??t,"KeyGroupSummary").map((r)=>({Id:String(r.KeyGroup?.Id??r.Id),Name:String(r.KeyGroup?.KeyGroupConfig?.Name??r.KeyGroupConfig?.Name??r.Name),Items:this.collectionItems(r.KeyGroup?.KeyGroupConfig?.Items??r.KeyGroupConfig?.Items??r.Items,"Item").map(String),Comment:r.KeyGroup?.KeyGroupConfig?.Comment??r.KeyGroupConfig?.Comment??r.Comment}))}async createKeyGroup(t){if(!/^[A-Za-z0-9_-]{1,128}$/.test(t.name))throw TypeError("CloudFront key group name is invalid");let e=[...new Set(t.publicKeyIds)];if(e.length===0)throw TypeError("CloudFront key group requires at least one public key");let r=(c)=>c.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;"),d=e.map((c)=>`<Item>${r(c)}</Item>`).join(""),E=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/key-group",headers:{"Content-Type":"application/xml"},body:`<KeyGroupConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/"><Name>${r(t.name)}</Name><Items>${d}</Items><Comment>${r(t.comment??"")}</Comment></KeyGroupConfig>`}),n=E.KeyGroup??E;return{Id:String(n.Id),Name:String(n.KeyGroupConfig?.Name??t.name),Items:e,Comment:String(n.KeyGroupConfig?.Comment??t.comment??"")}}static getS3BucketPolicyForCloudFront(t,e){return{Version:"2012-10-17",Statement:[{Sid:"AllowCloudFrontServicePrincipal",Effect:"Allow",Principal:{Service:"cloudfront.amazonaws.com"},Action:"s3:GetObject",Resource:`arn:aws:s3:::${t}/*`,Condition:{StringEquals:{"AWS:SourceArn":e}}}]}}async waitForDistributionDeployed(t,e=60){for(let r=0;r<e;r++){if((await this.getDistribution(t)).Status==="Deployed")return!0;await new Promise((E)=>setTimeout(E,30000))}return!1}async disableDistribution(t){let e=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${t}/config`,returnHeaders:!0}),r=e.headers?.etag||e.headers?.ETag||"",d=e.body?.DistributionConfig||(e.body?.Enabled!==void 0?e.body:void 0)||e.DistributionConfig;if(!d||d.Enabled===void 0)throw Error("Failed to get current distribution config");d.Enabled=!1;let E=this.buildDistributionConfigXml(d),n=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${t}/config`,body:E,headers:{"Content-Type":"application/xml","If-Match":r},returnHeaders:!0});return{ETag:n.headers?.etag||n.headers?.ETag||n.ETag||""}}async deleteDistribution(t,e){let r=e||"";if(!r){let d=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${t}`,returnHeaders:!0});r=d.headers?.etag||d.headers?.ETag||""}await this.client.request({service:"cloudfront",region:"us-east-1",method:"DELETE",path:`/2020-05-31/distribution/${t}`,headers:{"If-Match":r}})}async waitForDistributionDisabled(t,e=60){for(let r=0;r<e;r++){let d=await this.getDistribution(t);if(d.Status==="Deployed"&&!d.Enabled)return!0;await new Promise((E)=>setTimeout(E,30000))}return!1}async removeAlias(t,e){let r=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${t}/config`,returnHeaders:!0}),d=r.headers?.etag||r.headers?.ETag||"",E=r.body?.DistributionConfig||(r.body?.Enabled!==void 0?r.body:void 0)||r.DistributionConfig;if(!E||E.Enabled===void 0)throw Error("Failed to get current distribution config");let n=[];if(E.Aliases?.Items){if(Array.isArray(E.Aliases.Items))n=E.Aliases.Items;else if(typeof E.Aliases.Items==="object"){let T=E.Aliases.Items.CNAME;if(typeof T==="string")n=[T];else if(Array.isArray(T))n=T}}if(n.length===0)throw Error("Distribution has no aliases to remove");let c=n.filter((T)=>T!==e);if(c.length===n.length)throw Error(`Alias ${e} not found in distribution`);if(E.Aliases.Quantity=c.length,E.Aliases.Items=c.length>0?c:void 0,c.length===0)E.ViewerCertificate={CloudFrontDefaultCertificate:!0,MinimumProtocolVersion:"TLSv1.2_2021"};let _=this.buildDistributionConfigXml(E),i=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${t}/config`,body:_,headers:{"Content-Type":"application/xml","If-Match":d},returnHeaders:!0});return{ETag:i.headers?.etag||i.headers?.ETag||i.ETag||""}}}i_();At();At();i_();function KD(t,e=""){return t===408||t===409||t===425||t===429||t>=500||/rate limit|temporar|timed? ?out|try again/i.test(e)}async function MA(t,e){let r=e?.headers.get("retry-after"),d=r===null||r===void 0?void 0:Number(r)*1000,E=Number.isFinite(d)?Math.max(0,d):Math.min(1000*2**(t-1),30000);await new Promise((n)=>setTimeout(n,E))}class dc{name="porkbun";apiKey;secretKey;requestTimeoutMs;constructor(t,e,r=15000){this.apiKey=t,this.secretKey=e,this.requestTimeoutMs=r}async request(t,e={}){let r;for(let d=1;d<=8;d+=1){let E,n=new AbortController,c=setTimeout(()=>{n.abort(Error(`Porkbun API request timed out after ${this.requestTimeoutMs}ms`))},this.requestTimeoutMs);try{E=await fetch(`https://api.porkbun.com/api/json/v3${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apikey:this.apiKey,secretapikey:this.secretKey,...e}),signal:n.signal})}catch(i){if(r=i,d===8)throw i;await MA(d);continue}finally{clearTimeout(c)}if(!E.ok){if(r=Error(`Porkbun API error: ${E.status} ${E.statusText}`),!KD(E.status)||d===8)throw r;await MA(d,E);continue}let _=await E.json();if(_.status==="ERROR"){if(r=Error(`Porkbun API error: ${_.message||"Unknown error"}`),!KD(0,_.message)||d===8)throw r;await MA(d,E);continue}return _}throw r}getSubdomain(t,e){let r=t.replace(/\.$/,""),d=e.replace(/\.$/,"");if(r===d)return"";if(r.endsWith(`.${d}`))return r.slice(0,-(d.length+1));return r}getRootDomain(t){let e=t.replace(/\.$/,"").split(".");if(e.length>=2)return e.slice(-2).join(".");return t}static ADDRESS_TYPES=new Set(["A","AAAA"]);async clearConflictingAliases(t,e){if(!dc.ADDRESS_TYPES.has(e.type))return[];let r=this.getRootDomain(t),d=this.getSubdomain(e.name,r),E=await this.listRecords(t);if(!E.success)return[`could not list records to clear ALIAS/CNAME conflicts: ${E.message??"unknown provider error"}`];let n=[];for(let c of E.records){if(c.type!=="ALIAS"&&c.type!=="CNAME")continue;if(this.getSubdomain(c.name,r)!==d)continue;let _=await this.deleteRecord(t,c);if(!_.success)n.push(`could not remove conflicting ${c.type} on ${c.name}: ${_.message??"unknown provider error"}`)}return n}async addressRecordExists(t,e){let r=this.getRootDomain(t),d=this.getSubdomain(e.name,r),E=await this.listRecords(t);if(!E.success)return!0;return E.records.some((n)=>n.type===e.type&&this.getSubdomain(n.name,r)===d&&n.content===e.content)}async createRecord(t,e){try{let r=this.getRootDomain(t),d=this.getSubdomain(e.name,r),E={type:e.type,content:e.content,ttl:String(e.ttl||600)};if(d)E.name=d;if((e.type==="MX"||e.type==="SRV")&&e.priority!==void 0)E.prio=String(e.priority);if(e.type==="SRV"&&e.weight!==void 0&&e.port!==void 0)E.content=`${e.weight} ${e.port} ${e.content}`;let n=await this.clearConflictingAliases(t,e),c=await this.request(`/dns/create/${r}`,E);if(dc.ADDRESS_TYPES.has(e.type)&&!await this.addressRecordExists(t,e))return{success:!1,message:`Porkbun reported success but no ${e.type} record for ${e.name} exists${n.length>0?` (${n.join("; ")})`:""}. A conflicting ALIAS/CNAME on the same name silently voids the write.`};return{success:!0,id:c.id?.toString(),message:"Record created successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async upsertRecord(t,e){try{let r=this.getRootDomain(t),d=this.getSubdomain(e.name,r),E=await this.listRecords(t,e.type);if(E.success){let n=E.records.find((c)=>{return this.getSubdomain(c.name,r)===d&&c.type===e.type});if(n?.id){let c={type:e.type,content:e.content,ttl:String(e.ttl||600)};if(d)c.name=d;if((e.type==="MX"||e.type==="SRV")&&e.priority!==void 0)c.prio=String(e.priority);if(e.type==="SRV"&&e.weight!==void 0&&e.port!==void 0)c.content=`${e.weight} ${e.port} ${e.content}`;return await this.request(`/dns/edit/${r}/${n.id}`,c),{success:!0,id:n.id,message:"Record updated successfully"}}}return this.createRecord(t,e)}catch(r){return this.createRecord(t,e)}}async deleteRecord(t,e){try{let r=this.getRootDomain(t);if("id"in e&&e.id)return await this.request(`/dns/delete/${r}/${e.id}`),{success:!0,message:"Record deleted successfully"};let d=this.getSubdomain(e.name,r),E=await this.listRecords(t);if(!E.success)return{success:!1,message:"Failed to list records"};let n=E.records.find((c)=>{return this.getSubdomain(c.name,r)===d&&c.type===e.type&&c.content===e.content});if(!n?.id)return{success:!1,message:"Record not found"};return await this.request(`/dns/delete/${r}/${n.id}`),{success:!0,message:"Record deleted successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async listRecords(t,e){try{let r=this.getRootDomain(t),d=`/dns/retrieve/${r}`;if(e)d=`/dns/retrieveByNameType/${r}/${e}`;return{success:!0,records:((await this.request(d)).records||[]).map((c)=>({id:c.id,name:c.name||r,type:c.type,content:c.content,ttl:Number.parseInt(c.ttl,10),priority:c.prio?Number.parseInt(c.prio,10):void 0}))}}catch(r){return{success:!1,records:[],message:r instanceof Error?r.message:"Unknown error"}}}async canManageDomain(t){try{let e=this.getRootDomain(t);return await this.request(`/dns/retrieve/${e}`),!0}catch{return!1}}async listDomains(){try{return((await this.request("/domain/listAll")).domains||[]).map((e)=>e.domain)}catch{return[]}}async getNameServers(t){try{let e=this.getRootDomain(t);return(await this.request(`/dns/getNS/${e}`)).ns||[]}catch{return[]}}async updateNameServers(t,e){try{let r=this.getRootDomain(t);return await this.request(`/dns/updateNS/${r}`,{ns:e}),!0}catch{return!1}}}class dh{name="godaddy";apiKey;apiSecret;baseUrl;constructor(t,e,r="production"){this.apiKey=t,this.apiSecret=e,this.baseUrl=r==="ote"?"https://api.ote-godaddy.com":"https://api.godaddy.com"}async request(t,e,r){let d=`${this.baseUrl}${e}`,E={Authorization:`sso-key ${this.apiKey}:${this.apiSecret}`,"Content-Type":"application/json",Accept:"application/json"},n={method:t,headers:E};if(r)n.body=JSON.stringify(r);let c=await fetch(d,n);if(c.status===204)return{};if(c.ok){let i=await c.text();if(i)return JSON.parse(i);return{}}let _=`GoDaddy API error: ${c.status} ${c.statusText}`;try{let i=await c.json();if(i.message)_=`GoDaddy API error: ${i.message}`;if(i.fields)_+=` - Fields: ${JSON.stringify(i.fields)}`}catch{}throw Error(_)}getSubdomain(t,e){let r=t.replace(/\.$/,""),d=e.replace(/\.$/,"");if(r===d)return"@";if(r.endsWith(`.${d}`))return r.slice(0,-(d.length+1));return r}getRootDomain(t){let e=t.replace(/\.$/,"").split(".");if(e.length>=2)return e.slice(-2).join(".");return t}toGoDaddyRecord(t,e){let r=this.getRootDomain(e),d=this.getSubdomain(t.name,r),E={type:t.type,name:d,data:t.content,ttl:t.ttl||600};if(t.type==="MX"&&t.priority!==void 0)E.priority=t.priority;return E}fromGoDaddyRecord(t,e){let r=this.getRootDomain(e),d=t.name;if(d==="@")d=r;else if(!d.endsWith(r))d=`${d}.${r}`;return{name:d,type:t.type,content:t.data,ttl:t.ttl,priority:t.priority}}async createRecord(t,e){try{let r=this.getRootDomain(t),d=this.toGoDaddyRecord(e,t);return await this.request("PATCH",`/v1/domains/${r}/records`,[d]),{success:!0,message:"Record created successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async upsertRecord(t,e){try{let r=this.getRootDomain(t),d=this.toGoDaddyRecord(e,t);return await this.request("PUT",`/v1/domains/${r}/records/${e.type}/${d.name}`,[d]),{success:!0,message:"Record upserted successfully"}}catch(r){return this.createRecord(t,e)}}async deleteRecord(t,e){try{let r=this.getRootDomain(t),d=this.getSubdomain(e.name,r),E=await this.request("GET",`/v1/domains/${r}/records/${e.type}/${d}`),n=E.filter((c)=>c.data!==e.content);if(n.length===E.length)return{success:!1,message:"Record not found"};if(n.length===0)try{await this.request("DELETE",`/v1/domains/${r}/records/${e.type}/${d}`)}catch{}else await this.request("PUT",`/v1/domains/${r}/records/${e.type}/${d}`,n);return{success:!0,message:"Record deleted successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async listRecords(t,e){try{let r=this.getRootDomain(t),d=`/v1/domains/${r}/records`;if(e)d=`/v1/domains/${r}/records/${e}`;return{success:!0,records:(await this.request("GET",d)).map((n)=>this.fromGoDaddyRecord(n,t))}}catch(r){return{success:!1,records:[],message:r instanceof Error?r.message:"Unknown error"}}}async canManageDomain(t){try{let e=this.getRootDomain(t);return await this.request("GET",`/v1/domains/${e}`),!0}catch{return!1}}async listDomains(){try{return(await this.request("GET","/v1/domains")).map((e)=>e.domain)}catch{return[]}}async getDomainDetails(t){try{let e=this.getRootDomain(t),r=await this.request("GET",`/v1/domains/${e}`);return{domain:r.domain,status:r.status,nameServers:r.nameServers,expires:r.expires}}catch{return null}}async updateNameServers(t,e){try{let r=this.getRootDomain(t);return await this.request("PUT",`/v1/domains/${r}/records/NS`,e.map((d)=>({type:"NS",name:"@",data:d,ttl:3600}))),!0}catch{return!1}}async checkDomainAvailability(t){try{let e=await this.request("GET",`/v1/domains/available?domain=${encodeURIComponent(t)}`);return{available:e.available,price:e.price,currency:e.currency}}catch{return{available:!1}}}}class Eh{name="cloudflare";apiToken;zoneCache=new Map;constructor(t){this.apiToken=t}async request(t,e,r){let d=`https://api.cloudflare.com/client/v4${e}`,E={Authorization:`Bearer ${this.apiToken}`,"Content-Type":"application/json"},n={method:t,headers:E};if(r)n.body=JSON.stringify(r);let _=await(await fetch(d,n)).json();if(!_.success){let i=_.errors.map((T)=>T.message).join(", ");throw Error(`Cloudflare API error: ${i}`)}return _}getRootDomain(t){let e=t.replace(/\.$/,"").split(".");if(e.length>=2)return e.slice(-2).join(".");return t}async getZoneId(t){let e=this.getRootDomain(t),r=this.zoneCache.get(e);if(r)return r;let d=await this.request("GET",`/zones?name=${encodeURIComponent(e)}`);if(!d.result||d.result.length===0)throw Error(`Zone not found for domain: ${e}`);let E=d.result[0].id;return this.zoneCache.set(e,E),E}getFullRecordName(t,e){let r=this.getRootDomain(e),d=t.replace(/\.$/,"");if(!d||d===r||d==="@")return r;if(d.endsWith(`.${r}`))return d;return`${d}.${r}`}toCloudflareRecord(t,e){let r={type:t.type,name:this.getFullRecordName(t.name,e),content:t.content||t.value||"",ttl:t.ttl||1};if(t.type==="MX"&&t.priority!==void 0)r.priority=t.priority;if(t.type==="SRV"){if(t.priority!==void 0)r.priority=t.priority}return r}fromCloudflareRecord(t){return{id:t.id,name:t.name,type:t.type,content:t.content,ttl:t.ttl,priority:t.priority}}async createRecord(t,e){try{let r=await this.getZoneId(t),d=this.toCloudflareRecord(e,t);return{success:!0,id:(await this.request("POST",`/zones/${r}/dns_records`,d)).result.id,message:"Record created successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async upsertRecord(t,e){try{let r=await this.getZoneId(t),d=this.getFullRecordName(e.name,t),E=await this.request("GET",`/zones/${r}/dns_records?type=${e.type}&name=${encodeURIComponent(d)}`),n=this.toCloudflareRecord(e,t);if(E.result&&E.result.length>0){let _=E.result[0].id;return{success:!0,id:(await this.request("PUT",`/zones/${r}/dns_records/${_}`,n)).result.id,message:"Record updated successfully"}}return{success:!0,id:(await this.request("POST",`/zones/${r}/dns_records`,n)).result.id,message:"Record created successfully"}}catch(r){return this.createRecord(t,e)}}async deleteRecord(t,e){try{let r=await this.getZoneId(t),d=this.getFullRecordName(e.name,t),E=await this.request("GET",`/zones/${r}/dns_records?type=${e.type}&name=${encodeURIComponent(d)}`);if(!E.result||E.result.length===0)return{success:!1,message:"Record not found"};let n=E.result.find((c)=>c.content===e.content);if(!n)return{success:!1,message:"Record with matching content not found"};return await this.request("DELETE",`/zones/${r}/dns_records/${n.id}`),{success:!0,message:"Record deleted successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async listRecords(t,e){try{let d=`/zones/${await this.getZoneId(t)}/dns_records?per_page=100`;if(e)d+=`&type=${e}`;let E=[],n=1,c=!0;while(c){let _=await this.request("GET",`${d}&page=${n}`);if(E.push(..._.result||[]),_.result_info)c=n<_.result_info.total_pages,n++;else c=!1}return{success:!0,records:E.map((_)=>this.fromCloudflareRecord(_))}}catch(r){return{success:!1,records:[],message:r instanceof Error?r.message:"Unknown error"}}}async canManageDomain(t){try{return await this.getZoneId(t),!0}catch{return!1}}async listDomains(){try{let t=[],e=1,r=!0;while(r){let d=await this.request("GET",`/zones?per_page=50&page=${e}`);if(t.push(...d.result||[]),d.result_info)r=e<d.result_info.total_pages,e++;else r=!1}return t.map((d)=>d.name)}catch{return[]}}async getZoneDetails(t){try{let e=await this.getZoneId(t),r=await this.request("GET",`/zones/${e}`);return{id:r.result.id,name:r.result.name,status:r.result.status,nameServers:r.result.name_servers,paused:r.result.paused}}catch{return null}}async purgeCache(t,e){try{let r=await this.getZoneId(t),d={};if(e?.purgeEverything)d.purge_everything=!0;else{if(e?.files)d.files=e.files;if(e?.tags)d.tags=e.tags;if(e?.hosts)d.hosts=e.hosts}if(Object.keys(d).length===0)d.purge_everything=!0;return await this.request("POST",`/zones/${r}/purge_cache`,d),!0}catch{return!1}}async getRecordProxyStatus(t,e){try{let r=await this.getZoneId(t),d=this.getFullRecordName(e.name,t),E=await this.request("GET",`/zones/${r}/dns_records?type=${e.type}&name=${encodeURIComponent(d)}`);if(E.result&&E.result.length>0)return E.result.find((c)=>c.content===e.content)?.proxied??null;return null}catch{return null}}async setRecordProxyStatus(t,e,r){try{let d=await this.getZoneId(t),E=this.getFullRecordName(e.name,t),n=await this.request("GET",`/zones/${d}/dns_records?type=${e.type}&name=${encodeURIComponent(E)}`);if(!n.result||n.result.length===0)return!1;let c=n.result.find((_)=>_.content===e.content);if(!c)return!1;return await this.request("PATCH",`/zones/${d}/dns_records/${c.id}`,{proxied:r}),!0}catch{return!1}}}i_();class nh{name="route53";client;hostedZoneCache=new Map;providedHostedZoneId;constructor(t="us-east-1",e){this.client=new Kd(t),this.providedHostedZoneId=e}getRootDomain(t){let e=t.replace(/\.$/,"").split(".");if(e.length>=2)return e.slice(-2).join(".");return t}async getHostedZoneId(t){if(this.providedHostedZoneId)return this.providedHostedZoneId;let e=this.getRootDomain(t),r=this.hostedZoneCache.get(e);if(r)return r;let d=await this.client.findHostedZoneForDomain(t);if(d){let E=d.Id.replace("/hostedzone/","");return this.hostedZoneCache.set(e,E),E}return null}normalizeName(t,e){let r=t.replace(/\.$/,""),d=e.replace(/\.$/,"");if(!d||d==="@")return`${r}.`;if(d===r||d.endsWith(`.${r}`))return`${d}.`;return`${d}.${r}.`}async createRecord(t,e){try{let r=await this.getHostedZoneId(t);if(!r)return{success:!1,message:`No hosted zone found for domain: ${t}`};let d=this.normalizeName(t,e.name),E=e.content;if(e.type==="TXT"&&!E.startsWith('"'))E=`"${E}"`;if(e.type==="MX"&&e.priority!==void 0)E=`${e.priority} ${E}`;return{success:!0,id:(await this.client.changeResourceRecordSets({HostedZoneId:r,ChangeBatch:{Comment:"Created by ts-cloud DNS provider",Changes:[{Action:"CREATE",ResourceRecordSet:{Name:d,Type:e.type,TTL:e.ttl||300,ResourceRecords:[{Value:E}]}}]}})).ChangeInfo?.Id,message:"Record created successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async upsertRecord(t,e){try{let r=await this.getHostedZoneId(t);if(!r)return{success:!1,message:`No hosted zone found for domain: ${t}`};let d=this.normalizeName(t,e.name),E=e.content;if(e.type==="TXT"&&!E.startsWith('"'))E=`"${E}"`;if(e.type==="MX"&&e.priority!==void 0)E=`${e.priority} ${E}`;return{success:!0,id:(await this.client.changeResourceRecordSets({HostedZoneId:r,ChangeBatch:{Comment:"Upserted by ts-cloud DNS provider",Changes:[{Action:"UPSERT",ResourceRecordSet:{Name:d,Type:e.type,TTL:e.ttl||300,ResourceRecords:[{Value:E}]}}]}})).ChangeInfo?.Id,message:"Record upserted successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async deleteRecord(t,e){try{let r=await this.getHostedZoneId(t);if(!r)return{success:!1,message:`No hosted zone found for domain: ${t}`};let d=this.normalizeName(t,e.name),E=e.content;if(e.type==="TXT"&&!E.startsWith('"'))E=`"${E}"`;if(e.type==="MX"&&e.priority!==void 0)E=`${e.priority} ${E}`;return await this.client.changeResourceRecordSets({HostedZoneId:r,ChangeBatch:{Comment:"Deleted by ts-cloud DNS provider",Changes:[{Action:"DELETE",ResourceRecordSet:{Name:d,Type:e.type,TTL:e.ttl||300,ResourceRecords:[{Value:E}]}}]}}),{success:!0,message:"Record deleted successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async listRecords(t,e){try{let r=await this.getHostedZoneId(t);if(!r)return{success:!1,records:[],message:`No hosted zone found for domain: ${t}`};let d=await this.client.listResourceRecordSets({HostedZoneId:r,StartRecordType:e}),E=[];for(let n of d.ResourceRecordSets){if(e&&n.Type!==e)continue;if(n.AliasTarget)continue;for(let c of n.ResourceRecords||[]){let _=c.Value,i;if(n.Type==="MX"){let T=_.split(" ");if(T.length>=2)i=Number.parseInt(T[0],10),_=T.slice(1).join(" ")}if(n.Type==="TXT"&&_.startsWith('"')&&_.endsWith('"'))_=_.slice(1,-1);E.push({name:n.Name.replace(/\.$/,""),type:n.Type,content:_,ttl:n.TTL,priority:i})}}return{success:!0,records:E}}catch(r){return{success:!1,records:[],message:r instanceof Error?r.message:"Unknown error"}}}async canManageDomain(t){return await this.getHostedZoneId(t)!==null}async listDomains(){try{return(await this.client.listHostedZones()).HostedZones.map((e)=>e.Name.replace(/\.$/,""))}catch{return[]}}getRoute53Client(){return this.client}async createAliasRecord(t){try{let e=await this.getHostedZoneId(t.domain);if(!e)return{success:!1,message:`No hosted zone found for domain: ${t.domain}`};return{success:!0,id:(await this.client.createAliasRecord({HostedZoneId:e,Name:this.normalizeName(t.domain,t.name),TargetHostedZoneId:t.targetHostedZoneId,TargetDNSName:t.targetDnsName,EvaluateTargetHealth:t.evaluateTargetHealth,Type:t.type})).ChangeInfo?.Id,message:"Alias record created successfully"}}catch(e){return{success:!1,message:e instanceof Error?e.message:"Unknown error"}}}async createCloudFrontAlias(t){return this.createAliasRecord({domain:t.domain,name:t.name,targetHostedZoneId:Kd.CloudFrontHostedZoneId,targetDnsName:t.cloudFrontDomainName,evaluateTargetHealth:!1})}async createAlbAlias(t){let e=Kd.ALBHostedZoneIds[t.region];if(!e)return{success:!1,message:`Unknown region for ALB: ${t.region}`};return this.createAliasRecord({domain:t.domain,name:t.name,targetHostedZoneId:e,targetDnsName:t.albDnsName,evaluateTargetHealth:!0})}}function $_(t){switch(t.provider){case"route53":return new nh(t.region,t.hostedZoneId);case"porkbun":return new dc(t.apiKey,t.secretKey);case"godaddy":return new dh(t.apiKey,t.apiSecret,t.environment);case"cloudflare":return new Eh(t.apiToken);default:throw Error(`Unknown DNS provider: ${t.provider}`)}}class ZD{providers=new Map;configs=[];addConfig(t){return this.configs.push(t),this}addRoute53(t,e){return this.configs.push({provider:"route53",region:t,hostedZoneId:e}),this}addPorkbun(t,e){return this.configs.push({provider:"porkbun",apiKey:t,secretKey:e}),this}addGoDaddy(t,e,r){return this.configs.push({provider:"godaddy",apiKey:t,apiSecret:e,environment:r}),this}addCloudflare(t){return this.configs.push({provider:"cloudflare",apiToken:t}),this}loadFromEnv(){if(process.env.AWS_ACCESS_KEY_ID||process.env.AWS_REGION)this.addRoute53(process.env.AWS_REGION);let t=process.env.PORKBUN_API_KEY,e=process.env.PORKBUN_SECRET_KEY;if(t&&e)this.addPorkbun(t,e);let r=process.env.GODADDY_API_KEY,d=process.env.GODADDY_API_SECRET;if(r&&d){let n=process.env.GODADDY_ENVIRONMENT;this.addGoDaddy(r,d,n)}let E=process.env.CLOUDFLARE_API_TOKEN;if(E)this.addCloudflare(E);return this}getProvider(t){let e=this.providers.get(t);if(e)return e;let r=this.configs.find((E)=>E.provider===t);if(!r)return null;let d=$_(r);return this.providers.set(t,d),d}async getProviderForDomain(t){for(let e of this.configs){let r=$_(e);if(await r.canManageDomain(t))return r}return null}getAllProviders(){return this.configs.map((t)=>$_(t))}}var L4=new ZD;kD();At();class y_{client;region;constructor(t="us-east-1",e){this.region=t,this.client=new dt(void 0,{profile:e})}async describeServices(t){let e={cluster:t.cluster,services:t.services};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeServices","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async listServices(t,e={}){let r={cluster:t,...e};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListServices","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(r)})}async listTasks(t,e,r={}){let d={cluster:t,...r};if(e)d.serviceName=e;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListTasks","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(d)})}async describeTasks(t,e){let r={cluster:t,tasks:e};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeTasks","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(r)})}async updateService(t){let e={cluster:t.cluster,service:t.service};if(t.forceNewDeployment!==void 0)e.forceNewDeployment=t.forceNewDeployment;if(t.desiredCount!==void 0)e.desiredCount=t.desiredCount;if(t.taskDefinition)e.taskDefinition=t.taskDefinition;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.UpdateService","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async createService(t){let e={cluster:t.cluster,serviceName:t.serviceName,taskDefinition:t.taskDefinition,desiredCount:t.desiredCount};if(t.launchType)e.launchType=t.launchType;if(t.networkConfiguration)e.networkConfiguration=t.networkConfiguration;if(t.loadBalancers)e.loadBalancers=t.loadBalancers;if(t.healthCheckGracePeriodSeconds!==void 0)e.healthCheckGracePeriodSeconds=t.healthCheckGracePeriodSeconds;if(t.deploymentConfiguration)e.deploymentConfiguration=t.deploymentConfiguration;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.CreateService","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async deleteService(t){let e={cluster:t.cluster,service:t.service};if(t.force!==void 0)e.force=t.force;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DeleteService","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async listClusters(t={}){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListClusters","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async describeClusters(t){let e={clusters:t,include:["ATTACHMENTS","CONFIGURATIONS","SETTINGS","STATISTICS","TAGS"]};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeClusters","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async stopTask(t){let e={cluster:t.cluster,task:t.task};if(t.reason)e.reason=t.reason;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.StopTask","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async runTask(t){let e={cluster:t.cluster,taskDefinition:t.taskDefinition};if(t.count!==void 0)e.count=t.count;if(t.launchType)e.launchType=t.launchType;if(t.networkConfiguration)e.networkConfiguration=t.networkConfiguration;if(t.overrides)e.overrides=t.overrides;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.RunTask","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async registerTaskDefinition(t){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.RegisterTaskDefinition","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async deregisterTaskDefinition(t){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DeregisterTaskDefinition","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({taskDefinition:t})})}async describeTaskDefinition(t){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeTaskDefinition","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({taskDefinition:t,include:["TAGS"]})})}async listTaskDefinitionFamilies(t){let e={};if(t?.familyPrefix)e.familyPrefix=t.familyPrefix;if(t?.status)e.status=t.status;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListTaskDefinitionFamilies","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async waitForServiceStable(t,e,r=40,d=15000){for(let E=0;E<r;E++){let c=(await this.describeServices({cluster:t,services:[e]})).services?.[0];if(c){let _=c.deployments?.find((i)=>i.status==="PRIMARY");if(_&&_.runningCount===_.desiredCount&&c.deployments?.length===1)return!0}await new Promise((_)=>setTimeout(_,d))}return!1}async forceNewDeployment(t,e){return this.updateService({cluster:t,service:e,forceNewDeployment:!0})}async scaleService(t,e,r){return this.updateService({cluster:t,service:e,desiredCount:r})}}At();mT();pT();At();At();class pd{client;region;constructor(t="us-east-1",e){this.region=t,this.client=new dt}async createQueue(t){let r={Action:"CreateQueue",QueueName:t.fifo&&!t.queueName.endsWith(".fifo")?`${t.queueName}.fifo`:t.queueName,Version:"2012-11-05"},d=1;if(t.visibilityTimeout!==void 0)r[`Attribute.${d}.Name`]="VisibilityTimeout",r[`Attribute.${d}.Value`]=t.visibilityTimeout.toString(),d++;if(t.messageRetentionPeriod!==void 0)r[`Attribute.${d}.Name`]="MessageRetentionPeriod",r[`Attribute.${d}.Value`]=t.messageRetentionPeriod.toString(),d++;if(t.delaySeconds!==void 0)r[`Attribute.${d}.Name`]="DelaySeconds",r[`Attribute.${d}.Value`]=t.delaySeconds.toString(),d++;if(t.maxMessageSize!==void 0)r[`Attribute.${d}.Name`]="MaximumMessageSize",r[`Attribute.${d}.Value`]=t.maxMessageSize.toString(),d++;if(t.receiveMessageWaitTime!==void 0)r[`Attribute.${d}.Name`]="ReceiveMessageWaitTimeSeconds",r[`Attribute.${d}.Value`]=t.receiveMessageWaitTime.toString(),d++;if(t.fifo){if(r[`Attribute.${d}.Name`]="FifoQueue",r[`Attribute.${d}.Value`]="true",d++,t.contentBasedDeduplication)r[`Attribute.${d}.Name`]="ContentBasedDeduplication",r[`Attribute.${d}.Value`]="true",d++}if(t.deadLetterTargetArn&&t.maxReceiveCount)r[`Attribute.${d}.Name`]="RedrivePolicy",r[`Attribute.${d}.Value`]=JSON.stringify({deadLetterTargetArn:t.deadLetterTargetArn,maxReceiveCount:t.maxReceiveCount}),d++;if(t.tags&&Object.keys(t.tags).length>0){let n=1;for(let[c,_]of Object.entries(t.tags))r[`Tag.${n}.Key`]=c,r[`Tag.${n}.Value`]=_,n++}let E=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()});return{QueueUrl:E.QueueUrl||E.CreateQueueResult?.QueueUrl}}async listQueues(t){let e={Action:"ListQueues",Version:"2012-11-05"};if(t)e.QueueNamePrefix=t;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()}),d=[];if(r.QueueUrl)d.push(r.QueueUrl);else if(r.ListQueuesResult?.QueueUrl)if(Array.isArray(r.ListQueuesResult.QueueUrl))d.push(...r.ListQueuesResult.QueueUrl);else d.push(r.ListQueuesResult.QueueUrl);return{QueueUrls:d}}async getQueueAttributes(t){let e={Action:"GetQueueAttributes",QueueUrl:t,Version:"2012-11-05","AttributeName.1":"All"},r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()});return{Attributes:r.Attributes||r.GetQueueAttributesResult?.Attributes||{}}}async getQueueUrl(t){let e={Action:"GetQueueUrl",QueueName:t,Version:"2012-11-05"},r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()});return{QueueUrl:r.QueueUrl||r.GetQueueUrlResult?.QueueUrl}}async deleteQueue(t){let e={Action:"DeleteQueue",QueueUrl:t,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()})}async purgeQueue(t){let e={Action:"PurgeQueue",QueueUrl:t,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()})}async sendMessage(t){let e={Action:"SendMessage",QueueUrl:t.queueUrl,MessageBody:t.messageBody,Version:"2012-11-05"};if(t.delaySeconds!==void 0)e.DelaySeconds=t.delaySeconds;if(t.messageGroupId)e.MessageGroupId=t.messageGroupId;if(t.messageDeduplicationId)e.MessageDeduplicationId=t.messageDeduplicationId;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()});return{MessageId:r.MessageId||r.SendMessageResult?.MessageId}}async receiveMessages(t){let e={Action:"ReceiveMessage",QueueUrl:t.queueUrl,Version:"2012-11-05"};if(t.maxMessages!==void 0)e.MaxNumberOfMessages=t.maxMessages;if(t.visibilityTimeout!==void 0)e.VisibilityTimeout=t.visibilityTimeout;if(t.waitTimeSeconds!==void 0)e.WaitTimeSeconds=t.waitTimeSeconds;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()}),d=[],E=r.Message||r.ReceiveMessageResult?.Message;if(E)if(Array.isArray(E))d.push(...E.map((n)=>({MessageId:n.MessageId,ReceiptHandle:n.ReceiptHandle,Body:n.Body})));else d.push({MessageId:E.MessageId,ReceiptHandle:E.ReceiptHandle,Body:E.Body});return{Messages:d}}async deleteMessage(t,e){let r={Action:"DeleteMessage",QueueUrl:t,ReceiptHandle:e,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()})}}At();import{deflateRawSync as za}from"zlib";function bD(t,e){let r=typeof e==="string"?Buffer.from(e,"utf-8"):e,d=za(r),E=Fa(r),n=new Date,c=(n.getHours()<<11|n.getMinutes()<<5|n.getSeconds()>>1)&65535,_=(n.getFullYear()-1980<<9|n.getMonth()+1<<5|n.getDate())&65535,i=Buffer.from(t,"utf-8"),T=Buffer.alloc(30+i.length);T.writeUInt32LE(67324752,0),T.writeUInt16LE(20,4),T.writeUInt16LE(0,6),T.writeUInt16LE(8,8),T.writeUInt16LE(c,10),T.writeUInt16LE(_,12),T.writeUInt32LE(E,14),T.writeUInt32LE(d.length,18),T.writeUInt32LE(r.length,22),T.writeUInt16LE(i.length,26),T.writeUInt16LE(0,28),i.copy(T,30);let h=Buffer.alloc(46+i.length);h.writeUInt32LE(33639248,0),h.writeUInt16LE(20,4),h.writeUInt16LE(20,6),h.writeUInt16LE(0,8),h.writeUInt16LE(8,10),h.writeUInt16LE(c,12),h.writeUInt16LE(_,14),h.writeUInt32LE(E,16),h.writeUInt32LE(d.length,20),h.writeUInt32LE(r.length,24),h.writeUInt16LE(i.length,28),h.writeUInt16LE(0,30),h.writeUInt16LE(0,32),h.writeUInt16LE(0,34),h.writeUInt16LE(0,36),h.writeUInt32LE(0,38),h.writeUInt32LE(0,42),i.copy(h,46);let R=T.length+d.length,N=h.length,A=Buffer.alloc(22);return A.writeUInt32LE(101010256,0),A.writeUInt16LE(0,4),A.writeUInt16LE(0,6),A.writeUInt16LE(1,8),A.writeUInt16LE(1,10),A.writeUInt32LE(N,12),A.writeUInt32LE(R,16),A.writeUInt16LE(0,20),Buffer.concat([T,d,h,A])}function Fa(t){let e=[];for(let d=0;d<256;d++){let E=d;for(let n=0;n<8;n++)E=E&1?3988292384^E>>>1:E>>>1;e[d]=E}let r=4294967295;for(let d=0;d<t.length;d++)r=e[(r^t[d])&255]^r>>>8;return(r^4294967295)>>>0}class Er{client;region;constructor(t="us-east-1",e){this.region=t,this.client=new dt(void 0,{profile:e})}async createFunction(t){return await this.client.request({service:"lambda",region:this.region,method:"POST",path:"/2015-03-31/functions",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async getFunction(t){return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2015-03-31/functions/${encodeURIComponent(t)}`,headers:{"Content-Type":"application/json"}})}async updateFunctionCode(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(e)}/code`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async updateFunctionCodeInline(t,e,r="index.js"){let d=bD(r,e);return this.updateFunctionCode({FunctionName:t,ZipFile:d.toString("base64")})}async updateFunctionConfiguration(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(e)}/configuration`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async deleteFunction(t){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2015-03-31/functions/${encodeURIComponent(t)}`,headers:{"Content-Type":"application/json"}})}async invoke(t){let{FunctionName:e,InvocationType:r="RequestResponse",Payload:d,LogType:E}=t,n={"Content-Type":"application/json","X-Amz-Invocation-Type":r};if(E)n["X-Amz-Log-Type"]=E;let c=d?typeof d==="string"?d:JSON.stringify(d):void 0,_=await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(e)}/invocations`,headers:n,body:c,returnHeaders:!0});return{StatusCode:_.statusCode||200,FunctionError:_.headers?.["x-amz-function-error"],LogResult:_.headers?.["x-amz-log-result"],Payload:typeof _.body==="string"?_.body:JSON.stringify(_.body),ExecutedVersion:_.headers?.["x-amz-executed-version"]}}async listFunctions(t){let e={};if(t?.MaxItems)e.MaxItems=String(t.MaxItems);if(t?.Marker)e.Marker=t.Marker;if(t?.FunctionVersion)e.FunctionVersion=t.FunctionVersion;return await this.client.request({service:"lambda",region:this.region,method:"GET",path:"/2015-03-31/functions",queryParams:Object.keys(e).length>0?e:void 0,headers:{"Content-Type":"application/json"}})}async addPermission(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(e)}/policy`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async removePermission(t,e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2015-03-31/functions/${encodeURIComponent(t)}/policy/${encodeURIComponent(e)}`,headers:{"Content-Type":"application/json"}})}async publishVersion(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(e)}/versions`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async createAlias(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(e)}/aliases`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async updateAlias(t){let{FunctionName:e,Name:r,...d}=t;return this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(e)}/aliases/${encodeURIComponent(r)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})}async getAlias(t,e){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2015-03-31/functions/${encodeURIComponent(t)}/aliases/${encodeURIComponent(e)}`})}catch(r){if(/ResourceNotFound/i.test(String(r?.message)))return null;throw r}}async getProvisionedConcurrencyConfig(t,e){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2019-09-30/functions/${encodeURIComponent(t)}/provisioned-concurrency`,queryParams:{Qualifier:e}})}catch(r){if(/ProvisionedConcurrencyConfigNotFound|ResourceNotFound/i.test(String(r?.message)))return null;throw r}}async putProvisionedConcurrencyConfig(t){let{FunctionName:e,Qualifier:r,ProvisionedConcurrentExecutions:d}=t;return this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2019-09-30/functions/${encodeURIComponent(e)}/provisioned-concurrency`,queryParams:{Qualifier:r},headers:{"Content-Type":"application/json"},body:JSON.stringify({ProvisionedConcurrentExecutions:d})})}async deleteProvisionedConcurrencyConfig(t,e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2019-09-30/functions/${encodeURIComponent(t)}/provisioned-concurrency`,queryParams:{Qualifier:e}})}async waitForFunctionActive(t,e=60){let r=Date.now(),d=e*1000;while(Date.now()-r<d)try{let E=await this.getFunction(t),n=E.Configuration?.State;if(n==="Active")return E.Configuration;if(n==="Failed")throw Error(`Function ${t} failed: ${E.Configuration?.StateReason}`);await new Promise((c)=>setTimeout(c,2000))}catch(E){if(E.code==="ResourceNotFoundException"){await new Promise((n)=>setTimeout(n,2000));continue}throw E}throw Error(`Timeout waiting for function ${t} to become active`)}async functionExists(t){try{return await this.getFunction(t),!0}catch(e){if(e.code==="ResourceNotFoundException"||e.statusCode===404)return!1;throw e}}async createFunctionUrl(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2021-10-31/functions/${encodeURIComponent(e)}/url`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async getFunctionUrl(t){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2021-10-31/functions/${encodeURIComponent(t)}/url`,headers:{"Content-Type":"application/json"}})}catch(e){if(e.statusCode===404)return null;throw e}}async deleteFunctionUrl(t){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2021-10-31/functions/${encodeURIComponent(t)}/url`,headers:{"Content-Type":"application/json"}})}async createFunctionWithCode(t){let{Code:e,Filename:r="index.js",...d}=t,E=bD(r,e);return this.createFunction({...d,Code:{ZipFile:E.toString("base64")}})}async addFunctionUrlPermission(t){return this.addPermission({FunctionName:t,StatementId:"FunctionURLAllowPublicAccess",Action:"lambda:InvokeFunctionUrl",Principal:"*",FunctionUrlAuthType:"NONE"})}async publishLayerVersion(t){let{LayerName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2018-10-31/layers/${encodeURIComponent(e)}/versions`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async listLayerVersions(t,e){let r={};if(e?.CompatibleRuntime)r.CompatibleRuntime=e.CompatibleRuntime;if(e?.CompatibleArchitecture)r.CompatibleArchitecture=e.CompatibleArchitecture;if(e?.MaxItems)r.MaxItems=String(e.MaxItems);if(e?.Marker)r.Marker=e.Marker;return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2018-10-31/layers/${encodeURIComponent(t)}/versions`,queryParams:Object.keys(r).length>0?r:void 0,headers:{"Content-Type":"application/json"}})}async getLayerVersion(t,e){return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2018-10-31/layers/${encodeURIComponent(t)}/versions/${e}`,headers:{"Content-Type":"application/json"}})}async addLayerVersionPermission(t){let{LayerName:e,VersionNumber:r,...d}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2018-10-31/layers/${encodeURIComponent(e)}/versions/${r}/policy`,headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})}async deleteLayerVersion(t,e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2018-10-31/layers/${encodeURIComponent(t)}/versions/${e}`,headers:{"Content-Type":"application/json"}})}}At();class X_{client;region;constructor(t="us-east-1",e){this.region=t,this.client=new dt(void 0,{profile:e})}async createLogGroup(t,e){await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.CreateLogGroup","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({logGroupName:t,...e?{tags:e}:{}})})}async putRetentionPolicy(t,e){if(![1,3,5,7,14,30,60,90,120,150,180,365,400,545,731,1096,1827,2192,2557,2922,3288,3653].includes(e))throw Error("Unsupported CloudWatch Logs retention period");await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.PutRetentionPolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({logGroupName:t,retentionInDays:e})})}async describeLogStreams(t){let e={logGroupName:t.logGroupName};if(t.logStreamNamePrefix)e.logStreamNamePrefix=t.logStreamNamePrefix;if(t.orderBy)e.orderBy=t.orderBy;if(t.descending!==void 0)e.descending=t.descending;if(t.limit)e.limit=t.limit;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.DescribeLogStreams","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async getLogEvents(t){let e={logGroupName:t.logGroupName,logStreamName:t.logStreamName};if(t.startTime)e.startTime=t.startTime;if(t.endTime)e.endTime=t.endTime;if(t.limit)e.limit=t.limit;if(t.startFromHead!==void 0)e.startFromHead=t.startFromHead;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.GetLogEvents","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async describeLogGroups(t){let e={};if(t?.logGroupNamePrefix)e.logGroupNamePrefix=t.logGroupNamePrefix;if(t?.limit)e.limit=t.limit;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.DescribeLogGroups","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async deleteLogGroup(t){await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.DeleteLogGroup","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({logGroupName:t})})}async filterLogEvents(t){let e={logGroupName:t.logGroupName};if(t.logStreamNames)e.logStreamNames=t.logStreamNames;if(t.startTime)e.startTime=t.startTime;if(t.endTime)e.endTime=t.endTime;if(t.filterPattern)e.filterPattern=t.filterPattern;if(t.limit)e.limit=t.limit;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.FilterLogEvents","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}}At();At();Bn();At();At();At();At();At();At();At();At();At();At();At();At();class GA{client;region;constructor(t="us-east-1"){this.region=t,this.client=new dt}async request(t,e){return this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AWSEvents.${t}`},body:JSON.stringify(e)})}async putRule(t){return this.request("PutRule",t)}async deleteRule(t){return this.request("DeleteRule",t)}async describeRule(t){return this.request("DescribeRule",t)}async listRules(t){return this.request("ListRules",t||{})}async listEventBuses(t){return this.request("ListEventBuses",t||{})}async enableRule(t){return this.request("EnableRule",t)}async disableRule(t){return this.request("DisableRule",t)}async putTargets(t){return this.request("PutTargets",t)}async removeTargets(t){return this.request("RemoveTargets",t)}async listTargetsByRule(t){return this.request("ListTargetsByRule",t)}async putEvents(t){return this.request("PutEvents",t)}async createSchedule(t){return this.client.request({service:"scheduler",region:this.region,method:"POST",path:`/schedules/${t.Name}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}}At();sT();At();er();er();mT();er();er();At();At();er();At();class VA{client;region;constructor(t="us-east-1"){this.region=t,this.client=new dt}async describeFileSystems(t){let e=[];if(t?.FileSystemId)e.push(`FileSystemId=${encodeURIComponent(t.FileSystemId)}`);if(t?.CreationToken)e.push(`CreationToken=${encodeURIComponent(t.CreationToken)}`);let r=`/2015-02-01/file-systems${e.length>0?`?${e.join("&")}`:""}`;return{FileSystems:((await this.client.request({service:"elasticfilesystem",region:this.region,method:"GET",path:r,headers:{"Content-Type":"application/json"}})).FileSystems||[]).map((E)=>({FileSystemId:E.FileSystemId,Name:E.Name,CreationTime:E.CreationTime,LifeCycleState:E.LifeCycleState,NumberOfMountTargets:E.NumberOfMountTargets,SizeInBytes:E.SizeInBytes?{Value:E.SizeInBytes.Value,Timestamp:E.SizeInBytes.Timestamp}:void 0,PerformanceMode:E.PerformanceMode,Encrypted:E.Encrypted,ThroughputMode:E.ThroughputMode,Tags:E.Tags}))}}}await Wt();await Wt();import{readFileSync as LU}from"node:fs";import{join as uj}from"node:path";function tE(t){if(!t)return;let e=t.trim();if(!e)return;if(!e.includes("/"))return e;let[r]=e.split("/");if(!r.endsWith("::"))return r||void 0;return`${r}1`}er();await Wt();var xD={php:"php.net",nginx:"nginx.org",composer:"getcomposer.org",mysql:"mysql.com",mariadb:"mariadb.com/server",postgres:"postgresql.org",vitess:"vitess.io",etcd:"etcd.io",redis:"redis.io",memcached:"memcached.org",meilisearch:"meilisearch.com",git:"git-scm.com",certbot:"certbot.eff.org",bun:"bun.sh",node:"nodejs.org",deno:"deno.land"};var ve="/opt/pantry";function ch(t){return`'${t.split("'").join("'\\''")}'`}function Ec(t={}){return["export DEBIAN_FRONTEND=noninteractive","export PANTRY_SERVICE_SCOPE=system","export PANTRY_INSTALL_DIR=/usr/local/bin",t.version?`export PANTRY_VERSION=${ch(t.version)}`:'export PANTRY_VERSION="${PANTRY_VERSION:-latest}"',"command -v curl >/dev/null 2>&1 || (apt-get update -y && apt-get install -y curl ca-certificates)","command -v unzip >/dev/null 2>&1 || (apt-get update -y && apt-get install -y unzip)",'command -v pantry >/dev/null 2>&1 || { OS=$(uname -s | tr \'[:upper:]\' \'[:lower:]\'); ARCH=$(uname -m); case "$ARCH" in x86_64|amd64) ARCH=x64 ;; arm64|aarch64) ARCH=arm64 ;; esac; ZIP="pantry-${OS}-${ARCH}.zip"; if [ "${PANTRY_VERSION:-latest}" = latest ]; then REL=\'latest/download\'; else REL="download/v${PANTRY_VERSION}"; fi; TMP=$(mktemp -d); curl -fsSL -o "${TMP}/${ZIP}" "https://github.com/home-lang/pantry/releases/${REL}/${ZIP}"; unzip -o "${TMP}/${ZIP}" -d /usr/local/bin; chmod +x /usr/local/bin/pantry; rm -rf "${TMP}"; }','export PATH="/usr/local/bin:$PATH"',"mkdir -p /opt/pantry"]}function nc(){return'eval "$(cd /opt/pantry && pantry env 2>/dev/null)" || true'}function eE(t){if(t.length===0)return[];return[`(cd /opt/pantry && pantry install ${[...new Set(t)].map(ch).join(" ")})`]}function _h(t){return[...new Set(t)].flatMap((e)=>[`(cd /opt/pantry && pantry start ${ch(e)})`,`(cd /opt/pantry && pantry enable ${ch(e)})`])}var Dr=`${ve}/pantry/.bin`,kA=15306,KA=15991,ih=15999,qD=16101,hh=2379,ld="/var/lib/vitess",bA=100;function Ja(t){return t===!0||typeof t==="object"&&t!==null}function Ha(t){return typeof t==="object"&&t!==null?t:{}}function ge(t){return`'${String(t).split("'").join("'\\''")}'`}function Wa(t){let r=[t.version?`vitess.io@${t.version}`:"vitess.io"];if(t.mode!=="combo"&&!t.etcdEndpoint)r.push("etcd.io");return r.push("mysql.com@8.0.43"),r}var lr="vitess",va=`${Dr}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin`,pD="/usr/local/lib/vitess",xA=new Map;function ZA(t){return`${pD}/${t}.sh`}function cc(t,e){return xA.set(t,Qa(e)),`/bin/sh ${ZA(t)}`}function sD(){let t=[`mkdir -p ${pD}`];for(let[e,r]of xA)t.push(`cat > ${ZA(e)} <<'TS_CLOUD_VITESS_LAUNCHER_EOF'`,r,"TS_CLOUD_VITESS_LAUNCHER_EOF",`chmod 0755 ${ZA(e)}`);return t}function Qa(t){return["#!/bin/sh","set -e",`cd ${ve}`,`PANTRY_ENV="$(pantry env 2>/dev/null | grep -E '^(export [A-Za-z_]|[A-Za-z_][A-Za-z0-9_]*=)' || true)"`,'if [ -n "$PANTRY_ENV" ]; then eval "$PANTRY_ENV"; fi',`VT_MYSQL_ROOT="$(dirname "$(dirname "$(readlink -f ${Dr}/mysqld 2>/dev/null)")")"`,`VTROOT="$(dirname "$(dirname "$(readlink -f ${Dr}/mysqlctld 2>/dev/null)")")"`,"export VT_MYSQL_ROOT VTROOT",'LD_LIBRARY_PATH="$VT_MYSQL_ROOT/lib:$VTROOT/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"',"export LD_LIBRARY_PATH",`exec ${t.join(" ")}`].join(`
5763
+ </DistributionConfig>`,a=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/distribution",body:P,headers:{"Content-Type":"application/xml"},returnHeaders:!0}),j=a.body?.Distribution||a.Distribution||a.body||a;return{Id:j.Id,ARN:j.ARN,DomainName:j.DomainName,Status:j.Status,ETag:a.headers?.etag||a.ETag||""}}async createMediaDistributionForS3(t){return this.createDistributionForS3({...t,defaultRootObject:"",mediaDelivery:!0,comment:t.comment??`Media distribution for ${t.bucketName}`})}async listPublicKeys(){let t=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/public-key"});return this.collectionItems(t.PublicKeyList??t,"PublicKeySummary").map((r)=>({Id:String(r.Id),Name:String(r.Name),Comment:r.Comment?String(r.Comment):void 0}))}async createPublicKey(t){if(!/^[A-Za-z0-9_-]{1,128}$/.test(t.name))throw TypeError("CloudFront public key name is invalid");if(!t.encodedKey.includes("BEGIN PUBLIC KEY"))throw TypeError("CloudFront public key must be PEM encoded");let e=(E)=>E.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;"),r=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/public-key",headers:{"Content-Type":"application/xml"},body:`<PublicKeyConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/"><CallerReference>${e(t.callerReference??`${Date.now()}-${t.name}`)}</CallerReference><Name>${e(t.name)}</Name><EncodedKey>${e(t.encodedKey)}</EncodedKey><Comment>${e(t.comment??"")}</Comment></PublicKeyConfig>`}),d=r.PublicKey??r;return{Id:String(d.Id),Name:String(d.PublicKeyConfig?.Name??t.name),EncodedKey:String(d.PublicKeyConfig?.EncodedKey??t.encodedKey),Comment:String(d.PublicKeyConfig?.Comment??t.comment??"")}}async listKeyGroups(){let t=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:"/2020-05-31/key-group"});return this.collectionItems(t.KeyGroupList??t,"KeyGroupSummary").map((r)=>({Id:String(r.KeyGroup?.Id??r.Id),Name:String(r.KeyGroup?.KeyGroupConfig?.Name??r.KeyGroupConfig?.Name??r.Name),Items:this.collectionItems(r.KeyGroup?.KeyGroupConfig?.Items??r.KeyGroupConfig?.Items??r.Items,"Item").map(String),Comment:r.KeyGroup?.KeyGroupConfig?.Comment??r.KeyGroupConfig?.Comment??r.Comment}))}async createKeyGroup(t){if(!/^[A-Za-z0-9_-]{1,128}$/.test(t.name))throw TypeError("CloudFront key group name is invalid");let e=[...new Set(t.publicKeyIds)];if(e.length===0)throw TypeError("CloudFront key group requires at least one public key");let r=(c)=>c.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;"),d=e.map((c)=>`<Item>${r(c)}</Item>`).join(""),E=await this.client.request({service:"cloudfront",region:"us-east-1",method:"POST",path:"/2020-05-31/key-group",headers:{"Content-Type":"application/xml"},body:`<KeyGroupConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/"><Name>${r(t.name)}</Name><Items>${d}</Items><Comment>${r(t.comment??"")}</Comment></KeyGroupConfig>`}),n=E.KeyGroup??E;return{Id:String(n.Id),Name:String(n.KeyGroupConfig?.Name??t.name),Items:e,Comment:String(n.KeyGroupConfig?.Comment??t.comment??"")}}static getS3BucketPolicyForCloudFront(t,e){return{Version:"2012-10-17",Statement:[{Sid:"AllowCloudFrontServicePrincipal",Effect:"Allow",Principal:{Service:"cloudfront.amazonaws.com"},Action:"s3:GetObject",Resource:`arn:aws:s3:::${t}/*`,Condition:{StringEquals:{"AWS:SourceArn":e}}}]}}async waitForDistributionDeployed(t,e=60){for(let r=0;r<e;r++){if((await this.getDistribution(t)).Status==="Deployed")return!0;await new Promise((E)=>setTimeout(E,30000))}return!1}async disableDistribution(t){let e=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${t}/config`,returnHeaders:!0}),r=e.headers?.etag||e.headers?.ETag||"",d=e.body?.DistributionConfig||(e.body?.Enabled!==void 0?e.body:void 0)||e.DistributionConfig;if(!d||d.Enabled===void 0)throw Error("Failed to get current distribution config");d.Enabled=!1;let E=this.buildDistributionConfigXml(d),n=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${t}/config`,body:E,headers:{"Content-Type":"application/xml","If-Match":r},returnHeaders:!0});return{ETag:n.headers?.etag||n.headers?.ETag||n.ETag||""}}async deleteDistribution(t,e){let r=e||"";if(!r){let d=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${t}`,returnHeaders:!0});r=d.headers?.etag||d.headers?.ETag||""}await this.client.request({service:"cloudfront",region:"us-east-1",method:"DELETE",path:`/2020-05-31/distribution/${t}`,headers:{"If-Match":r}})}async waitForDistributionDisabled(t,e=60){for(let r=0;r<e;r++){let d=await this.getDistribution(t);if(d.Status==="Deployed"&&!d.Enabled)return!0;await new Promise((E)=>setTimeout(E,30000))}return!1}async removeAlias(t,e){let r=await this.client.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${t}/config`,returnHeaders:!0}),d=r.headers?.etag||r.headers?.ETag||"",E=r.body?.DistributionConfig||(r.body?.Enabled!==void 0?r.body:void 0)||r.DistributionConfig;if(!E||E.Enabled===void 0)throw Error("Failed to get current distribution config");let n=[];if(E.Aliases?.Items){if(Array.isArray(E.Aliases.Items))n=E.Aliases.Items;else if(typeof E.Aliases.Items==="object"){let T=E.Aliases.Items.CNAME;if(typeof T==="string")n=[T];else if(Array.isArray(T))n=T}}if(n.length===0)throw Error("Distribution has no aliases to remove");let c=n.filter((T)=>T!==e);if(c.length===n.length)throw Error(`Alias ${e} not found in distribution`);if(E.Aliases.Quantity=c.length,E.Aliases.Items=c.length>0?c:void 0,c.length===0)E.ViewerCertificate={CloudFrontDefaultCertificate:!0,MinimumProtocolVersion:"TLSv1.2_2021"};let _=this.buildDistributionConfigXml(E),i=await this.client.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${t}/config`,body:_,headers:{"Content-Type":"application/xml","If-Match":d},returnHeaders:!0});return{ETag:i.headers?.etag||i.headers?.ETag||i.ETag||""}}}i_();At();At();i_();function KD(t,e=""){return t===408||t===409||t===425||t===429||t>=500||/rate limit|temporar|timed? ?out|try again/i.test(e)}async function MA(t,e){let r=e?.headers.get("retry-after"),d=r===null||r===void 0?void 0:Number(r)*1000,E=Number.isFinite(d)?Math.max(0,d):Math.min(1000*2**(t-1),30000);await new Promise((n)=>setTimeout(n,E))}class dc{name="porkbun";apiKey;secretKey;requestTimeoutMs;constructor(t,e,r=15000){this.apiKey=t,this.secretKey=e,this.requestTimeoutMs=r}async request(t,e={}){let r;for(let d=1;d<=8;d+=1){let E,n=new AbortController,c=setTimeout(()=>{n.abort(Error(`Porkbun API request timed out after ${this.requestTimeoutMs}ms`))},this.requestTimeoutMs);try{E=await fetch(`https://api.porkbun.com/api/json/v3${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apikey:this.apiKey,secretapikey:this.secretKey,...e}),signal:n.signal})}catch(i){if(r=i,d===8)throw i;await MA(d);continue}finally{clearTimeout(c)}if(!E.ok){if(r=Error(`Porkbun API error: ${E.status} ${E.statusText}`),!KD(E.status)||d===8)throw r;await MA(d,E);continue}let _=await E.json();if(_.status==="ERROR"){if(r=Error(`Porkbun API error: ${_.message||"Unknown error"}`),!KD(0,_.message)||d===8)throw r;await MA(d,E);continue}return _}throw r}getSubdomain(t,e){let r=t.replace(/\.$/,""),d=e.replace(/\.$/,"");if(r===d)return"";if(r.endsWith(`.${d}`))return r.slice(0,-(d.length+1));return r}getRootDomain(t){let e=t.replace(/\.$/,"").split(".");if(e.length>=2)return e.slice(-2).join(".");return t}static ADDRESS_TYPES=new Set(["A","AAAA"]);async clearConflictingAliases(t,e){if(!dc.ADDRESS_TYPES.has(e.type))return[];let r=this.getRootDomain(t),d=this.getSubdomain(e.name,r),E=await this.listRecords(t);if(!E.success)return[`could not list records to clear ALIAS/CNAME conflicts: ${E.message??"unknown provider error"}`];let n=[];for(let c of E.records){if(c.type!=="ALIAS"&&c.type!=="CNAME")continue;if(this.getSubdomain(c.name,r)!==d)continue;let _=await this.deleteRecord(t,c);if(!_.success)n.push(`could not remove conflicting ${c.type} on ${c.name}: ${_.message??"unknown provider error"}`)}return n}async addressRecordExists(t,e){let r=this.getRootDomain(t),d=this.getSubdomain(e.name,r),E=await this.listRecords(t);if(!E.success)return!0;return E.records.some((n)=>n.type===e.type&&this.getSubdomain(n.name,r)===d&&n.content===e.content)}async createRecord(t,e){try{let r=this.getRootDomain(t),d=this.getSubdomain(e.name,r),E={type:e.type,content:e.content,ttl:String(e.ttl||600)};if(d)E.name=d;if((e.type==="MX"||e.type==="SRV")&&e.priority!==void 0)E.prio=String(e.priority);if(e.type==="SRV"&&e.weight!==void 0&&e.port!==void 0)E.content=`${e.weight} ${e.port} ${e.content}`;let n=await this.clearConflictingAliases(t,e),c=await this.request(`/dns/create/${r}`,E);if(dc.ADDRESS_TYPES.has(e.type)&&!await this.addressRecordExists(t,e))return{success:!1,message:`Porkbun reported success but no ${e.type} record for ${e.name} exists${n.length>0?` (${n.join("; ")})`:""}. A conflicting ALIAS/CNAME on the same name silently voids the write.`};return{success:!0,id:c.id?.toString(),message:"Record created successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async upsertRecord(t,e){try{let r=this.getRootDomain(t),d=this.getSubdomain(e.name,r),E=await this.listRecords(t,e.type);if(E.success){let n=E.records.find((c)=>{return this.getSubdomain(c.name,r)===d&&c.type===e.type});if(n?.id){let c={type:e.type,content:e.content,ttl:String(e.ttl||600)};if(d)c.name=d;if((e.type==="MX"||e.type==="SRV")&&e.priority!==void 0)c.prio=String(e.priority);if(e.type==="SRV"&&e.weight!==void 0&&e.port!==void 0)c.content=`${e.weight} ${e.port} ${e.content}`;return await this.request(`/dns/edit/${r}/${n.id}`,c),{success:!0,id:n.id,message:"Record updated successfully"}}}return this.createRecord(t,e)}catch(r){return this.createRecord(t,e)}}async deleteRecord(t,e){try{let r=this.getRootDomain(t);if("id"in e&&e.id)return await this.request(`/dns/delete/${r}/${e.id}`),{success:!0,message:"Record deleted successfully"};let d=this.getSubdomain(e.name,r),E=await this.listRecords(t);if(!E.success)return{success:!1,message:"Failed to list records"};let n=E.records.find((c)=>{return this.getSubdomain(c.name,r)===d&&c.type===e.type&&c.content===e.content});if(!n?.id)return{success:!1,message:"Record not found"};return await this.request(`/dns/delete/${r}/${n.id}`),{success:!0,message:"Record deleted successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async listRecords(t,e){try{let r=this.getRootDomain(t),d=`/dns/retrieve/${r}`;if(e)d=`/dns/retrieveByNameType/${r}/${e}`;return{success:!0,records:((await this.request(d)).records||[]).map((c)=>({id:c.id,name:c.name||r,type:c.type,content:c.content,ttl:Number.parseInt(c.ttl,10),priority:c.prio?Number.parseInt(c.prio,10):void 0}))}}catch(r){return{success:!1,records:[],message:r instanceof Error?r.message:"Unknown error"}}}async canManageDomain(t){try{let e=this.getRootDomain(t);return await this.request(`/dns/retrieve/${e}`),!0}catch{return!1}}async listDomains(){try{return((await this.request("/domain/listAll")).domains||[]).map((e)=>e.domain)}catch{return[]}}async getNameServers(t){try{let e=this.getRootDomain(t);return(await this.request(`/dns/getNS/${e}`)).ns||[]}catch{return[]}}async updateNameServers(t,e){try{let r=this.getRootDomain(t);return await this.request(`/dns/updateNS/${r}`,{ns:e}),!0}catch{return!1}}}class dh{name="godaddy";apiKey;apiSecret;baseUrl;constructor(t,e,r="production"){this.apiKey=t,this.apiSecret=e,this.baseUrl=r==="ote"?"https://api.ote-godaddy.com":"https://api.godaddy.com"}async request(t,e,r){let d=`${this.baseUrl}${e}`,E={Authorization:`sso-key ${this.apiKey}:${this.apiSecret}`,"Content-Type":"application/json",Accept:"application/json"},n={method:t,headers:E};if(r)n.body=JSON.stringify(r);let c=await fetch(d,n);if(c.status===204)return{};if(c.ok){let i=await c.text();if(i)return JSON.parse(i);return{}}let _=`GoDaddy API error: ${c.status} ${c.statusText}`;try{let i=await c.json();if(i.message)_=`GoDaddy API error: ${i.message}`;if(i.fields)_+=` - Fields: ${JSON.stringify(i.fields)}`}catch{}throw Error(_)}getSubdomain(t,e){let r=t.replace(/\.$/,""),d=e.replace(/\.$/,"");if(r===d)return"@";if(r.endsWith(`.${d}`))return r.slice(0,-(d.length+1));return r}getRootDomain(t){let e=t.replace(/\.$/,"").split(".");if(e.length>=2)return e.slice(-2).join(".");return t}toGoDaddyRecord(t,e){let r=this.getRootDomain(e),d=this.getSubdomain(t.name,r),E={type:t.type,name:d,data:t.content,ttl:t.ttl||600};if(t.type==="MX"&&t.priority!==void 0)E.priority=t.priority;return E}fromGoDaddyRecord(t,e){let r=this.getRootDomain(e),d=t.name;if(d==="@")d=r;else if(!d.endsWith(r))d=`${d}.${r}`;return{name:d,type:t.type,content:t.data,ttl:t.ttl,priority:t.priority}}async createRecord(t,e){try{let r=this.getRootDomain(t),d=this.toGoDaddyRecord(e,t);return await this.request("PATCH",`/v1/domains/${r}/records`,[d]),{success:!0,message:"Record created successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async upsertRecord(t,e){try{let r=this.getRootDomain(t),d=this.toGoDaddyRecord(e,t);return await this.request("PUT",`/v1/domains/${r}/records/${e.type}/${d.name}`,[d]),{success:!0,message:"Record upserted successfully"}}catch(r){return this.createRecord(t,e)}}async deleteRecord(t,e){try{let r=this.getRootDomain(t),d=this.getSubdomain(e.name,r),E=await this.request("GET",`/v1/domains/${r}/records/${e.type}/${d}`),n=E.filter((c)=>c.data!==e.content);if(n.length===E.length)return{success:!1,message:"Record not found"};if(n.length===0)try{await this.request("DELETE",`/v1/domains/${r}/records/${e.type}/${d}`)}catch{}else await this.request("PUT",`/v1/domains/${r}/records/${e.type}/${d}`,n);return{success:!0,message:"Record deleted successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async listRecords(t,e){try{let r=this.getRootDomain(t),d=`/v1/domains/${r}/records`;if(e)d=`/v1/domains/${r}/records/${e}`;return{success:!0,records:(await this.request("GET",d)).map((n)=>this.fromGoDaddyRecord(n,t))}}catch(r){return{success:!1,records:[],message:r instanceof Error?r.message:"Unknown error"}}}async canManageDomain(t){try{let e=this.getRootDomain(t);return await this.request("GET",`/v1/domains/${e}`),!0}catch{return!1}}async listDomains(){try{return(await this.request("GET","/v1/domains")).map((e)=>e.domain)}catch{return[]}}async getDomainDetails(t){try{let e=this.getRootDomain(t),r=await this.request("GET",`/v1/domains/${e}`);return{domain:r.domain,status:r.status,nameServers:r.nameServers,expires:r.expires}}catch{return null}}async updateNameServers(t,e){try{let r=this.getRootDomain(t);return await this.request("PUT",`/v1/domains/${r}/records/NS`,e.map((d)=>({type:"NS",name:"@",data:d,ttl:3600}))),!0}catch{return!1}}async checkDomainAvailability(t){try{let e=await this.request("GET",`/v1/domains/available?domain=${encodeURIComponent(t)}`);return{available:e.available,price:e.price,currency:e.currency}}catch{return{available:!1}}}}class Eh{name="cloudflare";apiToken;zoneCache=new Map;constructor(t){this.apiToken=t}async request(t,e,r){let d=`https://api.cloudflare.com/client/v4${e}`,E={Authorization:`Bearer ${this.apiToken}`,"Content-Type":"application/json"},n={method:t,headers:E};if(r)n.body=JSON.stringify(r);let _=await(await fetch(d,n)).json();if(!_.success){let i=_.errors.map((T)=>T.message).join(", ");throw Error(`Cloudflare API error: ${i}`)}return _}getRootDomain(t){let e=t.replace(/\.$/,"").split(".");if(e.length>=2)return e.slice(-2).join(".");return t}async getZoneId(t){let e=this.getRootDomain(t),r=this.zoneCache.get(e);if(r)return r;let d=await this.request("GET",`/zones?name=${encodeURIComponent(e)}`);if(!d.result||d.result.length===0)throw Error(`Zone not found for domain: ${e}`);let E=d.result[0].id;return this.zoneCache.set(e,E),E}getFullRecordName(t,e){let r=this.getRootDomain(e),d=t.replace(/\.$/,"");if(!d||d===r||d==="@")return r;if(d.endsWith(`.${r}`))return d;return`${d}.${r}`}toCloudflareRecord(t,e){let r={type:t.type,name:this.getFullRecordName(t.name,e),content:t.content||t.value||"",ttl:t.ttl||1};if(t.type==="MX"&&t.priority!==void 0)r.priority=t.priority;if(t.type==="SRV"){if(t.priority!==void 0)r.priority=t.priority}return r}fromCloudflareRecord(t){return{id:t.id,name:t.name,type:t.type,content:t.content,ttl:t.ttl,priority:t.priority}}async createRecord(t,e){try{let r=await this.getZoneId(t),d=this.toCloudflareRecord(e,t);return{success:!0,id:(await this.request("POST",`/zones/${r}/dns_records`,d)).result.id,message:"Record created successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async upsertRecord(t,e){try{let r=await this.getZoneId(t),d=this.getFullRecordName(e.name,t),E=await this.request("GET",`/zones/${r}/dns_records?type=${e.type}&name=${encodeURIComponent(d)}`),n=this.toCloudflareRecord(e,t);if(E.result&&E.result.length>0){let _=E.result[0].id;return{success:!0,id:(await this.request("PUT",`/zones/${r}/dns_records/${_}`,n)).result.id,message:"Record updated successfully"}}return{success:!0,id:(await this.request("POST",`/zones/${r}/dns_records`,n)).result.id,message:"Record created successfully"}}catch(r){return this.createRecord(t,e)}}async deleteRecord(t,e){try{let r=await this.getZoneId(t),d=this.getFullRecordName(e.name,t),E=await this.request("GET",`/zones/${r}/dns_records?type=${e.type}&name=${encodeURIComponent(d)}`);if(!E.result||E.result.length===0)return{success:!1,message:"Record not found"};let n=E.result.find((c)=>c.content===e.content);if(!n)return{success:!1,message:"Record with matching content not found"};return await this.request("DELETE",`/zones/${r}/dns_records/${n.id}`),{success:!0,message:"Record deleted successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async listRecords(t,e){try{let d=`/zones/${await this.getZoneId(t)}/dns_records?per_page=100`;if(e)d+=`&type=${e}`;let E=[],n=1,c=!0;while(c){let _=await this.request("GET",`${d}&page=${n}`);if(E.push(..._.result||[]),_.result_info)c=n<_.result_info.total_pages,n++;else c=!1}return{success:!0,records:E.map((_)=>this.fromCloudflareRecord(_))}}catch(r){return{success:!1,records:[],message:r instanceof Error?r.message:"Unknown error"}}}async canManageDomain(t){try{return await this.getZoneId(t),!0}catch{return!1}}async listDomains(){try{let t=[],e=1,r=!0;while(r){let d=await this.request("GET",`/zones?per_page=50&page=${e}`);if(t.push(...d.result||[]),d.result_info)r=e<d.result_info.total_pages,e++;else r=!1}return t.map((d)=>d.name)}catch{return[]}}async getZoneDetails(t){try{let e=await this.getZoneId(t),r=await this.request("GET",`/zones/${e}`);return{id:r.result.id,name:r.result.name,status:r.result.status,nameServers:r.result.name_servers,paused:r.result.paused}}catch{return null}}async purgeCache(t,e){try{let r=await this.getZoneId(t),d={};if(e?.purgeEverything)d.purge_everything=!0;else{if(e?.files)d.files=e.files;if(e?.tags)d.tags=e.tags;if(e?.hosts)d.hosts=e.hosts}if(Object.keys(d).length===0)d.purge_everything=!0;return await this.request("POST",`/zones/${r}/purge_cache`,d),!0}catch{return!1}}async getRecordProxyStatus(t,e){try{let r=await this.getZoneId(t),d=this.getFullRecordName(e.name,t),E=await this.request("GET",`/zones/${r}/dns_records?type=${e.type}&name=${encodeURIComponent(d)}`);if(E.result&&E.result.length>0)return E.result.find((c)=>c.content===e.content)?.proxied??null;return null}catch{return null}}async setRecordProxyStatus(t,e,r){try{let d=await this.getZoneId(t),E=this.getFullRecordName(e.name,t),n=await this.request("GET",`/zones/${d}/dns_records?type=${e.type}&name=${encodeURIComponent(E)}`);if(!n.result||n.result.length===0)return!1;let c=n.result.find((_)=>_.content===e.content);if(!c)return!1;return await this.request("PATCH",`/zones/${d}/dns_records/${c.id}`,{proxied:r}),!0}catch{return!1}}}i_();class nh{name="route53";client;hostedZoneCache=new Map;providedHostedZoneId;constructor(t="us-east-1",e){this.client=new Kd(t),this.providedHostedZoneId=e}getRootDomain(t){let e=t.replace(/\.$/,"").split(".");if(e.length>=2)return e.slice(-2).join(".");return t}async getHostedZoneId(t){if(this.providedHostedZoneId)return this.providedHostedZoneId;let e=this.getRootDomain(t),r=this.hostedZoneCache.get(e);if(r)return r;let d=await this.client.findHostedZoneForDomain(t);if(d){let E=d.Id.replace("/hostedzone/","");return this.hostedZoneCache.set(e,E),E}return null}normalizeName(t,e){let r=t.replace(/\.$/,""),d=e.replace(/\.$/,"");if(!d||d==="@")return`${r}.`;if(d===r||d.endsWith(`.${r}`))return`${d}.`;return`${d}.${r}.`}async createRecord(t,e){try{let r=await this.getHostedZoneId(t);if(!r)return{success:!1,message:`No hosted zone found for domain: ${t}`};let d=this.normalizeName(t,e.name),E=e.content;if(e.type==="TXT"&&!E.startsWith('"'))E=`"${E}"`;if(e.type==="MX"&&e.priority!==void 0)E=`${e.priority} ${E}`;return{success:!0,id:(await this.client.changeResourceRecordSets({HostedZoneId:r,ChangeBatch:{Comment:"Created by ts-cloud DNS provider",Changes:[{Action:"CREATE",ResourceRecordSet:{Name:d,Type:e.type,TTL:e.ttl||300,ResourceRecords:[{Value:E}]}}]}})).ChangeInfo?.Id,message:"Record created successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async upsertRecord(t,e){try{let r=await this.getHostedZoneId(t);if(!r)return{success:!1,message:`No hosted zone found for domain: ${t}`};let d=this.normalizeName(t,e.name),E=e.content;if(e.type==="TXT"&&!E.startsWith('"'))E=`"${E}"`;if(e.type==="MX"&&e.priority!==void 0)E=`${e.priority} ${E}`;return{success:!0,id:(await this.client.changeResourceRecordSets({HostedZoneId:r,ChangeBatch:{Comment:"Upserted by ts-cloud DNS provider",Changes:[{Action:"UPSERT",ResourceRecordSet:{Name:d,Type:e.type,TTL:e.ttl||300,ResourceRecords:[{Value:E}]}}]}})).ChangeInfo?.Id,message:"Record upserted successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async deleteRecord(t,e){try{let r=await this.getHostedZoneId(t);if(!r)return{success:!1,message:`No hosted zone found for domain: ${t}`};let d=this.normalizeName(t,e.name),E=e.content;if(e.type==="TXT"&&!E.startsWith('"'))E=`"${E}"`;if(e.type==="MX"&&e.priority!==void 0)E=`${e.priority} ${E}`;return await this.client.changeResourceRecordSets({HostedZoneId:r,ChangeBatch:{Comment:"Deleted by ts-cloud DNS provider",Changes:[{Action:"DELETE",ResourceRecordSet:{Name:d,Type:e.type,TTL:e.ttl||300,ResourceRecords:[{Value:E}]}}]}}),{success:!0,message:"Record deleted successfully"}}catch(r){return{success:!1,message:r instanceof Error?r.message:"Unknown error"}}}async listRecords(t,e){try{let r=await this.getHostedZoneId(t);if(!r)return{success:!1,records:[],message:`No hosted zone found for domain: ${t}`};let d=await this.client.listResourceRecordSets({HostedZoneId:r,StartRecordType:e}),E=[];for(let n of d.ResourceRecordSets){if(e&&n.Type!==e)continue;if(n.AliasTarget)continue;for(let c of n.ResourceRecords||[]){let _=c.Value,i;if(n.Type==="MX"){let T=_.split(" ");if(T.length>=2)i=Number.parseInt(T[0],10),_=T.slice(1).join(" ")}if(n.Type==="TXT"&&_.startsWith('"')&&_.endsWith('"'))_=_.slice(1,-1);E.push({name:n.Name.replace(/\.$/,""),type:n.Type,content:_,ttl:n.TTL,priority:i})}}return{success:!0,records:E}}catch(r){return{success:!1,records:[],message:r instanceof Error?r.message:"Unknown error"}}}async canManageDomain(t){return await this.getHostedZoneId(t)!==null}async listDomains(){try{return(await this.client.listHostedZones()).HostedZones.map((e)=>e.Name.replace(/\.$/,""))}catch{return[]}}getRoute53Client(){return this.client}async createAliasRecord(t){try{let e=await this.getHostedZoneId(t.domain);if(!e)return{success:!1,message:`No hosted zone found for domain: ${t.domain}`};return{success:!0,id:(await this.client.createAliasRecord({HostedZoneId:e,Name:this.normalizeName(t.domain,t.name),TargetHostedZoneId:t.targetHostedZoneId,TargetDNSName:t.targetDnsName,EvaluateTargetHealth:t.evaluateTargetHealth,Type:t.type})).ChangeInfo?.Id,message:"Alias record created successfully"}}catch(e){return{success:!1,message:e instanceof Error?e.message:"Unknown error"}}}async createCloudFrontAlias(t){return this.createAliasRecord({domain:t.domain,name:t.name,targetHostedZoneId:Kd.CloudFrontHostedZoneId,targetDnsName:t.cloudFrontDomainName,evaluateTargetHealth:!1})}async createAlbAlias(t){let e=Kd.ALBHostedZoneIds[t.region];if(!e)return{success:!1,message:`Unknown region for ALB: ${t.region}`};return this.createAliasRecord({domain:t.domain,name:t.name,targetHostedZoneId:e,targetDnsName:t.albDnsName,evaluateTargetHealth:!0})}}function $_(t){switch(t.provider){case"route53":return new nh(t.region,t.hostedZoneId);case"porkbun":return new dc(t.apiKey,t.secretKey);case"godaddy":return new dh(t.apiKey,t.apiSecret,t.environment);case"cloudflare":return new Eh(t.apiToken);default:throw Error(`Unknown DNS provider: ${t.provider}`)}}class ZD{providers=new Map;configs=[];addConfig(t){return this.configs.push(t),this}addRoute53(t,e){return this.configs.push({provider:"route53",region:t,hostedZoneId:e}),this}addPorkbun(t,e){return this.configs.push({provider:"porkbun",apiKey:t,secretKey:e}),this}addGoDaddy(t,e,r){return this.configs.push({provider:"godaddy",apiKey:t,apiSecret:e,environment:r}),this}addCloudflare(t){return this.configs.push({provider:"cloudflare",apiToken:t}),this}loadFromEnv(){if(process.env.AWS_ACCESS_KEY_ID||process.env.AWS_REGION)this.addRoute53(process.env.AWS_REGION);let t=process.env.PORKBUN_API_KEY,e=process.env.PORKBUN_SECRET_KEY;if(t&&e)this.addPorkbun(t,e);let r=process.env.GODADDY_API_KEY,d=process.env.GODADDY_API_SECRET;if(r&&d){let n=process.env.GODADDY_ENVIRONMENT;this.addGoDaddy(r,d,n)}let E=process.env.CLOUDFLARE_API_TOKEN;if(E)this.addCloudflare(E);return this}getProvider(t){let e=this.providers.get(t);if(e)return e;let r=this.configs.find((E)=>E.provider===t);if(!r)return null;let d=$_(r);return this.providers.set(t,d),d}async getProviderForDomain(t){for(let e of this.configs){let r=$_(e);if(await r.canManageDomain(t))return r}return null}getAllProviders(){return this.configs.map((t)=>$_(t))}}var L4=new ZD;kD();At();class y_{client;region;constructor(t="us-east-1",e){this.region=t,this.client=new dt(void 0,{profile:e})}async describeServices(t){let e={cluster:t.cluster,services:t.services};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeServices","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async listServices(t,e={}){let r={cluster:t,...e};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListServices","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(r)})}async listTasks(t,e,r={}){let d={cluster:t,...r};if(e)d.serviceName=e;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListTasks","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(d)})}async describeTasks(t,e){let r={cluster:t,tasks:e};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeTasks","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(r)})}async updateService(t){let e={cluster:t.cluster,service:t.service};if(t.forceNewDeployment!==void 0)e.forceNewDeployment=t.forceNewDeployment;if(t.desiredCount!==void 0)e.desiredCount=t.desiredCount;if(t.taskDefinition)e.taskDefinition=t.taskDefinition;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.UpdateService","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async createService(t){let e={cluster:t.cluster,serviceName:t.serviceName,taskDefinition:t.taskDefinition,desiredCount:t.desiredCount};if(t.launchType)e.launchType=t.launchType;if(t.networkConfiguration)e.networkConfiguration=t.networkConfiguration;if(t.loadBalancers)e.loadBalancers=t.loadBalancers;if(t.healthCheckGracePeriodSeconds!==void 0)e.healthCheckGracePeriodSeconds=t.healthCheckGracePeriodSeconds;if(t.deploymentConfiguration)e.deploymentConfiguration=t.deploymentConfiguration;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.CreateService","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async deleteService(t){let e={cluster:t.cluster,service:t.service};if(t.force!==void 0)e.force=t.force;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DeleteService","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async listClusters(t={}){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListClusters","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async describeClusters(t){let e={clusters:t,include:["ATTACHMENTS","CONFIGURATIONS","SETTINGS","STATISTICS","TAGS"]};return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeClusters","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async stopTask(t){let e={cluster:t.cluster,task:t.task};if(t.reason)e.reason=t.reason;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.StopTask","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async runTask(t){let e={cluster:t.cluster,taskDefinition:t.taskDefinition};if(t.count!==void 0)e.count=t.count;if(t.launchType)e.launchType=t.launchType;if(t.networkConfiguration)e.networkConfiguration=t.networkConfiguration;if(t.overrides)e.overrides=t.overrides;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.RunTask","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async registerTaskDefinition(t){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.RegisterTaskDefinition","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async deregisterTaskDefinition(t){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DeregisterTaskDefinition","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({taskDefinition:t})})}async describeTaskDefinition(t){return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.DescribeTaskDefinition","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({taskDefinition:t,include:["TAGS"]})})}async listTaskDefinitionFamilies(t){let e={};if(t?.familyPrefix)e.familyPrefix=t.familyPrefix;if(t?.status)e.status=t.status;return await this.client.request({service:"ecs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AmazonEC2ContainerServiceV20141113.ListTaskDefinitionFamilies","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async waitForServiceStable(t,e,r=40,d=15000){for(let E=0;E<r;E++){let c=(await this.describeServices({cluster:t,services:[e]})).services?.[0];if(c){let _=c.deployments?.find((i)=>i.status==="PRIMARY");if(_&&_.runningCount===_.desiredCount&&c.deployments?.length===1)return!0}await new Promise((_)=>setTimeout(_,d))}return!1}async forceNewDeployment(t,e){return this.updateService({cluster:t,service:e,forceNewDeployment:!0})}async scaleService(t,e,r){return this.updateService({cluster:t,service:e,desiredCount:r})}}At();mT();pT();At();At();class pd{client;region;constructor(t="us-east-1",e){this.region=t,this.client=new dt}async createQueue(t){let r={Action:"CreateQueue",QueueName:t.fifo&&!t.queueName.endsWith(".fifo")?`${t.queueName}.fifo`:t.queueName,Version:"2012-11-05"},d=1;if(t.visibilityTimeout!==void 0)r[`Attribute.${d}.Name`]="VisibilityTimeout",r[`Attribute.${d}.Value`]=t.visibilityTimeout.toString(),d++;if(t.messageRetentionPeriod!==void 0)r[`Attribute.${d}.Name`]="MessageRetentionPeriod",r[`Attribute.${d}.Value`]=t.messageRetentionPeriod.toString(),d++;if(t.delaySeconds!==void 0)r[`Attribute.${d}.Name`]="DelaySeconds",r[`Attribute.${d}.Value`]=t.delaySeconds.toString(),d++;if(t.maxMessageSize!==void 0)r[`Attribute.${d}.Name`]="MaximumMessageSize",r[`Attribute.${d}.Value`]=t.maxMessageSize.toString(),d++;if(t.receiveMessageWaitTime!==void 0)r[`Attribute.${d}.Name`]="ReceiveMessageWaitTimeSeconds",r[`Attribute.${d}.Value`]=t.receiveMessageWaitTime.toString(),d++;if(t.fifo){if(r[`Attribute.${d}.Name`]="FifoQueue",r[`Attribute.${d}.Value`]="true",d++,t.contentBasedDeduplication)r[`Attribute.${d}.Name`]="ContentBasedDeduplication",r[`Attribute.${d}.Value`]="true",d++}if(t.deadLetterTargetArn&&t.maxReceiveCount)r[`Attribute.${d}.Name`]="RedrivePolicy",r[`Attribute.${d}.Value`]=JSON.stringify({deadLetterTargetArn:t.deadLetterTargetArn,maxReceiveCount:t.maxReceiveCount}),d++;if(t.tags&&Object.keys(t.tags).length>0){let n=1;for(let[c,_]of Object.entries(t.tags))r[`Tag.${n}.Key`]=c,r[`Tag.${n}.Value`]=_,n++}let E=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()});return{QueueUrl:E.QueueUrl||E.CreateQueueResult?.QueueUrl}}async listQueues(t){let e={Action:"ListQueues",Version:"2012-11-05"};if(t)e.QueueNamePrefix=t;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()}),d=[];if(r.QueueUrl)d.push(r.QueueUrl);else if(r.ListQueuesResult?.QueueUrl)if(Array.isArray(r.ListQueuesResult.QueueUrl))d.push(...r.ListQueuesResult.QueueUrl);else d.push(r.ListQueuesResult.QueueUrl);return{QueueUrls:d}}async getQueueAttributes(t){let e={Action:"GetQueueAttributes",QueueUrl:t,Version:"2012-11-05","AttributeName.1":"All"},r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()});return{Attributes:r.Attributes||r.GetQueueAttributesResult?.Attributes||{}}}async getQueueUrl(t){let e={Action:"GetQueueUrl",QueueName:t,Version:"2012-11-05"},r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()});return{QueueUrl:r.QueueUrl||r.GetQueueUrlResult?.QueueUrl}}async deleteQueue(t){let e={Action:"DeleteQueue",QueueUrl:t,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()})}async purgeQueue(t){let e={Action:"PurgeQueue",QueueUrl:t,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()})}async sendMessage(t){let e={Action:"SendMessage",QueueUrl:t.queueUrl,MessageBody:t.messageBody,Version:"2012-11-05"};if(t.delaySeconds!==void 0)e.DelaySeconds=t.delaySeconds;if(t.messageGroupId)e.MessageGroupId=t.messageGroupId;if(t.messageDeduplicationId)e.MessageDeduplicationId=t.messageDeduplicationId;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()});return{MessageId:r.MessageId||r.SendMessageResult?.MessageId}}async receiveMessages(t){let e={Action:"ReceiveMessage",QueueUrl:t.queueUrl,Version:"2012-11-05"};if(t.maxMessages!==void 0)e.MaxNumberOfMessages=t.maxMessages;if(t.visibilityTimeout!==void 0)e.VisibilityTimeout=t.visibilityTimeout;if(t.waitTimeSeconds!==void 0)e.WaitTimeSeconds=t.waitTimeSeconds;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(e).toString()}),d=[],E=r.Message||r.ReceiveMessageResult?.Message;if(E)if(Array.isArray(E))d.push(...E.map((n)=>({MessageId:n.MessageId,ReceiptHandle:n.ReceiptHandle,Body:n.Body})));else d.push({MessageId:E.MessageId,ReceiptHandle:E.ReceiptHandle,Body:E.Body});return{Messages:d}}async deleteMessage(t,e){let r={Action:"DeleteMessage",QueueUrl:t,ReceiptHandle:e,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()})}}At();import{deflateRawSync as za}from"zlib";function bD(t,e){let r=typeof e==="string"?Buffer.from(e,"utf-8"):e,d=za(r),E=Fa(r),n=new Date,c=(n.getHours()<<11|n.getMinutes()<<5|n.getSeconds()>>1)&65535,_=(n.getFullYear()-1980<<9|n.getMonth()+1<<5|n.getDate())&65535,i=Buffer.from(t,"utf-8"),T=Buffer.alloc(30+i.length);T.writeUInt32LE(67324752,0),T.writeUInt16LE(20,4),T.writeUInt16LE(0,6),T.writeUInt16LE(8,8),T.writeUInt16LE(c,10),T.writeUInt16LE(_,12),T.writeUInt32LE(E,14),T.writeUInt32LE(d.length,18),T.writeUInt32LE(r.length,22),T.writeUInt16LE(i.length,26),T.writeUInt16LE(0,28),i.copy(T,30);let h=Buffer.alloc(46+i.length);h.writeUInt32LE(33639248,0),h.writeUInt16LE(20,4),h.writeUInt16LE(20,6),h.writeUInt16LE(0,8),h.writeUInt16LE(8,10),h.writeUInt16LE(c,12),h.writeUInt16LE(_,14),h.writeUInt32LE(E,16),h.writeUInt32LE(d.length,20),h.writeUInt32LE(r.length,24),h.writeUInt16LE(i.length,28),h.writeUInt16LE(0,30),h.writeUInt16LE(0,32),h.writeUInt16LE(0,34),h.writeUInt16LE(0,36),h.writeUInt32LE(0,38),h.writeUInt32LE(0,42),i.copy(h,46);let R=T.length+d.length,N=h.length,A=Buffer.alloc(22);return A.writeUInt32LE(101010256,0),A.writeUInt16LE(0,4),A.writeUInt16LE(0,6),A.writeUInt16LE(1,8),A.writeUInt16LE(1,10),A.writeUInt32LE(N,12),A.writeUInt32LE(R,16),A.writeUInt16LE(0,20),Buffer.concat([T,d,h,A])}function Fa(t){let e=[];for(let d=0;d<256;d++){let E=d;for(let n=0;n<8;n++)E=E&1?3988292384^E>>>1:E>>>1;e[d]=E}let r=4294967295;for(let d=0;d<t.length;d++)r=e[(r^t[d])&255]^r>>>8;return(r^4294967295)>>>0}class Er{client;region;constructor(t="us-east-1",e){this.region=t,this.client=new dt(void 0,{profile:e})}async createFunction(t){return await this.client.request({service:"lambda",region:this.region,method:"POST",path:"/2015-03-31/functions",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async getFunction(t){return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2015-03-31/functions/${encodeURIComponent(t)}`,headers:{"Content-Type":"application/json"}})}async updateFunctionCode(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(e)}/code`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async updateFunctionCodeInline(t,e,r="index.js"){let d=bD(r,e);return this.updateFunctionCode({FunctionName:t,ZipFile:d.toString("base64")})}async updateFunctionConfiguration(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(e)}/configuration`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async deleteFunction(t){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2015-03-31/functions/${encodeURIComponent(t)}`,headers:{"Content-Type":"application/json"}})}async invoke(t){let{FunctionName:e,InvocationType:r="RequestResponse",Payload:d,LogType:E}=t,n={"Content-Type":"application/json","X-Amz-Invocation-Type":r};if(E)n["X-Amz-Log-Type"]=E;let c=d?typeof d==="string"?d:JSON.stringify(d):void 0,_=await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(e)}/invocations`,headers:n,body:c,returnHeaders:!0});return{StatusCode:_.statusCode||200,FunctionError:_.headers?.["x-amz-function-error"],LogResult:_.headers?.["x-amz-log-result"],Payload:typeof _.body==="string"?_.body:JSON.stringify(_.body),ExecutedVersion:_.headers?.["x-amz-executed-version"]}}async listFunctions(t){let e={};if(t?.MaxItems)e.MaxItems=String(t.MaxItems);if(t?.Marker)e.Marker=t.Marker;if(t?.FunctionVersion)e.FunctionVersion=t.FunctionVersion;return await this.client.request({service:"lambda",region:this.region,method:"GET",path:"/2015-03-31/functions",queryParams:Object.keys(e).length>0?e:void 0,headers:{"Content-Type":"application/json"}})}async addPermission(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(e)}/policy`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async removePermission(t,e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2015-03-31/functions/${encodeURIComponent(t)}/policy/${encodeURIComponent(e)}`,headers:{"Content-Type":"application/json"}})}async publishVersion(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(e)}/versions`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async createAlias(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(e)}/aliases`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async updateAlias(t){let{FunctionName:e,Name:r,...d}=t;return this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(e)}/aliases/${encodeURIComponent(r)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})}async getAlias(t,e){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2015-03-31/functions/${encodeURIComponent(t)}/aliases/${encodeURIComponent(e)}`})}catch(r){if(/ResourceNotFound/i.test(String(r?.message)))return null;throw r}}async getProvisionedConcurrencyConfig(t,e){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2019-09-30/functions/${encodeURIComponent(t)}/provisioned-concurrency`,queryParams:{Qualifier:e}})}catch(r){if(/ProvisionedConcurrencyConfigNotFound|ResourceNotFound/i.test(String(r?.message)))return null;throw r}}async putProvisionedConcurrencyConfig(t){let{FunctionName:e,Qualifier:r,ProvisionedConcurrentExecutions:d}=t;return this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2019-09-30/functions/${encodeURIComponent(e)}/provisioned-concurrency`,queryParams:{Qualifier:r},headers:{"Content-Type":"application/json"},body:JSON.stringify({ProvisionedConcurrentExecutions:d})})}async deleteProvisionedConcurrencyConfig(t,e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2019-09-30/functions/${encodeURIComponent(t)}/provisioned-concurrency`,queryParams:{Qualifier:e}})}async waitForFunctionActive(t,e=60){let r=Date.now(),d=e*1000;while(Date.now()-r<d)try{let E=await this.getFunction(t),n=E.Configuration?.State;if(n==="Active")return E.Configuration;if(n==="Failed")throw Error(`Function ${t} failed: ${E.Configuration?.StateReason}`);await new Promise((c)=>setTimeout(c,2000))}catch(E){if(E.code==="ResourceNotFoundException"){await new Promise((n)=>setTimeout(n,2000));continue}throw E}throw Error(`Timeout waiting for function ${t} to become active`)}async functionExists(t){try{return await this.getFunction(t),!0}catch(e){if(e.code==="ResourceNotFoundException"||e.statusCode===404)return!1;throw e}}async createFunctionUrl(t){let{FunctionName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2021-10-31/functions/${encodeURIComponent(e)}/url`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async getFunctionUrl(t){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2021-10-31/functions/${encodeURIComponent(t)}/url`,headers:{"Content-Type":"application/json"}})}catch(e){if(e.statusCode===404)return null;throw e}}async deleteFunctionUrl(t){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2021-10-31/functions/${encodeURIComponent(t)}/url`,headers:{"Content-Type":"application/json"}})}async createFunctionWithCode(t){let{Code:e,Filename:r="index.js",...d}=t,E=bD(r,e);return this.createFunction({...d,Code:{ZipFile:E.toString("base64")}})}async addFunctionUrlPermission(t){return this.addPermission({FunctionName:t,StatementId:"FunctionURLAllowPublicAccess",Action:"lambda:InvokeFunctionUrl",Principal:"*",FunctionUrlAuthType:"NONE"})}async publishLayerVersion(t){let{LayerName:e,...r}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2018-10-31/layers/${encodeURIComponent(e)}/versions`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async listLayerVersions(t,e){let r={};if(e?.CompatibleRuntime)r.CompatibleRuntime=e.CompatibleRuntime;if(e?.CompatibleArchitecture)r.CompatibleArchitecture=e.CompatibleArchitecture;if(e?.MaxItems)r.MaxItems=String(e.MaxItems);if(e?.Marker)r.Marker=e.Marker;return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2018-10-31/layers/${encodeURIComponent(t)}/versions`,queryParams:Object.keys(r).length>0?r:void 0,headers:{"Content-Type":"application/json"}})}async getLayerVersion(t,e){return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2018-10-31/layers/${encodeURIComponent(t)}/versions/${e}`,headers:{"Content-Type":"application/json"}})}async addLayerVersionPermission(t){let{LayerName:e,VersionNumber:r,...d}=t;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2018-10-31/layers/${encodeURIComponent(e)}/versions/${r}/policy`,headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})}async deleteLayerVersion(t,e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2018-10-31/layers/${encodeURIComponent(t)}/versions/${e}`,headers:{"Content-Type":"application/json"}})}}At();class X_{client;region;constructor(t="us-east-1",e){this.region=t,this.client=new dt(void 0,{profile:e})}async createLogGroup(t,e){await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.CreateLogGroup","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({logGroupName:t,...e?{tags:e}:{}})})}async putRetentionPolicy(t,e){if(![1,3,5,7,14,30,60,90,120,150,180,365,400,545,731,1096,1827,2192,2557,2922,3288,3653].includes(e))throw Error("Unsupported CloudWatch Logs retention period");await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.PutRetentionPolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({logGroupName:t,retentionInDays:e})})}async describeLogStreams(t){let e={logGroupName:t.logGroupName};if(t.logStreamNamePrefix)e.logStreamNamePrefix=t.logStreamNamePrefix;if(t.orderBy)e.orderBy=t.orderBy;if(t.descending!==void 0)e.descending=t.descending;if(t.limit)e.limit=t.limit;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.DescribeLogStreams","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async getLogEvents(t){let e={logGroupName:t.logGroupName,logStreamName:t.logStreamName};if(t.startTime)e.startTime=t.startTime;if(t.endTime)e.endTime=t.endTime;if(t.limit)e.limit=t.limit;if(t.startFromHead!==void 0)e.startFromHead=t.startFromHead;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.GetLogEvents","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async describeLogGroups(t){let e={};if(t?.logGroupNamePrefix)e.logGroupNamePrefix=t.logGroupNamePrefix;if(t?.limit)e.limit=t.limit;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.DescribeLogGroups","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}async deleteLogGroup(t){await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.DeleteLogGroup","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({logGroupName:t})})}async filterLogEvents(t){let e={logGroupName:t.logGroupName};if(t.logStreamNames)e.logStreamNames=t.logStreamNames;if(t.startTime)e.startTime=t.startTime;if(t.endTime)e.endTime=t.endTime;if(t.filterPattern)e.filterPattern=t.filterPattern;if(t.limit)e.limit=t.limit;return await this.client.request({service:"logs",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"Logs_20140328.FilterLogEvents","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(e)})}}At();At();Bn();At();At();At();At();At();At();At();At();At();At();At();At();class GA{client;region;constructor(t="us-east-1"){this.region=t,this.client=new dt}async request(t,e){return this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AWSEvents.${t}`},body:JSON.stringify(e)})}async putRule(t){return this.request("PutRule",t)}async deleteRule(t){return this.request("DeleteRule",t)}async describeRule(t){return this.request("DescribeRule",t)}async listRules(t){return this.request("ListRules",t||{})}async listEventBuses(t){return this.request("ListEventBuses",t||{})}async enableRule(t){return this.request("EnableRule",t)}async disableRule(t){return this.request("DisableRule",t)}async putTargets(t){return this.request("PutTargets",t)}async removeTargets(t){return this.request("RemoveTargets",t)}async listTargetsByRule(t){return this.request("ListTargetsByRule",t)}async putEvents(t){return this.request("PutEvents",t)}async createSchedule(t){return this.client.request({service:"scheduler",region:this.region,method:"POST",path:`/schedules/${t.Name}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}}At();sT();At();er();er();mT();er();er();At();At();er();At();class VA{client;region;constructor(t="us-east-1"){this.region=t,this.client=new dt}async describeFileSystems(t){let e=[];if(t?.FileSystemId)e.push(`FileSystemId=${encodeURIComponent(t.FileSystemId)}`);if(t?.CreationToken)e.push(`CreationToken=${encodeURIComponent(t.CreationToken)}`);let r=`/2015-02-01/file-systems${e.length>0?`?${e.join("&")}`:""}`;return{FileSystems:((await this.client.request({service:"elasticfilesystem",region:this.region,method:"GET",path:r,headers:{"Content-Type":"application/json"}})).FileSystems||[]).map((E)=>({FileSystemId:E.FileSystemId,Name:E.Name,CreationTime:E.CreationTime,LifeCycleState:E.LifeCycleState,NumberOfMountTargets:E.NumberOfMountTargets,SizeInBytes:E.SizeInBytes?{Value:E.SizeInBytes.Value,Timestamp:E.SizeInBytes.Timestamp}:void 0,PerformanceMode:E.PerformanceMode,Encrypted:E.Encrypted,ThroughputMode:E.ThroughputMode,Tags:E.Tags}))}}}await Wt();await Wt();import{readFileSync as LU}from"node:fs";import{join as uj}from"node:path";function tE(t){if(!t)return;let e=t.trim();if(!e)return;if(!e.includes("/"))return e;let[r]=e.split("/");if(!r.endsWith("::"))return r||void 0;return`${r}1`}er();await Wt();var xD={php:"php.net",nginx:"nginx.org",composer:"getcomposer.org",mysql:"mysql.com",mariadb:"mariadb.com/server",postgres:"postgresql.org",vitess:"vitess.io",etcd:"etcd.io",redis:"redis.io",memcached:"memcached.org",meilisearch:"meilisearch.com",git:"git-scm.com",certbot:"certbot.eff.org",bun:"bun.sh",node:"nodejs.org",deno:"deno.land"};var ve="/opt/pantry";function ch(t){return`'${t.split("'").join("'\\''")}'`}function Ec(t={}){return["export DEBIAN_FRONTEND=noninteractive","export PANTRY_SERVICE_SCOPE=system","export PANTRY_INSTALL_DIR=/usr/local/bin",t.version?`export PANTRY_VERSION=${ch(t.version)}`:'export PANTRY_VERSION="${PANTRY_VERSION:-latest}"',"command -v curl >/dev/null 2>&1 || (apt-get update -y && apt-get install -y curl ca-certificates)","command -v unzip >/dev/null 2>&1 || (apt-get update -y && apt-get install -y unzip)",'OS=$(uname -s | tr \'[:upper:]\' \'[:lower:]\'); ARCH=$(uname -m); case "$ARCH" in x86_64|amd64) ARCH=x64 ;; arm64|aarch64) ARCH=arm64 ;; esac; ZIP="pantry-${OS}-${ARCH}.zip"; if [ "${PANTRY_VERSION:-latest}" = latest ]; then REL=\'latest/download\'; else REL="download/v${PANTRY_VERSION}"; fi; TMP=$(mktemp -d); curl -fsSL -o "${TMP}/${ZIP}" "https://github.com/pantry-pm/pantry/releases/${REL}/${ZIP}"; unzip -o "${TMP}/${ZIP}" -d /usr/local/bin; chmod +x /usr/local/bin/pantry; rm -rf "${TMP}"','export PATH="/usr/local/bin:$PATH"',"mkdir -p /opt/pantry"]}function nc(){return'eval "$(cd /opt/pantry && pantry env 2>/dev/null)" || true'}function eE(t){if(t.length===0)return[];return[`(cd /opt/pantry && pantry install ${[...new Set(t)].map(ch).join(" ")})`]}function _h(t){return[...new Set(t)].flatMap((e)=>[`(cd /opt/pantry && pantry start ${ch(e)})`,`(cd /opt/pantry && pantry enable ${ch(e)})`])}var Dr=`${ve}/pantry/.bin`,kA=15306,KA=15991,ih=15999,qD=16101,hh=2379,ld="/var/lib/vitess",bA=100;function Ja(t){return t===!0||typeof t==="object"&&t!==null}function Ha(t){return typeof t==="object"&&t!==null?t:{}}function ge(t){return`'${String(t).split("'").join("'\\''")}'`}function Wa(t){let r=[t.version?`vitess.io@${t.version}`:"vitess.io"];if(t.mode!=="combo"&&!t.etcdEndpoint)r.push("etcd.io");return r.push("mysql.com@8.0.43"),r}var lr="vitess",va=`${Dr}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin`,pD="/usr/local/lib/vitess",xA=new Map;function ZA(t){return`${pD}/${t}.sh`}function cc(t,e){return xA.set(t,Qa(e)),`/bin/sh ${ZA(t)}`}function sD(){let t=[`mkdir -p ${pD}`];for(let[e,r]of xA)t.push(`cat > ${ZA(e)} <<'TS_CLOUD_VITESS_LAUNCHER_EOF'`,r,"TS_CLOUD_VITESS_LAUNCHER_EOF",`chmod 0755 ${ZA(e)}`);return t}function Qa(t){return["#!/bin/sh","set -e",`cd ${ve}`,`PANTRY_ENV="$(pantry env 2>/dev/null | grep -E '^(export [A-Za-z_]|[A-Za-z_][A-Za-z0-9_]*=)' || true)"`,'if [ -n "$PANTRY_ENV" ]; then eval "$PANTRY_ENV"; fi',`VT_MYSQL_ROOT="$(dirname "$(dirname "$(readlink -f ${Dr}/mysqld 2>/dev/null)")")"`,`VTROOT="$(dirname "$(dirname "$(readlink -f ${Dr}/mysqlctld 2>/dev/null)")")"`,"export VT_MYSQL_ROOT VTROOT",'LD_LIBRARY_PATH="$VT_MYSQL_ROOT/lib:$VTROOT/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"',"export LD_LIBRARY_PATH",`exec ${t.join(" ")}`].join(`
5764
5764
  `)}function _c(t){let e=["[Unit]",`Description=${t.description}`,`After=network.target${t.after?.length?` ${t.after.join(" ")}`:""}`];if(t.requires?.length)e.push(`Requires=${t.requires.join(" ")}`);return e.push("","[Service]","Type=simple",`User=${lr}`,`Group=${lr}`,`Environment="PATH=${va}"`,`Environment="VTDATAROOT=${ld}"`,...Object.entries(t.environment??{}).map(([r,d])=>`Environment="${r}=${d}"`),...(t.execStartPre??[]).map((r)=>`ExecStartPre=${r}`),`ExecStart=${t.execStart}`,"Restart=always","RestartSec=5","LimitNOFILE=65535","","[Install]","WantedBy=multi-user.target"),e.join(`
5765
5765
  `)}function oD(t,e){return[`cat > /etc/systemd/system/${t}.service <<'TS_CLOUD_VITESS_UNIT_EOF'`,e,"TS_CLOUD_VITESS_UNIT_EOF"]}function Ya(t){let e=t.cell??"zone1",r=t.vtgatePort??kA,E=`${((t.keyspaces?.length)?t.keyspaces:[{name:"app"}]).map((n)=>{let c=(n.sharded?["-80","80-"]:["0"]).map((_)=>`shards:{name:"${_}"}`).join(" ");return`keyspaces:{name:"${n.name}" ${c}}`}).join(" ")} cells:"${e}"`;return _c({description:"Vitess (vtcombo, single-process development stack)",execStart:cc("vtcombo",[`${Dr}/vtcombo`,`--cell ${e}`,`--proto-topo ${ge(E)}`,`--mysql-server-port ${r}`,"--mysql-server-bind-address 127.0.0.1","--mysql-auth-server-impl none","--start-mysql",`--port ${KA}`,`--grpc-port ${ih}`])})}function Ma(){return _c({description:"etcd (Vitess topology store)",execStart:cc("etcd",[`${Dr}/etcd`,`--data-dir ${ld}/etcd`,`--listen-client-urls http://127.0.0.1:${hh}`,`--advertise-client-urls http://127.0.0.1:${hh}`]),execStartPre:[`+/bin/mkdir -p ${ld}/etcd`,`+/bin/chown ${lr}:${lr} ${ld}/etcd`]})}function qA(t){return["--topo-implementation etcd2",`--topo-global-server-address ${t.etcdEndpoint??`http://127.0.0.1:${hh}`}`,"--topo-global-root /vitess/global"]}function Ga(t){let e=!t.etcdEndpoint;return _c({description:"Vitess vtctld (control plane)",after:e?["vitess-etcd.service"]:[],requires:e?["vitess-etcd.service"]:[],execStart:cc("vtctld",[`${Dr}/vtctld`,...qA(t),`--cell ${t.cell??"zone1"}`,"--service-map grpc-vtctl,grpc-vtctld",`--grpc-port ${ih}`,`--port ${ih+1}`])})}function Va(t,e,r){let d=t.cell??"zone1";return _c({description:`Vitess vttablet (${e}/${r})`,after:["vitess-vtctld.service","vitess-mysqlctld.service"],requires:["vitess-mysqlctld.service"],execStart:cc("vttablet",[`${Dr}/vttablet`,...qA(t),`--tablet-path ${d}-${String(bA).padStart(10,"0")}`,`--init-keyspace ${e}`,`--init-shard ${r}`,"--init-tablet-type replica",`--service-map ${ge("grpc-queryservice,grpc-tabletmanager,grpc-updatestream")}`,`--port ${qD}`,`--grpc-port ${qD+1}`,`--db-port ${t.mysqlPort??3306}`,`--mycnf-mysql-port ${t.mysqlPort??3306}`])})}function Ka(t){return _c({description:"Vitess mysqlctld (managed mysqld)",execStart:cc("mysqlctld",[`${Dr}/mysqlctld`,`--tablet-uid ${bA}`,`--mysql-port ${t.mysqlPort??3306}`,'--init-db-sql-file "$VTROOT/config/init_db.sql"',"--wait-time 2m"]),execStartPre:[`+/bin/mkdir -p ${ld}`,`+/bin/chown ${lr}:${lr} ${ld}`]})}var Th="/etc/vitess/auth.json";function Za(t){let e=t.username??"vitess",r=t.password??"",d=JSON.stringify({[e]:[{MysqlNativePassword:"",Password:r,UserData:e}]});return["mkdir -p /etc/vitess",`cat > ${Th} <<'TS_CLOUD_VITESS_AUTH_EOF'`,d,"TS_CLOUD_VITESS_AUTH_EOF",`chown ${lr}:${lr} ${Th}`,`chmod 0600 ${Th}`]}function ka(t){let e=t.cell??"zone1";return _c({description:"Vitess vtgate (query router)",after:["vitess-vtctld.service"],execStart:cc("vtgate",[`${Dr}/vtgate`,...qA(t),`--cell ${e}`,`--cells-to-watch ${e}`,"--tablet-types-to-wait PRIMARY,REPLICA",`--service-map ${ge("grpc-vtgateservice")}`,`--mysql-server-port ${t.vtgatePort??kA}`,`--mysql-server-bind-address ${t.bindAddress??"127.0.0.1"}`,"--mysql-auth-server-impl static",`--mysql-auth-server-static-file ${Th}`,`--port ${KA}`,`--grpc-port ${KA+1}`])})}function ba(t){let e=t.cell??"zone1",r=t.etcdEndpoint??`http://127.0.0.1:${hh}`,d=`${Dr}/vtctldclient --server 127.0.0.1:${ih}`,E=[`for i in $(seq 1 30); do ${d} GetCellInfoNames >/dev/null 2>&1 && break; sleep 2; done`,`if ! ${d} GetCellInfoNames 2>/dev/null | grep -qx ${ge(e)}; then`,` ${d} AddCellInfo --root ${ge(`/vitess/${e}`)} --server-address ${ge(r)} ${ge(e)}`,"fi"];for(let n of t.keyspaces??[]){let c=n.sharded?" --sharded":"";E.push(`if ! ${d} GetKeyspace ${ge(n.name)} >/dev/null 2>&1; then`,` ${d} CreateKeyspace${c} ${ge(n.name)}`,"fi");let _=`${e}-${String(bA).padStart(10,"0")}`;for(let i of n.sharded?["-80","80-"]:["0"]){let T=`${n.name}/${i}`;E.push("for i in $(seq 1 90); do",` if ${d} GetShard ${ge(T)} 2>/dev/null | grep -q '"primary_alias": *"[^"]'; then break; fi`,` ${d} PlannedReparentShard ${ge(T)} --new-primary ${ge(_)} >/dev/null 2>&1 && break`,` ${d} InitShardPrimary --force ${ge(T)} ${ge(_)} >/dev/null 2>&1 && break`," sleep 2","done",`if ! ${d} GetShard ${ge(T)} 2>/dev/null | grep -q '"primary_alias": *"[^"]'; then`,` echo "no primary could be elected for ${T}" >&2; exit 1`,"fi")}}return E}function mD(t){let e=t.vtgatePort??kA;return["for i in $(seq 1 60); do",` if (cd ${ve} && eval "$(pantry env 2>/dev/null)"; MYSQL_PWD=${ge(t.password??"")} ${Dr}/mysql -h 127.0.0.1 -P ${e} -u ${ge(t.username??"vitess")} --connect-timeout=2 -e 'SHOW KEYSPACES') >/dev/null 2>&1; then`,` echo "vtgate is serving on ${e}"; exit 0`," fi"," sleep 2","done",`echo "vtgate did not become ready on port ${e}" >&2`,"exit 1"]}function Rh(t){if(!Ja(t))return[];let e=Ha(t),r=e.mode==="combo";xA.clear();let d=[...eE(Wa(e)),`VT_MYSQL_LIB="$(dirname "$(dirname "$(readlink -f ${Dr}/mysqld)")")/lib"`,'if [ -d "$VT_MYSQL_LIB" ]; then',` printf '%s\\n' "$VT_MYSQL_LIB" > /etc/ld.so.conf.d/vitess-mysql.conf`," ldconfig","else",' echo "mysqld library directory not found under $VT_MYSQL_LIB" >&2; exit 1',"fi",`id -u ${lr} >/dev/null 2>&1 || useradd --system --home-dir ${ld} --shell /usr/sbin/nologin ${lr}`,`mkdir -p ${ld}`,`chown -R ${lr}:${lr} ${ld}`];if(r)return d.push(...oD("vitess-vtcombo",Ya(e)),...sD(),"systemctl daemon-reload","systemctl enable --now vitess-vtcombo.service",...mD(e)),d;d.push(...Za(e));let E=[];if(!e.etcdEndpoint)E.push(["vitess-etcd",Ma()]);E.push(["vitess-vtctld",Ga(e)],["vitess-mysqlctld",Ka(e)],["vitess-vtgate",ka(e)]);for(let n of e.keyspaces??[])for(let c of n.sharded?["-80","80-"]:["0"])E.push([`vitess-vttablet-${n.name}-${c.replace(/-/g,"x")}`,Va(e,n.name,c)]);for(let[n,c]of E)d.push(...oD(n,c));d.push(...sD()),d.push("systemctl daemon-reload");for(let[n]of E)d.push(`systemctl enable --now ${n}.service`);return d.push(...ba(e),...mD(e)),d}var xa=new Set(["singlestore","vitess"]);function tU(t){if(t?.engine&&xa.has(t.engine))return!1;return!t?.host||t.host==="127.0.0.1"||t.host==="localhost"}function Tc(t,e="psql"){let r=t?.port??5432;if(tU(t))return`${e} -p ${r} -U postgres`;let d=t?.username||"postgres";return`${t?.password?`PGPASSWORD='${t.password.replace(/'/g,"'\\''")}' `:""}${e} -h ${t.host} -p ${r} -U ${d} -w`}function Dd(t){return t===!0||typeof t==="object"&&t!=null}function qa(t){let e=[],r=[];if(Dd(t.mysql))e.push(typeof t.mysql==="object"&&t.mysql.version?`mysql.com@${t.mysql.version}`:"mysql.com@8.0.43"),r.push("mysql");else if(Dd(t.mariadb))e.push(xD.mariadb),r.push("mariadb");if(Dd(t.postgres))e.push("postgresql.org"),r.push("postgres");if(Dd(t.redis))e.push("redis.io"),r.push("redis");if(Dd(t.memcached))e.push("memcached.org"),r.push("memcached");if(Dd(t.meilisearch))e.push("meilisearch.com"),r.push("meilisearch");return{packages:e,services:r}}function Sh(t={},e={}){let r=qa(t),d=Rh(t.vitess);if(r.packages.length===0)return d;return[...eE(r.packages),..._h(r.services),...d]}function P_(t,e={}){if(!t?.name)return[];if(!tU(t))return[];let r=t.name,d=t.username||r,E=t.password||"",n=Dd(e.postgres)||t.engine==="postgres",c=Dd(e.mariadb)||t.engine==="mariadb",_=Dd(e.mysql)||t.engine==="mysql";if(n&&!_&&!c){let A=(a)=>`"${a.replace(/"/g,'""')}"`,u=(a)=>`'${a.replace(/'/g,"''")}'`,U=(a,j)=>["DO $$ BEGIN",` IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = ${u(a)}) THEN`,` CREATE ROLE ${A(a)} LOGIN PASSWORD ${u(j)};`," ELSE",` ALTER ROLE ${A(a)} LOGIN PASSWORD ${u(j)};`," END IF;","END $$;"],w=(a)=>{let j=a.databases&&a.databases.length>0?a.databases:[r],B=[];for(let F of j)if(a.access==="readonly")B.push(`GRANT CONNECT ON DATABASE ${A(F)} TO ${A(a.username)};`,`\\connect ${A(F)}`,`GRANT USAGE ON SCHEMA public TO ${A(a.username)};`,`GRANT SELECT ON ALL TABLES IN SCHEMA public TO ${A(a.username)};`,`ALTER DEFAULT PRIVILEGES FOR ROLE ${A(d)} IN SCHEMA public GRANT SELECT ON TABLES TO ${A(a.username)};`,"\\connect postgres");else B.push(`GRANT ALL PRIVILEGES ON DATABASE ${A(F)} TO ${A(a.username)};`);return B},l=t.users||[],P=t.port??5432;return[nc(),`for i in $(seq 1 30); do pg_isready -p ${P} -q && break; sleep 2; done`,`${Tc(t)} <<'TS_CLOUD_PG_EOF'`,...U(d,E),`SELECT 'CREATE DATABASE ${A(r)} OWNER ${A(d)}' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = ${u(r)})\\gexec`,...l.flatMap((a)=>[...U(a.username,a.password),...w(a)]),"TS_CLOUD_PG_EOF"]}let i=c?"/var/lib/pantry/mariadb/mariadbd.sock":"/var/lib/pantry/mysql/mysqld.sock",T=(A)=>A.replace(/`/g,"``"),h=(A)=>A.replace(/\\/g,"\\\\").replace(/'/g,"\\'"),R=(A)=>{let u=A.databases&&A.databases.length>0?A.databases:[r],U=A.access==="readonly"?"SELECT":"ALL PRIVILEGES",w=[`CREATE USER IF NOT EXISTS '${h(A.username)}'@'%' IDENTIFIED BY '${h(A.password)}';`,`CREATE USER IF NOT EXISTS '${h(A.username)}'@'localhost' IDENTIFIED BY '${h(A.password)}';`,`ALTER USER '${h(A.username)}'@'%' IDENTIFIED BY '${h(A.password)}';`,`ALTER USER '${h(A.username)}'@'localhost' IDENTIFIED BY '${h(A.password)}';`];for(let l of u)w.push(`GRANT ${U} ON \`${T(l)}\`.* TO '${h(A.username)}'@'%';`,`GRANT ${U} ON \`${T(l)}\`.* TO '${h(A.username)}'@'localhost';`);return w},N=t.users||[];return[nc(),`for i in $(seq 1 30); do mysqladmin --socket=${i} -u root ping 2>/dev/null | grep -q alive && break; sleep 2; done`,`mysql --socket=${i} -u root <<'TS_CLOUD_SQL_EOF'`,`CREATE DATABASE IF NOT EXISTS \`${T(r)}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`,...R({username:d,password:E}),...N.flatMap(R),"FLUSH PRIVILEGES;","TS_CLOUD_SQL_EOF"]}var sA="/var/backups/ts-cloud",sa="/etc/ts-cloud/backups.config.ts",eU="/etc/cron.d/ts-cloud-backups",ic="/usr/local/bin/ts-cloud-backup.sh";function oa(t){if(!t.name)return null;let e=t.host||"127.0.0.1",r=t.engine==="postgres",d=r?"postgresql":"mysql",E=t.port??(r?5432:3306),n=(c)=>c.replace(/\\/g,"\\\\").replace(/'/g,"\\'");return[" {",` type: '${d}',`,` name: '${n(t.name)}',`," connection: {",` hostname: '${n(e)}',`,` port: ${E},`,` database: '${n(t.name)}',`,` username: '${n(t.username||t.name)}',`,` password: '${n(t.password||"")}',`," ssl: false,"," },"," includeSchema: true,"," includeData: true,"," },"].join(`
5766
5766
  `)}function ma(t,e){let r=t?oa(t):null,d=e.bucket?[" destinations: ["," {"," type: 's3',",` bucket: '${e.bucket}',`," prefix: 'db-backups',",...e.endpoint?[` endpoint: '${e.endpoint}',`]:[]," optional: false,"," },"," ],"]:[];return["import type { BackupConfig } from 'ts-backups'","","const config: BackupConfig = {"," verbose: true,",` outputPath: '${sA}',`," retention: {",` count: ${e.retentionCount??5},`,` maxAge: ${e.retentionDays??30},`," },"," databases: [",...r?[r]:[]," ],",...d,"}","","export default config",""].join(`
@@ -47,7 +47,7 @@ import {
47
47
  resolveSiteKind,
48
48
  resolveUiSource,
49
49
  siteInstallBase
50
- } from "./chunk-89kbfd6c.js";
50
+ } from "./chunk-xrsextff.js";
51
51
  import {
52
52
  artifactKey,
53
53
  buildCloudFormationTemplate,
@@ -152,7 +152,7 @@ function buildPantryBootstrapScript(options = {}) {
152
152
  versionLine,
153
153
  "command -v curl >/dev/null 2>&1 || (apt-get update -y && apt-get install -y curl ca-certificates)",
154
154
  "command -v unzip >/dev/null 2>&1 || (apt-get update -y && apt-get install -y unzip)",
155
- `command -v pantry >/dev/null 2>&1 || { ` + `OS=$(uname -s | tr '[:upper:]' '[:lower:]'); ARCH=$(uname -m); ` + `case "$ARCH" in x86_64|amd64) ARCH=x64 ;; arm64|aarch64) ARCH=arm64 ;; esac; ` + `ZIP="pantry-\${OS}-\${ARCH}.zip"; ` + `if [ "\${PANTRY_VERSION:-latest}" = latest ]; then REL='latest/download'; else REL="download/v\${PANTRY_VERSION}"; fi; ` + `TMP=$(mktemp -d); ` + `curl -fsSL -o "\${TMP}/\${ZIP}" "https://github.com/home-lang/pantry/releases/\${REL}/\${ZIP}"; ` + `unzip -o "\${TMP}/\${ZIP}" -d ${PANTRY_INSTALL_DIR}; ` + `chmod +x ${PANTRY_INSTALL_DIR}/pantry; rm -rf "\${TMP}"; }`,
155
+ `OS=$(uname -s | tr '[:upper:]' '[:lower:]'); ARCH=$(uname -m); ` + `case "$ARCH" in x86_64|amd64) ARCH=x64 ;; arm64|aarch64) ARCH=arm64 ;; esac; ` + `ZIP="pantry-\${OS}-\${ARCH}.zip"; ` + `if [ "\${PANTRY_VERSION:-latest}" = latest ]; then REL='latest/download'; else REL="download/v\${PANTRY_VERSION}"; fi; ` + `TMP=$(mktemp -d); ` + `curl -fsSL -o "\${TMP}/\${ZIP}" "https://github.com/pantry-pm/pantry/releases/\${REL}/\${ZIP}"; ` + `unzip -o "\${TMP}/\${ZIP}" -d ${PANTRY_INSTALL_DIR}; ` + `chmod +x ${PANTRY_INSTALL_DIR}/pantry; rm -rf "\${TMP}"`,
156
156
  `export PATH="${PANTRY_INSTALL_DIR}:$PATH"`,
157
157
  `mkdir -p ${PANTRY_PROJECT_DIR}`
158
158
  ];
@@ -30,7 +30,7 @@ import {
30
30
  synchronizeDashboardUsers,
31
31
  trackDashboardOperation,
32
32
  verifyStaticApiOrigin
33
- } from "../chunk-1x4xrdkt.js";
33
+ } from "../chunk-p8hfn83b.js";
34
34
  import {
35
35
  deleteStaticSite,
36
36
  deployStaticSite,
@@ -70,7 +70,7 @@ import {
70
70
  siteInstallBase,
71
71
  validateDeploymentConfig,
72
72
  verifyAddressRecord
73
- } from "../chunk-89kbfd6c.js";
73
+ } from "../chunk-xrsextff.js";
74
74
  import"../chunk-c6db5m63.js";
75
75
  import"../chunk-7m60qnc8.js";
76
76
  import"../chunk-4cjrg98a.js";
@@ -68,7 +68,7 @@ import {
68
68
  waitForSsh,
69
69
  wrapCloudInitUserData,
70
70
  writeResizeCheckpoint
71
- } from "../chunk-89kbfd6c.js";
71
+ } from "../chunk-xrsextff.js";
72
72
  import"../chunk-c6db5m63.js";
73
73
  import"../chunk-7m60qnc8.js";
74
74
  import"../chunk-4cjrg98a.js";
@@ -58,8 +58,8 @@ export interface PantryBootstrapOptions {
58
58
  version?: string;
59
59
  }
60
60
  /**
61
- * Bootstrap the `pantry` CLI on a fresh server (idempotent — skips when already
62
- * present). Installs to {@link PANTRY_INSTALL_DIR} and selects system-scope
61
+ * Bootstrap or upgrade the `pantry` CLI on a server. Installs to
62
+ * {@link PANTRY_INSTALL_DIR} and selects system-scope
63
63
  * service management so `pantry enable/start` provisions boot-time systemd
64
64
  * units rather than the per-user units that can't run headlessly.
65
65
  */
package/dist/index.js CHANGED
@@ -283,7 +283,7 @@ import {
283
283
  volumeCapabilities,
284
284
  webhookEndpoint,
285
285
  zeroCapacity
286
- } from "./chunk-1x4xrdkt.js";
286
+ } from "./chunk-p8hfn83b.js";
287
287
  import {
288
288
  deleteStaticSite,
289
289
  deployStaticSite,
@@ -405,7 +405,7 @@ import {
405
405
  waitForCloudInit,
406
406
  waitForSsh,
407
407
  wrapCloudInitUserData
408
- } from "./chunk-89kbfd6c.js";
408
+ } from "./chunk-xrsextff.js";
409
409
  import {
410
410
  ABTestManager,
411
411
  AI,